Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/QualityControlHelper.java =================================================================== diff -u -r40975 -r40989 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/QualityControlHelper.java (.../QualityControlHelper.java) (revision 40975) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/QualityControlHelper.java (.../QualityControlHelper.java) (revision 40989) @@ -3,15 +3,14 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; -import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.forgon.databaseadapter.service.DateQueryAdapter; -import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.disinfectsystem.entity.customform.formdefinition.FormDefinitionItem; import com.forgon.disinfectsystem.entity.customform.formdefinition.FormDefinitionItemOption; import com.forgon.disinfectsystem.entity.customform.forminstance.FormInstance; @@ -38,10 +37,21 @@ protected DateQueryAdapter dateQueryAdapter; @Autowired protected ObjectDao objectDao; + /** + * 消毒供应中心护理质量质控指标报表 数据 + * @param requestParameters + * @param parametMap + * @return + */ public List getQualityControlReportData(Map requestParameters, Map parametMap){ + //先查询1 2级名称 没数据也要显示1 2级名称 然后数量为0 + String querySupplyRoom = StrutsParamUtils.getPraramValue("querySupplyRoom", ""); + String qualityControlItemParameterNames = StrutsParamUtils.getPraramValue("qualityControlItemParameterNames", ""); + String qtNameSql = SqlUtils.getInStringListSql("qt.name", SqlUtils.splitStringToSet(qualityControlItemParameterNames, Constants.IDS_SEPARATOR)); + List resultList = new ArrayList<>(); + Map firstLevelMap = getFirstLevelMap(qtNameSql, resultList); String queryType = StrutsParamUtils.getPraramValue("queryType", "按年份"); // 按年份 按季度 默认值为按年份 String year = StrutsParamUtils.getPraramValue("year", ""); - String qualityControlItemParameterNames = StrutsParamUtils.getPraramValue("qualityControlItemParameterNames", ""); String startDate = null; String endDate = null; String title = "消毒供应中心护理质量质控指标报表"; @@ -84,7 +94,7 @@ title += "("+ year +"年)"; } parametMap.put("title", title); - String sql = "select sum(fiov.quantity) sumQuantity,q.name qName,qt.name qtName,qt.targetValue from " + String sql = "select sum(fiov.quantity) sumQuantity,q.name qName,qt.name qtName from " + QualityMonitoringInstance.class.getSimpleName() + " qmi join " + FormInstance.class.getSimpleName() @@ -109,43 +119,85 @@ + dateQueryAdapter.dateAdapter(endDate) + SqlUtils.getInStringListSql("qt.name", SqlUtils.splitStringToSet(qualityControlItemParameterNames, Constants.IDS_SEPARATOR)) + " and fiov.quantity > 0 " - + SqlUtils.getHandleDepartCodingOfQualityMonitoringDefinitionSql(AcegiHelper.getCurrentOrgUnitCode()) - + " group by q.name ,qt.name ,qt.targetValue,qt.sequence " - + " order by qt.sequence asc "; + + SqlUtils.getHandleDepartCodingOfQualityMonitoringDefinitionSql(querySupplyRoom) + + " group by q.name ,qt.name "; ResultSet rs = null; //qtName targetValue 是一级 ;qName是二级 sumQuantity是qName的数量 - List resultList = new ArrayList<>(); - Map firstLevelMap = new HashMap<>(); try { rs = objectDao.executeSql(sql); while (rs.next()) { int sumQuantity = rs.getInt("sumQuantity"); String qName = rs.getString("qName"); String qtName = rs.getString("qtName"); - String targetValue = rs.getString("targetValue"); // 构建一级数据的key(qtName + targetValue 组合作为唯一标识) - String firstLevelKey = qtName + "_" + targetValue; + String firstLevelKey = qtName; + QualityControlFirstVo firstLevel = firstLevelMap.get(firstLevelKey); + if (firstLevel == null) { + continue;//不会为空 + } + List secondLevels = firstLevel.getQualityControlSecondVoList(); + for (QualityControlSecondVo secondLevel : secondLevels) { + if(secondLevel.getQName().equals(qName)){ + secondLevel.setSumQuantity(sumQuantity); + firstLevel.addTotalAmount(sumQuantity); + break; + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return resultList; + } + /** + * 获取1 2级数据 数量都为0 + * @param qtNameSql 例如 and qt.name = '11' + * @param firstVoList + * @return key QualityControlIndicatorType.name + */ + private Map getFirstLevelMap(String qtNameSql, List firstVoList){ + //2级没数据也要显示出来 显示为0 + String sql = "select qt.name qtName,q.name qName, qt.targetValue from " + + QualityControlIndicatorType.class.getSimpleName() + + " qt join " + + QualityControlItemParameter.class.getSimpleName() + + " q on q.qcIndicatorType_id=qt.id where 1=1 " + + qtNameSql + + " order by qt.sequence asc ,q.sequence asc "; + Map firstLevelMap = new LinkedHashMap(); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + while (rs.next()) { + String qName = rs.getString("qName"); + String qtName = rs.getString("qtName"); + String targetValue = rs.getString("targetValue"); + + // 构建一级数据的key + String firstLevelKey = qtName; + // 检查一级数据是否已存在 QualityControlFirstVo firstLevel = firstLevelMap.get(firstLevelKey); if (firstLevel == null) { // 创建新的一级数据 firstLevel = new QualityControlFirstVo(qtName, targetValue); firstLevelMap.put(firstLevelKey, firstLevel); - resultList.add(firstLevel); + firstVoList.add(firstLevel); } // 创建并添加二级数据 - QualityControlSecondVo secondLevel = new QualityControlSecondVo(qName, sumQuantity); - firstLevel.addTotalAmount(sumQuantity); + QualityControlSecondVo secondLevel = new QualityControlSecondVo(qName, 0); firstLevel.addSecondLevel(secondLevel); } } catch (SQLException e) { e.printStackTrace(); }finally { DatabaseUtil.closeResultSetAndStatement(rs); } - return resultList; + return firstLevelMap; } }