Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManager.java =================================================================== diff -u -r17251 -r17282 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManager.java (.../InvoicePlanManager.java) (revision 17251) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManager.java (.../InvoicePlanManager.java) (revision 17282) @@ -186,9 +186,23 @@ Collection filterQueryByPara(Collection vos); /** - * 根据tousseItemId列表来校验这些申请物品能否被终止 + * 根据tousseItemId列表来校验这些申请物品能否被终止,符合以下一个条件都不能被终止: + *
+ *
1. isTerminated==true
+ *
+ *
+ *
2. 单状态是已终止
+ *
+ *
+ *
3. isInvoice==是
+ *
3.1 isRecycling==是 && recyclingAmount>0 && recyclingAmount-sendOutAmount=0
+ *
3.2 isRecycling==否 && amount-sendOutAmount=0
+ *
+ *
+ *
4. isInvoice==否
+ *
4.1 isRecycling==是 && recyclingAmount>0
+ *
* @param tousseItemIds 申请物品的id列表 - * @throws AuthenticationException 如果抛出异常,则说明该物品已经发过货,不能被终止 */ void checkTousseItemCanCancel(Collection tousseItemIds); } Index: forgon-tools/src/main/java/com/forgon/tools/util/IntegerUtils.java =================================================================== diff -u -r14960 -r17282 --- forgon-tools/src/main/java/com/forgon/tools/util/IntegerUtils.java (.../IntegerUtils.java) (revision 14960) +++ forgon-tools/src/main/java/com/forgon/tools/util/IntegerUtils.java (.../IntegerUtils.java) (revision 17282) @@ -33,4 +33,8 @@ else return false; } + + public static Integer parse(Integer val){ + return val == null ? 0 : val; + } } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java =================================================================== diff -u -r17251 -r17282 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 17251) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 17282) @@ -19,10 +19,12 @@ import com.forgon.exception.OperationException; import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.util.IntegerUtils; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; import org.apache.commons.collections4.Predicate; import org.apache.commons.collections4.PredicateUtils; import org.apache.commons.collections4.Transformer; @@ -1970,10 +1972,49 @@ @Override public void checkTousseItemCanCancel(Collection tousseItemIds){ - String hql = "select tousseName from TousseItem where id in(:ids) and sendOutAmount > 0"; - List tousseNames = objectDao.getHibernateSession().createQuery(hql).setParameterList("ids", tousseItemIds).list(); - if (tousseNames.size() > 0){ - throw new OperationException("物品:" + tousseNames + "已经发货了,不能终止!"); + List list = this.getCancelItemsInfo(tousseItemIds); + //用来保存不能终止的器械包名字 + List result = new ArrayList<>(); + for (TousseItem tousseItem : list) { + //如果isTerminated为true则不让终止 + if (tousseItem.terminated()){ + result.add(tousseItem.getTousseName()); + continue; + } + 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 ("是".equals(isRecycling) && recyclingAmount > 0){ + if ("否".equals(isInvoice) || "是".equals(isInvoice) && recyclingAmount - sendOutAmount == 0){ + result.add(tousseItem.getTousseName()); + continue; + } + } + if ("否".equals(isRecycling) && "是".equals(isInvoice) && amount - sendOutAmount == 0){ + result.add(tousseItem.getTousseName()); + continue; + } + //如果单的终止状态是已终止,则不让终止 + if (InvoicePlan.STATUS_END.equals(tousseItem.getInvoicePlan().getEndStatus())){ + result.add(tousseItem.getTousseName()); + continue; + } } + if (result.size() > 0){ + throw new OperationException("物品:" + result + "已经发货了,不能终止!"); + } + } + + /** + * 根据tousseItemId列表获得对应的tousseItem情况 + * @param tousseItemIds tousseItemId列表 + * @return {@link TousseItem} + */ + private List getCancelItemsInfo(Collection tousseItemIds){ + String hql = "from TousseItem po where po.id in(:ids)"; + return objectDao.getHibernateSession().createQuery(hql).setParameterList("ids", tousseItemIds).list(); + } }