Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java =================================================================== diff -u -r26217 -r26234 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 26217) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 26234) @@ -438,6 +438,51 @@ updateRelativeTousseInstanceRecyclingItemId(recyclingItem); } recyclingRecord.setItems(items); + + //判断回记录的所有回收项的数量和申请数量、以及对应的申请单的所有申请项的申请数量与回收数量是否大于0,如果没有数量大于0的项,则删除回收记录及对应的申请单 + if(CollectionUtils.isNotEmpty(items)){ + items = (List)CollectionUtils.select(items, + new Predicate(){ + @Override + public boolean evaluate(RecyclingItem object) { + if((object.getAmount() == null || object.getAmount() == 0)){ + return false; + } + return true; + } + }); + recyclingRecord.setItems(items); + } + + if(CollectionUtils.isEmpty(items)){ + InvoicePlan recyclingApplication = + recyclingRecord.getRecyclingApplication(); + if(recyclingApplication == null || + CollectionUtils.isEmpty(recyclingApplication.getApplicationItems())){ + objectDao.delete(recyclingRecord); + objectDao.delete(recyclingApplication); + recyclingRecord = null; + }else{ + Collection applicationTousseItemList = CollectionUtils.select(recyclingApplication.getApplicationItems(), + new Predicate(){ + @Override + public boolean evaluate(TousseItem object) { + if((object.getAmount() == null || object.getAmount() == 0) + && (object.getRecyclingAmount() == 0)){ + return false; + } + return true; + } + }); + if(CollectionUtils.isEmpty(applicationTousseItemList)){ + objectDao.delete(recyclingRecord); + objectDao.delete(recyclingApplication); + recyclingRecord = null; + }else{ + recyclingApplication.setApplicationItems((List)applicationTousseItemList); + } + } + } } /** @@ -789,10 +834,10 @@ } } List list = new ArrayList(); - for (String tousseName : map.keySet()) { - Map> itemMap = map.get(tousseName); - for (String basketName : itemMap.keySet()) { - list.addAll(itemMap.get(basketName)); + for (String tousseDefinitionId : map.keySet()) { + Map> itemMap = map.get(tousseDefinitionId); + for (String basketBarcode : itemMap.keySet()) { + list.addAll(itemMap.get(basketBarcode)); } } return list; @@ -1377,6 +1422,7 @@ throw new SystemException("当前申请单已确认,不能保存!"); } inventoryConfirm(recyclingRecord,recyclingContext); + logger.debug("inventoryConfirm finish..."); // throw new RuntimeException("测试"); } @@ -1711,6 +1757,8 @@ RecyclingContext rc = new RecyclingContext(); rc.setJsonParam(paramsNew.toString()); rc.setAutoReturnTheBorrowingTousse(autoReturnTheBorrowingTousse); + rc.setNeedAppendRemark(true); + rc.setReturnGoodsVo(returnGoodsVo); rc.parseParameters(); inventoryConfirm(newRecord,rc); } @@ -1775,12 +1823,18 @@ updateInvoicePlan(record,recyclingContext, tousseItemJson, deleteTousseItems, tousseDefinitions, errorDamageDetail, basketItemJson, urgentTousseItems,isForeignTousseApplication,isChangeApplyDepart,tousseDefIdTousseItemVoMap); - //等申请单确定创建了以后,如果需要自动归还所借的物品时,则添加相应的备注 - if(autoReturnTheBorrowingTousse){ - //回收记录的原申请单增加备注归还的备注信息(参考科室申领手工添加申请单时如果确定) - StringBuilder sb = RecyclingApplicationUtils.generateReturnGoodsRemark(RecyclingApplicationUtils.RETURNGOODSOPERATIONTYPE_RECYCLE, - returnGoodsVo.getActualAllReturnTousses(), returnGoodsVo.getRestApplyTousses()); - CssdUtils.appendRemarkOfInvoicePlan(record.getRecyclingApplication(),sb.toString()); + //等申请单确定创建了以后,如果需要添加归还的备注时,则添加相应的备注 + if(recyclingContext.getNeedAppendRemark() != null && recyclingContext.getNeedAppendRemark()){ + returnGoodsVo = recyclingContext.getReturnGoodsVo(); + if(returnGoodsVo != null){ + MultiValueMap actualAllReturnTousses = returnGoodsVo.getActualAllReturnTousses(); + if(actualAllReturnTousses != null && actualAllReturnTousses.size() > 0){ + //回收记录的原申请单增加备注归还的备注信息(参考科室申领手工添加申请单时如果确定) + StringBuilder sb = RecyclingApplicationUtils.generateReturnGoodsRemark(RecyclingApplicationUtils.RETURNGOODSOPERATIONTYPE_RECYCLE, + actualAllReturnTousses, returnGoodsVo.getRestApplyTousses()); + CssdUtils.appendRemarkOfInvoicePlan(record.getRecyclingApplication(),sb.toString()); + } + } } //修改已清洗或清洗中的篮筐,清洗工作量需要重新计算 @@ -1789,21 +1843,24 @@ boolean isSecondRecycleForForeignTousse = (application == null) ? false : application.isSecondRecycleForForeignTousse(); //设置篮筐及篮筐内物品 setClassifyBaskets(basketItemJson,tousseDefinitions,record,containerMap,isSecondRecycleForForeignTousse,toReSetWorkloadMap,recyclingContext.getTousseIntoBasketInfo()); - //设置回收物品 + //设置回收物品(如果回收项为空或(所有回收项的物品申请数量及回收数量都为0、null)、同时对应申请单的申请项为空或(所有申请项的物品申请数量及回收数量都为0、null)),则删除此回收记录及对象设置为空 setRecylingItems(record, tousseItemJson,tousseDefinitions,urgentTousseItems,tousseDefIdTousseItemVoMap); - //设置回收误差、器械报损 - setMaterialErrorDamageDetail(record, errorDamageDetail,confirmation); - //设置回收记录状态 - setRecyclingRecordStatus(record,confirmation); - //设置装配任务 - setPackingTask(record,tousseItemJson,tousseDefinitions,confirmation,urgentTousseItems,isForeignTousseApplication,containerMap, - isChangeApplyDepart,recyclingContext); - //更新借物单状态 - updateBorrowApplication(record,tousseItemJson); - //已清洗完成或或清洗中篮筐修改后重新计算清洗工作量 - resetWashRecordWorkLoad(toReSetWorkloadMap); - //将丢失报损信息记录按标识牌记录到单独的表中 - idCardMaterialErrorDamageManager.save(record); + + if(record != null){ + //设置回收误差、器械报损 + setMaterialErrorDamageDetail(record, errorDamageDetail,confirmation); + //设置回收记录状态 + setRecyclingRecordStatus(record,confirmation); + //设置装配任务 + setPackingTask(record,tousseItemJson,tousseDefinitions,confirmation,urgentTousseItems,isForeignTousseApplication,containerMap, + isChangeApplyDepart,recyclingContext); + //更新借物单状态 + updateBorrowApplication(record,tousseItemJson); + //已清洗完成或或清洗中篮筐修改后重新计算清洗工作量 + resetWashRecordWorkLoad(toReSetWorkloadMap); + //将丢失报损信息记录按标识牌记录到单独的表中 + idCardMaterialErrorDamageManager.save(record); + } } /** @@ -1886,8 +1943,8 @@ } for(TousseItem tousseItem : recyclingApplication.getApplicationItems()){ //包含目前还剩下的包的数量 - List tousseItemVo = TousseDefinitionAble.filter(tousseItems, tousseItem.getTousseDefinitionId()); - int tousseAmount = RecyclingBasketItemVo.totalAmount(tousseItemVo); + List tousseItemVoList = TousseDefinitionAble.filter(tousseItems, tousseItem.getTousseDefinitionId()); + int tousseAmount = RecyclingBasketItemVo.totalAmount(tousseItemVoList); List basketItemVos = TousseDefinitionAble.filter(basketItems, tousseItem.getTousseDefinitionId()); //如果是材料,那就按篮筐条码或者篮筐分组条码进行分组,以便于一起处理 Map> basketMaps = groupByBasketBarcode(basketItemVos); @@ -1900,7 +1957,7 @@ } for(Map.Entry> entry : basketMaps.entrySet()){ - RecyclingBasketItemVo thisTousseItemVo = find(tousseItemVo,entry.getKey()); + RecyclingBasketItemVo thisTousseItemVo = find(tousseItemVoList,entry.getKey()); //这一次循环处理的包数量 int thisTousseAmount = MathTools.min(needTousseAmount, thisTousseItemVo.getAmount()).intValue(); tousseAmoutMap.put(tousseItem.getTousseDefinitionId(), MathTools.add(tousseAmoutMap.get(tousseItem.getTousseDefinitionId()), thisTousseAmount).intValue()); @@ -1959,7 +2016,7 @@ if(thisTousseItemVo.getAmount().intValue() == 0){ //都还完了,没有了 // tousseItems.remove(thisTousseItemVo); - tousseItemVo.remove(thisTousseItemVo); + tousseItemVoList.remove(thisTousseItemVo); // basketItems.removeAll(basketItemVos); } } @@ -1975,9 +2032,9 @@ } //剩下的包的数量 - tousseAmount = RecyclingBasketItemVo.totalAmount(tousseItemVo); + tousseAmount = RecyclingBasketItemVo.totalAmount(tousseItemVoList); //有标识牌的包的数量。这里面的包不可以丢失标识牌 - int haveIdCardTousseAmount = RecyclingBasketItemVo.totalAmount(tousseItemVo.stream().filter(p->StringTools.isNotBlank(p.getIdCardBarcode())).collect(Collectors.toList())); + int haveIdCardTousseAmount = RecyclingBasketItemVo.totalAmount(tousseItemVoList.stream().filter(p->StringTools.isNotBlank(p.getIdCardBarcode())).collect(Collectors.toList())); //剩下的包可以接受的标识牌丢失的数量 int totalIdCardErrorAmount = tousseAmount - haveIdCardTousseAmount; //器械包标识牌的丢失,如果有的话 Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/vo/RecyclingContext.java =================================================================== diff -u -r25737 -r26234 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/vo/RecyclingContext.java (.../RecyclingContext.java) (revision 25737) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/vo/RecyclingContext.java (.../RecyclingContext.java) (revision 26234) @@ -10,6 +10,7 @@ import org.apache.commons.lang3.BooleanUtils; import com.forgon.Constants; +import com.forgon.disinfectsystem.recyclingapplication.vo.ReturnGoodVo; import com.forgon.tools.util.ForgonDateUtils; /** @@ -66,8 +67,20 @@ * 是否自动归还。如果为true,那就要处理自动归还 */ private Boolean autoReturnTheBorrowingTousse; - + /** + * 是否需要添加备注(默认不需要,当有确认归还的器械包时就需要) + * 用于回收保存时的确认归还 + */ + private Boolean needAppendRemark; + + /** + * 回收确认时计算出来的归还对象vo(包括实际归还明细、剩余待归还明细等信息) + * 用于回收保存时的确认归还 + */ + private ReturnGoodVo returnGoodsVo; + + /** * jsonParam转换的json对象 */ private JSONObject jsonParamObject; @@ -200,6 +213,19 @@ public void setAutoReturnTheBorrowingTousse(Boolean autoReturnTheBorrowingTousse) { this.autoReturnTheBorrowingTousse = autoReturnTheBorrowingTousse; } + + public Boolean getNeedAppendRemark() { + return needAppendRemark; + } + public void setNeedAppendRemark(Boolean needAppendRemark) { + this.needAppendRemark = needAppendRemark; + } + public ReturnGoodVo getReturnGoodsVo() { + return returnGoodsVo; + } + public void setReturnGoodsVo(ReturnGoodVo returnGoodsVo) { + this.returnGoodsVo = returnGoodsVo; + } public Boolean getConfirmation() { return confirmation; }