Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java =================================================================== diff -u -r22677 -r22681 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 22677) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 22681) @@ -30,11 +30,9 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.apache.log4j.Logger; -import org.hibernate.Criteria; import org.hibernate.LockMode; import org.hibernate.Query; import org.hibernate.Session; -import org.hibernate.criterion.Restrictions; import com.forgon.Constants; import com.forgon.databaseadapter.service.DateQueryAdapter; @@ -95,6 +93,8 @@ import com.forgon.disinfectsystem.vo.RecyclingApplicationVo; import com.forgon.disinfectsystem.vo.TousseItemVo; import com.forgon.exception.OperationException; +import com.forgon.exception.SystemException; +import com.forgon.exception.UnreachableException; import com.forgon.log.enums.ApplicationLogStatusEnum; import com.forgon.strategyMode.DateStrategyContext; import com.forgon.systemsetting.model.HttpOption; @@ -2364,15 +2364,16 @@ */ @Override public void terminateTousseItemByIds(Collection tousseItemIds,String endCase){ - List list = 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(list.size() > 0){ + List list = tousseItemManager.getCollectionForUpdate(tousseItemIds); + 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)){ InvoicePlan plan = null; - String tousseNames = ""; + List terminatedNames = new ArrayList<>(); for(int i = 0;i < list.size();i++){ TousseItem tousseItem = list.get(i); if(plan == null){ @@ -2381,15 +2382,25 @@ plan.setEndCause(endCase); } } - - tousseNames += tousseItem.getTousseName(); - if(i < list.size() - 1){ - tousseNames += "、"; + if(BooleanUtils.isTrue(tousseItem.getIsTerminated())){ + terminatedNames.add(tousseItem.getTousseName()); + continue; } + toTerminates.add(tousseItem); } + if(CollectionUtils.isEmpty(toTerminates)){ + if(CollectionUtils.isNotEmpty(terminatedNames)){ + //都是已经终止的 + throw new SystemException(String.join("、", terminatedNames) + "已经终止"); + }else{ + throw new UnreachableException(); + } + } + //toTerminateNames非空,但是terminatedNames可能为空(都是未终止的),也可能非空(有一部分是未终止的,有一部分是已终止的,已终止的不管,把未终止的终止掉) String endTime = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm"); String userName = AcegiHelper.getLoginUserFullName(); - String remark = "【该申请单申请的" + tousseNames + "在" + endTime + "被" + userName + "终止"; + String terminateTousseNames = String.join("、", toTerminates.stream().map(p->p.getTousseName()).collect(Collectors.toList())); + String remark = "【该申请单申请的" + terminateTousseNames + "在" + endTime + "被" + userName + "终止"; if (StringUtils.isNotBlank(endCase)) { remark += ",原因:" + endCase; } @@ -2400,7 +2411,8 @@ applicationLogManager.saveApplicationLog(plan, remark, ApplicationLogStatusEnum.PART_TERMINATE); } - terminateTousseItems(list); + terminateTousseItems(toTerminates); +// throw new SystemException("测试"); } @Override @@ -2815,7 +2827,7 @@ Integer amount = IntegerUtils.parse(tousseItem.getAmount()); String isInvoice = tousseItem.getIsInvoice(); String isRecycling = tousseItem.getIsRecycling(); - if (Constants.STR_YES.equals(isRecycling) && recyclingAmount > 0){ + if (tousseItem.isRecycling() && recyclingAmount > 0){ if (Constants.STR_NO.equals(isInvoice) || (Constants.STR_YES.equals(isInvoice) && recyclingAmount - sendOutAmount == 0)){ result.add(tousseItem.getTousseName()); continue; Index: forgon-tools/src/main/java/com/forgon/exception/UnreachableException.java =================================================================== diff -u --- forgon-tools/src/main/java/com/forgon/exception/UnreachableException.java (revision 0) +++ forgon-tools/src/main/java/com/forgon/exception/UnreachableException.java (revision 22681) @@ -0,0 +1,18 @@ +package com.forgon.exception; +/** + * 不可到达异常。按业务逻辑,一段代码不可能执行到,但是从程序逻辑上却是有对应分支情况的,那就抛一个异常,作为程序健壮性的方法 + * @author kzh + * + */ +public class UnreachableException extends SystemException { + private static final long serialVersionUID = -3341172093351763537L; + public UnreachableException(String message) { + super(message); + } + public UnreachableException(Throwable e){ + super("程序猿哥哥用了洪荒之力也未能堵住这个错误!请反馈,我们立马进行处理",e); + } + public UnreachableException(){ + super("程序猿哥哥用了洪荒之力也未能堵住这个错误!请反馈,我们立马进行处理"); + } +}