Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r20264 -r20332 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 20264) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 20332) @@ -2730,7 +2730,7 @@ if(CollectionUtils.isNotEmpty(packingTaskList)){ int totalUnPackingAmount = 0; for(PackingTask packingTask : packingTaskList){ - totalUnPackingAmount += packingTask.getUnPackAmount(); + totalUnPackingAmount += packingTask.getCanPackAmount(); } if(packingAmount > totalUnPackingAmount){ packingAmount = totalUnPackingAmount; @@ -3420,6 +3420,8 @@ objectDao.findBySql_ForUpdate(Container.class.getSimpleName(), String.format(" where %s ", SqlUtils.getStringFieldInCollectionsPredicate("po.barcode", packingTaskBasketBarcodeSet))); } List packingTaskTousseDefinitionList = objectDao.findByIds_ForUpdate(TousseDefinition.class.getSimpleName(), packingTaskTousseDefinitionIdSet); + // 按包定义名字排序 + Collections.sort(packingTasks, new PackingTask.PackingTaskNameComparator()); for (PackingTask packingTask : packingTasks) { TousseDefinition td = packingTask.getTousseDefinition(); @@ -3447,20 +3449,21 @@ ArrayList tdNamesList = new ArrayList(tdNamesSet); Collections.sort(tdNamesList); - for(String tdName : tdNamesList){ + + for (PackingTask currentPackingTask : packingTasks) { tousseInstances.clear(); departmentArray.clear(); virtualSeqNumArray.clear(); //如果待装配数量小于等于0时跳出循环 if(needPackingAmount <= 0){ break; } - PackingTask currentPackingTask = packingTaskMap.get(tdName); TousseDefinition td = currentPackingTask.getTousseDefinition(); String tousseType = td.getTousseType(); - String tousseName = tdName; + String tousseName = TousseDefinitionUtils.getTousseNameForPackingTask(currentPackingTask + .getTousseDefinition());; Integer printAmount = td.getPrintAmount(); JSONObject toolAndImplantAmount = tousseDefinitionManager.getToolAndImplantAmount(td); @@ -3606,13 +3609,9 @@ // + tousseName); //对于器械包名称含有下划线的,将对参数进行特殊处理 - if(tousseName.indexOf("_") != -1){ - currentPackingTaskAsList.add(currentPackingTask); - if(needPackingAmount > currentPackingTask.getUnPackAmount()){ - packingAmountForThisTask = currentPackingTask.getUnPackAmount(); - } - }else{ - currentPackingTaskAsList = packingTasks; + currentPackingTaskAsList.add(currentPackingTask); + if(packingAmountForThisTask > currentPackingTask.getCanPackAmount()){ + packingAmountForThisTask = currentPackingTask.getCanPackAmount(); } logger.debug("添加历史装配记录,器械包名称=" + td.getName() + ",装配数量=" + packingAmountForThisTask); //logger.debug("Thread " + Thread.currentThread().getName() + ",完成批量装配器械包:" + tousseName); @@ -3643,7 +3642,7 @@ !isTraceable, confirmContinue,tousseInstances,withoutReviewingAndSterilingTousseInstanceList, idToWashRecordMap, idToRecyclingRecordMap,urgentAmountJson,taskGroup,tousseWeight,remark,comboTousseInstanceId,comboTousseInstanceStatus); - needPackingAmount -= currentPackingTask.getUnPackAmount(); + needPackingAmount -= packingAmountForThisTask; if(!"true".equals(confirmContinue) && "false".equals(result.optString("success"))){ if(packingRecord != null){ Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseDefinitionUtils.java =================================================================== diff -u -r20280 -r20332 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseDefinitionUtils.java (.../TousseDefinitionUtils.java) (revision 20280) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseDefinitionUtils.java (.../TousseDefinitionUtils.java) (revision 20332) @@ -243,4 +243,14 @@ } return ancestorID; } + + public static String getTousseNameForPackingTask(TousseDefinition td) { + String tousseName = td.getName(); + if (td.isForeignTousse()) {// 一个单可能有多个包,所以名字加单id会有重复 + tousseName += ("_" + td.getId()); + } else if (td.isCustomTousse() || td.isDisinfection()) { + tousseName += ("_" + td.getInvoicePlanID()); + } + return tousseName; + } } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/packing/PackingTask.java =================================================================== diff -u -r19570 -r20332 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/packing/PackingTask.java (.../PackingTask.java) (revision 19570) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/packing/PackingTask.java (.../PackingTask.java) (revision 20332) @@ -1,5 +1,6 @@ package com.forgon.disinfectsystem.entity.packing; +import java.util.Comparator; import java.util.Date; import java.util.List; @@ -16,6 +17,8 @@ import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; +import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseDefinitionUtils; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatch; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.materialerrordamage.MaterialErrorDamageDetail; import com.forgon.tools.hibernate.ObjectDao; @@ -297,6 +300,13 @@ public Integer getUnPackAmount() { return unPackAmount; } + @Transient + public Integer getCanPackAmount() { + if(waitSupplementTousseAmount != null){ + return unPackAmount - waitSupplementTousseAmount; + } + return unPackAmount; + } public void setUnPackAmount(Integer unPackAmount) { this.unPackAmount = unPackAmount; @@ -493,4 +503,26 @@ public void setSourceTousseInstanceIds(String sourceTousseInstanceIds) { this.sourceTousseInstanceIds = sourceTousseInstanceIds; } + + public static class PackingTaskNameComparator implements + Comparator { + + @Override + public int compare(PackingTask o1, PackingTask o2) { + + String name1 = TousseDefinitionUtils.getTousseNameForPackingTask(o1 + .getTousseDefinition()); + String name2 = TousseDefinitionUtils.getTousseNameForPackingTask(o2 + .getTousseDefinition()); + if (name1 == null && name2 == null) { + return 0; + } else if (name1 == null) { + return -1; + } else if (name2 == null) { + return 1; + } + return name1.compareTo(name2); + } + + } }