Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r29413 -r29428 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 29413) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 29428) @@ -5459,7 +5459,7 @@ sql += orderSql; } - logger.debug("执行sql:" + sql); + logger.debug("明细核算月报执行sql:" + sql); Map> detailMap = new HashMap>(); Map manufacturerMap = getDiposableGoodsManufacturer(); @@ -18500,51 +18500,71 @@ GoodsOption option = goodsOptionManager.getGoodsOption(GoodsOption.MODEL_ADYTUM_DEPARTMENT, AcegiHelper.getCurrentOrgUnitCode()); String inSql = ""; String notInSql = ""; + String returnInSql = ""; + String returnNotInSql = ""; if (option != null && StringUtils.isNotBlank(option.getValue())) { - inSql = SqlUtils.get_InSql("i.depart", option.getValue().split(";")); - notInSql = SqlUtils.get_NotInSql("i.depart", option.getValue().split(";")); + String[] optionValues = option.getValue().split(";"); + inSql = SqlUtils.get_InSql("i.depart", optionValues); + notInSql = SqlUtils.get_NotInSql("i.depart", optionValues); + returnInSql = SqlUtils.get_InSql("rr.depart", optionValues); + returnNotInSql = SqlUtils.get_NotInSql("rr.depart", optionValues); } else { inSql = "and 1=1"; notInSql = "and 1=0"; + inSql = "and 1=1"; + notInSql = "and 1=0"; } - + String returnBetweenSql = " and " + dateQueryAdapter.dateAreaSql("rr.returntime", startDay, endDay, true); + String groupBySql = " group by td.packageSize "; + String tousseTypeInSql = String.format(" in ('%s','%s','%s','%s')", TousseDefinition.PACKAGE_TYPE_INSIDE, TousseDefinition.PACKAGE_TYPE_CUSTOM, TousseDefinition.PACKAGE_TYPE_DRESSING, TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY); + String packageSizeCaseSql = String.format("case when packageSize='%s' then 1 when packageSize='%s' then 2 when packageSize='%s' then 3 when packageSize='%s' then 4 else 0 end sequence ", + TousseDefinition.PACKAGE_SIZE_HUGE,TousseDefinition.PACKAGE_SIZE_BIG,TousseDefinition.PACKAGE_SIZE_CENTER,TousseDefinition.PACKAGE_SIZE_SMALL); + String returnSql = String.format(" select td.packageSize,-sum(ri.amount) amount " + + "from ReturnGoodsRecord rr inner join ReturnGoodsItem ri on rr.id = ri.returngoodsrecord_id " + + "join TousseDefinition td on td.id = ri.tousseDefinition_id " + + "where 1!=1 and rr.handleDepartCode='%s' %s ", + departmentCode,returnBetweenSql); //1、本院科室 - String sql1 = String.format("select td.packageSize,sum(ii.amount) amount," - + "case when td.packageSize='%s' then 1 when td.packageSize='%s' then 2 when td.packageSize='%s' then 3 when td.packageSize='%s' then 4 end sequence " + String sql1 = String.format("select td.packageSize,sum(ii.amount) amount " + "from Invoice i join InvoiceItem ii on ii.invoice_id=i.id join TousseDefinition td on td.id=ii.tousseDefinitionId " - + "where td.packageSize is not null and ii.tousseType in ('%s','%s','%s') %s %s %s group by td.packageSize order by sequence", - TousseDefinition.PACKAGE_SIZE_HUGE,TousseDefinition.PACKAGE_SIZE_BIG,TousseDefinition.PACKAGE_SIZE_CENTER,TousseDefinition.PACKAGE_SIZE_SMALL, - TousseDefinition.PACKAGE_TYPE_INSIDE, TousseDefinition.PACKAGE_TYPE_DRESSING, TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY, + + "where 1=1 " + + "and ii.tousseType %s %s %s %s group by td.packageSize ", + tousseTypeInSql, betweenSql, orgUnitCodingSql, inSql); + sql1 = "select packageSize,sum(amount) amount,"+ packageSizeCaseSql +" from (" + sql1 + " union all " + returnSql + " and td.tousseType " + tousseTypeInSql + returnInSql + groupBySql + ")tempTable group by packageSize order by sequence"; + logger.debug("本院器械包" + sql1); setTousseSpecificationSizeStatisticsBean(list, sql1, "本院器械包"); - //2、外院科室 - sql1 = String.format("select td.packageSize,sum(ii.amount) amount," - + "case when td.packageSize='%s' then 1 when td.packageSize='%s' then 2 when td.packageSize='%s' then 3 when td.packageSize='%s' then 4 end sequence " + sql1 = String.format("select td.packageSize,sum(ii.amount) amount " + "from Invoice i join InvoiceItem ii on ii.invoice_id=i.id join TousseDefinition td on td.id=ii.tousseDefinitionId " - + "where td.packageSize is not null and ii.tousseType in ('%s','%s','%s') %s %s %s group by td.packageSize order by sequence", - TousseDefinition.PACKAGE_SIZE_HUGE,TousseDefinition.PACKAGE_SIZE_BIG,TousseDefinition.PACKAGE_SIZE_CENTER,TousseDefinition.PACKAGE_SIZE_SMALL, - TousseDefinition.PACKAGE_TYPE_INSIDE, TousseDefinition.PACKAGE_TYPE_DRESSING, TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY, + + "where 1=1 " + + "and ii.tousseType %s %s %s %s group by td.packageSize ", + tousseTypeInSql, betweenSql, orgUnitCodingSql, notInSql); + sql1 = "select packageSize,sum(amount) amount,"+ packageSizeCaseSql +" from (" + sql1 + " union all " + returnSql + " and td.tousseType " + tousseTypeInSql + returnNotInSql + groupBySql + ")tempTable group by packageSize order by sequence "; + logger.debug("外院器械包" + sql1); setTousseSpecificationSizeStatisticsBean(list, sql1, "外院器械包"); + tousseTypeInSql = String.format(" and td.tousseType in ('%s','%s')", TousseDefinition.PACKAGE_TYPE_FOREIGN,TousseDefinition.PACKAGE_TYPE_SPLIT); //3、植入物器械包 - sql1 = String.format("select t1.packageSize,count(*) amount," - + "case when t1.packageSize='%s' then 1 when t1.packageSize='%s' then 2 when t1.packageSize='%s' then 3 when t1.packageSize='%s' then 4 end sequence " + sql1 = String.format("select t1.packageSize,count(*) amount " + "from(" + "select td.packageSize " - + "from Invoice i join TousseInstance ti on ti.invoice_id=i.id join ForeignTousseApplication fta on fta.id=ti.foreignTousseApp_id " - + "join TousseDefinition td on td.invoicePlanID=fta.id and td.tousseType='%s' " - + "where td.packageSize is not null %s %s group by td.id,td.packageSize" - + ") t1 group by t1.packageSize order by sequence", - TousseDefinition.PACKAGE_SIZE_HUGE,TousseDefinition.PACKAGE_SIZE_BIG,TousseDefinition.PACKAGE_SIZE_CENTER,TousseDefinition.PACKAGE_SIZE_SMALL, - TousseDefinition.PACKAGE_TYPE_FOREIGN, betweenSql, orgUnitCodingSql); + + "from Invoice i join TousseInstance ti on ti.invoice_id=i.id " + + "join TousseDefinition td on td.id=ti.tousseDefinition_id " + + "where 1=1 %s " + + " %s %s group by td.id,td.packageSize" + + ") t1 group by t1.packageSize ", + tousseTypeInSql, betweenSql, orgUnitCodingSql); + sql1 = "select packageSize,sum(amount) amount,"+ packageSizeCaseSql +" from (" + sql1 + " union all " + returnSql + tousseTypeInSql + groupBySql + ")tempTable group by packageSize order by sequence "; + logger.debug("植入物器械包" + sql1); setTousseSpecificationSizeStatisticsBean(list, sql1, "植入物器械包"); - //4、消毒物品 sql1 = String.format("select '消毒包' packageSize,sum(ii.amount) amount from Invoice i join InvoiceItem ii on ii.invoice_id=i.id " - + "where ii.tousseType in ('%s') %s %s", + + "where ii.tousseType='%s' %s %s", TousseDefinition.PACKAGE_TYPE_DISINFECTION, betweenSql, orgUnitCodingSql); + sql1 = "select packageSize,sum(amount) amount from (" + sql1 + " union all " + returnSql + " and td.tousseType='"+ TousseDefinition.PACKAGE_TYPE_DISINFECTION +"'" + groupBySql + ")tempTable group by packageSize "; + logger.debug("消毒物品" + sql1); setTousseSpecificationSizeStatisticsBean(list, sql1, "消毒物品"); } return list; @@ -18561,14 +18581,28 @@ List childs = new ArrayList(); ResultSet result = objectDao.executeSql(sql); try { + //packageSize为空字符串或null的map + Map resultMap = new HashMap(); while(result.next()){ - String packageSize = StringTools.defaultString(result.getString("packageSize")); + String packageSize = result.getString("packageSize"); + if(StringUtils.isBlank(packageSize)){ + packageSize = ""; + } int amount = result.getInt("amount"); if (amount > 0) { - TousseSpecificationSizeStatistics_child child = new TousseSpecificationSizeStatistics_child(); - child.setPackageSize(packageSize); - child.setAmount(amount); - childs.add(child); + TousseSpecificationSizeStatistics_child child = null; + if(resultMap.containsKey(packageSize)){//"" 和 null 合并为1行 + child = resultMap.get(packageSize); + child.setAmount(child.getAmount() + amount); + }else{ + child = new TousseSpecificationSizeStatistics_child(); + child.setPackageSize(packageSize); + child.setAmount(amount); + childs.add(child); + if("".equals(packageSize)){ + resultMap.put(packageSize, child); + } + } } } } catch (SQLException e) {