Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/result/LoadTousseLeaseItemsResultBuilder.java =================================================================== diff -u -r20702 -r20762 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/result/LoadTousseLeaseItemsResultBuilder.java (.../LoadTousseLeaseItemsResultBuilder.java) (revision 20702) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/result/LoadTousseLeaseItemsResultBuilder.java (.../LoadTousseLeaseItemsResultBuilder.java) (revision 20762) @@ -104,7 +104,7 @@ /** - * 构造借物单物品详情归还的节点 + * 构造借物单物品详情归还的节点(有三个归还的途径1、手动输入归还数量归还 2、点击“完全归还”按钮归还 3、使用记录转申请单). * * @param recyclingApplication 借物单 * @param children 借物单的归还物品节点 @@ -126,26 +126,28 @@ } /** - * 构造通过全部归还的归还详情 + * 构造通过全部归还的归还详情. * * @param recyclingApplication 借物单 * @param children 借物单的归还物品节点 * @param tousseItem 借物单上的物品 */ private void buildAllReturnAmount(RecyclingApplication recyclingApplication, JSONArray children, TousseItem tousseItem) { - Map canReturnAmount = recyclingApplicationManager.getCanReturnAmount(recyclingApplication.getId()); - if (InvoicePlan.RETURN_STATUS_RETURNED.equals(recyclingApplication.getReturnStatus()) && MapUtils.isNotEmpty(canReturnAmount)) { - JSONObject json = new JSONObject(); - List applicationItems = recyclingApplication.getApplicationItems(); - //因为这些都是申请的物品,所以这里的applicationItems不用判空 - applicationItems.stream().filter(item -> tousseItem.getTousseName().equals(item.getTousseName())).findFirst().ifPresent(item -> { - json.put("id", item.getId()); - json.put("tousseName", item.getTousseName()); - json.put("type", "使用完全归还"); - json.put("amount", MapUtils.getInteger(canReturnAmount, item.getTousseName(), 0)); - json.put("time", dateFormat.format(recyclingApplication.getSubmitTime())); - this.buildLeafNode(json, children); - }); + if (InvoicePlan.RETURN_STATUS_RETURNED.equals(recyclingApplication.getReturnStatus())) { + Map canReturnAmount = recyclingApplicationManager.getCanReturnAmount(recyclingApplication.getId()); + if (MapUtils.isNotEmpty(canReturnAmount)) { + JSONObject json = new JSONObject(); + List applicationItems = recyclingApplication.getApplicationItems(); + //因为这些都是申请的物品,所以这里的applicationItems不用判空 + applicationItems.stream().filter(item -> tousseItem.getTousseName().equals(item.getTousseName())).findFirst().ifPresent(item -> { + json.put("id", item.getId()); + json.put("tousseName", item.getTousseName()); + json.put("type", "使用完全归还"); + json.put("amount", MapUtils.getInteger(canReturnAmount, item.getTousseName(), 0)); + json.put("time", dateFormat.format(recyclingApplication.getSubmitTime())); + this.buildLeafNode(json, children); + }); + } } } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java =================================================================== diff -u -r20727 -r20762 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 20727) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManager.java (.../RecyclingApplicationManager.java) (revision 20762) @@ -160,6 +160,11 @@ public boolean returnEditApplication(String id); + /** + * 获取借物单待归还(物品和数量的Map). + * @param borrowApplicationId 借物单id + * @return 返回值为未归还数量,即 [待归还数量 = 申请借物数量 - 申请归还数量(若已回收,则为回收数量为准,否则申请归还的数量为准)] + */ public Map getUnreturnTousse(Long borrowApplicationId); /** @@ -242,8 +247,8 @@ public void addDisinfectTousseItem(InvoicePlan plan, Integer prepareRecycleAmount, TousseDefinition td, TousseItem item); /** - * 根据借物单id查找能归还的数量(计算方式:待归还数量-已经转申请单的数量) - * @param borrowApplicationId 借物单id + * 根据借物单id查找能归还的数量(计算方式:待归还数量-已经转申请单的数量). + * @param borrowApplicationId 借物单id * @return 返回格式(key:物品名字,value: 数量) */ Map getCanReturnAmount(Long borrowApplicationId); @@ -293,8 +298,8 @@ public RecyclingApplication newRecyclingApplication(String applicant,String depart,String departCoding); /** - * 根据借物单id来查找该借物单上的物品被转换成申请单的情况 - * @param borrowApplicationId 借物单id + * 根据借物单id来查找该借物单上的物品被转换成申请单的情况. + * @param borrowApplicationId 借物单id * @return 返回的参数是具体的转换情况 */ List> getConvertAppAmountDetail(Long borrowApplicationId); Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java =================================================================== diff -u -r20727 -r20762 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 20727) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/RecyclingApplicationManagerImpl.java (.../RecyclingApplicationManagerImpl.java) (revision 20762) @@ -3742,8 +3742,8 @@ } /** - * 根据借物单id来查找该借物单上的物品被转换成申请单的情况 - * @param borrowApplicationId 借物单id + * 根据借物单id来查找该借物单上的物品被转换成申请单的情况. + * @param borrowApplicationId 借物单id * @return 返回参数有两个(key:物品的名称,value:该物品被转换成申请单的数量) */ private Map getConvertAppAmount(Long borrowApplicationId){ @@ -3771,12 +3771,10 @@ Integer unReturnAmount = entry.getValue(); //通过名字去找已经转换去申请单的数量 Integer convertAmount = MapUtils.getInteger(convertAppAmount, tousseName, null); - //如果找不到,则证明该物品没有转过申请单 + //如果找不到,则证明该物品没有转过申请单,如果找到要待归还的数量要减去转过申请单的数量 if (convertAmount == null) { map.put(tousseName, unReturnAmount); - } - //如果找到要待归还的数量要减去转过申请单的数量 - else { + } else { int count = Math.subtractExact(unReturnAmount, convertAmount); if (count > 0){ map.put(tousseName, count); @@ -3842,8 +3840,9 @@ if(borrowApplication == null) return new HashMap<>(); - // 先获取借物单已发货的所有物品的已发数量 final Map unreturnTousseMap = new HashMap<>(); + + // 1、先获取借物单已发货的所有物品的已发数量 CollectionUtils.forAllDo(borrowApplication.getApplicationItems(), new Closure(){ @Override public void execute(TousseItem borrowTousseItem) { @@ -3856,7 +3855,7 @@ } }); - // 遍历所有已申请归还的物品,将unreturnedTousseMap对应的待发数量减去 + // 2、遍历所有已申请归还的物品,将unreturnedTousseMap对应的待发数量减去 CollectionUtils.forAllDo(borrowApplication.getRecyclingApplications(), new Closure() { @Override public void execute(RecyclingApplication returnApplication) { @@ -3868,7 +3867,7 @@ String tousseName = returnedTousseItem.getTousseName(); Integer unreturnAmount = unreturnTousseMap.get(tousseName); if(unreturnAmount != null){ - // 若已回收,则减去回收数量,否则减去申请数量 + // 若已回收,则减去回收数量,否则减去申请归还的数量 Integer returnedAmount = returnedTousseItem.getRecyclingAmount(); if(returnedAmount == null || returnedAmount == 0) returnedAmount = returnedTousseItem.getAmount();