Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r35905 -r35908 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 35905) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 35908) @@ -196,6 +196,7 @@ import com.forgon.disinfectsystem.jasperreports.util.UrgentNeedGoodsProcessingCycleHelper; import com.forgon.disinfectsystem.jasperreports.util.UseRecordEnterReportHelper; import com.forgon.disinfectsystem.jasperreports.util.UseRecordItemsReportHelper; +import com.forgon.disinfectsystem.jasperreports.util.WashReportHelper; import com.forgon.disinfectsystem.jasperreports.util.WashWorkloadReprotHelper; import com.forgon.disinfectsystem.jasperreports.util.YearWorkloadReportHelper; import com.forgon.disinfectsystem.jasperreports.util.YearWorkloadReportSpecialHelper; @@ -370,6 +371,8 @@ private PackingReportHelper packingReportHelper; @Autowired private ReturnGoodReportHelper returnGoodReportHelper; + @Autowired + private WashReportHelper washReportHelper; /** * 利用sql语句做数据源创建JasperPrint对象 * @param realPath 报表的jasper文件在服务器本地机子的全路径 @@ -5161,64 +5164,7 @@ @Override public List getCleaningAreaWorkloadForUserData( String monthSearch, String departmentCode) { - List list = new ArrayList(); - if (StringTools.isNotBlank(monthSearch) && StringTools.isNotBlank(departmentCode)) { - /** - * 获取当月的时间段 - */ - List dayList = ForgonDateUtils.getFirstDayToLastDay(monthSearch); - String start = dayList.get(0); //这里不会出现空指针和空的集合,所以这里可以直接get - String end = dayList.get(dayList.size() - 1); - String betweenSql = dateQueryAdapter.dateAreaSql("wr.endDate", start, end, true); - - String sql = String.format("select temp.personInChargeCode,min(temp.personInCharge) personInCharge,temp.type,sum(temp.amount) amount " - + "from (" - + "select case when cb.personInChargeCode is null or cb.personInChargeCode='' then wr.operatorCode else cb.personInChargeCode end personInChargeCode," - + "case when cb.personInCharge is null or cb.personInCharge='' then wr.operator else cb.personInCharge end personInCharge," - + "md.type,(ci.amount-case when numOfUnwashedStops is null then 0 else numOfUnwashedStops end)*mi.count amount " - + "from WashAndDisinfectRecord wr " - + "join ClassifyBasket_WashRecord cw on cw.washAndDisinfectRecord_ID=wr.id " - + "join ClassifyBasket cb on cb.id=cw.ClassifyBasket_ID " - + "join ClassifiedItem ci on ci.classifybasket_id=cb.id " - + "join TousseDefinition td on td.id=ci.toussedefinition_id " - + "join MaterialInstance mi on mi.tousse_id=td.id " - + "join MaterialDefinition md on md.id=mi.materialDefinition_id " - + "where wr.orgUnitCoding='%s' and %s " - + "union all " - + "select case when cb.personInChargeCode is null or cb.personInChargeCode='' then wr.operatorCode else cb.personInChargeCode end personInChargeCode," - + "case when cb.personInCharge is null or cb.personInCharge='' then wr.operator else cb.personInCharge end personInCharge," - + "md.type,(ci.amount-case when numOfUnwashedStops is null then 0 else numOfUnwashedStops end) amount " - + "from WashAndDisinfectRecord wr " - + "join ClassifyBasket_WashRecord cw on cw.washAndDisinfectRecord_ID=wr.id " - + "join ClassifyBasket cb on cb.id=cw.ClassifyBasket_ID " - + "join ClassifiedItem ci on ci.classifybasket_id=cb.id " - + "join MaterialDefinition md on md.id=ci.materialDefinition_id " - + "where wr.orgUnitCoding='%s' and %s" - + ") temp group by temp.personInChargeCode,temp.type" - , departmentCode, betweenSql, departmentCode, betweenSql); - - ResultSet rs = objectDao.executeSql(sql); - try { - while (rs.next()) { - String personInChargeCode = StringTools.defaultString(rs.getString("personInChargeCode")); - String personInCharge = StringTools.defaultString(rs.getString("personInCharge")); - String type = StringTools.defaultString(rs.getString("type")); - int amount = rs.getInt("amount"); - - CleaningAreaWorkloadForUser vo = new CleaningAreaWorkloadForUser(); - vo.setPersonInCharge(personInCharge); - vo.setPersonInChargeCode(personInChargeCode); - vo.setType(type); - vo.setAmount(amount); - list.add(vo); - } - } catch (Exception e) { - e.printStackTrace(); - } finally { - DatabaseUtil.closeResultSetAndStatement(rs); - } - } - return list; + return washReportHelper.getCleaningAreaWorkloadForUserData(monthSearch, departmentCode); } @Override Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/WashReportHelper.java =================================================================== diff -u --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/WashReportHelper.java (revision 0) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/WashReportHelper.java (revision 35908) @@ -0,0 +1,92 @@ +package com.forgon.disinfectsystem.jasperreports.util; + +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import com.forgon.databaseadapter.service.DateQueryAdapter; +import com.forgon.disinfectsystem.jasperreports.javabeansource.CleaningAreaWorkloadForUser; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.ForgonDateUtils; + +/** + * 清洗模块的一些报表 + * 清洗区人员工作量统计报表 + */ +@Component +public class WashReportHelper { + @Autowired + private DateQueryAdapter dateQueryAdapter; + @Autowired + private ObjectDao objectDao; + /** + * 获取清洗区人员工作量统计报表的数据 + * @param monthSearch 查询的月份 + * @param departmentCode 供应室的科室编码 + * @return + */ + public List getCleaningAreaWorkloadForUserData( + String monthSearch, String departmentCode) { + List list = new ArrayList(); + if (StringTools.isNotBlank(monthSearch) && StringTools.isNotBlank(departmentCode)) { + /** + * 获取当月的时间段 + */ + List dayList = ForgonDateUtils.getFirstDayToLastDay(monthSearch); + String start = dayList.get(0); //这里不会出现空指针和空的集合,所以这里可以直接get + String end = dayList.get(dayList.size() - 1); + String betweenSql = dateQueryAdapter.dateAreaSql("wr.endDate", start, end, true); + + String sql = String.format("select temp.personInChargeCode,min(temp.personInCharge) personInCharge,temp.type,sum(temp.amount) amount " + + "from (" + + "select case when cb.personInChargeCode is null or cb.personInChargeCode='' then wr.operatorCode else cb.personInChargeCode end personInChargeCode," + + "case when cb.personInCharge is null or cb.personInCharge='' then wr.operator else cb.personInCharge end personInCharge," + + "md.type,(ci.amount-case when numOfUnwashedStops is null then 0 else numOfUnwashedStops end)*mi.count amount " + + "from WashAndDisinfectRecord wr " + + "join ClassifyBasket_WashRecord cw on cw.washAndDisinfectRecord_ID=wr.id " + + "join ClassifyBasket cb on cb.id=cw.ClassifyBasket_ID " + + "join ClassifiedItem ci on ci.classifybasket_id=cb.id " + + "join TousseDefinition td on td.id=ci.toussedefinition_id " + + "join MaterialInstance mi on mi.tousse_id=td.id " + + "join MaterialDefinition md on md.id=mi.materialDefinition_id " + + "where wr.orgUnitCoding='%s' and %s " + + "union all " + + "select case when cb.personInChargeCode is null or cb.personInChargeCode='' then wr.operatorCode else cb.personInChargeCode end personInChargeCode," + + "case when cb.personInCharge is null or cb.personInCharge='' then wr.operator else cb.personInCharge end personInCharge," + + "md.type,(ci.amount-case when numOfUnwashedStops is null then 0 else numOfUnwashedStops end) amount " + + "from WashAndDisinfectRecord wr " + + "join ClassifyBasket_WashRecord cw on cw.washAndDisinfectRecord_ID=wr.id " + + "join ClassifyBasket cb on cb.id=cw.ClassifyBasket_ID " + + "join ClassifiedItem ci on ci.classifybasket_id=cb.id " + + "join MaterialDefinition md on md.id=ci.materialDefinition_id " + + "where wr.orgUnitCoding='%s' and %s" + + ") temp group by temp.personInChargeCode,temp.type" + , departmentCode, betweenSql, departmentCode, betweenSql); + + ResultSet rs = objectDao.executeSql(sql); + try { + while (rs.next()) { + String personInChargeCode = StringTools.defaultString(rs.getString("personInChargeCode")); + String personInCharge = StringTools.defaultString(rs.getString("personInCharge")); + String type = StringTools.defaultString(rs.getString("type")); + int amount = rs.getInt("amount"); + + CleaningAreaWorkloadForUser vo = new CleaningAreaWorkloadForUser(); + vo.setPersonInCharge(personInCharge); + vo.setPersonInChargeCode(personInChargeCode); + vo.setType(type); + vo.setAmount(amount); + list.add(vo); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + } + return list; + } +}