Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java =================================================================== diff -u -r16335 -r16474 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 16335) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 16474) @@ -1370,58 +1370,7 @@ /*计算归还状态*/ if(isBorrowTousse){ - Collection needReturnTousseItemsIncludeTerminated = CollectionUtils - .select(invoicePlan.getApplicationItems(), - new Predicate() { - @Override - public boolean evaluate(TousseItem tousseItem) { - return (tousseItem.getSendOutAmount() != null && tousseItem - .getSendOutAmount() > 0); - } - }); - - Collection needReturnTousseItemsExcludeTerminated = CollectionUtils - .select(needReturnTousseItemsIncludeTerminated, - PredicateUtils.notPredicate(terminatePred1)); - - Predicate notReturnPred = new Predicate() { - @Override - public boolean evaluate(TousseItem vo) { - return (vo.getAlreadySignedAmount() == null || vo.getAlreadySignedAmount() == 0); - } - }; - - Predicate returnedPred = new Predicate() { - @Override - public boolean evaluate(TousseItem vo) { - int sendOutAmount = (vo.getSendOutAmount() != null ? vo.getSendOutAmount() : 0); - int alreadySignedAmount = (vo.getAlreadySignedAmount() != null ? vo.getAlreadySignedAmount() : 0); - return (alreadySignedAmount >= sendOutAmount); - } - }; - - String returnStatus; - if(needReturnTousseItemsIncludeTerminated.isEmpty()){ - // 不存在应归还的物品 - returnStatus = null; - - } else if(needReturnTousseItemsExcludeTerminated.isEmpty()){ - // 所有应归还的物品已终止 - returnStatus = InvoicePlan.STATUS_END; - - } else if(CollectionUtils.matchesAll(needReturnTousseItemsExcludeTerminated, notReturnPred)){ - // 所有应归还的物品,都未归还 - returnStatus = InvoicePlan.RETURN_STATUS_UNRETURNED; - - } else if(CollectionUtils.matchesAll(needReturnTousseItemsExcludeTerminated, returnedPred) && InvoicePlan.DELIVERSTATUS_DELIVERED.equals(invoicePlan.getDeliverStatus())){ - // 所有应归还的物品,都已归还且当发货状态为已发货 - returnStatus = InvoicePlan.RETURN_STATUS_RETURNED; - - } else { - // 其余情况都是部分归还 - returnStatus = InvoicePlan.RETURN_STATUS_PARTIALLY_RETURNED; - } - invoicePlan.setReturnStatus(returnStatus); + this.calculateReturnStatus(invoicePlan); } /*计算归还状态*/ @@ -1442,6 +1391,68 @@ invoicePlan.setEndStatus(endStatus); /*计算终止状态*/ } + + @Override + public void calculateReturnStatus(InvoicePlan invoicePlan) { + Collection needReturnTousseItemsIncludeTerminated = CollectionUtils + .select(invoicePlan.getApplicationItems(), + new Predicate() { + @Override + public boolean evaluate(TousseItem tousseItem) { + return (tousseItem.getSendOutAmount() != null && tousseItem + .getSendOutAmount() > 0); + } + }); + + Collection needReturnTousseItemsExcludeTerminated = CollectionUtils + .select(needReturnTousseItemsIncludeTerminated, + PredicateUtils.notPredicate(new Predicate() { + @Override + public boolean evaluate(TousseItem vo) { + return (BooleanUtils.isTrue(vo.getIsTerminated())); + } + })); + + Predicate notReturnPred = new Predicate() { + @Override + public boolean evaluate(TousseItem vo) { + return (vo.getAlreadySignedAmount() == null || vo.getAlreadySignedAmount() == 0); + } + }; + + Predicate returnedPred = new Predicate() { + @Override + public boolean evaluate(TousseItem vo) { + int sendOutAmount = (vo.getSendOutAmount() != null ? vo.getSendOutAmount() : 0); + int alreadySignedAmount = (vo.getAlreadySignedAmount() != null ? vo.getAlreadySignedAmount() : 0); + return (alreadySignedAmount >= sendOutAmount); + } + }; + + String returnStatus; + if(needReturnTousseItemsIncludeTerminated.isEmpty()){ + // 不存在应归还的物品 + returnStatus = null; + + } else if(needReturnTousseItemsExcludeTerminated.isEmpty()){ + // 所有应归还的物品已终止 + returnStatus = InvoicePlan.STATUS_END; + + } else if(CollectionUtils.matchesAll(needReturnTousseItemsExcludeTerminated, notReturnPred)){ + // 所有应归还的物品,都未归还 + returnStatus = InvoicePlan.RETURN_STATUS_UNRETURNED; + + } else if(CollectionUtils.matchesAll(needReturnTousseItemsExcludeTerminated, returnedPred) && InvoicePlan.DELIVERSTATUS_DELIVERED.equals(invoicePlan.getDeliverStatus())){ + // 所有应归还的物品,都已归还且当发货状态为已发货 + returnStatus = InvoicePlan.RETURN_STATUS_RETURNED; + + } else { + // 其余情况都是部分归还 + returnStatus = InvoicePlan.RETURN_STATUS_PARTIALLY_RETURNED; + } + invoicePlan.setReturnStatus(returnStatus); + } + // 计算和设置发货状态 public void computeAndSetInvoiceStatus(InvoicePlan invoicePlan) { if(invoicePlan == null|| CollectionUtils.isEmpty(invoicePlan.getApplicationItems())) Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManager.java =================================================================== diff -u -r16316 -r16474 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManager.java (.../InvoicePlanManager.java) (revision 16316) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManager.java (.../InvoicePlanManager.java) (revision 16474) @@ -121,6 +121,13 @@ public void computeAndSetStatus(InvoicePlan invoicePlan); // 计算和设置发货状态 public void computeAndSetInvoiceStatus(InvoicePlan invoicePlan) ; + + /** + * 计算归还状态 + * @param invoicePlan {@link InvoicePlan} + */ + void calculateReturnStatus(InvoicePlan invoicePlan); + public void terminateTousseItemByIds(Collection tousseItemIds,String endCase); public void terminateTousseItems(Collection tousseItems); public void terminateInvoicePlan(InvoicePlan invoicePlan, String userName, String endCause); Index: ssts-web/src/main/java/com/forgon/disinfectsystem/borrowrecord/service/BorrowRecordManagerImpl.java =================================================================== diff -u -r16427 -r16474 --- ssts-web/src/main/java/com/forgon/disinfectsystem/borrowrecord/service/BorrowRecordManagerImpl.java (.../BorrowRecordManagerImpl.java) (revision 16427) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/borrowrecord/service/BorrowRecordManagerImpl.java (.../BorrowRecordManagerImpl.java) (revision 16474) @@ -1,5 +1,6 @@ package com.forgon.disinfectsystem.borrowrecord.service; +import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Date; import java.util.LinkedList; @@ -305,6 +306,8 @@ this.resetLendGoodsBrief(invoicePlan, map); //重新计算发货状态 invoicePlanManager.computeAndSetInvoiceStatus(invoicePlan); + //重新计算归还状态 + invoicePlanManager.calculateReturnStatus(invoicePlan); } catch (Exception e) { logger.error(e); @@ -418,12 +421,11 @@ for (TousseItem tousseItem : tousseItems) { //找出对应要修改的tousseItem并且判断修改的数量是否小于已发货数量 if (tousseItem.getId().equals(applicationItem.getId())){ - Integer newAmount = tousseItem.getAmount(); - if (newAmount < applicationItem.getSendOutAmount()){ + if (tousseItem.getAmount() < applicationItem.getSendOutAmount()){ throw new RuntimeException("修改的数量不能小于已发货数量!"); } this.recordModifyAmountLog(invoicePlan, applicationItem, tousseItem); - applicationItem.setAmount(newAmount); + this.resetTousseItem(applicationItem, tousseItem); break; } } @@ -471,4 +473,19 @@ appLogManager.saveLog(loginUser, Log.MODEL_BORROW, Log.TYPE_UPDATE, logMsg); } + /** + * 重新设置tousseItem的属性 + * @param oldItem 旧的tousseItem + * @param newItem 页面传过来的参数 + */ + private void resetTousseItem(TousseItem oldItem, TousseItem newItem){ + Integer newAmount = newItem.getAmount(); + //设置新的申请数量 + oldItem.setAmount(newAmount); + DecimalFormat df = new DecimalFormat("#.00"); + String format = df.format(oldItem.getPrice() * newAmount); + //设置新的总计价格,保留两位小数 + oldItem.setRowPrice(Double.parseDouble(format)); + } + }