Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/service/ProxyDisinfectionManagerImpl.java =================================================================== diff -u -r34554 -r34892 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/service/ProxyDisinfectionManagerImpl.java (.../ProxyDisinfectionManagerImpl.java) (revision 34554) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/service/ProxyDisinfectionManagerImpl.java (.../ProxyDisinfectionManagerImpl.java) (revision 34892) @@ -59,6 +59,7 @@ import com.forgon.tools.json.JSONUtil; import com.forgon.tools.json.JsonPropertyFilter; import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.ConfigUtils; import com.forgon.tools.util.SqlUtils; /** @@ -172,6 +173,8 @@ } saveOrUpdate(proxyDisinfection);//先保存,获取id + //录入其他代理灭菌单中的物品时,需要先把物品从原来的代理灭菌单上移除GDSZYY-207 + removeOtherProxyDisinfectionTousseInstance(proxyDisinfection, tousseInstanceIdStrs, basketInfos); Set tousseInstanceList = getTousseInstanceAndReviewedBasketInfo(proxyDisinfection, tousseInstanceIdStrs, basketInfos,loginUserName,loginUserCode, loginUserOrgUnitCode); saveOrUpdate(proxyDisinfection); @@ -211,6 +214,187 @@ } /** + * 录入其他代理灭菌单中的物品前,需要从原代理灭菌单中删除物品并添加备注,(GDSZYY-207) + * 备注内容为:“AAA1,AAAA2已经在代理灭菌单“XXXXX”中接收” + * @param proxyDisinfection + * @param tousseInstanceIdStrs + * @param basketInfos + */ + private void removeOtherProxyDisinfectionTousseInstance(ProxyDisinfection proxyDisinfection, String[] tousseInstanceIdStrs, JSONArray basketInfos) { + //配置为true时,启用代理灭菌物品可以跨申请单接收功能,配置为false或不配置时,不启用此功能GDSZYY-207 + boolean generateProxySterilizationFormFunctionInHistoricalAssemblyRecords = + ConfigUtils.getSystemSetConfigByNameBool("generateProxySterilizationFormFunctionInHistoricalAssemblyRecords", false); + if(!generateProxySterilizationFormFunctionInHistoricalAssemblyRecords){ + return; + } + + if(!DatabaseUtil.isPoIdValid(proxyDisinfection.getId())){ + return; + } + + //篮筐外部的物品 + List tousseInstanceIdList = new ArrayList(); + if (!ArrayUtils.isEmpty(tousseInstanceIdStrs)) { + for (String idStr : tousseInstanceIdStrs) { + tousseInstanceIdList.add(Long.valueOf(idStr)); + } + } + + //灭菌篮筐中的物品 + if (basketInfos != null && !basketInfos.isEmpty()) { + for (Object basketInfoObj : basketInfos) { + if(!(basketInfoObj instanceof JSONObject)) + continue; + JSONObject basketInfo = (JSONObject)basketInfoObj; + JSONArray tousseInstanceIdStrJsonArray = basketInfo.getJSONArray("tousseInstanceIdStrs"); + String[] tousseInstanceInBacketIdStrs = (String[])JSONArray.toArray(tousseInstanceIdStrJsonArray, String.class); + for (String tousseId : tousseInstanceInBacketIdStrs) { + tousseInstanceIdList.add(Long.valueOf(tousseId)); + } + } + } + + if(CollectionUtils.isEmpty(tousseInstanceIdList)){ + return; + } + + List tousseInstanceList = tousseInstanceManager.getCollection(tousseInstanceIdList); + if(CollectionUtils.isEmpty(tousseInstanceList)){ + return; + } + + //可以跨单接收的物品原来所在的代理灭菌单id列表 + List proxyDisinfectionIdList = new ArrayList(); + //可以跨单接收的物品列表 + List otherProxyDisinfectionTousseList = new ArrayList(); + for (TousseInstance tousseInstance : tousseInstanceList) { + if(!isProxyDisinfectionTousseInstance(tousseInstance, proxyDisinfection)){ + proxyDisinfectionIdList.add(tousseInstance.getProxyDisinfection_id()); + otherProxyDisinfectionTousseList.add(tousseInstance); + } + } + + if(CollectionUtils.isEmpty(otherProxyDisinfectionTousseList)){ + return; + } + + //可以跨单接收的物品原来所在的代理灭菌单Map + Map proxyDisinfectionMap = new HashMap(); + List proxyDisinfectionList = invoicePlanManager.getCollection(proxyDisinfectionIdList); + if(CollectionUtils.isNotEmpty(proxyDisinfectionList)){ + for (InvoicePlan invoicePlan : proxyDisinfectionList) { + proxyDisinfectionMap.put(invoicePlan.getId(), invoicePlan); + } + } + + //不能跨单录入的物品和代理灭菌单Map + Map> errorProxyDisinfectionTousseMap = new HashMap>(); + //可以跨单录入的物品和代理灭菌单Map + Map> otherProxyDisinfectionTousseMap = new HashMap>(); + for (TousseInstance tousseInstance : otherProxyDisinfectionTousseList) { + ProxyDisinfection originalProxyDisinfection = (ProxyDisinfection) proxyDisinfectionMap.get(tousseInstance.getProxyDisinfection_id()); + if(originalProxyDisinfection == null){ + removeProxyDisinfectionTousse(tousseInstance); + continue; + } + //原代理灭菌单的接收状态为”待接收“或”部分接收“且该物品未被接收,才可以被录入到其它代理灭菌单(GDSZYY-207) + if(StringUtils.equals(tousseInstance.hasReceived(), Constants.STR_YES) + || (!StringUtils.equals(originalProxyDisinfection.getReceiveStatus(), ProxyDisinfection.RECEIVESTATUS_AWAITRECEIVE) + && !StringUtils.equals(originalProxyDisinfection.getReceiveStatus(), ProxyDisinfection.RECEIVESTATUS_PARTRECEIVE))){ + List tiList = errorProxyDisinfectionTousseMap.get(originalProxyDisinfection); + if(tiList == null){ + tiList = new ArrayList(); + } + tiList.add(tousseInstance); + errorProxyDisinfectionTousseMap.put(proxyDisinfection, tiList); + continue; + } + + //原代理灭菌单的接收状态为”待接收“或”部分接收“且该物品未被接收,可以被录入到其它代理灭菌单(GDSZYY-207) + List tiList = otherProxyDisinfectionTousseMap.get(originalProxyDisinfection); + if(tiList == null){ + tiList = new ArrayList(); + } + tiList.add(tousseInstance); + otherProxyDisinfectionTousseMap.put(originalProxyDisinfection, tiList); + } + + //物品A已经在另外一张单上被接收,同时在原单中再次扫描提交:提示:“10100101已经在其它申请单中接收,无法提交;” + if(MapUtils.isNotEmpty(errorProxyDisinfectionTousseMap)){ + StringBuffer tipStringBuffer = new StringBuffer(); + for (InvoicePlan invoicePlan : errorProxyDisinfectionTousseMap.keySet()) { + List tiList = errorProxyDisinfectionTousseMap.get(invoicePlan); + if(CollectionUtils.isNotEmpty(tiList)){ + List tiBarcodeList = new ArrayList(); + for (TousseInstance ti : tiList) { + tiBarcodeList.add(ti.getBarcode()); + } + tipStringBuffer.append(StringTools.join(tiBarcodeList, ",")); + tipStringBuffer.append("已经在代理灭菌单" + invoicePlan.getSerialNumber() + "接收;"); + } + } + String tip = tipStringBuffer.toString(); + if(StringUtils.isNotBlank(tip)){ + throw new SystemException(tip); + } + } + + //该物品需要从原代理灭菌单中删除并添加备注,备注内容为:“AAA1,AAAA2已经在代理灭菌单“XXXXX”中接收” + if(MapUtils.isNotEmpty(otherProxyDisinfectionTousseMap)){ + String endCause = "该申请单内的物品已被其他代理灭菌单接收,该申请单直接终止"; + for (InvoicePlan invoicePlan : otherProxyDisinfectionTousseMap.keySet()) { + StringBuffer remarkBuffer = new StringBuffer(invoicePlan.getRemark() == null ? "" : invoicePlan.getRemark()); + List tiList = otherProxyDisinfectionTousseMap.get(invoicePlan); + if(CollectionUtils.isNotEmpty(tiList)){ + List tiBarcodeList = new ArrayList(); + for (TousseInstance tousseInstance : tiList) { + //从代理灭菌单上移除物品 + removeProxyDisinfectionTousse(tousseInstance); + tiBarcodeList.add(tousseInstance.getBarcode()); + objectDao.saveOrUpdate(tousseInstance); + } + remarkBuffer.append(StringTools.join(tiBarcodeList, ",")); + remarkBuffer.append("已经在代理灭菌单“" + proxyDisinfection.getSerialNumber() + "”接收;"); + invoicePlan.setRemark(remarkBuffer.toString()); + ProxyDisinfection tempProxyDisinfection = (ProxyDisinfection)invoicePlan; + List proxyTousses = tempProxyDisinfection.getProxyTousses(objectDao); + if(CollectionUtils.isNotEmpty(proxyTousses)){ + proxyTousses.removeAll(tiList); + } + if(CollectionUtils.isEmpty(proxyTousses)){ + //该申请单内的物品已被其他代理灭菌单接收,该申请单直接终止 + invoicePlanManager.terminateInvoicePlan(invoicePlan, AcegiHelper.getLoginUser().getUserFullName(), endCause); + }else{ + //重新获取代理灭菌单的接收状态 + setProxyDisinfectionReceiveStatus(tempProxyDisinfection, proxyTousses); + //重新获取代理灭菌单的发货状态 + invoicePlanManager.computeAndSetInvoiceStatus(tempProxyDisinfection); + //计算代理灭菌单物品tousseItem已接收数量GDSZYY-131 + Set tousseInstanceSet = new HashSet(tousseInstanceList); + setProxyDisinfectionReceiveAmount(tempProxyDisinfection, tousseInstanceSet); + tempProxyDisinfection.setTotalAmountOfTousses(tousseInstanceList.size()); + objectDao.saveOrUpdate(tempProxyDisinfection); + } + } + } + } + } + + /** + * 从代理灭菌单上移除器械包实例 + * @param tousseInstance + */ + private void removeProxyDisinfectionTousse(TousseInstance tousseInstance) { + tousseInstance.setProxyDisinfection_id(null); + //处理科室录入其它二级供应室装配并本科室自己录的未接收的器械包时,接收状态为“否”,需要把接收状态置空 + if(!StringUtils.equals(AcegiHelper.getCurrentOrgUnitCode(), tousseInstance.getOrgUnitCoding()) + && StringUtils.equals(Constants.STR_NO, tousseInstance.getHasReceived())){ + tousseInstance.setHasReceived(null); + } + objectDao.saveOrUpdate(tousseInstance); + } + + /** * 合并代理灭菌单没有放入篮筐的器械包实例 * @param proxyDisinfection * @param tousseInstanceIdStrs @@ -434,7 +618,7 @@ * @param proxyDisinfection * @param tousseInstanceList */ - private void setProxyDisinfectionReceiveStatus(ProxyDisinfection proxyDisinfection, Set tousseInstanceList) { + private void setProxyDisinfectionReceiveStatus(ProxyDisinfection proxyDisinfection, Collection tousseInstanceList) { int awaitReceiveTousseAmount = 0; if(tousseInstanceList != null){ for (TousseInstance ti : tousseInstanceList) { @@ -1196,10 +1380,13 @@ isProxyed = true; } + //配置为true时,启用代理灭菌物品可以跨申请单接收功能,不检查物品是否已经录入代理灭菌单;配置为false或不配置时,不启用此功能;(GDSZYY-207) + boolean generateProxySterilizationFormFunctionInHistoricalAssemblyRecords = + ConfigUtils.getSystemSetConfigByNameBool("generateProxySterilizationFormFunctionInHistoricalAssemblyRecords", false); if(proxyDisinfection != null && StringUtils.equals(proxyDisinfection.getHandleDepartCoding(), AcegiHelper.getCurrentOrgUnitCode()) && isAwaitReceive){ - if(isProxyed){ + if(isProxyed && !generateProxySterilizationFormFunctionInHistoricalAssemblyRecords){ if(tousseInstance.getProxyDisinfection_id().equals(Long.valueOf(proxyDisinfectionId))){ // 核对器械包实例GDSZYY-102(一级供应室用户登录,打开待接收的代理灭菌,扫描了单上已经存在的物品时,就是审核物品) //checkProxyDisinfectionTousse(tousseInstance.getId(), proxyDisinfectionId); @@ -1251,7 +1438,7 @@ message = "单据里的物品已经全部接收,不能再增加物品"; throw new SystemException(message); }else{ - if(isProxyed){ + if(isProxyed && !generateProxySterilizationFormFunctionInHistoricalAssemblyRecords){ message = "该器械包已经申请代理灭菌,不能重复申请。"; throw new SystemException(message); }else{ @@ -1357,6 +1544,9 @@ @Override public void canApplicantTousseInstance(TousseInstance tousseInstance, String handleDepartCoding, ProxyDisinfection proxyDisinfection) { + //配置为true时,启用代理灭菌物品可以跨申请单接收功能,不检查物品是否已经录入代理灭菌单;配置为false或不配置时,不启用此功能;(GDSZYY-207) + boolean generateProxySterilizationFormFunctionInHistoricalAssemblyRecords = + ConfigUtils.getSystemSetConfigByNameBool("generateProxySterilizationFormFunctionInHistoricalAssemblyRecords", false); if (StringUtils.isNotEmpty(tousseInstance.getOrgUnitCoding()) && (StringUtils.isBlank(handleDepartCoding) || StringUtils.equals(tousseInstance.getOrgUnitCoding(), handleDepartCoding))) { // 本科室装配的器械包,无需录入代理灭菌记录;代理灭菌单的申请科室和处理科室不能一样 @@ -1378,7 +1568,8 @@ String message = "单据里的物品已经全部接收,不能再增加物品"; throw new SystemException(message); }else if(proxyDisinfection != null && tousseInstance.getProxyDisinfection_id() != null - && !tousseInstance.getProxyDisinfection_id().equals(proxyDisinfection.getId())){ + && !tousseInstance.getProxyDisinfection_id().equals(proxyDisinfection.getId()) + && !generateProxySterilizationFormFunctionInHistoricalAssemblyRecords){ String message = "该器械包已经申请代理灭菌,不能重复申请。"; throw new SystemException(message); } Index: ssts-web/src/main/webapp/disinfectsystem/config/gdszyy/config.js =================================================================== diff -u -r34619 -r34892 --- ssts-web/src/main/webapp/disinfectsystem/config/gdszyy/config.js (.../config.js) (revision 34619) +++ ssts-web/src/main/webapp/disinfectsystem/config/gdszyy/config.js (.../config.js) (revision 34892) @@ -293,7 +293,7 @@ //启用外来器械处理汇总单功能 enableForeignTousseProcessingSummaryReports:true, //启用外来器械包是否临购字段 - enableForeignTousseIsTemporaryPurchaseField:true - - + enableForeignTousseIsTemporaryPurchaseField:true, + //代理灭菌物品可以跨申请单接收 + generateProxySterilizationFormFunctionInHistoricalAssemblyRecords:true } \ No newline at end of file