Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/SupplyRoomQualityQuotaHelper.java =================================================================== diff -u -r40476 -r41111 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/SupplyRoomQualityQuotaHelper.java (.../SupplyRoomQualityQuotaHelper.java) (revision 40476) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/SupplyRoomQualityQuotaHelper.java (.../SupplyRoomQualityQuotaHelper.java) (revision 41111) @@ -40,6 +40,10 @@ import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstanceAdditionalInfo; import com.forgon.disinfectsystem.entity.customform.formdefinition.FormDefinition; import com.forgon.disinfectsystem.entity.customform.forminstance.FormInstance; +import com.forgon.disinfectsystem.entity.customform.forminstance.FormInstanceItem; +import com.forgon.disinfectsystem.entity.customform.forminstance.FormInstanceOptionValue; +import com.forgon.disinfectsystem.entity.customform.forminstance.FormOptionMaterialGoods; +import com.forgon.disinfectsystem.entity.customform.forminstance.FormOptionTousseGoods; import com.forgon.disinfectsystem.entity.devicemaintenance.DeviceMaintenance; import com.forgon.disinfectsystem.entity.devicemaintenance.DeviceMaintenanceCusI; import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; @@ -212,7 +216,12 @@ if(dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_WASH_QUALIFIED) || dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_WASH_TOTAL) || dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_WASH_QUALIFIEDRATIO)){ washSumAmount = getWashSumAmount(departmentCode, month, SupplyRoomQualityQuota.DAY, startTime, endTime, firstDayToLastDay, null); String[] washSumUnqualifiedSource = formDefinitionHelper.getModelSources(GoodsOption.MODEL_WASHUNQUALIFIEDSOURCE, definitionList); //器械清洗不合格数据来源 - washSumAmountForUnqualified = getUnqualified(false, departmentCode, washSumUnqualifiedSource, month, SupplyRoomQualityQuota.DAY, startTime, endTime , firstDayToLastDay); + boolean enableRecordMaterialDetailsOfQualityMonitoring = CssdUtils.getSystemSetConfigByNameBool("enableRecordMaterialDetailsOfQualityMonitoring", false); + if(enableRecordMaterialDetailsOfQualityMonitoring){ + washSumAmountForUnqualified = getUnqualifiedByFormOptionGoods(false, departmentCode, washSumUnqualifiedSource, month, SupplyRoomQualityQuota.DAY, startTime, endTime , firstDayToLastDay, StringUtils.EMPTY); + }else{ + washSumAmountForUnqualified = getUnqualified(false, departmentCode, washSumUnqualifiedSource, month, SupplyRoomQualityQuota.DAY, startTime, endTime , firstDayToLastDay); + } washSumAmountForQualified = getQualifiedAmountMap(washSumAmount, washSumAmountForUnqualified); if(dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_WASH_QUALIFIEDRATIO)){ //得到合格率 @@ -696,8 +705,13 @@ Map washSumAmountForQualified = null; if(dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_WASH_QUALIFIED) || dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_WASH_TOTAL) || dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_WASH_QUALIFIEDRATIO)){ washSumAmount = getWashSumAmount(departmentCode, year, queryScope, startTime, endTime, null, null); + boolean enableRecordMaterialDetailsOfQualityMonitoring = CssdUtils.getSystemSetConfigByNameBool("enableRecordMaterialDetailsOfQualityMonitoring", false); String[] washSumUnqualifiedSource = formDefinitionHelper.getModelSources(GoodsOption.MODEL_WASHUNQUALIFIEDSOURCE, definitionList); - washSumAmountForUnqualified = getUnqualified(false, departmentCode, washSumUnqualifiedSource, year, queryScope, startTime, endTime , null); + if(enableRecordMaterialDetailsOfQualityMonitoring){ + washSumAmountForUnqualified = getUnqualifiedByFormOptionGoods(false, departmentCode, washSumUnqualifiedSource, year, queryScope, startTime, endTime , null, StringUtils.EMPTY); + }else{ + washSumAmountForUnqualified = getUnqualified(false, departmentCode, washSumUnqualifiedSource, year, queryScope, startTime, endTime , null); + } washSumAmountForQualified = getQualifiedAmountMap(washSumAmount, washSumAmountForUnqualified); //得到合格率 if(dataIndexSources.contains(SupplyRoomQualityQuota.DATAINDEXSOURCE_WASH_QUALIFIEDRATIO)){ @@ -1979,7 +1993,7 @@ */ private Map getUnqualified( Boolean tousse, String departmentCode, String[] unqualifiedSource, String date, String queryScope, String startTime, String endTime, List firstDayToLastDay) { - return getUnqualified(tousse, departmentCode, unqualifiedSource, date, queryScope, startTime, endTime, firstDayToLastDay, ""); + return getUnqualified(tousse, departmentCode, unqualifiedSource, date, queryScope, startTime, endTime, firstDayToLastDay, StringUtils.EMPTY); } /** * 获取每个月的装配总数. @@ -2194,6 +2208,21 @@ } map.put(SupplyRoomQualityQuota.TOTAL, MathTools.add((Integer)map.get(SupplyRoomQualityQuota.TOTAL), amount5).intValue()); } + /** + * isMonthReportShowCustonTousseAmount 开启 自定义器械包按包数量计算 否则按材料件数算 + * 消毒物品按件数算 + * 其它类型的器械包按包数计算 + * 1个包发2次 按2计算 + * 1个包发3次 按2计算 系统包实例不追溯3次及以上的发货 + * 外来器械拆分小包 按小包计算 + * 聚合包按大包发货 按大包包数量计算 + * @param betweenSql + * @param orgUnitCoding + * @param format + * @param queryScope + * @param thisYear + * @return + */ public Map getInvoie_tousse_amount(String betweenSql, String orgUnitCoding, String format, String queryScope, String thisYear){ String monthlyStr = null; if("mm".equals(format) || "yyyy".equals(format)){ @@ -2521,6 +2550,116 @@ } return map; } + /** + * 在FormOptionMaterialGoods FormOptionTousseGoods中获取不合格数量 + * @param tousse 是否统计包数量 + * @param departmentCode + * @param unqualifiedSource 不合格监测项 + * @param date + * @param queryScope + * @param startTime + * @param endTime + * @param firstDayToLastDay + * @param formNameSql + * @return + */ + private Map getUnqualifiedByFormOptionGoods(Boolean tousse, String departmentCode, String[] unqualifiedSource, String date + , String queryScope, String startTime, String endTime, List firstDayToLastDay + , String formNameSql){ + Map map = new HashMap(); + if(ArrayUtils.isEmpty(unqualifiedSource) && StringUtils.isBlank(formNameSql)){ + if (SupplyRoomQualityQuota.DAY.equals(queryScope)) { + map = dataIndex.convertEveryDay(map, firstDayToLastDay); + } else if(SupplyRoomQualityQuota.MONTH.equals(queryScope)){ + map = dataIndex.convertMonthly(map); + } + return map; + } + if (StringTools.isNotBlank(departmentCode) + && (StringTools.isNotBlank(date) + || StringTools.isNotBlank(startTime) && StringTools.isNotBlank(endTime))) { + String qmiDateTimeSql = null; + if (SupplyRoomQualityQuota.DAY.equals(queryScope)) { + startTime = startTime + " 00:00:00"; + endTime = endTime + " 23:59:59"; + qmiDateTimeSql = dateQueryAdapter.dateConverAdapter("qmi.dateTime", null); + } else if(SupplyRoomQualityQuota.YEAR.equals(queryScope)){ + qmiDateTimeSql = dateQueryAdapter.dateConverAdapter3("qmi.dateTime", "yyyy"); + }else { + qmiDateTimeSql = dateQueryAdapter.dateConverAdapter3("qmi.dateTime", "mm"); + startTime = date + "-01-01 00:00:00"; + endTime = DataIndex.getNextYear(date) + " 00:00:00"; + } + StringBuffer sql = new StringBuffer(); + sql.append("select "); + sql.append(qmiDateTimeSql); + if(tousse != null){ + if(tousse){ + sql.append(" dateTime,count(*) amount from "); + }else{ + sql.append(" dateTime,sum(amount) amount from "); + } + }else{ + sql.append(" dateTime,sum(qmg.amount) amount from "); + } + sql.append(QualityMonitoringInstance.class.getSimpleName()); + sql.append(" qmi join "); + sql.append(FormInstance.class.getSimpleName()); + sql.append(" fi on fi.id=qmi.id join "); + sql.append(FormDefinition.class.getSimpleName()); + sql.append(" fd on fd.id=fi.formDefinition_id join "); + sql.append(QualityMonitoringDefinition.class.getSimpleName()); + sql.append(" qmdf on qmdf.id=fd.id "); + if(tousse != null){ + sql.append(" join " + FormInstanceItem.class.getSimpleName() +" fii on fii.formInstance_id=fi.id " + + " join " + FormInstanceOptionValue.class.getSimpleName() +" fiov on fiov.formInstanceItem_id=fii.id "); + if(tousse){ + sql.append(" join "+ FormOptionMaterialGoods.class.getSimpleName() +" fomg on fomg.formOptionValue_id=fiov.id "); + }else{ + sql.append(" join "+ FormOptionTousseGoods.class.getSimpleName() +" fotg on fotg.formOptionValue_id=fiov.id "); + } + } + sql.append(" where fd.formType = '"); + sql.append(FormDefinition.FOMRTYPE_QUALITYMONITORING); + sql.append("' "); + sql.append(DataIndex.getIsQualifiedSql("qmi")); + sql.append(SqlUtils.getHandleDepartCodingOfQualityMonitoringDefinitionSql(departmentCode)); + if(unqualifiedSource != null && unqualifiedSource.length > 0){ + sql.append(SqlUtils.get_InSql("fd.formName", unqualifiedSource)); + }else{ + sql.append(formNameSql); + } + sql.append(" and "); + sql.append(dateQueryAdapter.dateAreaSql("qmi.datetime", startTime, endTime)); + sql.append(" group by "); + sql.append(qmiDateTimeSql); + ResultSet rs = objectDao.executeSql(sql.toString()); + try { + while (rs.next()) { + String month = StringTools.defaultString(rs.getString("dateTime")); + int amount = rs.getInt("amount"); + if(SupplyRoomQualityQuota.YEAR.equals(queryScope)){ + if(date.equals(month)){ + month = "今年"; + }else{ + month = "去年"; + } + } + map.put(month, amount); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + } + if (SupplyRoomQualityQuota.DAY.equals(queryScope)) { + map = dataIndex.convertEveryDay(map, firstDayToLastDay); + } else if(SupplyRoomQualityQuota.MONTH.equals(queryScope)){ + map = dataIndex.convertMonthly(map); + } + return map; + } private void getDataindexsource_foreigntousse_wash_return_qualifiedratio(String departmentCode, String date, String queryScope, String startTime, String endTime, List firstDayToLastDay, Map numeratorMap, Map totalMap) { Integer totalNumerator = 0;