Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/QualityMonitoringHelper.java =================================================================== diff -u -r40386 -r40404 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/QualityMonitoringHelper.java (.../QualityMonitoringHelper.java) (revision 40386) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/QualityMonitoringHelper.java (.../QualityMonitoringHelper.java) (revision 40404) @@ -103,11 +103,13 @@ } //监测元素属性map Map formDefinitionItemNameMap = new LinkedHashMap(); - JSONObject dynamicColumnObj = queryFormDefinitionDynamicColumnInfo(formName,modeType, formDefinitionItemNameMap); + Set formDefinitionIds = new HashSet<>(); + JSONObject dynamicColumnObj = queryFormDefinitionDynamicColumnInfo(formName,modeType, formDefinitionItemNameMap, formDefinitionIds); String instrumentSetTypes = StrutsParamUtils.getPraramValue("instrumentSetTypes", ""); - List monitoringItemBeans = getQualityMonitoringDataSource(instrumentSetTypes, formName, responsibilityPart, recordRinseInformation, scope, requestParameters,dynamicColumnObj.optBoolean("haveRequirement"), isShowTousseMaerialSumAmount); - obj.put("washAmountMap", requestParameters.get("washAmountMap")); - obj.put("subTableInfos", requestParameters.get("subTableInfos")); + List monitoringItemBeans = getQualityMonitoringDataSource(instrumentSetTypes, formName, responsibilityPart, recordRinseInformation, scope, requestParameters,dynamicColumnObj.optBoolean("haveRequirement"), isShowTousseMaerialSumAmount, formDefinitionIds); + obj.put("washAmountMap", requestParameters.get("washAmountMap"));//清洗数量map + obj.put("subTableInfos", requestParameters.get("subTableInfos"));//副表信息 + obj.put("materialSum", requestParameters.get("materialSum"));//材料汇总行信息 if(!CollectionUtils.isEmpty(monitoringItemBeans)){ if(!MapUtils.isEmpty(formDefinitionItemNameMap)){ Iterator it = monitoringItemBeans.iterator(); @@ -397,7 +399,7 @@ * @param filterAnswer 是否过滤掉空的answer 如果有FormDefinitionItem有必填项,可以过滤掉加快查询和显示效率 * @return */ - public List getQualityMonitoringDataSource(String instrumentSetTypes, String formName, String responsibilityPart, String recordRinseInformation, String scope, Map requestParameters, boolean filterAnswer, boolean isShowTousseMaerialSumAmount) { + public List getQualityMonitoringDataSource(String instrumentSetTypes, String formName, String responsibilityPart, String recordRinseInformation, String scope, Map requestParameters, boolean filterAnswer, boolean isShowTousseMaerialSumAmount, Set formDefinitionIds) { List list = new ArrayList(); String startDate = StrutsParamUtils.getPraramValue("startDate", ""); String endDate = StrutsParamUtils.getPraramValue("endDate", ""); @@ -864,9 +866,12 @@ }finally { DatabaseUtil.closeResultSetAndStatement(rs); } - sql = "select distinct fdi.name from FormDefinition fd join FormDefinitionItem fdi on fdi.formDefinition_id=fd.id where fdi.type='数字'"; + sql = "select distinct fdi.name from FormDefinition fd join FormDefinitionItem fdi on fdi.formDefinition_id=fd.id where fd.formName='"+ formName +"' " + + (CollectionUtils.isNotEmpty(formDefinitionIds) ? SqlUtils.getInLongListSql("fd.id",formDefinitionIds) : ""); if(CssdUtils.getSystemSetConfigByNameBool("enableRecordMaterialDetailsOfQualityMonitoring", false)){ - sql += " or exists (select 1 from FormDefinitionItemOption fdio where fdio.formDefinitionItem_id=fdi.id and recordMaterialDetails='是')"; + sql += " and (fdi.type='数字' or exists (select 1 from FormDefinitionItemOption fdio where fdio.formDefinitionItem_id=fdi.id and recordMaterialDetails='是')) "; + }else{ + sql += " and fdi.type='数字' "; } ResultSet rs1 = null; Set numNames = new HashSet(); @@ -887,22 +892,30 @@ totalAmount = qmTousseAndMaterialAmount; totalItem = qmCount; if (totalAmount > 0 || list.size() > 0) { - List> listMap = getBeanMap(list,numNames); - if(QualityMonitoringDefinition.SCOPE_MATERIAL_AND_TOUSSE.equals(scope) || QualityMonitoringDefinition.SCOPE_MATERIAL.equals(scope)){ - MonitoringItemBean bean2 = new MonitoringItemBean(); - bean2.setGoodsName("材料数量汇总行"); - bean2.setDateTime("料数量汇总行"); - bean2.setOrderNumber(3); - bean2.setOption("件数"); - bean2.setQuestionName("件数"); - bean2.setAmount(0); - bean2.setMaterialAmount(qmTousseAndMaterialAmount); - bean2.setPositionMsg(""); - bean2.setAnswer(""); - list.add(bean2); + //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(); Map beanStatisticsMap = listMap.get(0); + Map beanStatisticsMap2 = null; + if(size == 2){ + beanStatisticsMap2 = listMap.get(1); + } if(!MapUtils.isEmpty(beanStatisticsMap)){ for (Map.Entry entry : beanStatisticsMap.entrySet()){ String key = entry.getKey(); @@ -933,7 +946,13 @@ list.add(bean1); } } - }else{ + } + if(summaryOfMaterialQuantities && beanStatisticsMap2 != null){ + List materiaSumBeans = getMonitoringItemBeans(beanStatisticsMap2, totalAmount); + //list.addAll(materiaSumBeans); + requestParameters.put("materialSum", JSONArray.fromObject(materiaSumBeans).toString()); + } + if(MapUtils.isEmpty(beanStatisticsMap)){ MonitoringItemBean bean1 = new MonitoringItemBean(); bean1.setGoodsName("合计"); bean1.setDateTime("合计"); @@ -957,8 +976,8 @@ bean1.setPositionMsg(""); list.add(bean1); } - Integer tousseAmoutSum = amoutSumJson.optInt("tousseAmoutSum"); - Integer forgonAmoutSum = amoutSumJson.optInt("forgonAmoutSum"); + int tousseAmoutSum = amoutSumJson.optInt("tousseAmoutSum"); + int forgonAmoutSum = amoutSumJson.optInt("forgonAmoutSum"); if(MapUtils.isNotEmpty(washAmountMap)){ Map> newWashAmountMap = new HashMap>(); for(Entry> entry : washAmountMap.entrySet()){ @@ -978,7 +997,7 @@ } requestParameters.put("washAmountMap", newWashAmountMap.toString()); } - if(forgonAmoutSum != null && tousseAmoutSum > 0){ + if(tousseAmoutSum > 0){ MonitoringItemBean bean1 = new MonitoringItemBean(); bean1.setGoodsName("合计"); bean1.setDateTime("合计"); @@ -990,7 +1009,7 @@ bean1.setAnswer(tousseAmoutSum + ""); list.add(bean1); } - if(forgonAmoutSum != null && forgonAmoutSum > 0){ + if(forgonAmoutSum > 0){ MonitoringItemBean bean2 = new MonitoringItemBean(); bean2.setGoodsName("合计"); bean2.setDateTime("合计"); @@ -1068,6 +1087,45 @@ } return list; } + + private List getMonitoringItemBeans(Map beanStatisticsMap2, int totalAmount) { + List materiaSumBeans = new ArrayList<>(); + for (Entry entry : beanStatisticsMap2.entrySet()){ + String key = entry.getKey(); + String[] arr = key.split("-_-"); + if(arr.length >= 2){ + String _option = null; + String _questionName = null; + if(arr.length ==2){ + _option = arr[0]; + _questionName = arr[1]; + }else{ + _option = arr[1]; + _questionName = arr[2]; + } + int anwserInt = entry.getValue(); + if(anwserInt == 0){ + continue; + } + MonitoringItemBean bean2 = new MonitoringItemBean(); + bean2.setGoodsName("材料数量汇总"); + bean2.setDateTime("材料数量汇总"); + bean2.setOrderNumber(0); + bean2.setOption(_option); + bean2.setQuestionName(_questionName); + bean2.setAmount(totalAmount); + if(key.equals("1_-_-")){ + bean2.setAnswer(""); + }else{ + bean2.setAnswer(anwserInt+""); + } + bean2.setPositionMsg(""); + materiaSumBeans.add(bean2); + } + } + return materiaSumBeans; + } + /** * 查询责任环节得工作量 * 如果副表类型为器械包副表 则查询包工作量 否则查询材料工作量 @@ -2096,18 +2154,38 @@ DatabaseUtil.closeResultSetAndStatement(rs); } } - private List> getBeanMap(List beanList,Set numNames){ + + /** + * + * @param beanList + * @param numNames + * @param scope 监测范围 + * @param summaryOfMaterialQuantities 显示材料数量汇总行 + * @return + */ + private List> getBeanMap(List beanList,Set numNames, String scope, boolean summaryOfMaterialQuantities){ if(beanList == null) return null; List> listMap = new ArrayList>(); Map map = new HashMap(); + Map map2 = new HashMap(); boolean enableRecordMaterialDetailsOfQualityMonitoring = CssdUtils.getSystemSetConfigByNameBool("enableRecordMaterialDetailsOfQualityMonitoring", false); + for(MonitoringItemBean mt : beanList){ String questionName = mt.getQuestionName(); if("清洗情况".equals(questionName) || "灭菌情况".equals(questionName) || "回收情况".equals(questionName)){ continue; } - String option = mt.getOption(); + String option = null; + if(StringUtils.isBlank(mt.getOption())){ + option = mt.getOption(); + }else{ + if(mt.getOption().contains("-_-")){ + option = mt.getOption().substring(mt.getOption().indexOf("-_-")+ 3); + }else{ + option = mt.getOption(); + } + } String answer = mt.getAnswer(); String key = option + "-_-" + questionName; // 统计项有值才添加 @@ -2129,6 +2207,7 @@ map.put(key, value); } } + }else{ if( !map.containsKey(key) ){ map.put(key, 1); @@ -2137,11 +2216,54 @@ map.put(key, value); } } + if(summaryOfMaterialQuantities){ + // 有数量才添加 + Integer amount = null; + if(QualityMonitoringDefinition.SCOPE_MATERIAL_AND_TOUSSE.equals(scope) || QualityMonitoringDefinition.SCOPE_MATERIAL.equals(scope)){ + amount = mt.getRegisterMaterialAmount(); + }else{ + amount = mt.getAmount(); + } + if(amount != null && amount > 0){ + if(numNames.contains(questionName)){ + if(StringUtils.isNotBlank(answer) && StringUtils.isNumeric(answer)){ + Integer answerNum = Integer.valueOf(answer); + if(!map2.containsKey(key) ){ + map2.put(key, answerNum); + }else{ + int value = map2.get(key) + answerNum; + map2.put(key, value); + } + } + }else{ + if( !map2.containsKey(key) ){ + map2.put(key, amount); + }else{ + int value = map2.get(key) + amount; + map2.put(key, value); + } + } + } + } + }else if(summaryOfMaterialQuantities && key.equals("1_-_-")){ + // 统计项没有结果,只有材料(器械包)和数量的数据 + Integer amount = mt.getAmount(); + if(amount != null && amount > 0){ + if( !map2.containsKey(key) ){ + map2.put(key, amount); + }else{ + int value = map2.get(key) + amount; + map2.put(key, value); + } + } } } if(!MapUtils.isEmpty(map)){ listMap.add(map); } + if(!MapUtils.isEmpty(map2)){ + listMap.add(map2); + } return listMap; } /** @@ -2293,11 +2415,11 @@ * @param voMap 监测元素信息map * @return */ - private JSONObject queryFormDefinitionDynamicColumnInfo(String formName, String modeType, Map voMap) { + private JSONObject queryFormDefinitionDynamicColumnInfo(String formName, String modeType, Map voMap, Set formDefinitionIds) { StringBuilder sbf = new StringBuilder(500); String startDate = StrutsParamUtils.getPraramValue("startDate", ""); String endDate = StrutsParamUtils.getPraramValue("endDate", ""); - sbf.append("select fdi.requirement,fdi.width,fdi.displayFormat,fdi.name, fdi.orderNumber fdiOrderNumber ,fdio.orderNumber fdioOrderNumber,fdio.value,fdi.type,fd.version from ") + sbf.append("select fd.id formDefinitionId, fdi.requirement,fdi.width,fdi.displayFormat,fdi.name, fdi.orderNumber fdiOrderNumber ,fdio.orderNumber fdioOrderNumber,fdio.value,fdi.type,fd.version from ") .append(FormDefinition.class.getSimpleName()) .append(" fd join ") .append(FormDefinitionItem.class.getSimpleName()) @@ -2328,6 +2450,7 @@ String formDefinitionItemName = rs.getString("name"); int version = rs.getInt("version"); String value = rs.getString("value"); + formDefinitionIds.add(rs.getLong("formDefinitionId")); if(value == null){ value = ""; }