Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r33483 -r33489 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 33483) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 33489) @@ -1466,12 +1466,11 @@ if(StringUtils.isBlank(taskGroup)){ throw new RuntimeException("任务组不能为空"); } - //按包名称分页,不按装配任务条数分页,先查询本页的包名称,再去查询这些包的所有装配任务 - Set queryTousseNames = null; + //按包名称和任务类型taskType分页,taskType不为1要排在最后,加急除外,加急排最前,不按装配任务条数分页,先查询本页的包名称,再去查询这些包的所有装配任务 + List tousseNamesAndTaskTypes = null; if(pageSize != null && pageIndex != null && pageIndex > 0 && pageSize > 0){ - queryTousseNames = getTousseIdsOfPackingTask(taskGroup, basketBarcode, pageIndex, pageSize); + tousseNamesAndTaskTypes = getTousseNamesAndTaskType(taskGroup, basketBarcode, pageIndex, pageSize); } - boolean allowForeignToussePartiallyPacking = CssdUtils.getSystemSetConfigByNameBool("allowForeignToussePartiallyPacking"); boolean waitPackingTaskGrid_show_foreignTousse_customSplitBasketAmount = CssdUtils.getSystemSetConfigByNameBool("waitPackingTaskGrid_show_foreignTousse_customSplitBasketAmount"); boolean enableUrgentFunction = CssdUtils.getSystemSetConfigByNameBool("enableUrgentFunction", false); @@ -1487,22 +1486,22 @@ SupplyRoomConfig supplyRoomConfig = supplyRoomConfigManager.getSystemParamsObj(); boolean showRecyclingPeopleColumnInPackingTasksList = CssdUtils.getSystemSetConfigByNameBool("showRecyclingPeopleColumnInPackingTasksList", false); //普通器械包、消毒物品及敷料包的装配任务查询 - List taskList = findPackingTaskFromCssdHandleToussesConfig(showRecyclingPeopleColumnInPackingTasksList, taskGroup,basketBarcode,supplyRoomConfig,queryTousseNames); + List taskList = findPackingTaskFromCssdHandleToussesConfig(showRecyclingPeopleColumnInPackingTasksList, taskGroup,basketBarcode,supplyRoomConfig, tousseNamesAndTaskTypes); if(supplyRoomConfig != null){ //外来器械包默认处理科室及任务组 JSONObject foreignTousseHandleDepartAndTaskGroupJsonobject = supplyRoomConfig.getOneForeignTousseHandleDepartAndTaskGroupByDepartCode(AcegiHelper.getCurrentOrgUnitCode()); if(foreignTousseHandleDepartAndTaskGroupJsonobject != null && StringUtils.equals(taskGroup, foreignTousseHandleDepartAndTaskGroupJsonobject.optString("taskGroup"))){ //外来器械包的装配任务查询 - List foreignTousseTaskList = findForeignToussePackingTask(showRecyclingPeopleColumnInPackingTasksList, basketBarcode, enableUrgentFunction,queryTousseNames); + List foreignTousseTaskList = findForeignToussePackingTask(showRecyclingPeopleColumnInPackingTasksList, basketBarcode, enableUrgentFunction, tousseNamesAndTaskTypes); if(CollectionUtils.isNotEmpty(foreignTousseTaskList)){ taskList.addAll(foreignTousseTaskList); } } if(StringUtils.equals(taskGroup, supplyRoomConfig.getCustomTousseDefaultTaskGroup())){ //自定义器械包的装配任务查询 - List customerTousseTaskList = findCustomerToussePackingTask(showRecyclingPeopleColumnInPackingTasksList, basketBarcode, queryTousseNames); + List customerTousseTaskList = findCustomerToussePackingTask(showRecyclingPeopleColumnInPackingTasksList, basketBarcode, tousseNamesAndTaskTypes); if(CollectionUtils.isNotEmpty(customerTousseTaskList)){ taskList.addAll(customerTousseTaskList); } @@ -1920,26 +1919,20 @@ return taskVos; } /** - * 分页获取装配任务的器械包 按包名称分页 + * 获取待装配任务分页的文件夹的包名称和任务类型 任务类型返回1 和 0(此处0为非1的数) + * @param taskGroup 任务组 * @param basketBarcode 篮筐条码 - * @param pageIndex - * @param pageSize + * @param pageIndex 第几页 + * @param pageSize 每页条数 * @return */ - public Set getTousseIdsOfPackingTask(String taskGroup, String basketBarcode, int pageIndex, int pageSize){ - List list = objectDao.findByHql(String.format("select po.tousseDefinition.name from %s po left join po.urgentLevelObj where 1=1 %s %s group by po.tousseDefinition.name order by max(po.urgentLevelObj.grade) desc, po.tousseDefinition.name desc " + public List getTousseNamesAndTaskType(String taskGroup, String basketBarcode, int pageIndex, int pageSize){ + 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 1=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 " , PackingTask.class.getSimpleName() ,StringUtils.isBlank(basketBarcode)?"":" and po.basketBarcode like '%" + basketBarcode + "%' " ,StringUtils.isBlank(taskGroup)?"":" and po.tousseDefinition.ancestorID in (select id from TousseDefinition where forDisplay=1 and taskGroup='"+ taskGroup +"') ") , (pageIndex - 1) * pageSize, pageSize); - if(CollectionUtils.isEmpty(list)){ - return null; - } - Set tdNames = new HashSet(); - for (String name : list) { - tdNames.add(name); - } - return tdNames; + return tousseNamesAndTasks; } @Override public int getPackingTaskTousseNameCount(String taskGroup){ @@ -2142,9 +2135,10 @@ * 适合器械包、消毒物品、敷料包的装配任务查询 * @param taskGroup * @param basketBarcode + * @param tousseNamesAndTaskTypes 包名称和装配任务类型 * @return 同时返回PackingTask和TousseDefintion两个实体类,避免多次查询 */ - private List findPackingTaskFromCssdHandleToussesConfig(boolean showRecyclingPeopleColumnInPackingTasksList, String taskGroup,String basketBarcode,SupplyRoomConfig config, Set queryTousseNames) { + private List findPackingTaskFromCssdHandleToussesConfig(boolean showRecyclingPeopleColumnInPackingTasksList, String taskGroup,String basketBarcode,SupplyRoomConfig config, List tousseNamesAndTaskTypes) { String recyclingAmountConfirmSql = "1=1"; if(CssdUtils.getSystemSetConfigByNameBool("confirmRecyclingAmount", false)){ recyclingAmountConfirmSql = String.format("(po.recycleAmountNeedConfirm<>'%s' or po.recycleAmountNeedConfirm is null)",Constants.STR_YES); @@ -2201,8 +2195,23 @@ + "and (td.tousseType not in('"+TousseDefinition.PACKAGE_TYPE_FOREIGN+"','"+TousseDefinition.PACKAGE_TYPE_SPLIT+"','"+TousseDefinition.PACKAGE_TYPE_CUSTOM+"')) " //外来器械和自定义器械,有专门获取装配任务 + "and ct.taskGroup = '"+taskGroup+"' and po.orgUnitCoding = '" + orgCode + "' and po.unPackAmount > 0 and " + recyclingAmountConfirmSql; } - if(CollectionUtils.isNotEmpty(queryTousseNames)){ - sql += " and " + SqlUtils.getStringFieldInLargeCollectionsPredicate("td.name", queryTousseNames); + if(CollectionUtils.isNotEmpty(tousseNamesAndTaskTypes)){ + sql += " and ("; + for (int i = 0; i < tousseNamesAndTaskTypes.size(); i++) { + Object[] tousseNamesAndTaskType = tousseNamesAndTaskTypes.get(i); + String name = (String)tousseNamesAndTaskType[0]; + Integer taskType = (Integer)tousseNamesAndTaskType[1]; + if(i > 0){ + sql += " or "; + } + sql += " td.name='"+ name +"' and po.taskType"; + if(taskType == PackingTask.TASK_RECYCLINGRECORD){ + sql += "=1 "; + }else{ + sql += "<>1 "; + } + } + sql += ") "; } if(StringUtils.isNotBlank(basketBarcode)){ //验证篮筐是否清洗 @@ -2239,9 +2248,10 @@ * 查询外来器械器械包、外来器械拆分小包的待装配装配任务集合(按科室供应室配置的任务组查询) * @param taskGroup * @param basketBarcode + * @param tousseNamesAndTaskTypes 包名称和装配任务类型 * @return 同时返回PackingTask和TousseDefintion两个实体类,避免多次查询 */ - private List findForeignToussePackingTask(boolean showRecyclingPeopleColumnInPackingTasksList, String basketBarcode, boolean enableUrgentFunction, Set queryTousseNames) { + private List findForeignToussePackingTask(boolean showRecyclingPeopleColumnInPackingTasksList, String basketBarcode, boolean enableUrgentFunction, List tousseNamesAndTaskTypes) { String orgCode = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(); String recyclingAmountConfirmSql = "1=1"; @@ -2296,8 +2306,23 @@ } sql += " and po.basketBarcode like '%" + basketBarcode + "%' "; } - if(CollectionUtils.isNotEmpty(queryTousseNames)){ - sql += " and " + SqlUtils.getStringFieldInLargeCollectionsPredicate("td.name", queryTousseNames); + if(CollectionUtils.isNotEmpty(tousseNamesAndTaskTypes)){ + sql += " and ("; + for (int i = 0; i < tousseNamesAndTaskTypes.size(); i++) { + Object[] tousseNamesAndTaskType = tousseNamesAndTaskTypes.get(i); + String name = (String)tousseNamesAndTaskType[0]; + Integer taskType = (Integer)tousseNamesAndTaskType[1]; + if(i > 0){ + sql += " or "; + } + sql += " td.name='"+ name +"' and po.taskType"; + if(taskType == PackingTask.TASK_RECYCLINGRECORD){ + sql += "=1 "; + }else{ + sql += "<>1 "; + } + } + sql += ") "; } return findPackingTaskBySql(sql); } @@ -2306,9 +2331,10 @@ * 查询自定义器械包的待装配装配任务集合(按科室供应室配置的任务组查询) * @param taskGroup * @param basketBarcode + * @param tousseNamesAndTaskTypes 包名称和装配任务类型 * @return 同时返回PackingTask和TousseDefintion两个实体类,避免多次查询 */ - private List findCustomerToussePackingTask(boolean showRecyclingPeopleColumnInPackingTasksList, String basketBarcode, Set queryTousseNames) { + private List findCustomerToussePackingTask(boolean showRecyclingPeopleColumnInPackingTasksList, String basketBarcode, List tousseNamesAndTaskTypes) { String orgCode = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(); String recyclingAmountConfirmSql = "1=1"; @@ -2347,8 +2373,23 @@ } sql += " and po.basketBarcode like '%" + basketBarcode + "%' "; } - if(CollectionUtils.isNotEmpty(queryTousseNames)){ - sql += " and " + SqlUtils.getStringFieldInLargeCollectionsPredicate("td.name", queryTousseNames); + if(CollectionUtils.isNotEmpty(tousseNamesAndTaskTypes)){ + sql += " and ("; + for (int i = 0; i < tousseNamesAndTaskTypes.size(); i++) { + Object[] tousseNamesAndTaskType = tousseNamesAndTaskTypes.get(i); + String name = (String)tousseNamesAndTaskType[0]; + Integer taskType = (Integer)tousseNamesAndTaskType[1]; + if(i > 0){ + sql += " or "; + } + sql += " td.name='"+ name +"' and po.taskType"; + if(taskType == PackingTask.TASK_RECYCLINGRECORD){ + sql += "=1 "; + }else{ + sql += "<>1 "; + } + } + sql += ") "; } return findPackingTaskBySql(sql); }