Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r25256 -r25269 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 25256) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 25269) @@ -10507,45 +10507,46 @@ if(beanList == null){ return ; } -// String sql = "select (temp.m1) as material1,(temp.m2) as material2,(temp.m3) as material3," -// +"(temp.m4) as material4,(temp.m5) as material5,(temp.m6) as material6,(temp2.amount) as material7," -// +"case when temp.m5<>0 then temp2.amount/temp.m6 else 0 end as material8 from " -// +"(" -// +"select sum(w.generalmaterialamount)as m1,sum(w.operatematerialamount) as m2,sum(w.foreignmaterialamount)as m3," -// +"sum(w.disinfectMaterialAmount) as m4,sum(w.secondWashForeignAmount) as m5," -// +"sum(w.washMaterialAmount) as m6 " -// +"from washanddisinfectrecord w where w.enddate between "+dateQueryAdapter.dateConverAdapter2(statDate,"yyyy-mm-dd") -// +" and "+dateQueryAdapter.dateConverAdapter2(endDate,"yyyy-mm-dd") -// +" and w.orgUnitCoding = '"+querySupplyRoom+"'" -// +")temp," -// +"(" -// +" select sum(qmd.amount)as amount from QualityMonitoringInstance qi ,FormInstance fi,FormDefinition fd," -// + " QualityMonitoringDefinition qd,QualityMonitoringGoods qmd " -// + " where qi.id = fi.id and fi.formDefinition_id = fd.id and fd.id = qd.id " -// + " and qi.id=qmd.qualityMonitoringInstance_id " -// + " and fd.formName like '%器械清洗不合格%' and fd.formType = '质量监测'" -// +" and qi.datetime between "+dateQueryAdapter.dateConverAdapter2(statDate,"yyyy-mm-dd") -// +" and "+dateQueryAdapter.dateConverAdapter2(endDate,"yyyy-mm-dd") -// +" and fi.orgUnitCoding = '"+querySupplyRoom+"'" -// +")temp2"; - String sql = " select t1.type,t1.orgUnitName,t1.isSencondWashForForeignTousse,sum(t1.amount) from ( select i.itemType type,i.orgUnitName orgUnitName,i.isSencondWashForForeignTousse isSencondWashForForeignTousse,(sum(i.amount*ms.count)) amount" - + " from washanddisinfectrecord r,ClassifyBasket_WashRecord cw,ClassifyBasket b,ClassifiedItem i,TousseDefinition t, " - + " materialinstance ms,materialdefinition m where r.id = cw.washanddisinfectrecord_id " - + " and cw.classifybasket_id = b.id and b.id = i.classifybasket_id and i.toussedefinition_id = t.id and t.id = ms.tousse_id " - + " and ms.materialdefinition_id = m.id and i.itemType in ('"+ ClassifiedItem.TYPE_TOUSSE +"','"+ ClassifiedItem.TYPE_DISINFECTION_GOODS +"','"+ ClassifiedItem.TYPE_FOREIGN_TOUSSE +"','"+ ClassifiedItem.TYPE_CUSTOM_TOUSSE +"')" - + "and r.enddate between " +dateQueryAdapter.dateConverAdapter2(statDate,"yyyy-mm-dd") - + " and " + dateQueryAdapter.dateConverAdapter2(endDate,"yyyy-mm-dd") - + SqlUtils.get_InSql_Extra("r.orgUnitCoding", querySupplyRoom) - + " group by i.itemType,i.orgUnitName,i.isSencondWashForForeignTousse " - + " union all " - + " select td.tousseType type,i.orgUnitName orgUnitName,i.isSencondWashForForeignTousse isSencondWashForForeignTousse,sum(i.amount) amount from washanddisinfectrecord r ,ClassifyBasket_WashRecord cw ,ClassifyBasket b," - + " ClassifiedItem i,materialdefinition m,TousseDefinition td where r.id = cw.washanddisinfectrecord_id and cw.classifybasket_id = b.id" - + " and i.tousseDefinitionID=td.id" - + " and b.id = i.classifybasket_id and i.materialdefinition_id = m.id and r.enddate between " +dateQueryAdapter.dateConverAdapter2(statDate,"yyyy-mm-dd") - + " and " +dateQueryAdapter.dateConverAdapter2(endDate,"yyyy-mm-dd") - + SqlUtils.get_InSql_Extra("r.orgUnitCoding", querySupplyRoom) - + " group by td.tousseType,i.orgUnitName,i.isSencondWashForForeignTousse) t1" - + " group by t1.type,t1.orgUnitName,t1.isSencondWashForForeignTousse"; + String betweenSql = String.format(" between %s and %s ", + dateQueryAdapter.dateConverAdapter2(statDate, "yyyy-mm-dd"), + dateQueryAdapter.dateConverAdapter2(endDate, "yyyy-mm-dd")); + + ReportQueryParams params = new ReportQueryParams(); + params.betweenSql = betweenSql; + params.querySupplyRoom = querySupplyRoom; + + // 统计清洗项的itemType为材料的物品,包括拆包清洗的器械包以及外来器械包 + String sql = String + .format("select ci.itemType type,ci.orgUnitName,ci.isSencondWashForForeignTousse ,sum(ci.amount) amount " + + dataIndex.getWashMaterialAmountSqlFromItemTypeIsMaterial() + + " and wr.endDate %s and wr.washMaterialAmount <> 0 %s group by ci.itemType,ci.orgUnitName,ci.isSencondWashForForeignTousse ", + params.betweenSql, + SqlUtils.get_InSql_Extra("wr.orgUnitCoding", params.querySupplyRoom)); + + // 统计清洗项的itemType不为材料的物品,包括整包清洗的器械包 + sql += " union all "; + sql += String + .format("select ci.itemType type,ci.orgUnitName,ci.isSencondWashForForeignTousse ,sum(ci.amount*mi.count) amount " + + dataIndex.getWashMaterialAmountSqlFromItemTypeIsNotMaterial() + + " and wr.endDate %s and wr.washMaterialAmount <> 0 %s group by ci.itemType,ci.orgUnitName,ci.isSencondWashForForeignTousse ", + params.betweenSql, + SqlUtils.get_InSql_Extra("wr.orgUnitCoding", params.querySupplyRoom)); + + // 判断是否需要统计单独清洗的材料的数量 + // 由于要查找清洗记录所属的科室的名称,所以连接了orgUnit表进行查询,没有调用DataIndex服务类的getWashMaterialAmountSqlFromTousseTypeIsMaterial方法 + sql += " union all "; + sql += String + .format("select md.type,org.name orgUnitName,0 isSencondWashForForeignTousse ,sum(wrm.amount) amount " + + "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 " + + "and wr.endDate %s %s group by md.type,org.name ", + params.betweenSql, SqlUtils.get_InSql_Extra( + "wr.orgUnitCoding", params.querySupplyRoom)); + sql = " select rs.type,rs.orgUnitName,rs.isSencondWashForForeignTousse,sum(rs.amount) from (" + + sql + + ")rs " + + " group by rs.type,rs.orgUnitName,rs.isSencondWashForForeignTousse"; + Map amountMap = getWashWorkloadAmountMap(sql); // 质量监测不合格数量 String unQualitySql = " select sum(qmd.amount)as amount from QualityMonitoringInstance qi ,FormInstance fi,FormDefinition fd," Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/DataIndex.java =================================================================== diff -u -r25256 -r25269 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/DataIndex.java (.../DataIndex.java) (revision 25256) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/DataIndex.java (.../DataIndex.java) (revision 25269) @@ -157,7 +157,7 @@ * 查询材料清洗数量的sql,统计itemType是材料的类型 * @return */ - private static String getWashMaterialAmountSqlFromItemTypeIsMaterial(){ + public static String getWashMaterialAmountSqlFromItemTypeIsMaterial(){ String sql = "from WashAndDisinfectRecord wr,ClassifyBasket_WashRecord cw,ClassifyBasket cb,ClassifiedItem ci,TousseDefinition td " + "where cw.WashAndDisinfectRecord_ID = wr.id and cb.id = cw.ClassifyBasket_ID and ci.classifybasket_id = cb.id and td.id=ci.tousseDefinitionID " + "and ci.itemType = '材料'"; @@ -168,7 +168,7 @@ * 查询材料清洗数量的sql,统计itemType为不是材料的类型 * @return */ - private static String getWashMaterialAmountSqlFromItemTypeIsNotMaterial(){ + public static String getWashMaterialAmountSqlFromItemTypeIsNotMaterial(){ String sql = "from WashAndDisinfectRecord wr,ClassifyBasket_WashRecord cw,ClassifyBasket cb,ClassifiedItem ci,TousseDefinition td,MaterialInstance mi " + "where cw.WashAndDisinfectRecord_ID = wr.id and cb.id = cw.ClassifyBasket_ID and ci.classifybasket_id = cb.id and td.id = ci.toussedefinition_id and mi.tousse_id = td.id " + "and ci.itemType <> '材料'"; @@ -179,7 +179,7 @@ * 查询单独登记的材料的清洗数量的sql,器械包类型为材料 * @return */ - private static String getWashMaterialAmountSqlFromTousseTypeIsMaterial(){ + public static String getWashMaterialAmountSqlFromTousseTypeIsMaterial(){ String sql = "from WashAndDisinfectRecord wr, WashRecord_WashMaterial wm,WashAndDisinfectRecordMaterial wrm,MaterialDefinition md " + "where wm.WashAndDisinfectRecord_ID = wr.id and wrm.id = wm.WashAndDisinfectMaterial_ID and wrm.materialDefinition_id = md.id "; return sql;