Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/QualityMonitoringHelper.java =================================================================== diff -u -r40404 -r40480 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/QualityMonitoringHelper.java (.../QualityMonitoringHelper.java) (revision 40404) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/QualityMonitoringHelper.java (.../QualityMonitoringHelper.java) (revision 40480) @@ -13,6 +13,7 @@ import java.util.Map.Entry; import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.reportoption.GoodsOption; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.qualitymonitoringmanager.qualitymonitoring.SubTableOfQualityMonitoring; import com.forgon.disinfectsystem.qualitymonitoring.instance.service.SubTableOfQualityMonitoringManagerImpl; @@ -22,6 +23,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -58,7 +60,10 @@ private SupplyRoomConfigManager supplyRoomConfigManager; @Autowired private SubTableOfQualityMonitoringManagerImpl subTableOfQualityMonitoringManagerImpl; - + @Autowired + private FormDefinitionHelper formDefinitionHelper; + private static final Logger logger = Logger + .getLogger(QualityMonitoringHelper.class); /** * 获取获取质量监测报表数据,用于前端做成table显示 * @return @@ -104,10 +109,31 @@ //监测元素属性map Map formDefinitionItemNameMap = new LinkedHashMap(); Set formDefinitionIds = new HashSet<>(); - JSONObject dynamicColumnObj = queryFormDefinitionDynamicColumnInfo(formName,modeType, formDefinitionItemNameMap, formDefinitionIds); + boolean washingRrejectionRate = false;//显示清洗不合格率 //HZSRMYY-85 + String extensionsConfigOfQualityMonitoring = CssdUtils.getSystemSetConfigByName("extensionsConfigOfQualityMonitoring"); + String washingRrejectionRateTitle = null; + if(StringUtils.isNotBlank(extensionsConfigOfQualityMonitoring)){ + JSONArray arr = JSONArray.fromObject(extensionsConfigOfQualityMonitoring); + for (int i = 0; i < arr.size(); i++) { + JSONObject json = arr.getJSONObject(i); + String extendedColumnName = json.optString("fieldName"); + if(StringUtils.isBlank(extendedColumnName)){ + continue; + } + String title = json.optString("title"); + if("summaryOfMaterialQuantities".equalsIgnoreCase(extendedColumnName)){ + requestParameters.put("summaryOfMaterialQuantities", "true"); + }else if("washingRrejectionRate".equalsIgnoreCase(extendedColumnName)){ + washingRrejectionRate = true; + washingRrejectionRateTitle = title; + requestParameters.put("washingRrejectionRate", "true"); + } + } + } + JSONObject dynamicColumnObj = queryFormDefinitionDynamicColumnInfo(formName,modeType, formDefinitionItemNameMap, formDefinitionIds, washingRrejectionRate, washingRrejectionRateTitle); String instrumentSetTypes = StrutsParamUtils.getPraramValue("instrumentSetTypes", ""); List monitoringItemBeans = getQualityMonitoringDataSource(instrumentSetTypes, formName, responsibilityPart, recordRinseInformation, scope, requestParameters,dynamicColumnObj.optBoolean("haveRequirement"), isShowTousseMaerialSumAmount, formDefinitionIds); - obj.put("washAmountMap", requestParameters.get("washAmountMap"));//清洗数量map + obj.put("washAmountMap", requestParameters.get("washAmountMap"));//清洗数量 不合格率map obj.put("subTableInfos", requestParameters.get("subTableInfos"));//副表信息 obj.put("materialSum", requestParameters.get("materialSum"));//材料汇总行信息 if(!CollectionUtils.isEmpty(monitoringItemBeans)){ @@ -403,7 +429,8 @@ List list = new ArrayList(); String startDate = StrutsParamUtils.getPraramValue("startDate", ""); String endDate = StrutsParamUtils.getPraramValue("endDate", ""); - + boolean summaryOfMaterialQuantities = "true".equals(requestParameters.get("summaryOfMaterialQuantities"));//显示材料数量汇总行 PYQZYY-207 + boolean washingRrejectionRate = "true".equals(requestParameters.get("washingRrejectionRate"));//显示清洗不合格率 //HZSRMYY-85 String querySupplyRoom = StrutsParamUtils.getPraramValue("querySupplyRoom", ""); if(querySupplyRoom.contains("全部")){ querySupplyRoom = ""; @@ -450,6 +477,7 @@ String extraQueryForResponsibilityPart = null; String extraJoinForResponsibilityPart = null; Map> washAmountMap = null; + Map unQualityRatioMap = null; if(QualityMonitoringDefinition.QUALITYMONITORING_MODULE_NAME_RECYCLING.equals(responsibilityPart)){ String recyclingTime = dateQueryAdapter.dateToVarchar1("rr.recyclingTime"); extraQueryForResponsibilityPart = ",rr.depart,ur.operationRoom,ur.circuitNurse, rr.recyclingUser,"+ recyclingTime +" recyclingTime "; @@ -465,6 +493,9 @@ int dataSoureOfMaterialsCountOfToussesInReports = CssdUtils.getSystemSetConfigByNameInt("dataSoureOfMaterialsCountOfToussesInReports", 3); String sql = reportSqlUtil.getWashWorkloadSql(params, startDate + " 00:00:00", endDate + " 23:59:59", querySupplyRoom, dataSoureOfMaterialsCountOfToussesInReports, true, "yyyy-mm-dd HH24:MI:SS",null); washAmountMap = commonReportHelper.getWashWorkloadAmountMap(sql, true); + if(washingRrejectionRate){ + unQualityRatioMap = getUnQualityRatioMap(washAmountMap, params); + } } }else if(QualityMonitoringDefinition.QUALITYMONITORING_MODULE_NAME_STERILIZATION.equals(responsibilityPart)){ String wdrStartDate = dateQueryAdapter.dateToVarchar1("sr.startDate"); @@ -892,22 +923,6 @@ totalAmount = qmTousseAndMaterialAmount; totalItem = qmCount; if (totalAmount > 0 || list.size() > 0) { - //PYQZYY-207 - boolean summaryOfMaterialQuantities = false;//显示材料数量汇总行 - String extensionsConfigOfQualityMonitoring = CssdUtils.getSystemSetConfigByName("extensionsConfigOfQualityMonitoring"); - if(StringUtils.isNotBlank(extensionsConfigOfQualityMonitoring)){ - JSONArray arr = JSONArray.fromObject(extensionsConfigOfQualityMonitoring); - for (int i = 0; i < arr.size(); i++) { - JSONObject obj = arr.getJSONObject(i); - String extendedColumnName = obj.optString("fieldName"); - if(StringUtils.isBlank(extendedColumnName)){ - continue; - } - if("summaryOfMaterialQuantities".equalsIgnoreCase(extendedColumnName)){ - summaryOfMaterialQuantities = true; - } - } - } List> listMap = getBeanMap(list,numNames, scope, summaryOfMaterialQuantities); if( listMap != null && listMap.size() > 0){ int size = listMap.size(); @@ -979,7 +994,7 @@ int tousseAmoutSum = amoutSumJson.optInt("tousseAmoutSum"); int forgonAmoutSum = amoutSumJson.optInt("forgonAmoutSum"); if(MapUtils.isNotEmpty(washAmountMap)){ - Map> newWashAmountMap = new HashMap>(); + Map> newWashAmountMap = new HashMap>(); for(Entry> entry : washAmountMap.entrySet()){ String dateStr = entry.getKey(); Map washAmountMapItem = entry.getValue(); @@ -988,11 +1003,19 @@ if(washAmountMapItem.containsKey("外来器械")){ forgonAmount = washAmountMapItem.get("外来器械"); } - Map newWashAmountMapItem = new HashMap(); - newWashAmountMapItem.put("当天清洗外来器械件数", forgonAmount); + Map newWashAmountMapItem = new HashMap(); + newWashAmountMapItem.put("当天清洗外来器械件数", forgonAmount + ""); int washAmount = washAmountMapItem.get("清洗总数") - forgonAmount; - newWashAmountMapItem.put("当天清洗件数", washAmount); + newWashAmountMapItem.put("当天清洗件数", washAmount + ""); + if(washingRrejectionRate){ + if(unQualityRatioMap != null && unQualityRatioMap.containsKey(dateStr)){ + newWashAmountMapItem.put("unQualityRatio", unQualityRatioMap.get(dateStr)); + }else{ + newWashAmountMapItem.put("unQualityRatio", "0.0000%"); + } + } newWashAmountMap.put(dateStr, newWashAmountMapItem); + } } requestParameters.put("washAmountMap", newWashAmountMap.toString()); @@ -1088,6 +1111,70 @@ return list; } + /** + * 获取不合格比率 + * @param washAmountMap 清洗数量 + * @param params reportQueryParams + */ + private Map getUnQualityRatioMap(Map> washAmountMap, ReportQueryParams params) { + Map unQualityRatioMap = new HashMap<>(); + + if (MapUtils.isEmpty(washAmountMap)) { + return unQualityRatioMap; + } + + // 获取不合格源数据 + String[] washSumUnqualifiedSource = formDefinitionHelper.getModelSources(GoodsOption.MODEL_WASHUNQUALIFIEDSOURCE, null); + params.monthlyStr = dateQueryAdapter.dateToVarchar1("qi.datetime"); + String unQualitySql = DataIndex.getQMAmountSqlByFormNames(washSumUnqualifiedSource, params, true); + + // 查询不合格数量 + Map unQualityAmountMap = queryUnQualityAmounts(unQualitySql); + + // 计算不合格率 + calculateUnQualityRatios(washAmountMap, unQualityRatioMap, unQualityAmountMap); + + return unQualityRatioMap; + } + + private Map queryUnQualityAmounts(String sql) { + Map resultMap = new HashMap<>(); + try (ResultSet rs = objectDao.executeSql(sql)) { + while (rs.next()) { + resultMap.put(rs.getString("monthstr"), rs.getInt("amount")); + } + } catch (SQLException e) { + logger.error("查询不合格数量失败", e); + throw new RuntimeException("查询不合格数量失败", e); + } + return resultMap; + } + + private void calculateUnQualityRatios(Map> washAmountMap, + Map unQualityRatioMap, + Map unQualityAmountMap) { + for (Map.Entry> entry : washAmountMap.entrySet()) { + String day = entry.getKey(); + Map amountMap = entry.getValue(); + Integer totalAmount = amountMap.get("清洗总数"); + + if (totalAmount == null || totalAmount < 1) { + continue; + } + + Integer unQualityAmount = unQualityAmountMap.getOrDefault(day, 0); + String ratio = calculateRatio(unQualityAmount, totalAmount); + unQualityRatioMap.put(day, ratio); + } + } + + private String calculateRatio(Integer unQualityAmount, int totalAmount) { + if (unQualityAmount == null || unQualityAmount < 1) { + return "0.0000%"; + } + double ratio = (double) unQualityAmount / totalAmount * 100; + return String.format("%.4f%%", ratio); + } private List getMonitoringItemBeans(Map beanStatisticsMap2, int totalAmount) { List materiaSumBeans = new ArrayList<>(); for (Entry entry : beanStatisticsMap2.entrySet()){ @@ -2413,9 +2500,12 @@ * @param formName 表单名称 * @param modeType 类型 有回收情况,清洗情况,灭菌清况 * @param voMap 监测元素信息map + * @param washingRrejectionRate 显示清洗不合格列 + * @param washingRrejectionRateTitle 清洗不合格列的显示名 * @return */ - private JSONObject queryFormDefinitionDynamicColumnInfo(String formName, String modeType, Map voMap, Set formDefinitionIds) { + private JSONObject queryFormDefinitionDynamicColumnInfo(String formName, String modeType, Map voMap, Set formDefinitionIds + , boolean washingRrejectionRate, String washingRrejectionRateTitle) { StringBuilder sbf = new StringBuilder(500); String startDate = StrutsParamUtils.getPraramValue("startDate", ""); String endDate = StrutsParamUtils.getPraramValue("endDate", ""); @@ -2560,6 +2650,9 @@ values.add("责任人"); values.add("当天清洗件数"); values.add("当天清洗外来器械件数"); + if(washingRrejectionRate){ + values.add(StringUtils.isBlank(washingRrejectionRateTitle)?"当天清洗不合格率":washingRrejectionRateTitle); + } columnNameMap.put("清洗情况-_-" + maxNum, values); }else if("recordSterilizatioInformation".equals(modeType)){ List values = new ArrayList();