Index: ssts-web/src/main/webapp/jasperRtp/MorrowSendReportView.jasper =================================================================== diff -u Binary files differ Index: ssts-web/src/main/webapp/disinfectsystem/reportforms/tousseMorrowSend.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/reportforms/tousseMorrowSend.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/reportforms/tousseMorrowSend.js (revision 17365) @@ -0,0 +1,158 @@ +var entityName = "器械包日次下送率统计报表"; +var form; + +/** + * 加载报表的数据 + * + */ +var myMask; +function reloadReport(){ + + if (!form.getForm().isValid()) { + showResult('请正确填写表单各值'); + return false; + } + + var timeSlot= $Id('monthSearch').value; + myMask = new Ext.LoadMask(Ext.getBody(), { + msg: '正在加载,请稍候!', + removeMask: true + }); + myMask.show(); + window.open(WWWROOT + "/jasperreports/jasperreportsAction!createReportFromJavaBeanSource.do" + + "?jasperreportName=MorrowSendReportView.jasper&reportName=tousseMorrowSendReport" + + "&timeSlot=" + timeSlot, + 'thisIframe', '_self'); +} + +Ext.onReady(function() { + + var sterilizationTypeStore = new Ext.data.SimpleStore({ + fields : [ 'id','sterilizationType' ], + url : WWWROOT + '/disinfectSystem/baseData/sterilizerAction!getSterilizerType.do', + listeners : { + beforeload : function(thiz, options){ + thiz.baseParams['sterilizerName'] = Ext.getCmp('sterilizerName').getValue(); + thiz.baseParams['type'] = 'sterilizationRecord'; + }, + load : function(thiz, records, options){ + var sterilizationType = Ext.getCmp('sterilizationType').getValue(); + if (sterilizationType) { + var isExist = false; + for (var i = 0; i < records.length; i++) { + if (sterilizationType == records[i].data.sterilizationType) { + isExist = true; + break; + } + } + if(!isExist){ + Ext.getCmp('sterilizationType').setValue(''); + } + } + } + } + }); + + Ext.QuickTips.init(); + + var dt = new Date(); + var startDayofMonth = dt.getFullYear() + "/" + (dt.getMonth() + 1) + "/01"; + + 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',// padding:1px;padding-top:5px; + height : 105, + items : [{ + layout : 'column', + height : 40, + width : 1024, + labelWidth : 70, + items : [{ + width : 200, + layout : 'form', + labelWidth : 60, + id : 'monthSearch_id', + hidden : false, + items : [ + new Ext.ux.MonthField({ + id:'monthSearch', + name : 'monthSearch', + fieldLabel : '年月', + readOnly : true, + width : 110, + format:'Y-m', + value : new Date(), + listeners : { + specialkey : function(field, ee) { + if (ee.getKey() == Ext.EventObject.ENTER) { +// initQueryValueAndReload(); + } + } + } + })] + }] + }], + buttons:[{ + xtype : 'button', + text : '查询', + minWidth : 70, + iconCls : 'icon_search', + handler : function() { + reloadReport(); + } + },{ + xtype : 'button', + text : '重置', + minWidth : 70, + iconCls : 'icon_set', + handler : function() { + $Id('monthSearch').value = ""; + } + },{ + xtype : 'button', + text : '设置统计的科室', + minWidth : 100, + iconCls : 'icon_set', + handler : function(){ + setapparatusInfuType(model,currentOrgUnitCode); + } + },{ + xtype : 'button', + text : '设置统计的分组', + minWidth : 100, + iconCls : 'icon_set', + handler : function(){ + setTousseGroupType(tousseGroupModel,currentOrgUnitCode); + } + }] + }); + + + var reportForm = new Ext.Panel({ + frame:false,//渲染面板 + autoScroll:true,//自动显示滚动条 + collapsible:true,//允许展开和收缩 + bodyPadding:5, + html:'' + + }); + + var viewport = new Ext.Viewport({ + layout : 'border', + items : [form, { + region : 'center', + margins : '0 0 0 0', + layout : 'fit', + items : reportForm + }] + }); + +}); \ No newline at end of file Index: ssts-web/src/main/webapp/disinfectsystem/reportforms/js/setTousseGroupOption.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/reportforms/js/setTousseGroupOption.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/reportforms/js/setTousseGroupOption.js (revision 17365) @@ -0,0 +1,232 @@ +var formWindowT; +var tousseGroupJsonStore; +var selGroupTypeStore; +function saveSelectGroup(model,code){ + var names = ""; + for ( var i = 0; i < selGroupTypeStore.getCount(); i++) { + var record = selGroupTypeStore.getAt(i); + if (names.length > 0) { + names += ';'; + } + names += record.get('name'); + } + + JasperreportsTableManager.setTousseWorkLoadOption(model,code,names,function(result){ + if(result){ + formWindowT.close(); + showResult("更新成功!"); + }else{ + showResult("更新失败!"); + } + }); +} +var groupRecord = Ext.data.Record.create([ + {name : 'id'}, + {name : 'name'} +]); + +function addTousseGroup(){ + var goodsName = top.Ext.getCmp('tousseSearch').getValue(); + var id = top.Ext.getCmp('tousseSearch').getRawValue(); + + if (goodsName) { + var isExist = false; + for (var i = 0; i < selGroupTypeStore.getCount(); i++) { + var record = selGroupTypeStore.getAt(i); + if(record.get('name') == goodsName){ + isExist = true; + break; + } + } + if(!isExist){ + var record = new groupRecord({ + id : id, + name : goodsName + }); + selGroupTypeStore.add(record); + top.Ext.getCmp('tousseSearch').setValue(''); + }else{ + showResult(goodsName+",已添加!"); + } + } + +} + +function removeTousseGridItem(p){ + selGroupTypeStore.remove(selGroupTypeStore.getAt(p)); +} + +/** + * 设器械包分组 + * @param model 设置分组的类型 + * @param code 科室编码 + */ +function setTousseGroupType(model,code){ + + selGroupTypeStore = new top.Ext.data.Store({ + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/jasperreports/jasperreportsAction!getGoodsOption.do', + method : 'POST' + }), + baseParams : {model:model,code:code}, + reader : new Ext.data.JsonReader({ + fields : [{ + name : 'name' + }] + }) + }); + selGroupTypeStore.load(); + + var cm = new top.Ext.grid.ColumnModel([{ + id:'id', + name:'id', + hidden :true, + dataIndex : 'id' + },{ + id : 'name', + header : "器械包分组名称", + width:240, + dataIndex : 'name' + },{ + id : 'deleteItem', + header:'删除', + width :40, + menuDisabled: true, + dataIndex:'button', + renderer: function(v,p,record,index){ + return ""; + } + }]); + +// tousseGroupJsonStore = new Ext.data.Store({ +// proxy : new Ext.data.HttpProxy({ +// url : WWWROOT + '/disinfectSystem/baseData/supplyRoomConfigAction!getAllOrgUnitName.do', +// method : 'POST' +// }), +// reader : new Ext.data.JsonReader({ +// root : 'data' +// },[ +// {name : 'id',mapping : 'id'}, +// {name : 'name',mapping : 'name'} +// ] +// ) +// }); +// + //器械包分组combo的store + tousseGroupJsonStore = new Ext.data.JsonStore({ + fields : [ 'tousseGroupName','id' ], + url : WWWROOT + '/disinfectSystem/baseData/tousseGroupAction!getAllTousseGroup.do', + listeners:{ + load:function(store,records) { + if(records.length>0 && id==0) { +// if (top.Ext.getCmp('tousseGroupName') && top.Ext.getCmp('tousseGroupName').getValue() == '') { +// top.Ext.getCmp('tousseGroupName').setValue(records[0].data.id); +// } + } + } + } + }); + + var tbar = [ { + text : '选择器械包分组' + },{ + xtype : 'combo', + id : 'tousseSearch', + name : 'tousseSearch', + queryParam : 'spell', + fieldLabel : '器械包分组名称', + minChars : 0, + valueField : 'tousseGroupName', + displayField : 'tousseGroupName', + anchor : '100%', + width:300, + store : tousseGroupJsonStore, + lazyInit : true, + triggerAction : 'all', + hideTrigger : true, + typeAhead : false, + allowBlank : true, + listeners : { + render : function(c) { + c.getEl().on('keypress',function(e) { + if (e.getKey() == 13) {// 输入;号键,grid重新加载 + addTousseGroup(); + } + }); + } + } + },{ + text : '添加', + handler:function(){ + addTousseGroup(); + } + }]; + + formObj = new top.Ext.FormPanel({ + id : 'deviceMaintenanceForm', + frame : true, + labelAlign:'right', + labelSeparator : ':', + bodyStyle : 'padding:5px 5px 0px 5px', + autoWidth : true, + autoHeight : true, + autoScroll : true, + items:[{ + layout : 'column', + items : [{ + xtype : 'hidden', + name : 'id', + id : 'id' + },{ + columnWidth : 1, + layout: 'form', + items : [ + new top.Ext.grid.GridPanel({ + id : 'configGrid', + store : selGroupTypeStore, + tbar : tbar, + cm : cm, + width : 240, + height: 240, + isCheckboxSelectionModel : true, + frame : false, + viewConfig: { + forceFit:true + }, + bodyStyle : 'border:1px solid #afd7af', + anchor : '100%', + selModel : new top.Ext.grid.RowSelectionModel({ + singleSelect : false + }) + }) + ] + }] + }], + buttons : [{ + id : 'saveBtn', + text : '确定', + handler : function(){ + saveSelectGroup(model,code); + } + },{ + id : 'cancleBtn', + text : '取消', + handler : function() { + formWindowT.close(); + } + }] + }); + + formWindowT = new top.Ext.Window( { + id : 'deviceMaintenanceWin', + layout : 'fit', + title : '选择器械包分组', + width : 600, + modal : true, + autoHeight : true, + border : false, + plain : true, + items : [formObj] + }); + formWindowT.show(); +} \ No newline at end of file Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java =================================================================== diff -u -r17322 -r17365 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java (.../JasperReportManager.java) (revision 17322) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManager.java (.../JasperReportManager.java) (revision 17365) @@ -48,6 +48,7 @@ import com.forgon.disinfectsystem.jasperreports.javabeansource.SterilizingStove_child; import com.forgon.disinfectsystem.jasperreports.javabeansource.SummaryUseRecordForGoodsVO; import com.forgon.disinfectsystem.jasperreports.javabeansource.TousseDeliverDetailVO; +import com.forgon.disinfectsystem.jasperreports.javabeansource.TousseMorrowSendBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.TousseOverLoadBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.TousseWorkLoadVO; import com.forgon.disinfectsystem.jasperreports.javabeansource.UseRecordEnteringBean; @@ -478,4 +479,11 @@ */ public List getSterilizationAreaWorkLoadBeans( String monthSearch, String departCoding); + /** + * 获取次日下送统计 报表的数据 + * @param params + * @return + */ + public List getTousseMorrwoSendData( + Map params); } Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java =================================================================== diff -u -r17322 -r17365 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 17322) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/JasperReportManagerImpl.java (.../JasperReportManagerImpl.java) (revision 17365) @@ -7,6 +7,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Timestamp; +import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -166,6 +167,7 @@ import com.forgon.disinfectsystem.jasperreports.javabeansource.SummaryUseRecordForGoodsVO; import com.forgon.disinfectsystem.jasperreports.javabeansource.TousseDeliverDetailVO; import com.forgon.disinfectsystem.jasperreports.javabeansource.TousseItemVO; +import com.forgon.disinfectsystem.jasperreports.javabeansource.TousseMorrowSendBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.TousseOverLoadBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.TousseWorkLoadVO; import com.forgon.disinfectsystem.jasperreports.javabeansource.UseRecordEnteringBean; @@ -5724,7 +5726,30 @@ returnValue.put(year + "年", startAndEndDays); return returnValue; } - + /** + * 通过年月,获取一个月内每天日期的列表,时间返回格式为"2017-02-02" + * @param year + * @param month + * @return + */ + private List getDayList(String year,String month){ + List days = new ArrayList(); + if(StringUtils.isBlank(year) || StringUtils.isBlank(month)){ + return days; + } + Calendar calendar = Calendar.getInstance(); + int year_i = Integer.parseInt(year); + int month_i = Integer.parseInt(month) - 1; + calendar.set(year_i, month_i, 1); + int maxDay = calendar.getActualMaximum(Calendar.DATE); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + for (int j=1; j<=maxDay; j++) { + calendar.set(year_i, month_i, j); + String time = sdf.format(calendar.getTime()); + days.add(time); + } + return days; + } private String getHandleDeptCodeSql(String field) { LoginUserData user = AcegiHelper.getLoginUser(); String handleDeptCodeSql = ""; @@ -13376,7 +13401,358 @@ } return null; } - + /** + * 获取器械包次日下送的bean + * @param params + * @return + */ + @Override + public List getTousseMorrwoSendData( + Map params) { + List voList = new ArrayList(); + Map beanMap = new HashMap(); + String timeSolt = params.get("timeSlot"); + String startDay = timeSolt + "-01 "; + String endDay = ""; + String[] arr = timeSolt.split("-"); + if(arr != null && arr.length > 1){ + endDay = getNextMonth(arr[0],arr[1]) ; + }else{ + return voList; + } + List days = getDayList(arr[0],arr[1]); + List titles = new ArrayList(); + List tousseGroupTitles = new ArrayList(); + String whereDepart = "''"; + String whereTousseGroup = "''"; + GoodsOption optionDepart = goodsOptionManager.getGoodsOption(GoodsOption.MODEL_TOUSSEMORROWSENDDEPART, AcegiHelper.getCurrentOrgUnitCode()); + GoodsOption optionTousseGroup = goodsOptionManager.getGoodsOption(GoodsOption.MODEL_TOUSSEMORROWSENDGROUP, AcegiHelper.getCurrentOrgUnitCode()); + if(optionDepart != null){ + String v = optionDepart.getValue(); + if(StringTools.isNotBlank(v)){ + String[] array = v.split(";"); + String vString = StringTools.join(array, "','"); + vString = "'" + vString + "'"; + whereDepart = vString; + for(String ti : array){ + titles.add(ti); + } + } + } + if(optionTousseGroup != null){ + String v = optionTousseGroup.getValue(); + if(StringTools.isNotBlank(v)){ + String[] array = v.split(";"); + String vString = StringTools.join(array, "','"); + vString = "'" + vString + "'"; + whereTousseGroup = vString ; + for(String ti : array){ + titles.add(ti); + } + } + } + // key 的形式,时间+列头名称+类型 2017_01_01&手术室&回收 + int columnNum = 0; + for(String day : days){ + String key = ""; + columnNum = 0; + for(String title : titles){ + key = day + "&" + title + "&recycle"; + TousseMorrowSendBean bean = new TousseMorrowSendBean(); + bean.setRecycleDate(day); + bean.setColummTitle(title+"回收"); + bean.setColumnNum(columnNum++); + bean.setValue("0"); + beanMap.put(key, bean); + } + key = day + "&" + "total" + "&recycle"; + TousseMorrowSendBean bean1 = new TousseMorrowSendBean(); + bean1.setRecycleDate(day); + bean1.setColummTitle("回收合计"); + bean1.setColumnNum(columnNum++); + bean1.setValue("0"); + beanMap.put(key, bean1); + for(String title : titles ){ + key = day + "&" + title + "&morrowSend"; + TousseMorrowSendBean bean = new TousseMorrowSendBean(); + bean.setRecycleDate(day); + bean.setColummTitle(title+"次日下送数"); + bean.setColumnNum(columnNum++); + bean.setValue("0"); + beanMap.put(key, bean); + } + key = day + "&" + "total" + "&morrowSend"; + TousseMorrowSendBean bean2 = new TousseMorrowSendBean(); + bean2.setRecycleDate(day); + bean2.setColummTitle("次日下送合计"); + bean2.setColumnNum(columnNum++); + bean2.setValue("0"); + beanMap.put(key, bean2); + } + + String dataSql = dateQueryAdapter.dateToVarchar1("rr.recyclingTime"); + // 获取回收数量的sql + String recycleDepartSql = " select " + dataSql + " recycleTime, rr.depart depart,sum(ti.amount) amount " + + " from recyclingRecord rr,TousseItem ti where rr.id = ti.recyclingRecord_id " + + " and ( " + dateQueryAdapter.strDateAreasql("rr.recyclingTime", startDay, endDay, false) + ")" + + " and rr.depart in (" + whereDepart + ") " + + " group by " + dataSql + " , rr.depart " ; + + String recycleTousseGroupSql = " select " + dataSql + " ,tdi.tousseGroupName,sum(tItem.amount) from recyclingRecord rr,TousseItem tItem,TousseDefinition tdi" + + " where rr.id = tItem.recyclingRecord_id and tItem.tousseDefinitionId = tdi.id" + + " and ( " + dateQueryAdapter.strDateAreasql("rr.recyclingTime", startDay, endDay, false) + ")" + + " and tdi.tousseGroupName in (" + whereTousseGroup + " )" + + " group by " + dataSql + " , tdi.tousseGroupName"; + + String recycleAmountSql = " select " + dataSql + ",sum(tItem.amount) from recyclingRecord rr,TousseItem tItem,TousseDefinition tdi " + + " where rr.id = tItem.recyclingRecord_id and tItem.tousseDefinitionId = tdi.id" + + " and ( " + dateQueryAdapter.strDateAreasql("rr.recyclingTime", startDay, endDay, false) + ")" + + " and ( tdi.tousseGroupName in (" + whereTousseGroup + ")" + " or rr.depart in (" + whereDepart + ") )" + + " group by " + dataSql ; + getMorrowSendBean(recycleDepartSql,beanMap,"recycle",null); + getMorrowSendBean(recycleTousseGroupSql,beanMap,"recycle",null); + getMorrowSendBean(recycleAmountSql,beanMap,"recycle","total"); + + String timeCompareSql = ""; + String database = dbConnection.getDatabase(); + if(DatabaseUtil.isOracle(database)){ + // 按24小时算,两者相减的单位是24小时,> 1即大于24小时 + timeCompareSql = " trunc(iv.sendTime,'hh24') - trunc(iv.recyclingTime,'hh24') > 1"; + }else{ + // 按小时计算,单位是小时 超过24小时算次日下送 + timeCompareSql = " DATEDIFF(HOUR,iv.recyclingTime,iv.sendTime) > 24 "; + } + dataSql = dateQueryAdapter.dateToVarchar1("iv.recyclingTime"); + // 获取次日下送数量的sql + String departMorrowSendSql = "select " + dataSql +" day,iv.depart,sum(ii.amount) from Invoice iv,InvoiceItem ii " + + " where iv.id=ii.invoice_id " + + " and " + timeCompareSql + + " and iv.depart in (" + whereDepart + ")" + + " and ( " + dateQueryAdapter.strDateAreasql("iv.recyclingTime", startDay, endDay, false) + ")" + + " group by " + dataSql + " ,iv.depart "; + String tousseGrouptMorrowSendSql = "select " + dataSql +" day,tdi.tousseGroupName,sum(ii.amount) from Invoice iv,InvoiceItem ii,TousseDefinition tdi " + + " where iv.id=ii.invoice_id and ii.tousseDefinitionId=tdi.id " + + " and " + timeCompareSql + + " and tdi.tousseGroupName in (" + whereTousseGroup + ")" + + " and ( " + dateQueryAdapter.strDateAreasql("iv.recyclingTime", startDay, endDay, false) + ")" + + " group by " + dataSql + " ,tdi.tousseGroupName "; + + String totalMorrowSendSql = "select " + dataSql +" day,sum(ii.amount) from Invoice iv,InvoiceItem ii,TousseDefinition tdi " + + " where iv.id=ii.invoice_id and ii.tousseDefinitionId=tdi.id " + + " and " + timeCompareSql + + " and ( iv.depart in (" + whereDepart + ") or tdi.tousseGroupName in (" + whereTousseGroup + ") ) " + + " and ( " + dateQueryAdapter.strDateAreasql("iv.recyclingTime", startDay, endDay, false) + ")" + + " group by " + dataSql ; + getMorrowSendBean(departMorrowSendSql,beanMap,"morrowSend",null); + getMorrowSendBean(tousseGrouptMorrowSendSql,beanMap,"morrowSend",null); + getMorrowSendBean(totalMorrowSendSql,beanMap,"morrowSend","total"); + // 合计 + sumAmount(days,titles,beanMap); + // 计算不合格率 + calculateMorrowSendRate(days,titles,beanMap); + voList = (List)Arrays.asList(beanMap.values().toArray()); + return voList; + } + /** + * 计算不合格率 + * @param days + * @param titles + * @param beanMap + */ + private void calculateMorrowSendRate(List days,List titles,Map beanMap){ + if(days == null || days.size() <=0 || titles == null || titles.size() <= 0 || beanMap == null){ + return ; + } + int columnNum = (titles.size() + 1)*2; + String title = "次日下送率"; + for(String day : days){ + String recycleKey = day + "&" + "total" + "&recycle"; + String toueesGroupKey = day + "&" + "total" + "&morrowSend"; + int rAmount = getAmountByKey(beanMap,recycleKey); + int tAmount = getAmountByKey(beanMap,toueesGroupKey); + String rateStr = "0.00"; + if(rAmount > 0 ){ + float rate = (float)tAmount/rAmount; + DecimalFormat df = new DecimalFormat("0.00%");//格式化小数 + rateStr = df.format(rate); + } + String key = day + "&rate"; + TousseMorrowSendBean bean = new TousseMorrowSendBean(); + bean.setRecycleDate(day); + bean.setColummTitle(title); + bean.setColumnNum(columnNum); + bean.setValue(rateStr); + beanMap.put(key,bean); + } + String recycleKey = "totalKey" + "&" + "total" + "&recycle"; + String toueesGroupKey = "totalKey" + "&" + "total" + "&morrowSend"; + int totalAmountR = getAmountByKey(beanMap,recycleKey); + int totalAmountT = getAmountByKey(beanMap,toueesGroupKey); + String rateStr = "0.00"; + if(totalAmountR > 0 ){ + float rate = (float)totalAmountT/totalAmountR; + DecimalFormat df = new DecimalFormat("0.00%");//格式化小数 + rateStr = df.format(rate); + } + String key = "totalKey" + "&rate"; + TousseMorrowSendBean bean = new TousseMorrowSendBean(); + bean.setRecycleDate("合计"); + bean.setColummTitle(title); + bean.setColumnNum(columnNum); + bean.setValue(rateStr); + beanMap.put(key,bean); + } + /** + * 次日下送报表数据的统计 + * @param days + * @param titles + * @param beanMap + */ + private void sumAmount(List days,List titles,Map beanMap){ + if( days == null || days.size() <=0 || titles == null || titles.size() <= 0 || beanMap == null){ + return ; + } + String totalKey = "totalKey"; + for(String titile : titles){ + int rAmountTotal = 0; + int tAmountTotal = 0; + int rColNum = 0; + int tColNum = 0; + for(String day : days){ + String recycleKey = day + "&" + titile + "&recycle"; + String toueesGroupKey = day + "&" + titile + "&morrowSend"; + int rAmount = 0; + int tAmount = 0; + rAmount = getAmountByKey(beanMap,recycleKey); + rColNum = getCloumnByKey(beanMap,recycleKey); + tAmount = getAmountByKey(beanMap,toueesGroupKey); + tColNum = getCloumnByKey(beanMap,toueesGroupKey); + rAmountTotal += rAmount; + tAmountTotal += tAmount; + } + String key = totalKey + "&" + titile + "&recycle"; + TousseMorrowSendBean bean = new TousseMorrowSendBean(); + bean.setRecycleDate("合计"); + bean.setColummTitle(titile+"回收"); + bean.setColumnNum(rColNum); + bean.setValue(rAmountTotal + ""); + beanMap.put(key, bean); + key = totalKey + "&" + titile + "&morrowSend"; + TousseMorrowSendBean bean1 = new TousseMorrowSendBean(); + bean1.setRecycleDate("合计"); + bean1.setColummTitle(titile+"次日下送数"); + bean1.setColumnNum(tColNum); + bean1.setValue(tAmountTotal + ""); + beanMap.put(key, bean1); + } + // 回收,次日下送合计. + int rAmountTotal = 0; + int tAmountTotal = 0; + int rColNum = 0; + int tColNum = 0; + for(String day : days){ + String recycleKey = day + "&" + "total" + "&recycle"; + String toueesGroupKey = day + "&" + "total" + "&morrowSend"; + int rAmount = getAmountByKey(beanMap,recycleKey); + int tAmount = getAmountByKey(beanMap,toueesGroupKey); + rColNum = getCloumnByKey(beanMap,recycleKey); + tColNum = getCloumnByKey(beanMap,toueesGroupKey); + rAmountTotal += rAmount; + tAmountTotal += tAmount; + } + String key = totalKey + "&" + "total" + "&recycle"; + TousseMorrowSendBean bean = new TousseMorrowSendBean(); + bean.setRecycleDate("合计"); + bean.setColummTitle("回收合计"); + bean.setColumnNum(rColNum); + bean.setValue(rAmountTotal + ""); + beanMap.put(key, bean); + key = totalKey + "&" + "total" + "&morrowSend"; + TousseMorrowSendBean bean1 = new TousseMorrowSendBean(); + bean1.setRecycleDate("合计"); + bean1.setColummTitle("次日下送合计"); + bean1.setColumnNum(tColNum); + bean1.setValue(tAmountTotal + ""); + beanMap.put(key, bean1); + } + // 根据获取key的对应数据的数量 + private Integer getAmountByKey(Map beanMap,String key){ + Integer amount = 0; + if(StringUtils.isBlank(key) || beanMap == null){ + return amount; + } + TousseMorrowSendBean bean = beanMap.get(key); + if(bean != null){ + String valueS = bean.getValue(); + if(StringUtils.isNumeric(valueS)){ + amount = Integer.valueOf(valueS); + } + } + return amount; + } + // 根据获取key的对应bean的列号 + private Integer getCloumnByKey(Map beanMap,String key){ + Integer cloumn = 0; + if(StringUtils.isBlank(key) || beanMap == null){ + return cloumn; + } + TousseMorrowSendBean bean = beanMap.get(key); + if(bean != null){ + cloumn = bean.getColumnNum(); + } + return cloumn; + } + /** + * 获取次日下送统计的数据 + * @param beanMap + * @param type 类型 值是 recycle或者morrowSend + * @param total + */ + private void getMorrowSendBean(String sql,Map beanMap,String type,String total){ + if(StringUtils.isBlank(sql) || StringUtils.isBlank(type) || beanMap == null){ + return ; + } + if(StringUtils.isNotBlank(total)){ + // 查询的是汇总的数据 ,结果包括两行:时间、数量 + ResultSet result = objectDao.executeSql(sql); + try { + while(result.next()){ + String dateTime = StringTools.defaultString(result.getString(1)); + int amount = result.getInt(2); + String key = dateTime + "&" + total + "&" + type; + if(beanMap.containsKey(key)){ + TousseMorrowSendBean bean = beanMap.get(key); + bean.setValue(amount + ""); + beanMap.put(key, bean); + } + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(result); + } + }else{ + // 查询的是某项的数据,结果包括三行:时间、科室/分组、数量 + ResultSet result = objectDao.executeSql(sql); + try { + while(result.next()){ + String dateTime = StringTools.defaultString(result.getString(1)); + String title = StringTools.defaultString(result.getString(2)); + int amount = result.getInt(3); + String key = dateTime + "&" + title + "&" + type; + if(beanMap.containsKey(key)){ + TousseMorrowSendBean bean = beanMap.get(key); + bean.setValue(amount + ""); + beanMap.put(key, bean); + } + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(result); + } + } + } private String rowBeansSpecialString(List allTousseName, List rowBeans) { String tousseCountCodeKey = ""; Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/TousseMorrowSendBean.java =================================================================== diff -u --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/TousseMorrowSendBean.java (revision 0) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/TousseMorrowSendBean.java (revision 17365) @@ -0,0 +1,46 @@ +package com.forgon.disinfectsystem.jasperreports.javabeansource; +/** + * 器械包次日下送率报表统计的bean + */ +public class TousseMorrowSendBean { + /** + * 列号 + */ + private Integer columnNum; + /** + * 回收时间 以天为单位 + */ + private String recycleDate; + /** + * 列头 + */ + private String colummTitle; + /** + * 显示的值 + */ + private String value = "0"; + public Integer getColumnNum() { + return columnNum; + } + public void setColumnNum(Integer columnNum) { + this.columnNum = columnNum; + } + public String getRecycleDate() { + return recycleDate; + } + public void setRecycleDate(String recycleDate) { + this.recycleDate = recycleDate; + } + public String getColummTitle() { + return colummTitle; + } + public void setColummTitle(String colummTitle) { + this.colummTitle = colummTitle; + } + public String getValue() { + return value; + } + public void setValue(String value) { + this.value = value; + } +} Index: ssts-web/src/main/webapp/jasperRtp/MorrowSendReportView.jrxml =================================================================== diff -u --- ssts-web/src/main/webapp/jasperRtp/MorrowSendReportView.jrxml (revision 0) +++ ssts-web/src/main/webapp/jasperRtp/MorrowSendReportView.jrxml (revision 17365) @@ -0,0 +1,193 @@ + + + + + + + + + +