需求:
我们之前把采购单交给监督单位审核了,审通过的采购单就要受理。供货商决定采购单发不发货。
说明:
我们要查的就是登录的供货商的要提供的采购药品,我们查看的是采购单详细表,至于查询条件我们用的是就是采购单的查询条件,查出来的就是采购单里面的详细采购清单,我们在查询采购单里面的详细清单时是需要有约束条件。
我们设置一个YycgdCust对象。用来做查寻条件用。
如下:
这张单子里面的就是采购单详细表,这儿查出来的数据就只是特定于这个供货商的采购单详细表,一个区域里面只有一个供货商,有好几个医院,每个医院有好多个采购单。那么就是一个供货商有好几个采购单。供货商要看着每一个采购单的明细表才会去处理这个数据要不要发货。
我们先写Mapper:
我们写sql时要参考:
Mapper.xml如下:
<!-- 查询条件
我们之前在在Service传了一个YycdgmxCusom进来,并且这个YycgdmxCusom设置了一些条件,就是为了这里的查询。
-->
<!-- 以表为单位定义sql片段 -->
<!-- 采购单药品明细查询条件 -->
<sql id="query_yycgdmx_where">
<if test="yycgdmxCustom!=null">
<if test="yycgdmxCustom.yycgdid!=null and yycgdmxCustom.yycgdid!=''">
and yycgdmx.yycgdid = #{yycgdmxCustom.yycgdid}
</if>
<!-- 采购状态 -->
<if test="yycgdmxCustom.cgzt!=null and yycgdmxCustom.cgzt!=''">
and yycgdmx.cgzt = #{yycgdmxCustom.cgzt}
</if>
<!-- 供货商 id-->
<if test="yycgdmxCustom.usergysid!=null and yycgdmxCustom.usergysid!=''">
and yycgdmx.usergysid = #{yycgdmxCustom.usergysid}
</if>
</if>
</sql>
<!-- 采购单查询条件 -->
<sql id="query_yycgd_where">
<if test="yycgdCustom!=null">
<if test="yycgdCustom.id!=null and yycgdCustom.id!=''">
and yycgd.id = #{yycgdCustom.id}
</if>
<if test="yycgdCustom.bm!=null and yycgdCustom.bm!=''">
and yycgd.bm = #{yycgdCustom.bm}
</if>
<if test="yycgdCustom.mc!=null and yycgdCustom.mc!=''">
and yycgd.mc like '%${yycgdCustom.mc}%'
</if>
<!-- 采购时间 ,根据采购单创建时间查询 -->
<if test="yycgdCustom.cjtime_start!=null">
and yycgd.cjtime>=#{yycgdCustom.cjtime_start}
</if>
<if test="yycgdCustom.cjtime_end!=null">
<![CDATA[
and yycgd.cjtime<=#{yycgdCustom.cjtime_end}
]]>
</if>
<!-- 根据医院id查询 -->
<if test="yycgdCustom.useryyid!=null and yycgdCustom.useryyid!=''">
and yycgd.useryyid = #{yycgdCustom.useryyid}
</if>
<!-- 采购单状态条件 -->
<if test="yycgdCustom.zt!=null and yycgdCustom.zt!=''">
and yycgd.zt = #{yycgdCustom.zt}
</if>
</if>
</sql>
<!-- 采购单药品明细查询列表 --> <select id="findYycgdmxList" parameterType="yycg.business.pojo.vo.YycgdQueryVo" resultType="yycg.business.pojo.vo.YycgdmxCustom"> <!-- 引入分页头 --> <include refid="yycg.base.commonSql.page_start" /> select yycgdmx.id yycgdmxid, useryy.id useryyid, useryy.mc useryymc, yycgd.bm yycgdbm, yycgd.mc yycgdmc, yycgd.cjtime, (select info from dictinfo where typecode = '010' and dictcode = yycgd.zt) yycgdztmc, ypxx.id, ypxx.bm, ypxx.mc, ypxx.jx, ypxx.gg, ypxx.zhxs, ypxx.scqymc, ypxx.spmc, ypxx.jyzt, (select info from dictinfo where ypxx.jyzt = dictcode and typecode = '003') jyztmc, yycgdmx.zbjg, yycgdmx.jyjg, yycgdmx.cgl, yycgdmx.cgje, yycgdmx.cgzt, (select info from dictinfo where typecode = '011' and dictcode = yycgdmx.cgzt) cgztmc, usergys.mc usergysmc, usergys.id usergysid from yycgdmx${businessyear} yycgdmx, yycgd${businessyear} yycgd, useryy, ypxx, usergys where yycgdmx.yycgdid = yycgd.id and yycgd.useryyid = useryy.id and yycgdmx.ypxxid = ypxx.id and yycgdmx.usergysid = usergys.id <!-- 只查询某个采购单下药品明细 --> <include refid="query_yycgdmx_where" /> <!-- 采购单查询条件 --> <include refid="query_yycgd_where" /> <!-- 药品查询条件 --> <include refid="yycg.business.dao.mapper.YpxxMapperCustom.query_ypxx_where" /> <!-- 分页尾部 --> <include refid="yycg.base.commonSql.page_end" /> </select>
我们之前写过findYycgdmxList。我们这次要做的就是扩展查询条件,使的之前的findYycgdmxList可以继续用。
<!-- 采购单药品明细查询列表总数 --> <select id="findYycgdmxCount" parameterType="yycg.business.pojo.vo.YycgdQueryVo" resultType="int"> select count(*) from yycgdmx${businessyear} yycgdmx, yycgd${businessyear} yycgd, useryy, ypxx, usergys where yycgdmx.yycgdid = yycgd.id and yycgd.useryyid = useryy.id and yycgdmx.ypxxid = ypxx.id and yycgdmx.usergysid = usergys.id <!-- 只查询某个采购单下药品明细 --> <include refid="query_yycgdmx_where" /> <!-- 采购单查询条件 --> <include refid="query_yycgd_where" /> <!-- 药品查询条件 --> <include refid="yycg.business.dao.mapper.YpxxMapperCustom.query_ypxx_where" /> </select>
findYycgdmxCount是对应查数量的,用来分页用的。
Service 如下:
@Override public List<YycgdmxCustom> findDisposeYycgdList(String usergysid, String year, YycgdQueryVo yycgdQueryVo) throws Exception { //判断传机传进来的yycgdQueryVo是不是空的,空的那就新建一个对象。 yycgdQueryVo=yycgdQueryVo!=null?yycgdQueryVo:new YycgdQueryVo();// YycgdmxCustom yycgdmxCustom=yycgdQueryVo.getYycgdmxCustom(); //因为之前那步的YycgdQuery如果是空的话,那么这里的yycgdmxCustom也是空的, //所以如果是空的,那就要重新新建一个对象。 yycgdmxCustom=yycgdmxCustom!=null?yycgdmxCustom:new YycgdmxCustom(); yycgdmxCustom.setUsergysid(usergysid);//设置采购商的id,保证只能查看本采购商的采购单 String cgzt="1"; yycgdmxCustom.setCgzt(cgzt);//传入查询条件,保证采购单里面的采购药品明细状态是“未确认送货” yycgdQueryVo.setYycgdmxCustom(yycgdmxCustom); yycgdQueryVo.setBusinessyear(year); return yycgdMapperCustom.findYycgdmxList(yycgdQueryVo); } @Override public int findDisposeYycgdCount(String usergysid, String year, YycgdQueryVo yycgdQueryVo) throws Exception { //判断传机传进来的yycgdQueryVo是不是空的,空的那就新建一个对象。 yycgdQueryVo=yycgdQueryVo!=null?yycgdQueryVo:new YycgdQueryVo();// YycgdmxCustom yycgdmxCustom=yycgdQueryVo.getYycgdmxCustom(); //因为之前那步的YycgdQuery如果是空的话,那么这里的yycgdmxCustom也是空的, //所以如果是空的,那就要重新新建一个对象。 yycgdmxCustom=yycgdmxCustom!=null?yycgdmxCustom:new YycgdmxCustom(); yycgdmxCustom.setUsergysid(usergysid);//设置采购商的id,保证只能查看本采购商的采购单 String cgzt="1"; yycgdmxCustom.setCgzt(cgzt);//传入查询条件,保证采购单里面的采购药品明细状态是“未确认送货” yycgdQueryVo.setYycgdmxCustom(yycgdmxCustom); yycgdQueryVo.setBusinessyear(year); return yycgdMapperCustom.findYycgdmxCount(yycgdQueryVo); } @Override public void saveSendStatus(String yycgdid, String ypxxid) throws Exception { // 查询出采购药品记录 Yycgdmx yycgdmx = this.findYycgdmxByYycgdidAndYpxxid(yycgdid, ypxxid); if (yycgdmx == null) { // 提示:找到采购药品明细记录 // ... } // 采购状态 String cgzt = yycgdmx.getCgzt(); if (!cgzt.equals("1")) { // 提示:采购药品在未确定 送货时方可发货 // ... } // 设置更新状态为已发货 yycgdmx.setCgzt("2"); // 年份 String year = yycgdid.substring(0, 4); yycgdmx.setBusinessyear(year); yycgdmxMapper.updateByPrimaryKey(yycgdmx); }
Action层:
// 采购单受理页面 @RequestMapping("/disposeyycgd") public String disposeyycgd(Model model) throws Exception { // 当前年份 model.addAttribute("year", MyUtil.get_YYYY(MyUtil.getDate())); return "/business/cgd/disposeyycgd"; }
// 采购单受理列表结果集,json @RequestMapping("/disposeyycgd_result") public @ResponseBody DataGridResultInfo disposeyycgd_result(// HttpSession session, ActiveUser activeUser, String year,// 年份 YycgdQueryVo yycgdQueryVo,// 查询条件 int page, int rows) throws Exception { // 供货商id String usergysid = activeUser.getSysid();// 单位id // 列表的总数 int total = cgdService.findDisposeYycgdCount(usergysid, year, yycgdQueryVo); // 分页参数 PageQuery pageQuery = new PageQuery(); pageQuery.setPageParams(total, rows, page); yycgdQueryVo.setPageQuery(pageQuery);// 设置分页参数 // 分页查询列表 List<YycgdmxCustom> list = cgdService.findDisposeYycgdList(usergysid, year, yycgdQueryVo); DataGridResultInfo dataGridResultInfo = new DataGridResultInfo(); dataGridResultInfo.setTotal(total); dataGridResultInfo.setRows(list); return dataGridResultInfo; }
调试通过。
调试时遇到了问题:
页面如下:
ar columns = [ [ { checkbox:true },{ field : 'id', hidden : true, formatter: function(value,row,index){ return '<input type="hidden" name="yycgdmxCustoms['+index+'].ypxxid" value="'+value+'" />'; } },{ field : 'yycgdid', hidden : true, formatter: function(value,row,index){ return '<input type="hidden" name="yycgdmxCustoms['+index+'].yycgdid" value="'+row.yycgdbm+'" />'; } },
整体代码如下:
<!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"> var yycgddisposesubmit = function(){ _confirm('您确定要对选择的药品发货吗?',null, function(){ var indexs = [];//提交记录的序号 var rows = $('#yycgdmxlist').datagrid('getSelections'); for(var i=0;i<rows.length;i++){ var index=$('#yycgdmxlist').datagrid('getRowIndex',rows[i]); indexs.push(index); } if(rows.length>0){ $("#indexs").val(indexs.join(',')); jquerySubByFId('yycgddisposeForm', yycgddispose_callback, null); }else{ alert_warn("请选择要发货的药品"); } } ) }; function yycgddispose_callback(data) { var result = getCallbackData(data); _alert(result); yycgdmxquery(); } /** * 采购单查看 */ function yycgdinfo(bm){ var sendUrl = "${baseurl}cgd/yycgdview.action?yycgdid="+bm; parent.opentabwindow(bm+'采购单查看',sendUrl);//打开一个新标签 } //工具栏 var toolbar = [{ id : 'yycgddisposesubmit', text : '确认发货', iconCls : 'icon-add', handler : yycgddisposesubmit }]; var frozenColumns; //列的field定义的必须不一样!!! var columns = [ [ { checkbox:true },{ field : 'id', hidden : true, formatter: function(value,row,index){ return '<input type="hidden" name="yycgdmxCustoms['+index+'].ypxxid" value="'+value+'" />'; } },{ field : 'yycgdid', hidden : true, formatter: function(value,row,index){ return '<input type="hidden" name="yycgdmxCustoms['+index+'].yycgdid" value="'+row.yycgdbm+'" />'; } }, { field : 'useryymc', title : '医院名称', width : 100 },{ field : 'yycgdbm', title : '采购单编号', width : 80 },{ field : 'yycgdmc', title : '采购单名称', width : 150 },{ field : 'cjtime', title : '建单时间', width : 80, formatter: function(value,row,index){ if(value){ try{ var date = new Date(value); var y = date.getFullYear(); var m = date.getMonth()+1; var d = date.getDate(); return y+"-"+m+"-"+d; }catch(e){ alert(e); } } } },{ field : 'bm', title : '流水号', width : 50 },{ field : 'mc', title : '通用名', width : 100 },{ field : 'jx', title : '剂型', width : 70 },{ field : 'gg', title : '规格', width : 70 },{ field : 'zhxs', title : '转换系数', width : 50 },{ field : 'zbjg', title : '中标价', width : 50 },{ field : 'jyjg', title : '交易价', width : 50 },{ field : 'cgl', title : '采购量', width : 50 },{ field : 'cgje', title : '采购金额', width : 50 },{ field : 'cgztmc', title : '采购状态', width : 60 },{ field : 'opt3', title : '查看', width : 60, formatter:function(value, row, index){ return '<a href=javascript:yycgdinfo(\''+row.yycgdbm+'\')>查看</a>'; } }]]; function initGrid(){ $('#yycgdmxlist').datagrid({ title : '采购单列表', //nowrap : false, striped : true, //collapsible : true, url : '${baseurl}cgd/disposeyycgd_result.action', queryParams:{//jqueryeasyui提供传参 year:'${year}' }, //sortName : 'code', //sortOrder : 'desc', //remoteSort : false, idField : 'yycgdmxid',//如果值不是主键则影响获取checkbox选中个数 //frozenColumns : frozenColumns, columns : columns, autoRowHeight:true, pagination : true, rownumbers : true, toolbar : toolbar, loadMsg:"", pageList:[15,30,50,100], onClickRow : function(index, field, value) { $('#yycgdmxlist').datagrid('unselectRow', index); } }); } //进入页面执行该方法 $(function() { initGrid(); }); function yycgdmxquery() { var formdata = $("#yycgddisposeForm").serializeJson(); //alert(formdata); $('#yycgdmxlist').datagrid('unselectAll'); $('#yycgdmxlist').datagrid('load', formdata); } $(function(){ //通过dwr加载年份 businessyearlist('year'); }); </script> </HEAD> <BODY> <form id="yycgddisposeForm" name="yycgddisposeForm" method="post" action="${baseurl}cgd/disposesubmit.action"> <input type="hidden" name="indexs" id="indexs" /> <TABLE class="table_search"> <TBODY> <TR> <TD class="left">年份(如2014):</TD> <td ><select id="year" name="year"> </select></td> <TD class="left">医院名称:</TD> <td ><INPUT type="text" name="useryyCustom.mc" /></td> <TD class="left">采购单编号:</td> <td><INPUT type="text" name="yycgdCustom.bm" /></TD> <TD class="left">采购单名称:</TD> <td ><INPUT type="text" name="yycgdCustom.mc" /></td> </TR> <TR> <TD class="left">采购单状态:</TD> <td > 审核通过 </td> <TD class="left">采购时间:</TD> <td > <INPUT id="yycgdCustom.cjtime_start" name="yycgdCustom.cjtime_start" onfocus="WdatePicker({isShowWeek:false,skin:'whyGreen',dateFmt:'yyyy-MM-dd'})" style="width:80px"/>-- <INPUT id="yycgdCustom.cjtime_end" name="yycgdCustom.cjtime_end" onfocus="WdatePicker({isShowWeek:false,skin:'whyGreen',dateFmt:'yyyy-MM-dd'})" style="width:80px"/> </td> <TD class="left">流水号:</TD> <td ><INPUT type="text" name="ypxxCustom.bm" /></td> <TD class="left">通用名:</td> <td><INPUT type="text" name="ypxxCustom.mc" /> <a id="btn" href="#" onclick="yycgdmxquery()" class="easyui-linkbutton" iconCls='icon-search'>查询</a> </TD> </tr> </TBODY> </TABLE> <TABLE border=0 cellSpacing=0 cellPadding=0 width="99%" align=center> <TBODY> <TR> <TD> <table id="yycgdmxlist"></table> </TD> </TR> </TBODY> </TABLE> </form> </BODY> </HTML>
到这里为止采购单模块就结束了,下面其实还有入库的功能,还有退货结算的功能,我们就不讲了。