Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/goodFilterConfig/service/GoodFilterConfigManagerImpl.java =================================================================== diff -u -r16820 -r16854 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/goodFilterConfig/service/GoodFilterConfigManagerImpl.java (.../GoodFilterConfigManagerImpl.java) (revision 16820) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/goodFilterConfig/service/GoodFilterConfigManagerImpl.java (.../GoodFilterConfigManagerImpl.java) (revision 16854) @@ -148,21 +148,25 @@ query.setParameter(0, orgUnitCode); query.setParameter(1, listType.name()); query.addScalar("id", LongType.INSTANCE); - return (List) query.list(); + List list = query.list(); + logger.debug(listType.getDesc() + "数量是:" + list.size()); + return list; } @Override public List> handleBWList(List> needToFilter) { List whiteList = this.findFilterGoodByType(ListType.WHITE, AcegiHelper.getCurrentOrgUnitCode()); - logger.debug("白名单数量是:" + whiteList.size()); List blackList = this.findFilterGoodByType(ListType.BLACK, AcegiHelper.getCurrentOrgUnitCode()); - logger.debug("黑名单数量是:" + blackList.size()); if (CollectionUtils.isNotEmpty(whiteList)) { if (CollectionUtils.isNotEmpty(blackList)) { //如果黑白名单不为空,则用白名单减去黑名单 whiteList = (List) CollectionUtils.subtract(whiteList, blackList); } + if (whiteList.size() == 0) { + //如果白名单减黑名单等于0,则用黑名单过滤 + return this.filterGoodByWhiteOrBlackList(needToFilter, blackList, ListType.BLACK); + } //使用白名单过滤 return this.filterGoodByWhiteOrBlackList(needToFilter, whiteList, ListType.WHITE); } @@ -173,25 +177,45 @@ return needToFilter; } + @Override - public String buildBWListSql(String whereSql) { - List whiteList = this.findFilterGoodByType(ListType.WHITE, AcegiHelper.getCurrentOrgUnitCode()); - List blackList = this.findFilterGoodByType(ListType.BLACK, AcegiHelper.getCurrentOrgUnitCode()); + public String buildBWListSql(String whereSql, String orgUnitCode) { + return this.buildBWList(whereSql, orgUnitCode, "sql"); + } + + @Override + public String buildBWListTemplate(String templateJson, String orgUnitCode) { + return this.buildBWList(templateJson, orgUnitCode, "template"); + } + + /** + * 科室申领的黑白名单处理(模板和申请的物品) + * + * @param result sql或者模板的数据 + * @param orgUnitCode 申请科室 + * @param type 要处理的类型(模板还是物品) + * @return 最终过滤好的物品 + */ + private String buildBWList(String result, String orgUnitCode, String type) { + List whiteList = this.findFilterGoodByType(ListType.WHITE, orgUnitCode); + List blackList = this.findFilterGoodByType(ListType.BLACK, orgUnitCode); if (CollectionUtils.isNotEmpty(whiteList)) { if (CollectionUtils.isNotEmpty(blackList)) { //如果黑白名单不为空,则用白名单减去黑名单 whiteList = (List) CollectionUtils.subtract(whiteList, blackList); } + if (whiteList.size() == 0) { + //如果白名单减黑名单等于0,则用黑名单过滤 + return new BwFilter(BWHandlerFactory.createWhiteOrBlackHandler(ListType.BLACK)).doFilter(result, blackList, type); + } //使用白名单过滤 - WhiteOrBlackHandler whiteOrBlackHandler = BWHandlerFactory.createWhiteOrBlackHandler(ListType.WHITE); - return whiteOrBlackHandler.buildWhereSql(whereSql, whiteList); + return new BwFilter(BWHandlerFactory.createWhiteOrBlackHandler(ListType.WHITE)).doFilter(result, whiteList, type); } //如果只有黑名单,则用黑名单过滤 if (CollectionUtils.isEmpty(whiteList) && CollectionUtils.isNotEmpty(blackList)) { - WhiteOrBlackHandler whiteOrBlackHandler = BWHandlerFactory.createWhiteOrBlackHandler(ListType.BLACK); - return whiteOrBlackHandler.buildWhereSql(whereSql, blackList); + return new BwFilter(BWHandlerFactory.createWhiteOrBlackHandler(ListType.BLACK)).doFilter(result, blackList, type); } - return whereSql; + return BwFilter.returnOrigin(result, type); } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java =================================================================== diff -u -r16750 -r16854 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java (.../RecyclingApplicationAction.java) (revision 16750) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java (.../RecyclingApplicationAction.java) (revision 16854) @@ -19,6 +19,7 @@ import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.exception.RecyclingRecordException; +import com.forgon.disinfectsystem.goodFilterConfig.service.GoodFilterConfigManager; import com.forgon.disinfectsystem.project.model.ProjectDict; import com.forgon.disinfectsystem.project.service.ProjectManager; import com.forgon.disinfectsystem.recyclingapplication.service.InvoicePlanManager; @@ -115,7 +116,13 @@ private InvoicePlanManager invoicePlanManager; private ProjectManager projectManager; - + + private GoodFilterConfigManager goodFilterConfigManagerImpl; + + public void setGoodFilterConfigManagerImpl(GoodFilterConfigManager goodFilterConfigManagerImpl) { + this.goodFilterConfigManagerImpl = goodFilterConfigManagerImpl; + } + public void setInvoicePlanManager(InvoicePlanManager invoicePlanManager) { this.invoicePlanManager = invoicePlanManager; } @@ -987,10 +994,14 @@ JSONObject leftStore = new JSONObject(); JSONObject rightStore = new JSONObject(); - - leftStore.put("children", JSONArray.fromObject("[" + leftStoreJson + "]")); - rightStore.put("children", JSONArray.fromObject("[" + rightStoreJson + "]")); - + + String left = goodFilterConfigManagerImpl.buildBWListTemplate(leftStoreJson.toString(), orgunitCodes); + String right = goodFilterConfigManagerImpl.buildBWListTemplate(rightStoreJson.toString(), orgunitCodes); + leftStore.put("children", left); + rightStore.put("children", right); + // leftStore.put("children", JSONArray.fromObject("[" + leftStoreJson + "]")); + // rightStore.put("children", JSONArray.fromObject("[" + rightStoreJson + "]")); + obj.put("leftStore", leftStore); obj.put("rightStore", rightStore); Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/action/TousseDefinitionAction.java =================================================================== diff -u -r16820 -r16854 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/action/TousseDefinitionAction.java (.../TousseDefinitionAction.java) (revision 16820) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/action/TousseDefinitionAction.java (.../TousseDefinitionAction.java) (revision 16854) @@ -27,6 +27,7 @@ import com.forgon.disinfectsystem.goodFilterConfig.enums.ListType; import com.forgon.disinfectsystem.goodFilterConfig.service.GoodFilterConfigManager; +import com.forgon.disinfectsystem.tousse.comboTousse.service.ComboTousseManager; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; @@ -128,6 +129,12 @@ private GoodFilterConfigManager goodFilterConfigManagerImpl; + private ComboTousseManager comboTousseManagerImpl; + + public void setComboTousseManagerImpl(ComboTousseManager comboTousseManagerImpl) { + this.comboTousseManagerImpl = comboTousseManagerImpl; + } + public void setGoodFilterConfigManagerImpl(GoodFilterConfigManager goodFilterConfigManagerImpl) { this.goodFilterConfigManagerImpl = goodFilterConfigManagerImpl; } @@ -348,6 +355,11 @@ } tousseDefinitionManager.saveTousseDefinition(tousseDefinition, upload,null,null); + String motion = StrutsParamUtils.getPraramValue("motion", null); + if (StringUtils.isNotBlank(motion) && "comboTousse".equals(motion)){ + String comboTousseArray = StrutsParamUtils.getPraramValue("comboTousseArray", null); + comboTousseManagerImpl.saveOrUpdateComboTousses(comboTousseArray, tousseDefinition, newTousse); + } if(newTousse && (tousseDefinition.isInsideTousse() || tousseDefinition.isDisinfection() || tousseDefinition.isDressing())){ @@ -1128,6 +1140,58 @@ } /** + * 读取聚合包信息 + */ + public void loadComboTousse(){ + try { + JsonConfig config = new JsonConfig(); + config.setExcludes(new String[] { "fieldHandler", "handler", + "idCardDefinitions", "hibernateLazyInitializer", "image", + "tousse", "goodsBatchs", "tousseInstances" }); // 解决hibernate延迟加载的问题 + config.registerDefaultValueProcessor(Double.class, new DefaultValueProcessor() { + @Override + public Object getDefaultValue( + @SuppressWarnings("rawtypes") Class arg0) { + return null; + } + }); + config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); + Map map = new HashMap(); + map.put("success", true); + map.put("data", tousseDefinition); + JSONObject jsonObject = JSONObject.fromObject(map, config); + StrutsResponseUtils.output(jsonObject); + } + catch (Exception e) { + logger.error(e,e); + } + } + + /** + * 获取器械包(不包括聚合包) + */ + public void getTousse(){ + try { + PageUtil.outPutResult(PageUtil.getPagePara(), comboTousseManagerImpl.getTousse(spell)); + } + catch (Exception e) { + logger.error(e, e); + } + } + + /** + * 读取聚合包下的器械包 + */ + public void loadComboTousseByTousseId(){ + try { + PageUtil.outPutResult(PageUtil.getPagePara(), comboTousseManagerImpl.getComboTousseMsg(tousseDefinition)); + } + catch (Exception e) { + logger.error(e,e); + } + } + + /** * 根据包名加载器械包 */ public void loadTousseDefinitionByName() { @@ -1603,6 +1667,8 @@ if (StringUtils.isNotBlank(appIsUseBwList) && "true".equals(appIsUseBwList)){ //开启器械包黑白名单过滤 retObj.put("needToBw", true); + //申请科室编号 + retObj.put("appCode", StrutsParamUtils.getPraramValue("appCode", "")); } List tousseDefinitiionList = tousseDefinitionManager.getCssdHandleTousseDefinitionList(cssd,spell,start,limit,predicates,retObj); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/goodFilterConfig/service/BlackListHandler.java =================================================================== diff -u -r16820 -r16854 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/goodFilterConfig/service/BlackListHandler.java (.../BlackListHandler.java) (revision 16820) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/goodFilterConfig/service/BlackListHandler.java (.../BlackListHandler.java) (revision 16854) @@ -2,6 +2,9 @@ import com.forgon.tools.SqlBuilder; import com.forgon.tools.util.ObjectUtil; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.apache.log4j.Logger; import java.util.List; import java.util.Map; @@ -15,6 +18,8 @@ private static BlackListHandler ourInstance; + protected Logger logger = Logger.getLogger(this.getClass()); + public static BlackListHandler getInstance() { if (ourInstance == null) { synchronized (BlackListHandler.class) { @@ -44,4 +49,26 @@ whereSql += " and " + ids; return whereSql; } + + @Override + public String buildTemplate(String templateJson, List blackList) { + JSONArray jsonArray = JSONArray.fromObject("[" + templateJson + "]"); + logger.debug("原来模板的物品数量:" + jsonArray.size()); + JSONArray result = new JSONArray(); + for (int i = 0, size = jsonArray.size(); i < size; i++) { + JSONObject jsonObject = jsonArray.getJSONObject(i); + Long tousseDefinitionID = jsonObject.getLong("tousseDefinitionID"); + String tousseType = jsonObject.getString("tousseType"); + //只对器械包做黑名单处理 + if ("器械包".equals(tousseType)) { + if (!blackList.contains(tousseDefinitionID)) { + result.add(jsonObject); + } + continue; + } + result.add(jsonObject); + } + logger.debug("执行黑名单过滤后的模板物品数量:" + result.size()); + return result.toString(); + } } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/goodFilterConfig/service/BwFilter.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/goodFilterConfig/service/BwFilter.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/goodFilterConfig/service/BwFilter.java (revision 16854) @@ -0,0 +1,53 @@ +package com.forgon.disinfectsystem.goodFilterConfig.service; + +import java.util.List; + +/** + * @author zhonghaowen + * @apiNote 科室申领物品的黑白名单过滤器, 用于过滤申领的物品和科室配置好的模板 + * @since 2017-01-20 + */ +public class BwFilter { + + private WhiteOrBlackHandler whiteOrBlackHandler; + + public BwFilter(WhiteOrBlackHandler whiteOrBlackHandler) { + this.whiteOrBlackHandler = whiteOrBlackHandler; + } + + /** + * 处理科室申领的物品 + * + * @param result 要处理的数据 + * @param list 黑名单或者白名单列表 + * @param type 要处理的类型(sql表示申请的物品,template表示科室的模板) + * @return 返回最终处理好的结果 + */ + public String doFilter(String result, List list, String type) { + if ("sql".equals(type)) { + return whiteOrBlackHandler.buildWhereSql(result, list); + } + else if ("template".equals(type)) { + return whiteOrBlackHandler.buildTemplate(result, list); + } + return null; + } + + + /** + * 返回原来的(用于没经过黑白名单列表的过滤) + * + * @param result 要处理的数据 + * @param type 要处理的类型(sql表示申请的物品,template表示科室的模板) + * @return 返回结果 + */ + public static String returnOrigin(String result, String type) { + if ("sql".equals(type)) { + return result; + } + if ("template".equals(type)) { + return "[" + result + "]"; + } + return null; + } +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/goodFilterConfig/service/WhiteListHandler.java =================================================================== diff -u -r16820 -r16854 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/goodFilterConfig/service/WhiteListHandler.java (.../WhiteListHandler.java) (revision 16820) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/goodFilterConfig/service/WhiteListHandler.java (.../WhiteListHandler.java) (revision 16854) @@ -2,6 +2,9 @@ import com.forgon.tools.SqlBuilder; import com.forgon.tools.util.ObjectUtil; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import org.apache.log4j.Logger; import java.util.List; import java.util.Map; @@ -15,6 +18,8 @@ private static WhiteListHandler ourInstance; + protected Logger logger = Logger.getLogger(this.getClass()); + public static WhiteListHandler getInstance() { if (ourInstance == null) { synchronized (WhiteListHandler.class) { @@ -44,4 +49,26 @@ whereSql += " and " + ids; return whereSql; } + + @Override + public String buildTemplate(String templateJson, List whiteList) { + JSONArray jsonArray = JSONArray.fromObject("[" + templateJson + "]"); + JSONArray result = new JSONArray(); + logger.debug("原来模板的物品数量:" + jsonArray.size()); + for (int i = 0, size = jsonArray.size(); i < size; i++) { + JSONObject jsonObject = jsonArray.getJSONObject(i); + Long tousseDefinitionID = jsonObject.getLong("tousseDefinitionID"); + String tousseType = jsonObject.getString("tousseType"); + //只对器械包做白名单处理 + if ("器械包".equals(tousseType)) { + if (whiteList.contains(tousseDefinitionID)) { + result.add(jsonObject); + } + continue; + } + result.add(jsonObject); + } + logger.debug("执行白名单过滤后的模板物品数量:" + result.size()); + return result.toString(); + } } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/goodFilterConfig/service/WhiteOrBlackHandler.java =================================================================== diff -u -r16820 -r16854 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/goodFilterConfig/service/WhiteOrBlackHandler.java (.../WhiteOrBlackHandler.java) (revision 16820) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/goodFilterConfig/service/WhiteOrBlackHandler.java (.../WhiteOrBlackHandler.java) (revision 16854) @@ -27,4 +27,14 @@ * @return 返回拼接好的条件sql */ String buildWhereSql(String whereSql, List list); + + /** + * 根据传进来的黑名单或者白名单列表来过滤科室的申请模板列表 + * + * @param templateJson 科室的申请模板列表 + * @param list 黑名单后者白名单列表 + * @return 返回处理好的json格式的模板数据 + */ + String buildTemplate(String templateJson, List list); + } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/goodFilterConfig/service/GoodFilterConfigManager.java =================================================================== diff -u -r16820 -r16854 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/goodFilterConfig/service/GoodFilterConfigManager.java (.../GoodFilterConfigManager.java) (revision 16820) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/goodFilterConfig/service/GoodFilterConfigManager.java (.../GoodFilterConfigManager.java) (revision 16854) @@ -74,11 +74,20 @@ /** * 拼接黑白名单的条件sql * - * @param whereSql 原来的条件sql + * @param whereSql 原来的条件sql + * @param orgUnitCode 申请科室编码 * @return 构造好黑白名单的sql */ - String buildBWListSql(String whereSql); + String buildBWListSql(String whereSql, String orgUnitCode); + /** + * 根据黑白名单过滤科室配置了的模板 + * + * @param templateJson 科室的模板数据 + * @param orgUnitCode 申请科室编码 + * @return + */ + String buildBWListTemplate(String templateJson, String orgUnitCode); } Index: ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsTemplateApplicationView.js =================================================================== diff -u -r16838 -r16854 --- ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsTemplateApplicationView.js (.../goodsTemplateApplicationView.js) (revision 16838) +++ ssts-web/src/main/webapp/disinfectsystem/recyclingApplication/goodsTemplateApplicationView.js (.../goodsTemplateApplicationView.js) (revision 16854) @@ -1,6 +1,6 @@ var entityName = "申请"; // var configWinHeight = top.screen.height > 1000 ? 650 : top.screen.height * 0.75; -var configWinHeight = top.screen.height > 1000 ? 650 : 620; +var configWinHeight = top.screen.height > 1000 ? 650 : 530; var configWinWidth = top.screen.width > 1280 ? 1024 : top.screen.width * 0.85; var isOpenLoadTemplateByUnit = sstsConfig.isOpenLoadTemplateByUnit; //是否隐藏住院号(只有config.js的配置为false时才不隐藏,否则都隐藏) @@ -404,7 +404,9 @@ proxy : goodProxy, fields : goodModel, listeners:{ - beforeload : function(){ + beforeload : function(store, options){ + //申请科室部门编号 + options.params['appCode'] = top.Ext4.getCmp('departCoding').getValue(); if (!isIE6OrIE7){ createExt4Mask.call(objMask,'loadMask','数据处理中,请稍候......', applicationWindow); objMask.loadMask.show(); @@ -2176,7 +2178,8 @@ { xtype : 'hidden', name : 'departCoding', - itemId : 'departCoding' + itemId : 'departCoding', + id : "departCoding" }, { xtype : 'hidden', Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java =================================================================== diff -u -r16820 -r16854 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 16820) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 16854) @@ -2140,7 +2140,11 @@ if (JSONUtil.optBoolean(retObj, "needToBw", false)){ //黑白名单过滤 - whereSql = goodFilterConfigManagerImpl.buildBWListSql(whereSql); + String appCode = retObj.getString("appCode"); + if(StringUtils.isNotBlank(appCode)){ + //只有申请科室编号不为空才开启过滤 + whereSql = goodFilterConfigManagerImpl.buildBWListSql(whereSql, appCode); + } } String findSql = String.format(" from %s %s ", TousseDefinition.class.getSimpleName(),whereSql);