Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r36327 -r36811 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 36327) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 36811) @@ -72,8 +72,6 @@ import com.forgon.disinfectsystem.jasperreports.javabeansource.AdverseEventRecordReportVo; import com.forgon.disinfectsystem.jasperreports.javabeansource.ApparatusInfusionisType; import com.forgon.disinfectsystem.jasperreports.javabeansource.BiologicalMonitoringReportVo; -import com.forgon.disinfectsystem.jasperreports.javabeansource.BorrowingRecordItemVo; -import com.forgon.disinfectsystem.jasperreports.javabeansource.BorrowingRecordVo; import com.forgon.disinfectsystem.jasperreports.javabeansource.CleaningAreaWorkloadForUser; import com.forgon.disinfectsystem.jasperreports.javabeansource.CrossTableBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.CssdWorkloadReportForTangshanWorkersVO; @@ -203,7 +201,6 @@ import com.forgon.disinfectsystem.jasperreports.util.TousseSterilizationInspectSituationHelper; import com.forgon.disinfectsystem.jasperreports.util.TousseWorkLoadDataForDLZXYYHelper; import com.forgon.disinfectsystem.jasperreports.util.TousseWorkLoadHelper; -import com.forgon.disinfectsystem.jasperreports.util.UrgentNeedGoodsProcessingCycleHelper; import com.forgon.disinfectsystem.jasperreports.util.UseRecordEnterReportHelper; import com.forgon.disinfectsystem.jasperreports.util.UseRecordItemsReportHelper; import com.forgon.disinfectsystem.jasperreports.util.WashReportHelper; @@ -323,8 +320,6 @@ @Autowired private MaterialStockReportHelper materialStockReportHelper; @Autowired - private UrgentNeedGoodsProcessingCycleHelper urgentNeedGoodsProcessingCycleHelper; - @Autowired private AmountContrastReportHelper amountContrastReportHelper; @Autowired private TousseMorrowSendReportHelper tousseMorrowSendReportHelper; @@ -744,18 +739,7 @@ String startDay, String endDay, String departCoding, String showDetail) { return reportHelper1.getApparatusInfusionis(startDay, endDay, departCoding, showDetail); } - @Override - public List getBorrowingRecord(String startDay, - String endDay, String goodsName, String deptName) { - return borrowingReportReportHelper.getBorrowingRecord(startDay, endDay, goodsName, deptName); - } - @Override - public List getBorrowingRecordSummary(String startDay, - String endDay, String goodsName, String deptName) { - return borrowingReportReportHelper.getBorrowingRecordSummary(startDay, endDay, goodsName, deptName); - } - @Override public List getForeignTousseApplicationReport( String timeType, String startDay, String endDay, String goodsName, String deptName , String patientName , String deliverStatus, String companyName, String departOfPatient, boolean noDisplayTerminatedIP, String customColumnName1, Map parametMap, Long materialId, boolean showNoInvoie, String tousseDefinitionName, String used, Long customTimePeriodId) { return foreignTousseApplicationReportHelper.getForeignTousseApplicationReport(timeType, startDay, endDay, goodsName, deptName, patientName, deliverStatus, companyName, departOfPatient, noDisplayTerminatedIP, customColumnName1, parametMap, materialId, showNoInvoie, tousseDefinitionName, used, customTimePeriodId); @@ -1184,12 +1168,6 @@ String endTime, String tousseName) { return operationReservationInvoiceHelper.getOperationReservationSumData(startTime, endTime, tousseName); } - - @Override - public List getUrgentNeedGoodsProcessingCycleData( - String startTime, String endTime, String tousseName, String departCoding, String tousseTypes, String departs) { - return urgentNeedGoodsProcessingCycleHelper.getUrgentNeedGoodsProcessingCycleData(startTime, endTime, tousseName, departCoding, tousseTypes, departs); - } @Override public List getMaterialMissItemViewDataSource(String startDay, Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/WorkQualityCollection.java =================================================================== diff -u -r34557 -r36811 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/WorkQualityCollection.java (.../WorkQualityCollection.java) (revision 34557) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/WorkQualityCollection.java (.../WorkQualityCollection.java) (revision 36811) @@ -81,6 +81,24 @@ private String decUnQualityAmount = "0"; private Double decPercentage; + /** + * 第一季度 + */ + private String firstQuarterTotalAmount = "0"; + private String firstQuarterTotalUnQualityAmount = "0"; + private Double firstQuarterTotalPercentage; + + private String secondQuarterTotalAmount = "0"; + private String secondQuarterTotalUnQualityAmount = "0"; + private Double secondQuarterTotalPercentage; + + private String thirdQuarterTotalAmount = "0"; + private String thirdQuarterTotalUnQualityAmount = "0"; + private Double thirdQuarterTotalPercentage; + + private String fourthQuarterTotalAmount = "0"; + private String fourthQuarterTotalUnQualityAmount = "0"; + private Double fourthQuarterTotalPercentage; private String firstHalfYearAmount = "0"; private String firstHalfYearUnQualityAmount = "0"; @@ -551,4 +569,104 @@ this.descriptionOfDataIndex = descriptionOfDataIndex; } + public String getFirstQuarterTotalAmount() { + return firstQuarterTotalAmount; + } + + public void setFirstQuarterTotalAmount(String firstQuarterTotalAmount) { + this.firstQuarterTotalAmount = firstQuarterTotalAmount; + } + + public String getFirstQuarterTotalUnQualityAmount() { + return firstQuarterTotalUnQualityAmount; + } + + public void setFirstQuarterTotalUnQualityAmount( + String firstQuarterTotalUnQualityAmount) { + this.firstQuarterTotalUnQualityAmount = firstQuarterTotalUnQualityAmount; + } + + public Double getFirstQuarterTotalPercentage() { + return firstQuarterTotalPercentage; + } + + public void setFirstQuarterTotalPercentage(Double firstQuarterTotalPercentage) { + this.firstQuarterTotalPercentage = firstQuarterTotalPercentage; + } + + public String getSecondQuarterTotalAmount() { + return secondQuarterTotalAmount; + } + + public void setSecondQuarterTotalAmount(String secondQuarterTotalAmount) { + this.secondQuarterTotalAmount = secondQuarterTotalAmount; + } + + public String getSecondQuarterTotalUnQualityAmount() { + return secondQuarterTotalUnQualityAmount; + } + + public void setSecondQuarterTotalUnQualityAmount( + String secondQuarterTotalUnQualityAmount) { + this.secondQuarterTotalUnQualityAmount = secondQuarterTotalUnQualityAmount; + } + + public Double getSecondQuarterTotalPercentage() { + return secondQuarterTotalPercentage; + } + + public void setSecondQuarterTotalPercentage(Double secondQuarterTotalPercentage) { + this.secondQuarterTotalPercentage = secondQuarterTotalPercentage; + } + + public String getThirdQuarterTotalAmount() { + return thirdQuarterTotalAmount; + } + + public void setThirdQuarterTotalAmount(String thirdQuarterTotalAmount) { + this.thirdQuarterTotalAmount = thirdQuarterTotalAmount; + } + + public String getThirdQuarterTotalUnQualityAmount() { + return thirdQuarterTotalUnQualityAmount; + } + + public void setThirdQuarterTotalUnQualityAmount( + String thirdQuarterTotalUnQualityAmount) { + this.thirdQuarterTotalUnQualityAmount = thirdQuarterTotalUnQualityAmount; + } + + public Double getThirdQuarterTotalPercentage() { + return thirdQuarterTotalPercentage; + } + + public void setThirdQuarterTotalPercentage(Double thirdQuarterTotalPercentage) { + this.thirdQuarterTotalPercentage = thirdQuarterTotalPercentage; + } + + public String getFourthQuarterTotalAmount() { + return fourthQuarterTotalAmount; + } + + public void setFourthQuarterTotalAmount(String fourthQuarterTotalAmount) { + this.fourthQuarterTotalAmount = fourthQuarterTotalAmount; + } + + public String getFourthQuarterTotalUnQualityAmount() { + return fourthQuarterTotalUnQualityAmount; + } + + public void setFourthQuarterTotalUnQualityAmount( + String fourthQuarterTotalUnQualityAmount) { + this.fourthQuarterTotalUnQualityAmount = fourthQuarterTotalUnQualityAmount; + } + + public Double getFourthQuarterTotalPercentage() { + return fourthQuarterTotalPercentage; + } + + public void setFourthQuarterTotalPercentage(Double fourthQuarterTotalPercentage) { + this.fourthQuarterTotalPercentage = fourthQuarterTotalPercentage; + } + } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/CustomReports.java =================================================================== diff -u -r35589 -r36811 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/CustomReports.java (.../CustomReports.java) (revision 35589) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/CustomReports.java (.../CustomReports.java) (revision 36811) @@ -24,8 +24,12 @@ import com.forgon.directory.model.OrgUnitGroup; import com.forgon.directory.service.BrancheOfHospitalManager; import com.forgon.directory.service.OrgUnitGroupManager; +import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; +import com.forgon.disinfectsystem.jasperreports.javabeansource.SupplyRoomQualityQuota; import com.forgon.disinfectsystem.jasperreports.javabeansource.WorkQualityCollection; import com.forgon.disinfectsystem.jasperreports.service.dataindex.DataIndex; import com.forgon.disinfectsystem.jasperreports.service.dataindex.WorkQualityCollectionDataIndex; @@ -83,6 +87,7 @@ operatingRoomNamesSet = SqlUtils.splitStringToSet(operatingRoomNames, ","); } Map> departNmaesOfbranchesOfHospitalMap = new HashMap>();//院区和科室的map 避免重复查询院区 + Set departNamesByBranchesOfHospital = null; for (int i = 0; i < dataIndexsArray.size(); i++) { JSONObject dataConfig = (JSONObject)dataIndexsArray.get(i); String dataIndexSource = dataConfig.optString("dataIndexSource"); @@ -91,28 +96,49 @@ if("灭菌器使用炉次".equals(dataIndexSource)){ // 灭菌器使用炉次 workQualityCollectionDataIndex.getCountFrequencyOfMonth(startAndEndDays, list,querySupplyRoom,false,dataIndexNameForDisplay); + }else if("灭菌器使用炉次(按灭菌炉分组)".equals(dataIndexSource)){ + workQualityCollectionDataIndex.getCountFrequencyOfMonth(startAndEndDays, list,querySupplyRoom,true,dataIndexNameForDisplay); }else if("清洗机使用炉次".equals(dataIndexSource)){ getRinserUseCountOfMonth(startAndEndDays, list, querySupplyRoom, dataIndexNameForDisplay); }else if("处理器械包总包数".equals(dataIndexSource)){ workQualityCollectionDataIndex.getSendTousseAmount(startAndEndDays, list,querySupplyRoom,dataIndexNameForDisplay); + }else if("敷料包发货数量".equals(dataIndexSource)){ + workQualityCollectionDataIndex.getSendTousseAmount(startAndEndDays, list,querySupplyRoom,dataIndexNameForDisplay + , " and td.tousseType='"+ TousseDefinition.PACKAGE_TYPE_DRESSING +"' "); + }else if("复用性物品发货数量(不灭菌)".equals(dataIndexSource)){ + //器械包 一次发货 + String extraWhereSql = " and ti.sterilizationRecord_id is null and not EXISTS (select 1 from sterilization_reviewed srd where ti.reviewBasket_id=srd.reviewedBasket_id) "; + workQualityCollectionDataIndex.getTousseAmountOrmaterialAmount(startAndEndDays, list, querySupplyRoom, dataIndexNameForDisplay, "复用性物品发货数量(不灭菌)", extraWhereSql); + }else if("复用性物品发货数量(灭菌)".equals(dataIndexSource)){ + //器械包 一次发货 + String extraWhereSql = " and (ti.sterilizationRecord_id is not null or EXISTS (select 1 from sterilization_reviewed srd where ti.reviewBasket_id=srd.reviewedBasket_id)) "; + workQualityCollectionDataIndex.getTousseAmountOrmaterialAmount(startAndEndDays, list, querySupplyRoom, dataIndexNameForDisplay, "复用性物品发货数量(灭菌)", extraWhereSql); + }else if("复用性物品发货数量".equals(dataIndexSource)){ + workQualityCollectionDataIndex.getTousseAmountOrmaterialAmount(startAndEndDays, list, querySupplyRoom, dataIndexNameForDisplay, "复用性物品发货数量", ""); }else if("处理临床器械总件数".equals(dataIndexSource)){//除大德路总院中除麻醉1区、麻醉2区、大院门诊手术室外的全部科室 String branchesOfHospital = dataConfig.optString("branchesOfHospital"); - Set departs = getDepartNamesByBranchesOfHospitalArrStrMap(branchesOfHospital,departNmaesOfbranchesOfHospitalMap); - String departSql = " and " + SqlUtils.getStringFieldInLargeCollectionsPredicate("ci.orgUnitName", departs, "1=1"); + if(departNamesByBranchesOfHospital == null){ + departNamesByBranchesOfHospital = getDepartNamesByBranchesOfHospitalArrStrMap(branchesOfHospital,departNmaesOfbranchesOfHospitalMap); + } + String departSql = " and " + SqlUtils.getStringFieldInLargeCollectionsPredicate("ci.orgUnitName", departNamesByBranchesOfHospital, "1=1"); String notInDepartSql = ""; if(CollectionUtils.isNotEmpty(operatingRoomNamesSet)){ notInDepartSql = " and " + SqlUtils.getStringFieldNotInCollectionsPredicate("ci.orgUnitName", new ArrayList(operatingRoomNamesSet)); } workQualityCollectionDataIndex.getWashMaterialAmount(startAndEndDays, list,querySupplyRoom,notInDepartSql + departSql,dataIndexNameForDisplay); + }else if("处理器械总件数".equals(dataIndexSource)){ + workQualityCollectionDataIndex.getWashMaterialAmount(startAndEndDays, list,querySupplyRoom,null,dataIndexNameForDisplay); }else if("处理手术器械总件数".equals(dataIndexSource)){ String branchesOfHospital = dataConfig.optString("branchesOfHospital"); - Set departs = getDepartNamesByBranchesOfHospitalArrStrMap(branchesOfHospital,departNmaesOfbranchesOfHospitalMap); + if(departNamesByBranchesOfHospital == null){ + departNamesByBranchesOfHospital = getDepartNamesByBranchesOfHospitalArrStrMap(branchesOfHospital,departNmaesOfbranchesOfHospitalMap); + } String departSql = null; if(CollectionUtils.isNotEmpty(operatingRoomNamesSet)){ - if(CollectionUtils.isNotEmpty(departs)){ + if(CollectionUtils.isNotEmpty(departNamesByBranchesOfHospital)){ HashSet resSet = new HashSet<>(); resSet.addAll(operatingRoomNamesSet); - resSet.retainAll(departs);//取交集 + resSet.retainAll(departNamesByBranchesOfHospital);//取交集 if(CollectionUtils.isEmpty(resSet)){ departSql = " and 1=2 "; }else{ @@ -161,6 +187,17 @@ } // 灭菌物品总包数(普通灭菌、代理灭菌、外来器械灭菌)的统计,上下半年数据. workQualityCollectionDataIndex.getCustomSterilizationAmount(startAndEndDays, list,querySupplyRoom,extraQuery,dataIndexNameForDisplay); + }else if("手术器械包次日下送发生率".equals(dataIndexSource)){ + Set departs = objectDao.getStringSet("select ou.name from "+ OrgUnitGroup.class.getSimpleName() +" oug inner join Org_OrgGroup oog on oug.id=oog.orgGroupId " + + "inner join "+ OrgUnit.class.getSimpleName() +" ou on ou.id=oog.orgUnitId where oug.groupType='" + + OrgUnitGroup.GROUP_TYPE_OPERATIONROOM_GROUP +"' ", ""); + String pDepartSql = null; + if(CollectionUtils.isNotEmpty(departs)){ + pDepartSql = SqlUtils.getInStringListSql("p.depart", departs); + }else{ + pDepartSql = " and (p.depart like '%手术室%' or p.depart like '%麻醉%') "; + } + workQualityCollectionDataIndex.getSecordDaySendTousseAmount(startAndEndDays, list, querySupplyRoom, true, pDepartSql,dataIndexNameForDisplay); } } if(CollectionUtils.isNotEmpty(list) && ("split".equals(type) || "compareToLastYear".equals(type))){ @@ -254,7 +291,7 @@ //查询的时间段 String betweenSql = String.format(" between %s and %s ", dateQueryAdapter.dateAdapter(queryYear),dateQueryAdapter.dateAdapter(nextYear)); //数据库计算字符串长度的函数名 - String sqlLengthFunctionName = DatabaseUtil.getSqlLengthFunctionName(dbConnection); + //String sqlLengthFunctionName = DatabaseUtil.getSqlLengthFunctionName(dbConnection); ReportQueryParams reportParams = new ReportQueryParams(objectDao); reportParams.betweenSql = betweenSql; @@ -276,14 +313,41 @@ String dataIndexSource = dataConfig.optString("dataIndexSource"); String dataIndexNameForDisplay = dataConfig.optString("dataIndexNameForDisplay"); if("灭菌器使用炉次".equals(dataIndexSource)){ - workQualityCollectionDataIndex.getCountFrequencyOfMonthAllYear(year, list,querySupplyRoom,false,dataIndexNameForDisplay); + workQualityCollectionDataIndex.getCountFrequencyOfMonthAllYear(year, list,querySupplyRoom,false,dataIndexNameForDisplay); + }else if(SupplyRoomQualityQuota.DATAINDEXSOURCE_STERILIZER_USEAMOUNT_BY_GROUP.equals(dataIndexSource)){ + workQualityCollectionDataIndex.getCountFrequencyOfMonthAllYear(year, list,querySupplyRoom,true,dataIndexNameForDisplay); + }else if(SupplyRoomQualityQuota.DATAINDEXSOURCE_STERILIZER_USEAMOUNT_BY_GROUP.equals(dataIndexSource)){ + workQualityCollectionDataIndex.getSterilizerUseAmountMap(list, betweenSql, querySupplyRoom, dataIndexNameForDisplay, "灭菌器使用炉次", "mm");; }else if("清洗机使用炉次".equals(dataIndexSource)){ getRinserUseCountOfMonthAllYear(year, list, querySupplyRoom, dataIndexNameForDisplay); }else if("处理器械包总包数".equals(dataIndexSource)){ reportParams.includeDisposableGoods = false; reportParams.extraQuery = ""; reportParams.isDisableIDCardSqlWithAliasOfTousseDefinitionIsTd = ""; workQualityCollectionDataIndex.getSendTousseAmountAllYear(list,reportParams,dataIndexNameForDisplay); + }else if("敷料包发货数量".equals(dataIndexSource)){ + reportParams.includeDisposableGoods = false; + reportParams.extraQuery = ""; + reportParams.isDisableIDCardSqlWithAliasOfTousseDefinitionIsTd = ""; + reportParams.extraSql = " and td.tousseType='"+ TousseDefinition.PACKAGE_TYPE_DRESSING +"' "; + workQualityCollectionDataIndex.getSendTousseAmountAllYear(list,reportParams,dataIndexNameForDisplay); + reportParams.extraSql = ""; + }else if("复用性物品发货数量(不灭菌)".equals(dataIndexSource)){ + + //器械包 一次发货 + String extraWhereSql = " and ti.sterilizationRecord_id is null and not EXISTS (select 1 from sterilization_reviewed srd where ti.reviewBasket_id=srd.reviewedBasket_id) "; + getTousseAmountOrmaterialAmountOfInvoice(list, betweenSql, querySupplyRoom, dataIndexNameForDisplay, dataIndexSource, extraWhereSql); + + }else if("复用性物品发货数量(灭菌)".equals(dataIndexSource)){ + + //器械包 一次发货 + String extraWhereSql = " and (ti.sterilizationRecord_id is not null or EXISTS (select 1 from sterilization_reviewed srd where ti.reviewBasket_id=srd.reviewedBasket_id)) "; + getTousseAmountOrmaterialAmountOfInvoice(list, betweenSql, querySupplyRoom, dataIndexNameForDisplay, dataIndexSource, extraWhereSql); + + }else if("复用性物品发货数量".equals(dataIndexSource)){ + + getTousseAmountOrmaterialAmountOfInvoice(list, betweenSql, querySupplyRoom, dataIndexNameForDisplay, dataIndexSource, ""); + }else if("处理临床器械总件数".equals(dataIndexSource)){//除大德路总院中除麻醉1区、麻醉2区、大院门诊手术室外的全部科室 String branchesOfHospital = dataConfig.optString("branchesOfHospital"); Set departs = getDepartNamesByBranchesOfHospitalArrStrMap(branchesOfHospital,departNmaesOfbranchesOfHospitalMap); @@ -294,6 +358,14 @@ } reportParams.extraQuery = departSql + notInDepartSql; workQualityCollectionDataIndex.getWashMaterialAmountAllYear(list,reportParams,dataIndexNameForDisplay); + }else if("处理器械总件数".equals(dataIndexSource)){ + reportParams.extraQuery = ""; + workQualityCollectionDataIndex.getWashMaterialAmountAllYear(list,reportParams,dataIndexNameForDisplay); + }else if("处理外来手术器械总件数".equals(dataIndexSource)){ + reportParams.extraQuery = ""; + reportParams.tousseTypeAndPackageSizeSql = " and td.tousseType in('"+ TousseDefinition.PACKAGE_TYPE_FOREIGN +"','"+ TousseDefinition.PACKAGE_TYPE_SPLIT+"') "; + workQualityCollectionDataIndex.getWashMaterialAmountAllYear(list,reportParams,dataIndexNameForDisplay); + reportParams.tousseTypeAndPackageSizeSql = ""; }else if("处理手术器械总件数".equals(dataIndexSource)){//大德路总院 麻醉1区、麻醉2区、大院门诊手术室 String branchesOfHospital = dataConfig.optString("branchesOfHospital"); Set departs = getDepartNamesByBranchesOfHospitalArrStrMap(branchesOfHospital,departNmaesOfbranchesOfHospitalMap); @@ -352,12 +424,88 @@ } } workQualityCollectionDataIndex.getCustomSterilizationAmountAllYear(year, list, reportParams, dataIndexNameForDisplay); + + }else if("手术器械包次日下送发生率".equals(dataIndexSource)){ + + Set departs = objectDao.getStringSet("select ou.name from "+ OrgUnitGroup.class.getSimpleName() +" oug inner join Org_OrgGroup oog on oug.id=oog.orgGroupId " + + "inner join "+ OrgUnit.class.getSimpleName() +" ou on ou.id=oog.orgUnitId where oug.groupType='" + + OrgUnitGroup.GROUP_TYPE_OPERATIONROOM_GROUP +"' ", ""); + String pDepartSql = null; + if(CollectionUtils.isNotEmpty(departs)){ + reportParams.extraSql = SqlUtils.getInStringListSql("i.depart", departs); + pDepartSql = SqlUtils.getInStringListSql("p.depart", departs); + }else{ + reportParams.extraSql = " and (i.depart like '%手术室%' or i.depart like '%麻醉%') "; + pDepartSql = " and (p.depart like '%手术室%' or p.depart like '%麻醉%') "; + } + Map invoiceOperateAmountMap = workQualityCollectionDataIndex.getInvoiceAmountMap(reportParams,null); + workQualityCollectionDataIndex.getSecordDaySendTousseAmountAllYear(year, list, querySupplyRoom, invoiceOperateAmountMap, true, pDepartSql,dataIndexNameForDisplay); + } } return list; } - /** + * 复用性物品发货数量(包件混合) + * @param list + * @param betweenSql 日期范围 + * @param querySupplyRoom 供应室 + * @param dataIndexNameForDisplay 指标指定显示名 + * @param defaultName 指标默认名称 + * @param extraWhereSql 额外的查询条件 + */ + private void getTousseAmountOrmaterialAmountOfInvoice(List list, String betweenSql, String querySupplyRoom + , String dataIndexNameForDisplay, String defaultName, String extraWhereSql){ + //器械包 一次发货 + String monthlyStr = dateQueryAdapter.dateConverAdapter3("sendTime","mm"); + boolean showCustonTousseAmount = CssdUtils.getSystemSetConfigByNameBool("isMonthReportShowCustonTousseAmount", false); + int dataSoureOfMaterialsCountOfToussesInReports = CssdUtils.getSystemSetConfigByNameInt("dataSoureOfMaterialsCountOfToussesInReports", 3); + String columnSql = null; + String joinMaterialInstanceSql = null; + if(dataSoureOfMaterialsCountOfToussesInReports == 3){ + columnSql = "ti.materialAmount"; + joinMaterialInstanceSql = ""; + }else{ + columnSql = "m.mcount"; + joinMaterialInstanceSql = " left join ( select ctd.id, sum(cmi.count) as mcount from TousseDefinition ctd inner join MaterialInstance cmi on ctd.id = cmi.tousse_id group by ctd.id ) m on m.id = td.id"; + } + String cumstomTousseAmount = showCustonTousseAmount?" 1 ":" case when " + + columnSql + + " is null then 1 else " + + columnSql + + " end "; + String tousseAmount = null; + boolean isStatisticDisinfectionGoodsAmountByPackage = CssdUtils.getSystemSetConfigByNameBool("isStatisticDisinfectionGoodsAmountByPackage", false); + if(isStatisticDisinfectionGoodsAmountByPackage){ + tousseAmount = " case td.toussetype when '"+TousseDefinition.PACKAGE_TYPE_CUSTOM+"' then " + cumstomTousseAmount + + " else 1 end "; + }else{ + tousseAmount = " case td.toussetype when '"+TousseDefinition.PACKAGE_TYPE_CUSTOM+"' then " + cumstomTousseAmount + + " when '"+TousseDefinition.PACKAGE_TYPE_DISINFECTION+"' then case when " + + columnSql + + " is null then 1 else " + + columnSql + + " end else 1 end "; + } + String querySql = "select "+ monthlyStr +" monthstr,sum(amount) amount from(select "+ tousseAmount +" amount, i.sendTime from " + + Invoice.class.getSimpleName() + " i inner join " + TousseInstance.class.getSimpleName() + " ti on i.id = ti.invoice_id " + + " inner join " + TousseDefinition.class.getSimpleName() + " td on ti.tousseDefinition_id=td.id " + + joinMaterialInstanceSql + +" where i.sendTime" + betweenSql + + SqlUtils.get_InSql_Extra("i.orgUnitCoding", querySupplyRoom) + + extraWhereSql + //器械包 二次发货 + + " union all select "+ tousseAmount +" amount,i.sendTime from " + + Invoice.class.getSimpleName() + " i inner join " + TousseInstance.class.getSimpleName() + " ti on i.id = ti.invoice2_id " + + " inner join " + TousseDefinition.class.getSimpleName() + " td on ti.tousseDefinition_id=td.id " + + joinMaterialInstanceSql + +" where i.sendTime " + betweenSql + + SqlUtils.get_InSql_Extra("i.orgUnitCoding", querySupplyRoom) + + extraWhereSql + + ") t group by " + monthlyStr; + workQualityCollectionDataIndex.getAllYearBean(list, dataIndexNameForDisplay, defaultName, querySql); + } + /** * 获取全年清洗机使用次数 * @param year 年份 * @param list Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java =================================================================== diff -u -r36703 -r36811 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 36703) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 36811) @@ -94,17 +94,20 @@ import com.forgon.disinfectsystem.jasperreports.javabeansource.SupplyRoomQualityQuota; import com.forgon.disinfectsystem.jasperreports.javabeansource.TousseSterilizationInspectSituationBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.UrgentNeedGoodsProcessingCycle; +import com.forgon.disinfectsystem.jasperreports.javabeansource.WorkQualityCollection; import com.forgon.disinfectsystem.jasperreports.service.CustomReports; import com.forgon.disinfectsystem.jasperreports.service.CustomReportsOfDgsfy; import com.forgon.disinfectsystem.jasperreports.service.CustomReportsOfXjjqzyy; import com.forgon.disinfectsystem.jasperreports.service.CustomReportsOfZsyy; import com.forgon.disinfectsystem.jasperreports.service.InvoiceReportManager; import com.forgon.disinfectsystem.jasperreports.service.JasperReportManager; import com.forgon.disinfectsystem.jasperreports.service.WorkQualityCollectionReport; +import com.forgon.disinfectsystem.jasperreports.util.BorrowingReportReportHelper; import com.forgon.disinfectsystem.jasperreports.util.InstrumentRepairReportHelper; import com.forgon.disinfectsystem.jasperreports.util.LineGraphReportOfWorkloadByTimePeriodHelper; import com.forgon.disinfectsystem.jasperreports.util.MonthReportHelper; import com.forgon.disinfectsystem.jasperreports.util.TousseTournoverDaysStatisticsReportHelper; +import com.forgon.disinfectsystem.jasperreports.util.UrgentNeedGoodsProcessingCycleHelper; import com.forgon.disinfectsystem.jasperreports.util.WorkloadAndIncomeStatisticsReportHelper; import com.forgon.disinfectsystem.recyclingrecord.service.RecyclingItemManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; @@ -167,6 +170,20 @@ private TousseTournoverDaysStatisticsReportHelper tousseTournoverDaysStatisticsReportHelper; private LineGraphReportOfWorkloadByTimePeriodHelper lineGraphReportOfWorkloadByTimePeriodHelper; + + + private UrgentNeedGoodsProcessingCycleHelper urgentNeedGoodsProcessingCycleHelper; + + private BorrowingReportReportHelper borrowingReportReportHelper; + + public void setBorrowingReportReportHelper( + BorrowingReportReportHelper borrowingReportReportHelper) { + this.borrowingReportReportHelper = borrowingReportReportHelper; + } + public void setUrgentNeedGoodsProcessingCycleHelper( + UrgentNeedGoodsProcessingCycleHelper urgentNeedGoodsProcessingCycleHelper) { + this.urgentNeedGoodsProcessingCycleHelper = urgentNeedGoodsProcessingCycleHelper; + } public void setLineGraphReportOfWorkloadByTimePeriodHelper( LineGraphReportOfWorkloadByTimePeriodHelper lineGraphReportOfWorkloadByTimePeriodHelper) { this.lineGraphReportOfWorkloadByTimePeriodHelper = lineGraphReportOfWorkloadByTimePeriodHelper; @@ -969,8 +986,13 @@ JSONObject dataConfig = (JSONObject)dataIndexsArray.get(i); dataIndexSources.add(dataConfig.optString("dataIndexSource")); } - return customReports.getWorkQualityCollectionList(year, + List list = customReports.getWorkQualityCollectionList(year, type,querySupplyRoom ,null,params,dataIndexsArray,dataIndexSources,dataConfigObj); + if("allYear".equals(type)){ + JSONObject comapreReportsSettings = dataConfigObj.optJSONObject("comapreReportsSettings"); + setAllYearColumnsSettingsOfDataIndexOfWorkQualityCollection(list, comapreReportsSettings); + } + return list; }else if("true".equals(isZSYYWorkQualityCollectionStr)){ return customReportsOfZsyy.getWorkQualityCollectionList(year, type,querySupplyRoom ,null,params); @@ -1908,10 +1930,10 @@ String queryType = StrutsParamUtils.getPraramValue("queryType", ""); if("汇总".equals(queryType)){ - return jasperReportManager.getBorrowingRecordSummary(startDay, endDay, goodsName, deptName); + return borrowingReportReportHelper.getBorrowingRecordSummary(startDay, endDay, goodsName, deptName); }else{ // 获取借物明细 - return jasperReportManager.getBorrowingRecord(startDay, endDay, goodsName, deptName); + return borrowingReportReportHelper.getBorrowingRecord(startDay, endDay, goodsName, deptName); } }else if(reportName.equals("foreignTousseApplicationReport")){ @@ -2082,7 +2104,7 @@ String departs = StrutsParamUtils.getPraramValue("departs", ""); String urgentTotalMsg = "";//加急物品物品总计信息 if (StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime)) { - List firstColumnVos = jasperReportManager.getUrgentNeedGoodsProcessingCycleData(startTime, endTime, tousseName, departCoding, tousseTypes,departs); + List firstColumnVos = urgentNeedGoodsProcessingCycleHelper.getUrgentNeedGoodsProcessingCycleData(startTime, endTime, tousseName, departCoding, tousseTypes,departs); if(CollectionUtils.isNotEmpty(firstColumnVos)){//统计加急物品物品 Map urgentLevelToUrgentAmountMap = new HashMap(); Integer totalUrgentAmount = 0; @@ -4576,5 +4598,150 @@ StrutsResponseUtils.output(false, e.getMessage()); } } + /** + * 设置全年查询中配置的额外列的值 + * @param list + * @param comapreReportsSettings + */ + private void setAllYearColumnsSettingsOfDataIndexOfWorkQualityCollection(List list, JSONObject comapreReportsSettings){ + if(CollectionUtils.isEmpty(list)){ + return; + } + if(comapreReportsSettings == null){ + return; + } + JSONArray allYearColumnsSettingsOfDataIndex = comapreReportsSettings.optJSONArray("allYearColumnsSettingsOfDataIndex"); + if(CollectionUtils.isEmpty(allYearColumnsSettingsOfDataIndex)){ + return; + } + boolean queryFirstHalfTotal = false; + boolean querySecondHalfTotal = false; + boolean queryFirstQuarterTotal = false; + boolean querySecondQuarterTotal = false; + boolean queryThirdQuarterTotal = false; + boolean queryFourthQuarterTotal = false; + for (int i = 0; i < allYearColumnsSettingsOfDataIndex.size(); i++) { + JSONObject allYearColumnObj = (JSONObject)allYearColumnsSettingsOfDataIndex.get(i); + String columnName = allYearColumnObj.optString("columnName"); + if("firstHalfTotal".equals(columnName)){ + queryFirstHalfTotal = true; + }else if("secondHalfTotal".equals(columnName)){ + querySecondHalfTotal = true; + }else if("firstQuarterTotal".equals(columnName)){ + queryFirstQuarterTotal = true; + }else if("secondQuarterTotal".equals(columnName)){ + querySecondQuarterTotal = true; + }else if("thirdQuarterTotal".equals(columnName)){ + queryThirdQuarterTotal = true; + }else if("fourthQuarterTotal".equals(columnName)){ + queryFourthQuarterTotal = true; + } + } + for (WorkQualityCollection bean : list) { + int janAmount = MathTools.parseInt(bean.getJanAmount(),0); + int febAmount = MathTools.parseInt(bean.getFebAmount(),0); + int marAmount = MathTools.parseInt(bean.getMarAmount(),0); + int aprAmount = MathTools.parseInt(bean.getAprAmount(),0); + int mayAmount = MathTools.parseInt(bean.getMayAmount(),0); + int junAmount = MathTools.parseInt(bean.getJunAmount(),0); + int julAmount = MathTools.parseInt(bean.getJulAmount(),0); + int augAmount = MathTools.parseInt(bean.getAugAmount(),0); + int sepAmount = MathTools.parseInt(bean.getSepAmount(),0); + int octAmount = MathTools.parseInt(bean.getOctAmount(),0); + int novAmount = MathTools.parseInt(bean.getNovAmount(),0); + int decAmount = MathTools.parseInt(bean.getDecAmount(),0); + if(bean.getTitle().contains("率")){ + int janUnQualityAmount = MathTools.parseInt(bean.getJanUnQualityAmount(),0); + int febUnQualityAmount = MathTools.parseInt(bean.getFebUnQualityAmount(),0); + int marUnQualityAmount = MathTools.parseInt(bean.getMarUnQualityAmount(),0); + int aprUnQualityAmount = MathTools.parseInt(bean.getAprUnQualityAmount(),0); + int mayUnQualityAmount = MathTools.parseInt(bean.getMayUnQualityAmount(),0); + int junUnQualityAmount = MathTools.parseInt(bean.getJunUnQualityAmount(),0); + int julUnQualityAmount = MathTools.parseInt(bean.getJulUnQualityAmount(),0); + int augUnQualityAmount = MathTools.parseInt(bean.getAugUnQualityAmount(),0); + int sepUnQualityAmount = MathTools.parseInt(bean.getSepUnQualityAmount(),0); + int octUnQualityAmount = MathTools.parseInt(bean.getOctUnQualityAmount(),0); + int novUnQualityAmount = MathTools.parseInt(bean.getNovUnQualityAmount(),0); + int decUnQualityAmount = MathTools.parseInt(bean.getDecUnQualityAmount(),0); + if(queryFirstHalfTotal){ + bean.setFirstHalfYearPercentage(MathTools.getRatio((janUnQualityAmount + + febUnQualityAmount + + marUnQualityAmount + + aprUnQualityAmount + + mayUnQualityAmount + + junUnQualityAmount) * 100, janAmount + + febAmount + + marAmount + + aprAmount + + mayAmount + + junAmount)); + } + if(querySecondHalfTotal){ + bean.setSecondHalfYearPercentage(MathTools.getRatio((julUnQualityAmount + + augUnQualityAmount + + sepUnQualityAmount + + octUnQualityAmount + + novUnQualityAmount + + decUnQualityAmount) * 100, julAmount + + augAmount + + sepAmount + + octAmount + + novAmount + + decAmount)); + } + if(queryFirstQuarterTotal){ + bean.setFirstQuarterTotalPercentage(MathTools.getRatio((janUnQualityAmount + + febUnQualityAmount + + marUnQualityAmount) * 100, janAmount + + febAmount + + marAmount)); + } + if(querySecondQuarterTotal){ + bean.setSecondQuarterTotalPercentage(MathTools.getRatio(( + + aprUnQualityAmount + + mayUnQualityAmount + + junUnQualityAmount) * 100, + + aprAmount + + mayAmount + + junAmount)); + } + if(queryThirdQuarterTotal){ + bean.setThirdQuarterTotalPercentage(MathTools.getRatio((julUnQualityAmount + + augUnQualityAmount + + sepUnQualityAmount) * 100, julAmount + + augAmount + + sepAmount)); + } + if(queryFourthQuarterTotal){ + bean.setFourthQuarterTotalPercentage(MathTools.getRatio(( + + octUnQualityAmount + + novUnQualityAmount + + decUnQualityAmount) * 100, + + octAmount + + novAmount + + decAmount)); + } + }else{ + if(queryFirstHalfTotal){ + bean.setFirstHalfYearAmount(Integer.toString(janAmount + febAmount + marAmount + aprAmount + mayAmount + junAmount)); + } + if(querySecondHalfTotal){ + bean.setSecondHalfYearAmount(Integer.toString(julAmount + augAmount + sepAmount + octAmount + novAmount + decAmount)); + } + if(queryFirstQuarterTotal){ + bean.setFirstQuarterTotalAmount(Integer.toString(janAmount + febAmount + marAmount)); + } + if(querySecondQuarterTotal){ + bean.setSecondQuarterTotalAmount(Integer.toString(aprAmount + mayAmount + junAmount)); + } + if(queryThirdQuarterTotal){ + bean.setThirdQuarterTotalAmount(Integer.toString(julAmount + augAmount + sepAmount)); + } + if(queryFourthQuarterTotal){ + bean.setFourthQuarterTotalAmount(Integer.toString(octAmount + novAmount + decAmount)); + } + } + } + } } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/dataindex/WorkQualityCollectionDataIndex.java =================================================================== diff -u -r35816 -r36811 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/dataindex/WorkQualityCollectionDataIndex.java (.../WorkQualityCollectionDataIndex.java) (revision 35816) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/dataindex/WorkQualityCollectionDataIndex.java (.../WorkQualityCollectionDataIndex.java) (revision 36811) @@ -11,9 +11,9 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; import net.sf.json.JSONObject; - import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -32,9 +32,12 @@ import com.forgon.disinfectsystem.diposablegoods.service.GodownEntryItemManager; import com.forgon.disinfectsystem.entity.basedatamanager.reportoption.GoodsOption; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; import com.forgon.disinfectsystem.foreigntousseapplication.service.ForeignTousseApplicationManager; import com.forgon.disinfectsystem.jasperreports.javabeansource.WorkQualityCollection; import com.forgon.disinfectsystem.jasperreports.service.JasperReportManager; +import com.forgon.disinfectsystem.jasperreports.util.DataHelper; import com.forgon.disinfectsystem.jasperreports.util.FormDefinitionHelper; import com.forgon.disinfectsystem.qualitymonitoring.definition.service.QualityMonitoringDefinitionManager; import com.forgon.disinfectsystem.reportforms.vo.ReportQueryParams; @@ -46,6 +49,7 @@ import com.forgon.disinfectsystem.useRecord.service.UseRecordManager; import com.forgon.systemsetting.model.HttpOption; import com.forgon.systemsetting.service.HttpOptionManager; +import com.forgon.tools.MathTools; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.db.InitDbConnection; import com.forgon.tools.hibernate.ObjectDao; @@ -112,6 +116,9 @@ private JasperReportManager jasperReportManager; @Autowired private FormDefinitionHelper formDefinitionHelper; + @Autowired + private DataHelper dataHelper; + /** * * @param startAndEndDays @@ -958,7 +965,8 @@ for(int i=0;i= " + dateQueryAdapter.dateAdapter(startDay) + " and sr.endDate <= " + dateQueryAdapter.dateAdapter(endDay) + " and s.ownGroup = '"+optionText+"'"; - - bean.setRowNum(list.size()+1); - bean.setTitle("灭菌器使用炉次("+optionText+")"); Integer amount = 0; ResultSet rs = objectDao.executeSql(sql); try { while (rs.next()) { amount = rs.getInt(1); + totalAmount += amount; + + bean.setRowNum(list.size()+1); + bean.setTitle(StringUtils.isBlank(dataIndexNameForDisplay)?"灭菌器使用炉次("+optionText+")":dataIndexNameForDisplay+"("+ optionText +")"); dataIndex.setWorkQualityBeanAmount(bean, key, amount); } } catch (SQLException e) { @@ -1024,7 +1033,7 @@ String nextYear = dataIndex.getNextYear(year) + " 00:00:00"; String sql = "select " + dateQueryAdapter.dateConverAdapter3("sr.endDate","mm") + " montrstr, count(*) from sterilizationrecord sr,Sterilizer s " - + "where sr.sterilizer_id = s.id " + SqlUtils.get_InSql_Extra("sr.orgUnitCoding", querySupplyRoom) + + "where sr.sterilizer_id = s.id and (sr.status = '灭菌完成' or sr.status = '灭菌失败') " + SqlUtils.get_InSql_Extra("sr.orgUnitCoding", querySupplyRoom) + " and sr.endDate >= " + dateQueryAdapter.dateAdapter(queryYear) + " and sr.endDate <= " @@ -1033,7 +1042,7 @@ + " group by " + dateQueryAdapter.dateConverAdapter3("sr.endDate","mm"); ResultSet result = objectDao.executeSql(sql); bean.setRowNum(list.size()+1); - bean.setTitle("灭菌器使用炉次("+optionText+")"); + bean.setTitle(StringUtils.isBlank(dataIndexNameForDisplay)?"灭菌器使用炉次("+optionText+")":dataIndexNameForDisplay+"("+ optionText +")"); String key = ""; Integer amount = 0; try { @@ -1201,7 +1210,6 @@ } } - /** * 发放物品总包数(复用物品) 上下半年数量. * @param startAndEndDays @@ -1212,7 +1220,7 @@ */ public void getSendTousseAmount( Map> startAndEndDays, - List list,String querySupplyRoom, String dataIndexNameForDisplay) throws SQLException { + List list,String querySupplyRoom, String dataIndexNameForDisplay, String extraWhereSql) throws SQLException { WorkQualityCollection bean = new WorkQualityCollection(); for (String key : startAndEndDays.keySet()) { String startDay = null; @@ -1230,7 +1238,7 @@ params.querySupplyRoom = querySupplyRoom; //params.sqlLengthFunctionName = DatabaseUtil.getSqlLengthFunctionName(dbConnection); params.includeDisposableGoods = false; - + params.extraWhereSql = extraWhereSql; String sql = String.format("select sum(tl.amount) amount from (" +dataIndex.getWorkAmountByPackageSQL("发货数量", params) + ") tl "); @@ -1255,8 +1263,124 @@ list.add(bean); } } + /** + * 复用性物品发货数量 + * @param startAndEndDays 时间 + * @param list 返回结果beans + * @param querySupplyRoom 供应室 + * @param dataIndexNameForDisplay 指标指定显示名称 + * @param defaultName 指标默认显示名称 + * @param extraWhereSql 额外的查询条件 + * @throws SQLException + */ + public void getTousseAmountOrmaterialAmount( + Map> startAndEndDays, + List list,String querySupplyRoom, String dataIndexNameForDisplay + ,String defaultName, String extraWhereSql) throws SQLException { + WorkQualityCollection bean = new WorkQualityCollection(); + boolean showCustonTousseAmount = CssdUtils.getSystemSetConfigByNameBool("isMonthReportShowCustonTousseAmount", false); + int dataSoureOfMaterialsCountOfToussesInReports = CssdUtils.getSystemSetConfigByNameInt("dataSoureOfMaterialsCountOfToussesInReports", 3); + //器械包 一次发货 + //String monthlyStr = dateQueryAdapter.dateConverAdapter3("sendTime","mm"); + for (String key : startAndEndDays.keySet()) { + String startDay = null; + String endDay = null; + Map innerMap = startAndEndDays.get(key); + for (String keyOfInnerMap : innerMap.keySet()) { + startDay = keyOfInnerMap; + endDay = innerMap.get(keyOfInnerMap); + } + + String betweenSql = String.format(" between %s and %s ", + dateQueryAdapter.dateAdapter(startDay), + dateQueryAdapter.dateAdapter(endDay)); + String columnSql = null; + String joinMaterialInstanceSql = null; + if(dataSoureOfMaterialsCountOfToussesInReports == 3){ + columnSql = "ti.materialAmount"; + joinMaterialInstanceSql = ""; + }else{ + columnSql = "m.mcount"; + joinMaterialInstanceSql = " left join ( select ctd.id, sum(cmi.count) as mcount from TousseDefinition ctd inner join MaterialInstance cmi on ctd.id = cmi.tousse_id group by ctd.id ) m on m.id = td.id"; + } + String cumstomTousseAmount = showCustonTousseAmount?" 1 ":" case when " + + columnSql + + " is null then 1 else " + + columnSql + + " end "; + String tousseAmount = null; + boolean isStatisticDisinfectionGoodsAmountByPackage = CssdUtils.getSystemSetConfigByNameBool("isStatisticDisinfectionGoodsAmountByPackage", false); + if(isStatisticDisinfectionGoodsAmountByPackage){ + tousseAmount = " case td.toussetype when '"+TousseDefinition.PACKAGE_TYPE_CUSTOM+"' then " + cumstomTousseAmount + + " else 1 end "; + }else{ + tousseAmount = " case td.toussetype when '"+TousseDefinition.PACKAGE_TYPE_CUSTOM+"' then " + cumstomTousseAmount + + " when '"+TousseDefinition.PACKAGE_TYPE_DISINFECTION+"' then case when " + + columnSql + + " is null then 1 else " + + columnSql + + " end else 1 end "; + } + String querySql = "select " + //+ monthlyStr +" monthstr," + + "sum(amount) amount from(select "+ tousseAmount +" amount" + //+ ", i.sendTime" + + " from " + + Invoice.class.getSimpleName() + " i inner join " + TousseInstance.class.getSimpleName() + " ti on i.id = ti.invoice_id " + + " inner join " + TousseDefinition.class.getSimpleName() + " td on ti.tousseDefinition_id=td.id " + + joinMaterialInstanceSql + +" where i.sendTime" + betweenSql + + SqlUtils.get_InSql_Extra("i.orgUnitCoding", querySupplyRoom) + + extraWhereSql + //器械包 二次发货 + + " union all select "+ tousseAmount +" amount" + //+ ",i.sendTime" + + " from " + + Invoice.class.getSimpleName() + " i inner join " + TousseInstance.class.getSimpleName() + " ti on i.id = ti.invoice2_id " + + " inner join " + TousseDefinition.class.getSimpleName() + " td on ti.tousseDefinition_id=td.id " + + joinMaterialInstanceSql + +" where i.sendTime " + betweenSql + + SqlUtils.get_InSql_Extra("i.orgUnitCoding", querySupplyRoom) + + extraWhereSql + + ") t "; + //+ "group by " + monthlyStr; + + bean.setTitle(StringUtils.isNotBlank(dataIndexNameForDisplay)?dataIndexNameForDisplay:defaultName); + bean.setRowNum(list.size()+1); + Integer amount = 0; + ResultSet rs = null; + try { + rs = objectDao.executeSql(querySql); + while (rs.next()) { + amount = rs.getInt(1); + dataIndex.setWorkQualityBeanAmount(bean, key, amount); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + } + if (startAndEndDays.size() != 1 || bean.getAmount().intValue() != 0) { + list.add(bean); + } + } /** + * 发放物品总包数(复用物品) 上下半年数量. + * @param startAndEndDays + * @param list + * @param querySupplyRoom + * @param dataIndexNameForDisplay 指标显示名称 + * @throws SQLException + */ + public void getSendTousseAmount( + Map> startAndEndDays, + List list,String querySupplyRoom, String dataIndexNameForDisplay) throws SQLException { + getSendTousseAmount(startAndEndDays, list, querySupplyRoom, dataIndexNameForDisplay, ""); + } + + /** * 发放物品总包数(复用物品) 全年数量. * @param year * @param list @@ -1278,6 +1402,7 @@ reportParams) + ") tl group by monthstr "; reportParams.extraGroupBy = ""; reportParams.extraSelectColumns = ""; + reportParams.monthlyStr = ""; ResultSet result = objectDao.executeSql(sql); bean.setRowNum(list.size()+1); bean.setTitle(StringUtils.isNotBlank(dataIndexNameForDisplay)?dataIndexNameForDisplay:"发放物品总包数(复用物品)"); @@ -1303,8 +1428,112 @@ } list.add(bean); } - + public void getSterilizerUseAmountMap(List list, String betweenSql, String querySupplyRoom + , String dataIndexNameForDisplay, String defaultName, String format){ + String monthlyStr = null; + if("mm".equals(format) || "yyyy".equals(format)){ + monthlyStr = dateQueryAdapter.dateConverAdapter3("sr.enddate",format); + }else{ + monthlyStr = dateQueryAdapter.dateConverAdapter("sr.enddate",null); + } + String querySql = "select "+ monthlyStr +" monthStr,count(*) amount,s.ownGroup from SterilizationRecord sr,Sterilizer s where " + + " sr.sterilizer_id = s.id and (sr.status = '灭菌完成' or sr.status = '灭菌失败') and sr.enddate " + + betweenSql + + SqlUtils.get_InSql_Extra("sr.orgUnitCoding", querySupplyRoom) + + "group by s.ownGroup," + + monthlyStr; + getAllYearBeanGroup(list, dataIndexNameForDisplay, defaultName, querySql); + } /** + * 获取全年的WorkQualityCollection + * @param list + * @param dataIndexNameForDisplay 指标指定显示名 + * @param defaultDisplayName 默认的显示名 + * @param querySql + */ + public void getAllYearBean(List list,String dataIndexNameForDisplay, String defaultDisplayName, String querySql){ + WorkQualityCollection bean = new WorkQualityCollection(); + ResultSet result = null; + bean.setRowNum(list.size()+1); + bean.setTitle(StringUtils.isNotBlank(dataIndexNameForDisplay)?dataIndexNameForDisplay:defaultDisplayName); + String key = ""; + Integer amount = 0; + try { + result = objectDao.executeSql(querySql); + Integer thisYearAmount = 0; + while (result.next()) { + key = result.getString(1); + // 月份以0开头的,去掉0 + if(key.length() > 1 && Integer.valueOf(key) < 10){ + key = Integer.valueOf(key).toString(); + } + amount = result.getInt(2); + thisYearAmount += amount; + dataIndex.setWorkQualityBeanAmount(bean, key, amount); + } + dataIndex.setWorkQualityBeanAmount(bean, "今年", thisYearAmount); + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(result); + } + list.add(bean); + } + /** + * 获取全年的只按时间和另一个字段分组的WorkQualityCollection(如:灭菌器使用炉次(按灭菌炉分组)) + * @param list + * @param dataIndexNameForDisplay 指标指定显示名 + * @param defaultDisplayName 默认的显示名 + * @param querySql(查询列中第一列是时间,第二列是数量,第三列是分组字段) + */ + public void getAllYearBeanGroup(List list,String dataIndexNameForDisplay, String defaultDisplayName, String querySql){ + ResultSet result = null; + try { + result = objectDao.executeSql(querySql); + Map> groupDataMap = new HashMap>(); + while (result.next()) { + String groupName = result.getString(3); + if(StringUtils.isEmpty(groupName)){ + groupName = "无"; + } + String key = result.getString(1); + // 月份以0开头的,去掉0 + if(key.length() > 1 && Integer.valueOf(key) < 10){ + key = Integer.valueOf(key).toString(); + } + Integer amount = result.getInt(2); + Map itemMap = null; + if(groupDataMap.containsKey(groupName)){ + itemMap = groupDataMap.get(groupName); + itemMap.put(key, MathTools.add(itemMap.get(key), amount).intValue()); + }else{ + itemMap = new HashMap(); + itemMap.put(key, amount); + groupDataMap.put(groupName, itemMap); + } + } + if(groupDataMap.size() > 0){ + for (Entry> groupEntry : groupDataMap.entrySet()) { + WorkQualityCollection bean = new WorkQualityCollection(); + bean.setRowNum(list.size()+1); + String groupName = groupEntry.getKey(); + bean.setTitle(StringUtils.isNotBlank(dataIndexNameForDisplay)?dataIndexNameForDisplay+"("+ groupName +")":defaultDisplayName.substring(0, defaultDisplayName.indexOf("(按"))); + Integer thisYearAmount = 0; + for (Entry amountEntry : groupEntry.getValue().entrySet()) { + thisYearAmount = MathTools.add(amountEntry.getValue(), thisYearAmount).intValue(); + dataIndex.setWorkQualityBeanAmount(bean, amountEntry.getKey(), amountEntry.getValue()); + } + dataIndex.setWorkQualityBeanAmount(bean, "今年", thisYearAmount); + list.add(bean); + } + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(result); + } + } + /** * 发放物品总件数(一次性物品)上下半年数量. * @param startAndEndDays * @param list @@ -2160,12 +2389,150 @@ list.add(bean); } } + public void getSecordDaySendTousseAmount( + Map> startAndEndDays, + List list,String querySupplyRoom, + boolean isHidePartOfWorkQualityCollection, String departSql, String dataIndexNameForDisplay){ + WorkQualityCollection bean = new WorkQualityCollection(); + bean.setRowNum(list.size()+1); + bean.setTitle(dataIndexNameForDisplay); + for (String datestr : startAndEndDays.keySet()) { + Map innerMap = startAndEndDays.get(datestr); + String queryYear = null; + String nextYear = null; + for (String keyOfInnerMap : innerMap.keySet()) { + queryYear = keyOfInnerMap; + nextYear = innerMap.get(keyOfInnerMap); + } + String sql = "select " + dateQueryAdapter.dateConverAdapter3("p.applicationTime","mm") + + " monthstr, count(*) from invoiceplan p ,invoice i,tousseinstance t where p.id = i.invoiceplan_id and t.invoice_id = i.id " + + SqlUtils.get_InSql_Extra("i.orgUnitCoding", querySupplyRoom)+ " and " + + dateQueryAdapter.dateToVarchar("p.applicationTime") + + " != " + + dateQueryAdapter.dateToVarchar("i.sendTime") + + departSql + + "and p.applicationTime >= " + + dateQueryAdapter.dateAdapter(queryYear) + + " and p.applicationTime <= " + + dateQueryAdapter.dateAdapter(nextYear) + + " and i.status != '未发货'" + + " group by " + dateQueryAdapter.dateConverAdapter3("p.applicationTime","mm"); + ResultSet result = objectDao.executeSql(sql); + String key = ""; + Integer amount = 0; + if(isHidePartOfWorkQualityCollection == true){ + bean.initAmountSpace(); + } + Map map = new HashMap(); + try { + Integer thisYearAmount = 0; + while (result.next()) { + key = result.getString(1); + // 月份以0开头的,去掉0 + if(key.length() > 1 && Integer.valueOf(key) < 10){ + key = Integer.valueOf(key).toString(); + } + amount = result.getInt(2); + if(amount > 0){ + thisYearAmount += amount; + } + map.put(key,amount); + if(isHidePartOfWorkQualityCollection == true){ + // 设置发生数 + dataIndex.setWorkQualityBeanUnQualityAmount(bean, key, amount); + }else{ + dataIndex.setWorkQualityBeanAmount(bean, key, amount); + } + } + if(isHidePartOfWorkQualityCollection == true){ + // 设置发生数 + dataIndex.setWorkQualityBeanUnQualityAmount(bean, "今年", thisYearAmount); + }else{ + dataIndex.setWorkQualityBeanAmount(bean, "今年", thisYearAmount); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(result); + } + String totalSql = "select " + dateQueryAdapter.dateConverAdapter3("p.applicationTime","mm") + + " monthstr, count(*) amount from invoiceplan p ,invoice i,tousseinstance t where p.id = i.invoiceplan_id and t.invoice_id = i.id " + + SqlUtils.get_InSql_Extra("i.orgUnitCoding", querySupplyRoom) + //+ " and p.depart = '手术室' " + + departSql + + "and p.applicationTime >= " + + dateQueryAdapter.dateAdapter(queryYear) + + " and p.applicationTime <= " + + dateQueryAdapter.dateAdapter(nextYear) + + " and i.status != '未发货'" + + " group by " + dateQueryAdapter.dateConverAdapter3("p.applicationTime","mm"); + Integer sumAmount = 0; + Integer sumAmount2 =0; + ResultSet taotalRs = objectDao.executeSql(totalSql); + Map toatlMap = new HashMap(); + try { + while (taotalRs.next()) { + key = taotalRs.getString("monthstr"); + // 月份以0开头的,去掉0 + if(key.length() > 1 && Integer.valueOf(key) < 10){ + key = Integer.valueOf(key).toString(); + } + int mouthAmount = taotalRs.getInt("amount"); + toatlMap.put(key,mouthAmount); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(taotalRs); + } + + for(Map.Entry entry:toatlMap.entrySet()){ + key = entry.getKey(); + amount = map.get(key); + // 总数 + Integer amount2 = entry.getValue(); + if(amount2 != null && amount2 > 0){ + sumAmount2+=amount2; + if(amount != null){ + sumAmount+=amount; + double percentage = new BigDecimal(amount).divide( + new BigDecimal(amount2), 4, BigDecimal.ROUND_HALF_UP) + .doubleValue(); + percentage = new BigDecimal(percentage).multiply( + new BigDecimal(100)).doubleValue(); + dataIndex.setWorkQualityBeanPercentage(bean, key, percentage); + } + } + if(isHidePartOfWorkQualityCollection == true && amount2 > 0){ + dataIndex.setWorkQualityBeanAmount(bean, key, amount2); + if(amount == null){ + dataIndex.setWorkQualityBeanUnQualityAmount(bean, key, 0); + }else { + dataIndex.setWorkQualityBeanUnQualityAmount(bean, key, amount); + } + } + } + if(sumAmount2 > 0){ + double percentage = new BigDecimal(sumAmount).divide( + new BigDecimal(sumAmount2), 4, BigDecimal.ROUND_HALF_UP) + .doubleValue(); + percentage = new BigDecimal(percentage).multiply( + new BigDecimal(100)).doubleValue(); + dataIndex.setWorkQualityBeanPercentage(bean, datestr, percentage); + if(isHidePartOfWorkQualityCollection == true){ + dataIndex.setWorkQualityBeanAmount(bean, datestr, sumAmount2); + dataIndex.setWorkQualityBeanUnQualityAmount(bean, datestr, sumAmount); + } + } + } + list.add(bean); + } // 手术包次日下送件数 全年数据 public void getSecordDaySendTousseAmountAllYear( - String year, - List list,String querySupplyRoom, - Map invoiceOperateAmountMap, - boolean isHidePartOfWorkQualityCollection) throws SQLException { + String year, + List list,String querySupplyRoom, + Map invoiceOperateAmountMap, + boolean isHidePartOfWorkQualityCollection, String departSql, String dataIndexNameForDisplay) throws SQLException { WorkQualityCollection bean = new WorkQualityCollection(); String queryYear = year + "-01-01 00:00:00"; String nextYear = dataIndex.getNextYear(year) + " 00:00:00"; @@ -2175,7 +2542,7 @@ + dateQueryAdapter.dateToVarchar("p.applicationTime") + " != " + dateQueryAdapter.dateToVarchar("i.sendTime") - + " and p.depart = '手术室' " + + departSql + "and p.applicationTime >= " + dateQueryAdapter.dateAdapter(queryYear) + " and p.applicationTime <= " @@ -2184,7 +2551,7 @@ + " group by " + dateQueryAdapter.dateConverAdapter3("p.applicationTime","mm"); ResultSet result = objectDao.executeSql(sql); bean.setRowNum(list.size()+1); - bean.setTitle("手术包次日下送件数"); + bean.setTitle(StringUtils.isNotBlank(dataIndexNameForDisplay)?dataIndexNameForDisplay:"手术包次日下送件数"); String key = ""; Integer amount = 0; if(isHidePartOfWorkQualityCollection == true){ @@ -2225,7 +2592,8 @@ String totalSql = "select " + dateQueryAdapter.dateConverAdapter3("p.applicationTime","mm") + " monthstr, count(*) amount from invoiceplan p ,invoice i,tousseinstance t where p.id = i.invoiceplan_id and t.invoice_id = i.id " + SqlUtils.get_InSql_Extra("i.orgUnitCoding", querySupplyRoom) - + " and p.depart = '手术室' " + //+ " and p.depart = '手术室' " + + departSql + "and p.applicationTime >= " + dateQueryAdapter.dateAdapter(queryYear) + " and p.applicationTime <= " @@ -2292,6 +2660,14 @@ } list.add(bean); } + // 手术包次日下送件数 全年数据 + public void getSecordDaySendTousseAmountAllYear( + String year, + List list,String querySupplyRoom, + Map invoiceOperateAmountMap, + boolean isHidePartOfWorkQualityCollection) throws SQLException { + getSecordDaySendTousseAmountAllYear(year, list, querySupplyRoom, invoiceOperateAmountMap, isHidePartOfWorkQualityCollection, " and p.depart = '手术室' ","手术包次日下送件数"); + } public void getSterilizationFaildAmount( @@ -4722,6 +5098,9 @@ Map> startAndEndDays, List list,String querySupplyRoom, String dataIndexNameForDisplay) throws SQLException { WorkQualityCollection bean = new WorkQualityCollection(); + bean.setRowNum(list.size()+1); + bean.setTitle(StringUtils.isNotBlank(dataIndexNameForDisplay)?dataIndexNameForDisplay:"灭菌器使用炉次"); + for (String key : startAndEndDays.keySet()) { String startDay = null; String endDay = null; @@ -4731,15 +5110,12 @@ endDay = innerMap.get(keyOfInnerMap); } String sql = "select count(*) from sterilizationrecord sr,Sterilizer s " - + "where sr.sterilizer_id = s.id " + + "where sr.sterilizer_id = s.id and (sr.status = '灭菌完成' or sr.status = '灭菌失败') " + SqlUtils.get_InSql_Extra("sr.orgUnitCoding", querySupplyRoom) + " and sr.endDate >= " + dateQueryAdapter.dateAdapter(startDay) + " and sr.endDate <= " + dateQueryAdapter.dateAdapter(endDay); - - bean.setRowNum(list.size()+1); - bean.setTitle(StringUtils.isNotBlank(dataIndexNameForDisplay)?dataIndexNameForDisplay:"灭菌器使用炉次"); Integer amount = 0; ResultSet rs = objectDao.executeSql(sql); try { @@ -4773,7 +5149,7 @@ String nextYear = dataIndex.getNextYear(year) + " 00:00:00"; String sql = "select " + dateQueryAdapter.dateConverAdapter3("sr.endDate","mm") + " montrstr, count(*) from sterilizationrecord sr,Sterilizer s " - + "where sr.sterilizer_id = s.id " + SqlUtils.get_InSql_Extra("sr.orgUnitCoding", querySupplyRoom) + + "where sr.sterilizer_id = s.id and (sr.status = '灭菌完成' or sr.status = '灭菌失败') " + SqlUtils.get_InSql_Extra("sr.orgUnitCoding", querySupplyRoom) + " and sr.endDate >= " + dateQueryAdapter.dateAdapter(queryYear) + " and sr.endDate <= " Index: ssts-web/src/main/webapp/disinfectsystem/reportforms/workQualityCollectionView.js =================================================================== diff -u -r36782 -r36811 --- ssts-web/src/main/webapp/disinfectsystem/reportforms/workQualityCollectionView.js (.../workQualityCollectionView.js) (revision 36782) +++ ssts-web/src/main/webapp/disinfectsystem/reportforms/workQualityCollectionView.js (.../workQualityCollectionView.js) (revision 36811) @@ -41,47 +41,106 @@ align: 'left' }, { title: '一月', - field: 'janAmount' + field: 'janAmount', + percentage: 'janPercentage' }, { title: '二月', - field: 'febAmount' + field: 'febAmount', + percentage: 'febPercentage' }, { title: '三月', - field: 'marAmount' + field: 'marAmount', + percentage: 'marPercentage' }, { title: '四月', - field: 'aprAmount' + field: 'aprAmount', + percentage: 'aprPercentage' }, { title: '五月', - field: 'mayAmount' + field: 'mayAmount', + percentage: 'mayPercentage' }, { title: '六月', - field: 'junAmount' + field: 'junAmount', + percentage: 'junPercentage' }, { title: '七月', - field: 'julAmount' + field: 'julAmount', + percentage: 'julPercentage' }, { title: '八月', - field: 'augAmount' + field: 'augAmount', + percentage: 'augPercentage' }, { title: '九月', - field: 'sepAmount' + field: 'sepAmount', + percentage: 'sepPercentage' }, { title: '十月', - field: 'octAmount' + field: 'octAmount', + percentage: 'octPercentage' }, { title: '十一月', - field: 'novAmount' + field: 'novAmount', + percentage: 'novPercentage' }, { title: '十二月', - field: 'decAmount' + field: 'decAmount', + percentage: 'decPercentage' }, { title: '平均每月', - field: 'aveAmount' + field: 'aveAmount', + percentage: 'avePercentage' }, { title: '年度合计', - field: 'thisYearAmount' + field: 'thisYearAmount', + percentage: 'thisYearPercentage' }]; + var allYearColumnsSettingsOfDataIndex = []; + if (sstsConfig.workQualityCollectionReportConfiguration) { + var comapreReportsSettings = sstsConfig.workQualityCollectionReportConfiguration.comapreReportsSettings; + if (comapreReportsSettings) { + allYearColumnsSettingsOfDataIndex = comapreReportsSettings.allYearColumnsSettingsOfDataIndex || []; + if(allYearColumnsSettingsOfDataIndex.length > 0){ + for (let i = 0; i < allYearColumnsSettingsOfDataIndex.length; i++){ + var columnNameValue = allYearColumnsSettingsOfDataIndex[i].columnName; + if(columnNameValue == 'firstQuarterTotal' + || columnNameValue == 'secondQuarterTotal' + || columnNameValue == 'thirdQuarterTotal' + || columnNameValue == 'fourthQuarterTotal' || + columnNameValue == 'firstHalfTotal' || + columnNameValue == 'secondHalfTotal'){//防止设置不支持的数据,页面显示异常 + var percentageValue = null; + var fieldValue = null; + if(columnNameValue == 'firstHalfTotal'){ + fieldValue = "firstHalfYearAmount"; + percentageValue = "firstHalfYearPercentage"; + }else if(columnNameValue == 'secondHalfTotal'){ + fieldValue = "secondHalfYearAmount"; + percentageValue = "secondHalfYearPercentage"; + }else if(columnNameValue == 'firstQuarterTotal'){ + fieldValue = "firstQuarterTotalAmount"; + percentageValue = "firstQuarterTotalPercentage"; + }else if(columnNameValue == 'secondQuarterTotal'){ + fieldValue = "secondQuarterTotalAmount"; + percentageValue = "secondQuarterTotalPercentage"; + }else if(columnNameValue == 'thirdQuarterTotal'){ + fieldValue = "thirdQuarterTotalAmount"; + percentageValue = "thirdQuarterTotalPercentage"; + }else if(columnNameValue == 'fourthQuarterTotal'){ + fieldValue = "fourthQuarterTotalAmount"; + percentageValue = "fourthQuarterTotalPercentage"; + } + tableHeader.push({ + title: allYearColumnsSettingsOfDataIndex[i].columnTitle, + field: fieldValue, + percentage: percentageValue + }) + } + } + } + } + } is2Column = false; widthArr = []; var tableWidth = 'auto' @@ -99,27 +158,68 @@ tableHtml += ""; tableHtml += ""; for (var j = 0; j < data.length; j++) { + var dataItem = data[j]; tableHtml += ""; tableHtml += "" + (j + 1) + ""; - for (var i = 0; i < tableHeader.length; i++) { - var value = 0; - var align = tableHeader[i].align || 'center'; - if (tableHeader[i].field == 'aveAmount') { - value = parseFloat(data[j]['thisYearAmount'] / 12).toFixed(2); - } else if (tableHeader[i].field == 'title') { - value = data[j][tableHeader[i].field]; - } else { - value = parseInt(data[j][tableHeader[i].field]); + var title = dataItem['title']; + if(title.includes("率")){ + for (var i = 0; i < tableHeader.length; i++) { + var value = 0; + var tableHeaderItem = tableHeader[i]; + var align = tableHeaderItem.align || 'center'; + if (tableHeaderItem.percentage == 'avePercentage') { + value = parseFloat((Number(dataItem['janPercentage'],0) + + Number(dataItem['febPercentage'],0) + + Number(dataItem['marPercentage'],0) + + Number(dataItem['aprPercentage'],0) + + Number(dataItem['mayPercentage'],0) + + Number(dataItem['junPercentage'],0) + + Number(dataItem['julPercentage'],0) + + Number(dataItem['augPercentage'],0) + + Number(dataItem['sepPercentage'],0) + + Number(dataItem['octPercentage'],0) + + Number(dataItem['novPercentage'],0) + + Number(dataItem['decPercentage'],0)) / 12).toFixed(2) + "%"; + } else if (tableHeaderItem.field == 'title') { + value = title; + } else { + value = parseFloat(Number(dataItem[tableHeaderItem.percentage],0.00)).toFixed(2) + "%"; + } + tableHtml += "" + value + ""; } - tableHtml += "" + value + ""; + }else{ + for (var i = 0; i < tableHeader.length; i++) { + var value = 0; + var tableHeaderItem = tableHeader[i]; + var align = tableHeaderItem.align || 'center'; + if (tableHeaderItem.field == 'aveAmount') { + value = parseFloat(dataItem['thisYearAmount'] / 12).toFixed(2); + } else if (tableHeaderItem.field == 'title') { + value = title; + } else { + value = Number(dataItem[tableHeaderItem.field],0); + } + tableHtml += "" + value + ""; + } } tableHtml += ""; } tableHtml += ""; return tableHtml; } - +/** + * 获取百分比 + * @param numerator 分子 + * @param denominator 分母 + * @returns {String} 比率 + */ +function getRatio(numerator,denominator){ + if(isNaN(denominator) || denominator == 0){ + return "0.00%"; + } + return parseFloat(numerator * 100 /denominator).toFixed(2) + "%"; +} //上半年、下半年对比 function getSplitHtml(data, title) { var tableHtml = "

