我们根据数据库里面的表格:生成对应的Mapper接口文件和...Mapperxml文件:

YYCGD:采购单模板表。

YYCGD2014:采购单动态生成表,由存储过程生成。

YYCGDMX:采购单明细模板表。

YYCGDMX2014:采购单明细表,由存储过程生成。

在逆向工程中:

File configFile = new File("generatorConfig-business.xml")

---->

<table schema="" tableName="yycgd" >
        </table>
        
        <table schema="" tableName="yycgdmx" >
           <columnOverride column="zbjg" javaType="java.lang.Float" />
           <columnOverride column="jyjg" javaType="java.lang.Float" />
           <columnOverride column="cgl" javaType="java.lang.Integer" />
           <columnOverride column="cgje" javaType="java.lang.Float" />
        </table>

这么一来,对应的Mapper和Mapperxml文件,和PO类文件就生成了。如下:

PO类:

Mapper接口:

和MapperXML文件:

前面说过我们采用的是分表的方法。所以在逆向工程自动生成的YycgdMapper.xml中把from YYCGD改为from YYCGD${businessyear}我们这样就是在操作动态的数据库表。

这样的话我们可以这么理解了。我们在数据库中可能会生成很多的表(由存储过程创建)比如YYCGD2014,YYCDG2015等。我们就要采用YYCGD${businessyear}这种形式去查找对应的表。

也就是YycgdMapper.java可以应对各种的表。

-----------------------------------------------------------------------------------------------------------------------------------------------------------

正式开始采购单的业务:

我们在创建采购单时,需要填写采购单的基本信息。基本信息填写完成之后,再填写采购单明细信息。

采购单的基本信息填写如下:

采购单基本信息包括:采购年份、采购单名称、建单时间、提交时间、联系人、联系电话、备注、采购单状态。

我们来看一下他的Dao是怎么实现的:

我们针对的就是药品采购单的基本表。我们自定义Mapper:把逆向工程生成的Mapperl接口复制,改为YycgdMapperCusom.java,里面写我们自己的需求。然后把逆向工程生成的YycgdMapper.xml复制生成YycgdMapperCustom.xml文件。里面写我们自己的需求。

需求1:插入一条采购单记录

YycgdMapperCusom.java中我们先写第一个应用:我们要插入采购单记录的话,我们先要构造出采购单的基本信息啊,比如采购单的编号,采购单的状态等等。其他的信息都是

因为我们的药品采购单的采购编号是4位年+6位流水号;

所以我们要想怎么去得到这个采购单编号呢。

我们在PL/SQL中写:

yycgdbm2014就是我们的序列。

select  yycgdbm2014.nextval bm from dual的结果是:

然后我们拼接我们的药品采购单的采购编号是4位年+6位流水号;

select  2014||yycgdbm2014.nextval bm from dual 

结果:

2014100053就是我们的采购单的编号。

当然我们这是写死了年份2014,在后续的开发中我们的年份值是要传进来的。不能这么直接写死了。

所以在Mapperxml中可以这么写:

得到采购单的编号

<mapper namespace=" yycg.business.dao.mapper.YycgdMapperCustom" >

<!-- 动态sql的拼接,相当于当传入的sring 是2014那么语句就变成了
select 2014||yycgdbm2014.nextval bm from dual
查出来的就是拼接而成的采购单的编号 -->
<select id="getYycgdBm" parameterType="string" resultType="string" >
select '${value}'||yycgdbm${value}.nextval bm from dual </select>

Dao层:YycgdMapperCustom.java:

public interface YycgdMapperCustom {
//采购单编号生成
public String getYycgdBm(String year)throws Exception; }

Service 层:

package yycg.business.service.impl;

import java.util.Date;

import org.springframework.beans.factory.annotation.Autowired;

