Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/GoodsBindingConfigManager.java =================================================================== diff -u -r22686 -r36543 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/GoodsBindingConfigManager.java (.../GoodsBindingConfigManager.java) (revision 22686) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/GoodsBindingConfigManager.java (.../GoodsBindingConfigManager.java) (revision 36543) @@ -3,6 +3,7 @@ import java.util.Collection; import java.util.List; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.goodsBindingConfig.entity.GoodsBindingConfig; import com.forgon.tools.hibernate.BasePoManager; @@ -19,5 +20,5 @@ * @param tousseItems * @return */ - public List getTousseItemBindingGoods(Collection tousseItems); + public List getTousseItemBindingGoods(Collection tousseItems,List tds); } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/GoodsBindingConfigManagerImpl.java =================================================================== diff -u -r22686 -r36543 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/GoodsBindingConfigManagerImpl.java (.../GoodsBindingConfigManagerImpl.java) (revision 22686) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/GoodsBindingConfigManagerImpl.java (.../GoodsBindingConfigManagerImpl.java) (revision 36543) @@ -19,6 +19,11 @@ extends BasePoManagerImpl implements GoodsBindingConfigManager{ + private TousseDefinitionManager tousseDefinitionManager; + public void setTousseDefinitionManager( + TousseDefinitionManager tousseDefinitionManager) { + this.tousseDefinitionManager = tousseDefinitionManager; + } @Override public List getAllBindingGoods(Collection goodsId){ String mainGoodsIdsSql = SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.mainGoodId", goodsId); @@ -34,27 +39,30 @@ * @return */ @Override - public List getTousseItemBindingGoods(Collection tousseItems){ + public List getTousseItemBindingGoods(Collection tousseItems, List tousseDefinitions){ //获取所有的包定义 if(CollectionUtils.isNotEmpty(tousseItems)){ - List tdIds = tousseItems.stream().filter(p->DatabaseUtil.isPoIdValid(p.getTousseDefinitionId())).map(p->p.getTousseDefinitionId()).collect(Collectors.toList()); - List tds = objectDao.findByIds(TousseDefinition.class.getSimpleName(), tdIds); - //包定义祖先id与申请项的对应关系 - if(CollectionUtils.isNotEmpty(tds)){ - List goodsIds = new ArrayList<>(); - for(TousseDefinition td : tds){ - if(td.isDisinfection()){ - //消毒物品用祖先包定义id - if(DatabaseUtil.isPoIdValid(td.getAncestorID())){ - goodsIds.add(td.getAncestorID()); - continue; - } + List tds = null; + if(tds == null){ + List tdIds = tousseItems.stream().filter(p->DatabaseUtil.isPoIdValid(p.getTousseDefinitionId())).map(p->p.getTousseDefinitionId()).collect(Collectors.toList()); + tds = objectDao.findByIds(TousseDefinition.class.getSimpleName(), tdIds); + }else{ + tds = tousseDefinitions; + } + List goodsIds = new ArrayList<>(); + for (TousseItem ti : tousseItems) { + TousseDefinition td = tousseDefinitionManager.getTousseDefinition(tousseDefinitions, ti.getTousseDefinitionId()); + if(td.isDisinfection()){ + //消毒物品用祖先包定义id + if(DatabaseUtil.isPoIdValid(td.getAncestorID())){ + goodsIds.add(td.getAncestorID()); + continue; } - //非消毒物品,使用包定义本身的id - goodsIds.add(td.getId()); } - return getAllBindingGoods(goodsIds); + //非消毒物品,使用包定义本身的id + goodsIds.add(td.getId()); } + return getAllBindingGoods(goodsIds); } return null; } Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java =================================================================== diff -u -r36539 -r36543 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 36539) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 36543) @@ -2026,7 +2026,7 @@ } }else{ //不是回收申请单,申请数量需要减掉归还数量,如果都已经归还了,那就终止掉。如果整张单都归还了,就把单终止掉 - List terminateTousseItemIds = new ArrayList<>(); + List terminateTousseItems = new ArrayList(); JSONArray modifiedDetails = new JSONArray(); for(Entry entry : returnedTousseAmount.entrySet()){ Long tousseDefinitionId = entry.getKey(); @@ -2042,15 +2042,15 @@ }else{ JSONUtil.addLogProperty(modifiedItem, "操作", "全部归还,终止申请项"); //都归还了,终止掉 - terminateTousseItemIds.add(tousseItem.getId()); + terminateTousseItems.add(tousseItem); } modifiedDetails.add(modifiedItem); } } applicationLogManager.saveApplicationLog(application, modifiedDetails.toString(), ApplicationLogStatusEnum.RECYCLING_RETURN); - if(CollectionUtils.isNotEmpty(terminateTousseItemIds)){ - invoicePlanManager.checkTousseItemCanCancel(terminateTousseItemIds); - invoicePlanManager.terminateTousseItemByIds(terminateTousseItemIds, "物品回收时全部归还"); + if(terminateTousseItems.size() > 0){ + invoicePlanManager.checkTousseItemCanCancel(terminateTousseItems); + invoicePlanManager.terminateTousseItemByIds(tousseDefinitions, terminateTousseItems, "物品回收时全部归还"); } //如果回收的所有物品都全部归还,那就不保存历史回收记录 List remainTousseItemvo = tousseItemJson.stream().filter(p->p.getAmount() != 0).collect(Collectors.toList()); @@ -2780,7 +2780,7 @@ } }else{ //不是回收申请单,申请数量需要减掉归还数量,如果都已经归还了,那就终止掉。如果整张单都归还了,就把单终止掉 - List terminateTousseItemIds = new ArrayList<>(); + List terminateTousseItems = new ArrayList(); JSONArray modifiedDetails = new JSONArray(); for(Entry entry : returnedTousseAmount.entrySet()){ Long tousseDefinitionId = entry.getKey(); @@ -2796,15 +2796,15 @@ }else{ JSONUtil.addLogProperty(modifiedItem, "操作", "全部归还,终止申请项"); //都归还了,终止掉 - terminateTousseItemIds.add(tousseItem.getId()); + terminateTousseItems.add(tousseItem); } modifiedDetails.add(modifiedItem); } } applicationLogManager.saveApplicationLog(application, modifiedDetails.toString(), ApplicationLogStatusEnum.RECYCLING_RETURN); - if(CollectionUtils.isNotEmpty(terminateTousseItemIds)){ - invoicePlanManager.checkTousseItemCanCancel(terminateTousseItemIds); - invoicePlanManager.terminateTousseItemByIds(terminateTousseItemIds, "物品回收时全部归还"); + if(terminateTousseItems.size() > 0){ + invoicePlanManager.checkTousseItemCanCancel(terminateTousseItems); + invoicePlanManager.terminateTousseItemByIds(tousseDefinitions,terminateTousseItems, "物品回收时全部归还"); } } } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java =================================================================== diff -u -r36539 -r36543 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 36539) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 36543) @@ -5515,23 +5515,31 @@ } /*计算发货状态*/ } + /** * 终止一张申请单上的申请项 */ @Override public void terminateTousseItemByIds(Collection tousseItemIds,String endCase){ - List list = tousseItemManager.getCollectionForUpdate(tousseItemIds); + List tousseItems = tousseItemManager.getCollectionForUpdate(tousseItemIds); + terminateTousseItemByIds(null, tousseItems, endCase); + } + @Override + public void terminateTousseItemByIds(List tds, + List tousseItems, String endCase) { List toTerminates = new ArrayList<>(); // if (tousseItemIds != null && tousseItemIds.size() > 0){ // Criteria criteria = objectDao.getHibernateSession().createCriteria(TousseItem.class); // criteria.add(Restrictions.in("id", new HashSet<>(tousseItemIds))); // list = criteria.list(); // } - if(CollectionUtils.isNotEmpty(list)){ + if(CollectionUtils.isNotEmpty(tousseItems)){ InvoicePlan plan = null; List terminatedNames = new ArrayList<>(); - for(int i = 0;i < list.size();i++){ - TousseItem tousseItem = list.get(i); + Collection tousseItemIds = new ArrayList(); + for(int i = 0;i < tousseItems.size();i++){ + TousseItem tousseItem = tousseItems.get(i); + tousseItemIds.add(tousseItem.getId()); if(plan == null){ plan = tousseItem.getInvoicePlan(); if(plan != null){ @@ -5553,20 +5561,28 @@ } } //获取可以终止的绑定物品 - terminateBindingGoods(tousseItemIds, toTerminates, plan); + terminateBindingGoods(tousseItemIds, toTerminates, plan, tds); //toTerminateNames非空,但是terminatedNames可能为空(都是未终止的),也可能非空(有一部分是未终止的,有一部分是已终止的,已终止的不管,把未终止的终止掉) String endTime = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm"); String userName = AcegiHelper.getLoginUserFullName(); String terminateTousseNames = String.join("、", toTerminates.stream().map(p->p.getTousseName()).collect(Collectors.toList())); - String remark = "【该申请单申请的" + terminateTousseNames + "在" + endTime + "被" + userName + "终止"; + StringBuffer remark = new StringBuffer(); + remark.append("【该申请单申请的"); + remark.append(terminateTousseNames); + remark.append("在"); + remark.append(endTime); + remark.append("被"); + remark.append(userName); + remark.append("终止"); if (StringUtils.isNotBlank(endCase)) { - remark += ",原因:" + endCase; + remark.append(",原因:"); + remark.append(endCase); } - remark += "】"; + remark.append("】"); plan.setApplicationEndTime(endTime); plan.setApplicationEnd(userName); - CssdUtils.appendRemarkOfInvoicePlan(plan, remark); - applicationLogManager.saveApplicationLog(plan, remark, ApplicationLogStatusEnum.PART_TERMINATE); + CssdUtils.appendRemarkOfInvoicePlan(plan, remark.toString()); + applicationLogManager.saveApplicationLog(plan, remark.toString(), ApplicationLogStatusEnum.PART_TERMINATE); } terminateTousseItems(toTerminates); @@ -5613,7 +5629,7 @@ * @param plan */ private void terminateBindingGoods(Collection tousseItemIds, - List toTerminates, InvoicePlan plan) { + List toTerminates, InvoicePlan plan, List tds) { if(plan == null || CollectionUtils.isEmpty(plan.getApplicationItems()) || toTerminates == null){ return; } @@ -5624,7 +5640,7 @@ List othTi = tousseItemManager.getCollectionForUpdate(otherTiIds); List disinfectTi = othTi.stream().filter(p->p.isDisinfection()).collect(Collectors.toList()); List disinfectTd = tousseDefinitionManager.getCollection(disinfectTi.stream().map(p->p.getTousseDefinitionId()).collect(Collectors.toSet())); - List bindings = goodsBindingConfigManager.getTousseItemBindingGoods(toTerminates); + List bindings = goodsBindingConfigManager.getTousseItemBindingGoods(toTerminates,tds); for(TousseItem ti : othTi){ if(BooleanUtils.isTrue(ti.getIsTerminated())){ continue; @@ -6102,21 +6118,26 @@ if(CollectionUtils.isEmpty(tousseItemIds)){ throw new OperationException("没有待终止的物品"); } - List list = tousseItemManager.getCollection(tousseItemIds); + List tousseItems = tousseItemManager.getCollection(tousseItemIds); + checkTousseItemCanCancel(tousseItems); + } + + @Override + public void checkTousseItemCanCancel(List tousseItems) { //用来保存不能终止的器械包名字 List result = new ArrayList<>(); - for (TousseItem tousseItem : list) { + for (TousseItem tousseItem : tousseItems) { Integer recyclingAmount = IntegerUtils.parse(tousseItem.getRecyclingAmount()); Integer sendOutAmount = IntegerUtils.parse(tousseItem.getSendOutAmount()); - Integer amount = IntegerUtils.parse(tousseItem.getAmount()); String isInvoice = tousseItem.getIsInvoice(); - String isRecycling = tousseItem.getIsRecycling(); if (tousseItem.isRecycling() && recyclingAmount > 0){ if (Constants.STR_NO.equals(isInvoice) || (Constants.STR_YES.equals(isInvoice) && recyclingAmount - sendOutAmount == 0)){ result.add(tousseItem.getTousseName()); continue; } } + Integer amount = IntegerUtils.parse(tousseItem.getAmount()); + String isRecycling = tousseItem.getIsRecycling(); //一次性物品isRecycling是为null,敷料包isRecycling是否 if ((Constants.STR_NO.equals(isRecycling) || isRecycling == null) && Constants.STR_YES.equals(isInvoice) && amount - sendOutAmount == 0){ result.add(tousseItem.getTousseName()); Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManager.java =================================================================== diff -u -r36539 -r36543 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManager.java (.../InvoicePlanManager.java) (revision 36539) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManager.java (.../InvoicePlanManager.java) (revision 36543) @@ -296,8 +296,14 @@ void calculateReturnStatus(InvoicePlan invoicePlan); public void terminateTousseItemByIds(Collection tousseItemIds,String endCase); - /** + * 终止申请项 + * @param tds 包定义 避免多次查询 + * @param tousseItems 终止的申请项 + * @param endCase 终止原因 + */ + public void terminateTousseItemByIds(List tds, List tousseItems,String endCase); + /** * 终止申请项. * @param tousseItems 需要终止的申请项集合 */ @@ -388,7 +394,6 @@ */ void checkTousseItemCanCancel(Collection tousseItemIds); - /** * 获得未归还的提示 * departCode 部门编号 @@ -540,4 +545,10 @@ * @return */ public JSONArray getWaitDeliverInvoicePlanDetailByIDAndTousseName(String invoicePlanIDs, String tousseType, String tousseName); + + /** + * 验证申请项能否被终止 + * @param tousseItems + */ + void checkTousseItemCanCancel(List tousseItems); }