Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/service/ProxyDisinfectionManager.java =================================================================== diff -u -r32477 -r32800 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/service/ProxyDisinfectionManager.java (.../ProxyDisinfectionManager.java) (revision 32477) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/service/ProxyDisinfectionManager.java (.../ProxyDisinfectionManager.java) (revision 32800) @@ -31,11 +31,12 @@ * @param basketInfos 灭菌筐集合 * @param loginUserName 用户名称 * @param loginUserCode 用户登录名 + * @param loginUserOrgUnitCode 用户当前登录科室 * @param pakingRecordIDList 装配记录ID,例如:1,2,3 * @param receiveToussesIDList 需要接收的器械包ID,例如:1,2,3 */ public void saveOrUpdate(ProxyDisinfection proxyDisinfection, - String[] tousseInstanceIdStrs, JSONArray basketInfos, String loginUserName,String loginUserCode, List pakingRecordIDList, List receiveToussesIDList); + String[] tousseInstanceIdStrs, JSONArray basketInfos, String loginUserName,String loginUserCode, String loginUserOrgUnitCode, List pakingRecordIDList, List receiveToussesIDList); /** * 根据id删除代理灭菌单. Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/action/ProxyDisinfectionAction.java =================================================================== diff -u -r32468 -r32800 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/action/ProxyDisinfectionAction.java (.../ProxyDisinfectionAction.java) (revision 32468) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/action/ProxyDisinfectionAction.java (.../ProxyDisinfectionAction.java) (revision 32800) @@ -151,8 +151,7 @@ proxyDisinfection.setSettleAccountsDepart(proxyDisinfection.getDepart()); proxyDisinfection.setSettleAccountsDepartCoding(proxyDisinfection.getDepartCoding()); if(supplyRoomConfigManager.isSecondSupplyRoomOrgUnit(AcegiHelper.getCurrentOrgUnitCode()) - && StringUtils.equals(proxyDisinfection.getDepartCoding(), AcegiHelper.getCurrentOrgUnitCode()) - && StringUtils.isNotBlank(pakingRecordIDs)){ + && StringUtils.equals(proxyDisinfection.getDepartCoding(), AcegiHelper.getCurrentOrgUnitCode())){ // 二级供应室录自己供应室装配的器械包,处理科室默认取一级供应室;二级供应室录其它供应室装配的器械包,处理科室默认取当前登录科室GDSZYY-102 proxyDisinfection.setHandleDepart(supplyRoomConfigManager.getFirstSupplyRoomConfig().getOrgUnitName()); proxyDisinfection.setHandleDepartCoding(supplyRoomConfigManager.getFirstSupplyRoomConfig().getOrgUnitCoding()); @@ -205,7 +204,7 @@ JSONArray basketInfos = JSONArray.fromObject(basketInfosStr); proxyDisinfectionManager.saveOrUpdate(proxyDisinfection, - tousseInstanceIdStrs, basketInfos, fullName, userName, pakingRecordIDList, receiveToussesIDList); + tousseInstanceIdStrs, basketInfos, fullName, userName, AcegiHelper.getCurrentOrgUnitCode(), pakingRecordIDList, receiveToussesIDList); StrutsResponseUtils.output(true,"保存成功"); } }catch(RuntimeException e){ Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java =================================================================== diff -u -r32755 -r32800 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 32755) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 32800) @@ -3800,7 +3800,7 @@ proxyDisinfection.setCommittedStatus(true); } proxyDisinfectionManager.saveOrUpdate(proxyDisinfection, - tousseInstanceIdStrs, basketInfos, applicant, "", null, hasReceivedTousseInstanceIdJsonArray); + tousseInstanceIdStrs, basketInfos, applicant, "", AcegiHelper.getCurrentOrgUnitCode(), null, hasReceivedTousseInstanceIdJsonArray); return new JSONStringer().object().key("success").value(true) .endObject().toString(); Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/service/ProxyDisinfectionManagerImpl.java =================================================================== diff -u -r32495 -r32800 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/service/ProxyDisinfectionManagerImpl.java (.../ProxyDisinfectionManagerImpl.java) (revision 32495) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/service/ProxyDisinfectionManagerImpl.java (.../ProxyDisinfectionManagerImpl.java) (revision 32800) @@ -5,9 +5,11 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Date; +import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.Set; import net.sf.json.JSONArray; @@ -126,9 +128,16 @@ @Override public void saveOrUpdate(ProxyDisinfection proxyDisinfection, - String[] tousseInstanceIdStrs, JSONArray basketInfos,String loginUserName,String loginUserCode, ListpakingRecordIDList, + String[] tousseInstanceIdStrs, JSONArray basketInfos,String loginUserName,String loginUserCode, String loginUserOrgUnitCode, ListpakingRecordIDList, List receiveToussesIDList) { - if(CollectionUtils.isNotEmpty(pakingRecordIDList) && proxyDisinfection != null && !DatabaseUtil.isPoIdValid(proxyDisinfection.getId())){ + if(StringUtils.equals(proxyDisinfection.getDepartCoding(), proxyDisinfection.getHandleDepartCoding())){ + throw new RuntimeException("代理灭菌单申请科室和处理科室不能为同一科室!"); + } + if(!supplyRoomConfigManager.isFirstOrSecondSupplyRoomOrgUnit(proxyDisinfection.getHandleDepartCoding())){ + throw new RuntimeException("代理灭菌单处理科室必须为一级供应室或者二级供应室!"); + } + if(StringUtils.equals(proxyDisinfection.getDepartCoding(), loginUserOrgUnitCode) && proxyDisinfection != null && !DatabaseUtil.isPoIdValid(proxyDisinfection.getId())){ + //二级供应室在装配记录页面录代理灭菌单,物品都是二级供应室自己装配的,申请科室是二级供应室,处理科室默认是一级供应室,单状态为“待接收” proxyDisinfection.setDeliverStatus(InvoicePlan.RECYCLINGSTATUS_AWAITRECEIVE); proxyDisinfection.setIsConvertPackingRecord(Constants.STR_YES); } @@ -439,19 +448,33 @@ if(CollectionUtils.isEmpty(newProxyTousseInstanceList)){ return tousseInfos; } + //消毒物品根据祖先包及MD5关联TousseItenInfo的Map + Map> ancestorIdMD5TousseItenInfoMap = new HashMap>(); for (TousseInstance tousseInstance : newProxyTousseInstanceList) { - if(tousseInstance.getTousseDefinition() == null){ + TousseDefinition tousseDefinition = tousseInstance.getTousseDefinition(); + if(tousseDefinition == null){ throw new RuntimeException(tousseInstance.getTousseName() + "未关联包定义"); } TousseItenInfo addedInfo = null; for(TousseItenInfo tii : tousseInfos){ - if(StringTools.equals(tii.getTousseName(), tousseInstance.getTousseName())){ + if(tii.getAncestorId() != null && tousseDefinition.getAncestorID() != null && + tii.getAncestorId().longValue() == tousseDefinition.getAncestorID().longValue()){ + //祖先包ID一致 if(!StringTools.equals(tii.getTousseType(), tousseInstance.getTousseDefinition().getTousseType())){ //相同名称不同类型的包,不能保存 throw new RuntimeException("条码为" + tousseInstance.getBarcode() + "的" + tousseInstance.getTousseName()+ ",与其他同名的包不是同一个类型"); }else{ addedInfo = tii; + if(tousseDefinition.isDisinfection()){ + addedInfo = null; + // 消毒物品如果材料不一样的,就需要重新产生一个申请项tousseItem;如果材料相同,就数量累加 + Map MD5Map = ancestorIdMD5TousseItenInfoMap.get(tousseDefinition.getAncestorID()); + if(MD5Map != null){ + addedInfo = MD5Map.get(tousseDefinition.getMaterialsMD5()); + break; + } + } } } } @@ -466,6 +489,14 @@ tousseInfos.add(addedInfo); } addedInfo.setAmount(MathTools.add(addedInfo.getAmount(), 1).intValue()); + if(tousseDefinition.isDisinfection()){ + Map MD5Map = ancestorIdMD5TousseItenInfoMap.get(tousseDefinition.getAncestorID()); + if(MD5Map == null){ + MD5Map = new HashMap(); + } + MD5Map.put(tousseDefinition.getMaterialsMD5(), addedInfo); + ancestorIdMD5TousseItenInfoMap.put(tousseDefinition.getAncestorID(), MD5Map); + } } return tousseInfos; }