Index: ssts-web/src/main/webapp/disinfectsystem/reportforms/invoiceQueryView.js =================================================================== diff -u -r14363 -r15302 --- ssts-web/src/main/webapp/disinfectsystem/reportforms/invoiceQueryView.js (.../invoiceQueryView.js) (revision 14363) +++ ssts-web/src/main/webapp/disinfectsystem/reportforms/invoiceQueryView.js (.../invoiceQueryView.js) (revision 15302) @@ -22,6 +22,7 @@ showResult("请选择开始时间、结束时间!"); return; } + var goodsType = Ext.getCmp('goodsType').getValue(); var summaryType = Ext.getCmp('summaryType').getValue(); if(summaryType == ""){ showResult("请选择统计类型!"); @@ -47,12 +48,14 @@ + departSearch+ "&settleDepartSearch=" + settleDepartSearch +"&startDate=" + startDate + "&endDate=" +endDate + "&applicant=" + applicant + "&goodsName=" +goodsName + "&hasRemark=" +hasRemark + + "&goodsType=" + goodsType + "&batchNumber=" + batchNumber + "&hospitalNumber=" + hospitalNumber,'thisIframe', '_self'); }else{ window.open(WWWROOT + "/jasperreports/jasperreportsAction!createReportFromJavaBeanSource.do?jasperreportName=invoiceItemsQuery_main_1.jasper&reportName=invoiceQuery&depart=" + departSearch+ "&settleDepartSearch=" + settleDepartSearch +"&startDate=" + startDate + "&endDate=" +endDate + "&applicant=" + applicant + "&goodsName=" +goodsName + "&hasRemark=" +hasRemark + + "&goodsType=" + goodsType + "&batchNumber=" + batchNumber  + "&hospitalNumber=" + hospitalNumber,'thisIframe', '_self'); } } @@ -101,6 +104,11 @@ ) }); + var goodsTypeStore = new Ext.data.SimpleStore( { + fields : ['value'], + data : [ ['全部'],['全部器械包'],['器械包'],['敷料包'],['消毒物品'],['外来器械包'],['自定义器械包'],['外部代理灭菌包'],['一次性物品'],['器械材料'],['高值耗材'] ] + }); + var summaryTypeStore = new Ext.data.SimpleStore( { fields : ['value'], data : [ ['发货汇总'],['发货明细']] @@ -157,7 +165,7 @@ anchor : '100%' }] },{ - columnWidth : .4, + columnWidth : .2, layout : 'form', labelWidth : 70, items : [{ @@ -182,9 +190,28 @@ } } }] - } ,{ + },{ columnWidth : .2, layout : 'form', + labelWidth : 90, + items : [{ + xtype : 'combo', + fieldLabel : '物品类型', + id : 'goodsType', + name : 'goodsType', + valueField : 'value', + displayField : 'value', + store : goodsTypeStore, + forceSelection : true, + value:'全部', + editable : false, + mode : 'local', + triggerAction : 'all', + anchor : '95%' + }] + },{ + columnWidth : .2, + layout : 'form', labelWidth : 60, items : [{ xtype : 'combo', Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java =================================================================== diff -u -r15152 -r15302 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 15152) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 15302) @@ -448,33 +448,9 @@ startTime,endTime, departSearch, departCoding,tousseType, goodsSearch, batch,searchType,disinfection, disposableGoodsType,goodsType,showCustonTousseAmount); } else if (reportName.equals("invoiceQuery")) { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - String depart = StrutsParamUtils.getPraramValue("depart", ""); - String settleDepartSearch = StrutsParamUtils.getPraramValue("settleDepartSearch", ""); - String startDate = StrutsParamUtils.getPraramValue("startDate", sdf.format(new Date())); - String endDate = StrutsParamUtils.getPraramValue("endDate", sdf.format(new Date())); - String applicant = StrutsParamUtils.getPraramValue("applicant", ""); - String goodsName = StrutsParamUtils.getPraramValue("goodsName", ""); - String batchNumber = StrutsParamUtils.getPraramValue("batchNumber",""); - String hospitalNumber = StrutsParamUtils.getPraramValue("hospitalNumber", ""); - //有无备注 - String hasRemark = StrutsParamUtils.getPraramValue("hasRemark",""); - return jasperReportManager.getInvoiceItems(settleDepartSearch,depart, startDate, - endDate, applicant, goodsName, batchNumber,null,hasRemark,hospitalNumber); + return jasperReportManager.getInvoiceDetailItems(StrutsParamUtils.getParameters()); }else if(reportName.equals("invoiceSummaryQuery")){//发货汇总报表 - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - String depart = StrutsParamUtils.getPraramValue("depart", ""); - String settleDepartSearch = StrutsParamUtils.getPraramValue("settleDepartSearch", ""); - String startDate = StrutsParamUtils.getPraramValue("startDate", sdf.format(new Date())); - String endDate = StrutsParamUtils.getPraramValue("endDate", sdf.format(new Date())); - String applicant = StrutsParamUtils.getPraramValue("applicant", ""); - String goodsName = StrutsParamUtils.getPraramValue("goodsName", ""); - String batchNumber = StrutsParamUtils.getPraramValue("batchNumber",""); - String hospitalNumber = StrutsParamUtils.getPraramValue("hospitalNumber", ""); - //有无备注 - String hasRemark = StrutsParamUtils.getPraramValue("hasRemark",""); - return jasperReportManager.getInvoiceItems(settleDepartSearch,depart, startDate, - endDate, applicant, goodsName, batchNumber,"summary",hasRemark,hospitalNumber); + return jasperReportManager.getInvoiceSummaryItems(StrutsParamUtils.getParameters()); }else if (reportName.equals("materialWashUnqualifiedPositionPicChart")) {// 器械材料清洗不合格部位数量统计月报 String month = StrutsParamUtils.getPraramValue("month", null); if (month != null) { Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r15297 -r15302 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 15297) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 15302) @@ -172,6 +172,7 @@ import com.forgon.tools.string.StringTools; import com.forgon.tools.util.ForgonDateUtils; import com.forgon.tools.util.SqlUtils; +import com.forgon.util.DefaultValue; /** * @author wangyi 2012-08-15 上午12:04 报表服务类 @@ -6800,10 +6801,64 @@ }); } - @Override - public List getInvoiceItems(String settleDepartSearch,String depart, String startDate, - String endDate, String applicant, String goodsName, - String batchNumber,String type,String hasRemark,String hospitalNumber) { + /** + * 获取发货物品查询汇总列表数据 + * @param requestParams 前台传入的参数 + * @return + */ + public List getInvoiceSummaryItems(Map requestParams){ + return getInvoiceItems(requestParams,"summary"); + } + /** + * 获取发货物品查询明细列表数据 + * @param requestParams 前台传入的参数 + * @return + */ + public List getInvoiceDetailItems(Map requestParams){ + return getInvoiceItems(requestParams,null); + } + /** + * 获取发货物品查询报表的数据源,明细和汇总都调用此方法 + * @param requestParams 前台传入的参数 + * @param type 值为summary表示汇总,否则是明细 + * @return + */ + private List getInvoiceItems(Map requestParams,String type) { + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + String depart = requestParams.get("depart"); + String settleDepartSearch = requestParams.get("settleDepartSearch"); + String startDate = DefaultValue.date(requestParams.get("startDate"),Constants.SIMPLEDATEFORMAT_YYYYMMDD); + String endDate = DefaultValue.date(requestParams.get("endDate"), Constants.SIMPLEDATEFORMAT_YYYYMMDD); + String applicant = requestParams.get("applicant"); + String goodsName = requestParams.get("goodsName"); + String batchNumber = requestParams.get("batchNumber"); + String hospitalNumber = requestParams.get("hospitalNumber"); + String goodsType = StringTools.defaultIfEmpty(requestParams.get("goodsType"),"全部"); + String tousseTypeSql = " 1=1 "; + String disposableTypeSql = " 1=1 "; + String materialTypeSql = " 1=1 "; + if(StringTools.equals("一次性物品", goodsType)){ + tousseTypeSql = " 1=2 "; + disposableTypeSql = " 1=1 "; + materialTypeSql = " 1=2 "; + }else if(StringTools.equals("器械材料", goodsType)){ + tousseTypeSql = " 1=2 "; + disposableTypeSql = " 1=2 "; + materialTypeSql = " 1=1 "; + }else if(StringTools.equals("高值耗材", goodsType)){ + tousseTypeSql = " 1=2 "; + materialTypeSql = " dg.goodsType = '"+MaterialDefinition.TYPE_EXPENSIVEMATERIALGOODS+"'"; + disposableTypeSql = " bo.expensiveDisposablegoodsId is not null "; + }else if(!StringTools.equals("全部", goodsType)){ + //器械包的类型 + tousseTypeSql = SqlUtils.getStringFieldInCollectionsPredicate("td.tousseType", getTousseTypes(goodsType)); + disposableTypeSql = " 1=2 "; + materialTypeSql = " 1=2 "; + } + //有无备注 + String hasRemark = requestParams.get("hasRemark"); + boolean isSummary = "summary".equals(type); boolean isDisinfection = tousseDefinitionManager.isDisinfection(goodsName); if (isDisinfection) { @@ -6840,25 +6895,27 @@ } String sql = " "; - String tousseSql = "select '器械包' as type,po.orgUnitCoding,po.settleAccountsDepart,po.depart,do.barcode,bo.tousseName as name,bo.price," - + "bo.statisticsAmount as amount,po.sendTime,po.applicant,'' as batch,'' as externalCode,po.remark as remark,bo.sterileEndTime as sterileEndTime," + String tousseSql = "select '器械包' as type,po.orgUnitCoding,po.settleAccountsDepart,po.depart,do.barcode,bo.tousseName as name,bo.price / bo.statisticsAmount as price," + + " statisticsAmount as amount,bo.price as totalPrice,po.sendTime,po.applicant,'' as batch,'' as externalCode,po.remark as remark,bo.sterileEndTime as sterileEndTime," + "bo.sterilizerName as sterilizerName,bo.sterileFrequency as sterileFrequency,po.hospitalNumber as hospitalNumber,po.sender,po.assistantSender,bo.validUntil as expDate from " - + Invoice.class.getSimpleName() + " po," + BarcodeDevice.class.getSimpleName()+ " do," - + TousseInstance.class.getSimpleName()+" bo where po.id = bo.invoice_id and bo.id = do.id " + remarkCondition + hospitalNumberSql; - String diposableSql = "select '一次性物品' as type,po.orgUnitCoding, po.settleAccountsDepart,po.depart,bo.barcode,bo.name,bo.price,bo.amount," + + Invoice.class.getSimpleName() + " po inner join " + TousseInstance.class.getSimpleName() + " bo on po.id = bo.invoice_id " + + " inner join " + BarcodeDevice.class.getSimpleName()+ " do on bo.id = do.id" + + " inner join " + TousseDefinition.class.getSimpleName() + " td on bo.tousseDefinition_id=td.id " + +" where 1=1 " + remarkCondition + hospitalNumberSql + " and " + tousseTypeSql; + String diposableSql = "select '一次性物品' as type,po.orgUnitCoding, po.settleAccountsDepart,po.depart,bo.barcode,bo.name,bo.price,bo.amount,bo.price*bo.amount as totalPrice," + "po.sendTime,po.applicant,bo.batch,dg.externalCode,po.remark as remark,'' as sterileEndTime,'' as sterilizerName,'' as sterileFrequency," + "po.hospitalNumber as hospitalNumber,po.sender,po.assistantSender,dgbs.expDate from " + Invoice.class.getSimpleName() + " po," + DiposableGoodsItem.class.getSimpleName()+" bo," + DisposableGoods.class.getSimpleName() + " dg,"+ DisposableGoodsBatchStock.class.getSimpleName() +" dgbs where po.id = bo.invoice_id and " + " bo.disposableGoodsBatchStockID=dgbs.id and " - + "bo.disposableGoodsID = dg.id " + remarkCondition + hospitalNumberSql; - String materialSql = "select '材料' as type,po.orgUnitCoding, po.settleAccountsDepart,po.depart,'' as barcode,bo.name as name,bo.price as price,bo.amount," + + "bo.disposableGoodsID = dg.id " + remarkCondition + hospitalNumberSql + " and " + disposableTypeSql; + String materialSql = "select '材料' as type,po.orgUnitCoding, po.settleAccountsDepart,po.depart,'' as barcode,bo.name as name,bo.price as price,bo.amount,bo.price*bo.amount as totalPrice," + "po.sendTime,'' as applicant,'' as batch,dg.externalCode,po.remark as remark,'' as sterileEndTime,'' as sterilizerName,'' as sterileFrequency," + "'' as hospitalNumber,po.sender,'' as assistantSender,null as expDate from " + MaterialInvoice.class.getSimpleName() + " po inner join " + MaterialItem.class.getSimpleName() + " bo on po.id = bo.materialInvoice_id " + " inner join " + GoodsStock.class.getSimpleName() + " gs on gs.id = bo.goodsStockId inner join " + MaterialDefinition.class.getSimpleName() + " dg on gs.materialDefinitionId = dg.id " - + "where (1=1) " + remarkCondition; + + "where (1=1) " + remarkCondition + " and " + materialTypeSql; if(StringUtils.isNotBlank(hospitalNumberSql)){ materialSql += " and 1=2 "; @@ -6894,6 +6951,7 @@ InvoiceQuerySummaryService summaryService = new InvoiceQuerySummaryService(isSummary); + //System.out.println("执行sql:" + sql); ResultSet rs2 = objectDao.executeSql(sql); try { while (rs2.next()) { @@ -6905,7 +6963,7 @@ item.setPrice(rs2.getDouble("price")); item.setAmount(rs2.getInt("amount")); Integer amount = item.getAmount(); - item.setTotalPrice(item.getPrice() * item.getAmount()); + item.setTotalPrice(rs2.getDouble("totalPrice")); item.setTime(rs2.getString("sendTime")); item.setApplicant(rs2.getString("applicant")); item.setBatch(rs2.getString("batch")); Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/InvoiceQueryItem.java =================================================================== diff -u -r15297 -r15302 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/InvoiceQueryItem.java (.../InvoiceQueryItem.java) (revision 15297) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/InvoiceQueryItem.java (.../InvoiceQueryItem.java) (revision 15302) @@ -6,6 +6,7 @@ import java.util.Date; import com.forgon.Constants; +import com.forgon.tools.MathTools; import com.forgon.tools.string.StringTools; import com.forgon.tools.util.ForgonDateUtils; @@ -156,10 +157,10 @@ this.totalPrice = totalPrice; } /** - * 计算总价 + * 计算单价。由于数量有可能是按包计算,也有可能是按材料计算,同一个包,总价是一样的,但是数量可能不一样,导致单价会不一样,所以用总价除以数量来计算单价 */ - public void calcTotalPrice(){ - setTotalPrice(getAmount() * getPrice()); + public void calcPrice(){ + setPrice(MathTools.divide(getTotalPrice(), getAmount(), 4)); } public String getRemark() { Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/InvoiceQuerySummaryService.java =================================================================== diff -u -r13100 -r15302 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/InvoiceQuerySummaryService.java (.../InvoiceQuerySummaryService.java) (revision 13100) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/InvoiceQuerySummaryService.java (.../InvoiceQuerySummaryService.java) (revision 15302) @@ -25,7 +25,7 @@ this.isSummary = isSummary; } public List getList(){ - invoiceQueryList.forEach(query->query.getQueryItems().forEach(item->item.calcTotalPrice())); + invoiceQueryList.forEach(query->query.getQueryItems().forEach(item->item.calcPrice())); return invoiceQueryList; } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java =================================================================== diff -u -r14888 -r15302 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java (.../JasperReportManager.java) (revision 14888) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java (.../JasperReportManager.java) (revision 15302) @@ -158,9 +158,18 @@ String startTime,String endTime, String depart,String departCoding,String type, String goodsName, String batch,String searchType,boolean disinfection,String disposableGoodsType,String goodsType,Boolean showCustonTousseAmount); - public List getInvoiceItems(String settleDepartSearch,String depart, String startDate, - String endDate, String applicant, String goodsName, - String batchNumber,String type,String hasRemark,String hospitalNumber); + /** + * 获取发货物品查询汇总列表数据 + * @param requestParams 前台传入的参数 + * @return + */ + public List getInvoiceSummaryItems(Map requestParams); + /** + * 获取发货物品查询明细列表数据 + * @param requestParams 前台传入的参数 + * @return + */ + public List getInvoiceDetailItems(Map requestParams); public List getWorkQualityCollectionList( String year, String type,String querySupplyRoom,String month) throws ParseException, Index: forgon-core/src/main/java/com/forgon/util/DefaultValue.java =================================================================== diff -u --- forgon-core/src/main/java/com/forgon/util/DefaultValue.java (revision 0) +++ forgon-core/src/main/java/com/forgon/util/DefaultValue.java (revision 15302) @@ -0,0 +1,30 @@ +package com.forgon.util; + +import java.text.SimpleDateFormat; +import java.util.Date; + +import com.forgon.Constants; +import com.forgon.tools.string.StringTools; + +/** + * 各种数据类型,取默认值的类。判断为空或null,则取默认值 + * @author kzh + * + */ +public class DefaultValue { + /** + * 获取日期的默认值。如果date为空,则将当前日期转换为字符串传回 + * @param date 日期值 + * @param sdf + * @return + */ + public static String date(String date,SimpleDateFormat sdf){ + if(StringTools.isBlank(date)){ + if(sdf == null){ + sdf = Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS; + } + return sdf.format(new Date()); + } + return date; + } +}