import yycg.business.dao.mapper.YycgdMapper;
import yycg.business.dao.mapper.YycgdMapperCustom;
import yycg.business.pojo.vo.YycgdCustom;
import yycg.business.service.YycdgService; public class YycdgServiceImpl implements YycdgService{
@Autowired
YycgdMapper yycgdMapper;
@Autowired
YycgdMapperCustom yycgdMapperCustom;
/**
* 从页面上传入年份。用这个年份来生成采购单的编号。
* 这里面传入了YycgdCusom这个对象,但是传入的对象里面的属性是不完整的。我们在这个insertYycgd方法里面
* 设置好其余的属性,然后插入到数据库中。
*/
@Override
public void insertYycgd(String useryyid, String year,
YycgdCustom yycgdCustom) throws Exception {
String bm=yycgdMapperCustom.getYycgdBm(year);//生成采购单的编号
yycgdCustom.setBm(bm);//设置采购单的编号
yycgdCustom.setBusinessyear(year);//把年加入,这样就可以在MapperXml中使用这个year.用来拼接
yycgdCustom.setId(bm);//采购单id的主键和bm一致,目的是为了方便操作采购单。
yycgdCustom.setUseryyid(useryyid);//创建采购单医院
yycgdCustom.setCjtime(new Date());//创建时间
yycgdCustom.setZt("1");//设置状态
/*
*调用原生自带的Mapper接口,把这个数据插入到数据库中。
*insert里面的参数是Yycgd。那我们在这里插入的是YycgdCustom类型的
*没事啊,这是多态么,子类就是父类。当然可以把这个数据插入进去。
*
*/
yycgdMapper.insert(yycgdCustom); //调用逆向工程自动生成的Mapper来插入数据 } }

Action层:

总体顺序:先经过Action,进入到addcgd函数,在addcgd函数里面会得到有些数据然后跳转到新增页面(在新增页面上显示刚才得到的数据),然后在新增页面上输入数据。然后跳转到插入函数。

在menu.json中:

{"icon" : "icon-sys","menuid" : "1","menuname" : "采购单管理 ","url" : "","menus" : [
{"icon" : "icon-log","menuid" : "1_1","menuname" : "创建采购单","url" : "/yycgproject/cgd/addcgd.action"
}]

点击按钮之后执行 "/yycgproject/cgd/addcgd.action

/**
*
* @author Sxq
* @Title: addcgd
* @Description:
* 1:得到当前登录单位的名称
* 2:生成采购单的名称
* 3:跳转到新增页面。
* @param @return
* @return String
* @throws
*/
@RequestMapping("/addcgd")
public String addcgd(HttpSession session,Model model)
{
ActiveUser activeUser=(ActiveUser)session.getAttribute(Config.ACTIVEUSER_KEY);
String sysmc=activeUser.getSysmc();//得到所属单位的名称 //准备页面所需要的数据:因为我们在采购单页面上显示两个内容:
//1:药品的采购时间(年)
//2:采购单的名称
//所以我们要把这些数据加入到Modele,然后把这些数据传入到下一个页面。 String yycgdmc=sysmc+MyUtil.getDate()+"采购单";
model.addAttribute("yycgdmc",yycgdmc);
String year=MyUtil.get_YYYY(MyUtil.getDate());//得到年
model.addAttribute("year",year);
return "/business/cgd/addcgd";//跳转到新增页面
}

跳转到新增页面之后,输入数据,然后按下保存按钮。就会进入到提交函数(如下):

    // 创建采购单基本信息保存方法
@RequestMapping("/addcgdsubmit")
public @ResponseBody
SubmitResultInfo addcgdsubmit(HttpSession session, String year,
YycgdQueryVo yycgdQueryVo) throws Exception {
ActiveUser activeUser = (ActiveUser) session
.getAttribute(Config.ACTIVEUSER_KEY);
// 医院id
String useryyid = activeUser.getSysid();
// 获取采购单id
String yycgdid = cgdService.insertYycgd(useryyid, year,
yycgdQueryVo.getYycgdCustom()); ResultInfo resultInfo = ResultUtil.createSuccess(Config.MESSAGE, 906,
null);
// 获取采购单id,将id通过ResultInfo中sysdata传到页面
resultInfo.getSysdata().put("yycgdid", yycgdid); return ResultUtil.createSubmitResult(resultInfo); }

这个提交函数调用完之后会执行jisp页面上的回调函数 。回调函数里面就会跳转到采购单修改页面。

function yycgdsave_callback(data) {
//由服务端统一返回submitResultInfo的json数据,所以客户端统一使用_alert统一解析方法
_alert(data.resultInfo); //获取新添加的采购单的id //alert(data.resultInfo.sysdata.yycgdid);
//在这里必须拿新添加的 采购单的id
if(data.resultInfo.type==TYPE_RESULT_SUCCESS){//如果成功跳转至修改页面
//alert(data.resultInfo.sysdata.yycgdid);
var yycgdid=data.resultInfo.sysdata.yycgdid;
window.location='${baseurl}cgd/editcgd.action?id='+yycgdid;
} }

下面一篇博客就要讲采购单明细表了,就从editcgd.action为入口讲。

到这里基本采购单就创建好了。信息也插入到了数据库中。

数据库信息如下:

--------------------------------------------------------------------------------------------------------------------------------------------

addcgd.jsp页面的代码如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ include file="/WEB-INF/jsp/base/tag.jsp"%>
<html>
<head>
<title>采购单创建</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> <%@ include file="/WEB-INF/jsp/base/common_css.jsp"%>
<%@ include file="/WEB-INF/jsp/base/common_js.jsp"%> <script type="text/javascript"> //采购单保存
function yycgdsave(){
jquerySubByFId('yycgdsaveForm', yycgdsave_callback, null);
}
/**
* 采购单保存回调
* data是服务端响应的数据,服务端统一响应了submitResultInfo对象的json数据
*/
function yycgdsave_callback(data) {
//由服务端统一返回submitResultInfo的json数据,所以客户端统一使用_alert统一解析方法
_alert(data.resultInfo); //获取新添加的采购单的id //alert(data.resultInfo.sysdata.yycgdid);
//在这里必须拿新添加的 采购单的id
if(data.resultInfo.type==TYPE_RESULT_SUCCESS){//如果成功跳转至修改页面
//alert(data.resultInfo.sysdata.yycgdid);
var yycgdid=data.resultInfo.sysdata.yycgdid;
window.location='${baseurl}cgd/editcgd.action?id='+yycgdid;
} } </script>
</HEAD>
<BODY> <form id="yycgdsaveForm" name="yycgdsaveForm" action="${baseurl}cgd/addcgdsubmit.action" method="post">
<TABLE border=0 cellSpacing=0 cellPadding=0 width="70%" bgColor=#c4d8ed align=center>
<TBODY>
<TR>
<TD background=images/r_0.gif width="100%">
<TABLE cellSpacing=0 cellPadding=0 width="100%">
<TBODY>
<TR>
<TD>&nbsp;药品采购单</TD>
<TD align=right>&nbsp;</TD>
</TR>
</TBODY>
</TABLE>
</TD>
</TR>
<TR>
<TD>
<TABLE class="toptable grid" border=1 cellSpacing=1 cellPadding=4
align=center>
<TBODY> <TR> <TD height=30 width="15%" align=right>药品采购年份<br>(如2014):</TD>
<TD class=category width="35%">
${year}
<input type="hidden" name="year" value="${year}" />
</TD>
<TD height=30 width="15%" align=right >采购单名称:</TD>
<TD class=category width="35%">
<div>
<input type="text" id="yycgd_mc" name="yycgdCustom.mc" value="${yycgdmc}" style="width:260px" />
</div>
<div id="yycgd_mcTip"></div>
</TD>
</TR>
<TR>
<TD height=30 width="15%" align=right >建单时间:</TD>
<TD class=category width="35%"> </TD>
<TD height=30 width="15%" align=right >提交时间:</TD>
<TD class=category width="35%"> </TD> </TR>
<TR>
<TD height=30 width="15%" align=right>联系人:</TD>
<TD class=category width="35%">
<input type="text" name="yycgdCustom.lxr" id="yycgdCustom.lxr" style="width:260px" />
</TD>
<TD height=30 width="15%" align=right >联系电话:</TD>
<TD class=category width="35%">
<input type="text" name="yycgdCustom.lxdh" id="yycgdCustom.lxdh" style="width:260px" />
</TD>
</TR>
<TR>
<TD height=30 width="15%" align=right>采购单状态:</TD>
<TD class=category width="35%"> </TD>
<TD height=30 width="15%" align=right>备注:</TD>
<TD colspan=3>
<textarea rows="2" cols="30" name="yycgdCustom.bz"></textarea>
</TD>
</TR> <TR>
<TD height=30 width="15%" align=right>审核时间:</TD>
<TD class=category width="35%"> </TD>
<TD height=30 width="15%" align=right >审核意见:</TD>
<TD class=category width="35%"> </TD>
</TR> <tr>
<td colspan=4 align=center class=category>
<a href="#" onclick="yycgdsave()" class="easyui-linkbutton" iconCls='icon-save'>保存</a> </td>
</tr>
</TBODY>
</TABLE>
</TD>
</TR>
</TBODY>
</TABLE>
</form> </BODY>
</HTML>

结束。

039医疗项目-模块四:采购单模块—采购单的创建-----------Dao层,service层,Acion层的更多相关文章

  1. 模块四-shutil模块

    shutil模块 高级的文件处理模块 主要是文件的处理,移动,压缩和解压缩 shutil模块的使用方法: shutil.copyfile()#拷贝文件 shutil.copy()#拷贝文件和权限 sh ...

  2. 常见模块(四) os模块

    注: os模块是实现python程序对操作系统(operation system)的操作 1.对文件或者目录进行删除或者创建的相关操作 # os.rename("b"," ...

  3. 005医疗项目-模块一:用户的查找:1.用户表查询的sql语句

    这是医疗项目的第一个模块:做一个用户的查询,可以根据用户的账号,用户的名称,单位的名称,用户的类型去查询.要求效果如下:

  4. 044医疗项目-模块四:采购单模块—采购单保存(Dao,Service,Action三层)

    我们上上一篇文章(042医疗项目-模块四:采购单模块-采购单明细添加查询,并且把数据添加到数据库中)做的工作是把数据插入到了数据库,我们这篇文章做的是042医疗项目-模块四:采购单模块-采购单明细添加 ...

  5. 048医疗项目-模块四:采购单模块—采购单受理(Dao,Service,Action三层)

    需求: 我们之前把采购单交给监督单位审核了,审通过的采购单就要受理.供货商决定采购单发不发货. 说明: 我们要查的就是登录的供货商的要提供的采购药品,我们查看的是采购单详细表,至于查询条件我们用的是就 ...

  6. 045医疗项目-模块四:采购单模块—采购单提交(Dao,Service,Action三层)

    我们之前做的就是采购单的编辑,在采购单里面添加了药品,然后我们这篇文章要做的就是说提交这个采购单. 当我们创建完成采购单,确定采购单不再修改,需要提交采购单,由监管单位进行审核. 我们在提交这个采购单 ...

  7. 010医疗项目-模块一:用户添加的实现(Dao,Service,Action,增加页面调试,提交页面调试)

    要实现的效果:

  8. 002医疗项目-主工程模块yycgproject三层构建(三大框架的整合)

    先给出项目结构图:

  9. thinkphp3.2笔记(2)调试模式,配置项C,创建模块, 四种URL模式,URL生成,跳转

    一.调试模式 TP的调试模式其实就控制了TP关于配置信息以及函数的缓存功能 如果开启了调试模式,每次访问项目,Tp都会去加载最新的配置以及函数信息. 如果关闭了调试模式,当tp第一次访问时会降配置以及 ...

随机推荐

  1. 【读书笔记】iOS网络-使用Game Kit实现设备间通信

    Apple的Game Kit框架可以实现没有网络状况下的设备与设备之间的通信,这包括没有蜂窝服务,无法访问Wi-Fi基础设施以及无法访问局域网或Internet等情况.比如在丛林深处,高速公路上或是建 ...

  2. UIScrollView之轮转图片

    在iOS开发中,经常会在APP首页看到多张图片进行轮换.刚开始做的时候,感觉很麻烦,不是很好做,查阅资料后,我总结了一下,自己封装了一个简单的轮转图片库: UIScrollView无限滑动 ,只需要三 ...

  3. iOS 为视图添加抖动效果

    抖动效果在开发中比较少用到,不过有时使用了确有个很好的装逼效果,用的时候就例如一些用户错误操作之类的 效果如下,不过gif看到的效果没实际的好看 上代码 - (void)shakeAnimationF ...

  4. Real-Time Rendering读书辩疑琐记

    At Page 707,5th paragrah.it write:If a normal vector is stored as three 32-bit floats,it has enough ...

  5. windows server 远程连接设置

    1设置远程连接数修改 服务器安装了Windows Server 2008,现在要增加远程连接,开启服务器上的远程桌面连接,使用管理员账户远程登录.默认情况下Windows Server 2008允许一 ...

  6. oracle基础知识

    -- 表 create table test (names varchar2(12),                    dates date,                    num    ...

  7. maven-shade-plugin

    <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> ...

  8. Access 2003 中自定义菜单栏

    在Access中如何用自定义的菜单代替Access自带的菜单,现在做一个简单的介绍: 1.打开您做的Access数据库: 2.单击工具栏,选择“自定义…”: 3.在“自定义”窗口,单击“工具栏”选项卡 ...

  9. 烂泥:gpg加解密软件学习

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb. 为什么要学习gpg呢?因为要在Linux下把一个邮箱的密码加密,不让其他人看到该邮箱真 ...

  10. TFS 2013 生成(构建)历史记录保持策略(Retention Policy)

    TFS服务器通过自动构建,实现软件生成和发布的自动化过程,这一直是TFS系统中非常重要的一个功能模块.近年来发布的TFS版本,都在自动化构建方面大幅增强了相应的功能.在这篇博客里我主要总结TFS 20 ...