" + title + "

"; @@ -154,11 +254,13 @@ tableHeader.push({ title: '上半年', field: 'firstHalfYearAmount', + percentage:'firstHalfYearPercentage', align: 'right', children: compareColumnsSettingsOfDataIndex }, { title: '下半年', field: 'secondHalfYearAmount', + percentage:'secondHalfYearPercentage', align: 'right', children: compareColumnsSettingsOfDataIndex }, { @@ -169,11 +271,13 @@ tableHeader.push({ title: '上半年', align: 'right', - field: 'firstHalfYearAmount' + field: 'firstHalfYearAmount', + percentage:'firstHalfYearPercentage' }, { title: '下半年', align: 'right', - field: 'secondHalfYearAmount' + field: 'secondHalfYearAmount', + percentage:'secondHalfYearPercentage' }, { title: '改善标准', field: 'improve' @@ -226,43 +330,86 @@ for (var j = 0; j < data.length; j++) { tableHtml += ""; tableHtml += "" + (j + 1) + ""; + var dataItem = data[j]; + var title = dataItem['title']; for (var i = 0; i < tableHeader.length; i++) { var value = 0; var align = tableHeader[i].align || 'center'; if (tableHeader[i].field == 'title' || tableHeader[i].field == 'descriptionOfDataIndex') { value = data[j][tableHeader[i].field] || ''; } else if (tableHeader[i].field == 'improve') { - var firstHalfYearAmount = parseInt(data[j].firstHalfYearAmount); - var secondHalfYearAmount = parseInt(data[j].secondHalfYearAmount); - if (firstHalfYearAmount == 0 || secondHalfYearAmount == 0) { - value = '-'; - } else { - if (secondHalfYearAmount > firstHalfYearAmount) { - value = '↑ ' + parseFloat(Math.abs(secondHalfYearAmount - firstHalfYearAmount) / firstHalfYearAmount * 100).toFixed(2) + '%'; + if(title.includes("率")){ + var firstHalfYearPercentage = parseFloat(dataItem.firstHalfYearPercentage).toFixed(2); + var secondHalfYearPercentage = parseFloat(dataItem.secondHalfYearPercentage).toFixed(2); + if(firstHalfYearPercentage == 0.00 || secondHalfYearPercentage == 0.00){ + value = '-'; + }else{ + if (secondHalfYearPercentage > firstHalfYearPercentage) { + value = '↑ '; + } else { + value = '↓ '; + } + value += parseFloat(Math.abs(secondHalfYearPercentage - firstHalfYearPercentage) * 100 / firstHalfYearPercentage ).toFixed(2) + '%'; + } + }else{ + var firstHalfYearAmount = parseInt(data[j].firstHalfYearAmount); + var secondHalfYearAmount = parseInt(data[j].secondHalfYearAmount); + if (firstHalfYearAmount == 0 || secondHalfYearAmount == 0) { + value = '-'; } else { - value = '↓ ' + parseFloat(Math.abs(secondHalfYearAmount - firstHalfYearAmount) / firstHalfYearAmount * 100).toFixed(2) + '%'; + if (secondHalfYearAmount > firstHalfYearAmount) { + value = '↑ '; + } else { + value = '↓ '; + } + value += parseFloat(Math.abs(secondHalfYearAmount - firstHalfYearAmount) / firstHalfYearAmount * 100).toFixed(2) + '%'; } } } else { - value = parseInt(data[j][tableHeader[i].field]); + if(title.includes("率")){ + value = parseFloat(dataItem[tableHeader[i].percentage]).toFixed(2) + '%'; + }else{ + value = parseInt(dataItem[tableHeader[i].field]); + } } if (tableHeader[i].children) { for (var k = 0; k < tableHeader[i].children.length; k++) { if (tableHeader[i].children[k].columnName == 'valueOfDataIndex') { - value = parseInt(data[j][tableHeader[i].field]) + if(title.includes("率")){ + value = parseFloat(dataItem[tableHeader[i].percentage]).toFixed(2) + '%'; + }else{ + value = parseInt(dataItem[tableHeader[i].field]); + } tableHtml += "" + value + ""; } else if (tableHeader[i].children[k].columnName == 'averageMonthlyValue') { - value = parseFloat(data[j][tableHeader[i].field] / 6).toFixed(2) + if(title.includes("率")){ + value = parseFloat(dataItem[tableHeader[i].percentage]).toFixed(2) + '%'; + }else{ + value = parseFloat(dataItem[tableHeader[i].field] / 6).toFixed(2) + } tableHtml += "" + value + ""; - } else if (tableHeader[i].children[k].columnName == 'denominatorOfRatio') { - var firstHalfYearAmount = parseInt(data[j].firstHalfYearAmount); - var secondHalfYearAmount = parseInt(data[j].secondHalfYearAmount); - value = Math.abs(secondHalfYearAmount - firstHalfYearAmount); - tableHtml += "" + value + ""; } else if (tableHeader[i].children[k].columnName == 'numeratorOfRatio') { - var firstHalfYearAmount = parseInt(data[j].firstHalfYearAmount); - value = firstHalfYearAmount; + if(title.includes("率")){ + /*var firstHalfYearPercentage = parseFloat(dataItem.firstHalfYearPercentage).toFixed(2); + var secondHalfYearPercentage = parseFloat(dataItem.secondHalfYearPercentage).toFixed(2); + value = parseFloat(Math.abs(secondHalfYearPercentage - firstHalfYearPercentage)).toFixed(2) + '%';*/ + value = ""; + }else{ + var firstHalfYearAmount = parseInt(data[j].firstHalfYearAmount); + var secondHalfYearAmount = parseInt(data[j].secondHalfYearAmount); + value = Math.abs(secondHalfYearAmount - firstHalfYearAmount); + } tableHtml += "" + value + ""; + } else if (tableHeader[i].children[k].columnName == 'denominatorOfRatio') { + if(title.includes("率")){ + //value = parseFloat(dataItem.firstHalfYearPercentage).toFixed(2) + '%'; + value = ""; + align = tableHeader[i].align || 'center'; + }else{ + var firstHalfYearAmount = parseInt(data[j].firstHalfYearAmount); + value = firstHalfYearAmount; + } + tableHtml += "" + value + ""; } } } else { @@ -310,11 +457,13 @@ tableHeader.push({ title: (year - 1) + '年', field: 'lastYearAmount', + percentage:'lastYearPercentage', align: 'right', children: compareColumnsSettingsOfDataIndex }, { title: year + '年', field: 'thisYearAmount', + percentage:'thisYearPercentage', align: 'right', children: compareColumnsSettingsOfDataIndex }, { @@ -325,11 +474,13 @@ tableHeader.push({ title: (year - 1) + '年', align: 'right', - field: 'lastYearAmount' + field: 'lastYearAmount', + percentage:'lastYearPercentage' }, { title: year + '年', align: 'right', - field: 'thisYearAmount' + field: 'thisYearAmount', + percentage:'thisYearPercentage' }, { title: '改善标准', field: 'improve' @@ -382,43 +533,81 @@ for (var j = 0; j < data.length; j++) { tableHtml += ""; tableHtml += "" + (j + 1) + ""; + var dataItem = data[j]; + var title = dataItem['title']; for (var i = 0; i < tableHeader.length; i++) { var value = 0; var align = tableHeader[i].align || 'center'; if (tableHeader[i].field == 'title' || tableHeader[i].field == 'descriptionOfDataIndex') { value = data[j][tableHeader[i].field] || ''; } else if (tableHeader[i].field == 'improve') { - var thisYearAmount = parseInt(data[j].thisYearAmount); - var lastYearAmount = parseInt(data[j].lastYearAmount); - if (thisYearAmount == 0 || lastYearAmount == 0) { - value = '-'; - } else { - if (thisYearAmount > lastYearAmount) { - value = '↑ ' + parseFloat(Math.abs(thisYearAmount - lastYearAmount) / lastYearAmount * 100).toFixed(2) + '%'; + if(title.includes("率")){ + var thisYearPercentage = parseFloat(dataItem.thisYearPercentage).toFixed(2); + var lastYearPercentage = parseFloat(dataItem.lastYearPercentage).toFixed(2); + if(lastYearPercentage == 0.00 || thisYearPercentage == 0.00){ + value = '-'; + }else{ + if (thisYearPercentage > lastYearPercentage) { + value = '↑ '; + } else { + value = '↓ '; + } + value += parseFloat(Math.abs(thisYearPercentage - lastYearPercentage) * 100 / lastYearPercentage ).toFixed(2) + '%'; + } + }else{ + var thisYearAmount = parseInt(data[j].thisYearAmount); + var lastYearAmount = parseInt(data[j].lastYearAmount); + if (thisYearAmount == 0 || lastYearAmount == 0) { + value = '-'; } else { - value = '↓ ' + parseFloat(Math.abs(thisYearAmount - lastYearAmount) / lastYearAmount * 100).toFixed(2) + '%'; + if (thisYearAmount > lastYearAmount) { + value = '↑ ' + parseFloat(Math.abs(thisYearAmount - lastYearAmount) / lastYearAmount * 100).toFixed(2) + '%'; + } else { + value = '↓ ' + parseFloat(Math.abs(thisYearAmount - lastYearAmount) / lastYearAmount * 100).toFixed(2) + '%'; + } } } } else { - value = parseInt(data[j][tableHeader[i].field]); + if(title.includes("率")){ + value = parseInt(dataItem[tableHeader[i].percentage]).toFixed(2) + '%'; + }else{ + value = parseInt(data[j][tableHeader[i].field]); + } } if (tableHeader[i].children) { for (var k = 0; k < tableHeader[i].children.length; k++) { if (tableHeader[i].children[k].columnName == 'valueOfDataIndex') { value = parseInt(data[j][tableHeader[i].field]) + if(title.includes("率")){ + value = parseFloat(dataItem[tableHeader[i].percentage]).toFixed(2) + '%'; + }else{ + value = parseInt(data[j][tableHeader[i].field]); + } tableHtml += "" + value + ""; } else if (tableHeader[i].children[k].columnName == 'averageMonthlyValue') { - value = parseFloat(data[j][tableHeader[i].field] / 12).toFixed(2) + if(title.includes("率")){ + value = parseFloat(dataItem[tableHeader[i].percentage]).toFixed(2) + '%'; + }else{ + value = parseFloat(data[j][tableHeader[i].field] / 12).toFixed(2); + } tableHtml += "" + value + ""; - } else if (tableHeader[i].children[k].columnName == 'denominatorOfRatio') { - var thisYearAmount = parseInt(data[j].thisYearAmount); - var lastYearAmount = parseInt(data[j].lastYearAmount); - value = Math.abs(thisYearAmount - lastYearAmount); - tableHtml += "" + value + ""; } else if (tableHeader[i].children[k].columnName == 'numeratorOfRatio') { - var lastYearAmount = parseInt(data[j].lastYearAmount); - value = lastYearAmount; + if(title.includes("率")){ + value = ""; + }else{ + var thisYearAmount = parseInt(data[j].thisYearAmount); + var lastYearAmount = parseInt(data[j].lastYearAmount); + value = Math.abs(thisYearAmount - lastYearAmount); + } tableHtml += "" + value + ""; + } else if (tableHeader[i].children[k].columnName == 'denominatorOfRatio') { + if(title.includes("率")){ + value = ""; + }else{ + var lastYearAmount = parseInt(data[j].lastYearAmount); + value = lastYearAmount; + } + tableHtml += "" + value + ""; } } } else { Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java =================================================================== diff -u -r36221 -r36811 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java (.../JasperReportManager.java) (revision 36221) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java (.../JasperReportManager.java) (revision 36811) @@ -21,8 +21,6 @@ import com.forgon.disinfectsystem.jasperreports.javabeansource.AdverseEventRecordReportVo; import com.forgon.disinfectsystem.jasperreports.javabeansource.ApparatusInfusionisType; import com.forgon.disinfectsystem.jasperreports.javabeansource.BiologicalMonitoringReportVo; -import com.forgon.disinfectsystem.jasperreports.javabeansource.BorrowingRecordItemVo; -import com.forgon.disinfectsystem.jasperreports.javabeansource.BorrowingRecordVo; import com.forgon.disinfectsystem.jasperreports.javabeansource.CleaningAreaWorkloadForUser; import com.forgon.disinfectsystem.jasperreports.javabeansource.CrossTableBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.CssdWorkloadReportForTangshanWorkersVO; @@ -43,7 +41,6 @@ import com.forgon.disinfectsystem.jasperreports.javabeansource.GodownEntryStatistic_main; import com.forgon.disinfectsystem.jasperreports.javabeansource.GoodsAmountSummaryByGrade; import com.forgon.disinfectsystem.jasperreports.javabeansource.GoodsRiskLevelReportVo; -import com.forgon.disinfectsystem.jasperreports.javabeansource.InstrumentRepairVo; import com.forgon.disinfectsystem.jasperreports.javabeansource.InvoiceAmountContrastBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.InvoiceQuery; import com.forgon.disinfectsystem.jasperreports.javabeansource.InvoiceQueryItem; @@ -55,7 +52,6 @@ import com.forgon.disinfectsystem.jasperreports.javabeansource.MaterialWashUnqualifiedPosition; import com.forgon.disinfectsystem.jasperreports.javabeansource.MonitoringItemBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.MonthReportBean; -import com.forgon.disinfectsystem.jasperreports.javabeansource.MonthReportChartBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.NurseWorkloadBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.OperatingRoomUseRecortSumBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.OperatingRoomUseReportDepartVo; @@ -475,28 +471,7 @@ * @return */ public List getApparatusInfusionis(String startDay,String endDay,String departCoding,String showDetail); - /** - * 获取借物申请明细 - * @param startDay 开始日期 - * @param endDay 结束日期 - * @param goodsName 物品名称 - * @param deptName 科室名称 - * @return - */ - public List getBorrowingRecord(String startDay,String endDay,String goodsName,String deptName); - - /** - * 获取借物申请的汇总信息 - * @param startDay 开始日期 - * @param endDay 结束日期 - * @param goodsName 物品名称 - * @param deptName 科室名称 - * @return - */ - public List getBorrowingRecordSummary(String startDay,String endDay,String goodsName,String deptName); - - /** * 外来器械申请单统计报表: * @param timeType 时间类型 * @param startDay 开始时间(仅年月日,如yyyy-MM-dd) @@ -780,18 +755,6 @@ String endTime, String tousseName); /** - * 获取急用物品处理周期统计报表的数据 - * @param startTime 开始时间格式如:2017-01-01 - * @param endTime 结束时间格式如:2017-01-01 - * @param tousseName 指定想要查询的器械包名称,如果不指定则查询全部器械包 - * @param departCoding 供应室编码 - * @param tousseTypes 器械包类型 ,分隔 全部则不过滤 - * @param departs 申请科室 - * @return - */ - public List getUrgentNeedGoodsProcessingCycleData(String startTime, - String endTime, String tousseName, String departCoding, String tousseTypes, String departs); - /** * 获取手术仪器追溯查询报表的数据 * @param barcode 器械包条码或者标识牌条码 * @param tousseName 指定想要查询的器械包名称,如果不指定则查询全部器械包