Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/action/RecyclingRecordAction.java =================================================================== diff -u -r23992 -r24694 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/action/RecyclingRecordAction.java (.../RecyclingRecordAction.java) (revision 23992) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/action/RecyclingRecordAction.java (.../RecyclingRecordAction.java) (revision 24694) @@ -98,6 +98,7 @@ import com.forgon.disinfectsystem.recyclingrecord.vo.RecyclingContext; import com.forgon.disinfectsystem.recyclingrecord.vo.RecyclingDetailItemVo; import com.forgon.disinfectsystem.recyclingrecord.vo.RecyclingDetailVo; +import com.forgon.disinfectsystem.stockmanage.departmentstock.vo.TousseInstanceVo; import com.forgon.disinfectsystem.tousse.materialdefinition.service.MaterialDefinitionManager; import com.forgon.disinfectsystem.tousse.materialinstance.service.MaterialInstanceManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; @@ -1934,7 +1935,179 @@ StrutsResponseUtils.output(data); } } + /** + * 广州中医药附一回收清单定制方法(@see GZZYYFY-21 装配界面的打印回收清单格式) + * 供应室器械包:取值已回收的申请单中的器械包,器械包定义的装配任务组名称不包含“专科”; + * 专科器械包:取值已回收的申请单中的器械包,器械包定义的装配任务组名称包含“专科”; 并且按科室分组 + * 过滤条件: + * 1.申请单及回收记录的处理科室为指定的供应室 + * 2.开始时间和结束时间对回收时间进行过滤 + * 3.只统计科室名称不含"手术"字眼的科室 + * 4.如果申请单的物品为未回收或申请物品都为不回收则不打印. + * 如果申请单进行了回收(包括已回收和部分回收,对于需要回收的物品则打印已经回收(回收数量大于0)的物品及不回收的物品(不包括一次性物品物品)) + * + * 返回数据格式如下: + { + "success":true, + "message":"相关提示信息", + "supplyRoomTousse":"包1*3、包2*5"、包n*10", + "specializedTousse":[{"departName":"科室1","tousseDetail":"包1*3、包2*5"、包n*10"},{"departName":"科室2","tousseDetail":"包3*3、包4*5"、包n*10"}] + } + */ + public void printRecyclingDetailForGzzyyfy(){ + String fromTime = StrutsParamUtils.getPraramValue("startDateTime",""); + String toTime = StrutsParamUtils.getPraramValue("endDateTime", ""); + String handlerDepartCoding = StrutsParamUtils.getPraramValue("handlerDepartCoding",""); + JSONObject json = JSONUtil.buildJsonObject(false); + if (StringUtils.isNotBlank(fromTime) && StringUtils.isNotBlank(toTime) && StringUtils.isNotBlank(handlerDepartCoding)) { + String supplyRoomTousseKey = "supplyRoomTousse"; + String specializedTousseKey = "specializedTousse"; + fromTime = dateQueryAdapter.dateAdapter(fromTime); + toTime = dateQueryAdapter.dateAdapter(toTime); + + //1.按条件查询符合条件的内容 + String queryCondition = " and rr.orgUnitCoding='"+ handlerDepartCoding +"' " + + "and rr.recyclingTime between "+ fromTime +" and "+ toTime +" " + + "and rr.depart not like '%手术%' "; + ResultSet rs = null; + try{ + String querySql = "select rr.depart,ti.tousseName,ti.amount,ti.recyclingAmount,td.taskGroup " + + " from invoicePlan ip join RecyclingRecord rr on ip.id=rr.recyclingApplication_id " + + " join TousseItem ti on ti.recyclingApplication_ID=ip.id " + + " join TousseDefinition td on td.id=ti.tousseDefinitionId where 1=1 " + queryCondition + + " and (ti.isRecycling = '"+ Constants.STR_NO +"' or ti.recyclingAmount > 0)"; + querySql += " union select rr.depart,ri.tousseName,ri.amount,ri.amount as recyclingAmount,td.taskGroup " + + " from RecyclingRecord rr join RecyclingItem ri on rr.id=ri.recyclingRecord_id " + + " join TousseDefinition td on td.id=ri.tousseDefinitionId " + + " where 1=1 and rr.recyclingApplication_id is null " + queryCondition + + " and ri.amount > 0"; + rs = objectDao.executeSql(querySql); + Map> map = new HashMap>(); + while(rs.next()){ + String taskGroup = rs.getString("taskGroup"); + if(StringUtils.isBlank(taskGroup)){ + continue; + } + Long amount = rs.getLong("amount"); + Long recyclingAmount = rs.getLong("recyclingAmount"); + TousseInstanceVo vo = new TousseInstanceVo(); + vo.setDepart(rs.getString("depart")); + vo.setTousseName(rs.getString("tousseName")); + vo.setAmount(recyclingAmount == null ? amount.intValue() : recyclingAmount.intValue()); + //1.过滤出“供应室器械包”的物品明细,即器械包定义任务组名称不包含"专科" + List supplyRoomTousseList = null; + if(!taskGroup.contains("专科")){ + if(map.containsKey(supplyRoomTousseKey)){ + supplyRoomTousseList = map.get(supplyRoomTousseKey); + boolean existsTousse = false; + for (TousseInstanceVo tousseInstanceVo : supplyRoomTousseList) { + if(StringUtils.equals(tousseInstanceVo.getTousseName(), vo.getTousseName())){ + tousseInstanceVo.setAmount(tousseInstanceVo.getAmount() + vo.getAmount()); + existsTousse = true; + break; + } + } + if(!existsTousse){ + supplyRoomTousseList.add(vo); + } + }else{ + supplyRoomTousseList = new ArrayList(); + supplyRoomTousseList.add(vo); + } + map.put(supplyRoomTousseKey, supplyRoomTousseList); + }else{ + //2.过滤出“专科器械包”,按科室分组查询每个科室的物品明细(同科室的vo明细数据合到一起、同科室又同包名的,则数量叠加到一起) + List specializedTousseList = null; + if(map.containsKey(specializedTousseKey)){ + specializedTousseList = map.get(specializedTousseKey); + boolean existsTousse = false; + for (TousseInstanceVo tousseInstanceVo : specializedTousseList) { + if(StringUtils.equals(tousseInstanceVo.getDepart(), vo.getDepart())){ + if(StringUtils.equals(tousseInstanceVo.getTousseName(), vo.getTousseName())){ + tousseInstanceVo.setAmount(tousseInstanceVo.getAmount() + vo.getAmount()); + existsTousse = true; + break; + } + } + } + if(!existsTousse){ + specializedTousseList.add(vo); + } + }else{ + specializedTousseList = new ArrayList(); + specializedTousseList.add(vo); + } + map.put(specializedTousseKey, specializedTousseList); + } + } + if(map.size() > 0){ + StringBuffer supplyRoomTousseNote = new StringBuffer(); + //供应室器械包 + List list = map.get(supplyRoomTousseKey); + if(CollectionUtils.isNotEmpty(list)){ + for(TousseInstanceVo vo : list){ + if(supplyRoomTousseNote.length() > 0){ + supplyRoomTousseNote.append("、"); + } + supplyRoomTousseNote.append(vo.getTousseName() + "*" + vo.getAmount()); + } + } + JSONUtil.addProperty(json, supplyRoomTousseKey, supplyRoomTousseNote.toString()); + //专科器械包 + list = map.get(specializedTousseKey); + JSONArray jsonArray = new JSONArray(); + if(CollectionUtils.isNotEmpty(list)){ + Map> departTousseMap = new HashedMap>(); + List volist = null; + for (TousseInstanceVo vo : list) { + String depart = vo.getDepart(); + if(departTousseMap.containsKey(vo.getDepart())){ + volist = departTousseMap.get(depart); + }else{ + volist = new ArrayList(); + } + volist.add(vo); + departTousseMap.put(depart, volist); + } + if(departTousseMap.size() > 0){ + for (String departKey : departTousseMap.keySet()) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("departName", departKey); + StringBuffer specializedDepartTousseNote = new StringBuffer(); + List departTousseVolist = departTousseMap.get(departKey); + if(CollectionUtils.isNotEmpty(departTousseVolist)){ + for(TousseInstanceVo vo : departTousseVolist){ + if(specializedDepartTousseNote.length() > 0){ + specializedDepartTousseNote.append("、"); + } + specializedDepartTousseNote.append(vo.getTousseName() + "*" + vo.getAmount()); + } + } + jsonObject.put("tousseDetail", specializedDepartTousseNote.toString()); + jsonArray.add(jsonObject); + } + } + JSONUtil.addProperty(json, specializedTousseKey, jsonArray); + } + JSONUtil.addSuccess(json, true); + }else{ + JSONUtil.addMessage(json, "未找到符合条件的物品"); + } + }catch(RuntimeException e){ + e.printStackTrace(); + JSONUtil.addMessage(json, e.getMessage()); + }catch(Exception e){ + e.printStackTrace(); + JSONUtil.addMessage(json, "后台异常,请稍候再试."); + } + }else{ + JSONUtil.addMessage(json, "查询参数不能为空"); + } + StrutsResponseUtils.output(json); + } + + /** * 东莞中医院回收清单定制方法 */ public void dongGuanZhongYiYuanProcess(){ Index: ssts-stockmanage/src/main/java/com/forgon/disinfectsystem/stockmanage/departmentstock/vo/TousseInstanceVo.java =================================================================== diff -u -r24130 -r24694 --- ssts-stockmanage/src/main/java/com/forgon/disinfectsystem/stockmanage/departmentstock/vo/TousseInstanceVo.java (.../TousseInstanceVo.java) (revision 24130) +++ ssts-stockmanage/src/main/java/com/forgon/disinfectsystem/stockmanage/departmentstock/vo/TousseInstanceVo.java (.../TousseInstanceVo.java) (revision 24694) @@ -37,8 +37,12 @@ public String sterilingType;//灭菌程序 private String isUrgentTousse;//器械包实例是否加急 - + /** + * 任务组 + */ + private String taskGroup; + public String getIsUrgentTousse() { return isUrgentTousse; } @@ -134,4 +138,13 @@ public void setStatus(String status) { this.status = status; } + + public String getTaskGroup() { + return taskGroup; + } + + public void setTaskGroup(String taskGroup) { + this.taskGroup = taskGroup; + } + } Index: ssts-web/src/main/webapp/disinfectsystem/packing/printRecyclingDetailWin.js =================================================================== diff -u -r23739 -r24694 --- ssts-web/src/main/webapp/disinfectsystem/packing/printRecyclingDetailWin.js (.../printRecyclingDetailWin.js) (revision 23739) +++ ssts-web/src/main/webapp/disinfectsystem/packing/printRecyclingDetailWin.js (.../printRecyclingDetailWin.js) (revision 24694) @@ -212,6 +212,28 @@ showResult(result.cause); } }); + }else if(projectName == 'gzzyyfy'){ + //广州中医药附一的打印 + Ext.Ajax.request({ + url : WWWROOT + '/disinfectSystem/recyclingRecordAction!printRecyclingDetailForGzzyyfy.do', + params : { + startDateTime : startDateTime, + endDateTime : endDateTime, + handlerDepartCoding : handlerDepartCoding + }, + success : function(response, options) { + var obj = JSON.parse(response.responseText); + if(obj.success){ + doPrintRecyclingDetailForGzzyyfy(printType,startDateTime,endDateTime,obj.printUser,obj); + }else{ + showResult(obj.message); + } + }, + failure : function(response, options) { + var result = Ext.decode(response.responseText); + showResult(result.cause); + } + }); }else if (sstsConfig.recyclingRecordListFilterByAssetBelong){ // 按器械包的资产归属过滤打印范围,需要在器械包定义中进行设置 Ext.Ajax.request({ @@ -645,6 +667,43 @@ } } +//广州中医药附一打印回收清单 +function doPrintRecyclingDetailForGzzyyfy(printType,startDateTime,endDateTime,printUser,recyclingDetail){ + var LODOP = getLodop(document.getElementById('LODOP'), document.getElementById('LODOP_EM')); + LODOP.SET_PRINT_STYLE("FontSize",17); + LODOP.ADD_PRINT_TEXT(5,300,"100%",5,"器械回收汇总"); + LODOP.SET_PRINT_STYLE("FontSize",11); + LODOP.ADD_PRINT_TEXT(35,20,"100%",5,"开始时间:" + startDateTime); + LODOP.ADD_PRINT_TEXT(35,270,"100%",5,"结束时间:" + endDateTime); + LODOP.ADD_PRINT_TEXT(35,520,"100%",5,"打印时间:" + new Date().format('Y-m-d H:i:s')); + + var htmlTable =""; + //供应室器械包(一行抬头+一行数据) + htmlTable += ""; + if(recyclingDetail.supplyRoomTousse){ + htmlTable += ""; + } + //专科器械包(一行抬头+多行数据(每个科室1行、需要遍历)) + htmlTable += ""; + + if(recyclingDetail.specializedTousse && recyclingDetail.specializedTousse.length){ + for(var i = 0;i < recyclingDetail.specializedTousse.length;i++){ + var specializedTousse = recyclingDetail.specializedTousse[i]; + htmlTable += ""; + } + } + + htmlContent = "" + htmlTable + ""; + LODOP.ADD_PRINT_HTM(55,5,"100%","100%",htmlContent); + + if(printType == 0){//直接打印 + LODOP.PRINT(); + }else{//打印预览 + LODOP.SET_SHOW_MODE("HIDE_PAPER_BOARD",1); + LODOP.PREVIEW(); + } +} + function lodopPrint(printType,startDateTime,endDateTime,printUser,printDetail,disinfectionDetail,tableRowSize){ var LODOP = getLodop(document.getElementById('LODOP'), document.getElementById('LODOP_EM')); LODOP.SET_PRINT_STYLE("FontSize",17);
供应室器械包
"+ recyclingDetail.supplyRoomTousse +"
专科器械包
"+ specializedTousse.departName +""+ specializedTousse.tousseDetail +"