Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java =================================================================== diff -u -r34299 -r34440 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 34299) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 34440) @@ -1263,7 +1263,7 @@ json = JSONObject.fromObject(map); return json; } - + /** * TODO 外来器械查询随着申请单生成的包定义的增加,此方法会越来越慢,需要改造 */ @@ -1272,6 +1272,19 @@ String tousseType, String handlerDepartCodes, String supplierName, boolean showDisableGoods, boolean showForeignTousseAncestorDefinition, boolean useAssetsBelong) { + return this.searchTousseDefinitions(searchString, tousseType, handlerDepartCodes, supplierName, + showDisableGoods, showForeignTousseAncestorDefinition, useAssetsBelong, false); + } + + /** + * TODO 外来器械查询随着申请单生成的包定义的增加,此方法会越来越慢,需要改造 + */ + @Override + public List searchTousseDefinitions(String searchString, + String tousseType, String handlerDepartCodes, String supplierName, + boolean showDisableGoods, + boolean showForeignTousseAncestorDefinition, boolean useAssetsBelong, + boolean searchCssdHandleTousses) { searchString = SqlUtils.filterIllegalCharachers(searchString); String sql = createQuerySQL(searchString); @@ -1315,17 +1328,34 @@ } if (StringUtils.isNotBlank(handlerDepartCodes)) { - String handlerDepartCodeSql = null; - for (String handlerDepartCode : handlerDepartCodes.split(";")) { - if (handlerDepartCodeSql == null) { - handlerDepartCodeSql = " and (po.handlerDepartCode = '" - + handlerDepartCode + "'"; - } else { - handlerDepartCodeSql += " or po.handlerDepartCode = '" - + handlerDepartCode + "'"; + //根据【供应室处理器械包配置】模块中的配置项记录进行判断各个供应室是否有相应的权限处理器械包ZSRY-40 + if(searchCssdHandleTousses){ + List orgUnitCodeList = new ArrayList(); + for (String handlerDepartCode : handlerDepartCodes.split(";")) { + boolean isFirstOrSecondSupplyRoomOrgUnit = supplyRoomConfigManager.isFirstOrSecondSupplyRoomOrgUnit(handlerDepartCode); + if(isFirstOrSecondSupplyRoomOrgUnit){ + orgUnitCodeList.add(handlerDepartCode); + } } + if(CollectionUtils.isNotEmpty(orgUnitCodeList)){ + sql += " and po.ancestorID in (select tousseDefinitionId from " + CssdHandleTousses.class.getSimpleName() + + " where "+ SqlUtils.getStringFieldInLargeCollectionsPredicate("orgUnitCode", orgUnitCodeList) +")"; + } + }else { + //根据【器械包定义】模块中的优先处理科室进行判断各个供应室是否有相应的权限处理器械包 + String handlerDepartCodeSql = null; + for (String handlerDepartCode : handlerDepartCodes.split(";")) { + if (handlerDepartCodeSql == null) { + handlerDepartCodeSql = " and (po.handlerDepartCode = '" + + handlerDepartCode + "'"; + } else { + handlerDepartCodeSql += " or po.handlerDepartCode = '" + + handlerDepartCode + "'"; + } + } + sql += handlerDepartCodeSql + ")"; } - sql += handlerDepartCodeSql + ")"; + } if(StringUtils.isNotBlank(supplierName)){ sql += String.format(" and po.supplierName='%s'", supplierName); @@ -6137,5 +6167,17 @@ objectDao.saveOrUpdate(tousseDefinition); } } + + @Override + @SuppressWarnings("unchecked") + public List getTousseCssdHandleToussesConfig(Long tousseDefinitionID) { + + if(!DatabaseUtil.isPoIdValid(tousseDefinitionID)){ + return null; + } + String sql = String.format("select po from %s po where tousseDefinitionId = %s", CssdHandleTousses.class.getSimpleName(), tousseDefinitionID); + return objectDao.findByHql(sql); + } + } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java =================================================================== diff -u -r34299 -r34440 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java (.../TousseDefinitionManager.java) (revision 34299) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java (.../TousseDefinitionManager.java) (revision 34440) @@ -557,6 +557,13 @@ public CssdHandleTousses getCssdHandleToussesConfig(Long id); /** + * 根据器械包定义id读取供应室处理器械包关联配置 + * @param tousseDefinitionID + * @return + */ + public List getTousseCssdHandleToussesConfig(Long tousseDefinitionID); + + /** * 删除科室处理器械包配置. * @param orgUnit * @param tousseDefinitionList @@ -920,5 +927,22 @@ * @param note 修改后的配包注意事项 */ public void saveTousseDefinitionNote(Long id, String origineTdNote, String note); + + /** + * 支持根据【供应室处理器械包配置】查询过滤器械包定义 + * @param searchString 关键字 + * @param tousseType 器械包类型 + * @param handlerDepartCodes 处理科室编码 + * @param supplierName 供应商名称 + * @param showDisableGoods 是否显示停用科室 + * @param showForeignTousseAncestorDefinition 显示外来器械包祖先包 + * @param useAssetsBelong 资产归属查询条件 + * @param searchCssdHandleTousses 是否根据【供应室处理器械包配置】过滤器械包定义 + * @return + */ + public List searchTousseDefinitions(String searchString, + String tousseType, String handlerDepartCodes, String supplierName, + boolean showDisableGoods, + boolean showForeignTousseAncestorDefinition, boolean useAssetsBelong, boolean searchCssdHandleTousses); } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/action/TousseDefinitionAction.java =================================================================== diff -u -r34319 -r34440 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/action/TousseDefinitionAction.java (.../TousseDefinitionAction.java) (revision 34319) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/action/TousseDefinitionAction.java (.../TousseDefinitionAction.java) (revision 34440) @@ -94,7 +94,6 @@ import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionHelper; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; -import com.forgon.exception.SystemException; import com.forgon.log.model.Log; import com.forgon.log.service.LogManager; import com.forgon.tools.FileSystemHelper; @@ -1907,9 +1906,11 @@ } try { spell = java.net.URLDecoder.decode(spell, "UTF-8"); + //处理科室编码(默认取当前登录科室编码),申请的物品只能是当前供应室有权限处理的物品ZSRY-40 + String handlerDepartCode = StrutsParamUtils.getPraramValue("handlerDepartCode", AcegiHelper.getCurrentOrgUnitCode()); List tousseDefinitions = tousseDefinitionManager.searchTousseDefinitions( - spell, TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY, null,null,false,false,true); + spell, TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY, handlerDepartCode,null,false,false,true, true); JSONArray data = new JSONArray(); for (TousseDefinition tousseDefinition : tousseDefinitions) { Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/service/ForeignProxyDisinfectionManagerImpl.java =================================================================== diff -u -r33195 -r34440 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/service/ForeignProxyDisinfectionManagerImpl.java (.../ForeignProxyDisinfectionManagerImpl.java) (revision 33195) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/service/ForeignProxyDisinfectionManagerImpl.java (.../ForeignProxyDisinfectionManagerImpl.java) (revision 34440) @@ -29,6 +29,7 @@ import com.forgon.Constants; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.BarcodeDevice; +import com.forgon.directory.model.CssdHandleTousses; import com.forgon.directory.model.OrgUnit; import com.forgon.directory.service.OrgUnitManager; import com.forgon.directory.vo.LoginUserData; @@ -907,13 +908,63 @@ // 删除item deleteForeignProxyItems(foreignProxyDisinfection, existIdMap); addNewItems(foreignProxyDisinfection, newItems); + //判断供应室是否有相应的权限处理器械包ZSRY-40 + validNewItemsCssdHandleDepart(foreignProxyDisinfection, newItems); foreignProxyDisinfection.setLendGoodsBrief(this.buildLendGoodsBrief(params)); } /** + * 申请的物品只能是当前供应室有权限处理的物品ZSRY-40 + * @param foreignProxyDisinfection + * @param newItems + */ + private void validNewItemsCssdHandleDepart(ForeignProxyDisinfection foreignProxyDisinfection, List newItems) { + + if(CollectionUtils.isEmpty(newItems)){ + return; + } + + for (ForeignProxyItem proxyItem : newItems) { + // 器械包定义 + TousseDefinition tousseDefinition = tousseDefinitionManager + .getTousseDefinitionByNameAndTousseType(proxyItem.getTousseName(), + TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY); + if (tousseDefinition == null) { + throw new RuntimeException("找不到该器械包[" + proxyItem.getTousseName() + "]基础定义信息!"); + } + //ZSRY-40申请的物品只能是当前供应室有权限处理的物品 + if(!DatabaseUtil.isPoIdValid(proxyItem.getId())){ + boolean canHandleTousse = validateCssdHandleTousses(tousseDefinition.getAncestorID(), foreignProxyDisinfection.getHandleDepartCoding()); + if(!canHandleTousse){ + throw new RuntimeException(foreignProxyDisinfection.getHandleDepart() + "未配置权限处理" + tousseDefinition.getName()); + } + } + } + } + + /** + * 根据“供应室处理器械包关联配置”判断处理科室是否可以处理器械包 + * @param ancestorID 器械包定义ID + * @param handleDepartCode 处理科室编码 + * @return + */ + private boolean validateCssdHandleTousses(Long ancestorID, String handleDepartCode) { + List cssdHandleToussesList = tousseDefinitionManager.getTousseCssdHandleToussesConfig(ancestorID); + if(CollectionUtils.isEmpty(cssdHandleToussesList)){ + return false; + } + for (CssdHandleTousses cssdHandleTousses : cssdHandleToussesList) { + if(StringUtils.equals(cssdHandleTousses.getOrgUnitCode(), handleDepartCode)){ + return true; + } + } + return false; + } + + /** * 构建物品简要,以,号的方式将物品合并在一起 * @param params 页面传进来的参数 * @return 完成后的物品简要格式