Index: ssts-web/src/main/webapp/jasperRtp/tousseTournoverDaysStatisticsReport_child.jasper =================================================================== diff -u Binary files differ Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/TousseTournoverDaysStatisticsReportHelper.java =================================================================== diff -u -r36366 -r37005 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/TousseTournoverDaysStatisticsReportHelper.java (.../TousseTournoverDaysStatisticsReportHelper.java) (revision 36366) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/util/TousseTournoverDaysStatisticsReportHelper.java (.../TousseTournoverDaysStatisticsReportHelper.java) (revision 37005) @@ -2,6 +2,7 @@ import java.sql.ResultSet; import java.sql.SQLException; +import java.text.DecimalFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -21,9 +22,9 @@ import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; +import com.forgon.disinfectsystem.jasperreports.javabeansource.FirstColumnVo; import com.forgon.disinfectsystem.jasperreports.javabeansource.TousseTournoverDaysStatisticsReportVo; import com.forgon.systemsetting.model.HttpOption; -import com.forgon.tools.MathTools; import com.forgon.tools.util.SqlUtils; /** @@ -44,44 +45,38 @@ * @param parametMap 报表参数 * @return */ - public List getTousseTournoverDaysStatisticsReportData(Map requestParameters, Map parametMap){ - String startYear = requestParameters.get("startYear"); - String endYear = requestParameters.get("endYear"); + public List getTousseTournoverDaysStatisticsReportData(Map requestParameters, Map parametMap){ + String startDate = requestParameters.get("startDate"); + String endDate = requestParameters.get("endDate"); parametMap.put("amountFormat", "#0.00"); parametMap.put("title", "器械包周转天数统计报表"); - if(startYear.equals(endYear)){ - parametMap.put("dateStr", startYear+"年"); - }else{ - parametMap.put("dateStr", startYear+ "至" + endYear + "年度"); - } - String startDate = requestParameters.get("startYear") + "-01-01 00:00:00"; - String endDate = Integer.parseInt(requestParameters.get("endYear")) + 1 + "-01-01 00:00:00" ; - String sql = getSql(startDate, endDate, requestParameters.get("packageTypes"),requestParameters.get("orgUnitCoding")); - return jdbcTemplate.query(sql, new ResultSetExtractor>() { + parametMap.put("dateStr", startDate+ " ~ " + endDate); + startDate = startDate + " 00:00:00"; + endDate = endDate + " 23:59:59" ; + DecimalFormat df = new DecimalFormat("0.00"); + String startValueStr = requestParameters.get("startValue"); + final boolean compareSizes = StringUtils.isNotBlank(startValueStr)?true:false;//是否对比代销 初始值有值 说明要对比大小 + Double endValue = compareSizes&&StringUtils.isNotBlank(requestParameters.get("endValue"))?Double.parseDouble(requestParameters.get("endValue")):0.00; + Double startValue = compareSizes?Double.parseDouble(startValueStr):0.00; + String comparisonOperators = compareSizes?requestParameters.get("comparisonOperators"):null;//对比符 + + String sql = getSql(startDate, endDate, requestParameters.get("packageTypes"),requestParameters.get("orgUnitCoding"),requestParameters.get("tousseName")); + return jdbcTemplate.query(sql, new ResultSetExtractor>() { @Override - public List extractData( + public List extractData( ResultSet rs) throws SQLException, DataAccessException { - List vos = new ArrayList(); + List firstColumnVos = new ArrayList(); Map packageTypeMap = null; boolean first = false; - Map> dateMap = new HashMap>(); - Map validDateMap = null; + Map firstColumnVosMap = new HashMap(); while(rs.next()){ if(!first){ packageTypeMap = new HashMap(); - validDateMap = new HashMap(); - setPackageTypeMap(packageTypeMap,validDateMap); + setPackageTypeMap(packageTypeMap); first = true; } - String dateStr = rs.getString("dateStr"); - Map tousseTournoverDaysStatisticsReportVoMap = null; - if(dateMap.containsKey(dateStr)){ - tousseTournoverDaysStatisticsReportVoMap = dateMap.get(dateStr); - }else{ - tousseTournoverDaysStatisticsReportVoMap = new HashMap(); - dateMap.put(dateStr, tousseTournoverDaysStatisticsReportVoMap); - } + TousseTournoverDaysStatisticsReportVo vo = new TousseTournoverDaysStatisticsReportVo(); String packageType = rs.getString("packageType"); if(StringUtils.isBlank(packageType) && !"".equals(packageType)){ packageType = ""; @@ -94,55 +89,76 @@ } Long amount = rs.getLong("amount"); Long subday = rs.getLong("subday"); - TousseTournoverDaysStatisticsReportVo vo = null; - if(tousseTournoverDaysStatisticsReportVoMap.containsKey(validDate)){ - vo = tousseTournoverDaysStatisticsReportVoMap.get(validDate); - vo.setAmount(MathTools.add(vo.getAmount(), amount).longValue()); - vo.setSubDays(MathTools.add(vo.getSubDays(), subday).longValue()); + vo.setTousseAmount(amount); + vo.setPeriodOfValidity(validDate); + if(amount == null || amount == 0L || subday == 0L){ + vo.setAverageDays("0.00"); }else{ - vo = new TousseTournoverDaysStatisticsReportVo(); - vo.setAmount(amount); - vo.setSubDays(subday); - vo.setColumnTitle(dateStr); - vo.setColumnName("包数"); - if(validDateMap != null){ - vo.setSequence(validDateMap.get(packageType)); - } - vo.setValidDateStr(validDate); - tousseTournoverDaysStatisticsReportVoMap.put(validDate, vo); + vo.setAverageDays(df.format(1.00 * subday / amount)); } - } - if(dateMap.size() > 0){ - for (Map tousseTournoverDaysStatisticsReportVoMap : dateMap.values()) { - for (TousseTournoverDaysStatisticsReportVo vo : tousseTournoverDaysStatisticsReportVoMap.values()) { - if(vo.getAmount() == null || vo.getAmount() == 0L){ - vo.setAverageDays(0.00d); - }else{ - vo.setAverageDays(1.00 * vo.getSubDays() / vo.getAmount()); + if(compareSizes){//因为显示的值是四舍五入后的值,所以对比也必须对比四舍五入后的值 + Double averageDaysDoubleValue = Double.parseDouble(vo.getAverageDays()); + if("介于".equals(comparisonOperators)){ + if(Double.compare(averageDaysDoubleValue, endValue) >=0 || Double.compare(averageDaysDoubleValue, startValue) <= 0){ + continue; } - vos.add(vo); - vos.add(vo.getDayBean()); + }else if("小于".equals(comparisonOperators)){ + if(Double.compare(averageDaysDoubleValue, startValue) >=0){ + continue; + } + }else if("小于等于".equals(comparisonOperators)){ + if(Double.compare(averageDaysDoubleValue, startValue) >0){ + continue; + } + }else if("等于".equals(comparisonOperators)){ + if(Double.compare(averageDaysDoubleValue, startValue) !=0){ + continue; + } + }else if("大于".equals(comparisonOperators)){ + if(Double.compare(averageDaysDoubleValue, startValue) <=0){ + continue; + } + }else if("大于等于".equals(comparisonOperators)){ + if(Double.compare(averageDaysDoubleValue, startValue) <0){ + continue; + } } } + + String tousseName = rs.getString("tousseName").trim(); + FirstColumnVo firstColumnVo = null; + List firstColumnDetaileds = null; + if(firstColumnVosMap.containsKey(tousseName)){ + firstColumnVo = firstColumnVosMap.get(tousseName); + firstColumnDetaileds = firstColumnVo.getFirstColumnDetaileds(); + }else{ + firstColumnVosMap.clear(); + firstColumnVo = new FirstColumnVo(); + firstColumnVo.setFirstColumnName(tousseName); + firstColumnDetaileds = new ArrayList(); + firstColumnVo.setFirstColumnDetaileds(firstColumnDetaileds); + firstColumnVosMap.put(tousseName, firstColumnVo); + firstColumnVos.add(firstColumnVo); + } + firstColumnDetaileds.add(vo); } - return vos; + return firstColumnVos; } }); } /** * 获取包装类型对应的有效期 和 排序号 * @param packageTypeMap 包装类型对应的有效期 - * @param validDateMap 包装类型对应的排序号 */ - private void setPackageTypeMap(Map packageTypeMap, Map validDateMap){ + private void setPackageTypeMap(Map packageTypeMap){ StringBuffer sbf = new StringBuffer(); - sbf.append("select ho.optionText,ed.validDate,ed.validDateUnit,ed.warningDate from "); + sbf.append("select ho.optionText,ed.validDate,ed.validDateUnit from "); sbf.append(HttpOption.class.getSimpleName()); sbf.append(" ho join "); sbf.append(ExpirationDateInfo.class.getSimpleName()); sbf.append(" ed on ho.optionText=ed.packageType where ho.optionListId='"); sbf.append(HttpOption.SYSTEMSETTING_PACKAGING_TYPE); - sbf.append("' order by ed.validDate , ed.validDateUnit"); + sbf.append("' "); jdbcTemplate.query(sbf.toString(), new ResultSetExtractor(){ @Override @@ -151,8 +167,7 @@ int i = 0; while(rs.next()){ String optionText = rs.getString("optionText"); - packageTypeMap.put(optionText, rs.getInt("validDate") + rs.getString("validDateUnit")); - validDateMap.put(optionText, i++); + packageTypeMap.put(optionText, optionText + "("+rs.getInt("validDate") + rs.getString("validDateUnit")+")"); } return i; } @@ -165,12 +180,13 @@ * @param endDate * @param packageTypes 包装类型 * @param orgUnitCoding 供应室编码 + * @param tousseName 器械包名称 * @return */ - private String getSql(String startDate, String endDate, String packageTypes, String orgUnitCoding){ + private String getSql(String startDate, String endDate, String packageTypes, String orgUnitCoding, String tousseName){ String orgUnitCodingsSql = SqlUtils.getStringFieldInLargeCollectionsPredicate("i.orgUnitCoding", SqlUtils.splitStringToSet(orgUnitCoding, ",")); StringBuffer sbf = new StringBuffer(); - sbf.append("select year(sendTime) dateStr,count(*) amount,sum(subday) subday,packageType from (select 1 amount,DATEDIFF(day, endDate,i.sendTime) subday,i.sendTime, ti.packageType from "); + sbf.append("select count(*) amount,sum(subday) subday,packageType,tousseName from (select 1 amount,DATEDIFF(day, endDate,i.sendTime) subday,i.sendTime, ti.packageType,td.name tousseName from "); sbf.append(TousseInstance.class.getSimpleName()); sbf.append(" ti join "); sbf.append(TousseDefinition.class.getSimpleName()); @@ -180,7 +196,7 @@ sbf.append(SterilizationRecord.class.getSimpleName()); sbf.append(" sr on sr.id=ti.sterilizationRecord_id where sr.endDate is not null and ti.invoice2_id is null and "); sbf.append(orgUnitCodingsSql); - sbf.append(" union all select 1 amount ,DATEDIFF(day, endDate,i.sendTime) subday,i.sendTime,ti.packageType from "); + sbf.append(" union all select 1 amount ,DATEDIFF(day, endDate,i.sendTime) subday,i.sendTime,ti.packageType,td.name tousseName from "); sbf.append(TousseInstance.class.getSimpleName()); sbf.append(" ti join "); sbf.append(TousseDefinition.class.getSimpleName()); @@ -198,7 +214,12 @@ sbf.append(" and "); sbf.append(SqlUtils.getStringFieldInLargeCollectionsPredicate("packageType", SqlUtils.splitStringToSet(packageTypes, ","))); } - sbf.append(" group by packageType ,year(sendTime) "); + if(StringUtils.isNotBlank(tousseName)){ + sbf.append(" and tousseName='"); + sbf.append(tousseName); + sbf.append("' "); + } + sbf.append(" group by packageType ,tousseName order by tousseName"); return sbf.toString(); } } Index: ssts-web/src/main/webapp/jasperRtp/tousseTournoverDaysStatisticsReport.jasper =================================================================== diff -u -r36324 -r37005 Binary files differ Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/TousseTournoverDaysStatisticsReportVo.java =================================================================== diff -u -r36271 -r37005 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/TousseTournoverDaysStatisticsReportVo.java (.../TousseTournoverDaysStatisticsReportVo.java) (revision 36271) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/TousseTournoverDaysStatisticsReportVo.java (.../TousseTournoverDaysStatisticsReportVo.java) (revision 37005) @@ -4,112 +4,41 @@ * 器械包周转天数统计报表vo * */ -public class TousseTournoverDaysStatisticsReportVo implements Cloneable{ - - private String rowNum; +public class TousseTournoverDaysStatisticsReportVo { /** * 有效期 */ - private String validDateStr; - - private String columnNum; - - private String columnTitle; - - private String columnName; - - private Double averageDays; - - private Long subDays; - private Long amount; + private String periodOfValidity; /** - * 序号用于报表排序 + * 周转天数字符串 用于报表显示 */ - private Integer sequence = 5000; - - public String getRowNum() { - return rowNum; + private String averageDays; + /** + * 包数 + */ + private Long tousseAmount; + + public String getAverageDays() { + return averageDays; } - public void setRowNum(String rowNum) { - this.rowNum = rowNum; + public void setAverageDays(String averageDays) { + this.averageDays = averageDays; } - - public String getColumnNum() { - return columnNum; + + public String getPeriodOfValidity() { + return periodOfValidity; } - public void setColumnNum(String columnNum) { - this.columnNum = columnNum; + public void setPeriodOfValidity(String periodOfValidity) { + this.periodOfValidity = periodOfValidity; } - public String getColumnTitle() { - return columnTitle; + public Long getTousseAmount() { + return tousseAmount; } - public void setColumnTitle(String columnTitle) { - this.columnTitle = columnTitle; + public void setTousseAmount(Long tousseAmount) { + this.tousseAmount = tousseAmount; } - - public String getColumnName() { - return columnName; - } - - public void setColumnName(String columnName) { - this.columnName = columnName; - } - - public Long getAmount() { - return amount; - } - - public void setAmount(Long amount) { - this.amount = amount; - } - - public Integer getSequence() { - return sequence; - } - - public void setSequence(Integer sequence) { - this.sequence = sequence; - } - - public String getValidDateStr() { - return validDateStr; - } - - public void setValidDateStr(String validDateStr) { - this.validDateStr = validDateStr; - } - - public Double getAverageDays() { - return averageDays; - } - - public void setAverageDays(Double averageDays) { - this.averageDays = averageDays; - } - - public Long getSubDays() { - return subDays; - } - - public void setSubDays(Long subDays) { - this.subDays = subDays; - } - public TousseTournoverDaysStatisticsReportVo getDayBean(){ - TousseTournoverDaysStatisticsReportVo vo = null; - try { - vo = this.clone(); - } catch (CloneNotSupportedException e) { - vo = new TousseTournoverDaysStatisticsReportVo(); - } - vo.setColumnName("周转天数"); - return vo; - } - @Override - protected TousseTournoverDaysStatisticsReportVo clone() throws CloneNotSupportedException { - return (TousseTournoverDaysStatisticsReportVo)super.clone(); - } } Index: ssts-web/src/main/webapp/jasperRtp/tousseTournoverDaysStatisticsReport_child.jrxml =================================================================== diff -u --- ssts-web/src/main/webapp/jasperRtp/tousseTournoverDaysStatisticsReport_child.jrxml (revision 0) +++ ssts-web/src/main/webapp/jasperRtp/tousseTournoverDaysStatisticsReport_child.jrxml (revision 37005) @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: ssts-web/src/main/webapp/jasperRtp/tousseTournoverDaysStatisticsReport.jrxml =================================================================== diff -u -r36324 -r37005 --- ssts-web/src/main/webapp/jasperRtp/tousseTournoverDaysStatisticsReport.jrxml (.../tousseTournoverDaysStatisticsReport.jrxml) (revision 36324) +++ ssts-web/src/main/webapp/jasperRtp/tousseTournoverDaysStatisticsReport.jrxml (.../tousseTournoverDaysStatisticsReport.jrxml) (revision 37005) @@ -1,316 +1,108 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <band height="64" splitType="Stretch"> - <textField isStretchWithOverflow="true"> - <reportElement uuid="14137749-263e-4143-a8dd-482900def002" x="0" y="0" width="240" height="34"/> - <textElement textAlignment="Center" verticalAlignment="Middle"> - <font size="14" isBold="true"/> - </textElement> - <textFieldExpression><![CDATA[$P{title}]]></textFieldExpression> - </textField> - <textField> - <reportElement uuid="14137749-263e-4143-a8dd-482900def002" x="0" y="34" width="159" height="30"/> - <textElement textAlignment="Center" verticalAlignment="Top"> - <font size="12" isBold="false"/> - </textElement> - <textFieldExpression><![CDATA[$P{dateStr}]]></textFieldExpression> - </textField> - </band> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +