Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r37205 -r37228 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 37205) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 37228) @@ -31,6 +31,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.concurrent.TimeUnit; import java.util.function.Consumer; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -1789,8 +1790,13 @@ } } String recyclingAmountConfirmSql = buildRecyclingAmountConfirmSql(); + TimeoutSetting timeoutSetting = timeoutManager.getTimeoutSetting(TimeoutManager.PROCEDURE_WASH_TO_PACKING); + boolean orderByWashTime = false;//是否设置了清洗超时,如果是,需要在排序中加入按超时时间排序 + if(timeoutSetting != null && (timeoutSetting.getHour() > 0 || timeoutSetting.getMinute() > 0)){ + orderByWashTime = true; + } if(!DatabaseUtil.isPoIdValid(packingTaskId) && pageSize != null && pageIndex != null && pageIndex > 0 && pageSize > 0){ - tousseNamesAndTaskTypes = getTousseNamesAndTaskType(taskGroup, basketBarcode, pageIndex, pageSize, queryTousseTypes, tousseOrDepart, recyclingAmountConfirmSql); + tousseNamesAndTaskTypes = getTousseNamesAndTaskType(orderByWashTime,taskGroup, basketBarcode, pageIndex, pageSize, queryTousseTypes, tousseOrDepart, recyclingAmountConfirmSql); if(CollectionUtils.isEmpty(tousseNamesAndTaskTypes)){ return taskVos; } @@ -1844,13 +1850,13 @@ Map scanBasketTaskMap = new LinkedHashMap(); //不用扫篮筐的装配任务 Map unScanBasketTaskMap = new LinkedHashMap(); - + boolean haveTimeOut = false;//是否有超时,如果有 加入超时的排序 if (CollectionUtils.isNotEmpty(taskList)) { Map> errorsMap = loadWaitSupplementRecyclingErrors(); Map> damagesMap = loadWaitSupplementRecyclingDamages(); - TimeoutSetting timeoutSetting = timeoutManager.getTimeoutSetting(TimeoutManager.PROCEDURE_WASH_TO_PACKING); + SerialNum serialNum = serialNumManager.getSerialNumber(SerialNum.TYPE_PACKING_TASK); Map taskSourceIdAndTDIdToCountMap = new HashMap(); //包定义的配包注意事项(ZSRY-9支持富文本编辑,配包注意事项保存到TousseDefinitionNote表中) @@ -1932,6 +1938,7 @@ collectPackingTaskInfo(invoicePlanIDToPatient, taskList); StringBuffer sbf = new StringBuffer(); Date newDate = new Date(); + SimpleDateFormat ymdhm = new SimpleDateFormat("yyyy-MM-dd HH:mm"); for (Object[] result : taskList) { PackingTask task = (PackingTask)result[0]; TousseDefinition td = (TousseDefinition)result[1]; @@ -1947,7 +1954,7 @@ if(washTimeOfVerifiedMap.containsKey(task.getWashTime())){ isTimeout = washTimeOfVerifiedMap.get(task.getWashTime()); }else{ - isTimeout = timeoutManager.isTimeouted(task.getWashTime(), timeoutSetting, new SimpleDateFormat("yyyy-MM-dd HH:mm")); + isTimeout = timeoutManager.isTimeouted(task.getWashTime(), timeoutSetting, ymdhm); washTimeOfVerifiedMap.put(task.getWashTime(), isTimeout); } WaitPackingTaskItemVo itemVo = new WaitPackingTaskItemVo(); @@ -2081,8 +2088,15 @@ itemVo.setCleaned(task.cleaned(newDate,objectDao,washAndDisinfectRecordMap,rinserMap)); UrgentLevel ul = task.getUrgentLevelObj(); itemVo.setUrgentLevelObj(ul); + Long timeoutDuration = null; if(isTimeout){ + if(!haveTimeOut){ + haveTimeOut = true; + } itemVo.setCls("itemTimeout"); + if(StringUtils.isNotBlank(task.getWashTime())){ + timeoutDuration = DateTools.getDateDiff(ForgonDateUtils.safelyParseDate(task.getWashTime(), ymdhm),newDate , TimeUnit.MINUTES); + } } String washTime = task.getWashTime(); if (StringUtils.isNotBlank(washTime) @@ -2181,7 +2195,11 @@ List childrens = vo.getChildren(); childrens.add(itemVo); vo.setCustomSplitBasketAmount(vo.getCustomSplitBasketAmount()+customSplitBasketAmount); - + if(timeoutDuration != null && timeoutDuration > 0){ + if(vo.getTimeoutDuration() == null || vo.getTimeoutDuration() < timeoutDuration){ + vo.setTimeoutDuration(timeoutDuration); + } + } itemVo.setAmount(task.getUnPackAmount()); itemVo.setMaxAmount(task.getUnPackAmount()); itemVo.setSupplierName(td.getSupplierName()); @@ -2255,6 +2273,7 @@ taskVos.add(vo); } } + boolean haveTimeOutFinal = haveTimeOut?true:false; if(isUrgent){ Collections.sort(taskVos,new Comparator() { @Override @@ -2265,11 +2284,26 @@ }else if(b2.getLastExpectUseTime().compareTo(b1.getLastExpectUseTime()) == 0){ if(b2.getGrade().compareTo(b1.getGrade()) > 0){ return 1; + }else if(haveTimeOutFinal && b2.getGrade().compareTo(b1.getGrade()) == 0){ + if(b2.getTimeoutDuration().compareTo(b1.getTimeoutDuration()) > 0){ + return 1; + } } } return -1; } }); + }else if(haveTimeOutFinal){ + Collections.sort(taskVos,new Comparator() { + @Override + public int compare(WaitPackingTaskVo b1, + WaitPackingTaskVo b2) { + if(b2.getTimeoutDuration().compareTo(b1.getTimeoutDuration()) > 0){ + return 1; + } + return -1; + } + }); } return taskVos; } @@ -2308,13 +2342,14 @@ } /** * 获取待装配任务分页的文件夹的包名称和任务类型 任务类型返回1 和 0(此处0为非1的数) + * @param orderByWashTime 是否根据清洗时间排序 目的是实现装配任务按超时顺序排序 * @param taskGroup 任务组 * @param basketBarcode 篮筐条码 * @param pageIndex 第几页 * @param pageSize 每页条数 * @return */ - public List getTousseNamesAndTaskType(String taskGroup, String basketBarcode, int pageIndex, int pageSize, Set queryTousseTypes, String tousseOrDepart, String recyclingAmountConfirmSql){ + public List getTousseNamesAndTaskType(boolean orderByWashTime, String taskGroup, String basketBarcode, int pageIndex, int pageSize, Set queryTousseTypes, String tousseOrDepart, String recyclingAmountConfirmSql){ String tousseTypeAndTaskGroupSql = ""; if(queryTousseTypes.contains(TousseDefinition.PACKAGE_TYPE_FOREIGN) && queryTousseTypes.contains(TousseDefinition.PACKAGE_TYPE_CUSTOM)){ tousseTypeAndTaskGroupSql = " and (td.tousseType in('"+ TousseDefinition.PACKAGE_TYPE_CUSTOM+ "','"+ TousseDefinition.PACKAGE_TYPE_FOREIGN +"','"+ TousseDefinition.PACKAGE_TYPE_FOREIGN +"') or td.ancestorID in(select tousseDefinitionId from CssdHandleTousses where taskGroup='"+ taskGroup +"' ) and td.tousseType not in('"+TousseDefinition.PACKAGE_TYPE_FOREIGN+"','"+TousseDefinition.PACKAGE_TYPE_SPLIT+"','"+TousseDefinition.PACKAGE_TYPE_CUSTOM+"')) "; //外来器械和自定义器械,有专门获取装配任务 @@ -2354,9 +2389,9 @@ boolean isSqlServer = dbConnection.isSqlServer(); String oracleOrderBysql = ""; if(isSqlServer){ - rowIdSql = " ROW_NUMBER() OVER(order by max(ui.expectUseTime) desc, max(ul.grade) desc, case when po.taskType=1 then 1 else 0 end desc, td.name desc) AS rowNo,"; + rowIdSql = " ROW_NUMBER() OVER(order by "+ (orderByWashTime?"DATEDIFF(MINUTE,washTime , getDate()) desc,":"") +"max(ui.expectUseTime) desc, max(ul.grade) desc, case when po.taskType=1 then 1 else 0 end desc, td.name desc) AS rowNo,"; }else{ - oracleOrderBysql = " order by max(ui.expectUseTime) desc, max(ul.grade) desc, case when po.taskType=1 then 1 else 0 end desc, td.name desc "; + oracleOrderBysql = " order by "+ (orderByWashTime?"DATEDIFF(MINUTE,washTime , getDate()) desc,":"") +"max(ui.expectUseTime) desc, max(ul.grade) desc, case when po.taskType=1 then 1 else 0 end desc, td.name desc "; } String sql = String.format("select " + rowIdSql + "td.name,case when po.taskType="+ PackingTask.TASK_RECYCLINGRECORD +" then 1 else 0 end type from %s po " + " join TousseDefinition td on td.id=po.tousseDefinition_id " @@ -2366,7 +2401,7 @@ + AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig() + "' " + recyclingAmountConfirmSql - + " and td.ancestorID in (select id from TousseDefinition where (hidePackingTask is null or hidePackingTask<>'是') and forDisplay=1) %s %s %s group by td.name,case when po.taskType=1 then 1 else 0 end " + + " and td.ancestorID in (select id from TousseDefinition where (hidePackingTask is null or hidePackingTask<>'是') and forDisplay=1) %s %s %s group by "+ (orderByWashTime?"po.washTime,":"") +"td.name,case when po.taskType=1 then 1 else 0 end " + oracleOrderBysql , PackingTask.class.getSimpleName() ,StringUtils.isBlank(basketBarcode)?"":" and po.basketBarcode like '%" + basketBarcode + "%' " Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/vo/WaitPackingTaskVo.java =================================================================== diff -u -r36080 -r37228 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/vo/WaitPackingTaskVo.java (.../WaitPackingTaskVo.java) (revision 36080) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/vo/WaitPackingTaskVo.java (.../WaitPackingTaskVo.java) (revision 37228) @@ -108,6 +108,10 @@ * 最大的预计使用时间 */ private String lastExpectUseTime = ""; + /** + * 最大的超时时间 + */ + private Long timeoutDuration = 0L; public String getTousseName() { return tousseName; } @@ -402,5 +406,13 @@ public void setLastExpectUseTime(String lastExpectUseTime) { this.lastExpectUseTime = lastExpectUseTime; } + + public Long getTimeoutDuration() { + return timeoutDuration; + } + + public void setTimeoutDuration(Long timeoutDuration) { + this.timeoutDuration = timeoutDuration; + } }