Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r12957 -r12969 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 12957) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 12969) @@ -4018,15 +4018,21 @@ supplyRoomDiposableGoodsFilterSql += " and dbs.batchNumber = '"+batch+"'"; } - String tousseSql = "select i.settleAccountsDepart,ii.toussename as name,sum(ii.amount) as amount,sum(ii.settlementPrice) as settlementprice,ii.tousseType as type" + String caseSql = " CASE ii.tousseType WHEN '消毒物品' THEN (ii.tousseName + '_' + cast(ii.invoicePlanID as varchar)) ELSE ii.tousseName END "; + String dbName = dbConnection.getDatabase(); + if (DatabaseUtil.isOracle(dbName)) { + caseSql = " CASE ii.tousseType WHEN '消毒物品' THEN (ii.tousseName || '_' || ii.invoicePlanID) ELSE ii.tousseName END "; + } + + String tousseSql = "select i.settleAccountsDepart," + caseSql + " as name,sum(ii.amount) as amount,sum(ii.settlementPrice) as settlementprice,ii.tousseType as type" + ",'' from invoice i,InvoiceItem ii " + " where i.id = ii.invoice_id " + " and ii.diposable = '否' and i.orgUnitCoding = '"+handleDeptCode+"' " + monthFilterSql + departFilterSql + typeFilterSql + goodsNameFilterSql - + " and i.settleaccountsdepart is not null group by i.settleAccountsDepart,ii.tousseType,ii.toussename"; + + " and i.settleaccountsdepart is not null group by i.settleAccountsDepart,ii.tousseType," + caseSql; String diposableGoodsSql = ""; if(StringUtils.isBlank(typeSearch) || "一次性物品".equals(typeSearch)){ @@ -4099,14 +4105,19 @@ int disinfectGoodsStatisticAmount = 0; int totalAmount = amount; DepartmentMonthDetailItem mdi = new DepartmentMonthDetailItem(); - if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(type) - || TousseDefinition.PACKAGE_TYPE_CUSTOM - .equals(type)) { - disinfectGoodsStatisticAmount = getDisinfectGoodsStatisticAmount(goodsName); - if (disinfectGoodsStatisticAmount != 0){ - totalAmount = (amount * disinfectGoodsStatisticAmount); + if (TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(type)) { + Integer _index = goodsName.lastIndexOf("_"); + if(_index > 0){ + String name = goodsName.substring(0, _index); + String invoiceplan_id = goodsName.substring(_index+1, goodsName.length()); + disinfectGoodsStatisticAmount = getDisinfectGoodsStatisticAmount(name,invoiceplan_id); } + }else if(TousseDefinition.PACKAGE_TYPE_CUSTOM.equals(type)){ + disinfectGoodsStatisticAmount = getDisinfectGoodsStatisticAmount(goodsName,null); } + if (disinfectGoodsStatisticAmount > 0){ + totalAmount = (amount * disinfectGoodsStatisticAmount); + } goodsName = CssdUtils.filterUnderScoreName(goodsName); @@ -4180,12 +4191,17 @@ return datas; } - private int getDisinfectGoodsStatisticAmount(String disinfectGoodsName) { + private int getDisinfectGoodsStatisticAmount(String disinfectGoodsName,String invoicePlanID) { int statisticsAmount = 0; String sql = "select sum(i.count) from Toussedefinition t,MaterialInstance i " - + "where t.id = i.tousse_id and t.name = '"+disinfectGoodsName+"'"; + + "where t.id = i.tousse_id and t.name = '" + disinfectGoodsName + + "'"; + if(StringUtils.isNotBlank(invoicePlanID)){ + sql += " and t.invoicePlanID = " + invoicePlanID; + } + ResultSet rs = objectDao.executeSql(sql); if(rs != null){ try {