Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/packing/PackingTask.java =================================================================== diff -u -r20332 -r20432 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/packing/PackingTask.java (.../PackingTask.java) (revision 20332) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/packing/PackingTask.java (.../PackingTask.java) (revision 20432) @@ -87,6 +87,8 @@ private TousseDefinition tousseDefinition; private Integer amount; + + private int tempAmount; /** * 没有确认的器械包的数量 */ @@ -289,6 +291,15 @@ this.amount = amount; } + @Transient + public int getTempAmount() { + return tempAmount; + } + + public void setTempAmount(int tempAmount) { + this.tempAmount = tempAmount; + } + public Integer getUncofirmedAmount() { return uncofirmedAmount; } Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingContext.java =================================================================== diff -u --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingContext.java (revision 0) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingContext.java (revision 20432) @@ -0,0 +1,64 @@ +/** + * + */ +package com.forgon.disinfectsystem.packing.service; + +import java.util.List; + +import org.apache.commons.collections4.CollectionUtils; + +import com.forgon.disinfectsystem.entity.packing.ReviewedBasket; + +/** + * @author jeffli 2017年10月21日 上午11:20:17 + * + */ +public class PackingContext { + + private int curTousseIndex = 0; + private int packingAmountPerVirtualBasket; + List reviewedBasketList; + + public int getCurTousseIndex() { + return curTousseIndex; + } + + public void addTousseIndex() { + ++curTousseIndex; + } + + public void setCurTousseIndex(int curTousseIndex) { + this.curTousseIndex = curTousseIndex; + } + + public int getPackingAmountPerVirtualBasket() { + return packingAmountPerVirtualBasket; + } + + public void setPackingAmountPerVirtualBasket( + int packingAmountPerVirtualBasket) { + this.packingAmountPerVirtualBasket = packingAmountPerVirtualBasket; + } + + public List getReviewedBasketList() { + return reviewedBasketList; + } + + public void setReviewedBasketList(List reviewedBasketList) { + this.reviewedBasketList = reviewedBasketList; + } + + public ReviewedBasket getCurReviewedBasket() { + if (packingAmountPerVirtualBasket <= 0) { + return null; + } + if (CollectionUtils.isEmpty(reviewedBasketList)) { + return null; + } + int i = curTousseIndex / packingAmountPerVirtualBasket; + if (i >= reviewedBasketList.size()) { + return null; + } + return reviewedBasketList.get(i); + } +} Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r20422 -r20432 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 20422) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 20432) @@ -3313,6 +3313,7 @@ */ private String packingTousse_internal(String params,HttpSession session) { + PackingContext packingContext = new PackingContext(); JSONObject paramsObj = JSONObject.fromObject(params); String packingTaskIds = JSONUtil.optString(paramsObj, "taskIds", null); @@ -3432,6 +3433,9 @@ // List packingTasks = query.list(); List packingTasks = objectDao.findByIds_ForUpdate(PackingTask.class.getSimpleName(), ids); + if(CollectionUtils.isEmpty(packingTasks)){ + throw new RuntimeException("装配任务不能为空! "); + } Set recyclingRecordIds = new HashSet(); for (PackingTask packingTask : packingTasks) { logger.debug("装配任务packingTask[id=" + packingTask.getId() + "],tousseName=" + packingTask.getTousseDefinition().getName()+ "], [待装配数量=" + packingTask.getUnPackAmount() + "]"); @@ -3523,6 +3527,39 @@ List packingTaskTousseDefinitionList = objectDao.findByIds_ForUpdate(TousseDefinition.class.getSimpleName(), packingTaskTousseDefinitionIdSet); // 按包定义名字排序 Collections.sort(packingTasks, new PackingTask.PackingTaskNameComparator()); + // 获取虚拟篮筐 + { + int totalPackingAmount = currentPackAmount; + int totalCanPackAmount = 0; + for (PackingTask packingTask : packingTasks) { + totalCanPackAmount += packingTask.getCanPackAmount(); + } + for (PackingTask packingTask : packingTasks) { + if(totalPackingAmount <= 0){ + break; + } + if(totalPackingAmount > packingTask.getCanPackAmount()){ + packingTask.setTempAmount(packingTask.getCanPackAmount()); + }else{ + packingTask.setTempAmount(totalPackingAmount); + } + totalPackingAmount -= packingTask.getTempAmount(); + } + if(totalCanPackAmount == 0){ + throw new RuntimeException("可装配数量为0! "); + } + int packingAmountPerVirtualBasket = 0; + TousseDefinition tousseDefinition = packingTasks.get(0).getTousseDefinition(); + if(tousseDefinition != null ){ + packingAmountPerVirtualBasket = tousseDefinition.safelyGetPackingAmountPerVirtualBasket(); + } + packingContext.setPackingAmountPerVirtualBasket(packingAmountPerVirtualBasket); + if(packingAmountPerVirtualBasket > 0){ + int needVirtualBasketAmount = totalCanPackAmount % packingAmountPerVirtualBasket == 0 ? (totalCanPackAmount / packingAmountPerVirtualBasket) : (totalCanPackAmount / packingAmountPerVirtualBasket + 1); + List reviewedBasketList = containerManager.callVirtualContainer(needVirtualBasketAmount,tousseDefinition.getTaskGroup()); + packingContext.setReviewedBasketList(reviewedBasketList); + } + } for (PackingTask packingTask : packingTasks) { TousseDefinition td = packingTask.getTousseDefinition(); @@ -3741,7 +3778,7 @@ td, tousseType,tousseName,foreignTousseApplication,packingDate, packingAmountForThisTask, toussePrice, fluctuationPrice,tousseAmount, orgUnitCoding,orgUnitName,basketBarcode, !isTraceable, confirmContinue,tousseInstances,withoutReviewingAndSterilingTousseInstanceList, - idToWashRecordMap, idToRecyclingRecordMap,urgentAmountJson,taskGroup,tousseWeight,remark,comboTousseInstanceId,comboTousseInstanceStatus); + idToWashRecordMap, idToRecyclingRecordMap,urgentAmountJson,taskGroup,tousseWeight,remark,comboTousseInstanceId,comboTousseInstanceStatus,packingContext); needPackingAmount -= packingAmountForThisTask; @@ -4202,7 +4239,7 @@ Integer currentPackAmount, double toussePrice,double fluctuationPrice, Integer tousseAmount,String orgUnitCoding, String orgUnitName, String basketBarcode,boolean unTraceableTousse, String confirmContinue,List tousseInstances, List withoutReviewingAndSterilingTousseInstanceList,Map idToWashRecordMap, - Map idToRecyclingRecordMap,JSONObject urgentAmountJson,String taskGroup,String tousseWeight,String remark,Long comboTousseInstanceId,String comboTousseInstanceStatus) { + Map idToRecyclingRecordMap,JSONObject urgentAmountJson,String taskGroup,String tousseWeight,String remark,Long comboTousseInstanceId,String comboTousseInstanceStatus,PackingContext packingContext) { JSONObject obj = new JSONObject(); long t1 = System.currentTimeMillis(); @@ -4224,27 +4261,12 @@ String[] sns = serialNumManager .getSerialNumberStrs(SerialNum.TYPE_BARCODE, currentPackAmount); - Integer packingAmountPerVirtualBasket - = tousseDefinition == null ? null : tousseDefinition.getPackingAmountPerVirtualBasket(); - int needVirtualBasketAmount = 0;//需要虚拟篮筐数量 - List reviewedBasketList = null; - //根据器械包的数量及每虚拟可装配该器械包的数量调出虚拟篮筐 - if(packingAmountPerVirtualBasket != null - && packingAmountPerVirtualBasket > 0){ - needVirtualBasketAmount = - currentPackAmount % packingAmountPerVirtualBasket == 0 ? (currentPackAmount / packingAmountPerVirtualBasket) : (currentPackAmount / packingAmountPerVirtualBasket + 1); - reviewedBasketList = containerManager.callVirtualContainer(needVirtualBasketAmount,tousseDefinition.getTaskGroup()); - } + int packingAmountPerVirtualBasket = packingContext.getPackingAmountPerVirtualBasket(); + //需要装入虚拟篮筐,但虚拟篮筐数据不够用时的提示 - if(!DatabaseUtil.isPoIdValid(comboTousseInstanceId) && packingAmountPerVirtualBasket != null - && packingAmountPerVirtualBasket > 0 && !"true".equals(confirmContinue) - && CollectionUtils.isEmpty(reviewedBasketList)){ - obj.put("success", "false"); - obj.put("msg", "器械包:"+tousseDefinition.getName()+" 需要装入的虚拟篮筐数量不足,如果继续装配系统将不会分配虚拟篮筐,是否继续装配?"); - }else{ + { - ReviewedBasket belongVirtualBasket = null;//所属虚拟篮筐序列号 PackingTask hisPackingTask = null; JSONObject washJson = null; @@ -4255,7 +4277,13 @@ List tousseList = new ArrayList(); for (int i = 0; i < currentPackAmount; i++) { - + ReviewedBasket belongVirtualBasket = packingContext.getCurReviewedBasket(); + if(!DatabaseUtil.isPoIdValid(comboTousseInstanceId) && packingAmountPerVirtualBasket > 0 + && !"true".equals(confirmContinue) && belongVirtualBasket == null){ + obj.put("success", "false"); + obj.put("msg", "器械包:"+tousseDefinition.getName()+" 需要装入的虚拟篮筐数量不足,如果继续装配系统将不会分配虚拟篮筐,是否继续装配?"); + return obj; + } String barcodeStr = sns[i]; int alreadyPackedAmount = 0; @@ -4329,17 +4357,15 @@ && TousseDefinition.STR_NO.equals(tousseDefinition.getIsSterile())){ withoutReviewingAndSterilingTousseInstanceList.add(tousseInstance); } - if(!DatabaseUtil.isPoIdValid(comboTousseInstanceId) && packingAmountPerVirtualBasket != null - && packingAmountPerVirtualBasket > 0 - && CollectionUtils.isNotEmpty(reviewedBasketList)){ + if(belongVirtualBasket != null){ try{ - belongVirtualBasket = reviewedBasketList.get(i/packingAmountPerVirtualBasket); tousseInstance.setReviewBasket_id(belongVirtualBasket.getId()); Container container = belongVirtualBasket.getContainer(); if (container != null) { //虽然理论上每个灭菌筐关联的Container一定不为空,但是这里还是处理一下空异常比较好 tousseInstance.setVirtualBasketSeqNum(container.getContainerName()); tousseInstance.setSterilizationBasket(container.getContainerName()); } + packingContext.addTousseIndex(); }catch(Exception e){ e.printStackTrace(); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseDefinition.java =================================================================== diff -u -r20430 -r20432 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseDefinition.java (.../TousseDefinition.java) (revision 20430) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseDefinition.java (.../TousseDefinition.java) (revision 20432) @@ -1065,6 +1065,13 @@ public Integer getPackingAmountPerVirtualBasket() { return packingAmountPerVirtualBasket; } + + public int safelyGetPackingAmountPerVirtualBasket() { + if(packingAmountPerVirtualBasket == null){ + return 0; + } + return packingAmountPerVirtualBasket; + } public void setPackingAmountPerVirtualBasket( Integer packingAmountPerVirtualBasket) {