Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r35921 -r35922 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 35921) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 35922) @@ -180,6 +180,7 @@ import com.forgon.disinfectsystem.jasperreports.util.QualityMonitoringInspectMonthReportHelper; import com.forgon.disinfectsystem.jasperreports.util.QualityMonitoringReportTaskGroupReportHelper; import com.forgon.disinfectsystem.jasperreports.util.RealTimeBulletinBoardWorkloadHelper; +import com.forgon.disinfectsystem.jasperreports.util.RecycleReportHelper; import com.forgon.disinfectsystem.jasperreports.util.ReportSqlUtil; import com.forgon.disinfectsystem.jasperreports.util.ReturnGoodReportHelper; import com.forgon.disinfectsystem.jasperreports.util.RinserStoveUseCountReportHelper; @@ -367,6 +368,8 @@ private WashReportHelper washReportHelper; @Autowired private TousseSterilizationInspectSituationHelper tousseSterilizationInspectSituationHelper; + @Autowired + private RecycleReportHelper recycleReportHelper; /** * 利用sql语句做数据源创建JasperPrint对象 * @param realPath 报表的jasper文件在服务器本地机子的全路径 @@ -3118,94 +3121,7 @@ public List getRecycleMaterialDetail(String startTime, String endTime, String querySupplyRoom, String applyDepartCoding, String materialName) { - List voList = new ArrayList(); - if(StringUtils.isBlank(startTime) || StringUtils.isBlank(endTime)){ - return voList; - } - String sql = String.format("select po1.depart,po1.recyclingTime,po5.name,po5.specification,(po2.amount * po4.count) " - + "from %s po1, %s po2, %s po3, %s po4, %s po5", RecyclingRecord.class.getSimpleName(),RecyclingItem.class.getSimpleName(), - TousseDefinition.class.getSimpleName(),MaterialInstance.class.getSimpleName(),MaterialDefinition.class.getSimpleName()); - sql += " where po1.id = po2.recyclingRecord_id and po2.tousseDefinitionId = po3.id and po3.id = po4.tousse_id " - + "and po4.materialDefinition_id = po5.id and po1.recyclingTime between " + dateQueryAdapter.dateAdapter(startTime) - + " and " + dateQueryAdapter.dateAdapter(endTime); - sql += SqlUtils.get_InSql_Extra("po1.orgUnitCoding", querySupplyRoom); - if(StringUtils.isNotBlank(applyDepartCoding)){ - sql += " and po1.departCode = '" + applyDepartCoding + "'"; - } - if(StringUtils.isNotBlank(materialName)){ - JSONObject json = CssdUtils.getGoodsNameAndSp(materialName); - String goodsName = json.optString("materialName"); - String sp = json.optString("specification"); - sql += " and po5.name = '" + goodsName + "'"; - if(StringUtils.isBlank(sp)){ - sql += " and (po5.specification is null or po5.specification = '')"; - }else{ - sql += " and po5.specification = '" + sp + "' "; - } - } - String orgunitCode = ""; - LoginUserData user = AcegiHelper.getLoginUser(); - if(user != null){ - orgunitCode = user.getOrgUnitCodingFromSupplyRoomConfig(); - } - // 用户自定义需要查询的器械 - GoodsOption option = goodsOptionManager.getGoodsOption(GoodsOption.MODEL_RECYCLEMATERIALDETAIL, orgunitCode); - if (option != null && StringUtils.isNotBlank(option.getValue())) { - Set ids = SqlUtils.splitStringToSet(option.getValue(), ";", true); - //不能直接使用id来过滤 因为可能有同名 id却不同的数据 - List mds = objectDao.findByHql("select po from " + MaterialDefinition.class.getSimpleName() + " po where " - + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.id", ids)); - if(CollectionUtils.isNotEmpty(mds)){ - StringBuffer mdsSql = new StringBuffer(); - mdsSql.append(" and ("); - for (int i = 0; i < mds.size(); i++) { - MaterialDefinition md = mds.get(i); - String goodsName = md.getName(); - String sp = md.getSpecification(); - mdsSql.append(" po5.name = '"); - mdsSql.append(goodsName); - mdsSql.append("'"); - if(StringUtils.isBlank(sp)){ - mdsSql.append(" and (po5.specification is null or po5.specification = '')"); - }else{ - mdsSql.append(" and po5.specification = '"); - mdsSql.append(sp); - mdsSql.append("' "); - } - if(i < mds.size() - 1){ - mdsSql.append(" or "); - } - } - mdsSql.append(") "); - sql += mdsSql.toString(); - } - } - sql += " order by po1.id asc"; - ResultSet rs = objectDao.executeSql(sql); - try { - int sortNum = 1; - while(rs.next()){ - RecycleMaterialVo vo = new RecycleMaterialVo(); - vo.setDepartment(rs.getString(1)); - Date recyclingTime = rs.getTimestamp(2); - vo.setRecycleDateTime(ForgonDateUtils.safelyFormatDate(recyclingTime, Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); - String name = rs.getString(3); - String sp = rs.getString(4); - if(StringUtils.isNotBlank(sp)){ - name += "[" + sp + "]"; - } - vo.setMaterialName(name); - vo.setAmount(rs.getInt(5)); - vo.setSortNum(sortNum); - voList.add(vo); - sortNum++; - } - } catch (SQLException e) { - e.printStackTrace(); - } finally{ - DatabaseUtil.closeResultSetAndStatement(rs); - } - return voList; + return recycleReportHelper.getRecycleMaterialDetail(startTime, endTime, querySupplyRoom, applyDepartCoding, materialName); } @Override Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/RecycleReportHelper.java =================================================================== diff -u --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/RecycleReportHelper.java (revision 0) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/RecycleReportHelper.java (revision 35922) @@ -0,0 +1,147 @@ +package com.forgon.disinfectsystem.jasperreports.util; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Set; + +import net.sf.json.JSONObject; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import com.forgon.Constants; +import com.forgon.databaseadapter.service.DateQueryAdapter; +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.directory.vo.LoginUserData; +import com.forgon.disinfectsystem.basedatamanager.reportoption.GoodsOptionManager; +import com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; +import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; +import com.forgon.disinfectsystem.entity.basedatamanager.reportoption.GoodsOption; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingItem; +import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; +import com.forgon.disinfectsystem.jasperreports.javabeansource.RecycleMaterialVo; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.util.ForgonDateUtils; +import com.forgon.tools.util.SqlUtils; +/** + * 回收器械材料明细报表 + * + */ +@Component +public class RecycleReportHelper { + @Autowired + private DateQueryAdapter dateQueryAdapter; + @Autowired + private ObjectDao objectDao; + @Autowired + private GoodsOptionManager goodsOptionManager; + /** + * 回收器械材料明细报表 + * @param startTime + * @param endTime + * @param handelDepartCoding + * @param applyDepartCoding + * @param materialName + * @return + */ + public List getRecycleMaterialDetail(String startTime, String endTime, + String querySupplyRoom, String applyDepartCoding, + String materialName) { + List voList = new ArrayList(); + if(StringUtils.isBlank(startTime) || StringUtils.isBlank(endTime)){ + return voList; + } + String sql = String.format("select po1.depart,po1.recyclingTime,po5.name,po5.specification,(po2.amount * po4.count) " + + "from %s po1, %s po2, %s po3, %s po4, %s po5", RecyclingRecord.class.getSimpleName(),RecyclingItem.class.getSimpleName(), + TousseDefinition.class.getSimpleName(),MaterialInstance.class.getSimpleName(),MaterialDefinition.class.getSimpleName()); + sql += " where po1.id = po2.recyclingRecord_id and po2.tousseDefinitionId = po3.id and po3.id = po4.tousse_id " + + "and po4.materialDefinition_id = po5.id and po1.recyclingTime between " + dateQueryAdapter.dateAdapter(startTime) + + " and " + dateQueryAdapter.dateAdapter(endTime); + sql += SqlUtils.get_InSql_Extra("po1.orgUnitCoding", querySupplyRoom); + if(StringUtils.isNotBlank(applyDepartCoding)){ + sql += " and po1.departCode = '" + applyDepartCoding + "'"; + } + if(StringUtils.isNotBlank(materialName)){ + JSONObject json = CssdUtils.getGoodsNameAndSp(materialName); + String goodsName = json.optString("materialName"); + String sp = json.optString("specification"); + sql += " and po5.name = '" + goodsName + "'"; + if(StringUtils.isBlank(sp)){ + sql += " and (po5.specification is null or po5.specification = '')"; + }else{ + sql += " and po5.specification = '" + sp + "' "; + } + } + String orgunitCode = ""; + LoginUserData user = AcegiHelper.getLoginUser(); + if(user != null){ + orgunitCode = user.getOrgUnitCodingFromSupplyRoomConfig(); + } + // 用户自定义需要查询的器械 + GoodsOption option = goodsOptionManager.getGoodsOption(GoodsOption.MODEL_RECYCLEMATERIALDETAIL, orgunitCode); + if (option != null && StringUtils.isNotBlank(option.getValue())) { + Set ids = SqlUtils.splitStringToSet(option.getValue(), ";", true); + //不能直接使用id来过滤 因为可能有同名 id却不同的数据 + List mds = objectDao.findByHql("select po from " + MaterialDefinition.class.getSimpleName() + " po where " + + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.id", ids)); + if(CollectionUtils.isNotEmpty(mds)){ + StringBuffer mdsSql = new StringBuffer(); + mdsSql.append(" and ("); + for (int i = 0; i < mds.size(); i++) { + MaterialDefinition md = mds.get(i); + String goodsName = md.getName(); + String sp = md.getSpecification(); + mdsSql.append(" po5.name = '"); + mdsSql.append(goodsName); + mdsSql.append("'"); + if(StringUtils.isBlank(sp)){ + mdsSql.append(" and (po5.specification is null or po5.specification = '')"); + }else{ + mdsSql.append(" and po5.specification = '"); + mdsSql.append(sp); + mdsSql.append("' "); + } + if(i < mds.size() - 1){ + mdsSql.append(" or "); + } + } + mdsSql.append(") "); + sql += mdsSql.toString(); + } + } + sql += " order by po1.id asc"; + ResultSet rs = objectDao.executeSql(sql); + try { + int sortNum = 1; + while(rs.next()){ + RecycleMaterialVo vo = new RecycleMaterialVo(); + vo.setDepartment(rs.getString(1)); + Date recyclingTime = rs.getTimestamp(2); + vo.setRecycleDateTime(ForgonDateUtils.safelyFormatDate(recyclingTime, Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); + String name = rs.getString(3); + String sp = rs.getString(4); + if(StringUtils.isNotBlank(sp)){ + name += "[" + sp + "]"; + } + vo.setMaterialName(name); + vo.setAmount(rs.getInt(5)); + vo.setSortNum(sortNum); + voList.add(vo); + sortNum++; + } + } catch (SQLException e) { + e.printStackTrace(); + } finally{ + DatabaseUtil.closeResultSetAndStatement(rs); + } + return voList; + } +}