Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r33805 -r33808 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 33805) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 33808) @@ -22231,50 +22231,48 @@ * @param queryScope 查询的精度(月/天) * @return */ - private Map getSterileArticles(String departmentCode, String date, String queryScope, String startTime, String endTime, List firstDayToLastDay) { + private Map getSterileArticles(ReportQueryParams reportParams, String departmentCode, String date, String queryScope, String startTime, String endTime, List firstDayToLastDay) { Map map = new HashMap(); if (StringTools.isNotBlank(departmentCode) && (StringTools.isNotBlank(date) || StringTools.isNotBlank(startTime) && StringTools.isNotBlank(endTime))) { - String srEndDateSql = ""; String reviewTimeSql = ""; + String format = null; if (SupplyRoomQualityQuota.DAY.endsWith(queryScope)) { startTime = startTime + " 00:00:00"; endTime = endTime + " 23:59:59"; - srEndDateSql = dateQueryAdapter.dateConverAdapter("sr.endDate", null); + if(dbConnection.isOracle()){ + format = "yyyy-MM-dd"; + }else{ + format = "dd"; + } + reportParams.monthlyStr = dateQueryAdapter.dateConverAdapter(dateQueryAdapter.stringFieldToDate("ti.sterileEndTime"),format); reviewTimeSql = dateQueryAdapter.dateConverAdapter("case when ti.reviewTime is not null then ti.reviewTime else ti.operationTime end", null); } else { - srEndDateSql = dateQueryAdapter.dateConverAdapter3("sr.endDate", "mm"); + format = "mm"; + reportParams.monthlyStr = dateQueryAdapter.dateConverAdapter3(dateQueryAdapter.stringFieldToDate("ti.sterileEndTime"),format); reviewTimeSql = dateQueryAdapter.dateConverAdapter3("case when ti.reviewTime is not null then ti.reviewTime else ti.operationTime end", "mm"); startTime = date + "-01-01 00:00:00"; endTime = DataIndex.getNextYear(date) + " 00:00:00"; } - - String sql = String.format("select temp.dateTime dateTime,count(*) amount from(" - + "select %s dateTime " - + "from SterilizationRecord sr join sterilization_tousseInstance st on st.sterilizationRecord_id=sr.id " - + "join TousseInstance ti on ti.id=st.tousseInstance_id " - + "where sr.status<>'%s' and sr.orgUnitCoding='%s' and %s " - + "union all " - + "select %s dateTime " - + "from SterilizationRecord sr join sterilization_reviewed sre on sre.sterilizationRecord_id=sr.id " - + "join ReviewedBasket rb on rb.id=sre.reviewedBasket_id " - + "join TousseInstance ti on ti.reviewBasket_id=rb.id " - + "where sr.status<>'%s' and sr.orgUnitCoding='%s' and %s " - + "union all " - + "select %s dateTime from TousseInstance ti join TousseDefinition td on td.id=ti.tousseDefinition_id " - + "where ti.orgUnitCoding='%s' and td.isSterile='%s' and td.tousseType='%s' and %s " - + ") temp group by temp.dateTime", - srEndDateSql, - SterilizationRecord.STERILIZATION_STATUS_FAILURE, departmentCode, dateQueryAdapter.dateAreaSql("sr.endDate", startTime, endTime) - ,srEndDateSql, - SterilizationRecord.STERILIZATION_STATUS_FAILURE, departmentCode, dateQueryAdapter.dateAreaSql("sr.endDate", startTime, endTime) - ,reviewTimeSql, - departmentCode, Constants.STR_NO, TousseDefinition.PACKAGE_TYPE_DISINFECTION, - dateQueryAdapter.dateAreaSql("case when ti.reviewTime is not null then ti.reviewTime else ti.operationTime end", startTime, endTime) - ); + String disinfectionSql = " union all select " + + reviewTimeSql + +" dateTime, count(*) amount from TousseInstance ti join TousseDefinition td on td.id=ti.tousseDefinition_id " + + " where ti.orgUnitCoding='" + + departmentCode + +"' and td.isSterile='否' and td.tousseType='" + + TousseDefinition.PACKAGE_TYPE_DISINFECTION + +"' and " + + dateQueryAdapter.dateAreaSql("case when ti.reviewTime is not null then ti.reviewTime else ti.operationTime end", startTime, endTime) + + " group by " + + reviewTimeSql; + String sql = "select monthstr,sum(tl.amount) amount from (" + + dataIndex.getWorkAmountByPackageSQL("灭菌数量", + reportParams) + + disinfectionSql + +") tl group by monthstr "; ResultSet rs = objectDao.executeSql(sql); try { while (rs.next()) { - String month = StringTools.defaultString(rs.getString("dateTime")); + String month = StringTools.defaultString(rs.getString("monthstr")); int amount = rs.getInt("amount"); map.put(month, amount); } @@ -22774,8 +22772,19 @@ Map sterileArticlesForUnqualified = null; //每个月的合格的灭菌物品 Map sterileArticlesForQualified = null; + ReportQueryParams reportParams = new ReportQueryParams(objectDao); + String startTime = year + "-01-01 00:00:00"; + String endTime = dataIndex.getNextYear(year) + " 00:00:00"; + String betweenSql = String.format(" between %s and %s ", dateQueryAdapter.dateAdapter(startTime),dateQueryAdapter.dateAdapter(endTime)); + reportParams.betweenSql = betweenSql; + reportParams.querySupplyRoom = departmentCode; + //数据库计算字符串长度的函数名 + String sqlLengthFunctionName = DatabaseUtil.getSqlLengthFunctionName(dbConnection); + reportParams.sqlLengthFunctionName = sqlLengthFunctionName; + reportParams.isGroup=true; + reportParams.extraQuery = " and sr.status<>'"+ SterilizationRecord.STERILIZATION_STATUS_FAILURE +"'"; if(dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_REUSABLEGOODS_TOTAL) || dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_REUSABLEGOODS_QUALIFIED) || dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_REUSABLEGOODS_QUALIFIEDRATIO)){ - sterileArticles = getSterileArticles(departmentCode, year, SupplyRoomQualityQuota.MONTH, null, null, null); + sterileArticles = getSterileArticles(reportParams, departmentCode, year, SupplyRoomQualityQuota.MONTH, null, null, null); String[] sterileArticlesUnqualifiedSource = null; sterileArticlesUnqualifiedSource = goodsOptionManager.getGoodsOptionValue(GoodsOption.MODEL_STERILEUNQUALIFIEDSOURCE, ""); //无菌物品不合格数据来源 sterileArticlesForUnqualified = getUnqualified(true, departmentCode, sterileArticlesUnqualifiedSource, year, SupplyRoomQualityQuota.MONTH, null, null , null); @@ -22816,7 +22825,7 @@ if(dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_STERILE_TOTAL) || dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_STERILE_QUALIFIED) || dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_STERILE_QUALIFIEDRATIO)){ //每个月的灭菌包数 - sterilizationSumAmount = dataIndex.getSterilizationAmount(departmentCode, year, SupplyRoomQualityQuota.MONTH, null, null, null); + sterilizationSumAmount = dataIndex.getSterilizationAmount(reportParams, departmentCode, year, SupplyRoomQualityQuota.MONTH, null, null, null); //每个月的不合格的灭菌包数 String[] sterilizationUnqualifiedSource = goodsOptionManager.getGoodsOptionValue(GoodsOption.MODEL_PACKINGUNQUALIFIEDSOURCE, ""); //包装不合格数据来源 sterilizationForUnqualified = getUnqualified(true, departmentCode, sterilizationUnqualifiedSource, year, SupplyRoomQualityQuota.MONTH, null, null , null); @@ -22851,16 +22860,6 @@ Map packingForUnqualified = null; //每个月的合格的装配数 Map packingForQualified = null; - ReportQueryParams reportParams = new ReportQueryParams(objectDao); - String startTime = year + "-01-01 00:00:00"; - String endTime = dataIndex.getNextYear(year) + " 00:00:00"; - String betweenSql = String.format(" between %s and %s ", dateQueryAdapter.dateAdapter(startTime),dateQueryAdapter.dateAdapter(endTime)); - reportParams.betweenSql = betweenSql; - reportParams.querySupplyRoom = departmentCode; - //数据库计算字符串长度的函数名 - String sqlLengthFunctionName = DatabaseUtil.getSqlLengthFunctionName(dbConnection); - reportParams.sqlLengthFunctionName = sqlLengthFunctionName; - reportParams.isGroup=true; if(dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_PACKING_UNQUALIFIED) || dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_PACKING_TOTAL) || dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_PACKING_QUALIFIED) || dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_PACKING_QUALIFIEDRATIO)){ // 装配总数的Map packingSumAmount = getPackingAmount(reportParams,"mm", 12, null,null); @@ -23087,8 +23086,17 @@ Map sterileArticlesForUnqualified = null; //每天的合格灭菌物品 Map sterileArticlesForQualified = null; + ReportQueryParams reportParams = new ReportQueryParams(objectDao); + String betweenSql = String.format(" between %s and %s ", dateQueryAdapter.dateAdapter(startTime + " 00:00:00"),dateQueryAdapter.dateAdapter(endTime + " 23:59:59")); + reportParams.betweenSql = betweenSql; + reportParams.querySupplyRoom = departmentCode; + //数据库计算字符串长度的函数名 + String sqlLengthFunctionName = DatabaseUtil.getSqlLengthFunctionName(dbConnection); + reportParams.sqlLengthFunctionName = sqlLengthFunctionName; + reportParams.isGroup=true; + reportParams.extraQuery = " and sr.status<>'"+ SterilizationRecord.STERILIZATION_STATUS_FAILURE +"'"; if(dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_REUSABLEGOODS_TOTAL) || dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_REUSABLEGOODS_QUALIFIED) || dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_REUSABLEGOODS_QUALIFIEDRATIO)){ - sterileArticles = getSterileArticles(departmentCode, month, SupplyRoomQualityQuota.DAY, startTime, endTime, firstDayToLastDay); + sterileArticles = getSterileArticles(reportParams, departmentCode, month, SupplyRoomQualityQuota.DAY, startTime, endTime, firstDayToLastDay); String[] sterileArticlesUnqualifiedSource = goodsOptionManager.getGoodsOptionValue(GoodsOption.MODEL_STERILEUNQUALIFIEDSOURCE, ""); //无菌物品不合格数据来源 sterileArticlesUnqualifiedSource = goodsOptionManager.getGoodsOptionValue(GoodsOption.MODEL_STERILEUNQUALIFIEDSOURCE, ""); //无菌物品不合格数据来源 sterileArticlesForUnqualified = getUnqualified(true, departmentCode, sterileArticlesUnqualifiedSource, month, SupplyRoomQualityQuota.DAY, startTime, endTime, firstDayToLastDay); @@ -23130,7 +23138,7 @@ if(dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_WASH_QUALIFIED) || dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_WETPACKETS_RATIO) || dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_STERILE_TOTAL) || dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_STERILE_QUALIFIED) || dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_STERILE_QUALIFIEDRATIO)){ //每个月的灭菌包数 - sterilizationSumAmount = dataIndex.getSterilizationAmount(departmentCode, month, SupplyRoomQualityQuota.DAY, startTime, endTime, firstDayToLastDay); + sterilizationSumAmount = dataIndex.getSterilizationAmount(reportParams, departmentCode, month, SupplyRoomQualityQuota.DAY, startTime, endTime, firstDayToLastDay); //每个月的不合格的灭菌包数 String[] sterilizationUnqualifiedSource = goodsOptionManager.getGoodsOptionValue(GoodsOption.MODEL_PACKINGUNQUALIFIEDSOURCE, ""); //包装不合格数据来源 sterilizationForUnqualified = getUnqualified(true, departmentCode, sterilizationUnqualifiedSource, month, SupplyRoomQualityQuota.DAY, startTime, endTime , firstDayToLastDay); @@ -23166,14 +23174,7 @@ Map packingForUnqualified = null; //每个月的合格的装配数 Map packingForQualified = null; - ReportQueryParams reportParams = new ReportQueryParams(objectDao); - String betweenSql = String.format(" between %s and %s ", dateQueryAdapter.dateAdapter(startTime + " 00:00:00"),dateQueryAdapter.dateAdapter(endTime + " 23:59:59")); - reportParams.betweenSql = betweenSql; - reportParams.querySupplyRoom = departmentCode; - //数据库计算字符串长度的函数名 - String sqlLengthFunctionName = DatabaseUtil.getSqlLengthFunctionName(dbConnection); - reportParams.sqlLengthFunctionName = sqlLengthFunctionName; - reportParams.isGroup=true; + if(dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_PACKING_UNQUALIFIED) || dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_PACKING_TOTAL) || dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_PACKING_QUALIFIED) || dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_PACKING_QUALIFIEDRATIO)){ // 装配总数的Map packingSumAmount = getPackingAmount(reportParams,"yyyy-MM-dd", null, firstDayToLastDay,null); Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/dataindex/DataIndex.java =================================================================== diff -u -r33774 -r33808 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/dataindex/DataIndex.java (.../DataIndex.java) (revision 33774) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/dataindex/DataIndex.java (.../DataIndex.java) (revision 33808) @@ -2564,38 +2564,17 @@ * @param queryScope 查询的精度(月/天) * @return */ - public Map getSterilizationAmount(String departmentCode, String date, String queryScope, String startTime, String endTime, List firstDayToLastDay) { + public Map getSterilizationAmount(ReportQueryParams reportParams, String departmentCode, String date, String queryScope, String startTime, String endTime, List firstDayToLastDay) { Map map = new HashMap(); if (true || StringTools.isNotBlank(departmentCode) && StringTools.isNotBlank(date)) { - String srEndDateSql = null; - if (SupplyRoomQualityQuota.DAY.endsWith(queryScope)) { - startTime = startTime + " 00:00:00"; - endTime = endTime + " 23:59:59"; - srEndDateSql = dateQueryAdapter.dateConverAdapter("sr.endDate", null); - } else { - srEndDateSql = dateQueryAdapter.dateConverAdapter3("sr.endDate", "mm"); - startTime = date + "-01-01 00:00:00"; - endTime = getNextYear(date) + " 00:00:00"; - } - - String sql = "select temp.dateTime dateTime,count(*) amount from("; - sql += String.format("select %s dateTime from SterilizationRecord sr,sterilization_tousseInstance st,TousseInstance ti " - + "where sr.id = st.sterilizationRecord_id and st.tousseInstance_id = ti.id " - + "%s and %s and sr.status<>'%s' ", - srEndDateSql, SqlUtils.get_InSql_Extra("sr.orgUnitCoding", departmentCode), - dateQueryAdapter.dateAreaSql("sr.endDate", startTime, endTime), SterilizationRecord.STERILIZATION_STATUS_FAILURE); - sql += " union all "; - sql += String.format("select %s dateTime from SterilizationRecord sr,sterilization_reviewed sre,ReviewedBasket rb,TousseInstance ti " - + "where sr.id = sre.sterilizationRecord_id and sre.reviewedBasket_id = rb.id and rb.id = ti.reviewBasket_ID " - + "%s and %s and sr.status<>'%s' ", - srEndDateSql,SqlUtils.get_InSql_Extra("sr.orgUnitCoding", departmentCode), - dateQueryAdapter.dateAreaSql("sr.endDate", startTime, endTime), SterilizationRecord.STERILIZATION_STATUS_FAILURE); - sql += ") temp group by temp.dateTime"; - + String sql = "select monthstr,sum(tl.amount) amount from (" + + getWorkAmountByPackageSQL("灭菌数量", + reportParams) + +") tl group by monthstr "; ResultSet rs = objectDao.executeSql(sql); try { while (rs.next()) { - String month = StringTools.defaultString(rs.getString("dateTime")); + String month = StringTools.defaultString(rs.getString("monthstr")); int amount = rs.getInt("amount"); map.put(month, amount); }