Index: forgon-tools/src/main/java/com/forgon/tools/MathTools.java =================================================================== diff -u -r35857 -r36624 --- forgon-tools/src/main/java/com/forgon/tools/MathTools.java (.../MathTools.java) (revision 35857) +++ forgon-tools/src/main/java/com/forgon/tools/MathTools.java (.../MathTools.java) (revision 36624) @@ -63,6 +63,8 @@ public static String divideStr(int a, int b, int newScale) { if(a == 0){ return "0.0%"; + }else if(b == 0){ + return "0.0%"; } double value = new BigDecimal(a*100) .divide(new BigDecimal(b), newScale, BigDecimal.ROUND_HALF_UP).doubleValue(); Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/NurseWorkloadReportHelper.java =================================================================== diff -u -r35978 -r36624 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/NurseWorkloadReportHelper.java (.../NurseWorkloadReportHelper.java) (revision 35978) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/NurseWorkloadReportHelper.java (.../NurseWorkloadReportHelper.java) (revision 36624) @@ -4,14 +4,20 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; + import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; + import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.entity.basedatamanager.reportoption.GoodsOption; +import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; import com.forgon.disinfectsystem.jasperreports.javabeansource.NurseWorkloadBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.SupplyRoomQualityQuota; @@ -20,6 +26,7 @@ import com.forgon.tools.MathTools; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.util.SqlUtils; /** * 护理工作质量指标报表 */ @@ -33,6 +40,8 @@ private DateQueryAdapter dateQueryAdapter; @Autowired private DataIndex dataIndex; + @Autowired + private FormDefinitionHelper formDefinitionHelper; /** * 获取护理工作质量指标报表的数据 * @param params @@ -48,9 +57,7 @@ String startDay = year + "-01-01 00:00:00"; String endDay = DataIndex.getNextYear(year) + " 00:00:00"; - List months = getMonthList(year); - List departs = supplyRoomConfigManager.getSupplyRoomNameList(); - + ReportQueryParams reportParams = new ReportQueryParams(objectDao); reportParams.betweenSql = String.format(" between %s and %s ", dateQueryAdapter.dateAdapter(startDay), @@ -75,21 +82,28 @@ // select ti.Sterilizationrecord_Id from tousseinstance ti,sterilizationrecord sr where ti.sterilizationrecord_id=sr.id - - reportParams.extraSelectColumns = ",src.orgUnitName "; - reportParams.extraJoinCondition = " inner join SupplyRoomConfig src on wr.orgUnitCoding = src.orgUnitCoding "; - reportParams.extraQuery = " and (src.supplyroomtype = 1 or src.supplyroomtype = 2) "; - reportParams.extraGroupBy = " ,src.orgUnitName "; + List months = getMonthList(year); + Set departs = new HashSet(); + Set departCodings = new HashSet(); + setSupplyRoomConfigInfo(departs, departCodings); + String departCodingSql = SqlUtils.getInStringListSql("src.orgUnitCoding", departCodings); + reportParams.extraSelectColumns = ",src.name "; + reportParams.extraJoinCondition = " inner join OrgUnit src on wr.orgUnitCoding = src.orgUnitCoding "; + reportParams.extraQuery = departCodingSql; + reportParams.extraGroupBy = " ,src.name "; reportParams.monthlyStr = dateQueryAdapter.dateToVarchar2("wr.enddate"); int dataSoureOfMaterialsCountOfToussesInReports = CssdUtils.getSystemSetConfigByNameInt("dataSoureOfMaterialsCountOfToussesInReports", 3); String washTotalSql = dataIndex.getWorkAmountByMaterialSQL("清洗数量", reportParams,dataSoureOfMaterialsCountOfToussesInReports); Map washTotalMap = getAmountMapBySql(washTotalSql); reportParams.monthlyStr = dateQueryAdapter.dateToVarchar2("qi.dateTime"); - reportParams.extraJoinCondition = " inner join SupplyRoomConfig src on fi.orgUnitCoding = src.orgUnitCoding "; - String qualityMonitoringSql = DataIndex.getQualityMonitorAmountSQL("器械清洗不合格的数量", - reportParams); + reportParams.extraSelectColumns = ",fi.orgUnit "; + reportParams.extraJoinCondition = ""; + reportParams.extraGroupBy = " ,fi.orgUnit "; + String[] washSumUnqualifiedSource = formDefinitionHelper.getModelSources(GoodsOption.MODEL_WASHUNQUALIFIEDSOURCE, null); + String qualityMonitoringSql = DataIndex.getQMAmountSqlByFormNames(washSumUnqualifiedSource, reportParams, true); + // 清洗不合格的map,和清洗总数的map Map washUQMap = getAmountMapBySql(qualityMonitoringSql); @@ -108,24 +122,24 @@ Map packingTotalMap = getAmountMapBySql(packingTotalSql); reportParams.monthlyStr = dateQueryAdapter.dateToVarchar2("qi.dateTime"); - reportParams.extraSelectColumns = ",src.orgUnitName"; - reportParams.extraQuery = " and (src.supplyroomtype = 1 or src.supplyroomtype = 2) "; - reportParams.extraJoinCondition = " inner join SupplyRoomConfig src on src.orgUnitCoding = qmdf.handleDepartCoding "; - reportParams.extraGroupBy = ",src.orgUnitName"; + reportParams.extraSelectColumns = ",src.name "; + reportParams.extraQuery = departCodingSql; + reportParams.extraJoinCondition = " inner join OrgUnit src on src.orgUnitCoding = qmdf.handleDepartCoding "; + reportParams.extraGroupBy = ",src.name "; String packingUQSql = DataIndex.getUnQualifiedMonitorAmountSql("装配管理", "", reportParams); // 包装不合格的map,包装总数的map Map packingUQMap = getAmountMapBySql(packingUQSql); - String wetPackUQSql = "select " + qmDataSql +" dataStr,sum(qmd.amount) count,src.orgUnitName " + String wetPackUQSql = "select " + qmDataSql +" dataStr,sum(qmd.amount) count,fi.orgUnit " + " from QualityMonitoringInstance qmi,FormInstance fi,FormDefinition fd,QualityMonitoringDefinition qmdf , " - + " SupplyRoomConfig src,QualityMonitoringGoods qmd " - + " where qmdf.id=fd.id and qmi.id=fi.id and fd.id = fi.formDefinition_id and (src.supplyroomtype = 1 or src.supplyroomtype = 2) " - + " and src.orgUnitCoding = qmdf.handleDepartCoding and qmi.id=qmd.qualityMonitoringInstance_id " + + " QualityMonitoringGoods qmd " + + " where qmdf.id=fd.id and qmi.id=fi.id and fd.id = fi.formDefinition_id " + + " and qmi.id=qmd.qualityMonitoringInstance_id " + " and ( fd.formName = '" + "湿包"+"' )" + " and qmi.dateTime between " + dateQueryAdapter.dateAdapter(startDay) + "and "+dateQueryAdapter.dateAdapter(endDay) - + " group by " + qmDataSql + " ,src.orgUnitName "; + + " group by " + qmDataSql + " ,fi.orgUnit "; // 湿包数量的map,包总数的map跟灭菌总数的一样 Map wetPackUQMap = getAmountMapBySql(wetPackUQSql); // beanList @@ -250,6 +264,30 @@ return beanList; } /** + * 查询供应室的名称和编码 + * @param departs 名称 + * @param departCodings 编码 + */ + private void setSupplyRoomConfigInfo(Set departs, Set departCodings){ + StringBuffer sbf = new StringBuffer(); + sbf.append("select orgUnitName,orgUnitCoding from "); + sbf.append(SupplyRoomConfig.class.getSimpleName()); + sbf.append(" where supplyroomtype in(1,2)"); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sbf.toString()); + while (rs.next()) { + departs.add(rs.getString("orgUnitName")); + departCodings.add(rs.getString("orgUnitCoding")); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + } + /** * 通过年,获取一年中每个月的显示,时间返回格式为"2017-02" * @param year * @return Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/dataindex/DataIndex.java =================================================================== diff -u -r35794 -r36624 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/dataindex/DataIndex.java (.../DataIndex.java) (revision 35794) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/dataindex/DataIndex.java (.../DataIndex.java) (revision 36624) @@ -2388,7 +2388,9 @@ tousseSql = " and " + (tousse ? " qmd.tousseName is not null " : " (qmd.tousseName is null or qmd.tousseName='') "); } String sql = "select " + groupByToken - + "sum(qmd.amount) as amount from QualityMonitoringInstance qi ,FormInstance fi,FormDefinition fd,QualityMonitoringDefinition qmdf ,QualityMonitoringGoods qmd " + + "sum(qmd.amount) as amount " + + obj.extraSelectColumns + +" from QualityMonitoringInstance qi ,FormInstance fi,FormDefinition fd,QualityMonitoringDefinition qmdf ,QualityMonitoringGoods qmd " + "where qmdf.id=fd.id and qi.id = fi.id and fi.formDefinition_id = fd.id and qi.id=qmd.qualityMonitoringInstance_id " + SqlUtils.get_LikeSql("fd.formName", formNames) + "and qi.datetime " + obj.betweenSql @@ -2397,7 +2399,7 @@ + "and fd.formType = '质量监测' " + filterMaterialIsNullSql; if (StringUtils.isNotBlank(obj.monthlyStr)){ - sql += " group by " + obj.monthlyStr; + sql += " group by " + obj.monthlyStr + obj.extraGroupBy; } return sql; }