Index: ssts-operationmonitor/src/main/java/com/forgon/disinfectsystem/supplyroomcontrol/service/WdRoomControlHelper.java =================================================================== diff -u -r27824 -r27833 --- ssts-operationmonitor/src/main/java/com/forgon/disinfectsystem/supplyroomcontrol/service/WdRoomControlHelper.java (.../WdRoomControlHelper.java) (revision 27824) +++ ssts-operationmonitor/src/main/java/com/forgon/disinfectsystem/supplyroomcontrol/service/WdRoomControlHelper.java (.../WdRoomControlHelper.java) (revision 27833) @@ -64,44 +64,113 @@ }else{ whereSqlForOrgUnitCoding = ""; } + //如果科室条件不为空,则增加科室的过滤条件 + String leftJoinSql = ""; + String departSql = ""; + if(StringUtils.isNotBlank(supplyRoomVo.getDepartment())){ + leftJoinSql = " left join RecyclingRecord rr on ci.recyclingRecordId=rr.id "; + departSql = " and rr.depart='"+ supplyRoomVo.getDepartment() +"'"; + } String startDate = supplyRoomVo.getStartDate(); String endDate = supplyRoomVo.getEndDate(); String tousseName = supplyRoomVo.getTousseName(); String tousseType = supplyRoomVo.getTousseType(); String taskGroup = supplyRoomVo.getTaskGroup(); - String whereSql = "from WashAndDisinfectRecord wr " + String tousseNameSql = ""; + if (StringUtils.isNotBlank(tousseName)) { + if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(tousseType)) { + tousseNameSql = " and (ci.tousseNameForMaterial like '%" + tousseName + "%' or (td.tousseType = '" + TousseDefinition.PACKAGE_TYPE_DISINFECTION + "' and ci.name = '" + tousseName + "'))"; + }else { + tousseNameSql = " and td.name = '" + tousseName + "'"; + } + } + String taskGroupSql = ""; + if (StringUtils.isNotBlank(taskGroup) && !"全部".equals(taskGroup)) { + taskGroupSql = String.format(" and ci.toussedefinition_id in (select cht.tousseDefinitionId from CssdHandleTousses cht where cht.taskGroup = '%s' and cht.orgUnitCode = '%s')", taskGroup, AcegiHelper.getLoginUser().getCurrentOrgUnitCode()); + } + String typeSql = supplyRoomControlManagerImpl2.getGoodsTypeByComboTousseType(supplyRoomVo.getComboTousseType(),"tousseType", "td"); + if (StringUtils.isNotBlank(typeSql)){ + typeSql = " and " + typeSql; + }else{ + typeSql = ""; + } + String selectSql = "select wr.id as \"id\",ci.name as \"tousseName\",(ci.amount-case when numOfUnwashedStops is null then 0 else numOfUnwashedStops end) as \"amount\"," + + "wr.startDate as \"startDate\",wr.endDate as \"endDate\"," + + "wr.operator as \"operator\",wr.disinfectIdentification as \"disinfectIdentification\"," + + "wr.disinfectProgram as \"disinfectProgram\",cb.containerName as \"basketName\" "; + String whereSql = selectSql + " from WashAndDisinfectRecord wr " + " left join ClassifyBasket_WashRecord cw on wr.id = cw.WashAndDisinfectRecord_ID" + " left join ClassifyBasket cb on cb.id = cw.ClassifyBasket_ID" + " left join ClassifiedItem ci on cb.id = ci.classifybasket_id " + " left join RecyclingRecord rr on ci.recyclingRecordId=rr.id " + " left join TousseDefinition td on ci.tousseDefinitionID=td.id " - + " where 1=1 " + + " where ci.itemType = '材料' " + whereSqlForOrgUnitCoding + " and wr.washMaterialAmount <> 0 " + " and wr.endDate between " + dateQueryAdapter.dateAdapter(startDate) + " and " - + dateQueryAdapter.dateAdapter(endDate); - //如果科室条件不为空,则增加科室的过滤条件 - if(StringUtils.isNotBlank(supplyRoomVo.getDepartment())){ - whereSql = whereSql + " and rr.depart='"+ supplyRoomVo.getDepartment() +"'"; + + dateQueryAdapter.dateAdapter(endDate) + + departSql + + tousseNameSql + + taskGroupSql + + typeSql + + " union all " + + selectSql + + " from WashAndDisinfectRecord wr " + + " inner join ClassifyBasket_WashRecord cw on cw.WashAndDisinfectRecord_ID = wr.id " + + " inner join ClassifyBasket cb on cb.id = cw.ClassifyBasket_ID " + + " inner join ClassifiedItem ci on ci.classifybasket_id = cb.id " + + leftJoinSql + + " inner join TousseDefinition td on ci.toussedefinition_id = td.id " + + " where ci.tousseDefinitionID is null and ci.itemType = '材料' " + + whereSqlForOrgUnitCoding + + " and wr.washMaterialAmount <> 0 " + + " and wr.endDate between " + + dateQueryAdapter.dateAdapter(startDate) + + " and " + + dateQueryAdapter.dateAdapter(endDate) + + departSql + + tousseNameSql + + taskGroupSql + + typeSql; + selectSql = " union all select wr.id as \"id\",ci.name as \"tousseName\",(ci.amount-case when numOfUnwashedStops is null then 0 else numOfUnwashedStops end)*ci.materialAmount as \"amount\"," + + "wr.startDate as \"startDate\",wr.endDate as \"endDate\"," + + "wr.operator as \"operator\",wr.disinfectIdentification as \"disinfectIdentification\"," + + "wr.disinfectProgram as \"disinfectProgram\",cb.containerName as \"basketName\" "; + whereSql += selectSql + + " from WashAndDisinfectRecord wr " + + " inner join ClassifyBasket_WashRecord cw on cw.WashAndDisinfectRecord_ID = wr.id " + + " inner join ClassifyBasket cb on cb.id = cw.ClassifyBasket_ID " + + " inner join ClassifiedItem ci on ci.classifybasket_id = cb.id " + + " inner join TousseDefinition td on td.id = ci.toussedefinition_id " + + leftJoinSql + + " where ci.itemType <> '材料' " + + whereSqlForOrgUnitCoding + + " and wr.washMaterialAmount <> 0 " + + " and wr.endDate between " + + dateQueryAdapter.dateAdapter(startDate) + + " and " + + dateQueryAdapter.dateAdapter(endDate) + + departSql + + tousseNameSql + + taskGroupSql + + typeSql; + if(StringUtils.isBlank(typeSql) && StringUtils.isBlank(departSql) && StringUtils.isBlank(taskGroupSql) && StringUtils.isBlank(typeSql)){ + selectSql = "select wr.id as \"id\",md.name as \"tousseName\",wrm.amount as \"amount\"," + + "wr.startDate as \"startDate\",wr.endDate as \"endDate\"," + + "wr.operator as \"operator\",wr.disinfectIdentification as \"disinfectIdentification\"," + + "wr.disinfectProgram as \"disinfectProgram\",'' as \"basketName\" "; + whereSql += " union all " + + selectSql + + " from WashAndDisinfectRecord wr, WashRecord_WashMaterial wm,WashAndDisinfectRecordMaterial wrm,MaterialDefinition md, OrgUnit org " + + " where wm.WashAndDisinfectRecord_ID = wr.id and wrm.id = wm.WashAndDisinfectMaterial_ID and wrm.materialDefinition_id = md.id and org.orgUnitCoding = wr.orgUnitCoding " + + whereSqlForOrgUnitCoding + + " and wr.endDate between " + + dateQueryAdapter.dateAdapter(startDate) + + " and " + + dateQueryAdapter.dateAdapter(endDate); } - - if (StringUtils.isNotBlank(tousseName)) { - if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(tousseType)) { - whereSql += " and (ci.tousseNameForMaterial like '%" + tousseName + "%' or (td.tousseType = '" + TousseDefinition.PACKAGE_TYPE_DISINFECTION + "' and ci.name = '" + tousseName + "'))"; - } - else { - whereSql += " and td.name = '" + tousseName + "'"; - } - } - if (StringUtils.isNotBlank(taskGroup) && !"全部".equals(taskGroup)) { - whereSql += String.format(" and ci.toussedefinition_id in (select cht.tousseDefinitionId from CssdHandleTousses cht where cht.taskGroup = '%s' and cht.orgUnitCode = '%s')", taskGroup, AcegiHelper.getLoginUser().getCurrentOrgUnitCode()); - } - String typeSql = supplyRoomControlManagerImpl2.getGoodsTypeByComboTousseType(supplyRoomVo.getComboTousseType(),"tousseType", "td"); - if (StringUtils.isNotBlank(typeSql)){ - whereSql += String.format(" and %s", typeSql); - } return whereSql; } Index: ssts-operationmonitor/src/main/java/com/forgon/disinfectsystem/supplyroomcontrol/service/SupplyRoomControlManagerImpl2.java =================================================================== diff -u -r27331 -r27833 --- ssts-operationmonitor/src/main/java/com/forgon/disinfectsystem/supplyroomcontrol/service/SupplyRoomControlManagerImpl2.java (.../SupplyRoomControlManagerImpl2.java) (revision 27331) +++ ssts-operationmonitor/src/main/java/com/forgon/disinfectsystem/supplyroomcontrol/service/SupplyRoomControlManagerImpl2.java (.../SupplyRoomControlManagerImpl2.java) (revision 27833) @@ -96,11 +96,11 @@ @Override public Map getWashDisinfectionList(SupplyRoomVo supplyRoomVo) { try { - String selectSql = wdRoomControlHelper.buildSelectSql(supplyRoomVo); - String whereSql = wdRoomControlHelper.buildWhereSql(supplyRoomVo); - String countSql = "select count(*),sum(ci.amount-case when numOfUnwashedStops is null then 0 else numOfUnwashedStops end),1 "; - countSql += whereSql; - selectSql += whereSql + " order by wr.endDate desc"; + String selectSql = wdRoomControlHelper.buildWhereSql(supplyRoomVo); + String countSql = "select count(*),sum(amount),1 from (" + + selectSql + + ")countTemp "; + selectSql = " select * from (" + selectSql + ")temp order by endDate desc"; logger.debug("[sql]:" + selectSql); return this.getResult(wdRoomControlHelper, selectSql, countSql); }