Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java =================================================================== diff -u -r33483 -r33915 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java (.../PackingAction.java) (revision 33483) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/PackingAction.java (.../PackingAction.java) (revision 33915) @@ -759,14 +759,16 @@ String taskGroup = StrutsParamUtils.getPraramValue("taskGroup", null); int pageIndex = StrutsParamUtils.getPraramValue("pageIndex", 1); int pageSize = StrutsParamUtils.getPraramValue("pageSize", 20); - StrutsResponseUtils.output(packingManager.getWaitPackingTaskJson(taskGroup,pageIndex,pageSize)); + String tousseOrDepart = StrutsParamUtils.getPraramValue("tousseOrDepart", null); + StrutsResponseUtils.output(packingManager.getWaitPackingTaskJson(taskGroup,tousseOrDepart,pageIndex,pageSize)); } //获取待装配任务页码信息 public void loadWaitPackingTaskPageJson(){ JSONObject obj = new JSONObject(); try { String taskGroup = StrutsParamUtils.getPraramValue("taskGroup", null); - int totalCount = packingManager.getPackingTaskTousseNameCount(taskGroup); + String tousseOrDepart = StrutsParamUtils.getPraramValue("tousseOrDepart", null); + int totalCount = packingManager.getPackingTaskTousseNameCount(taskGroup, tousseOrDepart); int pageSize = StrutsParamUtils.getPraramValue("pageSize", 20); int pageNo = 0; if(totalCount > 0){ Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java =================================================================== diff -u -r33503 -r33915 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 33503) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManager.java (.../PackingManager.java) (revision 33915) @@ -134,18 +134,37 @@ String basketBarcode, String basketName,String department); public JSONArray getWaitPackingTaskJson(String taskGroup,String basketBarcodes, JSONObject returnObj, Integer pageIndex, Integer pageSize); - public JSONArray getWaitPackingTaskJson(String taskGroup, Integer pageIndex, Integer pageSize); /** + * + * @param taskGroup 任务组 + * @param tousseOrDepart 模糊查询的包名和科室 + * @param pageIndex + * @param pageSize + * @return + */ + public JSONArray getWaitPackingTaskJson(String taskGroup, String tousseOrDepart, Integer pageIndex, Integer pageSize); + /** * 获取装配任务,返回vo对象 * @param taskGroup * @param basketBarcode * @param returnObj 存放一些键值对 目前用来保存发给前台的提示显示 + * @param tousseOrDepart 模糊查询 科室或包名 * @return */ - public List getWaitPackingTaskTaskVoList(String taskGroup, String basketBarcode, JSONObject returnObj, Integer pageIndex, Integer pageSize); + public List getWaitPackingTaskTaskVoList(String taskGroup, String basketBarcode, JSONObject returnObj,String tousseOrDepart, Integer pageIndex, Integer pageSize); + /** + * 获取装配任务,返回vo对象 + * @param packingTaskId 装配任务id + * @param taskGroup 任务组 + * @param basketBarcode 篮筐条码 + * @param returnObj 存放一些键值对 目前用来保存发给前台的提示显示 + * @param tousseOrDepart 模糊查询 科室或包名 + * @param pageIndex + * @param pageSize + * @return + */ + public List getWaitPackingTaskTaskVoList(Long packingTaskId, String taskGroup, String basketBarcode, JSONObject returnObj,String tousseOrDepart, Integer pageIndex, Integer pageSize); - public List getWaitPackingTaskTaskVoList(Long packingTaskId, String taskGroup, String basketBarcode, JSONObject returnObj, Integer pageIndex, Integer pageSize); - public void createWashedClassifyBasketPackingTask(); public int loadTodayPackingRecordTotalAmount(String taskGroup); @@ -357,7 +376,8 @@ /** * 获取装配任务文件夹 * @param taskGroup 任务组 + * @param tousseOrDepart 包名或科室 * @return */ - public int getPackingTaskTousseNameCount(String taskGroup); + public int getPackingTaskTousseNameCount(String taskGroup, String tousseOrDepart); } Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r33866 -r33915 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 33866) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 33915) @@ -4,6 +4,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.OutputStream; +import java.io.UnsupportedEncodingException; import java.lang.reflect.InvocationTargetException; import java.math.BigDecimal; import java.sql.ResultSet; @@ -29,6 +30,8 @@ import java.util.Map.Entry; import java.util.Set; import java.util.function.Consumer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; import javax.servlet.http.HttpServletRequest; @@ -1430,8 +1433,8 @@ } @Override - public JSONArray getWaitPackingTaskJson(String taskGroup, Integer pageIndex, Integer pageSize){ - List taskVos = getWaitPackingTaskTaskVoList(taskGroup, null,null,pageIndex,pageSize); + public JSONArray getWaitPackingTaskJson(String taskGroup, String tousseOrDepart, Integer pageIndex, Integer pageSize){ + List taskVos = getWaitPackingTaskTaskVoList(taskGroup, null,null,tousseOrDepart, pageIndex,pageSize); JSONArray jsonArray = new JSONArray(); jsonArray.addAll(taskVos); return jsonArray; @@ -1445,22 +1448,32 @@ taskVos = new LinkedList(); String[] basketBarcodesArray = basketBarcodes.split(";"); for (String basketBarcode : basketBarcodesArray) { - List taskVos_basket = getWaitPackingTaskTaskVoList(taskGroup, basketBarcode,returnObj,pageIndex,pageSize); + List taskVos_basket = getWaitPackingTaskTaskVoList(taskGroup, basketBarcode,returnObj,null,pageIndex,pageSize); if(taskVos_basket != null){ taskVos.addAll(taskVos_basket); } } }else{ - taskVos = getWaitPackingTaskTaskVoList(taskGroup, basketBarcodes,null, pageIndex, pageSize); + taskVos = getWaitPackingTaskTaskVoList(taskGroup, basketBarcodes,null,null, pageIndex, pageSize); } jsonArray.addAll(taskVos); return jsonArray; } @Override - public List getWaitPackingTaskTaskVoList(Long packingTaskId, String taskGroup, String basketBarcode, JSONObject returnObj, Integer pageIndex, Integer pageSize) { + public List getWaitPackingTaskTaskVoList(Long packingTaskId, String taskGroup, String basketBarcode, JSONObject returnObj,String tousseOrDepart, Integer pageIndex, Integer pageSize) { List taskVos = new ArrayList(); - + if (tousseOrDepart == null) { + tousseOrDepart = ""; + } + if(StringUtils.isNotBlank(tousseOrDepart)){ + try { + tousseOrDepart = java.net.URLDecoder.decode(tousseOrDepart, "UTF-8").toUpperCase().trim(); + } catch (UnsupportedEncodingException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } if(StringUtils.isBlank(taskGroup)){ throw new RuntimeException("任务组不能为空"); } @@ -1477,7 +1490,10 @@ } } if(!DatabaseUtil.isPoIdValid(packingTaskId) && pageSize != null && pageIndex != null && pageIndex > 0 && pageSize > 0){ - tousseNamesAndTaskTypes = getTousseNamesAndTaskType(taskGroup, basketBarcode, pageIndex, pageSize, queryTousseTypes); + tousseNamesAndTaskTypes = getTousseNamesAndTaskType(taskGroup, basketBarcode, pageIndex, pageSize, queryTousseTypes, tousseOrDepart); + if(CollectionUtils.isEmpty(tousseNamesAndTaskTypes)){ + return taskVos; + } } boolean allowForeignToussePartiallyPacking = CssdUtils.getSystemSetConfigByNameBool("allowForeignToussePartiallyPacking"); boolean waitPackingTaskGrid_show_foreignTousse_customSplitBasketAmount = CssdUtils.getSystemSetConfigByNameBool("waitPackingTaskGrid_show_foreignTousse_customSplitBasketAmount"); @@ -1934,8 +1950,8 @@ return taskVos; } @Override - public List getWaitPackingTaskTaskVoList(String taskGroup, String basketBarcode, JSONObject returnObj, Integer pageIndex, Integer pageSize) { - return getWaitPackingTaskTaskVoList(null, taskGroup, basketBarcode, returnObj, pageIndex, pageSize); + public List getWaitPackingTaskTaskVoList(String taskGroup, String basketBarcode, JSONObject returnObj, String tousseOrDepart, Integer pageIndex, Integer pageSize) { + return getWaitPackingTaskTaskVoList(null, taskGroup, basketBarcode, returnObj,tousseOrDepart, pageIndex, pageSize); } /** * 获取待装配任务分页的文件夹的包名称和任务类型 任务类型返回1 和 0(此处0为非1的数) @@ -1945,7 +1961,7 @@ * @param pageSize 每页条数 * @return */ - public List getTousseNamesAndTaskType(String taskGroup, String basketBarcode, int pageIndex, int pageSize, Set queryTousseTypes){ + public List getTousseNamesAndTaskType(String taskGroup, String basketBarcode, int pageIndex, int pageSize, Set queryTousseTypes, String tousseOrDepart){ String tousseTypeAndTaskGroupSql = ""; if(queryTousseTypes.contains(TousseDefinition.PACKAGE_TYPE_FOREIGN) && queryTousseTypes.contains(TousseDefinition.PACKAGE_TYPE_CUSTOM)){ tousseTypeAndTaskGroupSql = " and (po.tousseDefinition.tousseType in('"+ TousseDefinition.PACKAGE_TYPE_CUSTOM+ "','"+ TousseDefinition.PACKAGE_TYPE_FOREIGN +"','"+ TousseDefinition.PACKAGE_TYPE_FOREIGN +"') or po.tousseDefinition.ancestorID in(select tousseDefinitionId from CssdHandleTousses where taskGroup='"+ taskGroup +"' ) and po.tousseDefinition.tousseType not in('"+TousseDefinition.PACKAGE_TYPE_FOREIGN+"','"+TousseDefinition.PACKAGE_TYPE_SPLIT+"','"+TousseDefinition.PACKAGE_TYPE_CUSTOM+"')) "; //外来器械和自定义器械,有专门获取装配任务 @@ -1956,13 +1972,39 @@ }else{ tousseTypeAndTaskGroupSql = " and (po.tousseDefinition.ancestorID in(select tousseDefinitionId from CssdHandleTousses where taskGroup='"+ taskGroup +"' ) and po.tousseDefinition.tousseType not in('"+TousseDefinition.PACKAGE_TYPE_FOREIGN+"','"+TousseDefinition.PACKAGE_TYPE_SPLIT+"','"+TousseDefinition.PACKAGE_TYPE_CUSTOM+"')) "; } - List tousseNamesAndTasks = objectDao.findByHql(String.format("select po.tousseDefinition.name,case when po.taskType="+ PackingTask.TASK_RECYCLINGRECORD +" then 1 else 0 end from %s po left join po.urgentLevelObj where " + String tousseOrDepartSql = ""; + if(StringUtils.isNotBlank(tousseOrDepart)){ + // sqlServer如果字符串中有"[",进行转译 + if(tousseOrDepart.contains("[") && dbConnection.isSqlServer()){ + int index = tousseOrDepart.indexOf("["); + tousseOrDepart = tousseOrDepart.substring(0, index) + "\\" + tousseOrDepart.substring(index, tousseOrDepart.length()); + tousseOrDepartSql += " and (po.tousseDefinition.spelling like '%" + tousseOrDepart + "%' "+ " escape '\\' " +" or po.tousseDefinition.wbCode like '%" + + tousseOrDepart + "%' "+ " escape '\\' " +" or po.tousseDefinition.externalCode like '" + tousseOrDepart + + "%' "+ " escape '\\' " +" or po.tousseDefinition.name like '%" + tousseOrDepart + "%' "+ " escape '\\' "; + }else{ + tousseOrDepartSql += " and (po.tousseDefinition.spelling like '%" + tousseOrDepart + "%' or po.tousseDefinition.wbCode like '%" + + tousseOrDepart + "%' or po.tousseDefinition.externalCode like '" + tousseOrDepart + + "%' or po.tousseDefinition.name like '%" + tousseOrDepart + "%' "; + } + Pattern pat = Pattern.compile("[\\u4E00-\\u9FA5]+"); // 匹配中文字符的正则表达式 + Matcher m = pat.matcher(tousseOrDepart); + if (tousseOrDepart.trim().length() > 0) { + if (m.find()) { + tousseOrDepartSql += " or po.departCoding in (select orgUnitCoding from OrgUnit where name like '%" + tousseOrDepart + "%')) "; + } else { + tousseOrDepartSql += " or po.departCoding in (select orgUnitCoding from OrgUnit where spelling like '%" + tousseOrDepart + + "%' or wbCode like '%" + tousseOrDepart + "%')) "; + } + } + } + String sql = String.format("select po.tousseDefinition.name,case when po.taskType="+ PackingTask.TASK_RECYCLINGRECORD +" then 1 else 0 end from %s po left join po.urgentLevelObj where " + " po.orgUnitCoding = '" + AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig() - + "' and po.tousseDefinition.ancestorID in (select id from TousseDefinition where (hidePackingTask is null or hidePackingTask<>'是') and forDisplay=1) %s %s group by po.tousseDefinition.name,case when po.taskType=1 then 1 else 0 end order by max(po.urgentLevelObj.grade) desc, case when po.taskType=1 then 1 else 0 end desc, po.tousseDefinition.name desc " + + "' and po.tousseDefinition.ancestorID in (select id from TousseDefinition where (hidePackingTask is null or hidePackingTask<>'是') and forDisplay=1) %s %s %s group by po.tousseDefinition.name,case when po.taskType=1 then 1 else 0 end order by max(po.urgentLevelObj.grade) desc, case when po.taskType=1 then 1 else 0 end desc, po.tousseDefinition.name desc " , PackingTask.class.getSimpleName() ,StringUtils.isBlank(basketBarcode)?"":" and po.basketBarcode like '%" + basketBarcode + "%' " - ,tousseTypeAndTaskGroupSql) + ,tousseTypeAndTaskGroupSql,tousseOrDepartSql); + List tousseNamesAndTasks = objectDao.findByHql(sql , (pageIndex - 1) * pageSize, pageSize); return tousseNamesAndTasks; } @@ -1988,7 +2030,7 @@ return queryTousseTypes; } @Override - public int getPackingTaskTousseNameCount(String taskGroup){ + public int getPackingTaskTousseNameCount(String taskGroup, String tousseOrDepart){ Set queryTousseTypes = getQueryTousseTypes(taskGroup, supplyRoomConfigManager.getSystemParamsObj()); String tousseTypeAndTaskGroupSql = ""; if(queryTousseTypes.contains(TousseDefinition.PACKAGE_TYPE_FOREIGN) && queryTousseTypes.contains(TousseDefinition.PACKAGE_TYPE_CUSTOM)){ @@ -2007,6 +2049,31 @@ + AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig() + "' and (tdc.hidePackingTask is null or tdc.hidePackingTask<>'是') and tdc.forDisplay=1 " + tousseTypeAndTaskGroupSql; + if(StringUtils.isNotBlank(tousseOrDepart)){ + // sqlServer如果字符串中有"[",进行转译 + if(tousseOrDepart.contains("[") && dbConnection.isSqlServer()){ + int index = tousseOrDepart.indexOf("["); + tousseOrDepart = tousseOrDepart.substring(0, index) + "\\" + tousseOrDepart.substring(index, tousseOrDepart.length()); + sql += " and (td.spelling like '%" + tousseOrDepart + "%' "+ " escape '\\' " +" or td.wbCode like '%" + + tousseOrDepart + "%' "+ " escape '\\' " +" or td.externalCode like '" + tousseOrDepart + + "%' "+ " escape '\\' " +" or td.name like '%" + tousseOrDepart + "%' "+ " escape '\\' "; + }else{ + sql += " and (td.spelling like '%" + tousseOrDepart + "%' or td.wbCode like '%" + + tousseOrDepart + "%' or td.externalCode like '" + tousseOrDepart + + "%' or td.name like '%" + tousseOrDepart + "%' "; + } + tousseOrDepart = StringTools.defaultString(tousseOrDepart).toUpperCase(); + Pattern pat = Pattern.compile("[\\u4E00-\\u9FA5]+"); // 匹配中文字符的正则表达式 + Matcher m = pat.matcher(tousseOrDepart); + if (tousseOrDepart.trim().length() > 0) { + if (m.find()) { + sql += " or po.departCoding in (select orgUnitCoding from OrgUnit where name like '%" + tousseOrDepart + "%')) "; + } else { + sql += " or po.departCoding in (select orgUnitCoding from OrgUnit where spelling like '%" + tousseOrDepart + + "%' or wbCode like '%" + tousseOrDepart + "%')) "; + } + } + } return objectDao.countBySql(sql); } /** @@ -3537,7 +3604,7 @@ JSONArray packingTaskInfoList = new JSONArray(); if(packingTaskList != null){ for (PackingTask packingTask : packingTaskList) { - List vos = getWaitPackingTaskTaskVoList(packingTask.getId(), taskGroup, null, null, 0, 0); + List vos = getWaitPackingTaskTaskVoList(packingTask.getId(), taskGroup, null, null,null, 0, 0); if(CollectionUtils.isNotEmpty(vos)){ for (WaitPackingTaskVo vo : vos) { List childrens = vo.getChildren();