Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r35793 -r35794 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 35793) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 35794) @@ -182,6 +182,8 @@ import com.forgon.disinfectsystem.jasperreports.util.MonthReportHelper; import com.forgon.disinfectsystem.jasperreports.util.RealTimeBulletinBoardWorkloadHelper; import com.forgon.disinfectsystem.jasperreports.util.TousseWorkLoadDataForDLZXYYHelper; +import com.forgon.disinfectsystem.jasperreports.util.YearWorkloadReportHelper; +import com.forgon.disinfectsystem.jasperreports.util.YearWorkloadReportSpecialHelper; import com.forgon.disinfectsystem.packing.service.PackingManager; import com.forgon.disinfectsystem.qualitymonitoring.definition.service.QualityMonitoringDefinitionManager; import com.forgon.disinfectsystem.recyclingapplication.service.InvoicePlanManager; @@ -312,6 +314,11 @@ private MonthReportGroupBySterilizationModeHelper monthReportGroupBySterilizationModeHelper; @Autowired private RealTimeBulletinBoardWorkloadHelper realTimeBulletinBoardWorkloadHelper; + @Autowired + private YearWorkloadReportSpecialHelper yearWorkloadReportSpecialHelper; + @Autowired + private YearWorkloadReportHelper yearWorkloadReportHelper; + public void setPackingManager(PackingManager packingManager) { this.packingManager = packingManager; } @@ -356,23 +363,6 @@ } - public String getNextMonth(String year,String mm) { - Calendar c = Calendar.getInstance(); - c.set(Integer.parseInt(year), Integer.parseInt(mm), 1); - //c.add(Calendar.MONTH, 1); - return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()); - } - /** - * 获取一个月中的天数 - * @param year - * @param mm - * @return - */ - private int getDayCountOfMonth(String year,String mm) { - Calendar c = Calendar.getInstance(); - c.set(Integer.parseInt(year), Integer.parseInt(mm) - 1, 1); - return c.getActualMaximum(Calendar.DAY_OF_MONTH); - } /** * 消毒供应中心年度各月份清洗不合格率统计 @@ -1129,7 +1119,7 @@ String queryYear = dateQueryAdapter.dateAdapter(year + "-01-01 00:00:00"); String nextYear = dateQueryAdapter.dateAdapter(DataIndex.getNextYear(year) + " 00:00:00"); String monthlyStr = dateQueryAdapter.dateConverAdapter3("i.sendTime","mm"); - Map endoscopicMap = getEndoscopicMap(monthlyStr, queryYear, nextYear, departCoding, true); + Map endoscopicMap = dataIndex.getEndoscopicMap(monthlyStr, queryYear, nextYear, departCoding, true); return getEveryMonthAmount(endoscopicMap, dataIndexNameForDisplay); } return null; @@ -1156,48 +1146,6 @@ return getEveryMonthAmount(map, dataIndexNameForDisplay); } /** - * 获取处理腔镜器械总件数map - * @param monthlyStr 时间分组 - * @param startDate 开始时间 - * @param endDate 结束时间 - * @param departCoding 供应室 - * @param monthNotBeZero 月份是否不要0 - * @return - */ - private Map getEndoscopicMap(String monthlyStr, String startDate, String endDate, String departCoding, boolean monthNotBeZero){ - Map endoscopicMap = new HashMap();//内窥镜map - String sql = " select sum(tdc.amount) amount,"+ monthlyStr +" monthStr from Invoice i,TousseInstance ti,TousseDefinition td,(select td.name tdName, sum(mi.count) amount from MaterialInstance mi,MaterialDefinition md, tousseDefinition td " - + " where mi.materialDefinition_id=md.id and mi.tousse_id=td.id and td.forDisplay=1 " - + "and md.type like '%腔镜%' " - + "group by td.name) tdc " - + " where i.id=ti.invoice_id and ti.tousseDefinition_id=td.id " - + " and tdc.tdName = td.name " - + " and ti.orgUnitCoding='" + departCoding + "' " - + " and i.sendTime between " - + startDate + " and " - + endDate - + " group by " - + monthlyStr; - ResultSet rs = null; - try { - rs = objectDao.executeSql(sql); - while (rs.next()) { - Integer amount = rs.getInt("amount"); - String month = rs.getString("monthStr"); - // 月份以0开头的,去掉0 如果是年月日 则不可转换为数字 不用去掉0 - if(monthNotBeZero && month.startsWith("0") && month.length() > 1 && Integer.valueOf(month) < 10){ - month = Integer.valueOf(month).toString(); - } - endoscopicMap.put(month, amount); - } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(rs); - } - return endoscopicMap; - } - /** * 器械包次日下送发生率 * * @return @@ -3977,799 +3925,7 @@ */ @Override public List getYearWorkloadReport(String year, String queryMonth, String querySupplyRoom,boolean isAddEndoscopic,boolean isStatisticDisposableGoodsSendAmount, Map parametMap) { - //读取配置的数据 - String dataConfigStr = CssdUtils.getSystemSetConfigByName("dataIndexConfigurationOfYearWorkloadReport"); - JSONArray dataConfigArr = null; - if(StringUtils.isBlank(dataConfigStr)){ - dataConfigStr = "[{ \"dataIndexNameForDisplay\": \"处理器械总件数\", \"dataIndexSource\": \"处理器械总件数\" }" - + ",{ \"dataIndexNameForDisplay\": \"处理外来手术器械总件数\", \"dataIndexSource\": \"处理外来手术器械总件数\" }" - + ",{ \"dataIndexNameForDisplay\": \"消毒物品数量\", \"dataIndexSource\": \"消毒物品数量\" }" - + ",{ \"dataIndexNameForDisplay\": \"灭菌无菌包数\", \"dataIndexSource\": \"复用性灭菌物品总件数\" }" - + ",{ \"dataIndexNameForDisplay\": \"灭菌外来手术器械包数\", \"dataIndexSource\": \"灭菌外来手术器械包数\" }" - + ",{ \"dataIndexNameForDisplay\": \"灭菌器使用炉次\", \"dataIndexSource\": \"灭菌器使用炉次\" }" - + ",{ \"dataIndexNameForDisplay\": \"生物监测次数\", \"dataIndexSource\": \"生物监测次数\" }" - + ",{ \"dataIndexNameForDisplay\": \"器械包发放数量\", \"dataIndexSource\": \"复用性物品发货数量\" }" - + ",{ \"dataIndexNameForDisplay\": \"一次性物品发放数量\", \"dataIndexSource\": \"一次性物品发放数量\" }]"; - } - Map numAndOrgUnitCode = new HashMap();//序号和核算月报科室编码map 可配多个科室 - Set orgUnitCodes = new HashSet();//核算月报的科室编码 - Map numAndAdverseEventRecord = new HashMap(); //序号和不良事件列map 可多种事件 - Map uniqueDataIndexSources = new HashMap(); //唯一的指标 多配只有一个生效 - String sterilizerUseCountCn = "灭菌器使用炉次";//灭菌炉使用次数显示名 - Set dataIndexSources = new HashSet(); - if(StringUtils.isNotBlank(dataConfigStr)){ - dataConfigArr = JSONArray.fromObject(dataConfigStr); - for (int i = 0; i < dataConfigArr.size(); i++) { - JSONObject dataConfig = (JSONObject)dataConfigArr.get(i); - String dataIndexSource = dataConfig.optString("dataIndexSource"); - dataIndexSources.add(dataIndexSource); - JSONObject titleObj = new JSONObject(); - if("灭菌器使用炉次".equals(dataIndexSource)){ - sterilizerUseCountCn = dataConfig.optString("dataIndexNameForDisplay"); - } - if("科室核算月报金额".equals(dataIndexSource)){ - orgUnitCodes.add(dataConfig.optString("orgUnitCode")); - numAndOrgUnitCode.put(i, dataConfig); - }else if("不良事件统计报表".equals(dataIndexSource)){ - String adverseEventName = dataConfig.optString("adverseEventName"); - if(AdverseEventRecord.EVENTNAME_FOREIGNTOUSSESENDTIMEOUT.equals(adverseEventName)){ - numAndAdverseEventRecord.put(i, dataConfig);//暂不支持其他的不良事件 - } - }else{ - uniqueDataIndexSources.put(i, dataConfig); - } - } - } - List list = new ArrayList(); - int dataSoureOfMaterialsCountOfToussesInReports = CssdUtils.getSystemSetConfigByNameInt("dataSoureOfMaterialsCountOfToussesInReports", 3); - String tiSterileEndTime = null; - Map yearMonthMap = new HashMap();//月份对应的年月map,用于报表显示 - String[] monthArr = null; - String mmOrdd = null; - String startDay = null; - String endDay = null; - if(StringUtils.isNotBlank(year) && StringUtils.isNotBlank(queryMonth)){ - mmOrdd = "dd"; - startDay = year + "-" + queryMonth + "-01 00:00:00"; - endDay = getNextMonth(year,queryMonth) + " 00:00:00"; - if(dbConnection.isSqlServer()){ - tiSterileEndTime = dateQueryAdapter.dateConverAdapter3("ti.sterileEndTime",mmOrdd); - }else if(dbConnection.isOracle()){ - tiSterileEndTime = dateQueryAdapter.dateConverAdapter3(dateQueryAdapter.stringFieldToDate("ti.sterileEndTime"),mmOrdd); - } - int count = getDayCountOfMonth(year,queryMonth); - monthArr = new String[count]; - for (int i = 1; i <= count; i++) { - String key = null; - if(i < 10){ - key = "0" + i; - }else{ - key = i + ""; - } - monthArr[i - 1] = key; - yearMonthMap.put(key, year + "-" + queryMonth + "-" + key); - } - }else{ - mmOrdd = "mm"; - startDay = year + "-01-01 00:00:00"; - endDay = dataIndex.getNextYear(year) + " 00:00:00"; - monthArr = new String[]{"01","02","03","04","05","06","07","08","09","10","11","12"};//月份,不同的数据库月份可能不一样 - if(dbConnection.isSqlServer()){ - tiSterileEndTime = dateQueryAdapter.dateConverAdapter3("ti.sterileEndTime",mmOrdd); - }else if(dbConnection.isOracle()){ - tiSterileEndTime = dateQueryAdapter.dateConverAdapter3(dateQueryAdapter.stringFieldToDate("ti.sterileEndTime"),mmOrdd); - } - for (int i = 0; i < monthArr.length; i++) { - yearMonthMap.put(monthArr[i], year + "-" + monthArr[i]); - } - } - Map totalTousseMap = new HashMap();//处理器械总件数 - Map totalForeignTousseMap = new HashMap();//处理外来手术器械总件数 - Map disinfectionMap = new HashMap();//消毒物品数 - Map sterileMap = new HashMap();//灭菌无菌包数 - Map sterileForeignMap = new HashMap();//灭菌外来手术器械包数 - Map> sterilizerUseAmountMap = new HashMap>();//灭菌炉使用次数map - Map> adverseEventRecordAmountMap = new HashMap>();//外来器械超时map - Map> monthReportPriceMap = new HashMap>();//核算月报map - Map tousseInvoiceSendMap = new HashMap();//器械包发放数量map - Map sterilizationRecordCountMap = new HashMap();//生物监测次数map - Map disposableGoodsSendMap = new HashMap();//一次性物品发放数量map - Map endoscopicMap = new HashMap();//内窥镜map - Map nextSendAmountMap = new HashMap();//下收下送map - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); - - Date startDate = null; - Date endDate = null; - Map amountTotalMap = new HashMap(); - Map priceTotalMap = new HashMap(); - try{ - startDate = dateFormat.parse(startDay); - endDate = dateFormat.parse(endDay); - }catch(Exception e){ - e.printStackTrace(); - } - //查询的时间段 - String betweenSql = String.format(" between %s and %s ", dateQueryAdapter.dateAdapter(startDay),dateQueryAdapter.dateAdapter(endDay)); - //数据库计算字符串长度的函数名 - //String sqlLengthFunctionName = DatabaseUtil.getSqlLengthFunctionName(dbConnection); - - ReportQueryParams params = new ReportQueryParams(objectDao); - params.betweenSql = betweenSql; - params.querySupplyRoom = querySupplyRoom; - params.isDisableIDCardSqlWithAliasOfTousseDefinitionIsTd = ""; - params.taskGroupSqlWithAliasOfTousseDefinitionIsTd = ""; - params.tousseGroupSqlWithAliasOfTousseDefinitionIsTd = ""; - params.tousseTypeAndPackageSizeSql = ""; - //params.sqlLengthFunctionName = sqlLengthFunctionName; - params.isGroup = true; - params.monthlyStr = dateQueryAdapter.dateConverAdapter3("wr.endDate",mmOrdd); - String sql = null; - if(dataIndexSources.contains("处理器械总件数")){ - // 处理器械总件数 - sql = String.format("select sum(tl.amount) amount, monthstr from (" - +dataIndex.getWorkAmountByMaterialSQL("清洗数量", params, dataSoureOfMaterialsCountOfToussesInReports) - + ") tl group by monthstr "); - ResultSet totalTousseRs = null; - try { - logger.debug("消毒供应中心年度工作量统计报表处理器械总件数查询:"+sql); - totalTousseRs = objectDao.executeSql(sql); - while (totalTousseRs.next()) { - Integer totalTousseAmount = totalTousseRs.getInt("amount"); - String month = DateTools.getSpliceZeroString(totalTousseRs.getString("monthStr")); - totalTousseMap.put(month, totalTousseAmount); - } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(totalTousseRs); - } - } - // 处理外来器械总件数 - params.tousseTypes = TousseDefinition.PACKAGE_TYPE_FOREIGN; - params.tousseTypeAndPackageSizeSql = DataIndex.getTousseTypesAndPackageSizesFilterSQL(TousseDefinition.PACKAGE_TYPE_FOREIGN, null); - if(dataIndexSources.contains("处理外来手术器械总件数")){ - sql = String.format("select sum(tl.amount) amount, monthstr from (" - +dataIndex.getWorkAmountByMaterialSQL("清洗数量", params, dataSoureOfMaterialsCountOfToussesInReports) - + ") tl group by monthstr "); - ResultSet totalForeignTousseRs = null; - try { - logger.debug("消毒供应中心年度工作量统计报表处理外来器械总件数查询:"+sql); - totalForeignTousseRs = objectDao.executeSql(sql); - while (totalForeignTousseRs.next()) { - Integer totalForeignTousseAmount = totalForeignTousseRs.getInt("amount"); - String month = DateTools.getSpliceZeroString(totalForeignTousseRs.getString("monthStr")); - totalForeignTousseMap.put(month, totalForeignTousseAmount); - } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(totalForeignTousseRs); - } - } - // 清空参数 - params.tousseTypes = ""; - params.tousseTypeAndPackageSizeSql = ""; - //消毒物品数量 - params.tousseTypeAndPackageSizeSql = DataIndex - .getTousseTypesAndPackageSizesFilterSQL( - TousseDefinition.PACKAGE_TYPE_DISINFECTION, null); - String monthlyStr = null; - int statisticSourceOfDisinfectGoodsAmount = CssdUtils.getSystemSetConfigByNameInt("statisticSourceOfDisinfectGoodsAmount", 1); - String disinfectionSql = ""; - params.tousseTypes = TousseDefinition.PACKAGE_TYPE_DISINFECTION; - if(statisticSourceOfDisinfectGoodsAmount == 2){ - monthlyStr = dateQueryAdapter.dateConverAdapter3("i.sendTime",mmOrdd); - params.extraSelectColumns = "," + monthlyStr + "monthstr"; - params.extraGroupBy = ""; - params.groupBySql = " group by " + monthlyStr; - disinfectionSql = String.format("select sum(tl.amount) amount,monthstr from (" - +dataIndex.getWorkAmountByMaterialSQL("发货数量", params, dataSoureOfMaterialsCountOfToussesInReports) - + ") tl group by monthstr"); - }else if(statisticSourceOfDisinfectGoodsAmount == 3){ - monthlyStr = dateQueryAdapter.dateConverAdapter3("ti.operationTime",mmOrdd); - params.extraGroupBy = ""; - params.extraSelectColumns = ""; - params.monthlyStr = monthlyStr; - disinfectionSql = String.format("select sum(tl.amount) amount,monthstr from (" - + dataIndex.getWorkAmountByPackageSQL("配包数量", params) - + ") tl group by monthstr"); - }else if(statisticSourceOfDisinfectGoodsAmount == 4){ - monthlyStr = dateQueryAdapter.dateConverAdapter3("ti.operationTime",mmOrdd); - params.extraSelectColumns = "," + monthlyStr + "monthstr"; - params.extraGroupBy = monthlyStr; - disinfectionSql = String.format("select sum(tl.amount) amount,monthstr from (" - +dataIndex.getWorkAmountByMaterialSQL("配包数量", params, dataSoureOfMaterialsCountOfToussesInReports) - + ") tl group by monthstr"); - }else{ - monthlyStr = dateQueryAdapter.dateConverAdapter3("i.sendTime",mmOrdd); - params.extraSelectColumns = "," + monthlyStr + "monthstr"; - params.groupBySql = " group by " + monthlyStr; - params.extraGroupBy = monthlyStr; - disinfectionSql = String.format("select sum(tl.amount) amount,monthstr from (" - +dataIndex.getWorkAmountByPackageSQL("发货数量", params) - + ") tl group by monthstr"); - } - if(dataIndexSources.contains("消毒物品数量")){ - ResultSet disinfectionRs = null; - try { - logger.debug("消毒供应中心年度工作量统计报表消毒物品数查询:"+disinfectionSql); - disinfectionRs = objectDao.executeSql(disinfectionSql); - while (disinfectionRs.next()) { - Integer disinfectionAmount = disinfectionRs.getInt("amount"); - String month = DateTools.getSpliceZeroString(disinfectionRs.getString("monthStr")); - disinfectionMap.put(month, disinfectionAmount); - } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(disinfectionRs); - } - } - params.tousseTypes = ""; - params.monthlyStr = tiSterileEndTime; - params.extraSelectColumns = ""; - params.groupBySql = ""; - // 灭菌无菌包数 - params.tousseTypeAndPackageSizeSql = ""; - params.extraGroupBy = ""; - if(dataIndexSources.contains("复用性灭菌物品总件数")){ - String sterileSql = String.format("select sum(tl.amount) amount,monthstr from (" - +dataIndex.getWorkAmountByPackageSQL("灭菌数量", params) - + ") tl group by monthstr"); - ResultSet sterileRs = null; - try { - logger.debug("消毒供应中心年度工作量统计报表灭菌无菌包数查询:"+sterileSql); - sterileRs = objectDao.executeSql(sterileSql); - while (sterileRs.next()) { - Integer sterilizaAmount = sterileRs.getInt("amount"); - String monthstr = DateTools.getSpliceZeroString(sterileRs.getString("monthStr")); - sterileMap.put(monthstr, sterilizaAmount); - } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(sterileRs); - } - } - // 灭菌外来手术器械包数 - params.tousseTypes = TousseDefinition.PACKAGE_TYPE_FOREIGN + "," + TousseDefinition.PACKAGE_TYPE_SPLIT; - params.tousseTypeAndPackageSizeSql = DataIndex - .getTousseTypesAndPackageSizesFilterSQL( - TousseDefinition.PACKAGE_TYPE_FOREIGN + "," - + TousseDefinition.PACKAGE_TYPE_SPLIT, null); - if(dataIndexSources.contains("灭菌外来手术器械包数")){ - ResultSet sterileForeignRs = null; - try { - String sterileForeignSql = String.format("select sum(tl.amount) amount,monthstr from (" - +dataIndex.getWorkAmountByPackageSQL("灭菌数量", params) - + ") tl group by monthstr"); - logger.debug("消毒供应中心年度工作量统计报表灭菌外来手术器械包数查询:"+sterileForeignSql); - sterileForeignRs = objectDao.executeSql(sterileForeignSql); - while (sterileForeignRs.next()) { - Integer sterilizaForeignAmount = sterileForeignRs.getInt("amount"); - String monthstr = DateTools.getSpliceZeroString(sterileForeignRs.getString("monthStr")); - sterileForeignMap.put(monthstr, sterilizaForeignAmount); - } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(sterileForeignRs); - } - } - - // 清空过滤条件 - params.tousseTypes = ""; - params.tousseTypeAndPackageSizeSql = ""; - startDay = dateQueryAdapter.dateAdapter(startDay); - endDay = dateQueryAdapter.dateAdapter(endDay); - monthlyStr = dateQueryAdapter.dateConverAdapter3("sr.enddate",mmOrdd); - //获取所有灭菌炉分组 - if(dataIndexSources.contains("灭菌器使用炉次")){ - String sql3 = "select count(*) amount,s.ownGroup,"+ monthlyStr +" monthStr from SterilizationRecord sr,Sterilizer s where " - + " sr.sterilizer_id = s.id and (sr.status = '灭菌完成' or sr.status = '灭菌失败') and sr.enddate between " - + startDay + " and " + endDay - + SqlUtils.get_InSql_Extra("sr.orgUnitCoding", querySupplyRoom) - + "group by s.ownGroup," - + monthlyStr; - ResultSet rs3 = null; - try { - logger.debug("消毒供应中心年度工作量统计报表灭菌炉使用次数查询:"+sql3); - rs3 = objectDao.executeSql(sql3); - while (rs3.next()) { - Integer amount5 = rs3.getInt("amount"); - String ownGroup = rs3.getString("ownGroup"); - String monthstr = DateTools.getSpliceZeroString(rs3.getString("monthStr")); - Map itemMap = null; - if(sterilizerUseAmountMap.containsKey(ownGroup)){ - itemMap = sterilizerUseAmountMap.get(ownGroup); - }else{ - itemMap = new HashMap(); - sterilizerUseAmountMap.put(ownGroup, itemMap); - } - itemMap.put(monthstr, amount5); - } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(rs3); - } - int ownGroupSize = 0; - if(MapUtils.isNotEmpty(sterilizerUseAmountMap)){ - ownGroupSize = sterilizerUseAmountMap.size(); - for (Entry> entry : sterilizerUseAmountMap.entrySet()) { - String ownGroup = entry.getKey(); - String columnName5 = sterilizerUseCountCn + " (" + ownGroup + ")"; - Map ownGroupMap = entry.getValue(); - for (int i = 0; i < monthArr.length; i++) { - String month = monthArr[i]; - Integer amount = 0; - if(ownGroupMap.containsKey(month)){ - amount = ownGroupMap.get(month); - amountTotalMap.put(columnName5, MathTools.add(amount - , amountTotalMap.get(columnName5)).intValue()); - } - YearWorkloadBean bean5 = new YearWorkloadBean(i,yearMonthMap.get(month), 1, columnName5, amount); - list.add(bean5); - } - } - } - } - // 器械包发放数量 - params.includeTousses = true; - params.includeDisposableGoods = false; - monthlyStr = dateQueryAdapter.dateConverAdapter3("i.sendTime",mmOrdd); - params.extraSelectColumns = "," + monthlyStr + " monthStr "; - params.isGroup = true; - params.extraGroupBy = monthlyStr; - if(dataIndexSources.contains("复用性物品发货数量")){ - String tousseSendSql = String.format("select sum(tl.amount) amount,monthStr from (" - +dataIndex.getWorkAmountByPackageSQL("发货数量", params) - + ") tl group by monthStr"); - ResultSet tousseInvoiceSendRs = null; - try { - logger.debug("消毒供应中心年度工作量统计报表器械包发放数量查询:"+tousseSendSql); - tousseInvoiceSendRs = objectDao.executeSql(tousseSendSql); - while (tousseInvoiceSendRs.next()) { - Integer tousseInvoiceSendAmount = tousseInvoiceSendRs.getInt("amount"); - String month = DateTools.getSpliceZeroString(tousseInvoiceSendRs.getString("monthStr")); - tousseInvoiceSendMap.put(month, tousseInvoiceSendAmount); - } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(tousseInvoiceSendRs); - } - } - - if(dataIndexSources.contains("生物监测次数")){ - ResultSet sterilizationRecordCountRs = null; - try { - String monthStr = dateQueryAdapter.dateConverAdapter3("sr.biologicalMonitoringEndDate",mmOrdd); - String sterilizationRecordCountSql = "select count(*) count,"+ monthStr +" monthStr from "+ SterilizationRecord.class.getSimpleName() +" sr where sr.biologyResult in('合格','不合格') and sr.orgUnitCoding='"+ querySupplyRoom +"' and sr.biologicalMonitoringEndDate between " + startDay +" and " +endDay + " group by " + monthStr; - logger.debug("消毒供应中心年度工作量统计报表灭菌记录中的生物监测结果为合格或不合格的灭菌记录的条数查询:"+ sterilizationRecordCountSql); - sterilizationRecordCountRs = objectDao.executeSql(sterilizationRecordCountSql); - while (sterilizationRecordCountRs.next()) { - Integer sterilizationRecordCount = sterilizationRecordCountRs.getInt("count"); - String month = DateTools.getSpliceZeroString(sterilizationRecordCountRs.getString("monthStr")); - sterilizationRecordCountMap.put(month, sterilizationRecordCount); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - DatabaseUtil.closeResultSetAndStatement(sterilizationRecordCountRs); - } - } - - // 是否统计一次性物品发放数量 - if (dataIndexSources.contains("一次性物品发放数量")){ - params.includeTousses = false; - params.includeDisposableGoods = true; - - String disposableGoodsSendSql = String.format("select sum(tl.amount) amount,monthStr from (" - +dataIndex.getWorkAmountByPackageSQL("发货数量", params) - + ") tl group by monthStr"); - ResultSet disposableGoodsSendRs = null; - try { - logger.debug("消毒供应中心年度工作量统计报表一次性物品发放数量查询:"+disposableGoodsSendSql); - disposableGoodsSendRs = objectDao.executeSql(disposableGoodsSendSql); - while (disposableGoodsSendRs.next()) { - Integer disposableGoodsInvoiceSendAmount = disposableGoodsSendRs.getInt("amount"); - String month = DateTools.getSpliceZeroString(disposableGoodsSendRs.getString("monthStr")); - disposableGoodsSendMap.put(month, disposableGoodsInvoiceSendAmount); - } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(disposableGoodsSendRs); - } - } - // 判断是否需要增加腔镜器械和下收下送数量的统计 - if(dataIndexSources.contains("处理腔镜器械总件数(材料类型为腔镜)")){ - endoscopicMap = getEndoscopicMap(monthlyStr, startDay, endDay, querySupplyRoom,false); - } - if(dataIndexSources.contains("下收下送次数(中六模式)")){ - String departs = ""; - GoodsOption goodsOption = goodsOptionManager.getGoodsOption(GoodsOption.MODEL_SURGICALINSTRUMENTS_DEPT, null); - if (goodsOption != null) { - String value = goodsOption.getValue(); - if(StringUtils.isNotBlank(value)){ - String[] nameArray = value.split(";"); - for (int j = 0; j < nameArray.length; j++) { - String name = nameArray[j]; - if(StringUtils.isNotBlank(departs)){ - departs += ","; - } - departs += "'" + name + "'"; - } - } - } - String departSql = null; - if(StringUtils.isBlank(departs)){ - departs = "''";//产品说没有值就不查了.保持上个版本的逻辑不变 - } - monthlyStr = dateQueryAdapter.dateConverAdapter3("rr.recyclingTime",mmOrdd); - String sql8 = " select count(*) amount," - + monthlyStr - + " monthStr from RecyclingRecord rr " - + " where rr.depart in ("+ departs + ")" - + " and rr.orgUnitCoding='" + querySupplyRoom + "' " - + " and rr.recyclingTime between " + startDay + " and " + endDay - + " group by " - + monthlyStr; - ResultSet rs8 = null; - try { - logger.debug("消毒供应中心年度工作量统计报表下收下送数量查询:"+sql8); - rs8 = objectDao.executeSql(sql8); - while (rs8.next()) { - Integer amount8 = rs8.getInt("amount"); - String month = DateTools.getSpliceZeroString(rs8.getString("monthStr")); - nextSendAmountMap.put(month, amount8); - } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(rs8); - } - } - //核算月报 - if(orgUnitCodes.size() > 0){ - monthlyStr = dateQueryAdapter.dateConverAdapter3("tempTable.sendTime",mmOrdd); - String monthReportSql = "select sum(tempTable.totalPrice) totalPrice,tempTable.settleAccountsDepartCoding, " - + monthlyStr - + " monthstr from (" - + getMonthReportSql() - + ") tempTable where " - + SqlUtils.getStringFieldInLargeCollectionsPredicate("tempTable.settleAccountsDepartCoding", orgUnitCodes) - + " and tempTable.orgUnitCoding='" + querySupplyRoom + "' " - + " and tempTable.sendTime between " + startDay + " and " + endDay - + " group by settleAccountsDepartCoding, " - + monthlyStr; - ResultSet monthReportRs = null; - try { - logger.debug("消毒供应中心年度工作量统计报表科室核算月报金额查询:"+monthReportSql); - monthReportRs = objectDao.executeSql(monthReportSql); - while (monthReportRs.next()) { - Double totalPrice = monthReportRs.getDouble("totalPrice"); - String month = DateTools.getSpliceZeroString(monthReportRs.getString("monthStr")); - String settleAccountsDepartCoding = monthReportRs.getString("settleAccountsDepartCoding"); - Map monthReportMap = null; - if(monthReportPriceMap.containsKey(settleAccountsDepartCoding)){ - monthReportMap = monthReportPriceMap.get(settleAccountsDepartCoding); - }else{ - monthReportMap = new HashMap(); - monthReportPriceMap.put(settleAccountsDepartCoding, monthReportMap); - } - monthReportMap.put(month, totalPrice); - } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(monthReportRs); - } - } - if(MapUtils.isNotEmpty(numAndAdverseEventRecord)){ - monthlyStr = dateQueryAdapter.dateConverAdapter3("ad.eventTime",mmOrdd); - String adverseEventRecordSql = "select count(*) amount,ad.timeoutHandType," - + monthlyStr - + " monthStr from " - + AdverseEventRecord.class.getSimpleName() - + " ad join "+ - InvoicePlan.class.getSimpleName() - +" ip on ip.id=ad.recyclingApplication_ID where ip.handleDepartCoding='" - + querySupplyRoom - +"' and ad.eventName='"+ - AdverseEventRecord.EVENTNAME_FOREIGNTOUSSESENDTIMEOUT - + "' and ip.applicationTime between " + startDay + " and " + endDay - + " group by ad.timeoutHandType," - + monthlyStr; - ResultSet adverseEventRecordRs = null; - try { - logger.debug("消毒供应中心年度工作量统计报表不良事件查询:"+adverseEventRecordSql); - adverseEventRecordRs = objectDao.executeSql(adverseEventRecordSql); - while (adverseEventRecordRs.next()) { - String month = DateTools.getSpliceZeroString(adverseEventRecordRs.getString("monthStr")); - Integer amount = adverseEventRecordRs.getInt("amount"); - String timeoutHandType = adverseEventRecordRs.getString("timeoutHandType"); - Map map = null; - if(adverseEventRecordAmountMap.containsKey(timeoutHandType)){ - map = adverseEventRecordAmountMap.get(timeoutHandType); - }else{ - map = new HashMap(); - adverseEventRecordAmountMap.put(timeoutHandType, map); - } - amountTotalMap.put(timeoutHandType, MathTools.add(amount, amountTotalMap.get(timeoutHandType)).intValue()); - map.put(month, amount); - } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(adverseEventRecordRs); - } - } - - //构建list,主要是没数据的月份也需要有YearWorkloadBean对象返回,所以没有在resultset里添加 - Set removeTitles = new HashSet(); - for (int i = 0; i < monthArr.length; i++) { - String month = monthArr[i]; - String yearMonth = yearMonthMap.get(month); - for(Entry entry : numAndAdverseEventRecord.entrySet()){ - Integer num = entry.getKey(); - JSONObject dataConfig = entry.getValue(); - String dataIndexSource = dataConfig.optString("dataIndexSource"); - String dataIndexNameForDisplay = dataConfig.optString("dataIndexNameForDisplay"); - String adverseEventName = dataConfig.optString("adverseEventName"); - if(adverseEventRecordAmountMap.size() == 0){ - removeTitles.add(AdverseEventRecord.EVENTNAME_FOREIGNTOUSSESENDTIMEOUT); - break; - } - int sumAmount = 0; - for(Entry> entry2 : adverseEventRecordAmountMap.entrySet()){ - String key = entry2.getKey(); - Map map = entry2.getValue(); - if(map.containsKey(month)){ - if(adverseEventRecordAmountMap.size() > 1){ - sumAmount = MathTools.add(sumAmount, map.get(month)).intValue(); - } - amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(map.get(month) - , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); - } - addYearWorkLoadBean(i, month, map, num, AdverseEventRecord.EVENTNAME_FOREIGNTOUSSESENDTIMEOUT + "_" + key, list, yearMonth); - } - if(adverseEventRecordAmountMap.size() > 1){ - YearWorkloadBean beanSum = new YearWorkloadBean(i, yearMonth, num, AdverseEventRecord.EVENTNAME_FOREIGNTOUSSESENDTIMEOUT + "_合计", sumAmount); - list.add(beanSum); - } - } - for(Entry entry : numAndOrgUnitCode.entrySet()){ - Integer num = entry.getKey(); - JSONObject dataConfig = entry.getValue(); - String orgUnitCode = dataConfig.optString("orgUnitCode"); - String dataIndexSource = dataConfig.optString("dataIndexSource"); - String dataIndexNameForDisplay = dataConfig.optString("dataIndexNameForDisplay"); - if(monthReportPriceMap.size() == 0){ - removeTitles.add(dataIndexSource); - break; - } - Map monthReportMap = monthReportPriceMap.get(orgUnitCode); - if(MapUtils.isEmpty(monthReportMap)){ - continue; - } - if(monthReportMap.containsKey(month)){ - priceTotalMap.put(dataIndexNameForDisplay, MathTools.add(monthReportMap.get(month) - , priceTotalMap.get(dataIndexNameForDisplay)).doubleValue()); - } - addYearWorkLoadBeanPrice(i, month, monthReportMap, num, dataIndexNameForDisplay, list, yearMonth); - } - for(Entry entry : uniqueDataIndexSources.entrySet()){ - Integer num = entry.getKey(); - JSONObject dataConfig = entry.getValue(); - String dataIndexSource = dataConfig.optString("dataIndexSource"); - String dataIndexNameForDisplay = dataConfig.optString("dataIndexNameForDisplay"); - if("处理器械总件数".equals(dataIndexSource)){ - if(MapUtils.isNotEmpty(totalTousseMap)){ - if(totalTousseMap.containsKey(month)){ - amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(totalTousseMap.get(month) - , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); - } - addYearWorkLoadBean(i, month, totalTousseMap, num, dataIndexNameForDisplay, list, yearMonth); - }else{ - removeTitles.add(dataIndexSource); - } - }else if("处理外来手术器械总件数".equals(dataIndexSource)){ - if(MapUtils.isNotEmpty(totalForeignTousseMap)){ - if(totalForeignTousseMap.containsKey(month)){ - amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(totalForeignTousseMap.get(month) - , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); - } - addYearWorkLoadBean(i, month, totalForeignTousseMap, num, dataIndexNameForDisplay, list, yearMonth); - }else{ - removeTitles.add(dataIndexSource); - } - }else if("消毒物品数量".equals(dataIndexSource)){ - if(MapUtils.isNotEmpty(disinfectionMap)){ - if(disinfectionMap.containsKey(month)){ - amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(disinfectionMap.get(month) - , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); - } - addYearWorkLoadBean(i, month, disinfectionMap, num, dataIndexNameForDisplay, list, yearMonth); - }else{ - removeTitles.add(dataIndexSource); - } - }else if("复用性灭菌物品总件数".equals(dataIndexSource)){ - if(MapUtils.isNotEmpty(sterileMap)){ - if(sterileMap.containsKey(month)){ - amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(sterileMap.get(month) - , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); - } - addYearWorkLoadBean(i, month, sterileMap, num, dataIndexNameForDisplay, list, yearMonth); - }else{ - removeTitles.add(dataIndexSource); - } - }else if("灭菌外来手术器械包数".equals(dataIndexSource)){ - if(MapUtils.isNotEmpty(sterileForeignMap)){ - if(sterileForeignMap.containsKey(month)){ - amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(sterileForeignMap.get(month) - , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); - } - addYearWorkLoadBean(i, month, sterileForeignMap, num, dataIndexNameForDisplay, list, yearMonth); - }else{ - removeTitles.add(dataIndexSource); - } - }else if("生物监测次数".equals(dataIndexSource)){ - if(MapUtils.isNotEmpty(sterilizationRecordCountMap)){ - if(sterilizationRecordCountMap.containsKey(month)){ - amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(sterilizationRecordCountMap.get(month) - , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); - } - addYearWorkLoadBean(i, month, sterilizationRecordCountMap, num, dataIndexNameForDisplay, list, yearMonth); - }else{ - removeTitles.add(dataIndexSource); - } - }else if("复用性物品发货数量".equals(dataIndexSource)){ - if(MapUtils.isNotEmpty(tousseInvoiceSendMap)){ - if(tousseInvoiceSendMap.containsKey(month)){ - amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(tousseInvoiceSendMap.get(month) - , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); - } - addYearWorkLoadBean(i, month, tousseInvoiceSendMap, num, dataIndexNameForDisplay, list, yearMonth); - }else{ - removeTitles.add(dataIndexSource); - } - }else if("一次性物品发放数量".equals(dataIndexSource)){ - if(MapUtils.isNotEmpty(disposableGoodsSendMap)){ - if(disposableGoodsSendMap.containsKey(month)){ - amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(disposableGoodsSendMap.get(month) - , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); - } - addYearWorkLoadBean(i, month, disposableGoodsSendMap, num, dataIndexNameForDisplay, list, yearMonth); - }else{ - removeTitles.add(dataIndexSource); - } - }else if("处理腔镜器械总件数(材料类型为腔镜)".equals(dataIndexSource)){ - if(MapUtils.isNotEmpty(endoscopicMap)){ - if(endoscopicMap.containsKey(month)){ - amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(endoscopicMap.get(month) - , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); - } - addYearWorkLoadBean(i, month, endoscopicMap, num, dataIndexNameForDisplay, list, yearMonth); - }else{ - removeTitles.add(dataIndexSource); - } - }else if("下收下送次数(中六模式)".equals(dataIndexSource)){ - String startMonthDay = year + "-" + month + "-01 00:00:00"; - String endMonthDay = null; - if (i == 11) { - endMonthDay = (Integer.parseInt(year) + 1) + "-01-01 00:00:00"; - }else{ - endMonthDay = year + "-" + (i + 2) + "-01 00:00:00"; - } - Date startMonthDate = null; - Date endMonthDate = null; - try{ - startMonthDate = dateFormat.parse(startMonthDay); - endMonthDate = dateFormat.parse(endMonthDay); - }catch(Exception e){ - e.printStackTrace(); - } - //下收下送次数 - Integer clinicAmount = 0; - if(startMonthDate != null && endMonthDate != null){ - Date nowDate = new Date(); - if(nowDate.after(endMonthDate)){ - // 当前时间在结束时间之后,获取改月的天数 - clinicAmount = getMaxDayByYearMonth(Integer.parseInt(year),i+1); - }else{ - if(nowDate.after(startMonthDate)){ - Calendar nowCalendar = Calendar.getInstance(); - Calendar startCalendar = Calendar.getInstance(); - nowCalendar.setTime(nowDate); - startCalendar.setTime(startMonthDate); - // 当前时间在开始时间和结束时间之间 去现在时间和开始时间差的天数 - clinicAmount = nowCalendar.get(Calendar.DAY_OF_YEAR) - startCalendar.get(Calendar.DAY_OF_YEAR); - } - } - } - Integer amount8 = null; - if(nextSendAmountMap.containsKey(month)){ - amount8 = nextSendAmountMap.get(month); - }else{ - amount8 = 0; - } - //数量=查询出来的数量+月的天数*4(每天去4个科室,如果一月有30天就去了120次) - amount8 = amount8 + clinicAmount*4; - YearWorkloadBean bean8 = new YearWorkloadBean(i, yearMonth, num, dataIndexNameForDisplay, amount8); - amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(amount8 - , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); - list.add(bean8); - } - } - } - //构建前台需要的列名和汇总信息 - JSONArray titleArr = new JSONArray(); - if(StringUtils.isNotBlank(dataConfigStr)){ - dataConfigArr = JSONArray.fromObject(dataConfigStr); - for (int i = 0; i < dataConfigArr.size(); i++) { - JSONObject dataConfig = (JSONObject)dataConfigArr.get(i); - String dataIndexSource = dataConfig.optString("dataIndexSource"); - if(removeTitles.contains(dataIndexSource)){ - continue; - } - if("灭菌器使用炉次".equals(dataIndexSource)){ - for (String ownGroup : sterilizerUseAmountMap.keySet()) { - JSONObject obj = new JSONObject(); - String key = sterilizerUseCountCn + " (" + ownGroup + ")"; - obj.put("title", key); - obj.put("sumAmount", amountTotalMap.get(key)); - titleArr.add(obj); - } - }else if("不良事件统计报表".equals(dataIndexSource)){ - if(adverseEventRecordAmountMap.size() == 0){ - continue; - } - String[] childrens = null; - String[] sumAmounts = null; - if(adverseEventRecordAmountMap.size() > 1){ - childrens = new String[adverseEventRecordAmountMap.keySet().size() + 1]; - sumAmounts = new String[adverseEventRecordAmountMap.keySet().size() + 1]; - }else{ - childrens = new String[adverseEventRecordAmountMap.keySet().size()]; - sumAmounts = new String[adverseEventRecordAmountMap.keySet().size()]; - } - int k = 0; - int sumAmount = 0; - for (String key : adverseEventRecordAmountMap.keySet()) { - sumAmounts[k] = amountTotalMap.get(key) + ""; - sumAmount = MathTools.add(sumAmount, amountTotalMap.get(key)).intValue(); - childrens[k] = key; - k++; - } - if(adverseEventRecordAmountMap.size() > 1){ - childrens[adverseEventRecordAmountMap.size()] = "合计"; - sumAmounts[adverseEventRecordAmountMap.size()] = sumAmount + ""; - } - JSONObject obj = new JSONObject(); - obj.put("children", childrens); - obj.put("sumAmount", sumAmounts); - obj.put("title", dataConfig.optString("dataIndexNameForDisplay")); - titleArr.add(obj); - } else if("科室核算月报金额".equals(dataIndexSource)){ - if(monthReportPriceMap.size() == 0){ - continue; - } - JSONObject obj = new JSONObject(); - obj.put("sumPrice", priceTotalMap.get(dataConfig.optString("dataIndexNameForDisplay"))); - obj.put("title", dataConfig.optString("dataIndexNameForDisplay")); - titleArr.add(obj); - } else { - JSONObject obj = new JSONObject(); - obj.put("sumAmount", amountTotalMap.get(dataConfig.optString("dataIndexNameForDisplay"))); - obj.put("title", dataConfig.optString("dataIndexNameForDisplay")); - titleArr.add(obj); - } - } - } - parametMap.put("titleArr", titleArr); - return list; + return yearWorkloadReportHelper.getYearWorkloadReport(year, queryMonth, querySupplyRoom, isAddEndoscopic, isStatisticDisposableGoodsSendAmount, parametMap); } @Override public List getCssdWorkloadReportData(String startDate, String endDate, boolean showDetails){ @@ -5202,522 +4358,17 @@ + ")"; return sql; } + /** - * 获取核算月报sql - * @return - */ - private String getMonthReportSql(){ - //发货(一次性物品) - String sql = "select '发货' bussinessType,i.sendTime,i.orgUnitCoding,i.settleAccountsDepartCoding,i.settleAccountsDepart,i.applicant " - + ",'一次性物品' type,dg.inventorySerialNumber,dg.name,dg.specification,di.batch batchNumber,di.amount,di.fluctuationPrice,di.amount*di.fluctuationPrice totalPrice,ip.projName proj_name,ip.projCode proj_code,warehouseName in_store_name,warehouseID in_store_code " - + "from invoice i " - + "join DiposableGoodsItem di on di.invoice_id=i.id " - + "join DisposableGoods dg on di.disposableGoodsID=dg.id " - + "left join invoicePlan ip on ip.id=i.invoicePlan_ID"; - //退货(一次性物品) - sql += " union all select '退货' bussinessType,rgr.returnTime sendtime,rgr.handleDepartCode orgUnitCoding,rgr.departCoding settleAccountsDepartCoding,rgr.depart settleAccountsDepart,rgr.operator applicant " - + ",'一次性物品' type,dg.inventorySerialNumber,dg.name,dg.specification,di.batch batchNumber,-1 * di.returnedAmount amount,di.fluctuationPrice price,-1 * di.returnedAmount * di.fluctuationPrice totalPrice,ip.projName proj_name,ip.projCode proj_code " - + ",rgr.warehouseName in_store_name,warehouseID in_store_code " - + "from ReturnGoodsRecord rgr " - + "join DiposableGoodsItem di on di.returnGoodsRecordID=rgr.id " - + "join DisposableGoods dg on dg.id=di.disposableGoodsID " - + "left join invoicePlan ip on ip.id=rgr.invoicePlanId"; - //领用(一次性物品) - sql += " union all select '领用' bussinessType,rr.time,rr.departCoding,rr.departCoding settleAccountsDepartCoding ,rr.depart settleAccountsDepart,rr.operator " - + ",'一次性物品' type,dg.inventorySerialNumber,dg.name,dg.specification,dgb.batchNumber batchNumber,rri.amount,rri.price,rri.price*rri.amount totalPrice, null,null " - + ",rr.warehouseName in_store_name,rr.warehouseId in_store_code " - + "from ReceiveRecord rr join receiveRecordItem rri on rr.id=rri.receiveRecord_id " - + "join disposablegoodsbatch dgb on dgb.id=rri.disposableGoodsBatchId " - + "join DisposableGoods dg on dg.id=dgb.diposablegoods_id " - + "where rri.type='一次性物品'"; - //盘亏出库 - sql += " union all select '盘亏出库' bussinessType,ge.time,ge.orgUnitCode,ge.orgUnitCode settleAccountsDepartCoding,ge.orgUnitName settleAccountsDepart,ge.operator " - + ",'一次性物品' type,dg.inventorySerialNumber,dg.name,dg.specification " - + ",dgb.batchNumber,gedgi.amount,gedgi.price,gedgi.amount * gedgi.price totalPrice,null,null " - + ",ge.warehouseName in_store_name,ge.warehouseID in_store_code " - + "from GodownEntry ge join GodownEntryDiposableGoodsItem gedgi on ge.id=gedgi.godownEntryID " - + "join DisposableGoods dg on dg.id=gedgi.disposableGoodsID " - + "join DisposableGoodsBatch dgb on dgb.id=gedgi.disposableGoodsBatchID " - + "where ge.subType='盘亏出库'"; - //调拨出库 - sql += " union all select '调拨出库' bussinessType,ge.time,ge.orgUnitCode,ge.targetOrgUnitCode settleAccountsDepartCoding,ge.targetOrgUnitName settleAccountsDepart,ge.operator " - + ",'一次性物品' type,dg.inventorySerialNumber,dg.name,dg.specification " - + ",gei.batchNumber,gei.amount,gei.cost,gei.amount * gei.cost totalPrice,null,null " - + ",ge.warehouseName in_store_name,ge.warehouseID in_store_code " - + "from GodownEntry ge join GodownEntryItem gei on ge.id=gei.godownEntry_id " - + "join DisposableGoods dg on dg.id=gei.disposableGoodsID " - + "where ge.subType='调拨出库'"; - //发货(器械包、敷料包、外来器械包、外部代理灭菌包) - sql += " union all select '发货' bussinessType,i.sendTime businessTime,i.orgUnitCoding,i.settleAccountsDepartCoding settleAccountsDepartCoding,i.settleAccountsDepart settleAccountsDepart " - + ",i.applicant,ii.tousseType,null,ii.tousseName,null,null " - + ",sum(ii.amount) amount,sum(ii.settlementPrice)/sum(ii.amount),sum(ii.settlementPrice),ip.projName proj_name,ip.projCode proj_code " - + ",i.warehouseName in_store_name,i.warehouseID in_store_code " - + "from invoice i join invoiceitem ii on i.id=ii.invoice_id " - + "join toussedefinition td on ii.toussedefinitionId=td.id " - + "left join invoicePlan ip on ip.id=i.invoicePlan_ID " - + "where ii.diposable='否' " - + "and ii.toussetype in ('器械包','敷料包','外来器械包','外来器械拆分小包','外部代理灭菌') " - + "group by i.sendTime,i.serialNumber,i.orgUnitCoding,i.settleAccountsDepartCoding,i.settleAccountsDepart " - + ",i.applicant,ii.tousseType,ii.tousseName" - //+ ",ti.price " - + " ,ip.projName,ip.projCode,i.warehouseName ,i.warehouseID"; - //发货(消毒物品) - sql += " union all select '发货' bussinessType,i.sendTime businessTime,i.orgUnitCoding,i.settleAccountsDepartCoding ,i.settleAccountsDepart " - + ",i.applicant,ii.tousseType,null,ii.tousseName,null,null,sum(ii.amount) amount,sum(ii.settlementPrice)/sum(ii.amount),sum(ii.settlementPrice),ip.projName proj_name,ip.projCode proj_code " - + ",i.warehouseName in_store_name,i.warehouseID in_store_code " - + "from invoice i join invoiceitem ii on i.id=ii.invoice_id " - + "left join invoicePlan ip on ip.id=i.invoicePlan_ID " - + "where ii.diposable='否' " - + "and ii.toussetype='消毒物品' " - + "group by i.sendTime,i.serialNumber,i.orgUnitCoding,i.settleAccountsDepartCoding,i.settleAccountsDepart " - + ",i.applicant,ii.tousseType,ii.tousseName,ip.projName ,ip.projCode ,i.warehouseName ,i.warehouseID"; - //自定义器械包(自定义器械包) - sql += " union all select '发货' bussinessType,i.sendTime,i.orgUnitCoding,i.settleAccountsDepartCoding,i.settleAccountsDepart " - + ",i.applicant,ii.tousseType,null,ii.tousseName,null,null,sum(ti.statisticsAmount),ti.price,sum(ti.price) totalPrice,ip.projName proj_name,ip.projCode proj_code,i.warehouseName in_store_name,i.warehouseID in_store_code " - + "from invoice i join invoiceitem ii on i.id=ii.invoice_id " - + "join toussedefinition td on ii.toussedefinitionId=td.id and ii.diposable='否' " - + "join TousseInstance ti on ti.toussedefinition_id=td.id and ti.invoice_id=i.id " - + "left join invoicePlan ip on ip.id=i.invoicePlan_ID " - + "where ii.diposable='否' and ii.toussetype = '自定义器械包' " - + "group by i.sendTime,i.serialNumber,i.orgUnitCoding,i.settleAccountsDepartCoding,i.settleAccountsDepart " - + ",i.applicant,ii.tousseType,ii.tousseName,ti.price " - + " ,ip.projName ,ip.projCode ,i.warehouseName ,i.warehouseID"; - //材料发货 - sql += " union all select '发货' bussinessType,mi.sendTime,mi.orgUnitCoding,mi.departCoding settleAccountsDepartCoding,mi.depart settleAccountsDepart " - + ",mi.sender,'材料' tousseType,md.inventorySerialNumber,md.name,md.specification,null batchNumber,mim.amount,mim.price,mim.amount * mim.price totalPrice,null,null,mi.warehouseName in_store_name,mi.warehouseId in_store_code " - + "from MaterialInvoice mi " - + "join MaterialItem mim on mim.materialInvoice_id=mi.id " - + "join MaterialDefinition md on mim.materialDefinitionId=md.id"; - //器械包退货(器械包、敷料包、消毒物品(整)、高值耗材) - sql += " union all select '退货' bussinessType,rgr.returnTime,rgr.handleDepartCode,rgr.departCoding settleAccountsDepartCoding,rgr.depart settleAccountsDepart " - + ",rgr.returnOfPeople,td.tousseType type,null,td.name,null,null batchNumber,-sum(rgi.amount) as amount, -sum(rgi.settlementPrice) fluctuationPrice,-sum(rgi.settlementPrice) totalPrice,ip.projName proj_name,ip.projCode proj_code " - + ",rgr.warehouseName in_store_name,rgr.warehouseID in_store_code " - + "from ReturnGoodsRecord rgr " - + "join ReturnGoodsItem rgi on rgr.id=rgi.returnGoodsRecord_ID " - + "join TousseDefinition td on td.id=rgi.tousseDefinition_id " - + " left join DisposableGoodsBatchStock dgbs on rgi.disposableGoodsBatchStockID=dgbs.id " - + "left join invoicePlan ip on ip.id=rgr.invoicePlanId " - + "where rgi.tousseDefinition_id is not null " - + "and (td.tousseType in ('器械包','敷料包') or (td.tousseType='消毒物品' and td.isApplyEntireTousse='是')) " - + "group by rgr.returnTime,rgr.id,rgr.handleDepartCode,rgr.departCoding,rgr.depart " - + ",rgr.returnOfPeople,td.tousseType,td.name,ip.projName ,ip.projCode ,rgr.warehouseName ,rgr.warehouseID "; - //器械包退货(消毒物品(拆)) - sql += " union all select '退货' bussinessType,rgr.returnTime,rgr.handleDepartCode,rgr.departCoding settleAccountsDepartCoding ,rgr.depart settleAccountsDepart " - + ",rgr.returnOfPeople,td.tousseType,null,td.name,null,null batchNumber,-1 * (select sum(mi.count) from MaterialInstance mi where mi.tousse_id=td.id),sum(ti.price)/(select sum(mi.count) from MaterialInstance mi where mi.tousse_id=td.id),-1 * sum(ti.price),ip.projName proj_name,ip.projCode proj_code " - + ",rgr.warehouseName in_store_name,rgr.warehouseID in_store_code " - + "from ReturnGoodsRecord rgr join ReturnGoodsItem rgi on rgr.id=rgi.returnGoodsRecord_ID " - + "join TousseDefinition td on td.id=rgi.tousseDefinition_id " - + "join TousseInstance ti on ti.tousseDefinition_id=td.id and ti.returnGoodsItem_ID=rgi.id " - + "join TousseDefinition td2 on td2.id=ti.tousseDefinition_id and td2.ancestorID=td.ancestorID " - + "left join invoicePlan ip on ip.id=rgr.invoicePlanId " - + "where rgi.tousseDefinition_id is not null and td.tousseType='消毒物品' and td.isApplyEntireTousse='否' " - + "group by rgr.returnTime,rgr.id,rgr.handleDepartCode,rgr.departCoding,rgr.depart " - + ",rgr.returnOfPeople,td.tousseType,td.id,td.name,ti.price,ip.projName ,ip.projCode ,rgr.warehouseName ,rgr.warehouseID "; - //材料退货 - sql += " union all select '退货' bussinessType,rmr.returnTime,rmr.handleDepartCode,rmr.departCoding settleAccountsDepartCoding,rmr.depart settleAccountsDepart " - + ",rmr.returnOfPeople,'材料' toussetype,md.inventorySerialNumber,md.name,md.specification,null batchNumber,-1 * mi.amount,mi.price,-1 * mi.amount * mi.price,null,null " - + ",rmr.warehouseName in_store_name,rmr.warehouseId in_store_code " - + "from ReturnMaterialRecord rmr join materialItem mi on mi.returnMaterialRecordID=rmr.id " - + "join MaterialDefinition md on mi.materialDefinitionId=md.id"; - //领用(材料) - sql += " union all select '领用' bussinessType,rr.time,rr.departCoding,rr.departCoding settleAccountsDepartCoding,rr.depart settleAccountsDepart, " - + "rr.operator,rri.type tousseType,md.inventorySerialNumber,md.name,md.specification,null batchNumber,rri.amount,rri.price,rri.settlementPrice,null,null,rr.warehouseName in_store_name,rr.warehouseId in_store_code " - + "from ReceiveRecord rr join receiveRecordItem rri on rr.id=rri.receiveRecord_id " - + "join MaterialDefinition md on md.id=rri.materialDefinition_id " - + "where rri.type='材料'"; - //盘亏出库材料 - sql += " union all select '盘亏出库' bussinessType,me.time,w.orgUnitCode,w.orgUnitCode settleAccountsDepartCoding,w.orgUnitName settleAccountsDepart " - + ",me.operator,'材料' tousseType,md.inventorySerialNumber,md.name,md.specification " - + ",null batchNumber,mei.amount,mei.cost,mei.amount * mei.cost,null,null,me.wareHouseName in_store_name,me.wareHouseId in_store_code " - + "from MaterialEntry me join MaterialEntryItem mei on me.id=mei.materialEntry_id " - + "join WareHouse w on w.id=me.wareHouseId " - + "join MaterialDefinition md on md.id=mei.materialDefinition_id " - + "where me.subType='盘亏出库'"; - //调拨出库材料 - sql += " union all select '调拨出库' bussinessType,me.time,w.orgUnitCode,targetW.orgUnitCode settleAccountsDepartCoding,targetW.orgUnitName settleAccountsDepart " - + ",me.operator,'材料' tousseType,md.inventorySerialNumber,md.name,md.specification " - + ",null batchNumber,mei.amount,mei.cost,mei.amount * mei.cost,null,null,me.wareHouseName in_store_name,me.wareHouseId in_store_code " - + "from MaterialEntry me join MaterialEntryItem mei on me.id=mei.materialEntry_id " - + "join WareHouse w on w.id=me.wareHouseId " - + "join WareHouse targetW on targetW.id=me.targetWareHouseId " - + "join MaterialDefinition md on md.id=mei.materialDefinition_id " - + "where me.subType='调拨出库'"; - //材料丢失报损补充 - sql += " union all select '丢失报损补充' bussinessType,case when medd.additionalTime is not null then medd.additionalTime else medd.operationTime end, " - + "medd.handleDepartCode,medd.departCode settleAccountsDepartCoding,medd.depart settleAccountsDepart,medd.additionalPerson " - + ",'材料' tousseType,md.inventorySerialNumber,md.name,md.specification,null batchNumber,medd.additionalAmount,medd.materialCost,medd.additionalAmount * medd.materialCost,null,null " - + ",medd.warehouseName in_store_name,medd.warehouseId in_store_code " - + "from MaterialErrorDamageDetail medd " - + "join MaterialDefinition md on md.id=medd.materialDefinitionId " - + "where additionalAmount > 0 and materialDefinitionId is not null"; - //标识牌丢失补充 - sql += " union all select '丢失报损补充' bussinessType,case when medd.additionalTime is not null then medd.additionalTime else medd.operationTime end, " - + "medd.handleDepartCode,medd.departCode settleAccountsDepartCoding,medd.depart settleAccountsDepart,medd.additionalPerson,'器械包标识牌' tousseType,md.inventorySerialNumber,md.name,md.specification,null batchNumber,medd.additionalAmount,medd.materialCost,medd.additionalAmount * medd.materialCost,null,null " - + ",medd.warehouseName in_store_name,medd.warehouseId in_store_code " - + "from MaterialErrorDamageDetail medd " - + "join MaterialDefinition md on md.id=medd.materialDefinitionId " - + "where additionalAmount > 0 and (materialDefinitionId is null or materialDefinitionId=0)"; - // 收费项目 - sql += " union all select '收费项目' bussinessType, chargeTime time ,ci.orgUnitCode orgUnitCoding,ci.orgUnitCode settleAccountsDepartCoding,ci.orgUnitName settleAccountsDepart,cr.operator, " - + "'收费项目' type, null inventorySerialNumber,ci.chargeItem name,null specification,null batchNumber,0 amount,ci.price fluctuationPrice, price totalPrice,null,null,null in_store_name, null in_store_code " - + "from ChargeRecordItem ci " - + "inner join ChargeRecord cr on cr.id=ci.chargeRecord_id "; - return sql; - } - /** - * 添加YearWorkLoadBean到YearWorkLoadBeanList,如果没有则添加的对象amount=0 - * @param rowSequence rowSequence - * @param month 月份 - * @param map key:年月 value:数量 - * @param columnSequence 列序号 - * @param columnName 列名 - * @param list YearWorkLoadBeanList - * @param 年月 报表显示用 - */ - private void addYearWorkLoadBean(Integer rowSequence ,String month, Map map, Integer columnSequence, String columnName, List list, String yearMonth){ - Integer amount = null; - if(map.containsKey(month)){ - amount = map.get(month); - }else{ - amount = 0; - } - YearWorkloadBean bean = new YearWorkloadBean(rowSequence ,yearMonth, columnSequence, columnName, amount); - list.add(bean); - } - private void addYearWorkLoadBeanPrice(Integer rowSequence ,String month, Map map, Integer columnSequence, String columnName, List list, String yearMonth){ - Double price = null; - if(map.containsKey(month)){ - price = map.get(month); - }else{ - price = 0.0; - } - YearWorkloadBean bean = new YearWorkloadBean(rowSequence ,yearMonth, columnSequence, columnName, price); - list.add(bean); - } - private void setColumnTotalAmount(Map map,String key,Integer amount){ - Integer t_amount = map.get(key); - if(t_amount == null){ - t_amount = 0; - } - map.put(key, t_amount + amount); - } - /** * 获取年度消毒供应中心指标工作量统计报表数据,东莞市中医院项目特殊的定制 * @param year 查询的年份 * @param querySupplyRoom 查询的供应室 * @return YearWorkloadBean的list集合 */ @Override public List getYearWorkloadReportSpecial(String year,String querySupplyRoom) { - List sterilerGroupList = httpOptionManager.getHttpOptionListById("sterilerGroup"); - List list = new ArrayList(); - Map yearMonthMap = new HashMap();//月份对应的年月map,用于报表显示 - String[] monthArr = null; - String mmOrdd = null; - String startDay = null; - String endDay = null; - mmOrdd = "mm"; - startDay = "'" + year + "-01-01 00:00:00'"; - String nextYear = dataIndex.getNextYear(year); - endDay = "'" + nextYear + " 00:00:00'"; - ReportQueryParams params = new ReportQueryParams(objectDao); - params.betweenSql = String.format(" between %s and %s ", dateQueryAdapter.dateAdapter(year + "-01-01 00:00:00"),dateQueryAdapter.dateAdapter(nextYear + " 00:00:00")); - params.querySupplyRoom = querySupplyRoom; - //params.sqlLengthFunctionName = DatabaseUtil.getSqlLengthFunctionName(dbConnection); - params.selectTousseType = false; - params.selectTousseName = false; - params.isGroup = true; - String statisticTousseWorkLoadIncludeDisposableGoodsAmountStr = CssdUtils.getSystemSetConfigByName("statisticTousseWorkLoadIncludeDisposableGoodsAmount"); - JSONObject statisticTousseWorkLoadIncludeDisposableGoodsAmountObj = null; - if(StringUtils.isNotBlank(statisticTousseWorkLoadIncludeDisposableGoodsAmountStr)){ - statisticTousseWorkLoadIncludeDisposableGoodsAmountObj = JSONObject.fromObject(statisticTousseWorkLoadIncludeDisposableGoodsAmountStr); - } - params.sterilizationModeSqlWithAliasOfTousseDefinitionIsTd = ""; - params.packageTypeSqlWithAliasOfTousseDefinitionIsTd = ""; - - monthArr = new String[]{"01","02","03","04","05","06","07","08","09","10","11","12"};//月份,不同的数据库月份可能不一样 - for (int i = 0; i < monthArr.length; i++) { - yearMonthMap.put(monthArr[i], year + "-" + monthArr[i]); - } - int dataSoureOfMaterialsCountOfToussesInReports = CssdUtils.getSystemSetConfigByNameInt("dataSoureOfMaterialsCountOfToussesInReports", 3); - - //清洗手术室器械总件数 不包含外来器械 - params.monthlyStr = dateQueryAdapter.dateConverAdapter3("wr.endDate","mm"); - params.applicationDepart="手术室"; - params.tousseTypeAndPackageSizeSql = " and tdc.tousseType<>'"+ TousseDefinition.PACKAGE_TYPE_FOREIGN +"' "; - String sql = String.format("select sum(tl.amount) amount, monthstr from (" - +dataIndex.getWorkAmountByMaterialSQL("清洗数量", params, dataSoureOfMaterialsCountOfToussesInReports) - + ") tl group by monthstr "); - Map operatingRoomWashMaterialAmountMap = dataIndex.getAmountAndDateBySql(sql); - //清洗临床科室物品总件数 回收科室不等于“手术室”的器械清洗总件数 - params.applicationDepart=""; - params.tousseTypeAndPackageSizeSql = ""; - params.extraQuery = " and ci.orgUnitName!='手术室' "; - sql = String.format("select sum(tl.amount) amount, monthstr from (" - +dataIndex.getWorkAmountByMaterialSQL("清洗数量", params, dataSoureOfMaterialsCountOfToussesInReports) - + ") tl group by monthstr "); - Map noOperatingRoomWashMaterialAmountMap = dataIndex.getAmountAndDateBySql(sql); - //清洗外来手术器械总件数 - params.extraQuery = " and ci.orgUnitName='手术室' "; - params.tousseTypeAndPackageSizeSql = " and td.tousseType='"+ TousseDefinition.PACKAGE_TYPE_FOREIGN +"' "; - sql = String.format("select sum(tl.amount) amount, monthstr from (" - +dataIndex.getWorkAmountByMaterialSQL("清洗数量", params, dataSoureOfMaterialsCountOfToussesInReports) - + ") tl group by monthstr "); - Map foreignMaterialAmountMap = dataIndex.getAmountAndDateBySql(sql); - //清洗器械总件数 = 清洗临床科室物品总件数 + 清洗手术室器械总件数 + 清洗外来手术器械总件数 - Map totalWashMaterialAmountMap = new HashMap(); - for(Entry entry : operatingRoomWashMaterialAmountMap.entrySet()){ - totalWashMaterialAmountMap.put(entry.getKey(), entry.getValue()); - } - for(Entry entry : noOperatingRoomWashMaterialAmountMap.entrySet()){ - String key = entry.getKey(); - if(totalWashMaterialAmountMap.containsKey(key)){ - totalWashMaterialAmountMap.put(key, MathTools.add(totalWashMaterialAmountMap.get(key), entry.getValue()).intValue()); - }else{ - totalWashMaterialAmountMap.put(key, entry.getValue()); - } - } - for(Entry entry : foreignMaterialAmountMap.entrySet()){ - String key = entry.getKey(); - if(totalWashMaterialAmountMap.containsKey(key)){ - totalWashMaterialAmountMap.put(key, MathTools.add(totalWashMaterialAmountMap.get(key), entry.getValue()).intValue()); - }else{ - totalWashMaterialAmountMap.put(key, entry.getValue()); - } - } - for (int i = 0; i < monthArr.length; i++) { - String month = monthArr[i]; - String yearMonth = yearMonthMap.get(month); - addYearWorkLoadBean(1, month, totalWashMaterialAmountMap, i, "清洗器械总件数", list, yearMonth); - addYearWorkLoadBean(3, month, noOperatingRoomWashMaterialAmountMap, i, "清洗临床科室物品总件数", list, yearMonth); - addYearWorkLoadBean(4, month, operatingRoomWashMaterialAmountMap, i, "清洗手术室器械总件数", list, yearMonth); - addYearWorkLoadBean(5, month, foreignMaterialAmountMap, i, "清洗外来手术器械总件数", list, yearMonth); - } - totalWashMaterialAmountMap = null; - noOperatingRoomWashMaterialAmountMap = null; - operatingRoomWashMaterialAmountMap = null; - foreignMaterialAmountMap = null; - // 包装外来手术器械总包数 二次回收的外来器械不统计 - String dateStr = dateQueryAdapter.dateConverAdapter3("rr.recyclingTime","mm"); - sql = "select sum(ri.amount) amount,"+ dateStr +" monthstr from RecyclingRecord rr join RecyclingItem ri on rr.id=ri.recyclingRecord_id join TousseDefinition td on td.id=ri.tousseDefinitionId " - + " join invoicePlan ip on rr.recyclingApplication_id=ip.id " - + " where td.tousseType= '" + TousseDefinition.PACKAGE_TYPE_FOREIGN + "'" - + " and rr.id = (select max(rr1.id) from RecyclingRecord rr1,ForeignTousseApplication fta1 where rr1.recyclingApplication_id=fta1.id and fta1.id=ip.id) " - + SqlUtils.getWhereSqlByfilterFieldAndStringValueAndSeparator("rr.orgUnitCoding", querySupplyRoom, ",") - + " and rr.recyclingTime between " + startDay +" and "+endDay - + " group by " + dateStr; - Map foreignAmountMap = dataIndex.getAmountAndDateBySql(sql); - for (int i = 0; i < monthArr.length; i++) { - String month = monthArr[i]; - String yearMonth = yearMonthMap.get(month); - addYearWorkLoadBean(20, month, foreignAmountMap, i, "包装外来手术器械总包数", list, yearMonth); - } - foreignAmountMap = null; - //处理湿化瓶总包数 数据获取为:包名称中包含“湿化瓶”字眼的器械包,按照回收的包数量统计 - sql = "select sum(ri.amount) amount,"+ dateStr +" monthstr from RecyclingRecord rr join RecyclingItem ri on rr.id=ri.recyclingRecord_id join TousseDefinition td on td.id=ri.tousseDefinitionId " - + " where td.name like '%湿化瓶%'" - + SqlUtils.getWhereSqlByfilterFieldAndStringValueAndSeparator("rr.orgUnitCoding", querySupplyRoom, ",") - + " and rr.recyclingTime between " + startDay +" and "+endDay - + " group by " + dateStr; - Map nameLikeHumidificationBottleAmountMap = dataIndex.getAmountAndDateBySql(sql); - for (int i = 0; i < monthArr.length; i++) { - String month = monthArr[i]; - String yearMonth = yearMonthMap.get(month); - addYearWorkLoadBean(28, month, nameLikeHumidificationBottleAmountMap, i, "处理湿化瓶总包数", list, yearMonth); - } - nameLikeHumidificationBottleAmountMap = null; - dateStr = dateQueryAdapter.dateConverAdapter3("wr.startDate","mm"); - //清洗机使用炉次”: - //数据获取为:所有清洗机的运作次数 - sql = "select count(*) amount,"+ dateStr +" monthstr from WashAndDisinfectRecord wr, Rinser r " - + " where r.id=wr.rinserId " - + " and wr.disinfectIdentification not like '%手工%' " - + SqlUtils.getWhereSqlByfilterFieldAndStringValueAndSeparator("wr.orgUnitCoding", querySupplyRoom, ",") - + " and wr.startDate between " + startDay +" and "+endDay - + " group by " + dateStr; - Map rinserAmountMap = dataIndex.getAmountAndDateBySql(sql); - for (int i = 0; i < monthArr.length; i++) { - String month = monthArr[i]; - String yearMonth = yearMonthMap.get(month); - addYearWorkLoadBean(21, month, rinserAmountMap, i, "清洗机使用炉次", list, yearMonth); - } - rinserAmountMap = null; - // 清洗消毒物品总件数: 消毒物品清洗件数 - params.applicationDepart=""; - params.extraQuery = ""; - params.tousseTypeAndPackageSizeSql = " and td.tousseType='" + TousseDefinition.PACKAGE_TYPE_DISINFECTION + "' "; - sql = String.format("select sum(tl.amount) amount, monthstr from (" - +dataIndex.getWorkAmountByMaterialSQL("清洗数量", params, dataSoureOfMaterialsCountOfToussesInReports) - + ") tl group by monthstr "); - Map washDisinfectMaterialAmountMap = dataIndex.getAmountAndDateBySql(sql); - for (int i = 0; i < monthArr.length; i++) { - String month = monthArr[i]; - String yearMonth = yearMonthMap.get(month); - addYearWorkLoadBean(22, month, washDisinfectMaterialAmountMap, i, "清洗消毒物品总件数", list, yearMonth); - } - washDisinfectMaterialAmountMap = null; - //处理敷料包总包数 统计敷料包的装配包数 - dateStr = dateQueryAdapter.dateConverAdapter3("pr.packTime","mm"); - String monthlyStr = dateQueryAdapter.dateConverAdapter3("ti.operationTime",mmOrdd); - params.monthlyStr = monthlyStr; - params.tousseTypeAndPackageSizeSql= " and td.tousseType = '" + TousseDefinition.PACKAGE_TYPE_DRESSING + "'"; - sql = String.format("select sum(tl.amount) amount, monthstr from (" - +dataIndex.getWorkAmountByPackageSQL("配包数量", params) - + ") tl group by monthstr "); - Map packDressingAmountMap = dataIndex.getAmountAndDateBySql(sql); - for (int i = 0; i < monthArr.length; i++) { - String month = monthArr[i]; - String yearMonth = yearMonthMap.get(month); - addYearWorkLoadBean(24, month, packDressingAmountMap, i, "处理敷料包总包数", list, yearMonth); - } - packDressingAmountMap = null; - // 处理敷料包总件数 敷料包类型,统计敷料包的装配件数 - params.extraSelectColumns = "," + params.monthlyStr + " monthStr "; - params.extraGroupBy = monthlyStr; - sql = String.format("select sum(tl.amount) amount, monthstr from (" - +dataIndex.getWorkAmountByMaterialSQL("配包数量", params, dataSoureOfMaterialsCountOfToussesInReports) - + ") tl group by monthstr "); - Map packDressingMaterialAmountMap = dataIndex.getAmountAndDateBySql(sql); - for (int i = 0; i < monthArr.length; i++) { - String month = monthArr[i]; - String yearMonth = yearMonthMap.get(month); - addYearWorkLoadBean(25, month, packDressingMaterialAmountMap, i, "处理敷料包总件数", list, yearMonth); - } - //待灭菌物品包装总数。统计除了消毒物品以外的所有类型的包的装配总数量,按包计算。 - params.tousseTypeAndPackageSizeSql= ""; - params.extraQuery = " and td.tousseType<>'"+ TousseDefinition.PACKAGE_TYPE_DISINFECTION +"' "; - params.extraSelectColumns = ""; - params.extraGroupBy = ""; - params.tousseTypes = ""; - sql = String.format("select sum(tl.amount) amount, monthstr from (" - +dataIndex.getWorkAmountByPackageSQL("配包数量", params) - + ") tl group by monthstr "); - Map packingAmountMap = dataIndex.getAmountAndDateBySql(sql); - params.extraQuery = ""; - //构建list,主要是没数据的月份也需要有YearWorkloadBean对象返回,所以没有在resultset里添加 - for (int i = 0; i < monthArr.length; i++) { - String month = monthArr[i]; - String yearMonth = yearMonthMap.get(month); - addYearWorkLoadBean(2, month, packingAmountMap, i, "待灭菌物品包装总数", list, yearMonth); - } - packingAmountMap = null; - params.includeTousses = true; - params.includeDisposableGoods = false; - monthlyStr = dateQueryAdapter.dateConverAdapter3("i.sendTime",mmOrdd); - params.extraSelectColumns = "," + monthlyStr + " monthStr "; - params.extraGroupBy = monthlyStr; - // 处理消毒物品总包数 消毒物品发货总包数 - params.tousseTypeAndPackageSizeSql = " and td.tousseType = '"+ TousseDefinition.PACKAGE_TYPE_DISINFECTION +"' "; - sql = "select sum(tl.amount) amount,monthStr from (" - +dataIndex.getWorkAmountByPackageSQL("发货数量", params) - + ") tl group by monthStr"; - Map disinfectionAmountMap = dataIndex.getAmountAndDateBySql(sql); - for (int i = 0; i < monthArr.length; i++) { - String month = monthArr[i]; - String yearMonth = yearMonthMap.get(month); - addYearWorkLoadBean(26, month, disinfectionAmountMap, i, "处理消毒物品总包数", list, yearMonth); - } - disinfectionAmountMap = null; - //处理呼吸机管道总包数,获取器械包名称包含呼吸机管道的发货包数量 - params.tousseTypeAndPackageSizeSql = ""; - params.extraWhereSql = " and td.name like '%呼吸机管道%' "; - sql = "select sum(tl.amount) amount,monthStr from (" - +dataIndex.getWorkAmountByPackageSQL("发货数量", params) - + ") tl group by monthStr"; - Map nameLikeVentilatorCuctAmountMap = dataIndex.getAmountAndDateBySql(sql); - for (int i = 0; i < monthArr.length; i++) { - String month = monthArr[i]; - String yearMonth = yearMonthMap.get(month); - addYearWorkLoadBean(29, month, nameLikeVentilatorCuctAmountMap, i, "处理呼吸机管道总包数", list, yearMonth); - } - nameLikeVentilatorCuctAmountMap = null; - // 处理电钻总个数,获取器械包名称包含电钻的发货包数 - params.extraWhereSql = " and td.name like '%电钻%' "; - sql = "select sum(tl.amount) amount,monthStr from (" - +dataIndex.getWorkAmountByPackageSQL("发货数量", params) - + ") tl group by monthStr"; - Map nameLikeElectricDrillAmountMap = dataIndex.getAmountAndDateBySql(sql); - for (int i = 0; i < monthArr.length; i++) { - String month = monthArr[i]; - String yearMonth = yearMonthMap.get(month); - addYearWorkLoadBean(30, month, nameLikeElectricDrillAmountMap, i, "处理电钻总个数", list, yearMonth); - } - nameLikeElectricDrillAmountMap = null; - //器械包发放数量 - params.extraWhereSql = ""; - sql = String.format("select sum(tl.amount) amount,monthStr from (" - +dataIndex.getWorkAmountByPackageSQL("发货数量", params) - + ") tl group by monthStr"); - Map sendAmountMap = dataIndex.getAmountAndDateBySql(sql); - for (int i = 0; i < monthArr.length; i++) { - String month = monthArr[i]; - String yearMonth = yearMonthMap.get(month); - addYearWorkLoadBean(31, month, sendAmountMap, i, "器械包发放数量", list, yearMonth); - } - sendAmountMap = null; - //处理消毒包总包数 数据获取为:包名称包含“消毒包”,按照发货包数量统计 - params.extraWhereSql = " and td.name like '%消毒包%' "; - sql = "select sum(tl.amount) amount,monthStr from (" - +dataIndex.getWorkAmountByPackageSQL("发货数量", params) - + ") tl group by monthStr"; - Map nameIsDisinfectionBagAmountMap = dataIndex.getAmountAndDateBySql(sql); - for (int i = 0; i < monthArr.length; i++) { - String month = monthArr[i]; - String yearMonth = yearMonthMap.get(month); - addYearWorkLoadBean(27, month, nameIsDisinfectionBagAmountMap, i, "处理消毒包总包数", list, yearMonth); - } - nameIsDisinfectionBagAmountMap = null; - //处理纸塑包总包数 包装类型为纸塑的发货包数 - params.packageTypeSqlWithAliasOfTousseDefinitionIsTd = " and td.packageType='纸塑' "; - params.extraWhereSql = ""; - sql = String.format("select sum(tl.amount) amount,monthStr from (" - +dataIndex.getWorkAmountByPackageSQL("发货数量", params) - + ") tl group by monthStr"); - Map paperAmountMap = dataIndex.getAmountAndDateBySql(sql); - for (int i = 0; i < monthArr.length; i++) { - String month = monthArr[i]; - String yearMonth = yearMonthMap.get(month); - addYearWorkLoadBean(23, month, paperAmountMap, i, "处理纸塑包总包数", list, yearMonth); - } - paperAmountMap = null; - //获取所有灭菌炉分组 - int sequence = 6; - List groupList = httpOptionManager.getHttpOptionTextById("sterilerGroup"); - if(CollectionUtils.isNotEmpty(groupList)){ - dateStr = dateQueryAdapter.dateConverAdapter3("sr.enddate","mm"); - for (String ownGroup : groupList) { - sql = "select count(*) amount,"+ dateStr +" monthstr from SterilizationRecord sr,Sterilizer s where " - + " sr.sterilizer_id = s.id and (sr.status = '灭菌完成' or sr.status = '灭菌失败') and sr.enddate between " - + startDay + " and " + endDay - + SqlUtils.getWhereSqlByfilterFieldAndStringValueAndSeparator("sr.orgUnitCoding", querySupplyRoom, ",") - + " and s.ownGroup = '" + ownGroup + "'"; - if(ownGroup.contains("低温") || ownGroup.contains("高温")){ - // 如果是高温和低温组,灭菌炉名称不包含'4#' - sql += " and s.name not like '%4#%'"; - } - sql += " group by " + dateStr; - String columnName3 = "灭菌器使用炉次 (" + ownGroup + ")"; - Map ownGroupAmountMap = dataIndex.getAmountAndDateBySql(sql); - for (int i = 0; i < monthArr.length; i++) { - String month = monthArr[i]; - Integer amount = 0; - if(ownGroupAmountMap.containsKey(month)){ - amount = ownGroupAmountMap.get(month); - } - YearWorkloadBean bean = new YearWorkloadBean(sequence,yearMonthMap.get(month), i, columnName3, amount); - list.add(bean); - } - sequence++; - } - } - return list; + return yearWorkloadReportSpecialHelper.getYearWorkloadReportSpecial(year, querySupplyRoom); } - // 年度消毒供应中心统计报表,获取数据的bean - private YearWorkloadBean getYearWorkloadBean(Integer rowSequence, String month, Integer sequence, String columnName, String sql){ - Integer amount = dataIndex.getAmountBySql(sql); - YearWorkloadBean bean = new YearWorkloadBean(rowSequence,month, sequence, columnName, amount); - return bean; - } /** * 获取“消毒供应中心员工工作量统计报表”的数据.. @@ -12080,7 +10731,7 @@ mm = "0" + i; } startTime = year + "-" + mm + "-01 00:00:00"; - endTime = getNextMonth(year,mm) + " 00:00:00"; + endTime = DateTools.getNextMonth(year,mm) + " 00:00:00"; Date starDate = sdf.parse(startTime); Date endDate = sdf.parse(endTime); int totalAmount = 0; @@ -12170,7 +10821,7 @@ mm = "0" + i; } String startTime = year + "-" + mm + "-01 00:00:00"; - String endTime = getNextMonth(year,mm) + " 00:00:00"; + String endTime = DateTools.getNextMonth(year,mm) + " 00:00:00"; String sql = "select distinct po from " + ClassifyBasket.class.getSimpleName() + " po inner join fetch po.classfiedItems ci inner join fetch ci.materialDefinition cimd inner join fetch ci.tousseDefinition citd inner join fetch citd.materialInstances " + " left join po.washAndDisinfectRecords wr where wr is not null" @@ -12251,7 +10902,7 @@ mm = "0" + i; } startTime = year + "-" + mm + "-01 00:00:00"; - endTime = getNextMonth(year,mm) + " 00:00:00"; + endTime = DateTools.getNextMonth(year,mm) + " 00:00:00"; Date starDate = sdf.parse(startTime); Date endDate = sdf.parse(endTime); int tousseInstanceAmount = 0; @@ -13534,7 +12185,7 @@ sql = getQualityMonitoringInspectDayByResponsibilityTypeSql(queryYear,queryMonth,monitoringType,responsibilityType,orgUnitCoding,fiOrgUnitCodingSql); }else if(StringUtils.isNotBlank(orgUnitCoding) && StringUtils.isNotBlank(queryYear) && StringUtils.isNotBlank(queryMonth) && StringUtils.isNotBlank(inspectItem)){ String startTime = queryYear + "-" + queryMonth + "-01 00:00:00"; - String endTime = getNextMonth(queryYear,queryMonth) + " 00:00:00"; + String endTime = DateTools.getNextMonth(queryYear,queryMonth) + " 00:00:00"; if(StringUtils.isBlank(inspectDetail)){ resultNameList = getResultNameList(monitoringType,inspectItem,null,null, startTime, endTime); @@ -13750,7 +12401,7 @@ String sql = ""; if(StringUtils.isNotBlank(queryYear) && StringUtils.isNotBlank(type) && StringUtils.isNotBlank(responsibilityType)){ String startTime = queryYear + "-" + queryMonth + "-01 00:00:00"; - String endTime = getNextMonth(queryYear,queryMonth) + " 00:00:00"; + String endTime = DateTools.getNextMonth(queryYear,queryMonth) + " 00:00:00"; sql = " select " + dateQueryAdapter.dateConverAdapter3("qmi.dateTime","dd") + " ,fd.formName,sum(qmg.amount) " + "from QualityMonitoringInstance qmi,QualityMonitoringDefinition qmdf,FormInstance fi,FormDefinition fd,QualityMonitoringDefinition qmd ,QualityMonitoringGoods qmg " + " where qmdf.id=fd.id and qmi.id = fi.id and fi.formDefinition_id=fd.id and fd.id=qmd.id " @@ -13829,7 +12480,7 @@ Map map = new HashMap(); // 根据需要统计的名字,初始化统计项 boolean isOracle = dbConnection.isOracle(); - int count = getDayCountOfMonth(queryYear,queryMonth); + int count = DateTools.getDayCountOfMonth(queryYear,queryMonth); Map amountMap = new HashMap(); if(needSum){ count = count + 1; @@ -13947,7 +12598,7 @@ int count = 12; if(StringUtils.isNotBlank(queryMonth)){ // 如果查询一个月内每天的数据,count为每个月的天数 - count = getDayCountOfMonth(queryYear,queryMonth); + count = DateTools.getDayCountOfMonth(queryYear,queryMonth); } for(int i = 1; i <= count; i++ ){ key = name + "-" + i; @@ -15493,7 +14144,7 @@ String endDay = ""; String[] arr = timeSolt.split("-"); if(arr != null && arr.length > 1){ - endDay = getNextMonth(arr[0],arr[1]) ; + endDay = DateTools.getNextMonth(arr[0],arr[1]) ; }else{ return voList; } @@ -18071,12 +16722,7 @@ beanList = Arrays.asList(beanMap.values().toArray()); return beanList; } - private int getMaxDayByYearMonth(int year, int month) { - Calendar calendar = Calendar.getInstance(); - calendar.set(Calendar.YEAR, year - 1); - calendar.set(Calendar.MONTH, month-1); - return calendar.getActualMaximum(Calendar.DATE); - } + @Override public List getSterilizerQualiyDataSource(Map paramMap){ String reportType = paramMap.get("reportTypeStr"); Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/YearWorkloadReportSpecialHelper.java =================================================================== diff -u --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/YearWorkloadReportSpecialHelper.java (revision 0) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/YearWorkloadReportSpecialHelper.java (revision 35794) @@ -0,0 +1,327 @@ +package com.forgon.disinfectsystem.jasperreports.util; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; + +import com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.jasperreports.javabeansource.YearWorkloadBean; +import com.forgon.disinfectsystem.reportforms.vo.ReportQueryParams; +import com.forgon.systemsetting.service.HttpOptionManager; +import com.forgon.tools.MathTools; +import com.forgon.tools.util.SqlUtils; + +public class YearWorkloadReportSpecialHelper extends YearWorkloadReportHelper{ + @Autowired + private HttpOptionManager httpOptionManager; + /** + * 获取年度消毒供应中心指标工作量统计报表数据,东莞市中医院项目特殊的定制 + * @param year 查询的年份 + * @param querySupplyRoom 查询的供应室 + * @return YearWorkloadBean的list集合 + */ + public List getYearWorkloadReportSpecial(String year,String querySupplyRoom) { + List list = new ArrayList(); + Map yearMonthMap = new HashMap();//月份对应的年月map,用于报表显示 + String[] monthArr = null; + String mmOrdd = null; + String startDay = null; + String endDay = null; + mmOrdd = "mm"; + startDay = "'" + year + "-01-01 00:00:00'"; + String nextYear = dataIndex.getNextYear(year); + endDay = "'" + nextYear + " 00:00:00'"; + ReportQueryParams params = new ReportQueryParams(objectDao); + params.betweenSql = String.format(" between %s and %s ", dateQueryAdapter.dateAdapter(year + "-01-01 00:00:00"),dateQueryAdapter.dateAdapter(nextYear + " 00:00:00")); + params.querySupplyRoom = querySupplyRoom; + //params.sqlLengthFunctionName = DatabaseUtil.getSqlLengthFunctionName(dbConnection); + params.selectTousseType = false; + params.selectTousseName = false; + params.isGroup = true; + params.sterilizationModeSqlWithAliasOfTousseDefinitionIsTd = ""; + params.packageTypeSqlWithAliasOfTousseDefinitionIsTd = ""; + + monthArr = new String[]{"01","02","03","04","05","06","07","08","09","10","11","12"};//月份,不同的数据库月份可能不一样 + for (int i = 0; i < monthArr.length; i++) { + yearMonthMap.put(monthArr[i], year + "-" + monthArr[i]); + } + int dataSoureOfMaterialsCountOfToussesInReports = CssdUtils.getSystemSetConfigByNameInt("dataSoureOfMaterialsCountOfToussesInReports", 3); + + //清洗手术室器械总件数 不包含外来器械 + params.monthlyStr = dateQueryAdapter.dateConverAdapter3("wr.endDate","mm"); + params.applicationDepart="手术室"; + params.tousseTypeAndPackageSizeSql = " and tdc.tousseType<>'"+ TousseDefinition.PACKAGE_TYPE_FOREIGN +"' "; + String sql = String.format("select sum(tl.amount) amount, monthstr from (" + +dataIndex.getWorkAmountByMaterialSQL("清洗数量", params, dataSoureOfMaterialsCountOfToussesInReports) + + ") tl group by monthstr "); + Map operatingRoomWashMaterialAmountMap = dataIndex.getAmountAndDateBySql(sql); + //清洗临床科室物品总件数 回收科室不等于“手术室”的器械清洗总件数 + params.applicationDepart=""; + params.tousseTypeAndPackageSizeSql = ""; + params.extraQuery = " and ci.orgUnitName!='手术室' "; + sql = String.format("select sum(tl.amount) amount, monthstr from (" + +dataIndex.getWorkAmountByMaterialSQL("清洗数量", params, dataSoureOfMaterialsCountOfToussesInReports) + + ") tl group by monthstr "); + Map noOperatingRoomWashMaterialAmountMap = dataIndex.getAmountAndDateBySql(sql); + //清洗外来手术器械总件数 + params.extraQuery = " and ci.orgUnitName='手术室' "; + params.tousseTypeAndPackageSizeSql = " and td.tousseType='"+ TousseDefinition.PACKAGE_TYPE_FOREIGN +"' "; + sql = String.format("select sum(tl.amount) amount, monthstr from (" + +dataIndex.getWorkAmountByMaterialSQL("清洗数量", params, dataSoureOfMaterialsCountOfToussesInReports) + + ") tl group by monthstr "); + Map foreignMaterialAmountMap = dataIndex.getAmountAndDateBySql(sql); + //清洗器械总件数 = 清洗临床科室物品总件数 + 清洗手术室器械总件数 + 清洗外来手术器械总件数 + Map totalWashMaterialAmountMap = new HashMap(); + for(Entry entry : operatingRoomWashMaterialAmountMap.entrySet()){ + totalWashMaterialAmountMap.put(entry.getKey(), entry.getValue()); + } + for(Entry entry : noOperatingRoomWashMaterialAmountMap.entrySet()){ + String key = entry.getKey(); + if(totalWashMaterialAmountMap.containsKey(key)){ + totalWashMaterialAmountMap.put(key, MathTools.add(totalWashMaterialAmountMap.get(key), entry.getValue()).intValue()); + }else{ + totalWashMaterialAmountMap.put(key, entry.getValue()); + } + } + for(Entry entry : foreignMaterialAmountMap.entrySet()){ + String key = entry.getKey(); + if(totalWashMaterialAmountMap.containsKey(key)){ + totalWashMaterialAmountMap.put(key, MathTools.add(totalWashMaterialAmountMap.get(key), entry.getValue()).intValue()); + }else{ + totalWashMaterialAmountMap.put(key, entry.getValue()); + } + } + for (int i = 0; i < monthArr.length; i++) { + String month = monthArr[i]; + String yearMonth = yearMonthMap.get(month); + addYearWorkLoadBean(1, month, totalWashMaterialAmountMap, i, "清洗器械总件数", list, yearMonth); + addYearWorkLoadBean(3, month, noOperatingRoomWashMaterialAmountMap, i, "清洗临床科室物品总件数", list, yearMonth); + addYearWorkLoadBean(4, month, operatingRoomWashMaterialAmountMap, i, "清洗手术室器械总件数", list, yearMonth); + addYearWorkLoadBean(5, month, foreignMaterialAmountMap, i, "清洗外来手术器械总件数", list, yearMonth); + } + totalWashMaterialAmountMap = null; + noOperatingRoomWashMaterialAmountMap = null; + operatingRoomWashMaterialAmountMap = null; + foreignMaterialAmountMap = null; + // 包装外来手术器械总包数 二次回收的外来器械不统计 + String dateStr = dateQueryAdapter.dateConverAdapter3("rr.recyclingTime","mm"); + sql = "select sum(ri.amount) amount,"+ dateStr +" monthstr from RecyclingRecord rr join RecyclingItem ri on rr.id=ri.recyclingRecord_id join TousseDefinition td on td.id=ri.tousseDefinitionId " + + " join invoicePlan ip on rr.recyclingApplication_id=ip.id " + + " where td.tousseType= '" + TousseDefinition.PACKAGE_TYPE_FOREIGN + "'" + + " and rr.id = (select max(rr1.id) from RecyclingRecord rr1,ForeignTousseApplication fta1 where rr1.recyclingApplication_id=fta1.id and fta1.id=ip.id) " + + SqlUtils.getWhereSqlByfilterFieldAndStringValueAndSeparator("rr.orgUnitCoding", querySupplyRoom, ",") + + " and rr.recyclingTime between " + startDay +" and "+endDay + + " group by " + dateStr; + Map foreignAmountMap = dataIndex.getAmountAndDateBySql(sql); + for (int i = 0; i < monthArr.length; i++) { + String month = monthArr[i]; + String yearMonth = yearMonthMap.get(month); + addYearWorkLoadBean(20, month, foreignAmountMap, i, "包装外来手术器械总包数", list, yearMonth); + } + foreignAmountMap = null; + //处理湿化瓶总包数 数据获取为:包名称中包含“湿化瓶”字眼的器械包,按照回收的包数量统计 + sql = "select sum(ri.amount) amount,"+ dateStr +" monthstr from RecyclingRecord rr join RecyclingItem ri on rr.id=ri.recyclingRecord_id join TousseDefinition td on td.id=ri.tousseDefinitionId " + + " where td.name like '%湿化瓶%'" + + SqlUtils.getWhereSqlByfilterFieldAndStringValueAndSeparator("rr.orgUnitCoding", querySupplyRoom, ",") + + " and rr.recyclingTime between " + startDay +" and "+endDay + + " group by " + dateStr; + Map nameLikeHumidificationBottleAmountMap = dataIndex.getAmountAndDateBySql(sql); + for (int i = 0; i < monthArr.length; i++) { + String month = monthArr[i]; + String yearMonth = yearMonthMap.get(month); + addYearWorkLoadBean(28, month, nameLikeHumidificationBottleAmountMap, i, "处理湿化瓶总包数", list, yearMonth); + } + nameLikeHumidificationBottleAmountMap = null; + dateStr = dateQueryAdapter.dateConverAdapter3("wr.startDate","mm"); + //清洗机使用炉次”: + //数据获取为:所有清洗机的运作次数 + sql = "select count(*) amount,"+ dateStr +" monthstr from WashAndDisinfectRecord wr, Rinser r " + + " where r.id=wr.rinserId " + + " and wr.disinfectIdentification not like '%手工%' " + + SqlUtils.getWhereSqlByfilterFieldAndStringValueAndSeparator("wr.orgUnitCoding", querySupplyRoom, ",") + + " and wr.startDate between " + startDay +" and "+endDay + + " group by " + dateStr; + Map rinserAmountMap = dataIndex.getAmountAndDateBySql(sql); + for (int i = 0; i < monthArr.length; i++) { + String month = monthArr[i]; + String yearMonth = yearMonthMap.get(month); + addYearWorkLoadBean(21, month, rinserAmountMap, i, "清洗机使用炉次", list, yearMonth); + } + rinserAmountMap = null; + // 清洗消毒物品总件数: 消毒物品清洗件数 + params.applicationDepart=""; + params.extraQuery = ""; + params.tousseTypeAndPackageSizeSql = " and td.tousseType='" + TousseDefinition.PACKAGE_TYPE_DISINFECTION + "' "; + sql = String.format("select sum(tl.amount) amount, monthstr from (" + +dataIndex.getWorkAmountByMaterialSQL("清洗数量", params, dataSoureOfMaterialsCountOfToussesInReports) + + ") tl group by monthstr "); + Map washDisinfectMaterialAmountMap = dataIndex.getAmountAndDateBySql(sql); + for (int i = 0; i < monthArr.length; i++) { + String month = monthArr[i]; + String yearMonth = yearMonthMap.get(month); + addYearWorkLoadBean(22, month, washDisinfectMaterialAmountMap, i, "清洗消毒物品总件数", list, yearMonth); + } + washDisinfectMaterialAmountMap = null; + //处理敷料包总包数 统计敷料包的装配包数 + dateStr = dateQueryAdapter.dateConverAdapter3("pr.packTime","mm"); + String monthlyStr = dateQueryAdapter.dateConverAdapter3("ti.operationTime",mmOrdd); + params.monthlyStr = monthlyStr; + params.tousseTypeAndPackageSizeSql= " and td.tousseType = '" + TousseDefinition.PACKAGE_TYPE_DRESSING + "'"; + sql = String.format("select sum(tl.amount) amount, monthstr from (" + +dataIndex.getWorkAmountByPackageSQL("配包数量", params) + + ") tl group by monthstr "); + Map packDressingAmountMap = dataIndex.getAmountAndDateBySql(sql); + for (int i = 0; i < monthArr.length; i++) { + String month = monthArr[i]; + String yearMonth = yearMonthMap.get(month); + addYearWorkLoadBean(24, month, packDressingAmountMap, i, "处理敷料包总包数", list, yearMonth); + } + packDressingAmountMap = null; + // 处理敷料包总件数 敷料包类型,统计敷料包的装配件数 + params.extraSelectColumns = "," + params.monthlyStr + " monthStr "; + params.extraGroupBy = monthlyStr; + sql = String.format("select sum(tl.amount) amount, monthstr from (" + +dataIndex.getWorkAmountByMaterialSQL("配包数量", params, dataSoureOfMaterialsCountOfToussesInReports) + + ") tl group by monthstr "); + Map packDressingMaterialAmountMap = dataIndex.getAmountAndDateBySql(sql); + for (int i = 0; i < monthArr.length; i++) { + String month = monthArr[i]; + String yearMonth = yearMonthMap.get(month); + addYearWorkLoadBean(25, month, packDressingMaterialAmountMap, i, "处理敷料包总件数", list, yearMonth); + } + //待灭菌物品包装总数。统计除了消毒物品以外的所有类型的包的装配总数量,按包计算。 + params.tousseTypeAndPackageSizeSql= ""; + params.extraQuery = " and td.tousseType<>'"+ TousseDefinition.PACKAGE_TYPE_DISINFECTION +"' "; + params.extraSelectColumns = ""; + params.extraGroupBy = ""; + params.tousseTypes = ""; + sql = String.format("select sum(tl.amount) amount, monthstr from (" + +dataIndex.getWorkAmountByPackageSQL("配包数量", params) + + ") tl group by monthstr "); + Map packingAmountMap = dataIndex.getAmountAndDateBySql(sql); + params.extraQuery = ""; + //构建list,主要是没数据的月份也需要有YearWorkloadBean对象返回,所以没有在resultset里添加 + for (int i = 0; i < monthArr.length; i++) { + String month = monthArr[i]; + String yearMonth = yearMonthMap.get(month); + addYearWorkLoadBean(2, month, packingAmountMap, i, "待灭菌物品包装总数", list, yearMonth); + } + packingAmountMap = null; + params.includeTousses = true; + params.includeDisposableGoods = false; + monthlyStr = dateQueryAdapter.dateConverAdapter3("i.sendTime",mmOrdd); + params.extraSelectColumns = "," + monthlyStr + " monthStr "; + params.extraGroupBy = monthlyStr; + // 处理消毒物品总包数 消毒物品发货总包数 + params.tousseTypeAndPackageSizeSql = " and td.tousseType = '"+ TousseDefinition.PACKAGE_TYPE_DISINFECTION +"' "; + sql = "select sum(tl.amount) amount,monthStr from (" + +dataIndex.getWorkAmountByPackageSQL("发货数量", params) + + ") tl group by monthStr"; + Map disinfectionAmountMap = dataIndex.getAmountAndDateBySql(sql); + for (int i = 0; i < monthArr.length; i++) { + String month = monthArr[i]; + String yearMonth = yearMonthMap.get(month); + addYearWorkLoadBean(26, month, disinfectionAmountMap, i, "处理消毒物品总包数", list, yearMonth); + } + disinfectionAmountMap = null; + //处理呼吸机管道总包数,获取器械包名称包含呼吸机管道的发货包数量 + params.tousseTypeAndPackageSizeSql = ""; + params.extraWhereSql = " and td.name like '%呼吸机管道%' "; + sql = "select sum(tl.amount) amount,monthStr from (" + +dataIndex.getWorkAmountByPackageSQL("发货数量", params) + + ") tl group by monthStr"; + Map nameLikeVentilatorCuctAmountMap = dataIndex.getAmountAndDateBySql(sql); + for (int i = 0; i < monthArr.length; i++) { + String month = monthArr[i]; + String yearMonth = yearMonthMap.get(month); + addYearWorkLoadBean(29, month, nameLikeVentilatorCuctAmountMap, i, "处理呼吸机管道总包数", list, yearMonth); + } + nameLikeVentilatorCuctAmountMap = null; + // 处理电钻总个数,获取器械包名称包含电钻的发货包数 + params.extraWhereSql = " and td.name like '%电钻%' "; + sql = "select sum(tl.amount) amount,monthStr from (" + +dataIndex.getWorkAmountByPackageSQL("发货数量", params) + + ") tl group by monthStr"; + Map nameLikeElectricDrillAmountMap = dataIndex.getAmountAndDateBySql(sql); + for (int i = 0; i < monthArr.length; i++) { + String month = monthArr[i]; + String yearMonth = yearMonthMap.get(month); + addYearWorkLoadBean(30, month, nameLikeElectricDrillAmountMap, i, "处理电钻总个数", list, yearMonth); + } + nameLikeElectricDrillAmountMap = null; + //器械包发放数量 + params.extraWhereSql = ""; + sql = String.format("select sum(tl.amount) amount,monthStr from (" + +dataIndex.getWorkAmountByPackageSQL("发货数量", params) + + ") tl group by monthStr"); + Map sendAmountMap = dataIndex.getAmountAndDateBySql(sql); + for (int i = 0; i < monthArr.length; i++) { + String month = monthArr[i]; + String yearMonth = yearMonthMap.get(month); + addYearWorkLoadBean(31, month, sendAmountMap, i, "器械包发放数量", list, yearMonth); + } + sendAmountMap = null; + //处理消毒包总包数 数据获取为:包名称包含“消毒包”,按照发货包数量统计 + params.extraWhereSql = " and td.name like '%消毒包%' "; + sql = "select sum(tl.amount) amount,monthStr from (" + +dataIndex.getWorkAmountByPackageSQL("发货数量", params) + + ") tl group by monthStr"; + Map nameIsDisinfectionBagAmountMap = dataIndex.getAmountAndDateBySql(sql); + for (int i = 0; i < monthArr.length; i++) { + String month = monthArr[i]; + String yearMonth = yearMonthMap.get(month); + addYearWorkLoadBean(27, month, nameIsDisinfectionBagAmountMap, i, "处理消毒包总包数", list, yearMonth); + } + nameIsDisinfectionBagAmountMap = null; + //处理纸塑包总包数 包装类型为纸塑的发货包数 + params.packageTypeSqlWithAliasOfTousseDefinitionIsTd = " and td.packageType='纸塑' "; + params.extraWhereSql = ""; + sql = String.format("select sum(tl.amount) amount,monthStr from (" + +dataIndex.getWorkAmountByPackageSQL("发货数量", params) + + ") tl group by monthStr"); + Map paperAmountMap = dataIndex.getAmountAndDateBySql(sql); + for (int i = 0; i < monthArr.length; i++) { + String month = monthArr[i]; + String yearMonth = yearMonthMap.get(month); + addYearWorkLoadBean(23, month, paperAmountMap, i, "处理纸塑包总包数", list, yearMonth); + } + paperAmountMap = null; + //获取所有灭菌炉分组 + int sequence = 6; + List groupList = httpOptionManager.getHttpOptionTextById("sterilerGroup"); + if(CollectionUtils.isNotEmpty(groupList)){ + dateStr = dateQueryAdapter.dateConverAdapter3("sr.enddate","mm"); + for (String ownGroup : groupList) { + sql = "select count(*) amount,"+ dateStr +" monthstr from SterilizationRecord sr,Sterilizer s where " + + " sr.sterilizer_id = s.id and (sr.status = '灭菌完成' or sr.status = '灭菌失败') and sr.enddate between " + + startDay + " and " + endDay + + SqlUtils.getWhereSqlByfilterFieldAndStringValueAndSeparator("sr.orgUnitCoding", querySupplyRoom, ",") + + " and s.ownGroup = '" + ownGroup + "'"; + if(ownGroup.contains("低温") || ownGroup.contains("高温")){ + // 如果是高温和低温组,灭菌炉名称不包含'4#' + sql += " and s.name not like '%4#%'"; + } + sql += " group by " + dateStr; + String columnName3 = "灭菌器使用炉次 (" + ownGroup + ")"; + Map ownGroupAmountMap = dataIndex.getAmountAndDateBySql(sql); + for (int i = 0; i < monthArr.length; i++) { + String month = monthArr[i]; + Integer amount = 0; + if(ownGroupAmountMap.containsKey(month)){ + amount = ownGroupAmountMap.get(month); + } + YearWorkloadBean bean = new YearWorkloadBean(sequence,yearMonthMap.get(month), i, columnName3, amount); + list.add(bean); + } + sequence++; + } + } + return list; + } +} Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/dataindex/DataIndex.java =================================================================== diff -u -r35792 -r35794 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/dataindex/DataIndex.java (.../DataIndex.java) (revision 35792) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/dataindex/DataIndex.java (.../DataIndex.java) (revision 35794) @@ -3302,4 +3302,46 @@ } return handleDeptCodeSql; } + /** + * 获取处理腔镜器械总件数map + * @param monthlyStr 时间分组 + * @param startDate 开始时间 + * @param endDate 结束时间 + * @param departCoding 供应室 + * @param monthNotBeZero 月份是否不要0 + * @return + */ + public Map getEndoscopicMap(String monthlyStr, String startDate, String endDate, String departCoding, boolean monthNotBeZero){ + Map endoscopicMap = new HashMap();//内窥镜map + String sql = " select sum(tdc.amount) amount,"+ monthlyStr +" monthStr from Invoice i,TousseInstance ti,TousseDefinition td,(select td.name tdName, sum(mi.count) amount from MaterialInstance mi,MaterialDefinition md, tousseDefinition td " + + " where mi.materialDefinition_id=md.id and mi.tousse_id=td.id and td.forDisplay=1 " + + "and md.type like '%腔镜%' " + + "group by td.name) tdc " + + " where i.id=ti.invoice_id and ti.tousseDefinition_id=td.id " + + " and tdc.tdName = td.name " + + " and ti.orgUnitCoding='" + departCoding + "' " + + " and i.sendTime between " + + startDate + " and " + + endDate + + " group by " + + monthlyStr; + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + while (rs.next()) { + Integer amount = rs.getInt("amount"); + String month = rs.getString("monthStr"); + // 月份以0开头的,去掉0 如果是年月日 则不可转换为数字 不用去掉0 + if(monthNotBeZero && month.startsWith("0") && month.length() > 1 && Integer.valueOf(month) < 10){ + month = Integer.valueOf(month).toString(); + } + endoscopicMap.put(month, amount); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return endoscopicMap; + } } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/YearWorkloadReportHelper.java =================================================================== diff -u --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/YearWorkloadReportHelper.java (revision 0) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/YearWorkloadReportHelper.java (revision 35794) @@ -0,0 +1,1032 @@ +package com.forgon.disinfectsystem.jasperreports.util; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; + +import com.forgon.disinfectsystem.basedatamanager.reportoption.GoodsOptionManager; +import com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.entity.adverseeventrecord.AdverseEventRecord; +import com.forgon.disinfectsystem.entity.basedatamanager.reportoption.GoodsOption; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; +import com.forgon.disinfectsystem.jasperreports.javabeansource.YearWorkloadBean; +import com.forgon.disinfectsystem.jasperreports.service.dataindex.DataIndex; +import com.forgon.disinfectsystem.reportforms.vo.ReportQueryParams; +import com.forgon.tools.MathTools; +import com.forgon.tools.date.DateTools; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.util.SqlUtils; +/** + * 消毒供应中心年度工作量统计报表 + * + */ +public class YearWorkloadReportHelper extends ReportHelper{ + private Logger logger = Logger.getLogger(this.getClass()); + @Autowired + private GoodsOptionManager goodsOptionManager; + /** + * @param year 查询年份 + * @param querySupplyRoom 查询供应室 + * @param isAddEndoscopic 是否添加腔镜器械,下收下送次数统计 + * @param isStatisticDisposableGoodsSendAmount 是否统计一次性物品发放数量 + */ + public List getYearWorkloadReport(String year, String queryMonth, String querySupplyRoom,boolean isAddEndoscopic,boolean isStatisticDisposableGoodsSendAmount, Map parametMap) { + //读取配置的数据 + String dataConfigStr = CssdUtils.getSystemSetConfigByName("dataIndexConfigurationOfYearWorkloadReport"); + JSONArray dataConfigArr = null; + if(StringUtils.isBlank(dataConfigStr)){ + dataConfigStr = "[{ \"dataIndexNameForDisplay\": \"处理器械总件数\", \"dataIndexSource\": \"处理器械总件数\" }" + + ",{ \"dataIndexNameForDisplay\": \"处理外来手术器械总件数\", \"dataIndexSource\": \"处理外来手术器械总件数\" }" + + ",{ \"dataIndexNameForDisplay\": \"消毒物品数量\", \"dataIndexSource\": \"消毒物品数量\" }" + + ",{ \"dataIndexNameForDisplay\": \"灭菌无菌包数\", \"dataIndexSource\": \"复用性灭菌物品总件数\" }" + + ",{ \"dataIndexNameForDisplay\": \"灭菌外来手术器械包数\", \"dataIndexSource\": \"灭菌外来手术器械包数\" }" + + ",{ \"dataIndexNameForDisplay\": \"灭菌器使用炉次\", \"dataIndexSource\": \"灭菌器使用炉次\" }" + + ",{ \"dataIndexNameForDisplay\": \"生物监测次数\", \"dataIndexSource\": \"生物监测次数\" }" + + ",{ \"dataIndexNameForDisplay\": \"器械包发放数量\", \"dataIndexSource\": \"复用性物品发货数量\" }" + + ",{ \"dataIndexNameForDisplay\": \"一次性物品发放数量\", \"dataIndexSource\": \"一次性物品发放数量\" }]"; + } + Map numAndOrgUnitCode = new HashMap();//序号和核算月报科室编码map 可配多个科室 + Set orgUnitCodes = new HashSet();//核算月报的科室编码 + Map numAndAdverseEventRecord = new HashMap(); //序号和不良事件列map 可多种事件 + Map uniqueDataIndexSources = new HashMap(); //唯一的指标 多配只有一个生效 + String sterilizerUseCountCn = "灭菌器使用炉次";//灭菌炉使用次数显示名 + Set dataIndexSources = new HashSet(); + if(StringUtils.isNotBlank(dataConfigStr)){ + dataConfigArr = JSONArray.fromObject(dataConfigStr); + for (int i = 0; i < dataConfigArr.size(); i++) { + JSONObject dataConfig = (JSONObject)dataConfigArr.get(i); + String dataIndexSource = dataConfig.optString("dataIndexSource"); + dataIndexSources.add(dataIndexSource); + if("灭菌器使用炉次".equals(dataIndexSource)){ + sterilizerUseCountCn = dataConfig.optString("dataIndexNameForDisplay"); + } + if("科室核算月报金额".equals(dataIndexSource)){ + orgUnitCodes.add(dataConfig.optString("orgUnitCode")); + numAndOrgUnitCode.put(i, dataConfig); + }else if("不良事件统计报表".equals(dataIndexSource)){ + String adverseEventName = dataConfig.optString("adverseEventName"); + if(AdverseEventRecord.EVENTNAME_FOREIGNTOUSSESENDTIMEOUT.equals(adverseEventName)){ + numAndAdverseEventRecord.put(i, dataConfig);//暂不支持其他的不良事件 + } + }else{ + uniqueDataIndexSources.put(i, dataConfig); + } + } + } + List list = new ArrayList(); + int dataSoureOfMaterialsCountOfToussesInReports = CssdUtils.getSystemSetConfigByNameInt("dataSoureOfMaterialsCountOfToussesInReports", 3); + String tiSterileEndTime = null; + Map yearMonthMap = new HashMap();//月份对应的年月map,用于报表显示 + String[] monthArr = null; + String mmOrdd = null; + String startDay = null; + String endDay = null; + if(StringUtils.isNotBlank(year) && StringUtils.isNotBlank(queryMonth)){ + mmOrdd = "dd"; + startDay = year + "-" + queryMonth + "-01 00:00:00"; + endDay = DateTools.getNextMonth(year,queryMonth) + " 00:00:00"; + if(dbConnection.isSqlServer()){ + tiSterileEndTime = dateQueryAdapter.dateConverAdapter3("ti.sterileEndTime",mmOrdd); + }else if(dbConnection.isOracle()){ + tiSterileEndTime = dateQueryAdapter.dateConverAdapter3(dateQueryAdapter.stringFieldToDate("ti.sterileEndTime"),mmOrdd); + } + int count = DateTools.getDayCountOfMonth(year,queryMonth); + monthArr = new String[count]; + for (int i = 1; i <= count; i++) { + String key = null; + if(i < 10){ + key = "0" + i; + }else{ + key = i + ""; + } + monthArr[i - 1] = key; + yearMonthMap.put(key, year + "-" + queryMonth + "-" + key); + } + }else{ + mmOrdd = "mm"; + startDay = year + "-01-01 00:00:00"; + endDay = dataIndex.getNextYear(year) + " 00:00:00"; + monthArr = new String[]{"01","02","03","04","05","06","07","08","09","10","11","12"};//月份,不同的数据库月份可能不一样 + if(dbConnection.isSqlServer()){ + tiSterileEndTime = dateQueryAdapter.dateConverAdapter3("ti.sterileEndTime",mmOrdd); + }else if(dbConnection.isOracle()){ + tiSterileEndTime = dateQueryAdapter.dateConverAdapter3(dateQueryAdapter.stringFieldToDate("ti.sterileEndTime"),mmOrdd); + } + for (int i = 0; i < monthArr.length; i++) { + yearMonthMap.put(monthArr[i], year + "-" + monthArr[i]); + } + } + Map totalTousseMap = new HashMap();//处理器械总件数 + Map totalForeignTousseMap = new HashMap();//处理外来手术器械总件数 + Map disinfectionMap = new HashMap();//消毒物品数 + Map sterileMap = new HashMap();//灭菌无菌包数 + Map sterileForeignMap = new HashMap();//灭菌外来手术器械包数 + Map> sterilizerUseAmountMap = new HashMap>();//灭菌炉使用次数map + Map> adverseEventRecordAmountMap = new HashMap>();//外来器械超时map + Map> monthReportPriceMap = new HashMap>();//核算月报map + Map tousseInvoiceSendMap = new HashMap();//器械包发放数量map + Map sterilizationRecordCountMap = new HashMap();//生物监测次数map + Map disposableGoodsSendMap = new HashMap();//一次性物品发放数量map + Map endoscopicMap = new HashMap();//内窥镜map + Map nextSendAmountMap = new HashMap();//下收下送map + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); + + Map amountTotalMap = new HashMap(); + Map priceTotalMap = new HashMap(); + + //查询的时间段 + String betweenSql = String.format(" between %s and %s ", dateQueryAdapter.dateAdapter(startDay),dateQueryAdapter.dateAdapter(endDay)); + //数据库计算字符串长度的函数名 + //String sqlLengthFunctionName = DatabaseUtil.getSqlLengthFunctionName(dbConnection); + + ReportQueryParams params = new ReportQueryParams(objectDao); + params.betweenSql = betweenSql; + params.querySupplyRoom = querySupplyRoom; + params.isDisableIDCardSqlWithAliasOfTousseDefinitionIsTd = ""; + params.taskGroupSqlWithAliasOfTousseDefinitionIsTd = ""; + params.tousseGroupSqlWithAliasOfTousseDefinitionIsTd = ""; + params.tousseTypeAndPackageSizeSql = ""; + //params.sqlLengthFunctionName = sqlLengthFunctionName; + params.isGroup = true; + params.monthlyStr = dateQueryAdapter.dateConverAdapter3("wr.endDate",mmOrdd); + String sql = null; + if(dataIndexSources.contains("处理器械总件数")){ + // 处理器械总件数 + sql = String.format("select sum(tl.amount) amount, monthstr from (" + +dataIndex.getWorkAmountByMaterialSQL("清洗数量", params, dataSoureOfMaterialsCountOfToussesInReports) + + ") tl group by monthstr "); + ResultSet totalTousseRs = null; + try { + logger.debug("消毒供应中心年度工作量统计报表处理器械总件数查询:"+sql); + totalTousseRs = objectDao.executeSql(sql); + while (totalTousseRs.next()) { + Integer totalTousseAmount = totalTousseRs.getInt("amount"); + String month = DateTools.getSpliceZeroString(totalTousseRs.getString("monthStr")); + totalTousseMap.put(month, totalTousseAmount); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(totalTousseRs); + } + } + // 处理外来器械总件数 + params.tousseTypes = TousseDefinition.PACKAGE_TYPE_FOREIGN; + params.tousseTypeAndPackageSizeSql = DataIndex.getTousseTypesAndPackageSizesFilterSQL(TousseDefinition.PACKAGE_TYPE_FOREIGN, null); + if(dataIndexSources.contains("处理外来手术器械总件数")){ + sql = String.format("select sum(tl.amount) amount, monthstr from (" + +dataIndex.getWorkAmountByMaterialSQL("清洗数量", params, dataSoureOfMaterialsCountOfToussesInReports) + + ") tl group by monthstr "); + ResultSet totalForeignTousseRs = null; + try { + logger.debug("消毒供应中心年度工作量统计报表处理外来器械总件数查询:"+sql); + totalForeignTousseRs = objectDao.executeSql(sql); + while (totalForeignTousseRs.next()) { + Integer totalForeignTousseAmount = totalForeignTousseRs.getInt("amount"); + String month = DateTools.getSpliceZeroString(totalForeignTousseRs.getString("monthStr")); + totalForeignTousseMap.put(month, totalForeignTousseAmount); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(totalForeignTousseRs); + } + } + // 清空参数 + params.tousseTypes = ""; + params.tousseTypeAndPackageSizeSql = ""; + //消毒物品数量 + params.tousseTypeAndPackageSizeSql = DataIndex + .getTousseTypesAndPackageSizesFilterSQL( + TousseDefinition.PACKAGE_TYPE_DISINFECTION, null); + String monthlyStr = null; + int statisticSourceOfDisinfectGoodsAmount = CssdUtils.getSystemSetConfigByNameInt("statisticSourceOfDisinfectGoodsAmount", 1); + String disinfectionSql = ""; + params.tousseTypes = TousseDefinition.PACKAGE_TYPE_DISINFECTION; + if(statisticSourceOfDisinfectGoodsAmount == 2){ + monthlyStr = dateQueryAdapter.dateConverAdapter3("i.sendTime",mmOrdd); + params.extraSelectColumns = "," + monthlyStr + "monthstr"; + params.extraGroupBy = ""; + params.groupBySql = " group by " + monthlyStr; + disinfectionSql = String.format("select sum(tl.amount) amount,monthstr from (" + +dataIndex.getWorkAmountByMaterialSQL("发货数量", params, dataSoureOfMaterialsCountOfToussesInReports) + + ") tl group by monthstr"); + }else if(statisticSourceOfDisinfectGoodsAmount == 3){ + monthlyStr = dateQueryAdapter.dateConverAdapter3("ti.operationTime",mmOrdd); + params.extraGroupBy = ""; + params.extraSelectColumns = ""; + params.monthlyStr = monthlyStr; + disinfectionSql = String.format("select sum(tl.amount) amount,monthstr from (" + + dataIndex.getWorkAmountByPackageSQL("配包数量", params) + + ") tl group by monthstr"); + }else if(statisticSourceOfDisinfectGoodsAmount == 4){ + monthlyStr = dateQueryAdapter.dateConverAdapter3("ti.operationTime",mmOrdd); + params.extraSelectColumns = "," + monthlyStr + "monthstr"; + params.extraGroupBy = monthlyStr; + disinfectionSql = String.format("select sum(tl.amount) amount,monthstr from (" + +dataIndex.getWorkAmountByMaterialSQL("配包数量", params, dataSoureOfMaterialsCountOfToussesInReports) + + ") tl group by monthstr"); + }else{ + monthlyStr = dateQueryAdapter.dateConverAdapter3("i.sendTime",mmOrdd); + params.extraSelectColumns = "," + monthlyStr + "monthstr"; + params.groupBySql = " group by " + monthlyStr; + params.extraGroupBy = monthlyStr; + disinfectionSql = String.format("select sum(tl.amount) amount,monthstr from (" + +dataIndex.getWorkAmountByPackageSQL("发货数量", params) + + ") tl group by monthstr"); + } + if(dataIndexSources.contains("消毒物品数量")){ + ResultSet disinfectionRs = null; + try { + logger.debug("消毒供应中心年度工作量统计报表消毒物品数查询:"+disinfectionSql); + disinfectionRs = objectDao.executeSql(disinfectionSql); + while (disinfectionRs.next()) { + Integer disinfectionAmount = disinfectionRs.getInt("amount"); + String month = DateTools.getSpliceZeroString(disinfectionRs.getString("monthStr")); + disinfectionMap.put(month, disinfectionAmount); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(disinfectionRs); + } + } + params.tousseTypes = ""; + params.monthlyStr = tiSterileEndTime; + params.extraSelectColumns = ""; + params.groupBySql = ""; + // 灭菌无菌包数 + params.tousseTypeAndPackageSizeSql = ""; + params.extraGroupBy = ""; + if(dataIndexSources.contains("复用性灭菌物品总件数")){ + String sterileSql = String.format("select sum(tl.amount) amount,monthstr from (" + +dataIndex.getWorkAmountByPackageSQL("灭菌数量", params) + + ") tl group by monthstr"); + ResultSet sterileRs = null; + try { + logger.debug("消毒供应中心年度工作量统计报表灭菌无菌包数查询:"+sterileSql); + sterileRs = objectDao.executeSql(sterileSql); + while (sterileRs.next()) { + Integer sterilizaAmount = sterileRs.getInt("amount"); + String monthstr = DateTools.getSpliceZeroString(sterileRs.getString("monthStr")); + sterileMap.put(monthstr, sterilizaAmount); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(sterileRs); + } + } + // 灭菌外来手术器械包数 + params.tousseTypes = TousseDefinition.PACKAGE_TYPE_FOREIGN + "," + TousseDefinition.PACKAGE_TYPE_SPLIT; + params.tousseTypeAndPackageSizeSql = DataIndex + .getTousseTypesAndPackageSizesFilterSQL( + TousseDefinition.PACKAGE_TYPE_FOREIGN + "," + + TousseDefinition.PACKAGE_TYPE_SPLIT, null); + if(dataIndexSources.contains("灭菌外来手术器械包数")){ + ResultSet sterileForeignRs = null; + try { + String sterileForeignSql = String.format("select sum(tl.amount) amount,monthstr from (" + +dataIndex.getWorkAmountByPackageSQL("灭菌数量", params) + + ") tl group by monthstr"); + logger.debug("消毒供应中心年度工作量统计报表灭菌外来手术器械包数查询:"+sterileForeignSql); + sterileForeignRs = objectDao.executeSql(sterileForeignSql); + while (sterileForeignRs.next()) { + Integer sterilizaForeignAmount = sterileForeignRs.getInt("amount"); + String monthstr = DateTools.getSpliceZeroString(sterileForeignRs.getString("monthStr")); + sterileForeignMap.put(monthstr, sterilizaForeignAmount); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(sterileForeignRs); + } + } + + // 清空过滤条件 + params.tousseTypes = ""; + params.tousseTypeAndPackageSizeSql = ""; + startDay = dateQueryAdapter.dateAdapter(startDay); + endDay = dateQueryAdapter.dateAdapter(endDay); + monthlyStr = dateQueryAdapter.dateConverAdapter3("sr.enddate",mmOrdd); + //获取所有灭菌炉分组 + if(dataIndexSources.contains("灭菌器使用炉次")){ + String sql3 = "select count(*) amount,s.ownGroup,"+ monthlyStr +" monthStr from SterilizationRecord sr,Sterilizer s where " + + " sr.sterilizer_id = s.id and (sr.status = '灭菌完成' or sr.status = '灭菌失败') and sr.enddate between " + + startDay + " and " + endDay + + SqlUtils.get_InSql_Extra("sr.orgUnitCoding", querySupplyRoom) + + "group by s.ownGroup," + + monthlyStr; + ResultSet rs3 = null; + try { + logger.debug("消毒供应中心年度工作量统计报表灭菌炉使用次数查询:"+sql3); + rs3 = objectDao.executeSql(sql3); + while (rs3.next()) { + Integer amount5 = rs3.getInt("amount"); + String ownGroup = rs3.getString("ownGroup"); + String monthstr = DateTools.getSpliceZeroString(rs3.getString("monthStr")); + Map itemMap = null; + if(sterilizerUseAmountMap.containsKey(ownGroup)){ + itemMap = sterilizerUseAmountMap.get(ownGroup); + }else{ + itemMap = new HashMap(); + sterilizerUseAmountMap.put(ownGroup, itemMap); + } + itemMap.put(monthstr, amount5); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs3); + } + if(MapUtils.isNotEmpty(sterilizerUseAmountMap)){ + for (Entry> entry : sterilizerUseAmountMap.entrySet()) { + String ownGroup = entry.getKey(); + String columnName5 = sterilizerUseCountCn + " (" + ownGroup + ")"; + Map ownGroupMap = entry.getValue(); + for (int i = 0; i < monthArr.length; i++) { + String month = monthArr[i]; + Integer amount = 0; + if(ownGroupMap.containsKey(month)){ + amount = ownGroupMap.get(month); + amountTotalMap.put(columnName5, MathTools.add(amount + , amountTotalMap.get(columnName5)).intValue()); + } + YearWorkloadBean bean5 = new YearWorkloadBean(i,yearMonthMap.get(month), 1, columnName5, amount); + list.add(bean5); + } + } + } + } + // 器械包发放数量 + params.includeTousses = true; + params.includeDisposableGoods = false; + monthlyStr = dateQueryAdapter.dateConverAdapter3("i.sendTime",mmOrdd); + params.extraSelectColumns = "," + monthlyStr + " monthStr "; + params.isGroup = true; + params.extraGroupBy = monthlyStr; + if(dataIndexSources.contains("复用性物品发货数量")){ + String tousseSendSql = String.format("select sum(tl.amount) amount,monthStr from (" + +dataIndex.getWorkAmountByPackageSQL("发货数量", params) + + ") tl group by monthStr"); + ResultSet tousseInvoiceSendRs = null; + try { + logger.debug("消毒供应中心年度工作量统计报表器械包发放数量查询:"+tousseSendSql); + tousseInvoiceSendRs = objectDao.executeSql(tousseSendSql); + while (tousseInvoiceSendRs.next()) { + Integer tousseInvoiceSendAmount = tousseInvoiceSendRs.getInt("amount"); + String month = DateTools.getSpliceZeroString(tousseInvoiceSendRs.getString("monthStr")); + tousseInvoiceSendMap.put(month, tousseInvoiceSendAmount); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(tousseInvoiceSendRs); + } + } + + if(dataIndexSources.contains("生物监测次数")){ + ResultSet sterilizationRecordCountRs = null; + try { + String monthStr = dateQueryAdapter.dateConverAdapter3("sr.biologicalMonitoringEndDate",mmOrdd); + String sterilizationRecordCountSql = "select count(*) count,"+ monthStr +" monthStr from "+ SterilizationRecord.class.getSimpleName() +" sr where sr.biologyResult in('合格','不合格') and sr.orgUnitCoding='"+ querySupplyRoom +"' and sr.biologicalMonitoringEndDate between " + startDay +" and " +endDay + " group by " + monthStr; + logger.debug("消毒供应中心年度工作量统计报表灭菌记录中的生物监测结果为合格或不合格的灭菌记录的条数查询:"+ sterilizationRecordCountSql); + sterilizationRecordCountRs = objectDao.executeSql(sterilizationRecordCountSql); + while (sterilizationRecordCountRs.next()) { + Integer sterilizationRecordCount = sterilizationRecordCountRs.getInt("count"); + String month = DateTools.getSpliceZeroString(sterilizationRecordCountRs.getString("monthStr")); + sterilizationRecordCountMap.put(month, sterilizationRecordCount); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(sterilizationRecordCountRs); + } + } + + // 是否统计一次性物品发放数量 + if (dataIndexSources.contains("一次性物品发放数量")){ + params.includeTousses = false; + params.includeDisposableGoods = true; + + String disposableGoodsSendSql = String.format("select sum(tl.amount) amount,monthStr from (" + +dataIndex.getWorkAmountByPackageSQL("发货数量", params) + + ") tl group by monthStr"); + ResultSet disposableGoodsSendRs = null; + try { + logger.debug("消毒供应中心年度工作量统计报表一次性物品发放数量查询:"+disposableGoodsSendSql); + disposableGoodsSendRs = objectDao.executeSql(disposableGoodsSendSql); + while (disposableGoodsSendRs.next()) { + Integer disposableGoodsInvoiceSendAmount = disposableGoodsSendRs.getInt("amount"); + String month = DateTools.getSpliceZeroString(disposableGoodsSendRs.getString("monthStr")); + disposableGoodsSendMap.put(month, disposableGoodsInvoiceSendAmount); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(disposableGoodsSendRs); + } + } + // 判断是否需要增加腔镜器械和下收下送数量的统计 + if(dataIndexSources.contains("处理腔镜器械总件数(材料类型为腔镜)")){ + endoscopicMap = dataIndex.getEndoscopicMap(monthlyStr, startDay, endDay, querySupplyRoom,false); + } + if(dataIndexSources.contains("下收下送次数(中六模式)")){ + String departs = ""; + GoodsOption goodsOption = goodsOptionManager.getGoodsOption(GoodsOption.MODEL_SURGICALINSTRUMENTS_DEPT, null); + if (goodsOption != null) { + String value = goodsOption.getValue(); + if(StringUtils.isNotBlank(value)){ + String[] nameArray = value.split(";"); + for (int j = 0; j < nameArray.length; j++) { + String name = nameArray[j]; + if(StringUtils.isNotBlank(departs)){ + departs += ","; + } + departs += "'" + name + "'"; + } + } + } + if(StringUtils.isBlank(departs)){ + departs = "''";//产品说没有值就不查了.保持上个版本的逻辑不变 + } + monthlyStr = dateQueryAdapter.dateConverAdapter3("rr.recyclingTime",mmOrdd); + String sql8 = " select count(*) amount," + + monthlyStr + + " monthStr from RecyclingRecord rr " + + " where rr.depart in ("+ departs + ")" + + " and rr.orgUnitCoding='" + querySupplyRoom + "' " + + " and rr.recyclingTime between " + startDay + " and " + endDay + + " group by " + + monthlyStr; + ResultSet rs8 = null; + try { + logger.debug("消毒供应中心年度工作量统计报表下收下送数量查询:"+sql8); + rs8 = objectDao.executeSql(sql8); + while (rs8.next()) { + Integer amount8 = rs8.getInt("amount"); + String month = DateTools.getSpliceZeroString(rs8.getString("monthStr")); + nextSendAmountMap.put(month, amount8); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs8); + } + } + //核算月报 + if(orgUnitCodes.size() > 0){ + monthlyStr = dateQueryAdapter.dateConverAdapter3("tempTable.sendTime",mmOrdd); + String monthReportSql = "select sum(tempTable.totalPrice) totalPrice,tempTable.settleAccountsDepartCoding, " + + monthlyStr + + " monthstr from (" + + getMonthReportSql() + + ") tempTable where " + + SqlUtils.getStringFieldInLargeCollectionsPredicate("tempTable.settleAccountsDepartCoding", orgUnitCodes) + + " and tempTable.orgUnitCoding='" + querySupplyRoom + "' " + + " and tempTable.sendTime between " + startDay + " and " + endDay + + " group by settleAccountsDepartCoding, " + + monthlyStr; + ResultSet monthReportRs = null; + try { + logger.debug("消毒供应中心年度工作量统计报表科室核算月报金额查询:"+monthReportSql); + monthReportRs = objectDao.executeSql(monthReportSql); + while (monthReportRs.next()) { + Double totalPrice = monthReportRs.getDouble("totalPrice"); + String month = DateTools.getSpliceZeroString(monthReportRs.getString("monthStr")); + String settleAccountsDepartCoding = monthReportRs.getString("settleAccountsDepartCoding"); + Map monthReportMap = null; + if(monthReportPriceMap.containsKey(settleAccountsDepartCoding)){ + monthReportMap = monthReportPriceMap.get(settleAccountsDepartCoding); + }else{ + monthReportMap = new HashMap(); + monthReportPriceMap.put(settleAccountsDepartCoding, monthReportMap); + } + monthReportMap.put(month, totalPrice); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(monthReportRs); + } + } + if(MapUtils.isNotEmpty(numAndAdverseEventRecord)){ + monthlyStr = dateQueryAdapter.dateConverAdapter3("ad.eventTime",mmOrdd); + String adverseEventRecordSql = "select count(*) amount,ad.timeoutHandType," + + monthlyStr + + " monthStr from " + + AdverseEventRecord.class.getSimpleName() + + " ad join "+ + InvoicePlan.class.getSimpleName() + +" ip on ip.id=ad.recyclingApplication_ID where ip.handleDepartCoding='" + + querySupplyRoom + +"' and ad.eventName='"+ + AdverseEventRecord.EVENTNAME_FOREIGNTOUSSESENDTIMEOUT + + "' and ip.applicationTime between " + startDay + " and " + endDay + + " group by ad.timeoutHandType," + + monthlyStr; + ResultSet adverseEventRecordRs = null; + try { + logger.debug("消毒供应中心年度工作量统计报表不良事件查询:"+adverseEventRecordSql); + adverseEventRecordRs = objectDao.executeSql(adverseEventRecordSql); + while (adverseEventRecordRs.next()) { + String month = DateTools.getSpliceZeroString(adverseEventRecordRs.getString("monthStr")); + Integer amount = adverseEventRecordRs.getInt("amount"); + String timeoutHandType = adverseEventRecordRs.getString("timeoutHandType"); + Map map = null; + if(adverseEventRecordAmountMap.containsKey(timeoutHandType)){ + map = adverseEventRecordAmountMap.get(timeoutHandType); + }else{ + map = new HashMap(); + adverseEventRecordAmountMap.put(timeoutHandType, map); + } + amountTotalMap.put(timeoutHandType, MathTools.add(amount, amountTotalMap.get(timeoutHandType)).intValue()); + map.put(month, amount); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(adverseEventRecordRs); + } + } + + //构建list,主要是没数据的月份也需要有YearWorkloadBean对象返回,所以没有在resultset里添加 + Set removeTitles = new HashSet(); + for (int i = 0; i < monthArr.length; i++) { + String month = monthArr[i]; + String yearMonth = yearMonthMap.get(month); + for(Entry entry : numAndAdverseEventRecord.entrySet()){ + Integer num = entry.getKey(); + JSONObject dataConfig = entry.getValue(); + String dataIndexNameForDisplay = dataConfig.optString("dataIndexNameForDisplay"); + if(adverseEventRecordAmountMap.size() == 0){ + removeTitles.add(AdverseEventRecord.EVENTNAME_FOREIGNTOUSSESENDTIMEOUT); + break; + } + int sumAmount = 0; + for(Entry> entry2 : adverseEventRecordAmountMap.entrySet()){ + String key = entry2.getKey(); + Map map = entry2.getValue(); + if(map.containsKey(month)){ + if(adverseEventRecordAmountMap.size() > 1){ + sumAmount = MathTools.add(sumAmount, map.get(month)).intValue(); + } + amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(map.get(month) + , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); + } + addYearWorkLoadBean(i, month, map, num, AdverseEventRecord.EVENTNAME_FOREIGNTOUSSESENDTIMEOUT + "_" + key, list, yearMonth); + } + if(adverseEventRecordAmountMap.size() > 1){ + YearWorkloadBean beanSum = new YearWorkloadBean(i, yearMonth, num, AdverseEventRecord.EVENTNAME_FOREIGNTOUSSESENDTIMEOUT + "_合计", sumAmount); + list.add(beanSum); + } + } + for(Entry entry : numAndOrgUnitCode.entrySet()){ + Integer num = entry.getKey(); + JSONObject dataConfig = entry.getValue(); + String orgUnitCode = dataConfig.optString("orgUnitCode"); + String dataIndexSource = dataConfig.optString("dataIndexSource"); + String dataIndexNameForDisplay = dataConfig.optString("dataIndexNameForDisplay"); + if(monthReportPriceMap.size() == 0){ + removeTitles.add(dataIndexSource); + break; + } + Map monthReportMap = monthReportPriceMap.get(orgUnitCode); + if(MapUtils.isEmpty(monthReportMap)){ + continue; + } + if(monthReportMap.containsKey(month)){ + priceTotalMap.put(dataIndexNameForDisplay, MathTools.add(monthReportMap.get(month) + , priceTotalMap.get(dataIndexNameForDisplay)).doubleValue()); + } + addYearWorkLoadBeanPrice(i, month, monthReportMap, num, dataIndexNameForDisplay, list, yearMonth); + } + for(Entry entry : uniqueDataIndexSources.entrySet()){ + Integer num = entry.getKey(); + JSONObject dataConfig = entry.getValue(); + String dataIndexSource = dataConfig.optString("dataIndexSource"); + String dataIndexNameForDisplay = dataConfig.optString("dataIndexNameForDisplay"); + if("处理器械总件数".equals(dataIndexSource)){ + if(MapUtils.isNotEmpty(totalTousseMap)){ + if(totalTousseMap.containsKey(month)){ + amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(totalTousseMap.get(month) + , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); + } + addYearWorkLoadBean(i, month, totalTousseMap, num, dataIndexNameForDisplay, list, yearMonth); + }else{ + removeTitles.add(dataIndexSource); + } + }else if("处理外来手术器械总件数".equals(dataIndexSource)){ + if(MapUtils.isNotEmpty(totalForeignTousseMap)){ + if(totalForeignTousseMap.containsKey(month)){ + amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(totalForeignTousseMap.get(month) + , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); + } + addYearWorkLoadBean(i, month, totalForeignTousseMap, num, dataIndexNameForDisplay, list, yearMonth); + }else{ + removeTitles.add(dataIndexSource); + } + }else if("消毒物品数量".equals(dataIndexSource)){ + if(MapUtils.isNotEmpty(disinfectionMap)){ + if(disinfectionMap.containsKey(month)){ + amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(disinfectionMap.get(month) + , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); + } + addYearWorkLoadBean(i, month, disinfectionMap, num, dataIndexNameForDisplay, list, yearMonth); + }else{ + removeTitles.add(dataIndexSource); + } + }else if("复用性灭菌物品总件数".equals(dataIndexSource)){ + if(MapUtils.isNotEmpty(sterileMap)){ + if(sterileMap.containsKey(month)){ + amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(sterileMap.get(month) + , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); + } + addYearWorkLoadBean(i, month, sterileMap, num, dataIndexNameForDisplay, list, yearMonth); + }else{ + removeTitles.add(dataIndexSource); + } + }else if("灭菌外来手术器械包数".equals(dataIndexSource)){ + if(MapUtils.isNotEmpty(sterileForeignMap)){ + if(sterileForeignMap.containsKey(month)){ + amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(sterileForeignMap.get(month) + , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); + } + addYearWorkLoadBean(i, month, sterileForeignMap, num, dataIndexNameForDisplay, list, yearMonth); + }else{ + removeTitles.add(dataIndexSource); + } + }else if("生物监测次数".equals(dataIndexSource)){ + if(MapUtils.isNotEmpty(sterilizationRecordCountMap)){ + if(sterilizationRecordCountMap.containsKey(month)){ + amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(sterilizationRecordCountMap.get(month) + , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); + } + addYearWorkLoadBean(i, month, sterilizationRecordCountMap, num, dataIndexNameForDisplay, list, yearMonth); + }else{ + removeTitles.add(dataIndexSource); + } + }else if("复用性物品发货数量".equals(dataIndexSource)){ + if(MapUtils.isNotEmpty(tousseInvoiceSendMap)){ + if(tousseInvoiceSendMap.containsKey(month)){ + amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(tousseInvoiceSendMap.get(month) + , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); + } + addYearWorkLoadBean(i, month, tousseInvoiceSendMap, num, dataIndexNameForDisplay, list, yearMonth); + }else{ + removeTitles.add(dataIndexSource); + } + }else if("一次性物品发放数量".equals(dataIndexSource)){ + if(MapUtils.isNotEmpty(disposableGoodsSendMap)){ + if(disposableGoodsSendMap.containsKey(month)){ + amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(disposableGoodsSendMap.get(month) + , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); + } + addYearWorkLoadBean(i, month, disposableGoodsSendMap, num, dataIndexNameForDisplay, list, yearMonth); + }else{ + removeTitles.add(dataIndexSource); + } + }else if("处理腔镜器械总件数(材料类型为腔镜)".equals(dataIndexSource)){ + if(MapUtils.isNotEmpty(endoscopicMap)){ + if(endoscopicMap.containsKey(month)){ + amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(endoscopicMap.get(month) + , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); + } + addYearWorkLoadBean(i, month, endoscopicMap, num, dataIndexNameForDisplay, list, yearMonth); + }else{ + removeTitles.add(dataIndexSource); + } + }else if("下收下送次数(中六模式)".equals(dataIndexSource)){ + String startMonthDay = year + "-" + month + "-01 00:00:00"; + String endMonthDay = null; + if (i == 11) { + endMonthDay = (Integer.parseInt(year) + 1) + "-01-01 00:00:00"; + }else{ + endMonthDay = year + "-" + (i + 2) + "-01 00:00:00"; + } + Date startMonthDate = null; + Date endMonthDate = null; + try{ + startMonthDate = dateFormat.parse(startMonthDay); + endMonthDate = dateFormat.parse(endMonthDay); + }catch(Exception e){ + e.printStackTrace(); + } + //下收下送次数 + Integer clinicAmount = 0; + if(startMonthDate != null && endMonthDate != null){ + Date nowDate = new Date(); + if(nowDate.after(endMonthDate)){ + // 当前时间在结束时间之后,获取改月的天数 + clinicAmount = getMaxDayByYearMonth(Integer.parseInt(year),i+1); + }else{ + if(nowDate.after(startMonthDate)){ + Calendar nowCalendar = Calendar.getInstance(); + Calendar startCalendar = Calendar.getInstance(); + nowCalendar.setTime(nowDate); + startCalendar.setTime(startMonthDate); + // 当前时间在开始时间和结束时间之间 去现在时间和开始时间差的天数 + clinicAmount = nowCalendar.get(Calendar.DAY_OF_YEAR) - startCalendar.get(Calendar.DAY_OF_YEAR); + } + } + } + Integer amount8 = null; + if(nextSendAmountMap.containsKey(month)){ + amount8 = nextSendAmountMap.get(month); + }else{ + amount8 = 0; + } + //数量=查询出来的数量+月的天数*4(每天去4个科室,如果一月有30天就去了120次) + amount8 = amount8 + clinicAmount*4; + YearWorkloadBean bean8 = new YearWorkloadBean(i, yearMonth, num, dataIndexNameForDisplay, amount8); + amountTotalMap.put(dataIndexNameForDisplay, MathTools.add(amount8 + , amountTotalMap.get(dataIndexNameForDisplay)).intValue()); + list.add(bean8); + } + } + } + //构建前台需要的列名和汇总信息 + JSONArray titleArr = new JSONArray(); + if(StringUtils.isNotBlank(dataConfigStr)){ + dataConfigArr = JSONArray.fromObject(dataConfigStr); + for (int i = 0; i < dataConfigArr.size(); i++) { + JSONObject dataConfig = (JSONObject)dataConfigArr.get(i); + String dataIndexSource = dataConfig.optString("dataIndexSource"); + if(removeTitles.contains(dataIndexSource)){ + continue; + } + if("灭菌器使用炉次".equals(dataIndexSource)){ + for (String ownGroup : sterilizerUseAmountMap.keySet()) { + JSONObject obj = new JSONObject(); + String key = sterilizerUseCountCn + " (" + ownGroup + ")"; + obj.put("title", key); + obj.put("sumAmount", amountTotalMap.get(key)); + titleArr.add(obj); + } + }else if("不良事件统计报表".equals(dataIndexSource)){ + if(adverseEventRecordAmountMap.size() == 0){ + continue; + } + String[] childrens = null; + String[] sumAmounts = null; + if(adverseEventRecordAmountMap.size() > 1){ + childrens = new String[adverseEventRecordAmountMap.keySet().size() + 1]; + sumAmounts = new String[adverseEventRecordAmountMap.keySet().size() + 1]; + }else{ + childrens = new String[adverseEventRecordAmountMap.keySet().size()]; + sumAmounts = new String[adverseEventRecordAmountMap.keySet().size()]; + } + int k = 0; + int sumAmount = 0; + for (String key : adverseEventRecordAmountMap.keySet()) { + sumAmounts[k] = amountTotalMap.get(key) + ""; + sumAmount = MathTools.add(sumAmount, amountTotalMap.get(key)).intValue(); + childrens[k] = key; + k++; + } + if(adverseEventRecordAmountMap.size() > 1){ + childrens[adverseEventRecordAmountMap.size()] = "合计"; + sumAmounts[adverseEventRecordAmountMap.size()] = sumAmount + ""; + } + JSONObject obj = new JSONObject(); + obj.put("children", childrens); + obj.put("sumAmount", sumAmounts); + obj.put("title", dataConfig.optString("dataIndexNameForDisplay")); + titleArr.add(obj); + } else if("科室核算月报金额".equals(dataIndexSource)){ + if(monthReportPriceMap.size() == 0){ + continue; + } + JSONObject obj = new JSONObject(); + obj.put("sumPrice", priceTotalMap.get(dataConfig.optString("dataIndexNameForDisplay"))); + obj.put("title", dataConfig.optString("dataIndexNameForDisplay")); + titleArr.add(obj); + } else { + JSONObject obj = new JSONObject(); + obj.put("sumAmount", amountTotalMap.get(dataConfig.optString("dataIndexNameForDisplay"))); + obj.put("title", dataConfig.optString("dataIndexNameForDisplay")); + titleArr.add(obj); + } + } + } + parametMap.put("titleArr", titleArr); + return list; + } + /** + * 获取核算月报sql + * @return + */ + private String getMonthReportSql(){ + //发货(一次性物品) + String sql = "select '发货' bussinessType,i.sendTime,i.orgUnitCoding,i.settleAccountsDepartCoding,i.settleAccountsDepart,i.applicant " + + ",'一次性物品' type,dg.inventorySerialNumber,dg.name,dg.specification,di.batch batchNumber,di.amount,di.fluctuationPrice,di.amount*di.fluctuationPrice totalPrice,ip.projName proj_name,ip.projCode proj_code,warehouseName in_store_name,warehouseID in_store_code " + + "from invoice i " + + "join DiposableGoodsItem di on di.invoice_id=i.id " + + "join DisposableGoods dg on di.disposableGoodsID=dg.id " + + "left join invoicePlan ip on ip.id=i.invoicePlan_ID"; + //退货(一次性物品) + sql += " union all select '退货' bussinessType,rgr.returnTime sendtime,rgr.handleDepartCode orgUnitCoding,rgr.departCoding settleAccountsDepartCoding,rgr.depart settleAccountsDepart,rgr.operator applicant " + + ",'一次性物品' type,dg.inventorySerialNumber,dg.name,dg.specification,di.batch batchNumber,-1 * di.returnedAmount amount,di.fluctuationPrice price,-1 * di.returnedAmount * di.fluctuationPrice totalPrice,ip.projName proj_name,ip.projCode proj_code " + + ",rgr.warehouseName in_store_name,warehouseID in_store_code " + + "from ReturnGoodsRecord rgr " + + "join DiposableGoodsItem di on di.returnGoodsRecordID=rgr.id " + + "join DisposableGoods dg on dg.id=di.disposableGoodsID " + + "left join invoicePlan ip on ip.id=rgr.invoicePlanId"; + //领用(一次性物品) + sql += " union all select '领用' bussinessType,rr.time,rr.departCoding,rr.departCoding settleAccountsDepartCoding ,rr.depart settleAccountsDepart,rr.operator " + + ",'一次性物品' type,dg.inventorySerialNumber,dg.name,dg.specification,dgb.batchNumber batchNumber,rri.amount,rri.price,rri.price*rri.amount totalPrice, null,null " + + ",rr.warehouseName in_store_name,rr.warehouseId in_store_code " + + "from ReceiveRecord rr join receiveRecordItem rri on rr.id=rri.receiveRecord_id " + + "join disposablegoodsbatch dgb on dgb.id=rri.disposableGoodsBatchId " + + "join DisposableGoods dg on dg.id=dgb.diposablegoods_id " + + "where rri.type='一次性物品'"; + //盘亏出库 + sql += " union all select '盘亏出库' bussinessType,ge.time,ge.orgUnitCode,ge.orgUnitCode settleAccountsDepartCoding,ge.orgUnitName settleAccountsDepart,ge.operator " + + ",'一次性物品' type,dg.inventorySerialNumber,dg.name,dg.specification " + + ",dgb.batchNumber,gedgi.amount,gedgi.price,gedgi.amount * gedgi.price totalPrice,null,null " + + ",ge.warehouseName in_store_name,ge.warehouseID in_store_code " + + "from GodownEntry ge join GodownEntryDiposableGoodsItem gedgi on ge.id=gedgi.godownEntryID " + + "join DisposableGoods dg on dg.id=gedgi.disposableGoodsID " + + "join DisposableGoodsBatch dgb on dgb.id=gedgi.disposableGoodsBatchID " + + "where ge.subType='盘亏出库'"; + //调拨出库 + sql += " union all select '调拨出库' bussinessType,ge.time,ge.orgUnitCode,ge.targetOrgUnitCode settleAccountsDepartCoding,ge.targetOrgUnitName settleAccountsDepart,ge.operator " + + ",'一次性物品' type,dg.inventorySerialNumber,dg.name,dg.specification " + + ",gei.batchNumber,gei.amount,gei.cost,gei.amount * gei.cost totalPrice,null,null " + + ",ge.warehouseName in_store_name,ge.warehouseID in_store_code " + + "from GodownEntry ge join GodownEntryItem gei on ge.id=gei.godownEntry_id " + + "join DisposableGoods dg on dg.id=gei.disposableGoodsID " + + "where ge.subType='调拨出库'"; + //发货(器械包、敷料包、外来器械包、外部代理灭菌包) + sql += " union all select '发货' bussinessType,i.sendTime businessTime,i.orgUnitCoding,i.settleAccountsDepartCoding settleAccountsDepartCoding,i.settleAccountsDepart settleAccountsDepart " + + ",i.applicant,ii.tousseType,null,ii.tousseName,null,null " + + ",sum(ii.amount) amount,sum(ii.settlementPrice)/sum(ii.amount),sum(ii.settlementPrice),ip.projName proj_name,ip.projCode proj_code " + + ",i.warehouseName in_store_name,i.warehouseID in_store_code " + + "from invoice i join invoiceitem ii on i.id=ii.invoice_id " + + "join toussedefinition td on ii.toussedefinitionId=td.id " + + "left join invoicePlan ip on ip.id=i.invoicePlan_ID " + + "where ii.diposable='否' " + + "and ii.toussetype in ('器械包','敷料包','外来器械包','外来器械拆分小包','外部代理灭菌') " + + "group by i.sendTime,i.serialNumber,i.orgUnitCoding,i.settleAccountsDepartCoding,i.settleAccountsDepart " + + ",i.applicant,ii.tousseType,ii.tousseName" + //+ ",ti.price " + + " ,ip.projName,ip.projCode,i.warehouseName ,i.warehouseID"; + //发货(消毒物品) + sql += " union all select '发货' bussinessType,i.sendTime businessTime,i.orgUnitCoding,i.settleAccountsDepartCoding ,i.settleAccountsDepart " + + ",i.applicant,ii.tousseType,null,ii.tousseName,null,null,sum(ii.amount) amount,sum(ii.settlementPrice)/sum(ii.amount),sum(ii.settlementPrice),ip.projName proj_name,ip.projCode proj_code " + + ",i.warehouseName in_store_name,i.warehouseID in_store_code " + + "from invoice i join invoiceitem ii on i.id=ii.invoice_id " + + "left join invoicePlan ip on ip.id=i.invoicePlan_ID " + + "where ii.diposable='否' " + + "and ii.toussetype='消毒物品' " + + "group by i.sendTime,i.serialNumber,i.orgUnitCoding,i.settleAccountsDepartCoding,i.settleAccountsDepart " + + ",i.applicant,ii.tousseType,ii.tousseName,ip.projName ,ip.projCode ,i.warehouseName ,i.warehouseID"; + //自定义器械包(自定义器械包) + sql += " union all select '发货' bussinessType,i.sendTime,i.orgUnitCoding,i.settleAccountsDepartCoding,i.settleAccountsDepart " + + ",i.applicant,ii.tousseType,null,ii.tousseName,null,null,sum(ti.statisticsAmount),ti.price,sum(ti.price) totalPrice,ip.projName proj_name,ip.projCode proj_code,i.warehouseName in_store_name,i.warehouseID in_store_code " + + "from invoice i join invoiceitem ii on i.id=ii.invoice_id " + + "join toussedefinition td on ii.toussedefinitionId=td.id and ii.diposable='否' " + + "join TousseInstance ti on ti.toussedefinition_id=td.id and ti.invoice_id=i.id " + + "left join invoicePlan ip on ip.id=i.invoicePlan_ID " + + "where ii.diposable='否' and ii.toussetype = '自定义器械包' " + + "group by i.sendTime,i.serialNumber,i.orgUnitCoding,i.settleAccountsDepartCoding,i.settleAccountsDepart " + + ",i.applicant,ii.tousseType,ii.tousseName,ti.price " + + " ,ip.projName ,ip.projCode ,i.warehouseName ,i.warehouseID"; + //材料发货 + sql += " union all select '发货' bussinessType,mi.sendTime,mi.orgUnitCoding,mi.departCoding settleAccountsDepartCoding,mi.depart settleAccountsDepart " + + ",mi.sender,'材料' tousseType,md.inventorySerialNumber,md.name,md.specification,null batchNumber,mim.amount,mim.price,mim.amount * mim.price totalPrice,null,null,mi.warehouseName in_store_name,mi.warehouseId in_store_code " + + "from MaterialInvoice mi " + + "join MaterialItem mim on mim.materialInvoice_id=mi.id " + + "join MaterialDefinition md on mim.materialDefinitionId=md.id"; + //器械包退货(器械包、敷料包、消毒物品(整)、高值耗材) + sql += " union all select '退货' bussinessType,rgr.returnTime,rgr.handleDepartCode,rgr.departCoding settleAccountsDepartCoding,rgr.depart settleAccountsDepart " + + ",rgr.returnOfPeople,td.tousseType type,null,td.name,null,null batchNumber,-sum(rgi.amount) as amount, -sum(rgi.settlementPrice) fluctuationPrice,-sum(rgi.settlementPrice) totalPrice,ip.projName proj_name,ip.projCode proj_code " + + ",rgr.warehouseName in_store_name,rgr.warehouseID in_store_code " + + "from ReturnGoodsRecord rgr " + + "join ReturnGoodsItem rgi on rgr.id=rgi.returnGoodsRecord_ID " + + "join TousseDefinition td on td.id=rgi.tousseDefinition_id " + + " left join DisposableGoodsBatchStock dgbs on rgi.disposableGoodsBatchStockID=dgbs.id " + + "left join invoicePlan ip on ip.id=rgr.invoicePlanId " + + "where rgi.tousseDefinition_id is not null " + + "and (td.tousseType in ('器械包','敷料包') or (td.tousseType='消毒物品' and td.isApplyEntireTousse='是')) " + + "group by rgr.returnTime,rgr.id,rgr.handleDepartCode,rgr.departCoding,rgr.depart " + + ",rgr.returnOfPeople,td.tousseType,td.name,ip.projName ,ip.projCode ,rgr.warehouseName ,rgr.warehouseID "; + //器械包退货(消毒物品(拆)) + sql += " union all select '退货' bussinessType,rgr.returnTime,rgr.handleDepartCode,rgr.departCoding settleAccountsDepartCoding ,rgr.depart settleAccountsDepart " + + ",rgr.returnOfPeople,td.tousseType,null,td.name,null,null batchNumber,-1 * (select sum(mi.count) from MaterialInstance mi where mi.tousse_id=td.id),sum(ti.price)/(select sum(mi.count) from MaterialInstance mi where mi.tousse_id=td.id),-1 * sum(ti.price),ip.projName proj_name,ip.projCode proj_code " + + ",rgr.warehouseName in_store_name,rgr.warehouseID in_store_code " + + "from ReturnGoodsRecord rgr join ReturnGoodsItem rgi on rgr.id=rgi.returnGoodsRecord_ID " + + "join TousseDefinition td on td.id=rgi.tousseDefinition_id " + + "join TousseInstance ti on ti.tousseDefinition_id=td.id and ti.returnGoodsItem_ID=rgi.id " + + "join TousseDefinition td2 on td2.id=ti.tousseDefinition_id and td2.ancestorID=td.ancestorID " + + "left join invoicePlan ip on ip.id=rgr.invoicePlanId " + + "where rgi.tousseDefinition_id is not null and td.tousseType='消毒物品' and td.isApplyEntireTousse='否' " + + "group by rgr.returnTime,rgr.id,rgr.handleDepartCode,rgr.departCoding,rgr.depart " + + ",rgr.returnOfPeople,td.tousseType,td.id,td.name,ti.price,ip.projName ,ip.projCode ,rgr.warehouseName ,rgr.warehouseID "; + //材料退货 + sql += " union all select '退货' bussinessType,rmr.returnTime,rmr.handleDepartCode,rmr.departCoding settleAccountsDepartCoding,rmr.depart settleAccountsDepart " + + ",rmr.returnOfPeople,'材料' toussetype,md.inventorySerialNumber,md.name,md.specification,null batchNumber,-1 * mi.amount,mi.price,-1 * mi.amount * mi.price,null,null " + + ",rmr.warehouseName in_store_name,rmr.warehouseId in_store_code " + + "from ReturnMaterialRecord rmr join materialItem mi on mi.returnMaterialRecordID=rmr.id " + + "join MaterialDefinition md on mi.materialDefinitionId=md.id"; + //领用(材料) + sql += " union all select '领用' bussinessType,rr.time,rr.departCoding,rr.departCoding settleAccountsDepartCoding,rr.depart settleAccountsDepart, " + + "rr.operator,rri.type tousseType,md.inventorySerialNumber,md.name,md.specification,null batchNumber,rri.amount,rri.price,rri.settlementPrice,null,null,rr.warehouseName in_store_name,rr.warehouseId in_store_code " + + "from ReceiveRecord rr join receiveRecordItem rri on rr.id=rri.receiveRecord_id " + + "join MaterialDefinition md on md.id=rri.materialDefinition_id " + + "where rri.type='材料'"; + //盘亏出库材料 + sql += " union all select '盘亏出库' bussinessType,me.time,w.orgUnitCode,w.orgUnitCode settleAccountsDepartCoding,w.orgUnitName settleAccountsDepart " + + ",me.operator,'材料' tousseType,md.inventorySerialNumber,md.name,md.specification " + + ",null batchNumber,mei.amount,mei.cost,mei.amount * mei.cost,null,null,me.wareHouseName in_store_name,me.wareHouseId in_store_code " + + "from MaterialEntry me join MaterialEntryItem mei on me.id=mei.materialEntry_id " + + "join WareHouse w on w.id=me.wareHouseId " + + "join MaterialDefinition md on md.id=mei.materialDefinition_id " + + "where me.subType='盘亏出库'"; + //调拨出库材料 + sql += " union all select '调拨出库' bussinessType,me.time,w.orgUnitCode,targetW.orgUnitCode settleAccountsDepartCoding,targetW.orgUnitName settleAccountsDepart " + + ",me.operator,'材料' tousseType,md.inventorySerialNumber,md.name,md.specification " + + ",null batchNumber,mei.amount,mei.cost,mei.amount * mei.cost,null,null,me.wareHouseName in_store_name,me.wareHouseId in_store_code " + + "from MaterialEntry me join MaterialEntryItem mei on me.id=mei.materialEntry_id " + + "join WareHouse w on w.id=me.wareHouseId " + + "join WareHouse targetW on targetW.id=me.targetWareHouseId " + + "join MaterialDefinition md on md.id=mei.materialDefinition_id " + + "where me.subType='调拨出库'"; + //材料丢失报损补充 + sql += " union all select '丢失报损补充' bussinessType,case when medd.additionalTime is not null then medd.additionalTime else medd.operationTime end, " + + "medd.handleDepartCode,medd.departCode settleAccountsDepartCoding,medd.depart settleAccountsDepart,medd.additionalPerson " + + ",'材料' tousseType,md.inventorySerialNumber,md.name,md.specification,null batchNumber,medd.additionalAmount,medd.materialCost,medd.additionalAmount * medd.materialCost,null,null " + + ",medd.warehouseName in_store_name,medd.warehouseId in_store_code " + + "from MaterialErrorDamageDetail medd " + + "join MaterialDefinition md on md.id=medd.materialDefinitionId " + + "where additionalAmount > 0 and materialDefinitionId is not null"; + //标识牌丢失补充 + sql += " union all select '丢失报损补充' bussinessType,case when medd.additionalTime is not null then medd.additionalTime else medd.operationTime end, " + + "medd.handleDepartCode,medd.departCode settleAccountsDepartCoding,medd.depart settleAccountsDepart,medd.additionalPerson,'器械包标识牌' tousseType,md.inventorySerialNumber,md.name,md.specification,null batchNumber,medd.additionalAmount,medd.materialCost,medd.additionalAmount * medd.materialCost,null,null " + + ",medd.warehouseName in_store_name,medd.warehouseId in_store_code " + + "from MaterialErrorDamageDetail medd " + + "join MaterialDefinition md on md.id=medd.materialDefinitionId " + + "where additionalAmount > 0 and (materialDefinitionId is null or materialDefinitionId=0)"; + // 收费项目 + sql += " union all select '收费项目' bussinessType, chargeTime time ,ci.orgUnitCode orgUnitCoding,ci.orgUnitCode settleAccountsDepartCoding,ci.orgUnitName settleAccountsDepart,cr.operator, " + + "'收费项目' type, null inventorySerialNumber,ci.chargeItem name,null specification,null batchNumber,0 amount,ci.price fluctuationPrice, price totalPrice,null,null,null in_store_name, null in_store_code " + + "from ChargeRecordItem ci " + + "inner join ChargeRecord cr on cr.id=ci.chargeRecord_id "; + return sql; + } + /** + * 添加YearWorkLoadBean到YearWorkLoadBeanList,如果没有则添加的对象amount=0 + * @param rowSequence rowSequence + * @param month 月份 + * @param map key:年月 value:数量 + * @param columnSequence 列序号 + * @param columnName 列名 + * @param list YearWorkLoadBeanList + * @param 年月 报表显示用 + */ + protected void addYearWorkLoadBean(Integer rowSequence ,String month, Map map, Integer columnSequence, String columnName, List list, String yearMonth){ + Integer amount = null; + if(map.containsKey(month)){ + amount = map.get(month); + }else{ + amount = 0; + } + YearWorkloadBean bean = new YearWorkloadBean(rowSequence ,yearMonth, columnSequence, columnName, amount); + list.add(bean); + } + private void addYearWorkLoadBeanPrice(Integer rowSequence ,String month, Map map, Integer columnSequence, String columnName, List list, String yearMonth){ + Double price = null; + if(map.containsKey(month)){ + price = map.get(month); + }else{ + price = 0.0; + } + YearWorkloadBean bean = new YearWorkloadBean(rowSequence ,yearMonth, columnSequence, columnName, price); + list.add(bean); + } + private int getMaxDayByYearMonth(int year, int month) { + Calendar calendar = Calendar.getInstance(); + calendar.set(Calendar.YEAR, year - 1); + calendar.set(Calendar.MONTH, month-1); + return calendar.getActualMaximum(Calendar.DATE); + } +} Index: forgon-tools/src/main/java/com/forgon/tools/date/DateTools.java =================================================================== diff -u -r35655 -r35794 --- forgon-tools/src/main/java/com/forgon/tools/date/DateTools.java (.../DateTools.java) (revision 35655) +++ forgon-tools/src/main/java/com/forgon/tools/date/DateTools.java (.../DateTools.java) (revision 35794) @@ -999,4 +999,26 @@ } return num; } + /** + * 获取下一个月份 + * @param year + * @param mm + * @return + */ + public static String getNextMonth(String year,String mm) { + Calendar c = Calendar.getInstance(); + c.set(Integer.parseInt(year), Integer.parseInt(mm), 1); + return YMDFORMAT.get().format(c.getTime()); + } + /** + * 获取一个月中的天数 + * @param year + * @param mm + * @return + */ + public static int getDayCountOfMonth(String year,String mm) { + Calendar c = Calendar.getInstance(); + c.set(Integer.parseInt(year), Integer.parseInt(mm) - 1, 1); + return c.getActualMaximum(Calendar.DAY_OF_MONTH); + } } Index: ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-service.xml =================================================================== diff -u -r35793 -r35794 --- ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-service.xml (.../applicationContext-service.xml) (revision 35793) +++ ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-service.xml (.../applicationContext-service.xml) (revision 35794) @@ -785,5 +785,7 @@ + + \ No newline at end of file