Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManager.java =================================================================== diff -u -r38637 -r38651 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManager.java (.../RecyclingRecordManager.java) (revision 38637) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManager.java (.../RecyclingRecordManager.java) (revision 38651) @@ -317,8 +317,9 @@ * 回收物品数量变动时,联动修改没有装配的包实例 * @param recyclingSumInfoVo 包含了物品变动信息的vo * @param recyclingRecord 回收记录 - * @param 涉及的包定义 + * @param tds 涉及的包定义 + * @param basketItemJson 入筐物品信息 目前主要用于删除标识牌条码对应的包 如果不是删除删除标识牌条码对应的包 此参数可以没值 */ - public void updateTousseInstance(RecyclingSumInfoVo recyclingSumInfoVo, RecyclingRecord recyclingRecord,List tds); + public void updateTousseInstance(RecyclingSumInfoVo recyclingSumInfoVo, RecyclingRecord recyclingRecord,List tds, List basketItemJson); } Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java =================================================================== diff -u -r38637 -r38651 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 38637) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 38651) @@ -1985,6 +1985,53 @@ } return ipRemark; } + /** + * 包定义扣减条码的数量 + * @param recyclingBasketItemVos 入筐器械包信息 + * @return + */ + private Map getBarcodeRedurAmountMap(List recyclingBasketItemVos){ + if(CollectionUtils.isEmpty(recyclingBasketItemVos)){ + return null; + } + //先合并 防止页面操作一个物品加加减减 + Map barcodeAmountChangesMap = new HashMap();//每个条码的增删数量 + Map tiIdToAmountMap = new HashMap(); + for (RecyclingBasketItemVo vo : recyclingBasketItemVos) { + if(vo == null){ + continue; + } + if(StringUtils.isNotBlank(vo.getIdCardBarcode())){ + if(barcodeAmountChangesMap.containsKey(vo.getIdCardBarcode())){ + barcodeAmountChangesMap.put(vo.getIdCardBarcode(),MathTools.add(vo.getAmount(), barcodeAmountChangesMap.get(vo.getIdCardBarcode())).intValue()); + }else{ + barcodeAmountChangesMap.put(vo.getIdCardBarcode(), vo.getAmount()); + } + }else if(DatabaseUtil.isPoIdValid(vo.getLastTousseInstanceId())){ + if(tiIdToAmountMap.containsKey(vo.getLastTousseInstanceId())){ + tiIdToAmountMap.put(vo.getLastTousseInstanceId(),MathTools.add(vo.getAmount(), tiIdToAmountMap.get(vo.getLastTousseInstanceId())).intValue()); + }else{ + tiIdToAmountMap.put(vo.getLastTousseInstanceId(), vo.getAmount()); + } + } + + } + Map barcodeRedurAmountMap = new HashMap(); + if(MapUtils.isNotEmpty(barcodeAmountChangesMap)){ + for (Entry entry : barcodeAmountChangesMap.entrySet()) { + if(entry.getValue() == null || entry.getValue() >= 0){ + continue; + } + for (RecyclingBasketItemVo vo : recyclingBasketItemVos) { + if(entry.getKey().equals(vo.getIdCardBarcode())){ + barcodeRedurAmountMap.put(vo.getTousseDefinitionID(), MathTools.add(1, barcodeRedurAmountMap.get(vo.getTousseDefinitionID())).intValue()); + break; + } + } + } + } + return barcodeRedurAmountMap; + } @Override @Activity(name = AmountControl.RECYCLING) public void save(RecyclingRecord record, RecyclingContext recyclingContext) { @@ -2280,7 +2327,7 @@ saveRecyclingTousseInstanceRecord(recyclingContext, record); boolean enableAnInstanceIsGeneratedAfterRecycled = CssdUtils.getSystemSetConfigByNameBool("enableAnInstanceIsGeneratedAfterRecycled", false); if(enableAnInstanceIsGeneratedAfterRecycled){ - updateTousseInstance(recyclingSumInfoVo, record,tousseDefinitions); + updateTousseInstance(recyclingSumInfoVo, record,tousseDefinitions,basketItemJson); recyclingSumInfoVo.setNewRecyclingItmeAmountMap(null); recyclingSumInfoVo.setOldRecyclingItmeAmountMap(null); recyclingSumInfoVo.setUpdateRecyclingItmeArr(null); @@ -11928,7 +11975,8 @@ return newBarcode; } @Override - public void updateTousseInstance(RecyclingSumInfoVo recyclingSumInfoVo, RecyclingRecord recyclingRecord, List tds){ + public void updateTousseInstance(RecyclingSumInfoVo recyclingSumInfoVo, RecyclingRecord recyclingRecord + , List tds, List basketItemJson){ if(MathTools.equals(recyclingRecord.getRecyclingTimes(), RecyclingRecord.RECYCLINGTIMES_TWO)){//二次回收不处理 return; } @@ -12011,6 +12059,8 @@ } } + //包定义扣减条码的数量 + Map barcodeRedurAmountMap = getBarcodeRedurAmountMap(basketItemJson); for (int i = 0; i < reduceRecyclingItembArr.size(); i++) { JSONObject reduceItem = reduceRecyclingItembArr.optJSONObject(i); int amount = reduceItem.optInt("amount", 0); @@ -12031,9 +12081,13 @@ if(delRecyclingItemIds == null){ delRecyclingItemIds = new HashSet(); } - int num = 0; + Long tdId = tisOfRi.get(0).getTousseDefinition().getId(); + int num = barcodeRedurAmountMap != null&&barcodeRedurAmountMap.get(tdId)!=null?barcodeRedurAmountMap.get(tdId):0; + if(num >= amount){//删够数量就不用继续删除 + continue; + } for (TousseInstance ti : tisOfRi) { - if(delTiIds.contains(ti.getId())){ + if(delTiIds.contains(ti.getId()) || StringUtils.isNotBlank(ti.getIdCardInstanceBarcode())){ continue; } delTiIds.add(ti.getId());