Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/TousseDeliverStatisticsHelper.java =================================================================== diff -u --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/TousseDeliverStatisticsHelper.java (revision 0) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/TousseDeliverStatisticsHelper.java (revision 37839) @@ -0,0 +1,156 @@ +package com.forgon.disinfectsystem.jasperreports.util; + +import java.sql.ResultSet; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; +import java.util.Date; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import net.sf.json.JSONArray; +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.databaseadapter.service.DateQueryAdapter; +import com.forgon.disinfectsystem.basedatamanager.reportoption.GoodsOptionManager; +import com.forgon.disinfectsystem.entity.basedatamanager.reportoption.GoodsOption; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoiceDepartment; +import com.forgon.disinfectsystem.jasperreports.javabeansource.SupplyRoomQualityQuota; +import com.forgon.disinfectsystem.jasperreports.javabeansource.TousseDeliverStatistics; +import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.SqlUtils; + +@Component +public class TousseDeliverStatisticsHelper { + @Autowired + private ObjectDao objectDao; + @Autowired + private DateQueryAdapter dateQueryAdapter; + @Autowired + private GoodsOptionManager goodsOptionManager; + /** + * 器械包发货统计报表 + * @param map + */ + public List getTousseDeliverStatisticsParam(Map map){ + List vos = new ArrayList(); + String startDay = StrutsParamUtils.getPraramValue("startDay", ""); + String endDay = StrutsParamUtils.getPraramValue("endDay", ""); + String departCoding = StrutsParamUtils.getPraramValue("departCoding", ""); + Set settleAccountsDepartCodingSet = SqlUtils.splitStringToSet(StrutsParamUtils.getPraramValue("settleAccountsDepartCoding", ""), ","); + Set tousseTypeSet = SqlUtils.splitStringToSet(StrutsParamUtils.getPraramValue("tousseType", ""), ","); + String departGroupStr = StrutsParamUtils.getPraramValue( + "departGroup", null); + Set departCodingSet = null; + if(StringUtils.isNotBlank(departGroupStr)){ + departCodingSet = new HashSet(); + Set departGroupIds = null; + if(departGroupStr.contains(",")){ + departGroupIds = SqlUtils.splitStringToSet(departGroupStr, ","); + }else{ + departGroupIds = new HashSet(); + departGroupIds.add(departGroupStr); + } + List invoiceDepartments = objectDao.findByHql("select po from " + InvoiceDepartment.class.getSimpleName() + " po where " + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("po.id", departGroupIds)); + for (InvoiceDepartment invoiceDepartment : invoiceDepartments) { + if("全部".equals(invoiceDepartment)){ + break; + } + Set thisDepartCodings = SqlUtils.splitStringToSet(invoiceDepartment.getDepartCodes(), ";"); + departCodingSet.addAll(thisDepartCodings); + } + } + String title = "器械包发货统计报表"; + if (StringUtils.isNotBlank(startDay) && StringUtils.isNotBlank(endDay)) { + title += "(" + startDay + "至" + endDay + ")"; + } + map.put("title", title); + if (StringUtils.isNotBlank(endDay)) { + endDay += " 23:59:59"; + } else { + endDay = new SimpleDateFormat("yyyy-MM-dd").format(new Date()) + " 23:59:59"; + } + if (StringUtils.isBlank(startDay)) { + startDay = new SimpleDateFormat("yyyy-MM-dd").format(new Date()); + } + GoodsOption option = goodsOptionManager.getGoodsOption(GoodsOption.MODEL_TOUSSEDELIVER, departCoding); + Collection goodsNames = new ArrayList(); + if (option != null && StringUtils.isNotBlank(option.getValue())) { + String[] goodsNameArray = option.getValue().split(";"); + for (int i = 0; i < goodsNameArray.length; i++) { + goodsNames.add(goodsNameArray[i]); + } + } + String sql = "select depart, amount, goodsName,sequence from(select i.settleAccountsDepart " + + "depart, count(*) amount, ti.tousseName goodsName,t.sequence " + + "from TousseInstance ti " + + "inner join TousseDefinition td on td.id=ti.tousseDefinition_Id " + + "inner join Invoice i on i.id=ti.invoice_id " + + "left join (select sequence,orgUnitCoding from SupplyRoomConfig src where src.supplyRoomType=3 and src.orgUnitCoding not in (select orgUnitCoding from OrgUnit where status =0)) t on i.settleAccountsDepartCoding=t.orgUnitCoding " + + "where 1=1 " + + " and i.sendTime between " + + dateQueryAdapter.dateAdapter(startDay +" 00:00:00") + " and " + dateQueryAdapter.dateAdapter(endDay) + + SqlUtils.getInStringListSql("i.settleAccountsDepartCoding", departCodingSet) + + SqlUtils.getInStringListSql("i.settleAccountsDepartCoding", settleAccountsDepartCodingSet) + + SqlUtils.getInStringListSql("td.tousseType", tousseTypeSet) + + SqlUtils.get_InSql_Extra("i.orgUnitCoding", departCoding) + +" group by i.settleAccountsDepart, ti.tousseName,t.sequence )tempTable " + + " where " + SqlUtils.getStringFieldInLargeCollectionsPredicate("goodsName", goodsNames, " 1=1 ") + + " order by case when tempTable.sequence is null then 99999 else tempTable.sequence end asc "; + ResultSet rs = null; + Set goodsNameArr = new HashSet(); + try { + rs = objectDao.executeSql(sql); + while (rs.next()) { + TousseDeliverStatistics vo = new TousseDeliverStatistics(); + vo.setDepart(rs.getString("depart")); + vo.setAmount(rs.getInt("amount")); + String goodsName = rs.getString("goodsName"); + vo.setGoodsName(goodsName); + vo.setSequence(rs.getInt("sequence")); + goodsNameArr.add(goodsName); + vos.add(vo); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + JSONArray arr = sortGoodsNameArr(goodsNameArr); + map.put("columnNameArr", arr); + return vos; + } + private JSONArray sortGoodsNameArr(Set goodsNameSet){ + JSONArray arr = new JSONArray(); + if(CollectionUtils.isEmpty(goodsNameSet)){ + return arr; + } + for (String name : goodsNameSet) { + arr.add(name); + } + arr.sort(new Comparator() { + @Override + public int compare(String o1Depart, String o2Depart) { + if(StringUtils.isBlank(o1Depart)){ + o1Depart = ""; + } + if(StringUtils.isBlank(o2Depart)){ + o2Depart = ""; + } + return o1Depart.compareTo(o2Depart); + } + }); + return arr; + } +} Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java =================================================================== diff -u -r37823 -r37839 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 37823) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 37839) @@ -108,6 +108,7 @@ import com.forgon.disinfectsystem.jasperreports.util.LineGraphReportOfWorkloadByTimePeriodHelper; import com.forgon.disinfectsystem.jasperreports.util.MonthReportHelper; import com.forgon.disinfectsystem.jasperreports.util.OperationTousseOperationRepartHelper; +import com.forgon.disinfectsystem.jasperreports.util.TousseDeliverStatisticsHelper; import com.forgon.disinfectsystem.jasperreports.util.TousseTournoverDaysStatisticsReportHelper; import com.forgon.disinfectsystem.jasperreports.util.UrgentNeedGoodsProcessingCycleHelper; import com.forgon.disinfectsystem.jasperreports.util.WorkloadAndIncomeStatisticsReportHelper; @@ -179,6 +180,11 @@ private BorrowingReportReportHelper borrowingReportReportHelper; + private TousseDeliverStatisticsHelper tousseDeliverStatisticsHelper; + public void setTousseDeliverStatisticsHelper( + TousseDeliverStatisticsHelper tousseDeliverStatisticsHelper) { + this.tousseDeliverStatisticsHelper = tousseDeliverStatisticsHelper; + } private OperationTousseOperationRepartHelper operationTousseOperationRepartHelper; public void setOperationTousseOperationRepartHelper( OperationTousseOperationRepartHelper operationTousseOperationRepartHelper) { @@ -1980,6 +1986,8 @@ return borrowingReportReportHelper.getBorrowingRecord(startDay, endDay, goodsName, deptName); } + }else if(reportName.equals("tousseDeliverStatistics")){ + return tousseDeliverStatisticsHelper.getTousseDeliverStatisticsParam(parametMap); }else if(reportName.equals("foreignTousseApplicationReport")){ String startDay = StrutsParamUtils.getPraramValue("startDay", ""); String endDay = StrutsParamUtils.getPraramValue("endDay", "");