Index: forgon-core/src/main/java/com/forgon/log/enums/ApplicationLogStatusEnum.java =================================================================== diff -u -r19992 -r23444 --- forgon-core/src/main/java/com/forgon/log/enums/ApplicationLogStatusEnum.java (.../ApplicationLogStatusEnum.java) (revision 19992) +++ forgon-core/src/main/java/com/forgon/log/enums/ApplicationLogStatusEnum.java (.../ApplicationLogStatusEnum.java) (revision 23444) @@ -15,7 +15,9 @@ TERMINATE(3, "终止"), - INTERVENE(4, "干预申请数量"); + INTERVENE(4, "干预申请数量"), + + RECYCLING_RETURN(5,"回收自动归还"); private Integer status; Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java =================================================================== diff -u -r23404 -r23444 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 23404) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 23444) @@ -1318,6 +1318,8 @@ //放入篮筐的物品(已将非整包清洗放入篮筐的材料组合成器械包) List tousseItemJson = getTousseItemJsonArray(basketItemJson,record); + //已归还的器械包数量,key为包定义id(不是祖先id,是TousseItem中的包定义id,value为已经归还的数量) + Map returnedTousseAmount = new HashMap<>(); if(autoReturnTheBorrowingTousse){ //自动归还 Map restApplyTousses = new HashMap<>(); @@ -1331,7 +1333,7 @@ //申请还物单的id List borrowRecyclingApplicationIds = returnGoodsVo.getNewBorrowingRecyclingApplicationIds(); if(CollectionUtils.isNotEmpty(borrowRecyclingApplicationIds)){ - List borrowRecyclingApplications = recyclingApplicationManager.getCollectionForUpdate("id", borrowRecyclingApplicationIds); + List borrowRecyclingApplications = recyclingApplicationManager.getCollectionForUpdate(borrowRecyclingApplicationIds); for(RecyclingApplication recyclingApplication : borrowRecyclingApplications){ RecyclingRecord newRecord = new RecyclingRecord(); newRecord.setApplySubmintDateTime(recyclingApplication.getSubmitTime()); @@ -1346,7 +1348,7 @@ newRecord.setRemark(record.getRemark()); newRecord.setStatus(record.getStatus()); JSONObject paramsNew = buildAutoReturnRecyclingParam(recyclingApplication,tousseItemJson, - basketItemJson,urgentTousseItems,errorDamageDetail,recyclingItemArray); + basketItemJson,urgentTousseItems,errorDamageDetail,recyclingItemArray,returnedTousseAmount); RecyclingContext rc = new RecyclingContext(); rc.setJsonParam(paramsNew.toString()); rc.setAutoReturnTheBorrowingTousse(false); @@ -1356,15 +1358,54 @@ } } } - if(autoReturnTheBorrowingTousse && CollectionUtils.isEmpty(tousseItemJson)){ - //会自动归还,那就是添加的回收申请单,并且已经归还了所有物品,没有剩下的了 - return; + boolean saveRecyclingRecord = true; + InvoicePlan application = record.getRecyclingApplication(); + //如果是回收申请单,那还完了,就可以结束了。如果不是,就再处理一下:如果一个包全部用来还借物单了,那就终止掉 + if(autoReturnTheBorrowingTousse){ + if(application == null || application.isRecyclingApplication()){ + //去除掉回收数量为0的 + tousseItemJson = tousseItemJson.stream().filter(p->p.getAmount() != 0).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(tousseItemJson)){ + return; + } + }else{ + //不是回收申请单,申请数量需要减掉归还数量,如果都已经归还了,那就终止掉。如果整张单都归还了,就把单终止掉 + List terminateTousseItemIds = new ArrayList<>(); + JSONArray modifiedDetails = new JSONArray(); + for(Long tousseDefinitionId : returnedTousseAmount.keySet()){ + JSONObject modifiedItem = new JSONObject(); + TousseItem tousseItem = tousseItemManager.find(application.getApplicationItems(), tousseDefinitionId); + if(tousseItem != null){ + JSONUtil.addLogProperty(modifiedItem, "包定义id", tousseDefinitionId); + JSONUtil.addLogProperty(modifiedItem, "器械包名称", tousseItem.getTousseName()); + int restAmount = MathTools.sub(tousseItem.getAmount(), returnedTousseAmount.get(tousseDefinitionId)).intValue(); + if(restAmount > 0){ + JSONUtil.modifyPropertyLog(modifiedItem, "申请数量", tousseItem.getAmount(), restAmount); + tousseItem.setAmount(restAmount); + }else{ + JSONUtil.addLogProperty(modifiedItem, "操作", "全部归还,终止申请项"); + //都归还了,终止掉 + terminateTousseItemIds.add(tousseItem.getId()); + } + modifiedDetails.add(modifiedItem); + } + } + applicationLogManager.saveApplicationLog(application, modifiedDetails.toString(), ApplicationLogStatusEnum.RECYCLING_RETURN); + if(CollectionUtils.isNotEmpty(terminateTousseItemIds)){ + invoicePlanManager.checkTousseItemCanCancel(terminateTousseItemIds); + invoicePlanManager.terminateTousseItemByIds(terminateTousseItemIds, "物品回收时全部归还"); + } + //如果回收的所有物品都全部归还,那就不保存历史回收记录 + List remainTousseItemvo = tousseItemJson.stream().filter(p->p.getAmount() != 0).collect(Collectors.toList()); + if(CollectionUtils.isEmpty(remainTousseItemvo)){ + saveRecyclingRecord = false; + } + } } if (CssdUtils.getSystemSetConfigByNameBool("enableTousseVoluntarilyUrgent", false)) { voluntarilyUrgent(record.getDepart(),tousseItemJson, urgentTousseItems, params); } - InvoicePlan application = record.getRecyclingApplication(); //是否外来器械申请单 boolean isForeignTousseApplication = (application == null) ? false : application.isForeignTousseAppliaction(); //是否外来器械申请单二次回收 @@ -1399,6 +1440,10 @@ resetWashRecordWorkLoad(toReSetWorkloadMap); //将丢失报损信息记录按标识牌记录到单独的表中 idCardMaterialErrorDamageManager.save(record); + if(!saveRecyclingRecord){ + //都已经归还了,就删除 + delete(record); + } // throw new RuntimeException("测试"); } /** @@ -1466,7 +1511,7 @@ List basketItems, List urgentTousseItems, List errorDamageDetails, - JSONArray recyclingItemArray) { + JSONArray recyclingItemArray,Map tousseAmoutMap) { if(recyclingApplication != null && CollectionUtils.isNotEmpty(recyclingApplication.getApplicationItems())){ List thisBasketItems = new ArrayList<>(); @@ -1496,6 +1541,7 @@ RecyclingBasketItemVo thisTousseItemVo = find(tousseItemVo,entry.getKey()); //这一次循环处理的包数量 int thisTousseAmount = MathTools.min(needTousseAmount, thisTousseItemVo.getAmount()).intValue(); + tousseAmoutMap.put(tousseItem.getTousseDefinitionId(), MathTools.add(tousseAmoutMap.get(tousseItem.getTousseDefinitionId()), thisTousseAmount).intValue()); //需要的材料的数量 Map materialAmount = getTousseMaterialAmount(thisTousseItemVo,thisTousseAmount); needTousseAmount -= thisTousseAmount; @@ -1550,7 +1596,7 @@ thisTousseItemVo.setAmount(targetAmount); if(thisTousseItemVo.getAmount().intValue() == 0){ //都还完了,没有了 - tousseItems.remove(thisTousseItemVo); +// tousseItems.remove(thisTousseItemVo); tousseItemVo.remove(thisTousseItemVo); // basketItems.removeAll(basketItemVos); }