Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r36535 -r36537 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 36535) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 36537) @@ -1043,8 +1043,8 @@ Set departCodeSet = new HashSet(); //没有器械包集合码的包实例名称及条码例如:器械包名称1(01352332108) List noSetCodeTousseNameAndBarcodeList = new ArrayList(); - //器械包集合码关联的器械包实例数量 - Map setCodeTousseInstanceAmountMap = new HashMap(); + //器械包集合码列表 + Set setCodeSet = new HashSet(); //器械包集合码关联的器械包的来源科室编码map Map> setCodeDepartCodeMap = new HashMap>(); ResultSet rs = null; @@ -1060,43 +1060,40 @@ continue; } departCodeSet.add(departCoding); - //器械包集合码关联的器械包实例数量 - Integer tousseInstanceAmount = setCodeTousseInstanceAmountMap.get(setCode); - if(tousseInstanceAmount == null){ - tousseInstanceAmount = 0; - } - tousseInstanceAmount = tousseInstanceAmount + 1; - setCodeTousseInstanceAmountMap.put(setCode, tousseInstanceAmount); + //器械包集合码 + setCodeSet.add(setCode); //器械包集合码关联的器械包的来源科室编码 Set setCodeDepartCodeSet = setCodeDepartCodeMap.get(setCode); if(setCodeDepartCodeSet == null){ setCodeDepartCodeSet = new HashSet(); + setCodeDepartCodeMap.put(setCode, setCodeDepartCodeSet); } setCodeDepartCodeSet.add(departCoding); - setCodeDepartCodeMap.put(setCode, setCodeDepartCodeSet); } } catch (Exception e) { e.printStackTrace(); } finally { DatabaseUtil.closeResultSetAndStatement(rs); } - if(MapUtils.isEmpty(setCodeTousseInstanceAmountMap)){ - return jsonArray; - } if(CollectionUtils.isNotEmpty(noSetCodeTousseNameAndBarcodeList)){ String tousseNameAndBarcodes = StringTools.join(noSetCodeTousseNameAndBarcodeList, "、"); String message = "操作失败,以下器械包没有器械包集合码:“" + tousseNameAndBarcodes + "”"; throw new SystemException(message); } + if(CollectionUtils.isEmpty(setCodeSet)){ + return jsonArray; + } //获取来源科室编码和名称map Map orgUnitCodeAndNameMap = getOrgUnitCodeAndNameMapByOrgUnitCodes(departCodeSet); - for (Entry entry : setCodeTousseInstanceAmountMap.entrySet()) { - String setCode = entry.getKey(); - Integer tousseInstanceAmount = entry.getValue(); + //器械包集合码关联的器械包实例数量 + Map setCodeTousseInstanceAmountMap = loadSetCodeTousseInstanceAmountMap(setCodeSet); + + for (String setCode : setCodeSet) { + Integer tousseInstanceAmount = setCodeTousseInstanceAmountMap.get(setCode); Set setCodeDepartCodeSet = setCodeDepartCodeMap.get(setCode); if(CollectionUtils.isEmpty(setCodeDepartCodeSet)){ throw new SystemException("器械包集合码关联的器械包实例的来源科室为空!"); @@ -1119,12 +1116,49 @@ jsonArray.add(json); } + //保存器械包集合码打印日志 saveTousseInstanceSetCodePrintLog(setCodeTousseInstanceAmountMap.keySet()); return jsonArray; } /** + * 加载器械包集合码关联的器械包实例数量 + * @param setCodeSet + * @return + */ + private Map loadSetCodeTousseInstanceAmountMap(Set setCodeSet) { + Map setCodeTousseInstanceAmountMap = new HashMap(); + if(CollectionUtils.isEmpty(setCodeSet)){ + return setCodeTousseInstanceAmountMap; + } + String sql = String.format("select count(1) amount, setCode.barcode setCode " + + "from %s setCode " + + "join %s scb on scb.setCodeId = setCode.id " + + "join %s ti on ti.id = scb.barcodeDeviceId " + + "where %s " + + "group by setCode.barcode", + BarcodeDevice.class.getSimpleName(), + SetCode_Barcode.class.getSimpleName(), + TousseInstance.class.getSimpleName(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("setCode.barcode", setCodeSet)); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + while(rs.next()){ + int amount = rs.getInt("amount"); + String setCode = rs.getString("setCode"); + setCodeTousseInstanceAmountMap.put(setCode, amount); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return setCodeTousseInstanceAmountMap; + } + + /** * 获取来源科室编码和名称map */ private Map getOrgUnitCodeAndNameMapByOrgUnitCodes(