博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
042医疗项目-模块四:采购单模块—采购单明细添加查询,并且把数据添加到数据库中...
阅读量:7116 次
发布时间:2019-06-28

本文共 11993 字,大约阅读时间需要 39 分钟。

我们要实现的功能是:

我们上一篇文章中我们看到如上所示:这个列表里面都是空的。我们本文要做的就是往里面添加数据。

 

 

先演示一下流程:

按一下“采购药品添加”按钮执行如下代码:

 

@RequestMapping("/queryaddyycgdmx")public String queryaddyycgdmx(Model model,String yycgdid)throws Exception{    List
yplblis=systemConfigService.findDictinfoByType("001");model.addAttribute("yycgdid", yycgdid);//将采购单id传到页面上model.addAttribute("yplblis", yplblis);return "/business/cgd/queryaddyycgdmx";}

进入到:"/business/cgd/queryaddyycgdmx";页面:

在queryaddyycgdmx.jsp页面看到

 

上面就是流程。显示的数据就是我们能添加到采购单里面的数据。

下面看具体的实现。

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

  我们先写sql语句:

我们可以看到上面的显示包括了:

医院,流水号,通用名,剂型,规格,转换系数,中标价,交易状态,交易价.......等我们要做的就是把这些数据从各自的表里面查找出来。

和之前的在药品控制表里面的思路一样。

1:我们要添加的数据必须是在我们的明细表里面是不存在的。也就是将采购单中已经存在的药品过虑掉,我们可以向 sql中传入采购单id,来实现这个效果

2:只查询医院本区域供货商的药品目录,做法是:向sql中传入医院的区域id。

 

我们要关联的表是:gysypml(供货商的药品目录),gysypml_control(供货商药品目录控制表),ypxx(药品信息表),usergys(供货商表)

因为医院是采购方,采购方要采购的药品是供货商提供的。所以查询的主表是供货商的药品表。

如下:

select   gysypml.id gysypmlid,  usergys.mc,  usergys.id usergysid,  ypxx.bm ypxxbm,  ypxx.scqymc ypxxscqmc,  ypxx.spmc ypxxspmc  from gysypml,gysypml_control,ypxx,usergys  where   gysypml.ypxxid=ypxx.id and gysypml_control.usergysid=usergys.id   and gysypml.ypxxid=gysypml_control.ypxxid   and gysypml.usergysid=gysypml_control.usergysid--在写这个语句的时候没有意识到为什么要gysypml.ypxxid=gysypml_control.                                                    --ypxxid和gysypml.usergysid=gysypml_control.usergysid                                                 --因为ypxxid和usergysid两个一起才是唯一的主键
-- 这边还要再加两个条件。一个是gysypml.usergysid(供货商)是要在本地区的。二是想要添加的供货商的药品id(ypxxid)不存在采购单里面。 and gysypml.usergysid in(  select usergysarea.usergysid from usergysarea where '1.1.16.' like usergysarea.areaid || '%')      --将采购单中药品过虑掉    --2014101040就是采购单id    and gysypml.ypxxid not in(        select yycgdmx.ypxxid from yycgdmx2014 yycgdmx where yycgdmx.yycgdid = '2014101040'    )

 

上面语句的查询结果:

 

 

接下里我们可以写Mapper.xml了。

代码如下:

 

 

这样子就相当于把Dao层写好了。我们接下来就是写Service层,这一层的话我们就要根据Dao层的参数而传入参数。

我们的参数传递永远是先写Dao层,然后从Dao层知道需要的参数,然后在Servce得到那些参数,最后在Acion层中根据Service传入参数。

很明显我们在iDao层是需要医院的id的。因为我们只查询医院本区域供货商的药品目录。

我们还要传入年份,这样才能查找分表。

也就是把这个参数全部封转在封装类中。

Service层:

:

查找采购单详细表的函数

@Override    public List
findAddYycgdmxList(String useryyid, String yycgdid, YycgdQueryVo yycgdQueryVo) throws Exception { Useryy useryy=useryyMapper.selectByPrimaryKey(useryyid);//根据医院的id得到医院的对象 String dq=useryy.getDq();//根据医院的对象得到医院的区域id Useryy useryy2=yycgdQueryVo.getUseryy(); if(useryy2==null) { useryy2=new Useryy(); } useryy2.setDq(dq); yycgdQueryVo.setUseryy(useryy2); YycgdCustom yycgdCustom=yycgdQueryVo.getYycgdCustom(); if(yycgdCustom==null) { yycgdCustom=new YycgdCustom(); } yycgdCustom.setId(yycgdid); String year=yycgdid.substring(0,4); yycgdQueryVo.setBusinessyear(year);//设置年份 yycgdQueryVo.setYycgdCustom(yycgdCustom); List
YycgdmxCustoms=yycgdMapperCustom.findAddYycgdmxList(yycgdQueryVo); return YycgdmxCustoms; }

 

查找采购单详细表的数量的函数(用来分页用的)

 

@Override    public int findAddYycgdmxCount(String useryyid, String yycgdid,            YycgdQueryVo yycgdQueryVo) throws Exception {        Useryy useryy=useryyMapper.selectByPrimaryKey(useryyid);//根据医院的id得到医院的对象        String dq=useryy.getDq();//根据医院的对象得到医院的区域id    Useryy useryy2=yycgdQueryVo.getUseryy();            if(useryy2==null)        {                        useryy2=new Useryy();    }        useryy2.setDq(dq);        yycgdQueryVo.setUseryy(useryy2);                YycgdCustom yycgdCustom=yycgdQueryVo.getYycgdCustom();        if(yycgdCustom==null)        {            yycgdCustom=new YycgdCustom();    }        yycgdCustom.setId(yycgdid);        String year=yycgdid.substring(0,4);        yycgdQueryVo.setBusinessyear(year);//设置年份        yycgdQueryVo.setYycgdCustom(yycgdCustom);        return yycgdMapperCustom.findAddYycgdmxCount(yycgdQueryVo);}

 

 Action层:

// 采购药品添加查询列表结果集,json@RequestMapping("/queryaddyycgdmx_result")public @ResponseBodyDataGridResultInfo queryaddyycgdmx_result(HttpSession session,        String yycgdid,// 采购单id        YycgdQueryVo yycgdQueryVo,// 查询条件        int page, int rows) throws Exception {    // 当前用户    ActiveUser activeUser = (ActiveUser) session            .getAttribute(Config.ACTIVEUSER_KEY);    // 用户所属的单位(医院单位id)    String useryyid = activeUser.getSysid();// 单位id    // 列表的总数    int total = yycdgService.findAddYycgdmxCount(useryyid, yycgdid,yycgdQueryVo);    // 分页参数    PageQuery pageQuery = new PageQuery();    pageQuery.setPageParams(total, rows, page);    yycgdQueryVo.setPageQuery(pageQuery);// 设置分页参数    // 分页查询列表    List
list = yycdgService.findAddYycgdmxList(useryyid,yycgdid, yycgdQueryVo); DataGridResultInfo dataGridResultInfo = new DataGridResultInfo(); dataGridResultInfo.setTotal(total); dataGridResultInfo.setRows(list); return dataGridResultInfo;}

 

 

 

 

 为什么会出现上面的查询结果呢:

因为在queryaddyycgdmx.jsp页面里面有这么一段代码:

 

//datagrid加载function initGrid(){    $('#gysypmllist').datagrid({        title : '供应药品列表',        //nowrap : false,        striped : true,        //collapsible : true,        url : '${baseurl}cgd/queryaddyycgdmx_result.action',         queryParams:{//url的参数,初始加载datagrid时使用的参数             yycgdid:'${yycgdid}'//yycgdid是参数名称,如果参数名称中间有点,将参数用单引号括起来        },        //sortName : 'code',        //sortOrder : 'desc',        //remoteSort : false,        idField : 'gysypmlid',//json数据集的主键        //frozenColumns : frozenColumns,        columns : columns,        pagination : true,        rownumbers : true,        toolbar : toolbar,        loadMsg:"",        pageList:[15,30,50,100]/* ,//设置每页显示个数        onClickRow : function(index, field, value) {                    $('#gysypmllist').datagrid('unselectRow', index);                },        //将加载成功后执行:清除选中的行        onLoadSuccess:function(){            $('#gysypmllist').datagrid('clearSelections');        } */        });

 ${baseurl}cgd/queryaddyycgdmx_result.action',就会调用上面的Action.查到结果后在页面上显示。

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

接下来我们实现把数据插入到数据中:点击”确认添加”。

 

 

 

 

我们选中几个要添加的数据,然后点击确认添加,就可以把数据加入到数据了:

var toolbar = [ {    id : 'addyycgdmx',    text : '确认添加',    iconCls : 'icon-add',    handler : addyycgdmx    }];

这句话的意思是当点击‘确认添加’时执行“addyycgdmx”javascript代码。

如下:

var addyycgdmx = function(){    _confirm('您确定要执行添加选中的药品吗?',null,      function(){        var indexs = [];//定义一个数组准备存放删除记录的序号        //通过jquery easyui的datagrid的getSelections函数,得到当前所有选中的行(对象数组)        var rows = $('#gysypmllist').datagrid('getSelections');        //循环遍历选中行        for(var i=0;i
0){ //将选中的行通过indexs.join(','),将选中行的序号中间以逗号分隔组成一个字符串,调用$("#indexs").val方法,将这个字符串放入indexs对象 $("#indexs").val(indexs.join(',')); //执行ajax的form提交 jquerySubByFId('gysypmlForm', addyycgdmx_callback, null); }else{ alert_warn("请选择要添加的药品"); } } ) };

 

jquerySubByFId('gysypmlForm', addyycgdmx_callback, null);这句话就是把名为“gysypmlForm”的表单提交。 执行的提交网址是: 
在Action 层查找addyycgdmxsubmit:
// 采购单药品添加提交    @RequestMapping("/addyycgdmxsubmit")    public @ResponseBody    SubmitResultInfo addyycgdmxsubmit(            String yycgdid,//采购单id            YycgdQueryVo yycgdQueryVo,            int[] indexs // 页面选择序号            ) throws Exception {                // 页面提交的业务数据(多个),要处理的业务数据,页面中传入的参数        List
list = yycgdQueryVo.getYycgdmxCustoms(); // 处理数据的总数 int count = indexs.length; // 处理成功的数量 int count_success = 0; // 处理失败的数量 int count_error = 0; // 处理失败的原因 List
msgs_error = new ArrayList
(); for (int i = 0; i < count; i++) { ResultInfo resultInfo = null; // 根据选中行的序号获取要处理的业务数据(单个) YycgdmxCustom yycgdmxCustom = list.get(indexs[i]); String ypxxid = yycgdmxCustom.getYpxxid();//药品信息id String usergysid = yycgdmxCustom.getUsergysid();//供货商id try { cgdService.insertYycgdmx(yycgdid, ypxxid, usergysid); } catch (Exception e) { e.printStackTrace(); // 进行异常解析 if (e instanceof ExceptionResultInfo) { resultInfo = ((ExceptionResultInfo) e).getResultInfo(); } else { // 构造未知错误异常 resultInfo = ResultUtil.createFail(Config.MESSAGE, 900, null); } } if (resultInfo == null) { // 说明成功 count_success++; } else { count_error++; // 记录失败原因 msgs_error.add(resultInfo); } } // 提示用户成功数量、失败数量、失败原因 // 改成返回详细信息 return ResultUtil.createSubmitResult( ResultUtil.createSuccess(Config.MESSAGE, 907, new Object[] { count_success, count_error }), msgs_error); }
List
list = yycgdQueryVo.getYycgdmxCustoms();是从页面上传入了多个YycgmxCustom.我们在yycgdQueryVo中需要设一个属性:
public class YycgdQueryVo {    // 接收页面批量参数    private List
yycgdmxCustoms;
 

 

 

我们看一下 cgdService.insertYycgdmx(yycgdid, ypxxid, usergysid):

 

@Override    public void insertYycgdmx(String yycgdid, String ypxxid, String usergysid)            throws Exception {                //根据药品id得到药品信息        Ypxx ypxx = ypxxMapper.selectByPrimaryKey(ypxxid);        if(ypxx == null){            //抛出异常,药品在系统中不存在            //...        }                //校验采购单明细表唯 一约束        Yycgdmx yycgdmx_l = this.findYycgdmxByYycgdidAndYpxxid(yycgdid, ypxxid);        if(yycgdmx_l!=null){            //该药品在采购单中已存在            ResultUtil.throwExcepion(ResultUtil.createFail(Config.MESSAGE, 508, null));        }                        String businessyear = yycgdid.substring(0, 4);        //对比数据表准备、处理数据                Yycgdmx yycgdmx = new Yycgdmx();        //设置年份        yycgdmx.setBusinessyear(businessyear);        yycgdmx.setId(UUIDBuild.getUUID());//主键        yycgdmx.setYycgdid(yycgdid);        yycgdmx.setYpxxid(ypxxid);        yycgdmx.setUsergysid(usergysid);        yycgdmx.setZbjg(ypxx.getZbjg());//中标价格        yycgdmx.setJyjg(ypxx.getZbjg());//本系统交易价格和中标价格相等        yycgdmx.setCgzt("1");//默认1、未确认送货                yycgdmxMapper.insert(yycgdmx);//调用逆向工程自动生成的Mapper去插入数据    }

 

 

 这样就好了。但是不要忘记把yycgdmxMapper.xml中的YYCGDMX改为YYCGDMX${businessyear}。这样就实现了分表。

 
调试结果:

 

 

 

转载地址:http://phfel.baihongyu.com/

你可能感兴趣的文章