zoukankan      html  css  js  c++  java
  • 039医疗项目-模块四:采购单模块—采购单的创建-----------Dao层,service层,Acion层

    我们根据数据库里面的表格:生成对应的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="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="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="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>

    结束。

  • 相关阅读:
    详解Oracle安装与配置.
    如何做大规模软件的配置管理
    关于软件权限设置的一点心得体会
    使用RDLC报表(一)
    详细解析Linux scp命令的应用
    spring propertyplaceholderconfigurer
    hibernate ehcache
    由Eclipse内存不足谈谈JVM内存
    事务策略: API 层策略
    什么叫控制反转(IoC )
  • 原文地址:https://www.cnblogs.com/shenxiaoquan/p/6169075.html
Copyright © 2011-2022 走看看