Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java =================================================================== diff -u -r26053 -r26274 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 26053) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/sterilizationrecord/service/SterilizationRecordManagerImpl.java (.../SterilizationRecordManagerImpl.java) (revision 26274) @@ -66,6 +66,7 @@ import com.forgon.disinfectsystem.entity.packing.ReviewedBasket; import com.forgon.disinfectsystem.entity.qualitymonitoringmanager.qualitymonitoring.QualityMonitoringInstance; import com.forgon.disinfectsystem.entity.sterilizationTransition.SterilizationTransitionItem; +import com.forgon.disinfectsystem.entity.sterilizationmanager.proxydisinfection.ProxyDisinfection; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationInterruptRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecordPic; @@ -2182,15 +2183,39 @@ Map map = new HashMap(); Double totalPrice = 0.0; Map> tousseNameTousseInstances = new HashMap>(); + Map proxyDisinfectionMap = new HashMap(); for (TousseInstance tousseInstance : tousseInstances) { - tousseInstance.setStatus(TousseInstance.STATUS_SHIPPED); + //如果该器械包实例是代理灭菌单内的包实例、且代理灭菌单的是否二次发货为"是",包实例的状态修改为"已灭菌",否则修改为"已发货" + Long proxyDisinfectionId = tousseInstance.getProxyDisinfection_id(); + if(DatabaseUtil.isPoIdValid(proxyDisinfectionId)){ + ProxyDisinfection proxyDisinfection = null; + if(proxyDisinfectionMap.containsKey(proxyDisinfectionId)){ + proxyDisinfection = proxyDisinfectionMap.get(proxyDisinfectionId); + }else{ + proxyDisinfection = (ProxyDisinfection)objectDao.getByProperty(ProxyDisinfection.class.getSimpleName(), "id", proxyDisinfectionId); + } + proxyDisinfectionMap.put(proxyDisinfectionId, proxyDisinfection); + if(proxyDisinfection != null && proxyDisinfection.canResendout()){ + tousseInstance.setStatus(TousseInstance.STATUS_STERILED); + }else{ + tousseInstance.setStatus(TousseInstance.STATUS_SHIPPED); + //如果config.js配置需要签收才能录使用记录时,则该包自动发货后状态变为已签收(仅针对二级供应室自动发货的情况做如此处理) + if("false".equalsIgnoreCase(CssdUtils.getSystemSetConfigByName("notSignedItemsCanRegistUseRecord"))){ + tousseInstance.setStatus(TousseInstance.STATUS_SIGNED); + tousseInstance.setSignedDate(new Date()); + tousseInstance.setSignedUser("二级供应室发货系统自动签收"); + } + } + }else{ + tousseInstance.setStatus(TousseInstance.STATUS_SHIPPED); + //如果config.js配置需要签收才能录使用记录时,则该包自动发货后状态变为已签收(仅针对二级供应室自动发货的情况做如此处理) + if("false".equalsIgnoreCase(CssdUtils.getSystemSetConfigByName("notSignedItemsCanRegistUseRecord"))){ + tousseInstance.setStatus(TousseInstance.STATUS_SIGNED); + tousseInstance.setSignedDate(new Date()); + tousseInstance.setSignedUser("二级供应室发货系统自动签收"); + } + } - //如果config.js配置需要签收才能录使用记录时,则该包自动发货后状态变为已签收(仅针对二级供应室自动发货的情况做如此处理) - if("false".equalsIgnoreCase(CssdUtils.getSystemSetConfigByName("notSignedItemsCanRegistUseRecord"))){ - tousseInstance.setStatus(TousseInstance.STATUS_SIGNED); - tousseInstance.setSignedDate(new Date()); - tousseInstance.setSignedUser("二级供应室发货系统自动签收"); - } tousseInstance.setLocation(deptCode); tousseInstance.setLocationForDisplay(deptName); //结算科室赋值为所在位置,解决不能退货的问题 @@ -2260,9 +2285,44 @@ invoice.setTotalPrice(totalPrice); invoice.setTousseAmount(tousseInstances.size()); objectDao.saveOrUpdate(invoice); + //重新计算代理灭菌单的发货状态 + reCalProxyDisinfecttionDeliverStatus(tousseInstances); } } - + + /** + * 根据器械包实例集合重新计算代理灭菌单的发货状态(用于二级供应室灭菌后自动发货时调用) + * @param tousseInstances 器械包实例集合 + */ + private void reCalProxyDisinfecttionDeliverStatus(List tousseInstances){ + if(CollectionUtils.isNotEmpty(tousseInstances)){ + List proxyDisinfecttionIdList = null; + for (TousseInstance tousseInstance : tousseInstances) { + if(DatabaseUtil.isPoIdValid(tousseInstance.getProxyDisinfection_id())){ + if(proxyDisinfecttionIdList == null){ + proxyDisinfecttionIdList = new ArrayList(); + } + if(!proxyDisinfecttionIdList.contains(tousseInstance.getProxyDisinfection_id())){ + proxyDisinfecttionIdList.add(tousseInstance.getProxyDisinfection_id()); + } + } + } + if(CollectionUtils.isNotEmpty(proxyDisinfecttionIdList)){ + String updateSql = String.format("update %s set deliverStatus=%s where %s" , + InvoicePlan.class.getSimpleName(), + "(case " + + "when (select count(0) from TousseInstance ti where ti.proxyDisinfection_id=invoicePlan.id and ti.invoice_id is not null and ti.status <> '"+ TousseInstance.STATUS_DISCARD +"') > 0 and (select count(0) from TousseInstance ti where ti.proxyDisinfection_id=invoicePlan.id and ti.invoice_id is null and ti.status <> '"+ TousseInstance.STATUS_DISCARD +"') > 0 then '"+ InvoicePlan.DELIVER_PARTDELIVERED +"' " + + "when (select count(0) from TousseInstance ti where ti.proxyDisinfection_id=invoicePlan.id and ti.invoice_id is not null and ti.status <> '"+ TousseInstance.STATUS_DISCARD +"') > 0 and (select count(0) from TousseInstance ti where ti.proxyDisinfection_id=invoicePlan.id and ti.invoice_id is null and ti.status <> '"+ TousseInstance.STATUS_DISCARD +"') = 0 then '"+ InvoicePlan.DELIVERSTATUS_DELIVERED +"' " + + "when (select count(0) from TousseInstance ti where ti.proxyDisinfection_id=invoicePlan.id and ti.invoice_id is not null and ti.status <> '"+ TousseInstance.STATUS_DISCARD +"') = 0 and (select count(0) from TousseInstance ti where ti.proxyDisinfection_id=invoicePlan.id and ti.invoice_id is null and ti.status <> '"+ TousseInstance.STATUS_DISCARD +"') > 0 then '"+ InvoicePlan.DELIVERSTATUS_AWAITDELIVER +"' " + + "when (select count(0) from TousseInstance ti where ti.proxyDisinfection_id=invoicePlan.id and ti.invoice_id is not null and ti.status <> '"+ TousseInstance.STATUS_DISCARD +"') = 0 and (select count(0) from TousseInstance ti where ti.proxyDisinfection_id=invoicePlan.id and ti.invoice_id is null and ti.status <> '"+ TousseInstance.STATUS_DISCARD +"') = 0 then '' " + + " else '' " + + "end)", + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("id", proxyDisinfecttionIdList)); + objectDao.excuteSQL(updateSql); + } + } + } + @Override public void saveRecordPicture(Long sterilizationRecordId, Collection pictures, String deletePicIds) {