Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/SterilizationWorkloadReportHelper.java =================================================================== diff -u -r35802 -r35920 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/SterilizationWorkloadReportHelper.java (.../SterilizationWorkloadReportHelper.java) (revision 35802) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/SterilizationWorkloadReportHelper.java (.../SterilizationWorkloadReportHelper.java) (revision 35920) @@ -13,24 +13,33 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.Map.Entry; import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.Sterilizer; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; import com.forgon.disinfectsystem.jasperreports.javabeansource.DisinfectionFractionDefectiveBean; +import com.forgon.disinfectsystem.jasperreports.javabeansource.SterilizationAreaWorkLoadBean; +import com.forgon.systemsetting.service.HttpOptionManager; import com.forgon.tools.MathTools; import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.ForgonDateUtils; import com.forgon.tools.util.SqlUtils; /** * 灭菌区工作量及不合格率月报 - * + * 灭菌区工作量统计报表 */ @Component public class SterilizationWorkloadReportHelper extends ReportHelper{ + @Autowired + private HttpOptionManager httpOptionManager; /** * 获取灭菌区工作量及不合格率月报数据 * @param startTime 开始时间 @@ -342,4 +351,149 @@ DatabaseUtil.closeResultSetAndStatement(unQualityRs); } } + /** + * 获取灭菌区工作量统计报表的数据 + * @param monthSearch 查询年月 如: 2017-01 + * @param departCoding 科室编码 + * @param showsterilizationAmountPerSterilizer 显示每个灭菌器的灭菌量 + * @return + */ + public List getSterilizationAreaWorkLoadBeans( + String monthSearch, String departCoding, boolean showsterilizationAmountPerSterilizer) { + List list = new ArrayList(); + if (StringTools.isNotBlank(monthSearch) + && StringTools.isNotBlank(departCoding)) { + Set departCodings = SqlUtils.splitStringToSet(departCoding, ","); + List dayList = ForgonDateUtils.getFirstDayToLastDay(monthSearch); + List sterilerGroupList = httpOptionManager.getHttpOptionTextById("sterilerGroup"); //灭菌炉分组 + @SuppressWarnings("unchecked") + List sterilizerNameList= objectDao.findByHql("select po.name from " + Sterilizer.class.getSimpleName() + " po where " + SqlUtils.getStringFieldInLargeCollectionsPredicate("po.orgUnitCoding", departCodings) + " order by po.sequence"); //灭菌炉 + String start = dayList.get(0); //这里不会出现空指针和空的集合,所以这里可以直接get + String end = dayList.get(dayList.size() - 1); + String betweenSql = dateQueryAdapter.dateAreaSql("sr.endDate", start, end, true); + + Map ownGroupMap = new HashMap(); + Map sterilizerNameMap = new HashMap(); + String sterilerGroupSuffix = "-灭菌总量"; + String sterilizerNameSuffix = "-使用炉次"; + String t1SterilizerNameSql = ""; + if(showsterilizationAmountPerSterilizer){ + t1SterilizerNameSql = "t1.sterilizerName,"; + } + for (String day : dayList) { + Integer tagNameSequence = 0; + + //灭菌总量(按天统计) + SterilizationAreaWorkLoadBean bean1 = new SterilizationAreaWorkLoadBean(); + bean1.setTagNameSequence(++ tagNameSequence); + bean1.setSterilizationEndDate(day); + bean1.setTagName("总灭菌量"); + ownGroupMap.put(day + "_" + "总灭菌量", bean1); + + if(showsterilizationAmountPerSterilizer){ + for (String sterilizerName : sterilizerNameList) { + SterilizationAreaWorkLoadBean sterilizerBean = new SterilizationAreaWorkLoadBean(); + sterilizerBean.setTagNameSequence(++ tagNameSequence); + sterilizerBean.setSterilizationEndDate(day); + sterilizerBean.setTagName(sterilizerName + "-灭菌量"); + ownGroupMap.put(day + "_" + sterilizerName + "_" + "灭菌量", sterilizerBean); + } + } + //各个灭菌炉分组的灭菌总量(按天统计) + for (String name : sterilerGroupList) { + SterilizationAreaWorkLoadBean bean2 = new SterilizationAreaWorkLoadBean(); + bean2.setTagNameSequence(++ tagNameSequence); + bean2.setSterilizationEndDate(day); + bean2.setTagName(name + sterilerGroupSuffix); + ownGroupMap.put(day + "_" + name, bean2); + } + + //各个灭菌炉的总炉次(按天统计) + for (String name : sterilizerNameList) { + SterilizationAreaWorkLoadBean bean3 = new SterilizationAreaWorkLoadBean(); + bean3.setTagNameSequence(++ tagNameSequence); + bean3.setSterilizationEndDate(day); + bean3.setTagName(name + sterilizerNameSuffix); + sterilizerNameMap.put(day + "_" + name, bean3); + } + } + String dateTemp = dateQueryAdapter.dateToVarchar1("sr.endDate"); + String orgUnitCodingSql = SqlUtils.getStringFieldInLargeCollectionsPredicate("sr.orgUnitCoding", departCodings); + String sql = + "select "+ t1SterilizerNameSql +"t1.type,t1.endDate,t1.tagName,sum(t1.amount) amount " + + "from (" + + "select 'ownGroup' type," + dateTemp + " endDate,s.ownGroup tagName,sr.amount amount "; + if(showsterilizationAmountPerSterilizer){ + sql += ",s.name sterilizerName "; + } + sql += " from SterilizationRecord sr join Sterilizer s on s.id=sr.sterilizer_id " + + "where sr.status = '" + + SterilizationRecord.STERILIZATION_STATUS_END + "' and " + + betweenSql + + " and " + + orgUnitCodingSql + + " union all "; + sql += "select 'sterilizerName' type," + dateTemp + " endDate,s.name tagName, 1 amount "; + if(showsterilizationAmountPerSterilizer){ + sql += ",null sterilizerName "; + } + sql += "from SterilizationRecord sr join Sterilizer s on s.id=sr.sterilizer_id " + + " where (sr.status = '" + + SterilizationRecord.STERILIZATION_STATUS_END + "'" + + " or sr.status = '" + + SterilizationRecord.STERILIZATION_STATUS_FAILURE + + "') and " + + betweenSql + + " and " + + orgUnitCodingSql + + ") t1 group by "+ t1SterilizerNameSql +"t1.type,t1.endDate,t1.tagName order by t1.endDate" + ; + ResultSet result = objectDao.executeSql(sql); + try { + while(result.next()){ + String type = StringTools.defaultString(result.getString("type")); + String endDate = StringTools.defaultString(result.getString("endDate")); + String tagName = StringTools.defaultString(result.getString("tagName")); + int amount = result.getInt("amount"); + if (StringTools.equals(type, "ownGroup")) { + SterilizationAreaWorkLoadBean bean1 = ownGroupMap.get(endDate + "_" +"总灭菌量"); + if (bean1 != null) { //正常情况下不会出现null的,为了保险还是处理一下空指针,为空不处理 + bean1.setAmount(bean1.getAmount() + amount); + } + SterilizationAreaWorkLoadBean bean2 = ownGroupMap.get(endDate + "_" +tagName); + if (bean2 != null) { //正常情况下不会出现null的,为了保险还是处理一下空指针,为空不处理 + bean2.setAmount(amount); + } + if(showsterilizationAmountPerSterilizer){ + String sterilizerName = StringTools.defaultString(result.getString("sterilizerName")); + SterilizationAreaWorkLoadBean bean21 = ownGroupMap.get(endDate + "_" + sterilizerName + "_"+"灭菌量"); + if (bean21 != null) { //正常情况下不会出现null的,为了保险还是处理一下空指针,为空不处理 + bean21.setAmount(MathTools.add(amount, bean21.getAmount()).intValue()); + } + } + } else if (StringTools.equals(type, "sterilizerName")) { + SterilizationAreaWorkLoadBean bean3 = sterilizerNameMap.get(endDate + "_" +tagName); + if (bean3 != null) { //正常情况下不会出现null的,为了保险还是处理一下空指针,为空不处理 + bean3.setAmount(amount); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(result); + } + + for (Entry entry : ownGroupMap.entrySet()) { + SterilizationAreaWorkLoadBean value = entry.getValue(); + list.add(value); + } + for (Entry entry : sterilizerNameMap.entrySet()) { + SterilizationAreaWorkLoadBean value = entry.getValue(); + list.add(value); + } + return list; + } + return list; + } } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r35919 -r35920 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 35919) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 35920) @@ -215,7 +215,6 @@ import com.forgon.log.service.LogManager; import com.forgon.security.model.User; import com.forgon.systemsetting.model.HttpOption; -import com.forgon.systemsetting.service.HttpOptionManager; import com.forgon.tools.MapTools; import com.forgon.tools.MathTools; import com.forgon.tools.SqlBuilder; @@ -253,8 +252,6 @@ private DateQueryAdapter dateQueryAdapter; @Autowired private InitDbConnection dbConnection; - @Autowired - private HttpOptionManager httpOptionManager; private static final String DIPOSABLEGOODS = "一次性物品"; @Autowired private GoodsOptionManager goodsOptionManager; @@ -3423,140 +3420,7 @@ @Override public List getSterilizationAreaWorkLoadBeans( String monthSearch, String departCoding, boolean showsterilizationAmountPerSterilizer) { - List list = new ArrayList(); - if (StringTools.isNotBlank(monthSearch) - && StringTools.isNotBlank(departCoding)) { - Set departCodings = SqlUtils.splitStringToSet(departCoding, ","); - List dayList = ForgonDateUtils.getFirstDayToLastDay(monthSearch); - List sterilerGroupList = httpOptionManager.getHttpOptionTextById("sterilerGroup"); //灭菌炉分组 - List sterilizerNameList= objectDao.findByHql("select po.name from " + Sterilizer.class.getSimpleName() + " po where " + SqlUtils.getStringFieldInLargeCollectionsPredicate("po.orgUnitCoding", departCodings) + " order by po.sequence"); //灭菌炉 - String start = dayList.get(0); //这里不会出现空指针和空的集合,所以这里可以直接get - String end = dayList.get(dayList.size() - 1); - String betweenSql = dateQueryAdapter.dateAreaSql("sr.endDate", start, end, true); - - Map ownGroupMap = new HashMap(); - Map sterilizerNameMap = new HashMap(); - String sterilerGroupSuffix = "-灭菌总量"; - String sterilizerNameSuffix = "-使用炉次"; - String t1SterilizerNameSql = ""; - if(showsterilizationAmountPerSterilizer){ - t1SterilizerNameSql = "t1.sterilizerName,"; - } - for (String day : dayList) { - Integer tagNameSequence = 0; - - //灭菌总量(按天统计) - SterilizationAreaWorkLoadBean bean1 = new SterilizationAreaWorkLoadBean(); - bean1.setTagNameSequence(++ tagNameSequence); - bean1.setSterilizationEndDate(day); - bean1.setTagName("总灭菌量"); - ownGroupMap.put(day + "_" + "总灭菌量", bean1); - - if(showsterilizationAmountPerSterilizer){ - for (String sterilizerName : sterilizerNameList) { - SterilizationAreaWorkLoadBean sterilizerBean = new SterilizationAreaWorkLoadBean(); - sterilizerBean.setTagNameSequence(++ tagNameSequence); - sterilizerBean.setSterilizationEndDate(day); - sterilizerBean.setTagName(sterilizerName + "-灭菌量"); - ownGroupMap.put(day + "_" + sterilizerName + "_" + "灭菌量", sterilizerBean); - } - } - //各个灭菌炉分组的灭菌总量(按天统计) - for (String name : sterilerGroupList) { - SterilizationAreaWorkLoadBean bean2 = new SterilizationAreaWorkLoadBean(); - bean2.setTagNameSequence(++ tagNameSequence); - bean2.setSterilizationEndDate(day); - bean2.setTagName(name + sterilerGroupSuffix); - ownGroupMap.put(day + "_" + name, bean2); - } - - //各个灭菌炉的总炉次(按天统计) - for (String name : sterilizerNameList) { - SterilizationAreaWorkLoadBean bean3 = new SterilizationAreaWorkLoadBean(); - bean3.setTagNameSequence(++ tagNameSequence); - bean3.setSterilizationEndDate(day); - bean3.setTagName(name + sterilizerNameSuffix); - sterilizerNameMap.put(day + "_" + name, bean3); - } - } - String dateTemp = dateQueryAdapter.dateToVarchar1("sr.endDate"); - String orgUnitCodingSql = SqlUtils.getStringFieldInLargeCollectionsPredicate("sr.orgUnitCoding", departCodings); - String sql = - "select "+ t1SterilizerNameSql +"t1.type,t1.endDate,t1.tagName,sum(t1.amount) amount " - + "from (" - + "select 'ownGroup' type," + dateTemp + " endDate,s.ownGroup tagName,sr.amount amount "; - if(showsterilizationAmountPerSterilizer){ - sql += ",s.name sterilizerName "; - } - sql += " from SterilizationRecord sr join Sterilizer s on s.id=sr.sterilizer_id " - + "where sr.status = '" - + SterilizationRecord.STERILIZATION_STATUS_END + "' and " - + betweenSql - + " and " - + orgUnitCodingSql - + " union all "; - sql += "select 'sterilizerName' type," + dateTemp + " endDate,s.name tagName, 1 amount "; - if(showsterilizationAmountPerSterilizer){ - sql += ",null sterilizerName "; - } - sql += "from SterilizationRecord sr join Sterilizer s on s.id=sr.sterilizer_id " - + " where (sr.status = '" - + SterilizationRecord.STERILIZATION_STATUS_END + "'" - + " or sr.status = '" - + SterilizationRecord.STERILIZATION_STATUS_FAILURE - + "') and " - + betweenSql - + " and " - + orgUnitCodingSql - + ") t1 group by "+ t1SterilizerNameSql +"t1.type,t1.endDate,t1.tagName order by t1.endDate" - ; - ResultSet result = objectDao.executeSql(sql); - try { - while(result.next()){ - String type = StringTools.defaultString(result.getString("type")); - String endDate = StringTools.defaultString(result.getString("endDate")); - String tagName = StringTools.defaultString(result.getString("tagName")); - int amount = result.getInt("amount"); - if (StringTools.equals(type, "ownGroup")) { - SterilizationAreaWorkLoadBean bean1 = ownGroupMap.get(endDate + "_" +"总灭菌量"); - if (bean1 != null) { //正常情况下不会出现null的,为了保险还是处理一下空指针,为空不处理 - bean1.setAmount(bean1.getAmount() + amount); - } - SterilizationAreaWorkLoadBean bean2 = ownGroupMap.get(endDate + "_" +tagName); - if (bean2 != null) { //正常情况下不会出现null的,为了保险还是处理一下空指针,为空不处理 - bean2.setAmount(amount); - } - if(showsterilizationAmountPerSterilizer){ - String sterilizerName = StringTools.defaultString(result.getString("sterilizerName")); - SterilizationAreaWorkLoadBean bean21 = ownGroupMap.get(endDate + "_" + sterilizerName + "_"+"灭菌量"); - if (bean21 != null) { //正常情况下不会出现null的,为了保险还是处理一下空指针,为空不处理 - bean21.setAmount(MathTools.add(amount, bean21.getAmount()).intValue()); - } - } - } else if (StringTools.equals(type, "sterilizerName")) { - SterilizationAreaWorkLoadBean bean3 = sterilizerNameMap.get(endDate + "_" +tagName); - if (bean3 != null) { //正常情况下不会出现null的,为了保险还是处理一下空指针,为空不处理 - bean3.setAmount(amount); - } - } - } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(result); - } - - for (Entry entry : ownGroupMap.entrySet()) { - SterilizationAreaWorkLoadBean value = entry.getValue(); - list.add(value); - } - for (Entry entry : sterilizerNameMap.entrySet()) { - SterilizationAreaWorkLoadBean value = entry.getValue(); - list.add(value); - } - return list; - } - return list; + return sterilizationWorkloadReportHelper.getSterilizationAreaWorkLoadBeans(monthSearch, departCoding, showsterilizationAmountPerSterilizer); } @Override