Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanOptimizeManagerImpl.java =================================================================== diff -u -r31194 -r31197 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanOptimizeManagerImpl.java (.../InvoicePlanOptimizeManagerImpl.java) (revision 31194) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanOptimizeManagerImpl.java (.../InvoicePlanOptimizeManagerImpl.java) (revision 31197) @@ -7,6 +7,7 @@ import java.util.Collection; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -318,7 +319,7 @@ InvoiceUtils.getInvoiceGroupByConfig()); invoicePlanCommonCondition = SqlUtils.getStringFieldInLargeCollectionsPredicate(invoicePlanCommonCondition, orgUnitCodingList); }else{ - throw new RuntimeException("科室编码不能为空"); + return result; } /* @@ -573,12 +574,38 @@ } } } + + // 申请单id + Set invoicePlanIdSet = new HashSet(); + if(CollectionUtils.isNotEmpty(list)){ + for (ApplicationGoodsVo vo : list) { + if(StringUtils.equals(DisposableGoods.TYPE_NAME, vo.getGoodsType())){ + result.put(vo.getDepartCoding(), ApplicationGoodsVo.STATUS_STERILED); + continue; + } + List invoicePlanIdList = vo.getInvoicePlanIDList(); + if(CollectionUtils.isNotEmpty(invoicePlanIdList)){ + for (Long id : invoicePlanIdList) { + invoicePlanIdSet.add(id); + } + } + } + } + + // 根据申请单查器械包实例是否包含已灭菌/已消毒的物品 + Map resultMap1 = getDepartInvoicePlanTousseInstanceStatus(invoicePlanIdSet); // 科室对应的物品 Map> departToGoodsMap = new HashMap>(); if(CollectionUtils.isNotEmpty(list)){ for (ApplicationGoodsVo vo : list) { String departCoding = vo.getDepartCoding(); + if(resultMap1 != null && resultMap1.containsKey(departCoding)){ + continue; + } + if(result != null && result.containsKey(departCoding)){ + continue; + } List voList = departToGoodsMap.get(departCoding); if(CollectionUtils.isEmpty(voList)){ voList = new ArrayList(); @@ -602,11 +629,59 @@ } } } - + + if(resultMap1 != null && !resultMap1.isEmpty()){ + for (String departCode : resultMap1.keySet()) { + result.put(departCode, resultMap1.get(departCode)); + } + } + return result; } /** + * 根据申请单查询是否包含已灭菌/已消毒状态的器械包实例 + * @param orgUnitCodingList + * @param appFormType + * @param tousseGroupIds + * @param sterilingMethods + * @param disposableGoodsType + * @param tousseTypes + * @param applyDate + * @return + */ + private Map getDepartInvoicePlanTousseInstanceStatus(Collection invoicePlanIdList) { + + Map statusMap = new HashMap(); + String sql = String.format("select ti.departCoding, count(0) from %s ti " + + "join %s ip on ti.invoicePlanID = ip.id " + + "where (1=1) " + + "and ti.orgUnitCoding='%s' " + + "and %s " + + "and ti.status in ('%s','%s') " + + "group by ti.departCoding having count(0) > 0", + TousseInstance.class.getSimpleName(), + InvoicePlan.class.getSimpleName(), + AcegiHelper.getCurrentOrgUnitCode(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("ip.id", invoicePlanIdList), + TousseInstance.STATUS_STERILED, TousseInstance.STATUS_DISINFECTED); + + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + while(rs.next()){ + String departCoding = rs.getString("departCoding"); + statusMap.put(departCoding, ApplicationGoodsVo.STATUS_STERILED); + } + } catch (Exception e) { + e.printStackTrace(); + }finally{ + DatabaseUtil.closeResultSetAndStatement(rs); + } + return statusMap; + } + + /** * 构造发货计划过滤条件,包括按申请项及申请项,where开头 * @param departCodes 科室编码 * @param applyDate 申请日期