Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/QualityControlOfClinicHelper.java =================================================================== diff -u --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/QualityControlOfClinicHelper.java (revision 0) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/QualityControlOfClinicHelper.java (revision 35814) @@ -0,0 +1,396 @@ +package com.forgon.disinfectsystem.jasperreports.util; + +import java.math.BigDecimal; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import com.forgon.databaseadapter.service.DateQueryAdapter; +import com.forgon.disinfectsystem.basedatamanager.reportoption.GoodsOptionManager; +import com.forgon.disinfectsystem.entity.basedatamanager.reportoption.GoodsOption; +import com.forgon.disinfectsystem.entity.customform.formdefinition.FormDefinition; +import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; +import com.forgon.disinfectsystem.jasperreports.javabeansource.QualityControlOfClinic; +import com.forgon.disinfectsystem.jasperreports.service.dataindex.DataIndex; +import com.forgon.tools.MathTools; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.SqlUtils; +/** + * 临床护理质量管理与控制指标报表 + * + */ +@Component +public class QualityControlOfClinicHelper { + @Autowired + protected DateQueryAdapter dateQueryAdapter; + @Autowired + protected ObjectDao objectDao; + @Autowired + private GoodsOptionManager goodsOptionManager; + + /** + * 获取临床护理质量管理与控制指标报表的数据 + * @param queryYear 年份 + * @param departCoding 供应室的科室编码 + * @return + */ + public List getQualityControlOfClinic( + String queryYear, String departCoding) { + List list = new ArrayList(); + if (StringUtils.isNotBlank(queryYear) && StringUtils.isNotBlank(departCoding)) { + GoodsOption option1 = goodsOptionManager.getGoodsOption(GoodsOption.MODEL_STERILEUNQUALIFIEDSOURCE, ""); + GoodsOption option2 = goodsOptionManager.getGoodsOption(GoodsOption.MODEL_WASHUNQUALIFIEDSOURCE, ""); + GoodsOption option3 = goodsOptionManager.getGoodsOption(GoodsOption.MODEL_PACKINGUNQUALIFIEDSOURCE, ""); + GoodsOption option4 = goodsOptionManager.getGoodsOption(GoodsOption.MODEL_WETPACKETSUNQUALIFIEDSOURCE, ""); + + //1、无菌物品合格率 + if(option1 != null && StringUtils.isNotBlank(option1.getValue())){ + String[] arr1 = option1.getValue().split(";"); + list.add(getSterilePercentOfPassBean(departCoding, queryYear, arr1)); + } else { + list.add(setQualityControlOfClinicQuotaName(QualityControlOfClinic.STERILEUNQUALIFIED, "100%")); + } + + //2、器械清洗合格率 + if(option2 != null && StringUtils.isNotBlank(option2.getValue())){ + String[] arr2 = option2.getValue().split(";"); + list.add(getWashPercentOfPassBean(departCoding, queryYear, arr2)); + } else { + list.add(setQualityControlOfClinicQuotaName(QualityControlOfClinic.WASHUNQUALIFIED, "100%")); + } + + //3、包装合格率 + if(option3 != null && StringUtils.isNotBlank(option3.getValue())){ + String[] arr3 = option3.getValue().split(";"); + list.add(getPackingPercentOfPassBean(departCoding, queryYear, arr3)); + } else { + list.add(setQualityControlOfClinicQuotaName(QualityControlOfClinic.PACKINGUNQUALIFIED, "100%")); + } + + //4、湿包发生率 + if(option4 != null && StringUtils.isNotBlank(option4.getValue())){ + String[] arr4 = option4.getValue().split(";"); + list.add(getPercentOfWetPacketsBean(departCoding, queryYear, arr4)); + } else { + list.add(setQualityControlOfClinicQuotaName(QualityControlOfClinic.WETPACKETSUNQUALIFIED, "0%")); + } + } + return list; + } + /** + * 获取“无菌物品合格率” + * @param departCoding 处理供应室的科室编码 + * @param year 年份 + * @param arr 不合格数的来源(质量监测的名称) + * @return + */ + private QualityControlOfClinic getSterilePercentOfPassBean(String departCoding, String year, String[] arr) { + String queryYear = year + "-01-01 00:00:00"; + String nextYear = DataIndex.getNextYear(year) + " 00:00:00"; + + String sql1 = "select " + dateQueryAdapter.dateConverAdapter3("i.sendTime", "mm") + + " dateTime,sum(ii.amount) amount " + + " from Invoice i join InvoiceItem ii on ii.invoice_id=i.id where " + dateQueryAdapter.dateAreaSql("i.sendTime", queryYear, nextYear) + + " and i.orgUnitCoding='"+departCoding+"' " + + " and ii.tousseDefinitionId is not null " + + " group by " + dateQueryAdapter.dateConverAdapter3("i.sendTime", "mm"); + + Map rsMap1 = new HashMap(); + ResultSet rs1 = objectDao.executeSql(sql1); + try { + while (rs1.next()) { + String month = StringTools.defaultString(rs1.getString("dateTime")); + int amount = rs1.getInt("amount"); + rsMap1.put(month, amount); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs1); + } + + Map rsMap2 = getUnqualifiedBySource(true, departCoding, arr, queryYear, nextYear); + + QualityControlOfClinic bean = getQualityControlOfClinicBean(true, QualityControlOfClinic.STERILEUNQUALIFIED, rsMap1, rsMap2); + return bean; + } + + /** + * 获取“器械清洗合格率” + * @param departCoding 处理供应室的科室编码 + * @param year 年份 + * @param arr 不合格数的来源(质量监测的名称) + * @return + */ + private QualityControlOfClinic getWashPercentOfPassBean(String departCoding, String year, String[] arr) { + String queryYear = year + "-01-01 00:00:00"; + String nextYear = DataIndex.getNextYear(year) + " 00:00:00"; + + String sql1 = "select " + dateQueryAdapter.dateConverAdapter3("wr.endDate", "mm") + + " dateTime,sum(wr.washMaterialAmount-wr.disinfectMaterialAmount-wr.secondWashForeignAmount) amount " + + "from WashAndDisinfectRecord wr where " + dateQueryAdapter.dateAreaSql("wr.endDate", queryYear, nextYear) + + " and wr.orgUnitCoding='"+departCoding+"' " + + " group by " + dateQueryAdapter.dateConverAdapter3("wr.endDate", "mm"); + + Map rsMap1 = new HashMap(); + ResultSet rs1 = objectDao.executeSql(sql1); + try { + while (rs1.next()) { + String month = StringTools.defaultString(rs1.getString("dateTime")); + int amount = rs1.getInt("amount"); + rsMap1.put(month, amount); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs1); + } + + Map rsMap2 = getUnqualifiedBySource(false, departCoding, arr, queryYear, nextYear); + + QualityControlOfClinic bean = getQualityControlOfClinicBean(true, QualityControlOfClinic.WASHUNQUALIFIED, rsMap1, rsMap2); + return bean; + } + + /** + * 获取“包装合格率” + * @param departCoding 处理供应室的科室编码 + * @param year 年份 + * @param arr 不合格数的来源(质量监测的名称) + * @return + */ + private QualityControlOfClinic getPackingPercentOfPassBean(String departCoding, String year, String[] arr) { + String queryYear = year + "-01-01 00:00:00"; + String nextYear = DataIndex.getNextYear(year) + " 00:00:00"; + + Map rsMap1 = getSterilizationAmountForDateTime(departCoding, queryYear, nextYear); + Map rsMap2 = getUnqualifiedBySource(true, departCoding, arr, queryYear, nextYear); + + QualityControlOfClinic bean = getQualityControlOfClinicBean(true, QualityControlOfClinic.PACKINGUNQUALIFIED, rsMap1, rsMap2); + return bean; + } + + /** + * 获取“湿包发生率” + * @param departCoding 处理供应室的科室编码 + * @param year 年份 + * @param arr 不合格数的来源(质量监测的名称) + * @return + */ + private QualityControlOfClinic getPercentOfWetPacketsBean(String departCoding, String year, String[] arr) { + String queryYear = year + "-01-01 00:00:00"; + String nextYear = DataIndex.getNextYear(year) + " 00:00:00"; + + Map rsMap1 = getSterilizationAmountForDateTime(departCoding, queryYear, nextYear); + Map rsMap2 = getUnqualifiedBySource(true, departCoding, arr, queryYear, nextYear); + + QualityControlOfClinic bean = getQualityControlOfClinicBean(false, QualityControlOfClinic.WETPACKETSUNQUALIFIED, rsMap1, rsMap2); + return bean; + } + + /** + * 获取每个月的不合格数 + * @param tousse 是否器械包(如果为true则取质量监测登记的器械包,反之取材料) + * @param departCoding 处理供应室的科室编码 + * @param unqualifiedSource 不合格数来源 + * @param queryYear 开始时间 + * @param nextYear 结束时间 + * @return + */ + private Map getUnqualifiedBySource(boolean tousse, String departCoding, String[] unqualifiedSource, + String queryYear, String nextYear) { + String sql2 = "select " + dateQueryAdapter.dateConverAdapter3("qmi.dateTime", "mm") + + " dateTime,sum(qmg.amount) amount " + + "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 " + + "join QualityMonitoringGoods qmg on qmg.qualityMonitoringInstance_id=fi.id " + + "where " + (tousse ? " qmg.tousseName is not null " : " (qmg.tousseName is null or qmg.tousseName='') ") + + "and fd.formType = '" + FormDefinition.FOMRTYPE_QUALITYMONITORING+ "' " + + SqlUtils.getHandleDepartCodingOfQualityMonitoringDefinitionSql(departCoding) + + SqlUtils.get_InSql("fd.formName", unqualifiedSource) + + " and " + dateQueryAdapter.dateAreaSql("qmi.datetime", queryYear, nextYear) + + "group by " + dateQueryAdapter.dateConverAdapter3("qmi.dateTime", "mm"); + + Map rsMap2 = new HashMap(); + ResultSet rs2 = objectDao.executeSql(sql2); + try { + while (rs2.next()) { + String month = StringTools.defaultString(rs2.getString("dateTime")); + int amount = rs2.getInt("amount"); + rsMap2.put(month, amount); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs2); + } + return rsMap2; + } + + /** + * 获取每个月的灭菌总数 + * @param departCoding 处理供应室的科室编码 + * @param queryYear 开始时间 + * @param nextYear 结束时间 + * @return + */ + private Map getSterilizationAmountForDateTime(String departCoding, String queryYear, + String nextYear) { + String sql1 = "select temp.dateTime dateTime,count(*) amount from("; + sql1 += String.format("select %s dateTime from SterilizationRecord sr,sterilization_tousseInstance st,TousseInstance ti " + + "where sr.id = st.sterilizationRecord_id and st.tousseInstance_id = ti.id " + + "and sr.orgUnitCoding='%s' and %s and sr.status<>'%s' ", + dateQueryAdapter.dateConverAdapter3("sr.endDate", "mm"), + departCoding, dateQueryAdapter.dateAreaSql("sr.endDate", queryYear, nextYear), SterilizationRecord.STERILIZATION_STATUS_FAILURE); + sql1 += " union all "; + sql1 += String.format("select %s dateTime from SterilizationRecord sr,sterilization_reviewed sre,ReviewedBasket rb,TousseInstance ti " + + "where sr.id = sre.sterilizationRecord_id and sre.reviewedBasket_id = rb.id and rb.id = ti.reviewBasket_ID " + + "and sr.orgUnitCoding='%s' and %s and sr.status<>'%s' ", + dateQueryAdapter.dateConverAdapter3("sr.endDate", "mm"), + departCoding, dateQueryAdapter.dateAreaSql("sr.endDate", queryYear, nextYear), SterilizationRecord.STERILIZATION_STATUS_FAILURE); + sql1 += ") temp group by temp.dateTime"; + + + Map rsMap1 = new HashMap(); + ResultSet rs1 = objectDao.executeSql(sql1); + try { + while (rs1.next()) { + String month = StringTools.defaultString(rs1.getString("dateTime")); + int amount = rs1.getInt("amount"); + rsMap1.put(month, amount); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs1); + } + return rsMap1; + } + + + /** + * 计算QualityControlOfClinic的某一项的数据 + * @param percentOfPass 是否计算合格率(为true则计算合格率,或者计算不合格率) + * @param quotaName 指标名称 + * @param rsMap1 每个月的总数 + * @param rsMap2 每个月的不合格数 + * @return + */ + private QualityControlOfClinic getQualityControlOfClinicBean(boolean percentOfPass, String quotaName, Map rsMap1, + Map rsMap2) { + Map map = new HashMap(); + Integer sumValue1 = 0; + Integer sumValue2 = 0; + for (int i = 1; i <= 12; i++) { + String key = ""; + if (i > 9) { + key = "" + i; + } else { + key = "0" + i; + } + Integer value1 = 0; + if (rsMap1.get(key) != null) { + value1 = rsMap1.get(key); + } + sumValue1 += value1; + + Integer value2 = 0; + if (rsMap2.get(key) != null) { + value2 = rsMap2.get(key); + } + sumValue2 += value2; + + map.put(key, getBHGLStr(percentOfPass, value1, value2)); + } + + map.put("13", getBHGLStr(percentOfPass, sumValue1, sumValue2)); + + QualityControlOfClinic bean = new QualityControlOfClinic(); + bean.setQuotaName(quotaName); + bean.setJanuaryBHGL(map.get("01")); + bean.setFebruaryBHGL(map.get("02")); + bean.setMarchBHGL(map.get("03")); + bean.setAprilBHGL(map.get("04")); + bean.setMayBHGL(map.get("05")); + bean.setJuneBHGL(map.get("06")); + bean.setJulyBHGL(map.get("07")); + bean.setAugustBHGL(map.get("08")); + bean.setSeptemberBHGL(map.get("09")); + bean.setOctoberBHGL(map.get("10")); + bean.setNovemberBHGL(map.get("11")); + bean.setDecemberBHGL(map.get("12")); + bean.setSumBHGL(map.get("13")); + return bean; + } + + /** + * 获取合格率或者不合格率 + * @param percentOfPass 是否计算合格率(为true则计算合格率,或者计算不合格率) + * @param sumAmount 总数 + * @param unqualifiedAmount 不合格数 + * @return + */ + private String getBHGLStr(boolean percentOfPass, Integer sumAmount, Integer unqualifiedAmount) { + if (sumAmount == null || unqualifiedAmount == null) { + throw new RuntimeException("参数异常!"); + } + + String result = "0%"; + + if (percentOfPass) { + if (sumAmount == 0) { + result = "0%"; + } else if (unqualifiedAmount == 0) { + result = "100%"; + } else if (sumAmount >= unqualifiedAmount) { + Integer temp = sumAmount - unqualifiedAmount; + result = MathTools.div(temp, sumAmount).setScale(4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).doubleValue() + "%"; + } + } else { + if (sumAmount == 0) { + result = "0%"; + } else if (unqualifiedAmount == 0) { + result = "0%"; + } else if (sumAmount >= unqualifiedAmount) { + result = MathTools.div(unqualifiedAmount, sumAmount).setScale(4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).doubleValue() + "%"; + } + } + return result; + } + + + + + /** + * 设置QualityControlOfClinic的某个指标的默认值 + * @param quotaName 指标名称 + * @param value 默认值 + * @return + */ + private QualityControlOfClinic setQualityControlOfClinicQuotaName(String quotaName, String value) { + QualityControlOfClinic bean = new QualityControlOfClinic(); + bean.setQuotaName(quotaName); + bean.setJanuaryBHGL(value); + bean.setFebruaryBHGL(value); + bean.setMarchBHGL(value); + bean.setAprilBHGL(value); + bean.setMayBHGL(value); + bean.setJuneBHGL(value); + bean.setJulyBHGL(value); + bean.setAugustBHGL(value); + bean.setSeptemberBHGL(value); + bean.setOctoberBHGL(value); + bean.setNovemberBHGL(value); + bean.setDecemberBHGL(value); + bean.setSumBHGL(value); + return bean; + } +} Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r35813 -r35814 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 35813) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 35814) @@ -191,6 +191,7 @@ import com.forgon.disinfectsystem.jasperreports.util.MonthReportGroupBySterilizationModeHelper; import com.forgon.disinfectsystem.jasperreports.util.MonthReportHelper; import com.forgon.disinfectsystem.jasperreports.util.PackingUnqualifieReportHelper; +import com.forgon.disinfectsystem.jasperreports.util.QualityControlOfClinicHelper; import com.forgon.disinfectsystem.jasperreports.util.QualityMonitoringHelper; import com.forgon.disinfectsystem.jasperreports.util.QualityMonitoringReportTaskGroupReportHelper; import com.forgon.disinfectsystem.jasperreports.util.RealTimeBulletinBoardWorkloadHelper; @@ -378,14 +379,15 @@ private ForeignTousseSupplierChargeReportHelper foreignTousseSupplierChargeReportHelper; @Autowired private GoodsAmountSummaryByGradeHelper goodsAmountSummaryByGradeHelper; + @Autowired + private QualityControlOfClinicHelper qualityControlOfClinicHelper; public void setPackingManager(PackingManager packingManager) { this.packingManager = packingManager; } public void setBrancheOfHospitalManager( BrancheOfHospitalManager brancheOfHospitalManager) { this.brancheOfHospitalManager = brancheOfHospitalManager; } - public static final String FORMNAMEOFADJ = "无菌包质量抽查登记表"; /** * 利用sql语句做数据源创建JasperPrint对象 * @param realPath 报表的jasper文件在服务器本地机子的全路径 @@ -10695,379 +10697,14 @@ return list; } - /** - * 获取“无菌物品合格率” - * @param departCoding 处理供应室的科室编码 - * @param year 年份 - * @param arr 不合格数的来源(质量监测的名称) - * @return - */ - private QualityControlOfClinic getSterilePercentOfPassBean(String departCoding, String year, String[] arr) { - String queryYear = year + "-01-01 00:00:00"; - String nextYear = DataIndex.getNextYear(year) + " 00:00:00"; - - String sql1 = "select " + dateQueryAdapter.dateConverAdapter3("i.sendTime", "mm") - + " dateTime,sum(ii.amount) amount " - + " from Invoice i join InvoiceItem ii on ii.invoice_id=i.id where " + dateQueryAdapter.dateAreaSql("i.sendTime", queryYear, nextYear) - + " and i.orgUnitCoding='"+departCoding+"' " - + " and ii.tousseDefinitionId is not null " - + " group by " + dateQueryAdapter.dateConverAdapter3("i.sendTime", "mm"); - - Map rsMap1 = new HashMap(); - ResultSet rs1 = objectDao.executeSql(sql1); - try { - while (rs1.next()) { - String month = StringTools.defaultString(rs1.getString("dateTime")); - int amount = rs1.getInt("amount"); - rsMap1.put(month, amount); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - DatabaseUtil.closeResultSetAndStatement(rs1); - } - - Map rsMap2 = getUnqualifiedBySource(true, departCoding, arr, queryYear, nextYear); - - QualityControlOfClinic bean = getQualityControlOfClinicBean(true, QualityControlOfClinic.STERILEUNQUALIFIED, rsMap1, rsMap2); - return bean; - } - - /** - * 获取“器械清洗合格率” - * @param departCoding 处理供应室的科室编码 - * @param year 年份 - * @param arr 不合格数的来源(质量监测的名称) - * @return - */ - private QualityControlOfClinic getWashPercentOfPassBean(String departCoding, String year, String[] arr) { - String queryYear = year + "-01-01 00:00:00"; - String nextYear = DataIndex.getNextYear(year) + " 00:00:00"; - - String sql1 = "select " + dateQueryAdapter.dateConverAdapter3("wr.endDate", "mm") - + " dateTime,sum(wr.washMaterialAmount-wr.disinfectMaterialAmount-wr.secondWashForeignAmount) amount " - + "from WashAndDisinfectRecord wr where " + dateQueryAdapter.dateAreaSql("wr.endDate", queryYear, nextYear) - + " and wr.orgUnitCoding='"+departCoding+"' " - + " group by " + dateQueryAdapter.dateConverAdapter3("wr.endDate", "mm"); - - Map rsMap1 = new HashMap(); - ResultSet rs1 = objectDao.executeSql(sql1); - try { - while (rs1.next()) { - String month = StringTools.defaultString(rs1.getString("dateTime")); - int amount = rs1.getInt("amount"); - rsMap1.put(month, amount); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - DatabaseUtil.closeResultSetAndStatement(rs1); - } - - Map rsMap2 = getUnqualifiedBySource(false, departCoding, arr, queryYear, nextYear); - - QualityControlOfClinic bean = getQualityControlOfClinicBean(true, QualityControlOfClinic.WASHUNQUALIFIED, rsMap1, rsMap2); - return bean; - } - - /** - * 获取“包装合格率” - * @param departCoding 处理供应室的科室编码 - * @param year 年份 - * @param arr 不合格数的来源(质量监测的名称) - * @return - */ - private QualityControlOfClinic getPackingPercentOfPassBean(String departCoding, String year, String[] arr) { - String queryYear = year + "-01-01 00:00:00"; - String nextYear = DataIndex.getNextYear(year) + " 00:00:00"; - - Map rsMap1 = getSterilizationAmountForDateTime(departCoding, queryYear, nextYear); - Map rsMap2 = getUnqualifiedBySource(true, departCoding, arr, queryYear, nextYear); - - QualityControlOfClinic bean = getQualityControlOfClinicBean(true, QualityControlOfClinic.PACKINGUNQUALIFIED, rsMap1, rsMap2); - return bean; - } - - /** - * 获取“湿包发生率” - * @param departCoding 处理供应室的科室编码 - * @param year 年份 - * @param arr 不合格数的来源(质量监测的名称) - * @return - */ - private QualityControlOfClinic getPercentOfWetPacketsBean(String departCoding, String year, String[] arr) { - String queryYear = year + "-01-01 00:00:00"; - String nextYear = DataIndex.getNextYear(year) + " 00:00:00"; - - Map rsMap1 = getSterilizationAmountForDateTime(departCoding, queryYear, nextYear); - Map rsMap2 = getUnqualifiedBySource(true, departCoding, arr, queryYear, nextYear); - - QualityControlOfClinic bean = getQualityControlOfClinicBean(false, QualityControlOfClinic.WETPACKETSUNQUALIFIED, rsMap1, rsMap2); - return bean; - } - /** - * 获取每个月的不合格数 - * @param tousse 是否器械包(如果为true则取质量监测登记的器械包,反之取材料) - * @param departCoding 处理供应室的科室编码 - * @param unqualifiedSource 不合格数来源 - * @param queryYear 开始时间 - * @param nextYear 结束时间 - * @return - */ - private Map getUnqualifiedBySource(boolean tousse, String departCoding, String[] unqualifiedSource, - String queryYear, String nextYear) { - String sql2 = "select " + dateQueryAdapter.dateConverAdapter3("qmi.dateTime", "mm") - + " dateTime,sum(qmg.amount) amount " - + "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 " - + "join QualityMonitoringGoods qmg on qmg.qualityMonitoringInstance_id=fi.id " - + "where " + (tousse ? " qmg.tousseName is not null " : " (qmg.tousseName is null or qmg.tousseName='') ") - + "and fd.formType = '" + FormDefinition.FOMRTYPE_QUALITYMONITORING+ "' " - + SqlUtils.getHandleDepartCodingOfQualityMonitoringDefinitionSql(departCoding) - + SqlUtils.get_InSql("fd.formName", unqualifiedSource) - + " and " + dateQueryAdapter.dateAreaSql("qmi.datetime", queryYear, nextYear) - + "group by " + dateQueryAdapter.dateConverAdapter3("qmi.dateTime", "mm"); - - Map rsMap2 = new HashMap(); - ResultSet rs2 = objectDao.executeSql(sql2); - try { - while (rs2.next()) { - String month = StringTools.defaultString(rs2.getString("dateTime")); - int amount = rs2.getInt("amount"); - rsMap2.put(month, amount); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - DatabaseUtil.closeResultSetAndStatement(rs2); - } - return rsMap2; - } - - /** - * 获取每个月的灭菌总数 - * @param departCoding 处理供应室的科室编码 - * @param queryYear 开始时间 - * @param nextYear 结束时间 - * @return - */ - private Map getSterilizationAmountForDateTime(String departCoding, String queryYear, - String nextYear) { - String sql1 = "select temp.dateTime dateTime,count(*) amount from("; - sql1 += String.format("select %s dateTime from SterilizationRecord sr,sterilization_tousseInstance st,TousseInstance ti " - + "where sr.id = st.sterilizationRecord_id and st.tousseInstance_id = ti.id " - + "and sr.orgUnitCoding='%s' and %s and sr.status<>'%s' ", - dateQueryAdapter.dateConverAdapter3("sr.endDate", "mm"), - departCoding, dateQueryAdapter.dateAreaSql("sr.endDate", queryYear, nextYear), SterilizationRecord.STERILIZATION_STATUS_FAILURE); - sql1 += " union all "; - sql1 += String.format("select %s dateTime from SterilizationRecord sr,sterilization_reviewed sre,ReviewedBasket rb,TousseInstance ti " - + "where sr.id = sre.sterilizationRecord_id and sre.reviewedBasket_id = rb.id and rb.id = ti.reviewBasket_ID " - + "and sr.orgUnitCoding='%s' and %s and sr.status<>'%s' ", - dateQueryAdapter.dateConverAdapter3("sr.endDate", "mm"), - departCoding, dateQueryAdapter.dateAreaSql("sr.endDate", queryYear, nextYear), SterilizationRecord.STERILIZATION_STATUS_FAILURE); - sql1 += ") temp group by temp.dateTime"; - - - Map rsMap1 = new HashMap(); - ResultSet rs1 = objectDao.executeSql(sql1); - try { - while (rs1.next()) { - String month = StringTools.defaultString(rs1.getString("dateTime")); - int amount = rs1.getInt("amount"); - rsMap1.put(month, amount); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - DatabaseUtil.closeResultSetAndStatement(rs1); - } - return rsMap1; - } - - /** - * 计算QualityControlOfClinic的某一项的数据 - * @param percentOfPass 是否计算合格率(为true则计算合格率,或者计算不合格率) - * @param quotaName 指标名称 - * @param rsMap1 每个月的总数 - * @param rsMap2 每个月的不合格数 - * @return - */ - private QualityControlOfClinic getQualityControlOfClinicBean(boolean percentOfPass, String quotaName, Map rsMap1, - Map rsMap2) { - Map map = new HashMap(); - Integer sumValue1 = 0; - Integer sumValue2 = 0; - for (int i = 1; i <= 12; i++) { - String key = ""; - if (i > 9) { - key = "" + i; - } else { - key = "0" + i; - } - Integer value1 = 0; - if (rsMap1.get(key) != null) { - value1 = rsMap1.get(key); - } - sumValue1 += value1; - - Integer value2 = 0; - if (rsMap2.get(key) != null) { - value2 = rsMap2.get(key); - } - sumValue2 += value2; - - map.put(key, getBHGLStr(percentOfPass, value1, value2)); - } - - map.put("13", getBHGLStr(percentOfPass, sumValue1, sumValue2)); - - QualityControlOfClinic bean = new QualityControlOfClinic(); - bean.setQuotaName(quotaName); - bean.setJanuaryBHGL(map.get("01")); - bean.setFebruaryBHGL(map.get("02")); - bean.setMarchBHGL(map.get("03")); - bean.setAprilBHGL(map.get("04")); - bean.setMayBHGL(map.get("05")); - bean.setJuneBHGL(map.get("06")); - bean.setJulyBHGL(map.get("07")); - bean.setAugustBHGL(map.get("08")); - bean.setSeptemberBHGL(map.get("09")); - bean.setOctoberBHGL(map.get("10")); - bean.setNovemberBHGL(map.get("11")); - bean.setDecemberBHGL(map.get("12")); - bean.setSumBHGL(map.get("13")); - return bean; - } - - /** - * 获取合格率或者不合格率 - * @param percentOfPass 是否计算合格率(为true则计算合格率,或者计算不合格率) - * @param sumAmount 总数 - * @param unqualifiedAmount 不合格数 - * @return - */ - private String getBHGLStr(boolean percentOfPass, Integer sumAmount, Integer unqualifiedAmount) { - if (sumAmount == null || unqualifiedAmount == null) { - throw new RuntimeException("参数异常!"); - } - - String result = "0%"; - - if (percentOfPass) { - if (sumAmount == 0) { - result = "0%"; - } else if (unqualifiedAmount == 0) { - result = "100%"; - } else if (sumAmount >= unqualifiedAmount) { - Integer temp = sumAmount - unqualifiedAmount; - result = MathTools.div(temp, sumAmount).setScale(4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).doubleValue() + "%"; - } - } else { - if (sumAmount == 0) { - result = "0%"; - } else if (unqualifiedAmount == 0) { - result = "0%"; - } else if (sumAmount >= unqualifiedAmount) { - result = MathTools.div(unqualifiedAmount, sumAmount).setScale(4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).doubleValue() + "%"; - } - } - return result; - } - - - - - /** - * 设置QualityControlOfClinic的某个指标的默认值 - * @param quotaName 指标名称 - * @param value 默认值 - * @return - */ - private QualityControlOfClinic setQualityControlOfClinicQuotaName(String quotaName, String value) { - QualityControlOfClinic bean = new QualityControlOfClinic(); - bean.setQuotaName(quotaName); - bean.setJanuaryBHGL(value); - bean.setFebruaryBHGL(value); - bean.setMarchBHGL(value); - bean.setAprilBHGL(value); - bean.setMayBHGL(value); - bean.setJuneBHGL(value); - bean.setJulyBHGL(value); - bean.setAugustBHGL(value); - bean.setSeptemberBHGL(value); - bean.setOctoberBHGL(value); - bean.setNovemberBHGL(value); - bean.setDecemberBHGL(value); - bean.setSumBHGL(value); - return bean; - } - - /** - * 获取临床护理工作质量指标报表数据 - */ @Override public List getQualityControlOfClinic( String queryYear, String departCoding) { - List list = new ArrayList(); - if (StringUtils.isNotBlank(queryYear) && StringUtils.isNotBlank(departCoding)) { - GoodsOption option1 = goodsOptionManager.getGoodsOption(GoodsOption.MODEL_STERILEUNQUALIFIEDSOURCE, ""); - GoodsOption option2 = goodsOptionManager.getGoodsOption(GoodsOption.MODEL_WASHUNQUALIFIEDSOURCE, ""); - GoodsOption option3 = goodsOptionManager.getGoodsOption(GoodsOption.MODEL_PACKINGUNQUALIFIEDSOURCE, ""); - GoodsOption option4 = goodsOptionManager.getGoodsOption(GoodsOption.MODEL_WETPACKETSUNQUALIFIEDSOURCE, ""); - - //1、无菌物品合格率 - if(option1 != null && StringUtils.isNotBlank(option1.getValue())){ - String[] arr1 = option1.getValue().split(";"); - list.add(getSterilePercentOfPassBean(departCoding, queryYear, arr1)); - } else { - list.add(setQualityControlOfClinicQuotaName(QualityControlOfClinic.STERILEUNQUALIFIED, "100%")); - } - - //2、器械清洗合格率 - if(option2 != null && StringUtils.isNotBlank(option2.getValue())){ - String[] arr2 = option2.getValue().split(";"); - list.add(getWashPercentOfPassBean(departCoding, queryYear, arr2)); - } else { - list.add(setQualityControlOfClinicQuotaName(QualityControlOfClinic.WASHUNQUALIFIED, "100%")); - } - - //3、包装合格率 - if(option3 != null && StringUtils.isNotBlank(option3.getValue())){ - String[] arr3 = option3.getValue().split(";"); - list.add(getPackingPercentOfPassBean(departCoding, queryYear, arr3)); - } else { - list.add(setQualityControlOfClinicQuotaName(QualityControlOfClinic.PACKINGUNQUALIFIED, "100%")); - } - - //4、湿包发生率 - if(option4 != null && StringUtils.isNotBlank(option4.getValue())){ - String[] arr4 = option4.getValue().split(";"); - list.add(getPercentOfWetPacketsBean(departCoding, queryYear, arr4)); - } else { - list.add(setQualityControlOfClinicQuotaName(QualityControlOfClinic.WETPACKETSUNQUALIFIED, "0%")); - } - } - return list; + return qualityControlOfClinicHelper.getQualityControlOfClinic(queryYear, departCoding); } - - - - - - - - - - - - - - /** * 获取数据源对应的质量监测 为空就获取默认的质量监测 * @param model 配置的数据源 Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/QualityMonitoringHelper.java =================================================================== diff -u -r35807 -r35814 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/QualityMonitoringHelper.java (.../QualityMonitoringHelper.java) (revision 35807) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/QualityMonitoringHelper.java (.../QualityMonitoringHelper.java) (revision 35814) @@ -30,7 +30,6 @@ import com.forgon.disinfectsystem.entity.qualitymonitoringmanager.qualitymonitoringconfig.QualityMonitoringDefinition; import com.forgon.disinfectsystem.jasperreports.javabeansource.FormDefinitionReportColumnVo; import com.forgon.disinfectsystem.jasperreports.javabeansource.MonitoringItemBean; -import com.forgon.disinfectsystem.jasperreports.service.JasperReportManagerImpl; import com.forgon.disinfectsystem.reportforms.vo.ReportQueryParams; import com.forgon.tools.MathTools; import com.forgon.tools.StrutsParamUtils; @@ -292,7 +291,7 @@ obj.put("dataType", monitoringType); obj.put("data", JSONObject.fromObject(dataTimeMap).toString()); obj.put("totalRows", totalRows); - if(JasperReportManagerImpl.FORMNAMEOFADJ.equals(dataType)){ + if("无菌包质量抽查登记表".equals(dataType)){ if(hiddenNameAndAmount){ obj.put("fixedColumnNames", new String[]{"日期","灭菌器炉号","炉次","登记人"}); }else{