Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/WorkQualityCollectionReportImpl.java =================================================================== diff -u -r33526 -r34126 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/WorkQualityCollectionReportImpl.java (.../WorkQualityCollectionReportImpl.java) (revision 33526) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/WorkQualityCollectionReportImpl.java (.../WorkQualityCollectionReportImpl.java) (revision 34126) @@ -3,12 +3,17 @@ */ package com.forgon.disinfectsystem.jasperreports.service; +import java.sql.ResultSet; import java.sql.SQLException; import java.text.ParseException; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; @@ -44,6 +49,7 @@ import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.db.InitDbConnection; import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.util.SqlUtils; /** * 工作质量持续收集统计报表的服务类 @@ -116,6 +122,7 @@ * @throws ParseException * @throws SQLException */ + @Override public List getWorkQualityCollectionList( String year, String type,String querySupplyRoom, String month,Map params) throws ParseException, SQLException { @@ -139,24 +146,24 @@ } if(false == isHidePartOfWorkQualityCollection){ // 处理器械总件数 - workQualityCollectionDataIndex.getWashMaterialAmount(startAndEndDays, list,querySupplyRoom); + workQualityCollectionDataIndex.getWashMaterialAmount(startAndEndDays, list,querySupplyRoom,null,null); // 处理敷料总件数 workQualityCollectionDataIndex.getDressingAmount(startAndEndDays, list,querySupplyRoom); // 外来器械清洗总件数 - workQualityCollectionDataIndex.getWashForeignMaterialAmount(startAndEndDays, list,querySupplyRoom); + workQualityCollectionDataIndex.getWashForeignMaterialAmount(startAndEndDays, list,querySupplyRoom,null); // 消毒物品工作量 workQualityCollectionDataIndex.getDisinfectGoodsQuantity(startAndEndDays, list,querySupplyRoom); // CSSD包装物品总包数 - workQualityCollectionDataIndex.getPackingAmount(startAndEndDays, list,querySupplyRoom); + workQualityCollectionDataIndex.getPackingAmount(startAndEndDays, list,querySupplyRoom,null,null); // CSSD包装物品总件数 workQualityCollectionDataIndex.getPackingTousseMaterialAmount(startAndEndDays, list,querySupplyRoom); // 灭菌器使用炉次 - workQualityCollectionDataIndex.getCountFrequencyOfMonth(startAndEndDays, list,querySupplyRoom); + workQualityCollectionDataIndex.getCountFrequencyOfMonth(startAndEndDays, list,querySupplyRoom,null,null); // 灭菌物品总包数(普通灭菌、代理灭菌、外来器械灭菌)的统计,上下半年数据. workQualityCollectionDataIndex.getSterilizationAmount(startAndEndDays, list,querySupplyRoom); // 发放物品总件数 - workQualityCollectionDataIndex.getSendTousseAmount(startAndEndDays, list,querySupplyRoom); + workQualityCollectionDataIndex.getSendTousseAmount(startAndEndDays, list,querySupplyRoom,null); workQualityCollectionDataIndex.getSendDiposableGoodsAmount(startAndEndDays, list,querySupplyRoom); } @@ -283,26 +290,26 @@ if(false == isHidePartOfWorkQualityCollection){ // 处理器械总件数 - workQualityCollectionDataIndex.getWashMaterialAmountAllYear(list,reportParams); + workQualityCollectionDataIndex.getWashMaterialAmountAllYear(list,reportParams,null); // 处理敷料总件数 workQualityCollectionDataIndex.getDressingAmountAllYear(list,reportParams); // 外来器械清洗总件数 - workQualityCollectionDataIndex.getWashForeignMaterialAmountAllYear(list,reportParams); + workQualityCollectionDataIndex.getWashForeignMaterialAmountAllYear(list,reportParams,null); // 消毒物品工作量 reportParams.includeDisposableGoods = false; workQualityCollectionDataIndex.getDisinfectGoodsQuantityAllYear(list,reportParams); reportParams.includeDisposableGoods = true; reportParams.isDisableIDCardSqlWithAliasOfTousseDefinitionIsTd = ""; // CSSD包装物品总包数 - workQualityCollectionDataIndex.getPackingAmountAllYear(list,reportParams); + workQualityCollectionDataIndex.getPackingAmountAllYear(list,reportParams,null); // CSSD包装物品总件数 workQualityCollectionDataIndex.getPackingTousseMaterialAmountAllYear(list,reportParams); // 灭菌器使用炉次 - workQualityCollectionDataIndex.getCountFrequencyOfMonthAllYear(year, list,querySupplyRoom); + workQualityCollectionDataIndex.getCountFrequencyOfMonthAllYear(year, list,querySupplyRoom,null,null); // 灭菌物品总包数(普通灭菌、代理灭菌、外来器械灭菌)的统计,全年数据. workQualityCollectionDataIndex.getSterilizationAmountAllYear(year, list,querySupplyRoom); // 发放物品总包数(复用物品) - workQualityCollectionDataIndex.getSendTousseAmountAllYear(list,reportParams); + workQualityCollectionDataIndex.getSendTousseAmountAllYear(list,reportParams,null); // 发放物品总件数(一次性物品) workQualityCollectionDataIndex.getSendDiposableGoodsAmountAllYear(list,reportParams); } @@ -350,5 +357,14 @@ workQualityCollectionDataIndex.getSecordDaySendTousseAmountAllYear(year, list,querySupplyRoom,invoiceOperateAmountMap,isHidePartOfWorkQualityCollection); return list; } - + + @Override + public List getWorkQualityCollectionList( + String year, String type, String querySupplyRoom, String month, + Map params, JSONArray dataIndexsArray, + Set dataIndexSources) throws ParseException, SQLException { + // TODO Auto-generated method stub + return null; + } + } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/CustomReportsOfZsyy.java =================================================================== diff -u -r33552 -r34126 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/CustomReportsOfZsyy.java (.../CustomReportsOfZsyy.java) (revision 33552) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/CustomReportsOfZsyy.java (.../CustomReportsOfZsyy.java) (revision 34126) @@ -11,6 +11,8 @@ import java.util.Map; import java.util.Set; +import net.sf.json.JSONArray; + import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; @@ -1100,6 +1102,13 @@ //String isZSYYWorkQualityCollectionStr = params.get("isZSYYWorkQualityCollection"); return getWorkQualityCollectionListAllyearZsyy(querySupplyRoom,year,recAmountMap,washAmountMap,packAmountMap,dataSoureOfMaterialsCountOfToussesInReports); } - + + @Override + public List getWorkQualityCollectionList( + String year, String type, String querySupplyRoom, String month, + Map params, JSONArray dataIndexsArray, + Set dataIndexSources) throws ParseException, SQLException { + return getWorkQualityCollectionList(year, type, querySupplyRoom, month, params); + } } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/CustomReportsOfXjjqzyy.java =================================================================== diff -u -r33526 -r34126 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/CustomReportsOfXjjqzyy.java (.../CustomReportsOfXjjqzyy.java) (revision 33526) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/CustomReportsOfXjjqzyy.java (.../CustomReportsOfXjjqzyy.java) (revision 34126) @@ -9,7 +9,10 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Set; +import net.sf.json.JSONArray; + import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -1331,5 +1334,12 @@ String betweenSql = String.format(" between %s and %s ", dateQueryAdapter.dateAdapter(startDay),dateQueryAdapter.dateAdapter(endDay)); params.betweenSql = betweenSql; } + @Override + public List getWorkQualityCollectionList( + String year, String type, String querySupplyRoom, String month, + Map params, JSONArray dataIndexsArray, + Set dataIndexSources) throws ParseException, SQLException { + return getWorkQualityCollectionList(year, type, querySupplyRoom, month, params); + } } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/dataindex/WorkQualityCollectionDataIndex.java =================================================================== diff -u -r33774 -r34126 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/dataindex/WorkQualityCollectionDataIndex.java (.../WorkQualityCollectionDataIndex.java) (revision 33774) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/dataindex/WorkQualityCollectionDataIndex.java (.../WorkQualityCollectionDataIndex.java) (revision 34126) @@ -110,10 +110,18 @@ private RinserManager rinserManager; @Autowired private DataIndex dataIndex; - + /** + * + * @param startAndEndDays + * @param list + * @param querySupplyRoom + * @param extraQuery 额外的查询条件 + * @param dataIndexNameForDisplay 指标显示名称 + * @throws SQLException + */ public void getWashMaterialAmount( Map> startAndEndDays, - List list,String querySupplyRoom) throws SQLException { + List list,String querySupplyRoom,String extraQuery, String dataIndexNameForDisplay) throws SQLException { WorkQualityCollection bean = new WorkQualityCollection(); int dataSoureOfMaterialsCountOfToussesInReports = CssdUtils.getSystemSetConfigByNameInt("dataSoureOfMaterialsCountOfToussesInReports", 3); for (String key : startAndEndDays.keySet()) { @@ -130,11 +138,13 @@ dateQueryAdapter.dateAdapter(startDay), dateQueryAdapter.dateAdapter(endDay)); params.querySupplyRoom = querySupplyRoom; - + if(StringUtils.isNotBlank(extraQuery)){ + params.extraQuery = extraQuery; + } String sql = dataIndex.getHandleInstrumentTotalAmountSql(params,dataSoureOfMaterialsCountOfToussesInReports); bean.setRowNum(list.size()+1); - bean.setTitle("处理器械总件数"); + bean.setTitle(StringUtils.isNotBlank(dataIndexNameForDisplay)?dataIndexNameForDisplay:"处理器械总件数"); Integer amount = 0; ResultSet rs = objectDao.executeSql(sql); try { @@ -153,12 +163,19 @@ } } - // 工作量持续报表 获取处理器械总件数 + + /** + * 工作量持续报表 获取处理器械总件数 + * @param list + * @param reportParams + * @param dataIndexNameForDisplay 指标显示名称 + * @throws SQLException + */ public void getWashMaterialAmountAllYear( - List list,ReportQueryParams reportParams) throws SQLException { + List list,ReportQueryParams reportParams, String dataIndexNameForDisplay) throws SQLException { WorkQualityCollection bean = new WorkQualityCollection(); bean.setRowNum(list.size()+1); - bean.setTitle("处理器械总件数"); + bean.setTitle(StringUtils.isNotBlank(dataIndexNameForDisplay)?dataIndexNameForDisplay:"处理器械总件数"); reportParams.monthlyStr = dateQueryAdapter.dateConverAdapter3("wr.endDate","mm"); int dataSoureOfMaterialsCountOfToussesInReports = CssdUtils.getSystemSetConfigByNameInt("dataSoureOfMaterialsCountOfToussesInReports", 3); @@ -489,9 +506,17 @@ } list.add(bean); } + /** + * + * @param startAndEndDays + * @param list + * @param querySupplyRoom + * @param dataIndexNameForDisplay 指标显示名称 + * @throws SQLException + */ public void getWashForeignMaterialAmount( Map> startAndEndDays, - List list,String querySupplyRoom) throws SQLException { + List list,String querySupplyRoom, String dataIndexNameForDisplay) throws SQLException { WorkQualityCollection bean = new WorkQualityCollection(); int dataSoureOfMaterialsCountOfToussesInReports = CssdUtils.getSystemSetConfigByNameInt("dataSoureOfMaterialsCountOfToussesInReports", 3); for (String key : startAndEndDays.keySet()) { @@ -517,7 +542,7 @@ + ") tl "); bean.setRowNum(list.size()+1); - bean.setTitle("外来器械清洗总件数"); + bean.setTitle(StringUtils.isNotBlank(dataIndexNameForDisplay)?dataIndexNameForDisplay:"外来器械清洗总件数"); Integer amount = 0; ResultSet rs = objectDao.executeSql(sql); try { @@ -535,9 +560,15 @@ list.add(bean); } } - // 外来器械清洗总件数 全年统计 + /** + * 外来器械清洗总件数 全年统计 + * @param list + * @param reportParams + * @param dataIndexNameForDisplay 指标显示名称 + * @throws SQLException + */ public void getWashForeignMaterialAmountAllYear( - List list,ReportQueryParams reportParams) throws SQLException { + List list,ReportQueryParams reportParams, String dataIndexNameForDisplay) throws SQLException { WorkQualityCollection bean = new WorkQualityCollection(); reportParams.monthlyStr = dateQueryAdapter.dateConverAdapter3("wr.endDate","mm"); String isDisableIDCardSqlWithAliasOfTousseDefinitionIsTd = dataIndex.getIsDisableIDCardFilterSQL("是"); @@ -552,7 +583,7 @@ ResultSet result = objectDao.executeSql(sql); bean.setRowNum(list.size()+1); - bean.setTitle("外来器械清洗总件数"); + bean.setTitle(StringUtils.isNotBlank(dataIndexNameForDisplay)?dataIndexNameForDisplay:"外来器械清洗总件数"); String key = ""; Integer amount = 0; Integer thisYearAmount = 0; @@ -681,10 +712,18 @@ } list.add(bean); } - + /** + * + * @param startAndEndDays + * @param list + * @param querySupplyRoom + * @param extraQuery + * @param dataIndexNameForDisplay 指标显示名称 + * @throws SQLException + */ public void getPackingAmount( Map> startAndEndDays, - List list,String querySupplyRoom) throws SQLException { + List list,String querySupplyRoom, String extraQuery, String dataIndexNameForDisplay) throws SQLException { WorkQualityCollection bean = new WorkQualityCollection(); for (String key : startAndEndDays.keySet()) { @@ -701,13 +740,15 @@ dateQueryAdapter.dateAdapter(endDay)); params.querySupplyRoom = querySupplyRoom; params.sqlLengthFunctionName = DatabaseUtil.getSqlLengthFunctionName(dbConnection); - + if(StringUtils.isNotBlank(extraQuery)){ + params.extraQuery = extraQuery; + } String sql = String.format("select sum(tl.amount) amount from (" +dataIndex.getWorkAmountByPackageSQL("配包数量", params) + ") tl "); bean.setRowNum(list.size()+1); - bean.setTitle("CSSD包装物品总包数"); + bean.setTitle(StringUtils.isNotBlank(dataIndexNameForDisplay)?dataIndexNameForDisplay:"CSSD包装物品总包数"); Integer amount = 0; ResultSet rs = objectDao.executeSql(sql); try { @@ -725,9 +766,15 @@ list.add(bean); } } - // CSSD包装物品总包数 全年数量 + /** + * CSSD包装物品总包数 全年数量 + * @param list + * @param reportParams + * @param dataIndexNameForDisplay 指标显示名称 + * @throws SQLException + */ public void getPackingAmountAllYear( - List list,ReportQueryParams reportParams) throws SQLException { + List list,ReportQueryParams reportParams, String dataIndexNameForDisplay) throws SQLException { WorkQualityCollection bean = new WorkQualityCollection(); @@ -739,7 +786,7 @@ ResultSet result = objectDao.executeSql(sql); bean.setRowNum(list.size()+1); - bean.setTitle("CSSD包装物品总包数"); + bean.setTitle(StringUtils.isNotBlank(dataIndexNameForDisplay)?dataIndexNameForDisplay:"CSSD包装物品总包数"); String key = ""; Integer amount = 0; Integer thisYearAmount = 0; @@ -877,10 +924,22 @@ } list.add(bean); } + /** + * + * @param startAndEndDays + * @param list + * @param querySupplyRoom + * @param distinguishSterilerGroup 区分灭菌炉分组 只有false为不区分 + * @param dataIndexNameForDisplay 指标显示名称 + * @throws SQLException + */ public void getCountFrequencyOfMonth( Map> startAndEndDays, - List list,String querySupplyRoom) throws SQLException { - + List list,String querySupplyRoom,Boolean distinguishSterilerGroup, String dataIndexNameForDisplay) throws SQLException { + if(distinguishSterilerGroup != null && !distinguishSterilerGroup){ + getCountFrequencyOfMonthQueryAll(startAndEndDays, list, querySupplyRoom, dataIndexNameForDisplay); + return; + } List sterilerGroupList = httpOptionManager.getHttpOptionListById("sterilerGroup"); if(sterilerGroupList!= null && sterilerGroupList.size()>0){ for(int i=0;i list,String querySupplyRoom) throws SQLException { + List list,String querySupplyRoom,Boolean distinguishSterilerGroup, String dataIndexNameForDisplay) throws SQLException { + if(distinguishSterilerGroup != null && !distinguishSterilerGroup){ + getCountFrequencyOfMonthAllYearCustom(year, list, querySupplyRoom, dataIndexNameForDisplay); + return; + } List sterilerGroupList = httpOptionManager.getHttpOptionListById("sterilerGroup"); if(sterilerGroupList!= null && sterilerGroupList.size()>0){ for(int i=0;i> startAndEndDays, - List list,String querySupplyRoom) throws SQLException { + List list,String querySupplyRoom, String dataIndexNameForDisplay) throws SQLException { WorkQualityCollection bean = new WorkQualityCollection(); for (String key : startAndEndDays.keySet()) { String startDay = null; @@ -1151,7 +1223,7 @@ + ") tl "); - bean.setTitle("发放物品总包数(复用物品)"); + bean.setTitle(StringUtils.isNotBlank(dataIndexNameForDisplay)?dataIndexNameForDisplay:"发放物品总包数(复用物品)"); bean.setRowNum(list.size()+1); Integer amount = 0; ResultSet rs = objectDao.executeSql(sql); @@ -1176,10 +1248,11 @@ * @param year * @param list * @param querySupplyRoom + * @param dataIndexNameForDisplay 指标显示名称 * @throws SQLException */ public void getSendTousseAmountAllYear( - List list,ReportQueryParams reportParams) throws SQLException { + List list,ReportQueryParams reportParams,String dataIndexNameForDisplay) throws SQLException { WorkQualityCollection bean = new WorkQualityCollection(); reportParams.monthlyStr = dateQueryAdapter.dateConverAdapter3("i.sendTime","mm"); @@ -1194,7 +1267,7 @@ reportParams.extraSelectColumns = ""; ResultSet result = objectDao.executeSql(sql); bean.setRowNum(list.size()+1); - bean.setTitle("发放物品总包数(复用物品)"); + bean.setTitle(StringUtils.isNotBlank(dataIndexNameForDisplay)?dataIndexNameForDisplay:"发放物品总包数(复用物品)"); String key = ""; Integer amount = 0; try { @@ -4565,5 +4638,209 @@ + " and fd.formType = '质量监测'"; return sql; } - + /** + * 灭菌包数全年版 + * @param year 年份 + * @param list + * @param reportParams + * @param dataIndexNameForDisplay 指标显示名称 默认灭菌物品总包数 + * @throws SQLException + */ + public void getCustomSterilizationAmountAllYear( + String year, + List list, ReportQueryParams reportParams, String dataIndexNameForDisplay) throws SQLException { + WorkQualityCollection bean = new WorkQualityCollection(); + String queryYear = year + "-01-01 00:00:00"; + String nextYear = dataIndex.getNextYear(year) + " 00:00:00"; + //查询的时间段 + String betweenSql = String.format(" between %s and %s ", dateQueryAdapter.dateAdapter(queryYear),dateQueryAdapter.dateAdapter(nextYear)); + //数据库计算字符串长度的函数名 + reportParams.monthlyStr = dateQueryAdapter.dateConverAdapter3(dateQueryAdapter.stringFieldToDate("ti.sterileEndTime"),"mm"); + String sql = "select monthstr,sum(tl.amount) amount from (" + + dataIndex.getWorkAmountByPackageSQL("灭菌数量", + reportParams) + ") tl group by monthstr "; + ResultSet result = objectDao.executeSql(sql); + bean.setRowNum(list.size()+1); + bean.setTitle(StringUtils.isNotBlank(dataIndexNameForDisplay)?dataIndexNameForDisplay:"灭菌物品总包数"); + String key = ""; + Integer amount = 0; + Integer thisYearAmount = 0; + try { + //防止月份相同,数据被覆盖 + Map monthAmountMap = new HashMap(); + while (result.next()) { + key = result.getString(1); + // 月份以0开头的,去掉0 + if(key.length() > 1 && Integer.valueOf(key) < 10){ + key = Integer.valueOf(key).toString(); + } + amount = result.getInt(2); + if(amount != null & amount >0){ + thisYearAmount += amount; + if(monthAmountMap.containsKey(key)){ + amount += monthAmountMap.get(key); + } + monthAmountMap.put(key, amount); + } + dataIndex.setWorkQualityBeanAmount(bean, key, amount); + } + if(thisYearAmount > 0){ + dataIndex.setWorkQualityBeanAmount(bean, "今年", thisYearAmount); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(result); + } + list.add(bean); + } + /** + * 灭菌物品总包数(普通灭菌、代理灭菌、外来器械灭菌)的统计,上下半年数据. + * @param startAndEndDays + * @param list + * @param querySupplyRoom + * @param extraQuery 额外的查询条件 + * @param dataIndexNameForDisplay 指标显示名称 + * @throws SQLException + */ + public void getCustomSterilizationAmount( + Map> startAndEndDays, + List list,String querySupplyRoom, String extraQuery, String dataIndexNameForDisplay) throws SQLException { + WorkQualityCollection tousseBean = new WorkQualityCollection(); + for (String key : startAndEndDays.keySet()) { + String startDay = null; + String endDay = null; + Map innerMap = startAndEndDays.get(key); + for (String keyOfInnerMap : innerMap.keySet()) { + startDay = keyOfInnerMap; + endDay = innerMap.get(keyOfInnerMap); + } + ReportQueryParams reportParams = new ReportQueryParams(objectDao); + //数据库计算字符串长度的函数名 + String sqlLengthFunctionName = DatabaseUtil.getSqlLengthFunctionName(dbConnection); + reportParams.extraQuery = " and ti.proxyDisinfection_id is null "; + if(StringUtils.isNotBlank(extraQuery)){ + reportParams.extraQuery = extraQuery; + } + reportParams.betweenSql = String.format(" between %s and %s ", dateQueryAdapter.dateAdapter(startDay),dateQueryAdapter.dateAdapter(endDay)); + reportParams.querySupplyRoom = querySupplyRoom; + reportParams.sqlLengthFunctionName = sqlLengthFunctionName; + String sql = dataIndex.getWorkAmountByPackageSQL("灭菌数量", reportParams); + tousseBean.setRowNum(list.size()+1); + tousseBean.setTitle(StringUtils.isNotBlank(dataIndexNameForDisplay)?dataIndexNameForDisplay:"灭菌物品总包数"); + ResultSet rs = objectDao.executeSql(sql); + int tousseAmount = 0; + try { + while (rs.next()) { + tousseAmount += rs.getInt("amount"); + } + dataIndex.setWorkQualityBeanAmount(tousseBean, key, tousseAmount); + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + } + if (startAndEndDays.size() != 1 || tousseBean.getAmount().intValue() != 0) { + list.add(tousseBean); + } + } + /** + * 灭菌炉使用次数 上下半年对比 今年去年对比 + * @param startAndEndDays 开始时间结束时间 + * @param list + * @param querySupplyRoom 供应室 + * @param dataIndexNameForDisplay 指标显示名称 默认灭菌器使用炉次 + * @throws SQLException + */ + public void getCountFrequencyOfMonthQueryAll( + Map> startAndEndDays, + List list,String querySupplyRoom, String dataIndexNameForDisplay) throws SQLException { + WorkQualityCollection bean = new WorkQualityCollection(); + for (String key : startAndEndDays.keySet()) { + String startDay = null; + String endDay = null; + Map innerMap = startAndEndDays.get(key); + for (String keyOfInnerMap : innerMap.keySet()) { + startDay = keyOfInnerMap; + endDay = innerMap.get(keyOfInnerMap); + } + String sql = "select count(*) from sterilizationrecord sr,Sterilizer s " + + "where sr.sterilizer_id = s.id " + + SqlUtils.get_InSql_Extra("sr.orgUnitCoding", querySupplyRoom) + + " and sr.endDate >= " + + dateQueryAdapter.dateAdapter(startDay) + + " and sr.endDate <= " + + dateQueryAdapter.dateAdapter(endDay); + + bean.setRowNum(list.size()+1); + bean.setTitle(StringUtils.isNotBlank(dataIndexNameForDisplay)?dataIndexNameForDisplay:"灭菌器使用炉次"); + Integer amount = 0; + ResultSet rs = objectDao.executeSql(sql); + try { + while (rs.next()) { + amount = rs.getInt(1); + dataIndex.setWorkQualityBeanAmount(bean, key, amount); + } + } catch (SQLException e) { + throw e; + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + } + if (startAndEndDays.size() != 1 || bean.getAmount().intValue() != 0) { + list.add(bean); + } + } + /** + * 获取全年的灭菌炉使用次数 不区分灭菌炉分组 + * @param year 年份 + * @param list + * @param querySupplyRoom 供应室 + * @param dataIndexNameForDisplay 指标显示名称 默认灭菌炉使用次数 + * @throws SQLException + */ + private void getCountFrequencyOfMonthAllYearCustom( + String year, + List list,String querySupplyRoom, String dataIndexNameForDisplay) throws SQLException { + WorkQualityCollection bean = new WorkQualityCollection(); + String queryYear = year + "-01-01 00:00:00"; + String nextYear = dataIndex.getNextYear(year) + " 00:00:00"; + String sql = "select " + dateQueryAdapter.dateConverAdapter3("sr.endDate","mm") + + " montrstr, count(*) from sterilizationrecord sr,Sterilizer s " + + "where sr.sterilizer_id = s.id " + SqlUtils.get_InSql_Extra("sr.orgUnitCoding", querySupplyRoom) + + " and sr.endDate >= " + + dateQueryAdapter.dateAdapter(queryYear) + + " and sr.endDate <= " + + dateQueryAdapter.dateAdapter(nextYear) + + " group by " + dateQueryAdapter.dateConverAdapter3("sr.endDate","mm"); + ResultSet result = objectDao.executeSql(sql); + bean.setRowNum(list.size()+1); + bean.setTitle(StringUtils.isNotBlank(dataIndexNameForDisplay)?dataIndexNameForDisplay:"灭菌炉使用次数"); + String key = ""; + Integer amount = 0; + try { + Integer thisYearAmount = 0; + while (result.next()) { + key = result.getString(1); + // 月份以0开头的,去掉0 + if(key.length() > 1 && Integer.valueOf(key) < 10){ + key = Integer.valueOf(key).toString(); + } + amount = result.getInt(2); + if(amount != null & amount >0){ + thisYearAmount += amount; + } + dataIndex.setWorkQualityBeanAmount(bean, key, amount); + } + if(thisYearAmount > 0){ + dataIndex.setWorkQualityBeanAmount(bean, "今年", thisYearAmount); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(result); + } + list.add(bean); + } } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/CustomReportsOfDgsfy.java =================================================================== diff -u -r33526 -r34126 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/CustomReportsOfDgsfy.java (.../CustomReportsOfDgsfy.java) (revision 33526) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/CustomReportsOfDgsfy.java (.../CustomReportsOfDgsfy.java) (revision 34126) @@ -16,7 +16,10 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Set; +import net.sf.json.JSONArray; + import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; @@ -173,20 +176,20 @@ } if(false == isHidePartOfWorkQualityCollection){ // 处理器械总件数 - workQualityCollectionDataIndex.getWashMaterialAmount(startAndEndDays, list,querySupplyRoom); + workQualityCollectionDataIndex.getWashMaterialAmount(startAndEndDays, list,querySupplyRoom,null,null); // 处理敷料总件数 workQualityCollectionDataIndex.getDressingAmount(startAndEndDays, list,querySupplyRoom); // 外来器械清洗总件数 - workQualityCollectionDataIndex.getWashForeignMaterialAmount(startAndEndDays, list,querySupplyRoom); + workQualityCollectionDataIndex.getWashForeignMaterialAmount(startAndEndDays, list,querySupplyRoom,null); // 消毒物品工作量 workQualityCollectionDataIndex.getDisinfectGoodsQuantity(startAndEndDays, list,querySupplyRoom); // CSSD包装物品总包数 - workQualityCollectionDataIndex.getPackingAmount(startAndEndDays, list,querySupplyRoom); + workQualityCollectionDataIndex.getPackingAmount(startAndEndDays, list,querySupplyRoom,null,null); // CSSD包装物品总件数 workQualityCollectionDataIndex.getPackingTousseMaterialAmount(startAndEndDays, list,querySupplyRoom); // 灭菌器使用炉次 - workQualityCollectionDataIndex.getCountFrequencyOfMonth(startAndEndDays, list,querySupplyRoom); + workQualityCollectionDataIndex.getCountFrequencyOfMonth(startAndEndDays, list,querySupplyRoom,null,null); // 灭菌物品总包数(普通灭菌、代理灭菌、外来器械灭菌)的统计,上下半年数据. workQualityCollectionDataIndex.getSterilizationAmount(startAndEndDays, list,querySupplyRoom); /** @@ -199,7 +202,7 @@ } // 发放物品总件数 - workQualityCollectionDataIndex.getSendTousseAmount(startAndEndDays, list,querySupplyRoom); + workQualityCollectionDataIndex.getSendTousseAmount(startAndEndDays, list,querySupplyRoom,null); workQualityCollectionDataIndex.getSendDiposableGoodsAmount(startAndEndDays, list,querySupplyRoom); } @@ -326,26 +329,26 @@ if(false == isHidePartOfWorkQualityCollection){ // 处理器械总件数 - workQualityCollectionDataIndex.getWashMaterialAmountAllYear(list,reportParams); + workQualityCollectionDataIndex.getWashMaterialAmountAllYear(list,reportParams,null); // 处理敷料总件数 workQualityCollectionDataIndex.getDressingAmountAllYear(list,reportParams); // 外来器械清洗总件数 - workQualityCollectionDataIndex.getWashForeignMaterialAmountAllYear(list,reportParams); + workQualityCollectionDataIndex.getWashForeignMaterialAmountAllYear(list,reportParams,null); // 消毒物品工作量 workQualityCollectionDataIndex.getDisinfectGoodsQuantityAllYear(list,reportParams); reportParams.isDisableIDCardSqlWithAliasOfTousseDefinitionIsTd = ""; // CSSD包装物品总包数 - workQualityCollectionDataIndex.getPackingAmountAllYear(list,reportParams); + workQualityCollectionDataIndex.getPackingAmountAllYear(list,reportParams,null); // CSSD包装物品总件数 workQualityCollectionDataIndex.getPackingTousseMaterialAmountAllYear(list,reportParams); // 灭菌器使用炉次 - workQualityCollectionDataIndex.getCountFrequencyOfMonthAllYear(year, list,querySupplyRoom); + workQualityCollectionDataIndex.getCountFrequencyOfMonthAllYear(year, list,querySupplyRoom, null, null); // 灭菌物品总包数(普通灭菌、代理灭菌、外来器械灭菌)的统计,全年数据. getSterilizationAmountAllYearOfDgsfy(year, list,querySupplyRoom); // 按灭菌炉分组统计包数 workQualityCollectionDataIndex.getSterilizationAmountAllYearBySterilizerGroup(year, list,querySupplyRoom); // 发放物品总包数(复用物品) - workQualityCollectionDataIndex.getSendTousseAmountAllYear(list,reportParams); + workQualityCollectionDataIndex.getSendTousseAmountAllYear(list,reportParams,null); // 发放物品总件数(一次性物品) workQualityCollectionDataIndex.getSendDiposableGoodsAmountAllYear(list,reportParams); } @@ -1453,4 +1456,12 @@ map.put("清洗总数", totalAmount); return map; } + + @Override + public List getWorkQualityCollectionList( + String year, String type, String querySupplyRoom, String month, + Map params, JSONArray dataIndexsArray, + Set dataIndexSources) throws ParseException, SQLException { + return getWorkQualityCollectionList(year, type, querySupplyRoom, month, params); + } } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/WorkQualityCollectionReport.java =================================================================== diff -u -r25293 -r34126 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/WorkQualityCollectionReport.java (.../WorkQualityCollectionReport.java) (revision 25293) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/WorkQualityCollectionReport.java (.../WorkQualityCollectionReport.java) (revision 34126) @@ -7,7 +7,10 @@ import java.text.ParseException; import java.util.List; import java.util.Map; +import java.util.Set; +import net.sf.json.JSONArray; + import com.forgon.disinfectsystem.jasperreports.javabeansource.WorkQualityCollection; /** @@ -31,7 +34,9 @@ public List getWorkQualityCollectionList( String year, String type,String querySupplyRoom, String month,Map params) throws ParseException, SQLException ; - + public List getWorkQualityCollectionList( + String year, String type,String querySupplyRoom, String month,Map params, JSONArray dataIndexsArray, Set dataIndexSources) throws ParseException, + SQLException ; /** * 查询全年的持续收集统计报表 * @param year Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java =================================================================== diff -u -r34012 -r34126 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 34012) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 34126) @@ -93,6 +93,7 @@ import com.forgon.disinfectsystem.jasperreports.javabeansource.UrgentNeedGoodsProcessingCycle; import com.forgon.disinfectsystem.jasperreports.javabeansource.UseRecordOperatorBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.YearReportChartBean; +import com.forgon.disinfectsystem.jasperreports.service.CustomReports; import com.forgon.disinfectsystem.jasperreports.service.CustomReportsOfDgsfy; import com.forgon.disinfectsystem.jasperreports.service.CustomReportsOfXjjqzyy; import com.forgon.disinfectsystem.jasperreports.service.CustomReportsOfZsyy; @@ -151,8 +152,12 @@ private CustomReportsOfXjjqzyy customReportsOfXjjqzyy; + private CustomReports customReports; private BrancheOfHospitalManager brancheOfHospitalManager; + public void setCustomReports(CustomReports customReports) { + this.customReports = customReports; + } public void setBrancheOfHospitalManager( BrancheOfHospitalManager brancheOfHospitalManager) { this.brancheOfHospitalManager = brancheOfHospitalManager; @@ -853,20 +858,33 @@ String isDgsfyWorkQualityCollectionStr = params.get("isDgsfyWorkQualityCollection"); // 判断是否为xjjqzyy的持续收集统计报表 String isXjjqzyyWorkQualityCollectionStr = params.get("isXjjqzyyWorkQualityCollection"); - if("true".equals(isZSYYWorkQualityCollectionStr)){ + //读取配置的数据 + String dataConfigStr = CssdUtils.getSystemSetConfigByName("workQualityCollectionReportConfiguration"); + if(!StringUtils.isBlank(dataConfigStr)){ + //数据源 + Set dataIndexSources = new HashSet(); + JSONObject dataConfigObj = JSONObject.fromObject(dataConfigStr); + JSONArray dataIndexsArray = dataConfigObj.optJSONArray("dataIndexsArray"); + for (int i = 0; i < dataIndexsArray.size(); i++) { + JSONObject dataConfig = (JSONObject)dataIndexsArray.get(i); + dataIndexSources.add(dataConfig.optString("dataIndexSource")); + } + return customReports.getWorkQualityCollectionList(year, + type,querySupplyRoom ,null,params,dataIndexsArray,dataIndexSources); + }else if("true".equals(isZSYYWorkQualityCollectionStr)){ return customReportsOfZsyy.getWorkQualityCollectionList(year, - type,querySupplyRoom ,null,params); + type,querySupplyRoom ,null,params, null, null); } else if ("true".equals(isDgsfyWorkQualityCollectionStr)){ return customReportsOfDgsfy.getWorkQualityCollectionList(year, - type,querySupplyRoom ,null,params); + type,querySupplyRoom ,null,params, null, null); }else if("true".equals(isXjjqzyyWorkQualityCollectionStr)){ return customReportsOfXjjqzyy.getWorkQualityCollectionList(year, - type,querySupplyRoom ,null,params); + type,querySupplyRoom ,null,params, null, null); } else{ return workQualityCollectionReport.getWorkQualityCollectionList(year, - type,querySupplyRoom ,null,params); + type,querySupplyRoom ,null,params, null, null); } } @@ -877,7 +895,7 @@ month = sdf.format(new Date()); } return workQualityCollectionReport.getWorkQualityCollectionList(null, null,null, - month,null); + month,null,null,null); } else if (reportName.equals("supplyRoomApplianceMonthStatistics")) {// 器械月盘点报表 String startDate = StrutsParamUtils.getPraramValue("startDate", null); Long warehouseId = StrutsParamUtils.getPraramLongValue("warehouseId", null); Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/CustomReports.java =================================================================== diff -u --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/CustomReports.java (revision 0) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/CustomReports.java (revision 34126) @@ -0,0 +1,333 @@ +package com.forgon.disinfectsystem.jasperreports.service; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +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.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; +import com.forgon.disinfectsystem.jasperreports.javabeansource.WorkQualityCollection; +import com.forgon.disinfectsystem.jasperreports.service.dataindex.DataIndex; +import com.forgon.disinfectsystem.jasperreports.service.dataindex.WorkQualityCollectionDataIndex; +import com.forgon.disinfectsystem.reportforms.vo.ReportQueryParams; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.db.InitDbConnection; +import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.util.SqlUtils; + +/** + * @author zc.ci + * 工作量持续收集报表(自定义数据源) + * 2018-12-24 + * + */ +@Component(value = "customReports") +public class CustomReports implements WorkQualityCollectionReport{ + @Autowired + private ObjectDao objectDao; + @Autowired + private DateQueryAdapter dateQueryAdapter; + @Autowired + private InitDbConnection dbConnection; + @Autowired + private DataIndex dataIndex; + @Autowired + private WorkQualityCollectionDataIndex workQualityCollectionDataIndex; + @Override + public List getWorkQualityCollectionList( + String year, String type, String querySupplyRoom, String month, + Map params, JSONArray dataIndexsArray, Set dataIndexSources) throws ParseException, SQLException { + List list = new ArrayList(); + // 工作量持续统计报表 全年数据的处理 + if("allYear".equals(type)){ + list = getCustomWorkQualityCollectionListAllyear(year,querySupplyRoom,params,dataIndexsArray, + dataIndexSources); + return list; + } + Map> startAndEndDays = null; + if (StringUtils.isNotBlank(year) && StringUtils.isNotBlank(type)) { + startAndEndDays = DataIndex.getStartAndEndDay(year, type, null); + } else { + startAndEndDays = DataIndex.getStartAndEndDay(null, null, month); + } + for (int i = 0; i < dataIndexsArray.size(); i++) { + JSONObject dataConfig = (JSONObject)dataIndexsArray.get(i); + String dataIndexSource = dataConfig.optString("dataIndexSource"); + String dataIndexNameForDisplay = dataConfig.optString("dataIndexNameForDisplay"); + String extraQuery = ""; + if("灭菌器使用炉次".equals(dataIndexSource)){ + // 灭菌器使用炉次 + workQualityCollectionDataIndex.getCountFrequencyOfMonth(startAndEndDays, list,querySupplyRoom,false,dataIndexNameForDisplay); + }else if("清洗机使用炉次".equals(dataIndexSource)){ + getRinserUseCountOfMonth(startAndEndDays, list, querySupplyRoom, dataIndexNameForDisplay); + }else if("处理器械包总包数".equals(dataIndexSource)){ + workQualityCollectionDataIndex.getSendTousseAmount(startAndEndDays, list,querySupplyRoom,dataIndexNameForDisplay); + }else if("处理临床器械总件数".equals(dataIndexSource)){//除大德路总院中除麻醉1区、麻醉2区、大院门诊手术室外的全部科室 + extraQuery = " and ci.orgUnitName not in ('麻醉1区','麻醉2区','大院门诊手术室') "; + workQualityCollectionDataIndex.getWashMaterialAmount(startAndEndDays, list,querySupplyRoom,extraQuery,dataIndexNameForDisplay); + }else if("处理手术器械总件数".equals(dataIndexSource)){//大德路总院 麻醉1区、麻醉2区、大院门诊手术室 + extraQuery = " and ci.orgUnitName in ('麻醉1区','麻醉2区','大院门诊手术室') "; + workQualityCollectionDataIndex.getWashMaterialAmount(startAndEndDays, list,querySupplyRoom,extraQuery,dataIndexNameForDisplay); + }else if("复用性物品包装总件数".equals(dataIndexSource)){ + String taskGroups = dataConfig.optString("taskGroups"); + if(StringUtils.isNotBlank(taskGroups)){ + JSONArray taskGroupsArr = JSONArray.fromObject(taskGroups); + if(taskGroupsArr.size() == 1){ + extraQuery= " and tdc.taskGroup='"+ taskGroupsArr.get(0).toString() +"' "; + }else{ + Set taskGroupsSet = new HashSet(); + for (int j = 0; j < taskGroupsArr.size(); j++) { + taskGroupsSet.add(taskGroupsArr.get(j).toString()); + } + extraQuery= " and " + SqlUtils.getStringFieldInLargeCollectionsPredicate("tdc.taskGroup", taskGroupsSet, "1=1"); + } + } + workQualityCollectionDataIndex.getPackingAmount(startAndEndDays, list,querySupplyRoom,extraQuery,dataIndexNameForDisplay); + }else if("处理外来手术器械总件数".equals(dataIndexSource)){ + workQualityCollectionDataIndex.getWashForeignMaterialAmount(startAndEndDays, list,querySupplyRoom,dataIndexNameForDisplay); + }else if("复用性外部代理灭菌物品总件数".equals(dataIndexSource)){ + extraQuery = " and td.tousseType='"+ TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY +"' "; + String orgUnitCodes = dataConfig.optString("orgUnitCodes"); + if(StringUtils.isNotBlank(orgUnitCodes)){ + JSONArray orgUnitCodesArr = JSONArray.fromObject(orgUnitCodes); + if(orgUnitCodesArr.size() == 1){ + extraQuery += " and ti.invoicePlanID in(select id from InvoicePlan where type='"+ InvoicePlan.TYPE_FOREIGNPROXYDISINFECTION +"' and departCoding='"+ orgUnitCodesArr.get(0).toString() +"') "; + }else{ + Set orgUnitCodesSet = new HashSet(); + for (int j = 0; j < orgUnitCodesArr.size(); j++) { + orgUnitCodesSet.add(orgUnitCodesArr.get(j).toString()); + } + extraQuery += " and ti.invoicePlanID in(select id from InvoicePlan where type='"+ InvoicePlan.TYPE_FOREIGNPROXYDISINFECTION +"' and " + + SqlUtils.getStringFieldInLargeCollectionsPredicate("departCoding", orgUnitCodesSet, "1=1") + +") "; + } + } + // 灭菌物品总包数(普通灭菌、代理灭菌、外来器械灭菌)的统计,上下半年数据. + workQualityCollectionDataIndex.getCustomSterilizationAmount(startAndEndDays, list,querySupplyRoom,extraQuery,dataIndexNameForDisplay); + } + } + return list; + } + /** + * 工作量持续收集报表 + * @param year 年份 + * @param querySupplyRoom 供应室 + * @param params 包含参数名称的参数值的map,key为参数名称,value为参数值 + * @param dataIndexsArray 数据源及相关信息数据 + * @param dataIndexSources 数据源 + * @return + * @throws ParseException + * @throws SQLException + */ + public List getCustomWorkQualityCollectionListAllyear( + String year,String querySupplyRoom,Map params, JSONArray dataIndexsArray, + Set dataIndexSources) throws ParseException, + SQLException { + List list = new ArrayList(); + if(params == null){ + return list; + } + + String queryYear = year + "-01-01 00:00:00"; + String nextYear = dataIndex.getNextYear(year) + " 00:00:00"; + + //查询的时间段 + String betweenSql = String.format(" between %s and %s ", dateQueryAdapter.dateAdapter(queryYear),dateQueryAdapter.dateAdapter(nextYear)); + //数据库计算字符串长度的函数名 + String sqlLengthFunctionName = DatabaseUtil.getSqlLengthFunctionName(dbConnection); + + ReportQueryParams reportParams = new ReportQueryParams(objectDao); + reportParams.betweenSql = betweenSql; + reportParams.querySupplyRoom = querySupplyRoom; + reportParams.isDisableIDCardSqlWithAliasOfTousseDefinitionIsTd = ""; + reportParams.taskGroupSqlWithAliasOfTousseDefinitionIsTd = ""; + reportParams.tousseGroupSqlWithAliasOfTousseDefinitionIsTd = ""; + reportParams.tousseTypeAndPackageSizeSql = ""; + reportParams.sqlLengthFunctionName = sqlLengthFunctionName; + for (int i = 0; i < dataIndexsArray.size(); i++) { + JSONObject dataConfig = (JSONObject)dataIndexsArray.get(i); + String dataIndexSource = dataConfig.optString("dataIndexSource"); + String dataIndexNameForDisplay = dataConfig.optString("dataIndexNameForDisplay"); + if("灭菌器使用炉次".equals(dataIndexSource)){ + workQualityCollectionDataIndex.getCountFrequencyOfMonthAllYear(year, list,querySupplyRoom,false,dataIndexNameForDisplay); + }else if("清洗机使用炉次".equals(dataIndexSource)){ + getRinserUseCountOfMonthAllYear(year, list, querySupplyRoom, dataIndexNameForDisplay); + }else if("处理器械包总包数".equals(dataIndexSource)){ + reportParams.includeDisposableGoods = false; + reportParams.extraQuery = ""; + reportParams.isDisableIDCardSqlWithAliasOfTousseDefinitionIsTd = ""; + workQualityCollectionDataIndex.getSendTousseAmountAllYear(list,reportParams,dataIndexNameForDisplay); + }else if("处理临床器械总件数".equals(dataIndexSource)){//除大德路总院中除麻醉1区、麻醉2区、大院门诊手术室外的全部科室 + reportParams.extraQuery = " and ci.orgUnitName not in ('麻醉1区','麻醉2区','大院门诊手术室') "; + workQualityCollectionDataIndex.getWashMaterialAmountAllYear(list,reportParams,dataIndexNameForDisplay); + }else if("处理手术器械总件数".equals(dataIndexSource)){//大德路总院 麻醉1区、麻醉2区、大院门诊手术室 + reportParams.extraQuery = " and ci.orgUnitName in ('麻醉1区','麻醉2区','大院门诊手术室') "; + workQualityCollectionDataIndex.getWashMaterialAmountAllYear(list,reportParams,dataIndexNameForDisplay); + }else if("复用性物品包装总件数".equals(dataIndexSource)){ + String taskGroups = dataConfig.optString("taskGroups"); + reportParams.extraQuery = ""; + if(StringUtils.isNotBlank(taskGroups)){ + JSONArray taskGroupsArr = JSONArray.fromObject(taskGroups); + if(taskGroupsArr.size() == 1){ + reportParams.extraQuery= " and tdc.taskGroup='"+ taskGroupsArr.get(0).toString() +"' "; + }else{ + Set taskGroupsSet = new HashSet(); + for (int j = 0; j < taskGroupsArr.size(); j++) { + taskGroupsSet.add(taskGroupsArr.get(j).toString()); + } + reportParams.extraQuery= " and " + SqlUtils.getStringFieldInLargeCollectionsPredicate("tdc.taskGroup", taskGroupsSet, "1=1"); + } + } + workQualityCollectionDataIndex.getPackingAmountAllYear(list,reportParams,dataIndexNameForDisplay); + }else if("处理外来手术器械总件数".equals(dataIndexSource)){ + reportParams.extraQuery = ""; + // 外来器械清洗总件数 + workQualityCollectionDataIndex.getWashForeignMaterialAmountAllYear(list,reportParams,dataIndexNameForDisplay); + }else if("复用性外部代理灭菌物品总件数".equals(dataIndexSource)){ + reportParams.extraQuery = " and td.tousseType='"+ TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY +"' "; + String orgUnitCodes = dataConfig.optString("orgUnitCodes"); + if(StringUtils.isNotBlank(orgUnitCodes)){ + JSONArray orgUnitCodesArr = JSONArray.fromObject(orgUnitCodes); + if(orgUnitCodesArr.size() == 1){ + reportParams.extraQuery += " and ti.invoicePlanID in(select id from InvoicePlan where type='"+ InvoicePlan.TYPE_FOREIGNPROXYDISINFECTION +"' and departCoding='"+ orgUnitCodesArr.get(0).toString() +"') "; + }else{ + Set orgUnitCodesSet = new HashSet(); + for (int j = 0; j < orgUnitCodesArr.size(); j++) { + orgUnitCodesSet.add(orgUnitCodesArr.get(j).toString()); + } + reportParams.extraQuery += " and ti.invoicePlanID in(select id from InvoicePlan where type='"+ InvoicePlan.TYPE_FOREIGNPROXYDISINFECTION +"' and " + + SqlUtils.getStringFieldInLargeCollectionsPredicate("departCoding", orgUnitCodesSet, "1=1") + +") "; + } + } + workQualityCollectionDataIndex.getCustomSterilizationAmountAllYear(year, list, reportParams, dataIndexNameForDisplay); + } + } + return list; + } + @Override + public List getWorkQualityCollectionListAllyear( + String year, String querySupplyRoom, Map params) + throws ParseException, SQLException { + return null; + } + + @Override + public List getWorkQualityCollectionList( + String year, String type, String querySupplyRoom, String month, + Map params) throws ParseException, SQLException { + // TODO Auto-generated method stub + return null; + } + /** + * 获取全年清洗机使用次数 + * @param year 年份 + * @param list + * @param querySupplyRoom 供应室 + * @param dataIndexNameForDisplay 指标显示名称 + * @throws SQLException + */ + private void getRinserUseCountOfMonthAllYear( + String year, + List list,String querySupplyRoom, String dataIndexNameForDisplay) throws SQLException { + WorkQualityCollection bean = new WorkQualityCollection(); + String queryYear = year + "-01-01 00:00:00"; + String nextYear = dataIndex.getNextYear(year) + " 00:00:00"; + String sql = "select " + dateQueryAdapter.dateConverAdapter3("wr.endDate","mm") + + " montrstr, count(*) from WashAndDisinfectRecord wr,Rinser r " + + "where wr.rinserId=r.id " + SqlUtils.get_InSql_Extra("wr.orgUnitCoding", querySupplyRoom) + + " and wr.endDate >= " + + dateQueryAdapter.dateAdapter(queryYear) + + " and wr.endDate <= " + + dateQueryAdapter.dateAdapter(nextYear) + + " group by " + dateQueryAdapter.dateConverAdapter3("wr.endDate","mm"); + ResultSet result = objectDao.executeSql(sql); + bean.setRowNum(list.size()+1); + bean.setTitle(dataIndexNameForDisplay); + String key = ""; + Integer amount = 0; + try { + Integer thisYearAmount = 0; + while (result.next()) { + key = result.getString(1); + // 月份以0开头的,去掉0 + if(key.length() > 1 && Integer.valueOf(key) < 10){ + key = Integer.valueOf(key).toString(); + } + amount = result.getInt(2); + if(amount != null & amount >0){ + thisYearAmount += amount; + } + dataIndex.setWorkQualityBeanAmount(bean, key, amount); + } + if(thisYearAmount > 0){ + dataIndex.setWorkQualityBeanAmount(bean, "今年", thisYearAmount); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(result); + } + list.add(bean); + } + /** + * 清洗机使用次数 两段时间数据的对比 + * @param startAndEndDays 开始时间和结束时间 + * @param list + * @param querySupplyRoom 供应室 + * @param dataIndexNameForDisplay 指标显示名称 + * @throws SQLException + */ + public void getRinserUseCountOfMonth( + Map> startAndEndDays, + List list,String querySupplyRoom, String dataIndexNameForDisplay) throws SQLException { + WorkQualityCollection bean = new WorkQualityCollection(); + for (String key : startAndEndDays.keySet()) { + String startDay = null; + String endDay = null; + Map innerMap = startAndEndDays.get(key); + for (String keyOfInnerMap : innerMap.keySet()) { + startDay = keyOfInnerMap; + endDay = innerMap.get(keyOfInnerMap); + } + String sql = "select count(*) from WashAndDisinfectRecord wr,Rinser r " + + "where wr.rinserId=r.id " + + SqlUtils.get_InSql_Extra("wr.orgUnitCoding", querySupplyRoom) + + " and wr.endDate >= " + + dateQueryAdapter.dateAdapter(startDay) + + " and wr.endDate <= " + + dateQueryAdapter.dateAdapter(endDay); + bean.setRowNum(list.size()+1); + bean.setTitle(StringUtils.isNotBlank(dataIndexNameForDisplay)?dataIndexNameForDisplay:"清洗机使用炉次"); + Integer amount = 0; + ResultSet rs = objectDao.executeSql(sql); + try { + while (rs.next()) { + amount = rs.getInt(1); + dataIndex.setWorkQualityBeanAmount(bean, key, amount); + } + } catch (SQLException e) { + throw e; + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + } + if (startAndEndDays.size() != 1 || bean.getAmount().intValue() != 0) { + list.add(bean); + } + } +} +