Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java =================================================================== diff -u -r13476 -r13500 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 13476) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 13500) @@ -732,6 +732,18 @@ String hasInvoice = StrutsParamUtils.getPraramValue("hasInvoice", ""); String goodsType = StrutsParamUtils.getPraramValue("goodsType", null); return jasperReportManager.getGodownSummaryReport(timeStart, timeEnd, suplierName,warehouseId,type,hasInvoice,goodsType); + }else if("goodsAmountSummaryByGrade".equals(reportName)){ //一次性物品三类查询报表 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + String timeStart = StrutsParamUtils.getPraramValue("timeStart", + sdf.format(new Date())); + String timeEnd = StrutsParamUtils.getPraramValue("timeEnd", + sdf.format(new Date())); + String orgUnitCoding = AcegiHelper.getLoginUser().getCurrentOrgUnitCode(); + timeStart = timeStart + " 00:00:00"; + timeEnd = timeEnd + " 23:59:59"; + String goodsName = StrutsParamUtils.getPraramValue("goodsName", null); + String grade = StrutsParamUtils.getPraramValue("grade", null); + return jasperReportManager.getGoodsAmountSummaryByGrade(timeStart, timeEnd, goodsName,grade,orgUnitCoding); } return null; } @@ -1228,6 +1240,19 @@ map.put("timeStart", startDay); map.put("timeEnd", endDay); map.put("orgUnit", orgUnit); + }else if("goodsAmountSummaryByGrade".equals(reportName)){//一次性物品三类查询报表 + String startDay = StrutsParamUtils.getPraramValue("timeStart", ""); + String endDay = StrutsParamUtils.getPraramValue("timeEnd", ""); + String title = StrutsParamUtils.getPraramValue("title", ""); + String orgUnit = AcegiHelper.getLoginUser().getCurrentOrgUnitName(); //StrutsParamUtils.getPraramValue("orgUnit", ""); + String goodsName = StrutsParamUtils.getPraramValue("goodsName", ""); + String grade = StrutsParamUtils.getPraramValue("grade", ""); + map.put("title", title); + map.put("timeStart", startDay); + map.put("timeEnd", endDay); + map.put("orgUnit", orgUnit); + map.put("goodsName", goodsName); + map.put("grade", grade); }else if(reportName.equals("returnGoods")){ String startDay = StrutsParamUtils.getPraramValue("startDay", ""); String endDay = StrutsParamUtils.getPraramValue("endDay", ""); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/GodownEntry.java =================================================================== diff -u -r13181 -r13500 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/GodownEntry.java (.../GodownEntry.java) (revision 13181) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/GodownEntry.java (.../GodownEntry.java) (revision 13500) @@ -36,7 +36,7 @@ private String operator; //操作员 - private Date time; // 入库/退库/退货时间 + private Date time; // 入库/退库时间 private String remark; //备注 Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/Invoice.java =================================================================== diff -u -r12844 -r13500 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/Invoice.java (.../Invoice.java) (revision 12844) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/Invoice.java (.../Invoice.java) (revision 13500) @@ -94,7 +94,7 @@ private String status = STATUS_UNDELIVERED; - private String orgUnitCoding;//供应室类型,一级供应室还是二级供应室 + private String orgUnitCoding;//供应室编码,一级供应室还是二级供应室的code private Long inventoryWriteBackEntryId; //物资系统回写ID Index: ssts-web/src/main/webapp/disinfectsystem/reportforms/goodsAmountSummaryByGradeView.jsp =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/reportforms/goodsAmountSummaryByGradeView.jsp (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/reportforms/goodsAmountSummaryByGradeView.jsp (revision 13500) @@ -0,0 +1,43 @@ +<%@ page contentType="text/html; charset=UTF-8"%> +<%@page import="com.forgon.tools.SpringBeanManger" %> +<%@page import="com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager"%> +<%@page import="com.forgon.directory.acegi.tools.AcegiHelper"%> +<%@ include file="/common/taglibs.jsp"%> + + + +<%@ include file="/common/includeExtJsAndCss.jsp"%> + + + + + + + + + + +一次性物品三类查询报表 + +<% +SupplyRoomConfigManager supplyRoomConfigManager = (SupplyRoomConfigManager)SpringBeanManger.getBean("supplyRoomConfigManager"); +%> + + + + + + + + +
+
+
+ + + + \ No newline at end of file Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/GodownEntryItem.java =================================================================== diff -u -r13377 -r13500 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/GodownEntryItem.java (.../GodownEntryItem.java) (revision 13377) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/GodownEntryItem.java (.../GodownEntryItem.java) (revision 13500) @@ -420,7 +420,7 @@ * @return */ public static String gradeOrDefault(String grade){ - if(!"一类".equals(grade) && !"二类".equals(grade) && !"三类".equals(grade)){ + if(!DisposableGoods.GRADE_FIRST.equals(grade) && !DisposableGoods.GRADE_SECOND.equals(grade) && !DisposableGoods.GRADE_THIRD.equals(grade)){ return null; } return grade; Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r13493 -r13500 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 13493) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 13500) @@ -26,6 +26,7 @@ import java.util.Set; import java.util.stream.Stream; +import net.sf.ehcache.search.Results; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; @@ -113,6 +114,7 @@ import com.forgon.disinfectsystem.jasperreports.javabeansource.GodownEntryItemVo; import com.forgon.disinfectsystem.jasperreports.javabeansource.GodownEntryStatistic_child; import com.forgon.disinfectsystem.jasperreports.javabeansource.GodownEntryStatistic_main; +import com.forgon.disinfectsystem.jasperreports.javabeansource.GoodsAmountSummaryByGrade; import com.forgon.disinfectsystem.jasperreports.javabeansource.InvoiceAmountContrastBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.InvoiceQuery; import com.forgon.disinfectsystem.jasperreports.javabeansource.InvoiceQueryItem; @@ -7554,6 +7556,272 @@ return ret; } + + /** + * 根据物品、时间范围、类别等条件按物品分组统计采购计划数量、入库数量、出库数量 + * @param timeStart + * @param timeEnd + * @param goodsName + * @param grade + * @param orgUnitCoding + * @return + */ + public List getGoodsAmountSummaryByGrade(String timeStart, String timeEnd, String goodsName,String grade,String orgUnitName){ + OrgUnit orgUnit = (OrgUnit)objectDao.getByProperty(OrgUnit.class.getSimpleName(), "name", orgUnitName); + String orgUnitCoding = orgUnit == null ? AcegiHelper.getCurrentOrgUnitCode() : orgUnit.getOrgUnitCoding(); + List returnList = new ArrayList(); + String timeCondition = "";//采购计划、入/退库时间条件 + String sendTimeCondition = "";//发货时间条件 + String returnTimeCondition = "";//退货时间条件 + String goodsNameCondition = "";//物品条件 + String gradeCondition = "";//类别条件 + + if(StringUtils.isNotBlank(grade)){ + gradeCondition = " and po.grade = '" + grade + "'"; + } + + String goodsPlanSummarySql = ""; + String inStorageSummarySql = ""; + String moveInSummarySql = ""; + String stockTaskInSummarySql = ""; + String moveOutSummarySql = ""; + String stockTaskOutSummarySql = ""; + String outStorageSummarySql = ""; + String invoiceSummarySql = ""; + String returnSummarySql = ""; + //按数据库类型分别处理 + if(DatabaseUtil.isSqlServer(dbConnection.getDatabase())){ + //sqlserver的处理逻辑 + if(StringUtils.isNotBlank(timeStart) && StringUtils.isNotBlank(timeEnd)){ + timeCondition = " and f.time between '"+timeStart+"' and '"+timeEnd+"'"; + sendTimeCondition = " and f.sendTime between '"+timeStart+"' and '"+timeEnd+"'"; + returnTimeCondition = " and f.returnTime between '"+timeStart+"' and '"+timeEnd+"'"; + } + if(StringUtils.isNotBlank(goodsName)){ + if(goodsName.contains("[") && goodsName.contains("]") && goodsName.lastIndexOf("]") > goodsName.indexOf("[")){ + goodsNameCondition = " and po.name + '[' + po.specification + ']' = '" + goodsName + "'"; + }else{ + goodsNameCondition = " and po.name = '" + goodsName + "'"; + } + } + //一次性物品信息及采购数量 + goodsPlanSummarySql = "select po.externalCode, case when po.specification is null then po.name else po.name + '['+ po.specification +']' end name, sum(gpi.scheduleAmout) amount from DisposableGoods po" + +" left join GoodPurchaseItem gpi on po.id=gpi.disposableGoodsId" + +" and gpi.goodPurchasePlan_id in (select id from GoodPurchasePlan f where 1=1 " + timeCondition + +" and f.orgUnit_id in (select id from OrgUnit where orgUnitCoding='" + orgUnitCoding + "')) where 1=1 " + goodsNameCondition + gradeCondition + +" group by po.externalCode, po.name,po.specification order by po.externalCode"; + + //一次性物品信息入库数量-购入入库(手工入库,同步入库,导入入库) + inStorageSummarySql = "select po.externalCode, case when po.specification is null then po.name else po.name + '['+ po.specification +']' end name, sum(gei.amount) amount from DisposableGoods po " + +" left join GodownEntryItem gei on po.id=gei.disposableGoodsId" + +" and gei.godownEntry_id in " + +" (select id from GodownEntry f where f.type='"+GodownEntry.TYPE_IN+"' and f.subType in ('"+GodownEntry.SUBTYPE_MANUAL_IN+"','"+GodownEntry.SUBTYPE_SYNC_IN+"','"+GodownEntry.SUBTYPE_MOVE_IN+"') " + timeCondition + +" and warehouseID in (select id from WareHouse where orgUnitCode='" + orgUnitCoding + "')) where 1=1 " + goodsNameCondition + gradeCondition + +" group by po.externalCode, po.name,po.specification order by po.externalCode"; + + //一次性物品信息入库数量-调拨入库 + moveInSummarySql = "select po.externalCode, case when po.specification is null then po.name else po.name + '['+ po.specification +']' end name, sum(gei.amount) amount from DisposableGoods po" + +" left join GodownEntryItem gei on po.id=gei.disposableGoodsId" + +" and gei.godownEntry_id in (select id from GodownEntry f where f.subType='" + GodownEntry.SUBTYPE_MOVE_IN + "' " + timeCondition + +" and warehouseID in (select id from WareHouse where orgUnitCode='" + orgUnitCoding + "')) where 1=1 " + goodsNameCondition + gradeCondition + +" group by po.externalCode, po.name,po.specification order by po.externalCode"; + + //一次性物品信息入库数量-盘盈入库 + stockTaskInSummarySql = "select po.externalCode, case when po.specification is null then po.name else po.name + '['+ po.specification +']' end name, sum(gei.amount) amount from DisposableGoods po " + +" left join GodownEntryItem gei on po.id=gei.disposableGoodsId" + +" and gei.godownEntry_id in (select id from GodownEntry f where f.subType='" + GodownEntry.SUBTYPE_STOCKTAKE_IN + "' " + timeCondition + +" and warehouseID in (select id from WareHouse where orgUnitCode='" + orgUnitCoding + "')) where 1=1 " + goodsNameCondition + gradeCondition + +" group by po.externalCode, po.name,po.specification order by po.externalCode"; + + //一次性物品信息入库数量-调拨出库 + moveOutSummarySql = "select po.externalCode, case when po.specification is null then po.name else po.name + '['+ po.specification +']' end name, -1 * sum(gei.amount) amount from DisposableGoods po " + +" left join GodownEntryItem gei on po.id=gei.disposableGoodsId" + +" and gei.godownEntry_id in (select id from GodownEntry f where f.subType='" + GodownEntry.SUBTYPE_MOVE_OUT + "' " + timeCondition + +" and warehouseID in (select id from WareHouse where orgUnitCode='" + orgUnitCoding + "')) where 1=1 " + goodsNameCondition + gradeCondition + +" group by po.externalCode, po.name,po.specification order by po.externalCode"; + + //一次性物品信息入库数量-盘亏出库 + stockTaskOutSummarySql = "select po.externalCode, case when po.specification is null then po.name else po.name + '['+ po.specification +']' end name, -1 * sum(gei.amount) amount from DisposableGoods po" + +" left join GodownEntryItem gei on po.id=gei.disposableGoodsId" + +" and gei.godownEntry_id in (select id from GodownEntry f where f.subType = '" + GodownEntry.SUBTYPE_STOCKTAKE_OUT + "' " + timeCondition + +" and warehouseID in (select id from WareHouse where orgUnitCode='" + orgUnitCoding + "')) where 1=1 " + goodsNameCondition + gradeCondition + +" group by po.externalCode, po.name,po.specification order by po.externalCode"; + + //一次性物品信息入库数量-退库单 + outStorageSummarySql = "select po.externalCode, case when po.specification is null then po.name else po.name + '['+ po.specification +']' end name, -1 * sum(gei.amount) amount from DisposableGoods po " + +" left join GodownEntryItem gei on po.id=gei.disposableGoodsId" + +" and gei.godownEntry_id in (select id from GodownEntry f where f.type='" + GodownEntry.TYPE_OUT + "' " + timeCondition + +" and warehouseID in (select id from WareHouse where orgUnitCode='" + orgUnitCoding + "')) where 1=1 " + goodsNameCondition + gradeCondition + +" group by po.externalCode, po.name,po.specification order by po.externalCode"; + + //一次性物品信息出库数量查询-发货 + invoiceSummarySql = "select po.externalCode, case when po.specification is null then po.name else po.name + '['+ po.specification +']' end name, sum(ii.amount) amount from DisposableGoods po" + +" left join InvoiceItem ii on po.id=ii.disposableGoodsId" + +" and ii.invoice_id in (select id from Invoice f where 1=1 " + sendTimeCondition + " and f.orgUnitCoding='" + orgUnitCoding + "') where 1=1 " + goodsNameCondition + gradeCondition + +" group by po.externalCode, po.name,po.specification order by po.externalCode"; + + //一次性物品信息出库数量查询-退货 + returnSummarySql = "select po.externalCode, case when po.specification is null then po.name else po.name + '['+ po.specification +']' end name, -1*sum(rgi.amount) amount from DisposableGoods po " + +" left join ReturnGoodsItem rgi on po.id=rgi.disposableGoodsId" + +" and rgi.returnGoodsRecord_ID in (select id from ReturnGoodsRecord f where 1=1 " + returnTimeCondition + " and f.handleDepartCode='" + orgUnitCoding + "') where 1=1 " + goodsNameCondition + gradeCondition + +" group by po.externalCode, po.name,po.specification order by po.externalCode"; + }else if(DatabaseUtil.isOracle(dbConnection.getDatabase())){ + //oracle的处理逻辑 + if(StringUtils.isNotBlank(timeStart) && StringUtils.isNotBlank(timeEnd)){ + timeCondition = " and f.time between to_date('"+timeStart+"','yyyy-mm-dd hh24:mi:ss') and to_date('"+timeEnd+"','yyyy-mm-dd hh24:mi:ss')"; + sendTimeCondition = " and f.sendTime between to_date('"+timeStart+"','yyyy-mm-dd hh24:mi:ss') and to_date('"+timeEnd+"','yyyy-mm-dd hh24:mi:ss')"; + returnTimeCondition = " and f.returnTime between to_date('"+timeStart+"','yyyy-mm-dd hh24:mi:ss') and to_date('"+timeEnd+"','yyyy-mm-dd hh24:mi:ss')"; + } + if(StringUtils.isNotBlank(goodsName)){ + if(goodsName.contains("[") && goodsName.contains("]") && goodsName.lastIndexOf("]") > goodsName.indexOf("[")){ + goodsNameCondition = " and po.name || '[' || po.specification || ']' = '" + goodsName + "'"; + }else{ + goodsNameCondition = " and po.name = '" + goodsName + "'"; + } + } + //一次性物品信息及采购数量 + goodsPlanSummarySql = "select po.externalCode, case when po.specification is null then po.name else po.name || '['|| po.specification ||']' end name, sum(gpi.scheduleAmout) amount from DisposableGoods po" + +" left join GoodPurchaseItem gpi on po.id=gpi.disposableGoodsId" + +" and gpi.goodPurchasePlan_id in (select id from GoodPurchasePlan f where 1=1 " + timeCondition + +" and f.orgUnit_id in (select id from OrgUnit where orgUnitCoding='" + orgUnitCoding + "')) where 1=1 " + goodsNameCondition + gradeCondition + +" group by po.externalCode, po.name,po.specification order by po.externalCode"; + + //一次性物品信息入库数量-购入入库(手工入库,同步入库,导入入库) + inStorageSummarySql = "select po.externalCode, case when po.specification is null then po.name else po.name || '['|| po.specification ||']' end name, sum(gei.amount) amount from DisposableGoods po " + +" left join GodownEntryItem gei on po.id=gei.disposableGoodsId" + +" and gei.godownEntry_id in " + +" (select id from GodownEntry f where f.type='"+GodownEntry.TYPE_IN+"' and f.subType in ('"+GodownEntry.SUBTYPE_MANUAL_IN+"','"+GodownEntry.SUBTYPE_SYNC_IN+"','"+GodownEntry.SUBTYPE_MOVE_IN+"') " + timeCondition + +" and warehouseID in (select id from WareHouse where orgUnitCode='" + orgUnitCoding + "')) where 1=1 " + goodsNameCondition + gradeCondition + +" group by po.externalCode, po.name,po.specification order by po.externalCode"; + + //一次性物品信息入库数量-调拨入库 + moveInSummarySql = "select po.externalCode, case when po.specification is null then po.name else po.name || '['|| po.specification ||']' end name, sum(gei.amount) amount from DisposableGoods po" + +" left join GodownEntryItem gei on po.id=gei.disposableGoodsId" + +" and gei.godownEntry_id in (select id from GodownEntry f where f.subType='" + GodownEntry.SUBTYPE_MOVE_IN + "' " + timeCondition + +" and warehouseID in (select id from WareHouse where orgUnitCode='" + orgUnitCoding + "')) where 1=1 " + goodsNameCondition + gradeCondition + +" group by po.externalCode, po.name,po.specification order by po.externalCode"; + + //一次性物品信息入库数量-盘盈入库 + stockTaskInSummarySql = "select po.externalCode, case when po.specification is null then po.name else po.name || '['|| po.specification ||']' end name, sum(gei.amount) amount from DisposableGoods po " + +" left join GodownEntryItem gei on po.id=gei.disposableGoodsId" + +" and gei.godownEntry_id in (select id from GodownEntry f where f.subType='" + GodownEntry.SUBTYPE_STOCKTAKE_IN + "' " + timeCondition + +" and warehouseID in (select id from WareHouse where orgUnitCode='" + orgUnitCoding + "')) where 1=1 " + goodsNameCondition + gradeCondition + +" group by po.externalCode, po.name,po.specification order by po.externalCode"; + + //一次性物品信息入库数量-调拨出库 + moveOutSummarySql = "select po.externalCode, case when po.specification is null then po.name else po.name || '['|| po.specification ||']' end name, -1 * sum(gei.amount) amount from DisposableGoods po " + +" left join GodownEntryItem gei on po.id=gei.disposableGoodsId" + +" and gei.godownEntry_id in (select id from GodownEntry f where f.subType='" + GodownEntry.SUBTYPE_MOVE_OUT + "' " + timeCondition + +" and warehouseID in (select id from WareHouse where orgUnitCode='" + orgUnitCoding + "')) where 1=1 " + goodsNameCondition + gradeCondition + +" group by po.externalCode, po.name,po.specification order by po.externalCode"; + + //一次性物品信息入库数量-盘亏出库 + stockTaskOutSummarySql = "select po.externalCode, case when po.specification is null then po.name else po.name || '['|| po.specification ||']' end name, -1 * sum(gei.amount) amount from DisposableGoods po" + +" left join GodownEntryItem gei on po.id=gei.disposableGoodsId" + +" and gei.godownEntry_id in (select id from GodownEntry f where f.subType = '" + GodownEntry.SUBTYPE_STOCKTAKE_OUT + "' " + timeCondition + +" and warehouseID in (select id from WareHouse where orgUnitCode='" + orgUnitCoding + "')) where 1=1 " + goodsNameCondition + gradeCondition + +" group by po.externalCode, po.name,po.specification order by po.externalCode"; + + //一次性物品信息入库数量-退库单 + outStorageSummarySql = "select po.externalCode, case when po.specification is null then po.name else po.name || '['|| po.specification ||']' end name, -1 * sum(gei.amount) amount from DisposableGoods po " + +" left join GodownEntryItem gei on po.id=gei.disposableGoodsId" + +" and gei.godownEntry_id in (select id from GodownEntry f where f.type='" + GodownEntry.TYPE_OUT + "' " + timeCondition + +" and warehouseID in (select id from WareHouse where orgUnitCode='" + orgUnitCoding + "')) where 1=1 " + goodsNameCondition + gradeCondition + +" group by po.externalCode, po.name,po.specification order by po.externalCode"; + + //一次性物品信息出库数量查询-发货 + invoiceSummarySql = "select po.externalCode, case when po.specification is null then po.name else po.name || '['|| po.specification ||']' end name, sum(ii.amount) amount from DisposableGoods po" + +" left join InvoiceItem ii on po.id=ii.disposableGoodsId" + +" and ii.invoice_id in (select id from Invoice f where 1=1 " + sendTimeCondition + " and f.orgUnitCoding='" + orgUnitCoding + "') where 1=1 " + goodsNameCondition + gradeCondition + +" group by po.externalCode, po.name,po.specification order by po.externalCode"; + + //一次性物品信息出库数量查询-退货 + returnSummarySql = "select po.externalCode, case when po.specification is null then po.name else po.name || '['|| po.specification ||']' end name, -1*sum(rgi.amount) amount from DisposableGoods po " + +" left join ReturnGoodsItem rgi on po.id=rgi.disposableGoodsId" + +" and rgi.returnGoodsRecord_ID in (select id from ReturnGoodsRecord f where 1=1 " + returnTimeCondition + " and f.handleDepartCode='" + orgUnitCoding + "') where 1=1 " + goodsNameCondition + gradeCondition + +" group by po.externalCode, po.name,po.specification order by po.externalCode"; + }else{ + //sqlserver与oracle以外的数据库处理 + } + + List> goodsPlanSummaryMapList = getGoodsAmountSummaryByGradeMap(goodsPlanSummarySql); + List> inStorageSummaryMapList = getGoodsAmountSummaryByGradeMap(inStorageSummarySql); + List> moveInSummaryMapList = getGoodsAmountSummaryByGradeMap(moveInSummarySql); + List> stockTaskInSummaryMapList = getGoodsAmountSummaryByGradeMap(stockTaskInSummarySql); + List> moveOutSummaryMapList = getGoodsAmountSummaryByGradeMap(moveOutSummarySql); + List> stockTaskOutSummaryMapList = getGoodsAmountSummaryByGradeMap(stockTaskOutSummarySql); + + List> outStorageSummaryMapList = getGoodsAmountSummaryByGradeMap(outStorageSummarySql); + List> invoiceSummaryMapList = getGoodsAmountSummaryByGradeMap(invoiceSummarySql); + List> returnSummaryMapList = getGoodsAmountSummaryByGradeMap(returnSummarySql); + + if(CollectionUtils.isNotEmpty(goodsPlanSummaryMapList)){ + for (int i = 0; i < goodsPlanSummaryMapList.size(); i++) { + Map goodsPlanSummaryMap = goodsPlanSummaryMapList.get(i); + Map inStorageSummaryMap = inStorageSummaryMapList.get(i); + Map moveInSummaryMap = moveInSummaryMapList.get(i); + Map moveOutSummaryMap = moveOutSummaryMapList.get(i); + Map stockTaskInSummaryMap = stockTaskInSummaryMapList.get(i); + Map stockTaskOutSummaryMap = stockTaskOutSummaryMapList.get(i); + Map outStorageSummaryMap = outStorageSummaryMapList.get(i); + Map invoiceSummaryMap = invoiceSummaryMapList.get(i); + Map returnSummaryMap = returnSummaryMapList.get(i); + + long goodsPlanAmount = goodsPlanSummaryMap.get("amount") == null ? 0 : ((Number)goodsPlanSummaryMap.get("amount")).longValue(); + + long inStorageAmount = inStorageSummaryMap.get("amount") == null ? 0 : ((Number)inStorageSummaryMap.get("amount")).longValue(); + long moveInAmount = moveInSummaryMap.get("amount") == null ? 0 : ((Number)moveInSummaryMap.get("amount")).longValue(); + long moveOutAmount = moveOutSummaryMap.get("amount") == null ? 0 : ((Number)moveOutSummaryMap.get("amount")).longValue(); + long stockTaskInAmount = stockTaskInSummaryMap.get("amount") == null ? 0 : ((Number)stockTaskInSummaryMap.get("amount")).longValue(); + long stockTaskOutAmount = stockTaskOutSummaryMap.get("amount") == null ? 0 : ((Number)stockTaskOutSummaryMap.get("amount")).longValue(); + long outStorageAmount = outStorageSummaryMap.get("amount") == null ? 0 : ((Number)outStorageSummaryMap.get("amount")).longValue(); + long inTotalAmount = inStorageAmount + moveInAmount + moveOutAmount + stockTaskInAmount + stockTaskOutAmount + outStorageAmount; + + long invoiceAmount = invoiceSummaryMap.get("amount") == null ? 0 : ((Number)invoiceSummaryMap.get("amount")).longValue(); + long returnAmount = returnSummaryMap.get("amount") == null ? 0 : ((Number)returnSummaryMap.get("amount")).longValue(); + long outTotalAmount = invoiceAmount + returnAmount; + + if(goodsPlanAmount != 0 && inTotalAmount != 0 && outTotalAmount != 0){ + GoodsAmountSummaryByGrade vo = new GoodsAmountSummaryByGrade(); + vo.setExternalCode((String)goodsPlanSummaryMap.get("externalCode")); + vo.setName((String)goodsPlanSummaryMap.get("name")); + /*logger.debug("##########externalCode=" + vo.getExternalCode() + ",goodsPlanAmount=" +goodsPlanAmount+ + ",inTotalAmount=" +inTotalAmount+ ",outTotalAmount=" +outTotalAmount);*/ + vo.setGoodsPurchaseAmount(goodsPlanAmount); + vo.setInStorageAmount(inTotalAmount); + vo.setOutStorageAmount(outTotalAmount); + returnList.add(vo); + } + } + } + + return returnList; + } + + /** + * 根据汇总语句生成到集合中 + * @param summarySql + * @return + */ + private List> getGoodsAmountSummaryByGradeMap(String summarySql){ +// logger.debug("getGoodsAmountSummaryByGradeMap:summarySql=" + summarySql); + List> list = new ArrayList>(); + ResultSet rs = null; + try{ + rs = objectDao.executeSql(summarySql); + while(rs.next()){ + Map map = new HashMap(); + map.put("externalCode", rs.getString("externalCode")); + map.put("name", rs.getString("name")); + map.put("amount", rs.getObject("amount")); + list.add(map); + } + }catch(Exception e){ + e.printStackTrace(); + } + return list; + } + private void addEntryItem(List vos,String supplierName,Long amout,Double cost){ if(vos == null){ return; Index: ssts-web/src/main/webapp/disinfectsystem/reportforms/goodsAmountSummaryByGradeView.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/reportforms/goodsAmountSummaryByGradeView.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/reportforms/goodsAmountSummaryByGradeView.js (revision 13500) @@ -0,0 +1,265 @@ +var entityName = "一次性物品三类查询报表"; +var grid; + +var reportParamTitle = '一次性物品三类查询报表'; +var reportParamAuthor = username; +var reportParamSheetId = ''; +var reportParamOrgUnit = orgUnit; +var reportParamUnit = '元'; + +var diposableGoodsStore = new Ext.data.Store({ + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/diposableGoodsAction!getMaterialAndDiposableGoodsData.do', + method : 'POST' + }), + reader : new Ext.data.JsonReader({ + totalProperty : 'totalCount', + root : 'data' + }, [ + {name : 'id',mapping : 'id'}, + {name : 'name',mapping : 'name'} + ]), + listeners:{ + beforeload:function(store,options){ + store.baseParams['goodsType'] = "disposableGoods"; + } + } +}); + +var myMask; +Ext.onReady(function() { + Ext.QuickTips.init(); + // 记录cookie(3步) + + function reloadReport(){ + var timeStart= $Id('timeStart').value; + var timeEnd= $Id('timeEnd').value; + var goodsName = $Id('goodsName').value; + goodsName = goodsName.replace(/\%/g,'%25'); + goodsName = goodsName.replace('#','%23'); + var grade = Ext.getCmp('grade').getValue(); + myMask = new Ext.LoadMask(Ext.getBody(), { + msg: '正在加载,请稍候!', + removeMask: true + }); + myMask.show(); + var reportUrl = WWWROOT + "/jasperreports/jasperreportsAction!createReportFromJavaBeanSource.do?" + + "jasperreportName=GoodsAmountSummaryByGrade.jasper" + + "&reportName=goodsAmountSummaryByGrade" + + "&timeStart=" + timeStart + + "&timeEnd=" + timeEnd + + "&goodsName=" + goodsName + + "&title=" + reportParamTitle + + "&author=" + reportParamAuthor + + "&orgUnit=" + reportParamOrgUnit + + "&sheetId=" + reportParamSheetId + + "&unit=" + reportParamUnit + + "&grade=" + grade; + window.open(reportUrl, 'thisIframe','_self'); + } + + Ext.ux.ForgonPageGrid.prototype.getGridParameterMap = function() {}; + + var dt = new Date(); + var year = dt.getFullYear(); + var nextMonth = dt.getMonth() + 1; + var nextMonthFirstDay = new Date(year,nextMonth,1); + var monthLastDay = new Date(nextMonthFirstDay.getTime() - 1000*60*60*24); + var startDayOfMonth = dt.getFullYear() + "/" + (dt.getMonth() + 1) + "/01"; + + //类别数据源 + var gradeStore = new Ext.data.SimpleStore({ + data:[['一类'],['二类'],['三类']], + fields:['name'] + }); + + var form = new Ext.form.FormPanel({ + title : entityName, + region : 'north', + labelAlign : 'right', + buttonAlign : 'center', + collapsible : true, + collapseMode : 'mini', + split : true, + border : 0, + frame : true, + bodyStyle : 'padding:0px auto;margin:0px', + height : 130, + items : [{ + layout : 'column', + height : 50, + items : [{ + layout : 'form', + labelWidth : 60, + columnWidth : .15, + items : [{ + columnWidth : .5, + layout : 'form', + labelWidth : 70, + items : [{ + xtype : 'datefieldWithMin', + fieldLabel : '开始日期', + id : 'timeStart', + name : 'timeStart', + editable : false, + format : 'Y-m-d', + altFormats:'Y-m-d|Y-n-j|y-n-j|y-m-j|y-m-d|y-n-d|Y-n-d|Y-m-j|Ymd|Ynj|ynj|ymj|ymd|ynd|Ynd|Ymj|Y/m/d|Y/n/j|y/n/j|y/m/j|y/m/d|y/n/d|Y/n/d|Y/m/j', + allowBlank : false, + anchor : '95%', + value: new Date(startDayOfMonth), + listeners : { + specialkey : function(field, e) { + if (e.getKey() == Ext.EventObject.ENTER) { + var isOK = field.validate(); + if(isOK){ + var value = field.getValue(); + field.setValue(value); + var endTime = Ext.getCmp('timeEnd'); + endTime.setValue(''); + endTime.focus(); + } + } + } + } + + }] + }] + },{ + layout : 'form', + labelWidth : 60, + columnWidth : .15, + items : [{ + columnWidth : .5, + layout : 'form', + labelWidth : 70, + items : [{ + xtype : 'datefieldWithMin', + fieldLabel : '结束日期', + id : 'timeEnd', + name : 'timeEnd', + editable : false, + format : 'Y-m-d', + altFormats:'Y-m-d|Y-n-j|y-n-j|y-m-j|y-m-d|y-n-d|Y-n-d|Y-m-j|Ymd|Ynj|ynj|ymj|ymd|ynd|Ynd|Ymj|Y/m/d|Y/n/j|y/n/j|y/m/j|y/m/d|y/n/d|Y/n/d|Y/m/j', + allowBlank : false, + anchor : '95%', + value: monthLastDay, + listeners : { + specialkey : function(field, e) { + if (e.getKey() == Ext.EventObject.ENTER) { + var isOK = field.validate(); + if(isOK){ + var value = field.getValue(); + field.setValue(value); + } + } + } + } + }] + }] + }, { + layout : 'form', + labelWidth : 60, + columnWidth : .1, + items : [{ + fieldLabel : '类别', + xtype : 'combo', + id : 'grade', + name : 'grade', + queryParam : 'spell', + minChars : 0, + valueField : 'name', + displayField : 'name', + width : 100, + mode : 'local', + store : gradeStore, + forceSelection : true, + triggerAction : 'all', + editable : false, + allowBlank : true, + anchor : '97%' + }] + }, { + layout : 'form', + labelWidth : 60, + columnWidth : .2, + items : [{ + fieldLabel : '物品', + xtype : 'combo', + id : 'goodsName', + name : 'goodsName', + queryParam : 'spell', + minChars : 0, + valueField : 'id', + displayField : 'name', + width : 300, + store : diposableGoodsStore, + forceSelection : true, + lazyInit : true, + triggerAction : 'all', + hideTrigger : true, + typeAhead : false, + allowBlank : true, + anchor : '97%', + listeners : { + select : function(combo, record, index) { + Ext.getCmp('goodsName').setValue(record.data.name); + } + } + }] + }] + }], + buttons:[{ + xtype : 'button', + text : '查询', + minWidth : 70, + iconCls : 'icon_search', + handler : function() { + reloadReport(); + } + },{ + xtype : 'button', + text : '重置', + minWidth : 70, + iconCls : 'icon_set', + handler : function() { + $Id('timeStart').value = ""; + $Id('timeEnd').value = ""; + Ext.getCmp('goodsName').setValue(""); + Ext.getCmp('grade').setValue(); + } + }] + }); + + + myMask = new Ext.LoadMask(Ext.getBody(), { + msg: '正在加载,请稍候!', + removeMask: true + }); + myMask.show(); + var firstReprotUrl = WWWROOT + "/jasperreports/jasperreportsAction!createReportFromJavaBeanSource.do?" + + "jasperreportName=GoodsAmountSummaryByGrade.jasper" + + "&reportName=goodsAmountSummaryByGrade" + + "&title=" + reportParamTitle + + "&author=" + reportParamAuthor + + "&orgUnit=" + reportParamOrgUnit + + "&sheetId=" + reportParamSheetId + + "&unit=" + reportParamUnit; + var reportForm = new Ext.Panel({ + frame:false,//渲染面板 + autoScroll:true,//自动显示滚动条 + collapsible:true,//允许展开和收缩 + bodyPadding:5, + html:'' + }); + + var viewport = new Ext.Viewport({ + layout : 'border', + items : [form, { + id:'reportPanel', + region : 'center', + margins : '0 0 0 0', + layout : 'fit', + items : reportForm + }] + }); +}); \ No newline at end of file Index: ssts-web/src/main/webapp/jasperRtp/GoodsAmountSummaryByGrade.jrxml =================================================================== diff -u --- ssts-web/src/main/webapp/jasperRtp/GoodsAmountSummaryByGrade.jrxml (revision 0) +++ ssts-web/src/main/webapp/jasperRtp/GoodsAmountSummaryByGrade.jrxml (revision 13500) @@ -0,0 +1,181 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <band height="30" splitType="Stretch"> + <textField> + <reportElement uuid="571023d4-a950-445e-b9ae-db043f55a5dc" x="0" y="0" width="595" height="30"/> + <textElement textAlignment="Center" verticalAlignment="Middle"> + <font size="14" isBold="true"/> + </textElement> + <textFieldExpression><![CDATA[$P{title}]]></textFieldExpression> + </textField> + </band> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java =================================================================== diff -u -r13424 -r13500 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java (.../GodownEntryManagerImpl.java) (revision 13424) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java (.../GodownEntryManagerImpl.java) (revision 13500) @@ -975,6 +975,7 @@ String grade = godownEntryItem.getGrade(); if(!StringUtils.equals(originalGrade, grade)){ curGodownEntryItem.setGrade(grade); + disposableGoods.setGrade(godownEntryItem.getGrade()); } objectDao.update(identification); objectDao.update(disposableGoodsBatchStock); Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java =================================================================== diff -u -r13316 -r13500 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java (.../JasperReportManager.java) (revision 13316) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java (.../JasperReportManager.java) (revision 13500) @@ -24,6 +24,7 @@ import com.forgon.disinfectsystem.jasperreports.javabeansource.ForeignTousseApplicationVO; import com.forgon.disinfectsystem.jasperreports.javabeansource.GodownEntryItemVo; import com.forgon.disinfectsystem.jasperreports.javabeansource.GodownEntryStatistic_main; +import com.forgon.disinfectsystem.jasperreports.javabeansource.GoodsAmountSummaryByGrade; import com.forgon.disinfectsystem.jasperreports.javabeansource.InvoiceAmountContrastBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.InvoiceQuery; import com.forgon.disinfectsystem.jasperreports.javabeansource.MaterialWashUnqualified; @@ -278,6 +279,17 @@ * @return */ public List getGodownSummaryReport(String startTime,String endTime,String suplier,String warehouseId,String type,String hasInvoice,String goodsType); + + /** + * 根据物品、时间范围、类别等条件按物品分组统计采购计划数量、入库数量、出库数量 + * @param timeStart + * @param timeEnd + * @param goodsName + * @param grade + * @param orgUnitCoding + * @return + */ + public List getGoodsAmountSummaryByGrade(String timeStart, String timeEnd, String goodsName,String grade,String orgUnitName); public List getStockTakeList(StockTakeRecord startRecord, StockTakeRecord endRecord,String type, String summaryType); } Index: ssts-web/src/main/webapp/jasperRtp/GoodsAmountSummaryByGrade.jasper =================================================================== diff -u Binary files differ