Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r40808 -r40834 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 40808) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 40834) @@ -1453,11 +1453,12 @@ + "(select max(s.sterilizationMode) from Sterilisation s where s.sterilisation= tdancestor.sterilingMethod) " + "else ti.sterilingMode end)='" + sterilingMode + "' "; } + Set taskGroupArr = SqlUtils.splitStringToSet(taskGroups, Constants.IDS_SEPARATOR); return "select sum(amount) from ((select count(0) amount from " + "TousseInstance ti join toussedefinition td on ti.tousseDefinition_id=td.id " + "join toussedefinition tdancestor on td.ancestorID=tdancestor.id where ti.comboTousseInstanceId is null " + sterilingModeSql - + (StringUtils.isNotBlank(taskGroups)?SqlUtils.getInStringListSql("tdancestor.taskGroup", SqlUtils.splitStringToSet(taskGroups, Constants.IDS_SEPARATOR)):"") + + getTaskGroupWhereSql(taskGroupArr, orgUnitCode) + "and tdancestor.isTraceable='是' "+keyWordSearchSql+" and ti.status='"+TousseInstance.STATUS_REVIEWED+"' and ti.comboTousseInstanceId is null "+departSearchSql+" and ti.reviewBasket_id is null and " + "((ti.proxyDisinfection_id is null and ti.orgUnitCoding='"+orgUnitCode+"') " + "or ( exists (select 1 from InvoicePlan ip where ti.proxyDisinfection_id=ip.id and ip.handleDepartCoding='"+orgUnitCode+"')))) " @@ -1469,12 +1470,33 @@ +keyWordSearchSql +" and ti.status='"+TousseInstance.STATUS_REVIEWED+"' and ti.comboTousseInstanceId is null "+departSearchSql+" and ti.reviewBasket_id is null " + sterilingModeAncestorSql - + (StringUtils.isNotBlank(taskGroups)?SqlUtils.getInStringListSql("tdancestor.taskGroup", SqlUtils.splitStringToSet(taskGroups, Constants.IDS_SEPARATOR)):"") + + getTaskGroupWhereSql(taskGroupArr, orgUnitCode) + "and ((ti.proxyDisinfection_id is null and ti.orgUnitCoding='"+orgUnitCode+"')" + " or ( exists (select 1 from InvoicePlan ip where ti.proxyDisinfection_id=ip.id and ip.handleDepartCoding='"+orgUnitCode+"')))group by tdancestor.id)) t"; } - /** + * 获取任务组的过滤 + * 自定义器械包 外来器械拆分小包 外来器械包 使用包定义的任务组过滤 + * 自定义器械包 外来器械包的任务组是科室配置中配置的 其中 外来器械包是可以不同供应室配置不同的任务组 但产生包定义时,会把这个配置的值赋值给包定义 + * 其他类型的包 使用CssdHandleTousses配置的任务组过滤 + * @param taskGroups 任务组 ;分割 + * @param orgUnitCode 处理科室 同一个包定义 不同处理科室可以配置不同任务组 + * @return 任务组的过滤语句 + */ + private String getTaskGroupWhereSql(Set taskGroups, String orgUnitCode) { + if (CollectionUtils.isEmpty(taskGroups) || StringUtils.isBlank(orgUnitCode)) { + return StringUtils.EMPTY; + } + return " AND ((td.tousseType IN ('自定义器械包', '外来器械包', '外来器械拆分小包') " + + SqlUtils.getInStringListSql("td.taskGroup", taskGroups)+ + ") OR EXISTS (SELECT 1 FROM "+ + CssdHandleTousses.class.getSimpleName() + + " cst WHERE cst.orgUnitCode = '"+ + orgUnitCode +"' " + + SqlUtils.getInStringListSql("cst.taskGroup", taskGroups)+ + " AND cst.tousseDefinitionId = td.ancestorID)) "; + } + /** * 获取统计待灭菌装载器械包信息的sql(Oracle) * @param orgUnitCode 当前登陆科室 * @return @@ -1495,11 +1517,12 @@ }else{ joinsterilingModeSql = ""; } + Set taskGroupArr = SqlUtils.splitStringToSet(taskGroups, Constants.IDS_SEPARATOR); return "select sum(amount) from ((select count(0) amount from TousseInstance ti " + "join toussedefinition td on ti.tousseDefinition_id=td.id " + "join toussedefinition tdancestor on td.ancestorID=tdancestor.id where ti.comboTousseInstanceId is null " + sterilingModeSql - + (StringUtils.isNotBlank(taskGroups)?SqlUtils.getInStringListSql("tdancestor.taskGroup", SqlUtils.splitStringToSet(taskGroups, Constants.IDS_SEPARATOR)):"") + + getTaskGroupWhereSql(taskGroupArr, orgUnitCode) + " and tdancestor.isTraceable='是' "+keyWordSearchSql+" and ti.status='"+TousseInstance.STATUS_REVIEWED+"' and ti.comboTousseInstanceId is null "+departSearchSql+" and ti.reviewBasket_id is null " + "and ((ti.proxyDisinfection_id is null and ti.orgUnitCoding='"+orgUnitCode+"') or (ti.proxyDisinfection_id " + "is not null and exists (select 1 from InvoicePlan ip " @@ -1514,7 +1537,7 @@ + " where 1=1 and ti.comboTousseInstanceId is null and " + "tdancestor.isTraceable='否'"+keyWordSearchSql+" and ti.status='"+TousseInstance.STATUS_REVIEWED+"' and ti.comboTousseInstanceId is null "+departSearchSql+" and ti.reviewBasket_id is null " + sterilingModeAncestorSql - + (StringUtils.isNotBlank(taskGroups)?SqlUtils.getInStringListSql("tdancestor.taskGroup", SqlUtils.splitStringToSet(taskGroups, Constants.IDS_SEPARATOR)):"") + + getTaskGroupWhereSql(taskGroupArr, orgUnitCode) + "and ((ti.proxyDisinfection_id is null and ti.orgUnitCoding='"+orgUnitCode+"') or " + "( exists " + "(select 1 from InvoicePlan ip where ti.proxyDisinfection_id=ip.id and ip.handleDepartCoding='"+orgUnitCode+"'))" @@ -1546,7 +1569,7 @@ sterilingModeSql = " and ti.sterilingMode = '" + sterilingMode + "' "; sterilingModeAncestorSql = " and s.sterilizationMode='" + sterilingMode + "' "; } - + Set taskGroupArr = SqlUtils.splitStringToSet(taskGroups, Constants.IDS_SEPARATOR); return "select v1.* from (select rownum rn, v.* from ((select '是' isTraceable,tdancestor.id tdAncestorId,ti.id, ou.name depart,ti.tousseName," + "b.barcode,ti.reviewTime, ti.sterilingMode,1 amount " + urgentLevel_SelectSql @@ -1556,7 +1579,7 @@ +urgentLevel_JoinSql + " where ti.comboTousseInstanceId is null and tdancestor.isTraceable='是' "+keyWordSearchSql+" " + sterilingModeSql - + (StringUtils.isNotBlank(taskGroups)?SqlUtils.getInStringListSql("tdancestor.taskGroup", SqlUtils.splitStringToSet(taskGroups, Constants.IDS_SEPARATOR)):"") + + getTaskGroupWhereSql(taskGroupArr, orgUnitCoding) + "and ti.status='"+TousseInstance.STATUS_REVIEWED+"' and ti.comboTousseInstanceId is null "+departSearchSql+" and ti.reviewBasket_id is null and ((ti.proxyDisinfection_id is null and ti.orgUnitCoding='"+orgUnitCoding+"') " + "or ( exists " + "(select 1 from InvoicePlan ip where ti.proxyDisinfection_id=ip.id and ip.handleDepartCoding='"+orgUnitCoding+"')) ) ) " @@ -1572,7 +1595,7 @@ + "left join Sterilisation s on s.sterilisation = tdancestor.sterilingMethod " + " where 1=1 and ti.comboTousseInstanceId is null and tdancestor.isTraceable='否' "+keyWordSearchSql+" " + sterilingModeAncestorSql - + (StringUtils.isNotBlank(taskGroups)?SqlUtils.getInStringListSql("tdancestor.taskGroup", SqlUtils.splitStringToSet(taskGroups, Constants.IDS_SEPARATOR)):"") + + getTaskGroupWhereSql(taskGroupArr, orgUnitCoding) + "and ti.status='"+TousseInstance.STATUS_REVIEWED+"' and ti.comboTousseInstanceId is null "+departSearchSql+" and ti.reviewBasket_id is null and ((ti.proxyDisinfection_id is null and ti.orgUnitCoding='"+orgUnitCoding+"') " + "or (exists " + "(select 1 from InvoicePlan ip where ti.proxyDisinfection_id=ip.id and ip.handleDepartCoding='"+orgUnitCoding+"')))group by tdancestor.id,tdancestor.name,s.sterilizationMode) " + orderSql + " ) " @@ -1614,6 +1637,7 @@ sterilingModeSql = " and ti.sterilingMode = '" + sterilingMode + "' "; sterilingModeAncestorSql = " and s.sterilizationMode='" + sterilingMode + "' "; } + Set taskGroupArr = SqlUtils.splitStringToSet(taskGroups, Constants.IDS_SEPARATOR); return "select * from (select ROW_NUMBER() OVER ("+ orderSql+") rowNum,isTraceable,tdAncestorId,id,depart,tousseName,barcode,reviewTime,sterilingMode,amount,isUrgentTousse" + (enableUrgentFunction?",ulId,ulGrade,ulName,ulColorCode ":"") + " from " @@ -1626,7 +1650,7 @@ + " where tdancestor.isTraceable='是' "+keyWordSearchSql+" and " + "ti.status='"+TousseInstance.STATUS_REVIEWED+"' and ti.comboTousseInstanceId is null "+departSearchSql+" and ti.reviewBasket_id is null " + sterilingModeSql - + (StringUtils.isNotBlank(taskGroups)?SqlUtils.getInStringListSql("tdancestor.taskGroup", SqlUtils.splitStringToSet(taskGroups, Constants.IDS_SEPARATOR)):"") + + getTaskGroupWhereSql(taskGroupArr, orgUnitCoding) + "and ((ti.proxyDisinfection_id is null and ti.orgUnitCoding='"+orgUnitCoding+"') " + "or ( exists (select 1 from InvoicePlan ip where ti.proxyDisinfection_id=ip.id and ip.handleDepartCoding='"+orgUnitCoding+"'))))" @@ -1642,7 +1666,7 @@ + " left join Sterilisation s on s.sterilisation = tdancestor.sterilingMethod " + " where 1=1 and tdancestor.isTraceable='否' "+keyWordSearchSql+" " + sterilingModeAncestorSql - + (StringUtils.isNotBlank(taskGroups)?SqlUtils.getInStringListSql("tdancestor.taskGroup", SqlUtils.splitStringToSet(taskGroups, Constants.IDS_SEPARATOR)):"") + + getTaskGroupWhereSql(taskGroupArr, orgUnitCoding) + "and ti.status='"+TousseInstance.STATUS_REVIEWED+"' and ti.comboTousseInstanceId is null "+departSearchSql+" and ti.reviewBasket_id is null " + "and (ti.proxyDisinfection_id is null and ti.orgunitcoding='"+orgUnitCoding+"' " + "or exists "