Index: ssts-web/src/main/webapp/jasperRtp/qualityMonitoringReportTaskGroupReport.jrxml =================================================================== diff -u -r34155 -r34536 --- ssts-web/src/main/webapp/jasperRtp/qualityMonitoringReportTaskGroupReport.jrxml (.../qualityMonitoringReportTaskGroupReport.jrxml) (revision 34155) +++ ssts-web/src/main/webapp/jasperRtp/qualityMonitoringReportTaskGroupReport.jrxml (.../qualityMonitoringReportTaskGroupReport.jrxml) (revision 34536) @@ -1,5 +1,5 @@ - + @@ -30,26 +30,47 @@ - - + + - - + + + + + + + + + + + + + + + + + + + + + + + <band height="79" splitType="Stretch"> <textField> - <reportElement uuid="f0a8789a-1f7c-40a1-b671-4acd24c78f90" x="0" y="39" width="610" height="40"/> + <reportElement uuid="f0a8789a-1f7c-40a1-b671-4acd24c78f90" x="0" y="39" width="1210" height="40"/> <textElement textAlignment="Center" verticalAlignment="Top"> <font size="14" isBold="false"/> </textElement> <textFieldExpression><![CDATA[$P{queryDate}]]></textFieldExpression> </textField> <staticText> - <reportElement uuid="c1ea69cf-75df-4ad7-b59a-b9ff537501f8" x="0" y="0" width="610" height="40"/> + <reportElement uuid="c1ea69cf-75df-4ad7-b59a-b9ff537501f8" x="0" y="0" width="1210" height="40"/> <textElement textAlignment="Center" verticalAlignment="Middle"> <font size="14" isBold="true"/> </textElement> @@ -71,54 +92,138 @@ <textElement textAlignment="Center" verticalAlignment="Middle"> <font size="12" isBold="false"/> </textElement> - <text><![CDATA[处理总数]]></text> + <text><![CDATA[处理总件数]]></text> </staticText> <staticText> - <reportElement uuid="9ea13cc2-9cd7-4b30-8ed0-13f3d528811e" style="table_TH" x="370" y="0" width="120" height="35"/> + <reportElement uuid="9ea13cc2-9cd7-4b30-8ed0-13f3d528811e" style="table_TH" x="730" y="0" width="120" height="35"/> <textElement textAlignment="Center" verticalAlignment="Middle"> <font size="12" isBold="false"/> </textElement> - <text><![CDATA[质量监测登记数]]></text> + <text><![CDATA[质量监测登件数]]></text> </staticText> <staticText> - <reportElement uuid="c4a14f6f-8eef-4693-a64b-df7c35cb5385" style="table_TH" x="490" y="0" width="120" height="35"/> + <reportElement uuid="c4a14f6f-8eef-4693-a64b-df7c35cb5385" style="table_TH" x="1130" y="0" width="80" height="35"/> <textElement textAlignment="Center" verticalAlignment="Middle"> <font size="12" isBold="false"/> </textElement> <text><![CDATA[合格率]]></text> </staticText> + <staticText> + <reportElement uuid="2233c4ab-4980-4c51-83dc-484cc93ee0fd" style="table_TH" x="370" y="0" width="120" height="35"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font size="12" isBold="false"/> + </textElement> + <text><![CDATA[合格件数]]></text> + </staticText> + <staticText> + <reportElement uuid="2233c4ab-4980-4c51-83dc-484cc93ee0fd" style="table_TH" x="490" y="0" width="120" height="35"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font size="12" isBold="false"/> + </textElement> + <text><![CDATA[处理总包数]]></text> + </staticText> + <staticText> + <reportElement uuid="2233c4ab-4980-4c51-83dc-484cc93ee0fd" style="table_TH" x="610" y="0" width="120" height="35"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font size="12" isBold="false"/> + </textElement> + <text><![CDATA[合格包数]]></text> + </staticText> + <staticText> + <reportElement uuid="9ea13cc2-9cd7-4b30-8ed0-13f3d528811e" style="table_TH" x="850" y="0" width="120" height="35"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font size="12" isBold="false"/> + </textElement> + <text><![CDATA[质量监测登包数]]></text> + </staticText> + <staticText> + <reportElement uuid="c4a14f6f-8eef-4693-a64b-df7c35cb5385" style="table_TH" x="1050" y="0" width="80" height="35"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font size="12" isBold="false"/> + </textElement> + <text><![CDATA[返洗率]]></text> + </staticText> + <staticText> + <reportElement uuid="9ea13cc2-9cd7-4b30-8ed0-13f3d528811e" style="table_TH" x="970" y="0" width="80" height="35"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font size="12" isBold="false"/> + </textElement> + <text><![CDATA[返洗件数]]></text> + </staticText> </band> </columnHeader> <detail> <band height="30" splitType="Stretch"> - <textField> + <textField isBlankWhenNull="true"> <reportElement uuid="8000847d-dbc9-4d8a-9c5f-69fad3c5429d" style="table_TD" x="0" y="0" width="250" height="30"/> <textElement textAlignment="Center" verticalAlignment="Middle"> <font size="12"/> </textElement> <textFieldExpression><![CDATA[$F{monitoringObject}]]></textFieldExpression> </textField> - <textField> + <textField isBlankWhenNull="true"> <reportElement uuid="fdcc1f3a-0802-4db4-a232-a496ccef6340" style="table_TD" x="250" y="0" width="120" height="30"/> <textElement textAlignment="Center" verticalAlignment="Middle"> <font size="12"/> </textElement> - <textFieldExpression><![CDATA[$F{totalProcessing}]]></textFieldExpression> + <textFieldExpression><![CDATA[$F{totalProMaterialAmount}]]></textFieldExpression> </textField> - <textField> - <reportElement uuid="2ed1a2f6-ee3f-47bf-a9fb-f4b2681c4227" style="table_TD" x="370" y="0" width="120" height="30"/> + <textField isBlankWhenNull="true"> + <reportElement uuid="2ed1a2f6-ee3f-47bf-a9fb-f4b2681c4227" style="table_TD" x="730" y="0" width="120" height="30"/> <textElement textAlignment="Center" verticalAlignment="Middle"> <font size="12"/> </textElement> - <textFieldExpression><![CDATA[$F{qualityMonitoringAmount}]]></textFieldExpression> + <textFieldExpression><![CDATA[$F{qualityMonitoringMaterialAmount}]]></textFieldExpression> </textField> - <textField pattern="#,##0.00 %"> - <reportElement uuid="078ddca2-b35c-479d-9897-60e2268a4d14" style="table_TD" x="490" y="0" width="120" height="30"/> + <textField pattern="" isBlankWhenNull="true"> + <reportElement uuid="078ddca2-b35c-479d-9897-60e2268a4d14" style="table_TD" x="1130" y="0" width="80" height="30"/> <textElement textAlignment="Center" verticalAlignment="Middle"> <font size="12"/> </textElement> - <textFieldExpression><![CDATA[$F{totalProcessing}==0?"-":new DecimalFormat("0.00").format(($F{totalProcessing}-$F{qualityMonitoringAmount}) * 100.00/$F{totalProcessing})+"%"]]></textFieldExpression> + <textFieldExpression><![CDATA[$F{passRate}]]></textFieldExpression> </textField> + <textField isBlankWhenNull="true"> + <reportElement uuid="fdcc1f3a-0802-4db4-a232-a496ccef6340" style="table_TD" x="370" y="0" width="120" height="30"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font size="12"/> + </textElement> + <textFieldExpression><![CDATA[$F{qualifiedMaterialAmount}]]></textFieldExpression> + </textField> + <textField isBlankWhenNull="true"> + <reportElement uuid="fdcc1f3a-0802-4db4-a232-a496ccef6340" style="table_TD" x="490" y="0" width="120" height="30"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font size="12"/> + </textElement> + <textFieldExpression><![CDATA[$F{totalProTousseAmount}]]></textFieldExpression> + </textField> + <textField isBlankWhenNull="true"> + <reportElement uuid="fdcc1f3a-0802-4db4-a232-a496ccef6340" style="table_TD" x="610" y="0" width="120" height="30"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font size="12"/> + </textElement> + <textFieldExpression><![CDATA[$F{qualifiedTousseAmount}]]></textFieldExpression> + </textField> + <textField isBlankWhenNull="true"> + <reportElement uuid="2ed1a2f6-ee3f-47bf-a9fb-f4b2681c4227" style="table_TD" x="850" y="0" width="120" height="30"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font size="12"/> + </textElement> + <textFieldExpression><![CDATA[$F{qualityMonitoringTousseAmount}]]></textFieldExpression> + </textField> + <textField pattern="" isBlankWhenNull="true"> + <reportElement uuid="078ddca2-b35c-479d-9897-60e2268a4d14" style="table_TD" x="1050" y="0" width="80" height="30"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font size="12"/> + </textElement> + <textFieldExpression><![CDATA[$F{backwashRate}]]></textFieldExpression> + </textField> + <textField isBlankWhenNull="true"> + <reportElement uuid="2ed1a2f6-ee3f-47bf-a9fb-f4b2681c4227" style="table_TD" x="970" y="0" width="80" height="30"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font size="12"/> + </textElement> + <textFieldExpression><![CDATA[$F{backWashMaterialAmount}]]></textFieldExpression> + </textField> </band> </detail> <columnFooter> Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/QualityMonitoringReportTaskGroupVo.java =================================================================== diff -u -r34155 -r34536 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/QualityMonitoringReportTaskGroupVo.java (.../QualityMonitoringReportTaskGroupVo.java) (revision 34155) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/QualityMonitoringReportTaskGroupVo.java (.../QualityMonitoringReportTaskGroupVo.java) (revision 34536) @@ -11,30 +11,105 @@ * 监测对象 包括通过不同器械包种类的清洗,不同的装配任务组,不同的灭菌分组 */ private String monitoringObject; + /** - * 处理总数 统计清洗的材料件数,装配和灭菌的包数 + * 处理总件数 */ - private Long totalProcessing; + private Long totalProMaterialAmount = 0L; /** - * 质量监测登记数 统计责任环节清洗消毒的质量监测记录中的材料件数,责任环节装配管理的质量监测记录中的包数,监测项为灭菌不合格的质量监测记录中的包数 + * 合格件数 */ - private Long qualityMonitoringAmount; + private Long qualifiedMaterialAmount = 0L; + + /** + * 处理总包数 + */ + private Long totalProTousseAmount = 0L; + + /** + * 合格包数 + */ + private Long qualifiedTousseAmount = 0L; + /** + * 质量监测登记件数 + */ + private Long qualityMonitoringMaterialAmount = 0L; + /** + * 质量监测登记包数 + */ + private Long qualityMonitoringTousseAmount = 0L; + /** + * 返洗件数 + */ + private Long backWashMaterialAmount = 0L; + /** + * 反洗率 + */ + private String backwashRate = "0.00%"; + /** + * 合格率 + */ + private String passRate = "0.00%"; public String getMonitoringObject() { return monitoringObject; } public void setMonitoringObject(String monitoringObject) { this.monitoringObject = monitoringObject; } - public Long getTotalProcessing() { - return totalProcessing; + public Long getTotalProMaterialAmount() { + return totalProMaterialAmount; } - public void setTotalProcessing(Long totalProcessing) { - this.totalProcessing = totalProcessing; + public void setTotalProMaterialAmount(Long totalProMaterialAmount) { + this.totalProMaterialAmount = totalProMaterialAmount; } - public Long getQualityMonitoringAmount() { - return qualityMonitoringAmount; + public Long getQualifiedMaterialAmount() { + return qualifiedMaterialAmount; } - public void setQualityMonitoringAmount(Long qualityMonitoringAmount) { - this.qualityMonitoringAmount = qualityMonitoringAmount; + public void setQualifiedMaterialAmount(Long qualifiedMaterialAmount) { + this.qualifiedMaterialAmount = qualifiedMaterialAmount; } + public Long getTotalProTousseAmount() { + return totalProTousseAmount; + } + public void setTotalProTousseAmount(Long totalProTousseAmount) { + this.totalProTousseAmount = totalProTousseAmount; + } + public Long getQualifiedTousseAmount() { + return qualifiedTousseAmount; + } + public void setQualifiedTousseAmount(Long qualifiedTousseAmount) { + this.qualifiedTousseAmount = qualifiedTousseAmount; + } + public Long getQualityMonitoringMaterialAmount() { + return qualityMonitoringMaterialAmount; + } + public void setQualityMonitoringMaterialAmount( + Long qualityMonitoringMaterialAmount) { + this.qualityMonitoringMaterialAmount = qualityMonitoringMaterialAmount; + } + public Long getQualityMonitoringTousseAmount() { + return qualityMonitoringTousseAmount; + } + public void setQualityMonitoringTousseAmount(Long qualityMonitoringTousseAmount) { + this.qualityMonitoringTousseAmount = qualityMonitoringTousseAmount; + } + public Long getBackWashMaterialAmount() { + return backWashMaterialAmount; + } + public void setBackWashMaterialAmount(Long backWashMaterialAmount) { + this.backWashMaterialAmount = backWashMaterialAmount; + } + public String getBackwashRate() { + return backwashRate; + } + public void setBackwashRate(String backwashRate) { + this.backwashRate = backwashRate; + } + public String getPassRate() { + return passRate; + } + public void setPassRate(String passRate) { + this.passRate = passRate; + } + } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r34510 -r34536 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 34510) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 34536) @@ -27359,45 +27359,117 @@ +dataIndex.getWorkAmountByMaterialSQL("清洗数量", params, dataSoureOfMaterialsCountOfToussesInReports) + ") tl "); String extraJoin = ""; + DecimalFormat dft = new DecimalFormat("0.00"); + Long totalProMaterialAmount = objectDao.getALongNum(forgonWashSql, field); + Long qualityMonitoringMaterialAmount = objectDao.getALongNum(getQualityMonitoringAmount(false, startTime, endTime, handleDepartCoding, "清洗消毒", null," and qmg.tousseDefinitionId in (select id from TousseDefinition where tousseType in('外来器械包','外来器械拆分小包'))",extraJoin,"",""), field); + Long backWashMaterialAmount = objectDao.getALongNum(getQualityMonitoringAmount(false, startTime, endTime, handleDepartCoding, "清洗消毒", null," and qmg.tousseDefinitionId in (select id from TousseDefinition where tousseType in('外来器械包','外来器械拆分小包')) " + + "and fi.id in (select formInstance_id from FormInstanceItem where answer like '%重洗%') " + ,extraJoin,"",""), field); addQualityMonitoringReportTaskGroupVo(resultList, "外来器械清洗" - , getQualityMonitoringAmount(false, startTime, endTime, handleDepartCoding, "清洗消毒", null," and qmg.tousseDefinitionId in (select id from TousseDefinition where tousseType in('外来器械包','外来器械拆分小包'))",extraJoin) - , objectDao.getALongNum(forgonWashSql, field)); + , totalProMaterialAmount, 0L + , qualityMonitoringMaterialAmount + , 0L, backWashMaterialAmount + , getBackwashRate(dft, backWashMaterialAmount, totalProMaterialAmount), + totalProMaterialAmount - qualityMonitoringMaterialAmount, 0L + , getPassRate(dft, qualityMonitoringMaterialAmount, totalProMaterialAmount)); + params.tousseTypes = ""; params.tousseTypeAndPackageSizeSql= ""; //临床器械清洗 器械包分组为【通用手术包】、【专科手术包】、【通用器械包】、【专科器械包】的清洗总件数 params.extraQuery = " and tdc.tousseGroupName in('通用手术包','专科手术包','通用器械包','专科器械包') "; String clinicalInstrumentsWashSql = String.format("select sum(tl.amount) amount from (" +dataIndex.getWorkAmountByMaterialSQL("清洗数量", params, dataSoureOfMaterialsCountOfToussesInReports) + ") tl "); + totalProMaterialAmount = objectDao.getALongNum(clinicalInstrumentsWashSql, field); + qualityMonitoringMaterialAmount = objectDao.getALongNum(getQualityMonitoringAmount(false, startTime, endTime, handleDepartCoding, "清洗消毒",null + , " and qmg.tousseDefinitionId in (select td1.id from TousseDefinition td1 join TousseDefinition tdc1 on tdc1.id=td1.ancestorID where tdc1.tousseGroupName in('通用手术包','专科手术包','通用器械包','专科器械包')) " + ,extraJoin,"",""), field); + backWashMaterialAmount = objectDao.getALongNum(getQualityMonitoringAmount(false, startTime, endTime, handleDepartCoding, "清洗消毒",null + , " and qmg.tousseDefinitionId in (select td1.id from TousseDefinition td1 join TousseDefinition tdc1 on tdc1.id=td1.ancestorID where tdc1.tousseGroupName in('通用手术包','专科手术包','通用器械包','专科器械包')) " + + " and fi.id in (select formInstance_id from FormInstanceItem where answer like '%重洗%') " ,extraJoin,"",""), field); + addQualityMonitoringReportTaskGroupVo(resultList, "临床器械清洗" - , getQualityMonitoringAmount(false, startTime, endTime, handleDepartCoding, "清洗消毒",null - , " and qmg.tousseDefinitionId in (select td1.id from TousseDefinition td1 join TousseDefinition tdc1 on tdc1.id=td1.ancestorID where tdc1.tousseGroupName in('通用手术包','专科手术包','通用器械包','专科器械包')) " ,extraJoin) - , objectDao.getALongNum(clinicalInstrumentsWashSql, field)); + , totalProMaterialAmount, 0L + , qualityMonitoringMaterialAmount + , 0L, backWashMaterialAmount + , getBackwashRate(dft, backWashMaterialAmount, totalProMaterialAmount) + , totalProMaterialAmount - qualityMonitoringMaterialAmount, 0L, + getPassRate(dft, qualityMonitoringMaterialAmount, totalProMaterialAmount)); //手术器械清洗 器械包分组为【麻一手术包】、【麻二手术包】的清洗总件数 params.extraQuery = " and tdc.tousseGroupName in('麻一手术包','麻二手术包') "; String surgicalInstrumentsWashSql = String.format("select sum(tl.amount) amount from (" +dataIndex.getWorkAmountByMaterialSQL("清洗数量", params, dataSoureOfMaterialsCountOfToussesInReports) + ") tl "); + totalProMaterialAmount = objectDao.getALongNum(surgicalInstrumentsWashSql, field); + qualityMonitoringMaterialAmount = objectDao.getALongNum(getQualityMonitoringAmount(false, startTime, endTime, handleDepartCoding, "清洗消毒",null + , " and qmg.tousseDefinitionId in (select td1.id from TousseDefinition td1 join TousseDefinition tdc1 on tdc1.id=td1.ancestorID where tdc1.tousseGroupName in('麻一手术包','麻二手术包')) ",extraJoin,"",""), field); + backWashMaterialAmount = objectDao.getALongNum(getQualityMonitoringAmount(false, startTime, endTime, handleDepartCoding, "清洗消毒",null + , " and qmg.tousseDefinitionId in (select td1.id from TousseDefinition td1 join TousseDefinition tdc1 on tdc1.id=td1.ancestorID where tdc1.tousseGroupName in('麻一手术包','麻二手术包')) " + + " and fi.id in (select formInstance_id from FormInstanceItem where answer like '%重洗%') ",extraJoin,"",""), field); addQualityMonitoringReportTaskGroupVo(resultList, "手术器械清洗" - , getQualityMonitoringAmount(false, startTime, endTime, handleDepartCoding, "清洗消毒",null - , " and qmg.tousseDefinitionId in (select td1.id from TousseDefinition td1 join TousseDefinition tdc1 on tdc1.id=td1.ancestorID where tdc1.tousseGroupName in('麻一手术包','麻二手术包')) ",extraJoin) - , objectDao.getALongNum(surgicalInstrumentsWashSql, field)); + ,totalProMaterialAmount, 0L + , qualityMonitoringMaterialAmount + , 0L, backWashMaterialAmount + , getBackwashRate(dft, backWashMaterialAmount, totalProMaterialAmount) + , totalProMaterialAmount - qualityMonitoringMaterialAmount, 0L + , getPassRate(dft, qualityMonitoringMaterialAmount, totalProMaterialAmount)); params.extraQuery = ""; //各任务组的装配总包数 List<TaskGroup> taskGroups = objectDao.findByHql("select po from " + TaskGroup.class.getSimpleName() + " po where departCode='"+ handleDepartCoding +"' order by id asc"); if(CollectionUtils.isNotEmpty(taskGroups)){ - for(TaskGroup taskGroup : taskGroups){ - params.taskGroupSqlWithAliasOfTousseDefinitionIsTd = " and tdc.taskGroup ='"+ taskGroup.getTaskGroupName() +"' "; - String taskGroupSql = String.format("select sum(tl.amount) amount from (" + Map<String, Long> taskGroupWashAmountMap = getTaskGroupWashAmountMap(params, dataSoureOfMaterialsCountOfToussesInReports); + extraJoin = " join TousseDefinition td on td.id=qmg.tousseDefinitionId join TousseDefinition tdc on tdc.id=td.ancestorID "; + String sql = getQualityMonitoringAmount(false, startTime, endTime, handleDepartCoding, "清洗消毒",null + , "",extraJoin,",tdc.taskGroup"," group by tdc.taskGroup"); + Map<String, Long> taskGroupQualityMonitoringAmountMap = getTaskGroupQualityMonitoringAmountMap(sql); + sql = getQualityMonitoringAmount(false, startTime, endTime, handleDepartCoding, "清洗消毒",null + , " and fi.id in (select formInstance_id from FormInstanceItem where answer like '%重洗%') " + ,extraJoin,",tdc.taskGroup"," group by tdc.taskGroup"); + Map<String, Long> backWashTaskGroupQualityMonitoringAmountMap = getTaskGroupQualityMonitoringAmountMap(sql); + for (TaskGroup taskGroup : taskGroups) { + String taskGroupName = taskGroup.getTaskGroupName(); + totalProMaterialAmount = taskGroupWashAmountMap.get(taskGroupName); + if(totalProMaterialAmount == null){ + totalProMaterialAmount = 0L; + } + qualityMonitoringMaterialAmount = taskGroupQualityMonitoringAmountMap.get(taskGroupName); + if(qualityMonitoringMaterialAmount == null){ + qualityMonitoringMaterialAmount = 0L; + } + backWashMaterialAmount = backWashTaskGroupQualityMonitoringAmountMap.get(taskGroupName); + if(backWashMaterialAmount == null){ + backWashMaterialAmount = 0L; + } + addQualityMonitoringReportTaskGroupVo(resultList, taskGroupName + "清洗" + , totalProMaterialAmount , 0L + , qualityMonitoringMaterialAmount + , 0L, backWashMaterialAmount + , getBackwashRate(dft, backWashMaterialAmount, totalProMaterialAmount) + , totalProMaterialAmount - qualityMonitoringMaterialAmount, 0L + , getPassRate(dft, qualityMonitoringMaterialAmount, totalProMaterialAmount)); + } + sql = getQualityMonitoringAmount(true, startTime, endTime, handleDepartCoding, "装配管理",null, "",extraJoin,",tdc.taskGroup"," group by tdc.taskGroup"); + Map<String, Long> taskGroupPackQualityMonitoringAmountMap = getTaskGroupQualityMonitoringAmountMap(sql); + for (TaskGroup taskGroup : taskGroups) { + String taskGroupName = taskGroup.getTaskGroupName(); + Long qualityMonitoringTousseAmount = taskGroupPackQualityMonitoringAmountMap.get(taskGroupName); + if(qualityMonitoringTousseAmount == null){ + qualityMonitoringTousseAmount = 0L; + } + params.taskGroupSqlWithAliasOfTousseDefinitionIsTd = " and tdc.taskGroup ='"+ taskGroupName +"' "; + sql = String.format("select sum(tl.amount) amount from (" +dataIndex.getWorkAmountByPackageSQL("配包数量", params) + ") tl"); - addQualityMonitoringReportTaskGroupVo(resultList, taskGroup.getTaskGroupName() + "装配组" - , getQualityMonitoringAmount(true, startTime, endTime, handleDepartCoding, "装配管理",null, " and qmg.tousseDefinitionId in (select td1.id from TousseDefinition td1 join TousseDefinition tdc1 on tdc1.id=td1.ancestorID where tdc1.taskGroup='"+ - taskGroup.getTaskGroupName() - +"')",extraJoin) - , objectDao.getALongNum(taskGroupSql, field)); + + Long totalProTousseAmount = objectDao.getALongNum(sql, field); + addQualityMonitoringReportTaskGroupVo(resultList, taskGroupName + "装配组" + , 0L , totalProTousseAmount + , 0L + , qualityMonitoringTousseAmount, 0L + , "0.00%", 0L, totalProTousseAmount - qualityMonitoringTousseAmount + , getPassRate(dft, qualityMonitoringTousseAmount, totalProTousseAmount)); } } params.taskGroupSqlWithAliasOfTousseDefinitionIsTd = ""; @@ -27411,19 +27483,27 @@ extraJoin = " join TousseInstance ti on qmg.tousseInstanceId=ti.id " + " join SterilizationRecord sr on sr.id=ti.sterilizationRecord_id " + " join Sterilizer s on s.id=sr.sterilizer_id "; - addQualityMonitoringReportTaskGroupVo(resultList, "高温灭菌" - , getQualityMonitoringAmount(true, startTime, endTime, handleDepartCoding, null, "灭菌不合格" - , params.extraQuery,extraJoin) - , objectDao.getALongNum(highTemperatureSterilizationSql, field)); + Long totalProTousseAmount = objectDao.getALongNum(highTemperatureSterilizationSql, field); + Long qualityMonitoringTousseAmount = objectDao.getALongNum(getQualityMonitoringAmount(true, startTime, endTime, handleDepartCoding, null, "灭菌不合格" + , params.extraQuery,extraJoin,"",""), "amount"); + addQualityMonitoringReportTaskGroupVo(resultList, "高温灭菌", 0L , totalProTousseAmount + , 0L + , qualityMonitoringTousseAmount, 0L + , "0.00%", 0L, totalProTousseAmount - qualityMonitoringTousseAmount + , getPassRate(dft, qualityMonitoringTousseAmount, totalProTousseAmount)); //低温灭菌 params.extraQuery = " and s.ownGroup like '%低温%' "; String lowTemperatureSterilizationSql = "select sum(tl.amount) amount from (" + dataIndex.getWorkAmountByPackageSQL("灭菌数量", params) +") tl "; - addQualityMonitoringReportTaskGroupVo(resultList, "低温灭菌" - , getQualityMonitoringAmount(true, startTime, endTime, handleDepartCoding, null, "灭菌不合格" - , params.extraQuery,extraJoin) - , objectDao.getALongNum(lowTemperatureSterilizationSql, field)); + totalProTousseAmount = objectDao.getALongNum(lowTemperatureSterilizationSql, field); + qualityMonitoringTousseAmount = objectDao.getALongNum(getQualityMonitoringAmount(true, startTime, endTime, handleDepartCoding, null, "灭菌不合格" + , params.extraQuery,extraJoin,"",""), "amount"); + addQualityMonitoringReportTaskGroupVo(resultList, "低温灭菌", 0L , totalProTousseAmount + , 0L + , qualityMonitoringTousseAmount, 0L + , "0.00%", 0L, totalProTousseAmount - qualityMonitoringTousseAmount + , getPassRate(dft, qualityMonitoringTousseAmount, totalProTousseAmount)); return resultList; } /** @@ -27432,12 +27512,32 @@ * @param monitoringObject 监测对象 * @param qualityMonitoringAmount 质量监测登记数 * @param totalProcessing 处理总数 + * @param totalProMaterialAmount 处理总件数 + * @param totalProTousseAmount 处理总包数 + * @param qualityMonitoringMaterialAmount 监测件数 + * @param qualityMonitoringTousseAmount 监测包数 + * @param backWashMaterialAmount 返洗件数 + * @param backwashRate 返洗率 + * @param qualifiedMaterialAmount 合格件数 + * @param qualifiedTousseAmount 合格包数 + * @param passRate 合格率 */ - private void addQualityMonitoringReportTaskGroupVo(List<QualityMonitoringReportTaskGroupVo> resultList, String monitoringObject, Long qualityMonitoringAmount, Long totalProcessing){ + private void addQualityMonitoringReportTaskGroupVo(List<QualityMonitoringReportTaskGroupVo> resultList + , String monitoringObject, Long totalProMaterialAmount + , Long totalProTousseAmount,Long qualityMonitoringMaterialAmount, Long qualityMonitoringTousseAmount + , Long backWashMaterialAmount, String backwashRate, Long qualifiedMaterialAmount + , Long qualifiedTousseAmount, String passRate){ QualityMonitoringReportTaskGroupVo bean = new QualityMonitoringReportTaskGroupVo(); + bean.setQualityMonitoringMaterialAmount(qualityMonitoringMaterialAmount); + bean.setQualityMonitoringTousseAmount(qualityMonitoringTousseAmount); + bean.setQualifiedMaterialAmount(qualifiedMaterialAmount); + bean.setTotalProMaterialAmount(totalProMaterialAmount); + bean.setBackWashMaterialAmount(backWashMaterialAmount); + bean.setQualifiedTousseAmount(qualifiedTousseAmount); + bean.setTotalProTousseAmount(totalProTousseAmount); bean.setMonitoringObject(monitoringObject); - bean.setQualityMonitoringAmount(qualityMonitoringAmount); - bean.setTotalProcessing(totalProcessing); + bean.setBackwashRate(backwashRate); + bean.setPassRate(passRate); resultList.add(bean); } /** @@ -27450,11 +27550,12 @@ * @param extraQuery 额外的查询条件 * @return */ - private Long getQualityMonitoringAmount(boolean calcTousse, String startTime, String endTime, String departmentCode, String responsibilityPart, String formName, String extraQuery, String extraJoin){ + private String getQualityMonitoringAmount(boolean calcTousse, String startTime, String endTime, String departmentCode, String responsibilityPart, String formName, String extraQuery, String extraJoin, String extraQueryColumn, String groupBySql){ String responsibilityPartSql = StringUtils.isNotBlank(responsibilityPart)?" and qmi.responsibilityPart='"+responsibilityPart+"' ":""; String formNameSql = StringUtils.isNotBlank(formName)?" and fd.formName='"+formName+"' ":""; String sql = "select sum(qmg.amount) amount " - + "from QualityMonitoringInstance qmi " + + extraQueryColumn + + " from QualityMonitoringInstance qmi " + "join FormInstance fi on fi.id=qmi.id " + "join FormDefinition fd on fd.id=fi.formDefinition_id " + "join QualityMonitoringDefinition qmdf on qmdf.id=fd.id " @@ -27466,8 +27567,9 @@ + " and fd.formType = '" + FormDefinition.FOMRTYPE_QUALITYMONITORING+ "' " + extraQuery + SqlUtils.getHandleDepartCodingOfQualityMonitoringDefinitionSql(departmentCode) - + " and " + dateQueryAdapter.dateAreaSql("qmi.datetime", startTime, endTime); - return objectDao.getALongNum(sql, "amount"); + + " and " + dateQueryAdapter.dateAreaSql("qmi.datetime", startTime, endTime) + + groupBySql; + return sql; } @Override public List<SteAmountEachBranchReportVo> getSteAmountEachBranchReportDate( @@ -27793,4 +27895,92 @@ + " group by rr.depart) t2 ) t1 where t1.bhName in('大学城分院','芳村分院','二沙分院') group by bhName "; return sql; } + /** + * 获取各个任务组的清洗件数 + * @param params + * @param dataSoureOfMaterialsCountOfToussesInReports 配置项 + * @return + */ + private Map<String, Long> getTaskGroupWashAmountMap(ReportQueryParams params, int dataSoureOfMaterialsCountOfToussesInReports){ + params.extraSelectColumns= ",tdc.taskGroup"; + params.extraGroupBy = "group by tdc.taskGroup"; + String taskGroupWashSql = String.format("select sum(tl.amount) amount,taskGroup from (" + +dataIndex.getWorkAmountByMaterialSQL("清洗数量", params, dataSoureOfMaterialsCountOfToussesInReports) + + ") tl group by taskGroup "); + ResultSet rs = null; + Map<String, Long> taskGroupWashAmountMap = new HashMap<String, Long>(); + try { + rs = objectDao.executeSql(taskGroupWashSql); + while(rs.next()){ + String taskGroup = rs.getString("taskGroup"); + if(StringUtils.isBlank(taskGroup)){ + taskGroup = ""; + } + long amount = rs.getLong("amount"); + taskGroupWashAmountMap.put(taskGroup, amount); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return taskGroupWashAmountMap; + } + /** + * 获取返洗率 + * @param dft DecimalFormat格式 + * @param backWashMaterialAmount 反洗件数 + * @param totalProMaterialAmount 总件数 + * @return + */ + private String getBackwashRate(DecimalFormat dft,Long backWashMaterialAmount, Long totalProMaterialAmount){ + if(totalProMaterialAmount == null || totalProMaterialAmount == 0){ + return "-"; + } + if(backWashMaterialAmount == null){ + backWashMaterialAmount = 0L; + } + return dft.format(100.00d*backWashMaterialAmount/totalProMaterialAmount) + "%"; + } + /** + * 获取合格率 + * @param dft DecimalFormat格式 + * @param qualityMonitoringAmount 监测包或件数 + * @param totalAmount 总包或件数 + * @return + */ + private String getPassRate(DecimalFormat dft,Long qualityMonitoringAmount, Long totalAmount){ + if(totalAmount == null || totalAmount == 0){ + return "-"; + } + if(qualityMonitoringAmount == null){ + qualityMonitoringAmount = 0L; + } + return dft.format(100.00d*(totalAmount - qualityMonitoringAmount)/totalAmount) + "%"; + } + /** + * 获取任务组的工作量 + * @param sql + * @return + */ + private Map<String, Long> getTaskGroupQualityMonitoringAmountMap(String sql){ + ResultSet rs = null; + Map<String, Long> taskGroupQualityMonitoringAmountMap = new HashMap<String, Long>(); + try { + rs = objectDao.executeSql(sql); + while (rs.next()) { + Long amount = rs.getLong("amount"); + String taskGroup = rs.getString("taskGroup"); + if(StringUtils.isBlank(taskGroup)){ + taskGroup = ""; + } + taskGroupQualityMonitoringAmountMap.put(taskGroup, amount); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return taskGroupQualityMonitoringAmountMap; + } } Index: ssts-web/src/main/webapp/jasperRtp/qualityMonitoringReportTaskGroupReport.jasper =================================================================== diff -u -r34155 -r34536 Binary files differ