Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java =================================================================== diff -u -r35798 -r35806 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java (.../JasperReportManager.java) (revision 35798) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java (.../JasperReportManager.java) (revision 35806) @@ -1091,14 +1091,6 @@ */ public JSONObject queryQualityMonitoringDataSource(); /** - * 获取获取质量监测报表数据列头数据,用于前端做成table显示 - * @param formName 表单名称 - * @param modeType 类型 有回收情况,清洗情况,灭菌清况 - * @param voMap 监测元素信息map - * @return - */ - public JSONObject queryFormDefinitionDynamicColumnInfo(String formName, String modeType, Map voMap); - /** * 查询手术室器械包使用分摊费用明细报表 * @param startDate * @param endDate Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/QualityMonitoringHelper.java =================================================================== diff -u -r35802 -r35806 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/QualityMonitoringHelper.java (.../QualityMonitoringHelper.java) (revision 35802) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/QualityMonitoringHelper.java (.../QualityMonitoringHelper.java) (revision 35806) @@ -5,6 +5,8 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -24,8 +26,11 @@ import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.entity.customform.formdefinition.FormDefinition; import com.forgon.disinfectsystem.entity.customform.formdefinition.FormDefinitionItem; +import com.forgon.disinfectsystem.entity.customform.formdefinition.FormDefinitionItemOption; 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; @@ -45,6 +50,278 @@ @Autowired private SupplyRoomConfigManager supplyRoomConfigManager; /** + * 获取获取质量监测报表数据,用于前端做成table显示 + * @return + */ + public JSONObject queryQualityMonitoringDataSource() { + Map requestParameters = new HashMap(); + Long inspectItemId = StrutsParamUtils.getPraramLongValue("inspectItemId", 0L); + String isShowTousseMaerialSumAmountStr = StrutsParamUtils.getPraramValue("isShowTousseMaerialSumAmount", "false"); + boolean isShowTousseMaerialSumAmount = false; + if("true".equals(isShowTousseMaerialSumAmountStr)){ + isShowTousseMaerialSumAmount = true; + } + JSONObject obj = new JSONObject(); + String scope = null; + boolean hiddenNameAndAmount = false; + String responsibilityPart = null; + String recordRinseInformation = null; + String recordRecycleInformation = null; + String recordSterilizatioInformation = null; + if(DatabaseUtil.isPoIdValid(inspectItemId)){ + QualityMonitoringDefinition q = (QualityMonitoringDefinition)objectDao.getById(QualityMonitoringDefinition.class.getSimpleName(), inspectItemId); + scope = q.getScope(); + obj.put("scope", scope); + responsibilityPart = q.getResponsibilityPart(); + recordRecycleInformation = q.getRecordRecycleInformation(); + recordSterilizatioInformation = q.getRecordSterilizatioInformation(); + recordRinseInformation = q.getRecordRinseInformation(); + if(StringUtils.isBlank(scope) || "无".equals(scope) || "灭菌炉记录".equals(scope)){ + hiddenNameAndAmount = true; + } + } + String monitoringType = StrutsParamUtils.getPraramValue("monitoringType", ""); + int totalRows = 0; + String formName = StrutsParamUtils.getPraramValue("formName", ""); + String modeType = null;//类型,决定显示回收情况,清洗情况,灭菌情况。 + if(Constants.STR_YES.equals(recordRecycleInformation) && QualityMonitoringDefinition.QUALITYMONITORING_MODULE_NAME_RECYCLING.equals(responsibilityPart)){//回收情况 + modeType = "recordRecycleInformation"; + }else if(Constants.STR_YES.equals(recordRinseInformation) && QualityMonitoringDefinition.QUALITYMONITORING_MODULE_NAME_WASH.equals(responsibilityPart)){//清洗情况 + modeType = "recordRinseInformation"; + }else if(Constants.STR_YES.equals(recordSterilizatioInformation) && QualityMonitoringDefinition.QUALITYMONITORING_MODULE_NAME_STERILIZATION.equals(responsibilityPart)){//灭菌情况 + modeType = "recordSterilizatioInformation"; + } + //监测元素属性map + Map formDefinitionItemNameMap = new HashMap(); + JSONObject dynamicColumnObj = queryFormDefinitionDynamicColumnInfo(formName,modeType, formDefinitionItemNameMap); + String instrumentSetTypes = StrutsParamUtils.getPraramValue("instrumentSetTypes", ""); + List monitoringItemBeans = getQualityMonitoringDataSource(instrumentSetTypes, formName, responsibilityPart, recordRinseInformation, scope, requestParameters,dynamicColumnObj.optBoolean("haveRequirement"), isShowTousseMaerialSumAmount); + if(!CollectionUtils.isEmpty(monitoringItemBeans)){ + if(!MapUtils.isEmpty(formDefinitionItemNameMap)){ + Iterator it = monitoringItemBeans.iterator(); + while(it.hasNext()){ + MonitoringItemBean monitoringItemBean = it.next(); + String questionName = monitoringItemBean.getQuestionName(); + if(StringUtils.isBlank(questionName)){ + continue; + } + String option = monitoringItemBean.getOption(); + if("-".equals(questionName)){ + if(formDefinitionItemNameMap.containsKey(option + "-")){ + FormDefinitionReportColumnVo thisFormDefinitionItem = formDefinitionItemNameMap.get(option + "-"); + monitoringItemBean.setDisplayFormat(thisFormDefinitionItem.getDisplayFormat()); + monitoringItemBean.setWidth(thisFormDefinitionItem.getWidth()); + } + }else{ + String optionKey = ""; + if(StringUtils.isNotBlank(option) && option.contains("P+")){ + int index = option.indexOf("P+") + 2; + optionKey = option.substring(index); + }else{ + optionKey = option; + } + if(formDefinitionItemNameMap.containsKey(questionName + "-" + optionKey)){ + FormDefinitionReportColumnVo thisFormDefinitionItem = formDefinitionItemNameMap.get(questionName + "-" + optionKey); + if(FormDefinitionItem.FORMAT_ALL.equals(thisFormDefinitionItem.getDisplayFormat())){ + if(!"√".equals(monitoringItemBean.getAnswer())){ + it.remove(); + continue; + } + if(option.contains("P+")){ + monitoringItemBean.setAnswer(monitoringItemBean.getOption().substring(option.indexOf("P+") + 2)); + }else{ + monitoringItemBean.setAnswer(monitoringItemBean.getOption()); + } + monitoringItemBean.setOption(monitoringItemBean.getQuestionName()); + monitoringItemBean.setQuestionName("-"); + } + monitoringItemBean.setDisplayFormat(thisFormDefinitionItem.getDisplayFormat()); + monitoringItemBean.setWidth(thisFormDefinitionItem.getWidth()); + } + } + } + } + } + String dataType = requestParameters.get("dataType"); + if("监测范围为灭菌炉记录的定期监测数据".equals(dataType)){ + Map>>> dataTimeMap = new HashMap>>>(); + Map dateToFrequencyAmount = new HashMap(); + for (MonitoringItemBean monitoringItemBean : monitoringItemBeans) { + String dateTime = monitoringItemBean.getDateTime(); + Map>> thisSterilizerNameMap = null; + if(dataTimeMap.containsKey(dateTime)){ + thisSterilizerNameMap = dataTimeMap.get(dateTime); + }else{ + thisSterilizerNameMap = new HashMap>>(); + dataTimeMap.put(dateTime, thisSterilizerNameMap); + } + String sterilizerName = monitoringItemBean.getSterilizerName(); + if(StringUtils.isBlank(sterilizerName)){ + sterilizerName = "空"; + } + Map> thisFrequencyMap = null; + if(thisSterilizerNameMap.containsKey(sterilizerName)){ + thisFrequencyMap = thisSterilizerNameMap.get(sterilizerName); + }else{ + thisFrequencyMap = new HashMap>(); + thisSterilizerNameMap.put(sterilizerName, thisFrequencyMap); + } + List thisMonitoringItemBeans = null; + Integer frequency = monitoringItemBean.getFrequency(); + if(frequency == null){ + frequency = 0; + } + String frequencyKey = String.valueOf(frequency); + if(thisFrequencyMap.containsKey(frequencyKey)){ + thisMonitoringItemBeans = thisFrequencyMap.get(frequencyKey); + }else{ + thisMonitoringItemBeans = new ArrayList(); + thisFrequencyMap.put(frequencyKey, thisMonitoringItemBeans); + if(!dateTime.contains("合计") && dateTime.startsWith("20")){ + totalRows++; + if(!dateToFrequencyAmount.containsKey(dateTime)){ + dateToFrequencyAmount.put(dateTime, 1); + }else{ + dateToFrequencyAmount.put(dateTime, MathTools.add(dateToFrequencyAmount.get(dateTime), 1).intValue()); + } + } + } + thisMonitoringItemBeans.add(monitoringItemBean); + } + obj.put("dataType", dataType); + obj.put("data", JSONObject.fromObject(dataTimeMap).toString()); + obj.put("dateRowsAmountMap", JSONObject.fromObject(dateToFrequencyAmount)); + obj.put("totalRows", totalRows); + obj.put("fixedColumnNames", new String[]{"日期","炉号","炉次","登记人"}); + + }else if("监测范围为材料和器械包的质量监测数据".equals(dataType)){ + Map>>> dataTimeMap = new HashMap>>>(); + Map dateToMaterialNameAmount = new HashMap(); + Map tousseMaterialAmountMap = new HashMap(); + for (MonitoringItemBean monitoringItemBean : monitoringItemBeans) { + String thisTousseName = monitoringItemBean.getTousseName(); + if(!StringUtils.isBlank(thisTousseName) && monitoringItemBean.getMaterialAmount() != null && monitoringItemBean.getMaterialAmount() > 0){ + tousseMaterialAmountMap.put(thisTousseName, monitoringItemBean.getMaterialAmount()); + } + } + for (MonitoringItemBean monitoringItemBean : monitoringItemBeans) { + String dateTime = monitoringItemBean.getDateTime(); + Map>> thisTousseMap = null; + if(dataTimeMap.containsKey(dateTime)){ + thisTousseMap = dataTimeMap.get(dateTime); + }else{ + thisTousseMap = new HashMap>>(); + dataTimeMap.put(dateTime, thisTousseMap); + } + String thisTousseName = monitoringItemBean.getTousseName(); + if(StringUtils.isBlank(thisTousseName)){ + thisTousseName = "空"; + }else{ + int materialAmount = 0; + if(tousseMaterialAmountMap.containsKey(thisTousseName)){ + materialAmount = tousseMaterialAmountMap.get(thisTousseName); + } + thisTousseName = thisTousseName + "%&" + monitoringItemBean.getQualityMonitoringInstanceId() + "%&" + materialAmount ; + } + Map> thisMaterialMap = null; + if(thisTousseMap.containsKey(thisTousseName)){ + thisMaterialMap = thisTousseMap.get(thisTousseName); + }else{ + thisMaterialMap = new HashMap>(); + thisTousseMap.put(thisTousseName, thisMaterialMap); + } + String materialName = monitoringItemBean.getMaterialName(); + List thisMonitoringItemBeans = null; + if(StringUtils.isBlank(materialName)){ + materialName = "空"; + }else{ + materialName = materialName + "%&" + monitoringItemBean.getQualityMonitoringInstanceId() + "_" + monitoringItemBean.getQualityMonitoringGoodsId(); + } + if(thisMaterialMap.containsKey(materialName)){ + thisMonitoringItemBeans = thisMaterialMap.get(materialName); + }else{ + thisMonitoringItemBeans = new ArrayList(); + thisMaterialMap.put(materialName, thisMonitoringItemBeans); + if(!dateTime.contains("合计") && dateTime.startsWith("20")){ + totalRows++; + if(!dateToMaterialNameAmount.containsKey(dateTime)){ + dateToMaterialNameAmount.put(dateTime, 1); + }else{ + dateToMaterialNameAmount.put(dateTime, MathTools.add(dateToMaterialNameAmount.get(dateTime), 1).intValue()); + } + } + } + thisMonitoringItemBeans.add(monitoringItemBean); + } + obj.put("dataType", dataType); + obj.put("data", JSONObject.fromObject(dataTimeMap)); + obj.put("dateRowsAmountMap", JSONObject.fromObject(dateToMaterialNameAmount)); + obj.put("totalRows", totalRows); + if(isShowTousseMaerialSumAmount){ + obj.put("fixedColumnNames", new String[]{"日期","器械包名称","器械包材料总件数","材料名称","包数","件数","位置","登记人"}); + }else{ + obj.put("fixedColumnNames", new String[]{"日期","器械包名称","材料名称","包数","件数","位置","登记人"}); + } + }else{ + Map>> dataTimeMap = new HashMap>>(); + for (MonitoringItemBean monitoringItemBean : monitoringItemBeans) { + String dateTime = monitoringItemBean.getDateTime(); + Map> thisTousseMap = null; + if(dataTimeMap.containsKey(dateTime)){ + thisTousseMap = dataTimeMap.get(dateTime); + }else{ + thisTousseMap = new HashMap>(); + dataTimeMap.put(dateTime, thisTousseMap); + } + String goodsName = monitoringItemBean.getGoodsName(); + if(StringUtils.isBlank(goodsName)){ + goodsName = "空"; + } + List thisMonitoringItemBeans = null; + if(thisTousseMap.containsKey(goodsName)){ + thisMonitoringItemBeans = thisTousseMap.get(goodsName); + }else{ + thisMonitoringItemBeans = new ArrayList(); + thisTousseMap.put(goodsName, thisMonitoringItemBeans); + if(!dateTime.contains("合计") && dateTime.startsWith("20")){ + totalRows++; + } + } + thisMonitoringItemBeans.add(monitoringItemBean); + } + obj.put("dataType", monitoringType); + obj.put("data", JSONObject.fromObject(dataTimeMap).toString()); + obj.put("totalRows", totalRows); + if(JasperReportManagerImpl.FORMNAMEOFADJ.equals(dataType)){ + if(hiddenNameAndAmount){ + obj.put("fixedColumnNames", new String[]{"日期","灭菌器炉号","炉次","登记人"}); + }else{ + obj.put("fixedColumnNames", new String[]{"日期","物品名称","灭菌器炉号","炉次","数量","登记人"}); + } + }else if("质量监测".equals(monitoringType)){ + if(hiddenNameAndAmount){ + obj.put("fixedColumnNames", new String[]{"日期","位置","登记人"}); + }else if("材料".equals(scope)){ + obj.put("fixedColumnNames", new String[]{"日期","物品名称","件数","位置","登记人"}); + }else if("器械包".equals(scope)){ + obj.put("fixedColumnNames", new String[]{"日期","物品名称","包数","位置","登记人"}); + } + }else if("定期监测".equals(monitoringType)){ + if(hiddenNameAndAmount){ + obj.put("fixedColumnNames", new String[]{"日期","登记人"}); + }else if("材料".equals(scope)){ + obj.put("fixedColumnNames", new String[]{"日期","物品名称","件数","登记人"}); + }else if("器械包".equals(scope)){ + obj.put("fixedColumnNames", new String[]{"日期","物品名称","包数","登记人"}); + }else if("材料和器械包".equals(scope)){ + obj.put("fixedColumnNames", new String[]{"日期","物品名称","包数","件数","登记人"}); + } + } + } + obj.put("dynamicColumn", dynamicColumnObj); + return obj; + } + /** * @param formName 表单名称 * @param instrumentSetTypes 器械包种类 只查询具体种类 不查询种类下的子类 * @param responsibilityPart 责任环节 @@ -1329,4 +1606,172 @@ bean.setCreateUserName(monitoringItemBean.getCreateUserName()); list.add(bean); } + /** + * 获取获取质量监测报表数据列头数据,用于前端做成table显示 + * @param formName 表单名称 + * @param modeType 类型 有回收情况,清洗情况,灭菌清况 + * @param voMap 监测元素信息map + * @return + */ + private JSONObject queryFormDefinitionDynamicColumnInfo(String formName, String modeType, Map voMap) { + 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 ") + .append(FormDefinition.class.getSimpleName()) + .append(" fd join ") + .append(FormDefinitionItem.class.getSimpleName()) + .append(" fdi on fd.id=fdi.formDefinition_id left join ") + .append(FormDefinitionItemOption.class.getSimpleName()) + .append(" fdio on fdio.formDefinitionItem_id=fdi.id ") + .append(" where fd.id in(select formDefinition_id from FormInstance where ") + .append(" createDate between ") + .append(dateQueryAdapter.dateAdapter(startDate+" 00:00:00")) + .append(" and ") + .append(dateQueryAdapter.dateAdapter(endDate+" 23:59:59")) + .append(") and fd.formName='") + .append(formName) + .append("' and fdi.isReportDisplay='是' order by fd.version desc,fdi.orderNumber,fdio.orderNumber asc"); + ResultSet rs = null; + Map> columnNameMap = new LinkedHashMap>(); + Map columnWidthMap = new LinkedHashMap(); + int maxNum = 0;//列最大序号 + boolean haveRequirement = false; + + try { + rs = objectDao.executeSql(sbf.toString()); + Map fdiOrderNumberMap = new HashMap(); + Map fdioOrderNumberMap = new HashMap(); + int i = 1;//元素序号 用于不同版本中有相同序号的数据重新排列 + int j = 1;//元素值序号 用于不同版本中有相同序号的数据重新排列 + while(rs.next()){ + String formDefinitionItemName = rs.getString("name"); + int version = rs.getInt("version"); + int fdiOrderNumber = rs.getInt("fdiOrderNumber"); + String requirement = rs.getString("requirement"); + int fdioOrderNumber = rs.getInt("fdioOrderNumber"); + String value = rs.getString("value"); + if(value == null){ + value = ""; + } + String type = rs.getString("type"); + String displayFormat = rs.getString("displayFormat"); + Integer width = ConvertNumber.getNumberIntValue(rs.getObject("width"), null); + String key = formDefinitionItemName + "-" + value; + FormDefinitionReportColumnVo vo = voMap.get(key); + if(vo == null){ + vo = new FormDefinitionReportColumnVo(); + voMap.put(key, vo); + } + if(vo.getVersion() == null || version > vo.getVersion()){ + vo.setVersion(version); + vo.setFdiName(formDefinitionItemName); + if(fdiOrderNumberMap.containsKey(formDefinitionItemName)){ + vo.setFdiOrderNumber(fdiOrderNumberMap.get(formDefinitionItemName)); + }else{ + vo.setFdiOrderNumber(i); + fdiOrderNumberMap.put(formDefinitionItemName, i); + i++; + } + if(fdioOrderNumberMap.containsKey(formDefinitionItemName)){ + vo.setFdioOrderNumber(fdioOrderNumberMap.get(formDefinitionItemName)); + }else{ + vo.setFdioOrderNumber(j); + fdioOrderNumberMap.put(formDefinitionItemName, j); + j++; + } + vo.setValue(value); + vo.setDisplayFormat(displayFormat); + vo.setType(type); + vo.setWidth(width); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally{ + DatabaseUtil.closeResultSetAndStatement(rs); + } + if(MapUtils.isNotEmpty(voMap)){ + for (FormDefinitionReportColumnVo vo : voMap.values()) { + String formDefinitionItemName = vo.getFdiName(); + int fdiOrderNumber = vo.getFdiOrderNumber(); + if(maxNum < fdiOrderNumber){ + maxNum = fdiOrderNumber; + } + if(!haveRequirement){ + String requirement = vo.getRequirement(); + if("必填".equals(requirement)){ + haveRequirement = true; + } + } + int fdioOrderNumber = vo.getFdioOrderNumber(); + String value = vo.getValue(); + String type = vo.getType(); + String displayFormat = vo.getDisplayFormat(); + + String key = null; + String mapValue = null; + if(FormDefinitionItem.TYPE_CHECK.equals(type)){ + key = formDefinitionItemName + "+" + fdiOrderNumber; + mapValue = value; + }else if(FormDefinitionItem.TYPE_RADIO.equals(type)){ + if(FormDefinitionItem.FORMAT_ALL.equals(displayFormat)){ + key = "-+" + fdiOrderNumber; + mapValue = formDefinitionItemName; + }else{ + key = formDefinitionItemName + "+" + fdiOrderNumber; + mapValue = value; + } + }else{ + key = "-+" + fdiOrderNumber; + mapValue = formDefinitionItemName; + } + List optionValues = null; + if(columnNameMap.containsKey(key)){ + optionValues = columnNameMap.get(key); + }else{ + optionValues = new ArrayList(); + columnNameMap.put(key, optionValues); + } + if(!optionValues.contains(mapValue)){ + optionValues.add(mapValue); + } + if(!columnWidthMap.containsKey(key)){ + Integer width = vo.getWidth(); + if(width != null){ + columnWidthMap.put(key, width); + } + } + } + } + maxNum++; + JSONObject obj = new JSONObject(); + if("recordRecycleInformation".equals(modeType)){ + List values = new ArrayList(); + values.add("手术间"); + values.add("巡回护士"); + values.add("回收员"); + values.add("回收时间"); + columnNameMap.put("回收情况+" + maxNum, values); + }else if("recordRinseInformation".equals(modeType)){ + List values = new ArrayList(); + values.add("清洗机"); + values.add("清洗开始时间"); + values.add("责任人"); + values.add("当天清洗件数"); + values.add("当天清洗外来器械件数"); + columnNameMap.put("清洗情况+" + maxNum, values); + }else if("recordSterilizatioInformation".equals(modeType)){ + List values = new ArrayList(); + values.add("当次炉次灭菌总包数"); + values.add("灭菌员"); + values.add("灭菌批号"); + values.add("灭菌时间"); + columnNameMap.put("灭菌情况+" + maxNum, values); + } + obj.put("haveRequirement", haveRequirement); + obj.put("columnNameMap", JSONObject.fromObject(columnNameMap)); + obj.put("columnWidthMap", JSONObject.fromObject(columnWidthMap)); + return obj; + } } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r35805 -r35806 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 35805) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 35806) @@ -13767,440 +13767,8 @@ return sciProjectAccountingVos; } @Override - public JSONObject queryFormDefinitionDynamicColumnInfo(String formName, String modeType, Map voMap) { - StringBuilder sbf = new StringBuilder(500); - String startDate = StrutsParamUtils.getPraramValue("startDate", ""); - String endDate = StrutsParamUtils.getPraramValue("endDate", ""); - String sql = " createDate between " - + dateQueryAdapter.dateAdapter(startDate+" 00:00:00") - + " and " - + dateQueryAdapter.dateAdapter(endDate+" 23:59:59"); - sbf.append("select 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()) - .append(" fdi on fd.id=fdi.formDefinition_id left join ") - .append(FormDefinitionItemOption.class.getSimpleName()) - .append(" fdio on fdio.formDefinitionItem_id=fdi.id ") - .append(" where fd.id in(select formDefinition_id from FormInstance where ") - .append(" createDate between ") - .append(dateQueryAdapter.dateAdapter(startDate+" 00:00:00")) - .append(" and ") - .append(dateQueryAdapter.dateAdapter(endDate+" 23:59:59")) - .append(") and fd.formName='") - .append(formName) - .append("' and fdi.isReportDisplay='是' order by fd.version desc,fdi.orderNumber,fdio.orderNumber asc"); - ResultSet rs = null; - Map> columnNameMap = new LinkedHashMap>(); - Map columnWidthMap = new LinkedHashMap(); - int maxNum = 0;//列最大序号 - boolean haveRequirement = false; - - try { - rs = objectDao.executeSql(sbf.toString()); - Map fdiOrderNumberMap = new HashMap(); - Map fdioOrderNumberMap = new HashMap(); - int i = 1;//元素序号 用于不同版本中有相同序号的数据重新排列 - int j = 1;//元素值序号 用于不同版本中有相同序号的数据重新排列 - while(rs.next()){ - String formDefinitionItemName = rs.getString("name"); - int version = rs.getInt("version"); - int fdiOrderNumber = rs.getInt("fdiOrderNumber"); - String requirement = rs.getString("requirement"); - int fdioOrderNumber = rs.getInt("fdioOrderNumber"); - String value = rs.getString("value"); - if(value == null){ - value = ""; - } - String type = rs.getString("type"); - String displayFormat = rs.getString("displayFormat"); - Integer width = ConvertNumber.getNumberIntValue(rs.getObject("width"), null); - String key = formDefinitionItemName + "-" + value; - FormDefinitionReportColumnVo vo = voMap.get(key); - if(vo == null){ - vo = new FormDefinitionReportColumnVo(); - voMap.put(key, vo); - } - if(vo.getVersion() == null || version > vo.getVersion()){ - vo.setVersion(version); - vo.setFdiName(formDefinitionItemName); - if(fdiOrderNumberMap.containsKey(formDefinitionItemName)){ - vo.setFdiOrderNumber(fdiOrderNumberMap.get(formDefinitionItemName)); - }else{ - vo.setFdiOrderNumber(i); - fdiOrderNumberMap.put(formDefinitionItemName, i); - i++; - } - if(fdioOrderNumberMap.containsKey(formDefinitionItemName)){ - vo.setFdioOrderNumber(fdioOrderNumberMap.get(formDefinitionItemName)); - }else{ - vo.setFdioOrderNumber(j); - fdioOrderNumberMap.put(formDefinitionItemName, j); - j++; - } - vo.setValue(value); - vo.setDisplayFormat(displayFormat); - vo.setType(type); - vo.setWidth(width); - } - } - } catch (Exception e) { - e.printStackTrace(); - } finally{ - DatabaseUtil.closeResultSetAndStatement(rs); - } - if(MapUtils.isNotEmpty(voMap)){ - for (FormDefinitionReportColumnVo vo : voMap.values()) { - String formDefinitionItemName = vo.getFdiName(); - int fdiOrderNumber = vo.getFdiOrderNumber(); - if(maxNum < fdiOrderNumber){ - maxNum = fdiOrderNumber; - } - if(!haveRequirement){ - String requirement = vo.getRequirement(); - if("必填".equals(requirement)){ - haveRequirement = true; - } - } - int fdioOrderNumber = vo.getFdioOrderNumber(); - String value = vo.getValue(); - String type = vo.getType(); - String displayFormat = vo.getDisplayFormat(); - - String key = null; - String mapValue = null; - if(FormDefinitionItem.TYPE_CHECK.equals(type)){ - key = formDefinitionItemName + "+" + fdiOrderNumber; - mapValue = value; - }else if(FormDefinitionItem.TYPE_RADIO.equals(type)){ - if(FormDefinitionItem.FORMAT_ALL.equals(displayFormat)){ - key = "-+" + fdiOrderNumber; - mapValue = formDefinitionItemName; - }else{ - key = formDefinitionItemName + "+" + fdiOrderNumber; - mapValue = value; - } - }else{ - key = "-+" + fdiOrderNumber; - mapValue = formDefinitionItemName; - } - List optionValues = null; - if(columnNameMap.containsKey(key)){ - optionValues = columnNameMap.get(key); - }else{ - optionValues = new ArrayList(); - columnNameMap.put(key, optionValues); - } - if(!optionValues.contains(mapValue)){ - optionValues.add(mapValue); - } - if(!columnWidthMap.containsKey(key)){ - Integer width = vo.getWidth(); - if(width != null){ - columnWidthMap.put(key, width); - } - } - } - } - maxNum++; - JSONObject obj = new JSONObject(); - if("recordRecycleInformation".equals(modeType)){ - List values = new ArrayList(); - values.add("手术间"); - values.add("巡回护士"); - values.add("回收员"); - values.add("回收时间"); - columnNameMap.put("回收情况+" + maxNum, values); - }else if("recordRinseInformation".equals(modeType)){ - List values = new ArrayList(); - values.add("清洗机"); - values.add("清洗开始时间"); - values.add("责任人"); - values.add("当天清洗件数"); - values.add("当天清洗外来器械件数"); - columnNameMap.put("清洗情况+" + maxNum, values); - }else if("recordSterilizatioInformation".equals(modeType)){ - List values = new ArrayList(); - values.add("当次炉次灭菌总包数"); - values.add("灭菌员"); - values.add("灭菌批号"); - values.add("灭菌时间"); - columnNameMap.put("灭菌情况+" + maxNum, values); - } - obj.put("haveRequirement", haveRequirement); - obj.put("columnNameMap", JSONObject.fromObject(columnNameMap)); - obj.put("columnWidthMap", JSONObject.fromObject(columnWidthMap)); - return obj; - } - @Override public JSONObject queryQualityMonitoringDataSource() { - Map requestParameters = new HashMap(); - Long inspectItemId = StrutsParamUtils.getPraramLongValue("inspectItemId", 0L); - String isShowTousseMaerialSumAmountStr = StrutsParamUtils.getPraramValue("isShowTousseMaerialSumAmount", "false"); - boolean isShowTousseMaerialSumAmount = false; - if("true".equals(isShowTousseMaerialSumAmountStr)){ - isShowTousseMaerialSumAmount = true; - } - JSONObject obj = new JSONObject(); - String scope = null; - boolean hiddenNameAndAmount = false; - String responsibilityPart = null; - String recordRinseInformation = null; - String recordRecycleInformation = null; - String recordSterilizatioInformation = null; - if(DatabaseUtil.isPoIdValid(inspectItemId)){ - QualityMonitoringDefinition q = (QualityMonitoringDefinition)objectDao.getById(QualityMonitoringDefinition.class.getSimpleName(), inspectItemId); - scope = q.getScope(); - obj.put("scope", scope); - responsibilityPart = q.getResponsibilityPart(); - recordRecycleInformation = q.getRecordRecycleInformation(); - recordSterilizatioInformation = q.getRecordSterilizatioInformation(); - recordRinseInformation = q.getRecordRinseInformation(); - if(StringUtils.isBlank(scope) || "无".equals(scope) || "灭菌炉记录".equals(scope)){ - hiddenNameAndAmount = true; - } - } - String monitoringType = StrutsParamUtils.getPraramValue("monitoringType", ""); - int totalRows = 0; - String formName = StrutsParamUtils.getPraramValue("formName", ""); - String modeType = null;//类型,决定显示回收情况,清洗情况,灭菌情况。 - if(Constants.STR_YES.equals(recordRecycleInformation) && QualityMonitoringDefinition.QUALITYMONITORING_MODULE_NAME_RECYCLING.equals(responsibilityPart)){//回收情况 - modeType = "recordRecycleInformation"; - }else if(Constants.STR_YES.equals(recordRinseInformation) && QualityMonitoringDefinition.QUALITYMONITORING_MODULE_NAME_WASH.equals(responsibilityPart)){//清洗情况 - modeType = "recordRinseInformation"; - }else if(Constants.STR_YES.equals(recordSterilizatioInformation) && QualityMonitoringDefinition.QUALITYMONITORING_MODULE_NAME_STERILIZATION.equals(responsibilityPart)){//灭菌情况 - modeType = "recordSterilizatioInformation"; - } - //监测元素属性map - Map formDefinitionItemNameMap = new HashMap(); - JSONObject dynamicColumnObj = queryFormDefinitionDynamicColumnInfo(formName,modeType, formDefinitionItemNameMap); - String instrumentSetTypes = StrutsParamUtils.getPraramValue("instrumentSetTypes", ""); - List monitoringItemBeans = getQualityMonitoringDataSource(instrumentSetTypes, formName, responsibilityPart, recordRinseInformation, scope, requestParameters,dynamicColumnObj.optBoolean("haveRequirement"), isShowTousseMaerialSumAmount); - if(!CollectionUtils.isEmpty(monitoringItemBeans)){ - if(!MapUtils.isEmpty(formDefinitionItemNameMap)){ - Iterator it = monitoringItemBeans.iterator(); - while(it.hasNext()){ - MonitoringItemBean monitoringItemBean = it.next(); - String questionName = monitoringItemBean.getQuestionName(); - if(StringUtils.isBlank(questionName)){ - continue; - } - String option = monitoringItemBean.getOption(); - if("-".equals(questionName)){ - if(formDefinitionItemNameMap.containsKey(option + "-")){ - FormDefinitionReportColumnVo thisFormDefinitionItem = formDefinitionItemNameMap.get(option + "-"); - monitoringItemBean.setDisplayFormat(thisFormDefinitionItem.getDisplayFormat()); - monitoringItemBean.setWidth(thisFormDefinitionItem.getWidth()); - } - }else{ - String optionKey = ""; - if(StringUtils.isNotBlank(option) && option.contains("P+")){ - int index = option.indexOf("P+") + 2; - optionKey = option.substring(index); - }else{ - optionKey = option; - } - if(formDefinitionItemNameMap.containsKey(questionName + "-" + optionKey)){ - FormDefinitionReportColumnVo thisFormDefinitionItem = formDefinitionItemNameMap.get(questionName + "-" + optionKey); - if(FormDefinitionItem.FORMAT_ALL.equals(thisFormDefinitionItem.getDisplayFormat())){ - if(!"√".equals(monitoringItemBean.getAnswer())){ - it.remove(); - continue; - } - if(option.contains("P+")){ - monitoringItemBean.setAnswer(monitoringItemBean.getOption().substring(option.indexOf("P+") + 2)); - }else{ - monitoringItemBean.setAnswer(monitoringItemBean.getOption()); - } - monitoringItemBean.setOption(monitoringItemBean.getQuestionName()); - monitoringItemBean.setQuestionName("-"); - } - monitoringItemBean.setDisplayFormat(thisFormDefinitionItem.getDisplayFormat()); - monitoringItemBean.setWidth(thisFormDefinitionItem.getWidth()); - } - } - } - } - } - String dataType = requestParameters.get("dataType"); - if("监测范围为灭菌炉记录的定期监测数据".equals(dataType)){ - Map>>> dataTimeMap = new HashMap>>>(); - Map dateToFrequencyAmount = new HashMap(); - StringBuilder sbd = new StringBuilder(50); - for (MonitoringItemBean monitoringItemBean : monitoringItemBeans) { - String dateTime = monitoringItemBean.getDateTime(); - Map>> thisSterilizerNameMap = null; - if(dataTimeMap.containsKey(dateTime)){ - thisSterilizerNameMap = dataTimeMap.get(dateTime); - }else{ - thisSterilizerNameMap = new HashMap>>(); - dataTimeMap.put(dateTime, thisSterilizerNameMap); - } - String sterilizerName = monitoringItemBean.getSterilizerName(); - if(StringUtils.isBlank(sterilizerName)){ - sterilizerName = "空"; - } - Map> thisFrequencyMap = null; - if(thisSterilizerNameMap.containsKey(sterilizerName)){ - thisFrequencyMap = thisSterilizerNameMap.get(sterilizerName); - }else{ - thisFrequencyMap = new HashMap>(); - thisSterilizerNameMap.put(sterilizerName, thisFrequencyMap); - } - List thisMonitoringItemBeans = null; - Integer frequency = monitoringItemBean.getFrequency(); - if(frequency == null){ - frequency = 0; - } - String frequencyKey = String.valueOf(frequency); - if(thisFrequencyMap.containsKey(frequencyKey)){ - thisMonitoringItemBeans = thisFrequencyMap.get(frequencyKey); - }else{ - thisMonitoringItemBeans = new ArrayList(); - thisFrequencyMap.put(frequencyKey, thisMonitoringItemBeans); - if(!dateTime.contains("合计") && dateTime.startsWith("20")){ - totalRows++; - if(!dateToFrequencyAmount.containsKey(dateTime)){ - dateToFrequencyAmount.put(dateTime, 1); - }else{ - dateToFrequencyAmount.put(dateTime, MathTools.add(dateToFrequencyAmount.get(dateTime), 1).intValue()); - } - } - } - thisMonitoringItemBeans.add(monitoringItemBean); - } - obj.put("dataType", dataType); - obj.put("data", JSONObject.fromObject(dataTimeMap).toString()); - obj.put("dateRowsAmountMap", JSONObject.fromObject(dateToFrequencyAmount)); - obj.put("totalRows", totalRows); - obj.put("fixedColumnNames", new String[]{"日期","炉号","炉次","登记人"}); - - }else if("监测范围为材料和器械包的质量监测数据".equals(dataType)){ - Map>>> dataTimeMap = new HashMap>>>(); - Map dateToMaterialNameAmount = new HashMap(); - Map tousseMaterialAmountMap = new HashMap(); - for (MonitoringItemBean monitoringItemBean : monitoringItemBeans) { - String thisTousseName = monitoringItemBean.getTousseName(); - if(!StringUtils.isBlank(thisTousseName) && monitoringItemBean.getMaterialAmount() != null && monitoringItemBean.getMaterialAmount() > 0){ - tousseMaterialAmountMap.put(thisTousseName, monitoringItemBean.getMaterialAmount()); - } - } - for (MonitoringItemBean monitoringItemBean : monitoringItemBeans) { - String dateTime = monitoringItemBean.getDateTime(); - Map>> thisTousseMap = null; - if(dataTimeMap.containsKey(dateTime)){ - thisTousseMap = dataTimeMap.get(dateTime); - }else{ - thisTousseMap = new HashMap>>(); - dataTimeMap.put(dateTime, thisTousseMap); - } - String thisTousseName = monitoringItemBean.getTousseName(); - if(StringUtils.isBlank(thisTousseName)){ - thisTousseName = "空"; - }else{ - int materialAmount = 0; - if(tousseMaterialAmountMap.containsKey(thisTousseName)){ - materialAmount = tousseMaterialAmountMap.get(thisTousseName); - } - thisTousseName = thisTousseName + "%&" + monitoringItemBean.getQualityMonitoringInstanceId() + "%&" + materialAmount ; - } - Map> thisMaterialMap = null; - if(thisTousseMap.containsKey(thisTousseName)){ - thisMaterialMap = thisTousseMap.get(thisTousseName); - }else{ - thisMaterialMap = new HashMap>(); - thisTousseMap.put(thisTousseName, thisMaterialMap); - } - String materialName = monitoringItemBean.getMaterialName(); - List thisMonitoringItemBeans = null; - if(StringUtils.isBlank(materialName)){ - materialName = "空"; - }else{ - materialName = materialName + "%&" + monitoringItemBean.getQualityMonitoringInstanceId() + "_" + monitoringItemBean.getQualityMonitoringGoodsId(); - } - if(thisMaterialMap.containsKey(materialName)){ - thisMonitoringItemBeans = thisMaterialMap.get(materialName); - }else{ - thisMonitoringItemBeans = new ArrayList(); - thisMaterialMap.put(materialName, thisMonitoringItemBeans); - if(!dateTime.contains("合计") && dateTime.startsWith("20")){ - totalRows++; - if(!dateToMaterialNameAmount.containsKey(dateTime)){ - dateToMaterialNameAmount.put(dateTime, 1); - }else{ - dateToMaterialNameAmount.put(dateTime, MathTools.add(dateToMaterialNameAmount.get(dateTime), 1).intValue()); - } - } - } - thisMonitoringItemBeans.add(monitoringItemBean); - } - obj.put("dataType", dataType); - obj.put("data", JSONObject.fromObject(dataTimeMap)); - obj.put("dateRowsAmountMap", JSONObject.fromObject(dateToMaterialNameAmount)); - obj.put("totalRows", totalRows); - if(isShowTousseMaerialSumAmount){ - obj.put("fixedColumnNames", new String[]{"日期","器械包名称","器械包材料总件数","材料名称","包数","件数","位置","登记人"}); - }else{ - obj.put("fixedColumnNames", new String[]{"日期","器械包名称","材料名称","包数","件数","位置","登记人"}); - } - }else{ - Map>> dataTimeMap = new HashMap>>(); - for (MonitoringItemBean monitoringItemBean : monitoringItemBeans) { - String dateTime = monitoringItemBean.getDateTime(); - Map> thisTousseMap = null; - if(dataTimeMap.containsKey(dateTime)){ - thisTousseMap = dataTimeMap.get(dateTime); - }else{ - thisTousseMap = new HashMap>(); - dataTimeMap.put(dateTime, thisTousseMap); - } - String goodsName = monitoringItemBean.getGoodsName(); - if(StringUtils.isBlank(goodsName)){ - goodsName = "空"; - } - List thisMonitoringItemBeans = null; - if(thisTousseMap.containsKey(goodsName)){ - thisMonitoringItemBeans = thisTousseMap.get(goodsName); - }else{ - thisMonitoringItemBeans = new ArrayList(); - thisTousseMap.put(goodsName, thisMonitoringItemBeans); - if(!dateTime.contains("合计") && dateTime.startsWith("20")){ - totalRows++; - } - } - thisMonitoringItemBeans.add(monitoringItemBean); - } - obj.put("dataType", monitoringType); - obj.put("data", JSONObject.fromObject(dataTimeMap).toString()); - obj.put("totalRows", totalRows); - if(JasperReportManagerImpl.FORMNAMEOFADJ.equals(dataType)){ - if(hiddenNameAndAmount){ - obj.put("fixedColumnNames", new String[]{"日期","灭菌器炉号","炉次","登记人"}); - }else{ - obj.put("fixedColumnNames", new String[]{"日期","物品名称","灭菌器炉号","炉次","数量","登记人"}); - } - }else if("质量监测".equals(monitoringType)){ - if(hiddenNameAndAmount){ - obj.put("fixedColumnNames", new String[]{"日期","位置","登记人"}); - }else if("材料".equals(scope)){ - obj.put("fixedColumnNames", new String[]{"日期","物品名称","件数","位置","登记人"}); - }else if("器械包".equals(scope)){ - obj.put("fixedColumnNames", new String[]{"日期","物品名称","包数","位置","登记人"}); - } - }else if("定期监测".equals(monitoringType)){ - if(hiddenNameAndAmount){ - obj.put("fixedColumnNames", new String[]{"日期","登记人"}); - }else if("材料".equals(scope)){ - obj.put("fixedColumnNames", new String[]{"日期","物品名称","件数","登记人"}); - }else if("器械包".equals(scope)){ - obj.put("fixedColumnNames", new String[]{"日期","物品名称","包数","登记人"}); - }else if("材料和器械包".equals(scope)){ - obj.put("fixedColumnNames", new String[]{"日期","物品名称","包数","件数","登记人"}); - } - } - } - obj.put("dynamicColumn", dynamicColumnObj); - return obj; + return qualityMonitoringHelper.queryQualityMonitoringDataSource(); } @Override public List queryUseRecordInfoReportVosData(String startDate, String endDate, String depart, String tousseDefinitionName, String hospitalNum, String treatmentNum, String patientName, String barcode, String status) {