Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java =================================================================== diff -u -r25036 -r25152 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java (.../PackingAction.java) (revision 25036) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java (.../PackingAction.java) (revision 25152) @@ -8,9 +8,11 @@ import java.util.Comparator; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Set; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -885,13 +887,116 @@ public void getComboTousseStore(){ String spell = StrutsParamUtils.getPraramValue("spell", ""); String comboTousseOrgUnitCoding = StrutsParamUtils.getPraramValue("comboTousseOrgUnitCoding", ""); - JSONArray comboTousses = tousseDefinitionManager.loadAllComboTousseDefinition(spell,comboTousseOrgUnitCoding); + + Map> idToUnitCodeSetMap = new HashMap>(); + JSONArray comboTousses = tousseDefinitionManager.loadAllComboTousseDefinition(spell,comboTousseOrgUnitCoding,idToUnitCodeSetMap); + Set allTousseIdSet = new HashSet(); + Set departCodingSet = new HashSet(); + Map> idToTousseIdSetMap = new HashMap>(); + List removeList = new LinkedList(); + for(int i=0;i tousseIdSet = idToTousseIdSetMap.get(id); + if(tousseIdSet == null){ + tousseIdSet = new HashSet(); + idToTousseIdSetMap.put(id, tousseIdSet); + } + comboTousse.put("currrentTaskAmount", 0); + comboTousse.put("unWashAmount", 0); + for(int t=0;t unitCodeSet : idToUnitCodeSetMap.values()) { + departCodingSet.addAll(unitCodeSet); + } + } + } + + SupplyRoomConfig config = supplyRoomConfigManager.getSystemParamsObj(); + //清洗完成后装配 + boolean isPackingAfterWashTimeEnd = true; + if(config != null){ + isPackingAfterWashTimeEnd = BooleanUtils.toBooleanDefaultIfNull(config.getIsPackingAfterWashTimeEnd(), true); + } + // 查找所有装配任务 + List list = packingManager.findPackingTaskBySQL(allTousseIdSet,handlerDepartCode,new ArrayList(departCodingSet),false); + if(CollectionUtils.isEmpty(list)){ + comboTousses = new JSONArray(); + }else{ + for(int i=0;i list,JSONObject comboTousse,String comboTousseOrgUnitCoding,Map> idToUnitCodeSetMap,Map> idToTousseIdSetMap){ + Long id = JSONUtil.optLong(comboTousse, "id", null); + int totalAmount = 0; + int unWashAmount = 0; + Set comboTousseOrgUnitCodingSet = idToUnitCodeSetMap.get(id); + Set tousseIdSet = idToTousseIdSetMap.get(id); + for (PackingTask packingTask : list) { + boolean orgUnitMatch = false; + if(StringUtils.isNotBlank(comboTousseOrgUnitCoding)){ + if(StringUtils.equals(comboTousseOrgUnitCoding, packingTask.getDepartCoding())){ + orgUnitMatch = true; + } + }else { + if(comboTousseOrgUnitCodingSet != null && comboTousseOrgUnitCodingSet.contains(packingTask.getDepartCoding()) ){ + orgUnitMatch = true; + } + } + if(!orgUnitMatch){ + continue; + } + if(!tousseIdSet.contains(packingTask.getTousseDefinition().getId())){ + continue; + } + if (isPackingAfterWashTimeEnd + && PackingTask.TASK_RECYCLINGRECORD + .equals(packingTask.getTaskType()) + && StringUtils.isBlank(packingTask + .getWashTime())) { + unWashAmount += packingTask.getUnPackAmount(); + } else { + totalAmount += packingTask.getUnPackAmount(); + } + } + comboTousse.put("currrentTaskAmount", totalAmount); + comboTousse.put("unWashAmount", unWashAmount); + return totalAmount; + } + /** * 获取聚合包内普通器械包装配任务数量 */ Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r25036 -r25152 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 25036) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 25152) @@ -6286,12 +6286,7 @@ } private List findPackingTaskBySQL(Long tousseDefinitionId,String handlerDepartCode,List> departCodingList,boolean forUpdate){ - if(tousseDefinitionId == null){ - return null; - } - if(CollectionUtils.isEmpty(departCodingList)){ - return null; - } + List orgUnitCodingList = new ArrayList(); for (Map map : departCodingList) { String code = (String)map.get("unitCode"); @@ -6301,11 +6296,25 @@ orgUnitCodingList.add(code); } - String codingSQL = StringUtils.join(orgUnitCodingList, "','"); + return findPackingTaskBySQL(Collections.singletonList(tousseDefinitionId),handlerDepartCode,orgUnitCodingList,forUpdate); + } + + public List findPackingTaskBySQL(Collection tousseDefinitionIds,String handlerDepartCode,List departCodingList,boolean forUpdate){ + if(CollectionUtils.isEmpty(tousseDefinitionIds)){ + return null; + } + if(CollectionUtils.isEmpty(departCodingList)){ + return null; + } + for (String code : departCodingList) { + if(StringUtils.isEmpty(code)){ + throw new RuntimeException("ID="+tousseDefinitionIds+"的聚合包定义所属科室数据异常!"); + } + } - String sql = String.format("where po.tousseDefinition.id = %s and po.orgUnitCoding = '%s' " - + "and po.departCoding in ('%s') and po.status = '%s'", tousseDefinitionId,handlerDepartCode, - codingSQL,PackingTask.STATUS_AWAIT_PACKING); + String sql = String.format("where %s and po.orgUnitCoding = '%s' " + + "and %s and po.status = '%s'", SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.tousseDefinition.id", tousseDefinitionIds),handlerDepartCode, + SqlUtils.getStringFieldInLargeCollectionsPredicate("po.departCoding", departCodingList),PackingTask.STATUS_AWAIT_PACKING); if(StringUtils.isNotBlank(sql)){ if(forUpdate){ return objectDao.findBySql_ForUpdate(PackingTask.class.getSimpleName(), sql); Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java =================================================================== diff -u -r24591 -r25152 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 24591) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 25152) @@ -208,6 +208,7 @@ */ public List findPackingTaskBySQL(Long tousseDefinitionId,String handlerDepartCode,List> departCodingList); + public List findPackingTaskBySQL(Collection tousseDefinitionIds,String handlerDepartCode,List departCodingList,boolean forUpdate); /** * 设置器械包未补充的材料明细 */ Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java =================================================================== diff -u -r25036 -r25152 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java (.../TousseDefinitionManager.java) (revision 25036) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java (.../TousseDefinitionManager.java) (revision 25152) @@ -630,7 +630,7 @@ /** * 加载所有的聚合包定义,聚合包量比较小,暂时不考虑拼音五笔码检索. */ - public JSONArray loadAllComboTousseDefinition(String spell,String comboTousseOrgUnitCoding); + public JSONArray loadAllComboTousseDefinition(String spell,String comboTousseOrgUnitCoding,Map> idToUnitCodeSetMap); public JSONArray getAllComboTousseDefinitionDepart(); Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java =================================================================== diff -u -r25036 -r25152 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 25036) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 25152) @@ -9,6 +9,7 @@ import java.util.Collections; import java.util.Comparator; import java.util.HashMap; +import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; @@ -2744,22 +2745,33 @@ } @Override - public JSONArray loadAllComboTousseDefinition(String spell,String comboTousseOrgUnitCoding) { + public JSONArray loadAllComboTousseDefinition(String spell,String comboTousseOrgUnitCoding,Map> idToUnitCodeSetMap) { String spellSql = ""; String comboTousseOrgUnitCodingSql = ""; if(StringUtils.isNotBlank(spell)){ spellSql = " and (po.name like '%"+spell+"%' or po.spelling like '%"+spell+"%' or po.wbCode like '%"+spell+"%' ) "; } + String joinComboTousseOrgUint = ""; + String selComboTousseOrgUint = ""; + String whereComboTousseOrgUint = ""; + boolean selectUnitCode = false; if(StringUtils.isNotBlank(comboTousseOrgUnitCoding)){ comboTousseOrgUnitCodingSql = String.format(" and po.id in(select comboTousseDefinitionId from %s where unitCode='%s')", ComboTousseOrgUint.class.getSimpleName(),comboTousseOrgUnitCoding); + }else{ + joinComboTousseOrgUint = " ,ComboTousseOrgUint ctou "; + selComboTousseOrgUint = " ,ctou.unitCode "; + whereComboTousseOrgUint = " and po.id=ctou.comboTousseDefinitionId "; + selectUnitCode = true; } - String sql = String.format("select po.id,po.name,po.packageType,po.sterilingMethod,io.id,io.name,io.packageType from %s po, %s bo, %s io where po.id = bo.comboTousseDefinitionId " - + "and bo.tousseDefinitionId = io.id and po.tousseType = '%s' %s %s and (po.isDisable = '%s' or po.isDisable is null) order by po.name ", + + String sql = String.format("select po.id,po.name,po.packageType,po.sterilingMethod,io.id,io.name,io.packageType %s from %s po, %s bo, %s io %s where po.id = bo.comboTousseDefinitionId " + + "and bo.tousseDefinitionId = io.id %s and po.tousseType = '%s' %s %s and (po.isDisable = '%s' or po.isDisable is null) order by po.name ", selComboTousseOrgUint, TousseDefinition.class.getSimpleName(),ComboTousseComposite.class.getSimpleName(), - TousseDefinition.class.getSimpleName(),TousseDefinition.PACKAGE_TYPE_COMBO,spellSql,comboTousseOrgUnitCodingSql, Constants.STR_NO); + TousseDefinition.class.getSimpleName(),joinComboTousseOrgUint,whereComboTousseOrgUint,TousseDefinition.PACKAGE_TYPE_COMBO,spellSql,comboTousseOrgUnitCodingSql, Constants.STR_NO); ResultSet rs = objectDao.executeSql(sql); Map resultMap = new HashMap(); List idList = new ArrayList(); + Map addedTousseMap = new HashMap(); try { while(rs.next()){ Long id = rs.getLong(1); @@ -2781,15 +2793,30 @@ comboTousseItem.put("sterilingMethod", sterilingMethod); resultMap.put(id, comboTousseItem); } + if(selectUnitCode){ + String unitCode = rs.getString(8); + Set unitCodeSet = idToUnitCodeSetMap.get(id); + if(unitCodeSet == null){ + unitCodeSet = new HashSet(); + idToUnitCodeSetMap.put(id, unitCodeSet); + } + if(StringUtils.isNotBlank(unitCode)){ + unitCodeSet.add(unitCode); + } + } JSONArray includeTousses = comboTousseItem.optJSONArray("includeTousses"); if(includeTousses == null){ includeTousses = new JSONArray(); } - JSONObject ordinaryItem = new JSONObject(); - ordinaryItem.put("id", tousseId); - ordinaryItem.put("name", tousseName); - ordinaryItem.put("packageType", toussePackageType); - includeTousses.add(ordinaryItem); + String key = id+"."+tousseId; + if(!addedTousseMap.containsKey(key)){ + addedTousseMap.put(key, true); + JSONObject ordinaryItem = new JSONObject(); + ordinaryItem.put("id", tousseId); + ordinaryItem.put("name", tousseName); + ordinaryItem.put("packageType", toussePackageType); + includeTousses.add(ordinaryItem); + } comboTousseItem.put("includeTousses", includeTousses); } } catch (SQLException e) { @@ -2799,7 +2826,8 @@ } JSONArray array = new JSONArray(); for (Long id : idList) { - array.add(resultMap.get(id)); + JSONObject obj = resultMap.get(id); + array.add(obj); } return array; }