Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/InvoiceQuerySummaryService.java =================================================================== diff -u --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/InvoiceQuerySummaryService.java (revision 0) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/InvoiceQuerySummaryService.java (revision 13100) @@ -0,0 +1,49 @@ +package com.forgon.disinfectsystem.jasperreports.service; + +import java.util.LinkedList; +import java.util.List; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Predicate; + +import com.forgon.disinfectsystem.jasperreports.javabeansource.InvoiceQuery; +import com.forgon.disinfectsystem.jasperreports.javabeansource.InvoiceQueryItem; +import com.forgon.disinfectsystem.jasperreports.javabeansource.ReturnGoodsItemVo; +import com.forgon.disinfectsystem.jasperreports.javabeansource.ReturnGoodsVo; +import com.forgon.tools.string.StringTools; + +/** + * 对发货进行汇总统计的类 + * @author kzh + * + */ +public class InvoiceQuerySummaryService { + private boolean isSummary; + private List invoiceQueryList = new LinkedList(); + + public InvoiceQuerySummaryService(boolean isSummary){ + this.isSummary = isSummary; + } + public List getList(){ + invoiceQueryList.forEach(query->query.getQueryItems().forEach(item->item.calcTotalPrice())); + return invoiceQueryList; + } + + public void addItem(String depart,InvoiceQueryItem item){ + InvoiceQuery vo = CollectionUtils.find(invoiceQueryList, new Predicate(){ + @Override + public boolean evaluate(InvoiceQuery object) { + if(StringTools.equals(depart, object.getDepart())){ + return true; + } + return false; + } + }); + if(vo == null){ + vo = new InvoiceQuery(); + vo.setDepart(depart); + invoiceQueryList.add(vo); + } + vo.addItem(item,isSummary); + } +} Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/InvoiceQuery.java =================================================================== diff -u -r12331 -r13100 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/InvoiceQuery.java (.../InvoiceQuery.java) (revision 12331) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/InvoiceQuery.java (.../InvoiceQuery.java) (revision 13100) @@ -6,6 +6,9 @@ import java.util.ArrayList; import java.util.List; +import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.BaseUtils; + /** * @author WangYi * 2014-4-14 下午4:54:55 @@ -43,5 +46,22 @@ public void setQueryItems(List queryItems) { this.queryItems = queryItems; } + + public void addItem(InvoiceQueryItem item,boolean isSummary) { + if(item != null){ + if(isSummary){ + try{ + InvoiceQueryItem find = queryItems.stream().filter( + nItem->StringTools.equals(nItem.getGoodsName(), item.getGoodsName()) + && BaseUtils.objectEquals(nItem.getPrice(), item.getPrice())).findFirst().get(); + find.setAmount(find.getAmount() + item.getAmount()); + }catch(Exception e){ + queryItems.add(item); + } + }else{ + queryItems.add(item); + } + } + } } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r13096 -r13100 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 13096) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 13100) @@ -4440,138 +4440,72 @@ } String sql = " "; - String tousseSql = "select po.settleAccountsDepart,do.barcode,bo.tousseName,bo.price," - + "bo.statisticsAmount,po.sendTime,po.applicant from Invoice po,BarcodeDevice " + String tousseSql = "select '器械包' as type,po.settleAccountsDepart,po.depart,do.barcode,bo.tousseName as name,bo.price," + + "bo.statisticsAmount as amount,po.sendTime,po.applicant,'' as batch,'' as externalCode from Invoice po,BarcodeDevice " + "do,TousseInstance bo where po.id = bo.invoice_id and bo.id = do.id "; - String diposableSql = "select po.settleAccountsDepart,bo.barcode,bo.name,bo.price,bo.amount," + String diposableSql = "select '一次性物品' as type, po.settleAccountsDepart,po.depart,bo.barcode,bo.name,bo.price,bo.amount," + "po.sendTime,po.applicant,bo.batch,dg.externalCode from Invoice po,DiposableGoodsItem bo,DisposableGoods dg " + "where po.id = bo.invoice_id and bo.disposableGoodsID = dg.id"; - sql += " and " + dateQueryAdapter.dateAreaSql("po.sendTime", startDate, endDate, true, true); - /*if (StringUtils.isNotBlank(startDate)) { - sql += " and po.sendTime >= " - + dateQueryAdapter.dateAdapter(startDate + " 00:00:00"); - } - if (StringUtils.isNotBlank(endDate)) { - sql += " and po.sendTime <= " - + dateQueryAdapter.dateAdapter(endDate + " 23:59:59"); - }*/ + String materialSql = "select '材料' as type, po.settleAccountsDepart,po.depart,'' as barcode,bo.name as name,bo.price as price,bo.amount," + + "po.sendTime,'' as applicant,'' as batch,dg.externalCode from MaterialInvoice po inner join MaterialItem bo " + + " on po.id = bo.materialInvoice_id " + " inner join goodsStock gs on gs.id = bo.goodsStockId" + + " inner join MaterialDefinition dg on gs.materialDefinitionId = dg.id " + + "where (1=1)"; + sql = " select * from ( "; + sql += tousseSql + " union all "; + sql += diposableSql + " union all "; + sql += materialSql + " ) m"; + sql += " where " + dateQueryAdapter.dateAreaSql("m.sendTime", startDate, endDate, true, true); + if (StringUtils.isNotBlank(depart)) { - sql += " and po.depart = '" + depart + "'"; + sql += " and m.depart = '" + depart + "'"; } if (StringUtils.isNotBlank(settleDepartSearch)) { - sql += " and po.settleAccountsDepart = '" + settleDepartSearch + "'"; + sql += " and m.settleAccountsDepart = '" + settleDepartSearch + "'"; } if (StringUtils.isNotBlank(applicant)) { - sql += " and po.applicant = '" + applicant + "'"; - ; + sql += " and m.applicant = '" + applicant + "'"; } if (StringUtils.isNotBlank(goodsName)) { if(isDisinfection){ - tousseSql += " and bo.tousseName like '%" + goodsName + "%'"; - diposableSql += " and 1=2 "; + sql += " and type <> '一次性物品'"; + //tousseSql += " and bo.tousseName like '%" + goodsName + "%'"; + //diposableSql += " and 1=2 "; }else{ - tousseSql += " and bo.tousseName ='" + goodsName + "'"; - diposableSql += " and bo.name ='" + goodsName + "'"; + sql += " and m.name ='" + goodsName + "'"; } } if (StringUtils.isNotBlank(batchNumber)) { - tousseSql += " and 1=2 "; - diposableSql += " and bo.batch = '" + batchNumber + "'"; + sql += " and m.batch = '" + batchNumber + "'"; } - tousseSql += sql; - diposableSql += sql; - diposableSql += " order by po.settleAccountsDepart,dg.externalCode desc "; + sql += " order by m.settleAccountsDepart,m.externalCode desc "; - Map> map = new HashMap>(); - ResultSet rs2 = objectDao.executeSql(diposableSql); + InvoiceQuerySummaryService summaryService = new InvoiceQuerySummaryService(isSummary); + System.out.println(sql); + ResultSet rs2 = objectDao.executeSql(sql); try { while (rs2.next()) { - String departStr = rs2.getString(1); InvoiceQueryItem item = new InvoiceQueryItem(); - item.setBarcode(rs2.getString(2)); - item.setGoodsName(rs2.getString(3)); - item.setPrice(rs2.getDouble(4)); - item.setAmount(rs2.getInt(5)); - item.setTime(rs2.getString(6)); - item.setApplicant(rs2.getString(7)); - item.setBatch(rs2.getString(8)); - item.setExternalCode(rs2.getString(9)); - List list = map.get(departStr); - if (list != null) { - if(isSummary){ - try{ - InvoiceQueryItem find = list.stream().filter( - nItem->StringTools.equals(nItem.getGoodsName(), item.getGoodsName()) - && BaseUtils.objectEquals(nItem.getPrice(), item.getPrice())).findFirst().get(); - find.setAmount(find.getAmount() + item.getAmount()); - }catch(Exception e){ - list.add(item); - } - }else{ - list.add(item); - } - } else { - list = new ArrayList(); - list.add(item); - map.put(departStr, list); - } + + String departStr = rs2.getString("settleAccountsDepart"); + item.setBarcode(rs2.getString("barcode")); + item.setGoodsName(rs2.getString("name")); + item.setPrice(rs2.getDouble("price")); + item.setAmount(rs2.getInt("amount")); + item.setTime(rs2.getString("sendTime")); + item.setApplicant(rs2.getString("applicant")); + item.setBatch(rs2.getString("batch")); + item.setExternalCode(rs2.getString("externalCode")); + + summaryService.addItem(departStr, item); } } catch (SQLException e) { e.printStackTrace(); }finally { DatabaseUtil.closeResultSetAndStatement(rs2); } - - ResultSet rs = objectDao.executeSql(tousseSql); - try { - while (rs.next()) { - String departStr = rs.getString(1); - InvoiceQueryItem item = new InvoiceQueryItem(); - item.setBarcode(rs.getString(2)); - item.setGoodsName(rs.getString(3)); - item.setPrice(rs.getDouble(4)); - item.setAmount(rs.getInt(5)); - item.setTime(rs.getString(6)); - item.setApplicant(rs.getString(7)); - item.setBatch(""); - List list = map.get(departStr); - if (list != null) { - if(isSummary){ - try{ - InvoiceQueryItem find = list.stream().filter( - nItem->StringTools.equals(nItem.getGoodsName(), item.getGoodsName()) - && BaseUtils.objectEquals(nItem.getPrice(), item.getPrice())).findFirst().get(); - find.setAmount(find.getAmount() + item.getAmount()); - }catch(Exception e){ - list.add(item); - } - }else{ - list.add(item); - } - } else { - list = new ArrayList(); - list.add(item); - map.put(departStr, list); - } - } - } catch (SQLException e) { - e.printStackTrace(); - }finally { - DatabaseUtil.closeResultSetAndStatement(rs); - } - - Iterator iterator = map.keySet().iterator(); - List invoiceList = new ArrayList(); - while (iterator.hasNext()) { - String key = iterator.next(); - InvoiceQuery invoiceQuery = new InvoiceQuery(); - invoiceQuery.setDepart(key); - invoiceQuery.setQueryItems(map.get(key)); - map.get(key).stream().forEach(item->item.calcTotalPrice()); - invoiceList.add(invoiceQuery); - } - return invoiceList; + return summaryService.getList(); } /**