我们根据数据库里面的表格:生成对应的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-读取一段文字

    一,效果图. 二,工程图. 三,代码. RootViewController.m #import "RootViewController.h" @interface RootVie ...

  2. android开发中常见布局的注意点

    常见布局的注意点 线性布局: 必须有一个布局方向 水平或者垂直 在垂直布局中 只有左对齐 右对齐 水平居中生效 在水平布局中 只有顶部对齐 底部对齐 垂直居中生效 权重:组件按比例分配屏幕的剩余部分( ...

  3. push notification获取device token

    第一步:申请证书: 第二步:申请app ids,应用名字必须一致.然后再进入进行编辑,使其enable,绿灯. 第三步:申请provisioning profile,生成.mobileprovisio ...

  4. 让UILabel的文字顶部对齐

    参考资料 http://stackoverflow.com/questions/1054558/how-do-i-vertically-align-text-within-a-uilabel 方法一 ...

  5. 关于Linux与windows传递文件乱码问题

    linux下一般是采用utf-8的编码,而我们在windows上编辑文件时是gb2312的编码.所以导致中文编码会乱码.要更正这个问题实际上很简单只要把文件转换成utf-8编码格式然后再导入就ok啦. ...

  6. (转)教你记住ASP.NET WebForm页面的生命周期

    对于ASP.NET Webform的开发者,理解ASP.NET Webform的页面生命周期是非常重要的.主要是为了搞明白在哪里放置特定的方法和在何时设置各种页面属性.但是记忆和理解页面生命周期里提供 ...

  7. 十五天精通WCF——第十天 学会用SvcConfigEditor来简化配置

    我们在玩wcf项目的时候,都是自己手工编写system.serviceModel下面的配置,虽然在webconfig中做wcf的服务配置的时候,vs提供大多 数的代码提示,但对于不太熟悉服务配置的小鸟 ...

  8. 浅谈游标选项 Static|Keyset|DYNAMIC|FAST_FORWARD

    接好久之前太监的一篇Blog.现在补充几个选项的介绍 所用的语句都是这个 IF OBJECT_ID('T1') IS NOT NULL DROP TABLE T1 GO CREATE TABLE T1 ...

  9. java:comp/env/jdbc/ 的两种配置方法

    1. 在 META-INF 下建立文件: context.xml <?xml version="1.0" encoding="UTF-8"?> &l ...

  10. 安装DELL R430服务器的过程记录

    序: 本次需要安装一个ineedle设备给客户用,貌似客户是华三.这次领导比较重视,下血本买了一台DELL服务器,似乎花费了1万多大洋.当然配置是比较高了,CPU:Intel(R) Xeon(R) C ...