Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/PackingReportHelper.java =================================================================== diff -u -r35898 -r35903 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/PackingReportHelper.java (.../PackingReportHelper.java) (revision 35898) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/PackingReportHelper.java (.../PackingReportHelper.java) (revision 35903) @@ -7,27 +7,45 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Map.Entry; + import net.sf.json.JSONObject; + +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang.StringUtils; 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.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; +import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.packing.PackingRecord; import com.forgon.disinfectsystem.jasperreports.javabeansource.FirstColumnVo; import com.forgon.disinfectsystem.jasperreports.javabeansource.PackingRecordReportVo; +import com.forgon.disinfectsystem.jasperreports.javabeansource.WaitPackingTaskReportBean; +import com.forgon.disinfectsystem.jasperreports.javabeansource.WaitPackingTaskReportBeanChild; import com.forgon.disinfectsystem.packing.service.PackingManager; import com.forgon.tools.MathTools; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.string.StringTools; /** * 装配相关的一些报表 - * + * 装配记录表 + * 待装配任务工作表 */ @Component public class PackingReportHelper { @Autowired private PackingManager packingManager; @Autowired private ObjectDao objectDao; + @Autowired + private SupplyRoomConfigManager supplyRoomConfigManager; + @Autowired + private DateQueryAdapter dateQueryAdapter; /** * 获取装配记录表数据 用于导出 * @param paramObj 参数 @@ -100,4 +118,132 @@ } return firstColumnVos; } + /** + * 获取待装配任务工作表的数据. + * @param startTime 开始时间 + * @param endTime 结束时间 + * @param departmentCode 处理科室的科室编码 + * @param taskGroup 任务组 + * @return + */ + public List getWaitPackingTaskReportData( + String startTime, String endTime, String departmentCode, + String taskGroup) { + List list = new ArrayList(); //WaitPackingTaskReportBean的集合作为报表的数据集合 + if(StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime) + && StringUtils.isNotBlank(departmentCode)){ + SupplyRoomConfig systemParamsObj = supplyRoomConfigManager.getSystemParamsObj(); + //外来器械包默认处理科室及任务组 + String defalutTaskGroup = null; + JSONObject foreignTousseHandleDepartAndTaskGroupJsonobject = systemParamsObj.getOneForeignTousseHandleDepartAndTaskGroupByDepartCode(AcegiHelper.getCurrentOrgUnitCode()); + if(foreignTousseHandleDepartAndTaskGroupJsonobject != null){ + defalutTaskGroup = foreignTousseHandleDepartAndTaskGroupJsonobject.optString("taskGroup"); + } + String customTousseDefaultTaskGroup = systemParamsObj.getCustomTousseDefaultTaskGroup(); //自定义器械包的默认装配组 + + //1、按装配任务的开始时间过滤 + String betweenSql = ""; + if (StringTools.isNotBlank(startTime) && StringTools.isNotBlank(endTime)) { + betweenSql = " and " + dateQueryAdapter.dateAreaSql("pt.startTime", startTime, endTime); + } + + //2、按任务组过滤(注意:外来器械包和自定义器械包要取科室供应室配置的) + String taskGroupSql = ""; + if (StringTools.isNotBlank(taskGroup)) { + taskGroupSql = String.format(" and cht.taskGroup='%s' ", taskGroup); + } + + String sql = String.format("select td.tousseType tousseType,td.name tousseName,td.id tousseId,cht.taskGroup taskGroup,pt.unPackAmount unPackAmount from PackingTask pt join TousseDefinition td on td.id=pt.tousseDefinition_id " + + "join CssdHandleTousses cht on cht.tousseDefinitionId=td.id and pt.orgUnitCoding=cht.orgUnitCode " + + "where td.tousseType not in('%s','%s','%s') and pt.unPackAmount>0 " + + "and pt.orgUnitCoding='%s' %s %s", + TousseDefinition.PACKAGE_TYPE_FOREIGN, TousseDefinition.PACKAGE_TYPE_SPLIT, TousseDefinition.PACKAGE_TYPE_CUSTOM, departmentCode, taskGroupSql, betweenSql); + + if (StringTools.isBlank(taskGroup) || StringTools.equals(taskGroup, defalutTaskGroup)) { + sql += String.format( + " union all " + + "select td.tousseType tousseType,td.name tousseName,td.id tousseId,'%s' taskGroup,pt.unPackAmount unPackAmount from PackingTask pt join TousseDefinition td on td.id=pt.tousseDefinition_id " + + "where td.tousseType in('%s','%s') and pt.unPackAmount>0 and pt.orgUnitCoding='%s' %s", + defalutTaskGroup, TousseDefinition.PACKAGE_TYPE_FOREIGN, TousseDefinition.PACKAGE_TYPE_SPLIT, departmentCode, betweenSql); + } + + if (StringTools.isBlank(taskGroup) || StringTools.equals(taskGroup, customTousseDefaultTaskGroup)) { + sql += String.format( + " union all " + + "select td.tousseType tousseType,td.name tousseName,td.id tousseId,'%s' taskGroup,pt.unPackAmount unPackAmount from PackingTask pt join TousseDefinition td on td.id=pt.tousseDefinition_id " + + "where td.tousseType='%s' and pt.unPackAmount>0 and pt.orgUnitCoding='%s' %s", + customTousseDefaultTaskGroup, TousseDefinition.PACKAGE_TYPE_CUSTOM, departmentCode, betweenSql); + } + + Map> map = new HashMap>(); //“任务组”和“器械包类型-器械包名称和数量的Map”的Map + ResultSet rs = objectDao.executeSql(sql); + try { + while(rs.next()){ + String tousseType = StringTools.defaultString(rs.getString("tousseType")); + String tousseName = StringTools.defaultString(rs.getString("tousseName")); + String taskGroup2 = StringTools.defaultString(rs.getString("taskGroup")); + int unPackAmount = rs.getInt("unPackAmount"); + + HashMap tousseNameToAmount = map.get(taskGroup2); + if (tousseNameToAmount == null) { + tousseNameToAmount = new HashMap(); + map.put(taskGroup2, tousseNameToAmount); + } + + String tousseTypeAndTousseName = String.format("%s-%s", tousseType, tousseName); + Integer amount = MapUtils.getInteger(tousseNameToAmount, tousseTypeAndTousseName, 0); + tousseNameToAmount.put(tousseTypeAndTousseName, amount + unPackAmount); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + for(Entry> entry : map.entrySet()){ + String taskGroupName = entry.getKey(); + HashMap tousseNameToAmount = entry.getValue(); + int size = tousseNameToAmount.size(); + + List children = new ArrayList(); + if (size > 0) { + children.add(new WaitPackingTaskReportBeanChild()); + } + + Integer totalUnPackAmount = 0; + for(Entry entry2 : tousseNameToAmount.entrySet()){ + String tousseTypeAndTousseName = entry2.getKey(); + WaitPackingTaskReportBeanChild child = children.get(children.size() - 1); + String tousseName = tousseTypeAndTousseName.substring(tousseTypeAndTousseName.indexOf("-") + 1); + Integer unPackAmount = entry2.getValue(); + totalUnPackAmount += unPackAmount; + + if (StringTools.isBlank(child.getTousseName1())) { + child.setTousseName1(tousseName); + child.setAmount1(unPackAmount); + child.setAmount1Str(unPackAmount.toString()); + } else if (StringTools.isBlank(child.getTousseName2())) { + child.setTousseName2(tousseName); + child.setAmount2(unPackAmount); + child.setAmount2Str(unPackAmount.toString()); + } else if (StringTools.isBlank(child.getTousseName3())) { + child.setTousseName3(tousseName); + child.setAmount3(unPackAmount); + child.setAmount3Str(unPackAmount.toString()); + } else { + WaitPackingTaskReportBeanChild newChild = new WaitPackingTaskReportBeanChild(); + newChild.setTousseName1(tousseName); + newChild.setAmount1(unPackAmount); + newChild.setAmount1Str(unPackAmount.toString()); + children.add(newChild); + } + } + + WaitPackingTaskReportBean bean = new WaitPackingTaskReportBean(); + bean.setTaskGroup(String.format("%s(总数-%s)", taskGroupName, totalUnPackAmount)); + bean.setChildren(children); + list.add(bean); + } + } + return list; + } } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r35902 -r35903 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 35902) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 35903) @@ -1811,123 +1811,7 @@ public List getWaitPackingTaskReportData( String startTime, String endTime, String departmentCode, String taskGroup) { - List list = new ArrayList(); //WaitPackingTaskReportBean的集合作为报表的数据集合 - if(StringUtils.isNotBlank(startTime) && StringUtils.isNotBlank(endTime) - && StringUtils.isNotBlank(departmentCode)){ - SupplyRoomConfig systemParamsObj = supplyRoomConfigManager.getSystemParamsObj(); - //外来器械包默认处理科室及任务组 - String defalutTaskGroup = null; - JSONObject foreignTousseHandleDepartAndTaskGroupJsonobject = systemParamsObj.getOneForeignTousseHandleDepartAndTaskGroupByDepartCode(AcegiHelper.getCurrentOrgUnitCode()); - if(foreignTousseHandleDepartAndTaskGroupJsonobject != null){ - defalutTaskGroup = foreignTousseHandleDepartAndTaskGroupJsonobject.optString("taskGroup"); - } - String customTousseDefaultTaskGroup = systemParamsObj.getCustomTousseDefaultTaskGroup(); //自定义器械包的默认装配组 - - //1、按装配任务的开始时间过滤 - String betweenSql = ""; - if (StringTools.isNotBlank(startTime) && StringTools.isNotBlank(endTime)) { - betweenSql = " and " + dateQueryAdapter.dateAreaSql("pt.startTime", startTime, endTime); - } - - //2、按任务组过滤(注意:外来器械包和自定义器械包要取科室供应室配置的) - String taskGroupSql = ""; - if (StringTools.isNotBlank(taskGroup)) { - taskGroupSql = String.format(" and cht.taskGroup='%s' ", taskGroup); - } - - String sql = String.format("select td.tousseType tousseType,td.name tousseName,td.id tousseId,cht.taskGroup taskGroup,pt.unPackAmount unPackAmount from PackingTask pt join TousseDefinition td on td.id=pt.tousseDefinition_id " - + "join CssdHandleTousses cht on cht.tousseDefinitionId=td.id and pt.orgUnitCoding=cht.orgUnitCode " - + "where td.tousseType not in('%s','%s','%s') and pt.unPackAmount>0 " - + "and pt.orgUnitCoding='%s' %s %s", - TousseDefinition.PACKAGE_TYPE_FOREIGN, TousseDefinition.PACKAGE_TYPE_SPLIT, TousseDefinition.PACKAGE_TYPE_CUSTOM, departmentCode, taskGroupSql, betweenSql); - - if (StringTools.isBlank(taskGroup) || StringTools.equals(taskGroup, defalutTaskGroup)) { - sql += String.format( - " union all " - + "select td.tousseType tousseType,td.name tousseName,td.id tousseId,'%s' taskGroup,pt.unPackAmount unPackAmount from PackingTask pt join TousseDefinition td on td.id=pt.tousseDefinition_id " - + "where td.tousseType in('%s','%s') and pt.unPackAmount>0 and pt.orgUnitCoding='%s' %s", - defalutTaskGroup, TousseDefinition.PACKAGE_TYPE_FOREIGN, TousseDefinition.PACKAGE_TYPE_SPLIT, departmentCode, betweenSql); - } - - if (StringTools.isBlank(taskGroup) || StringTools.equals(taskGroup, customTousseDefaultTaskGroup)) { - sql += String.format( - " union all " - + "select td.tousseType tousseType,td.name tousseName,td.id tousseId,'%s' taskGroup,pt.unPackAmount unPackAmount from PackingTask pt join TousseDefinition td on td.id=pt.tousseDefinition_id " - + "where td.tousseType='%s' and pt.unPackAmount>0 and pt.orgUnitCoding='%s' %s", - customTousseDefaultTaskGroup, TousseDefinition.PACKAGE_TYPE_CUSTOM, departmentCode, betweenSql); - } - - Map> map = new HashMap>(); //“任务组”和“器械包类型-器械包名称和数量的Map”的Map - ResultSet rs = objectDao.executeSql(sql); - try { - while(rs.next()){ - String tousseType = StringTools.defaultString(rs.getString("tousseType")); - String tousseName = StringTools.defaultString(rs.getString("tousseName")); - long tousseId = rs.getLong("tousseId"); - String taskGroup2 = StringTools.defaultString(rs.getString("taskGroup")); - int unPackAmount = rs.getInt("unPackAmount"); - - HashMap tousseNameToAmount = map.get(taskGroup2); - if (tousseNameToAmount == null) { - tousseNameToAmount = new HashMap(); - map.put(taskGroup2, tousseNameToAmount); - } - - String tousseTypeAndTousseName = String.format("%s-%s", tousseType, tousseName); - Integer amount = MapUtils.getInteger(tousseNameToAmount, tousseTypeAndTousseName, 0); - tousseNameToAmount.put(tousseTypeAndTousseName, amount + unPackAmount); - } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(rs); - } - for(Entry> entry : map.entrySet()){ - String taskGroupName = entry.getKey(); - HashMap tousseNameToAmount = entry.getValue(); - int size = tousseNameToAmount.size(); - - List children = new ArrayList(); - if (size > 0) { - children.add(new WaitPackingTaskReportBeanChild()); - } - - Integer totalUnPackAmount = 0; - for(Entry entry2 : tousseNameToAmount.entrySet()){ - String tousseTypeAndTousseName = entry2.getKey(); - WaitPackingTaskReportBeanChild child = children.get(children.size() - 1); - String tousseName = tousseTypeAndTousseName.substring(tousseTypeAndTousseName.indexOf("-") + 1); - Integer unPackAmount = entry2.getValue(); - totalUnPackAmount += unPackAmount; - - if (StringTools.isBlank(child.getTousseName1())) { - child.setTousseName1(tousseName); - child.setAmount1(unPackAmount); - child.setAmount1Str(unPackAmount.toString()); - } else if (StringTools.isBlank(child.getTousseName2())) { - child.setTousseName2(tousseName); - child.setAmount2(unPackAmount); - child.setAmount2Str(unPackAmount.toString()); - } else if (StringTools.isBlank(child.getTousseName3())) { - child.setTousseName3(tousseName); - child.setAmount3(unPackAmount); - child.setAmount3Str(unPackAmount.toString()); - } else { - WaitPackingTaskReportBeanChild newChild = new WaitPackingTaskReportBeanChild(); - newChild.setTousseName1(tousseName); - newChild.setAmount1(unPackAmount); - newChild.setAmount1Str(unPackAmount.toString()); - children.add(newChild); - } - } - - WaitPackingTaskReportBean bean = new WaitPackingTaskReportBean(); - bean.setTaskGroup(String.format("%s(总数-%s)", taskGroupName, totalUnPackAmount)); - bean.setChildren(children); - list.add(bean); - } - } - return list; + return packingReportHelper.getWaitPackingTaskReportData(startTime, endTime, departmentCode, taskGroup); } @Override