Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/dataindex/DataIndex.java =================================================================== diff -u -r25332 -r25333 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/dataindex/DataIndex.java (.../DataIndex.java) (revision 25332) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/dataindex/DataIndex.java (.../DataIndex.java) (revision 25333) @@ -1620,4 +1620,29 @@ } return map; } + + /** + * 将NULL的数值转为0 + * @param amount + * @return + */ + public static Integer nullAmountToZero(Integer amount){ + if (amount == null){ + amount = 0; + } + return amount; + } + + /** + * 将NULL的数值转为0的字符串 + * @param amount + * @return + */ + public static String nullAmountToZeroString(Integer amount){ + String text = "0"; + if (amount != null){ + text = amount + ""; + } + return text; + } } Index: ssts-web/src/main/webapp/disinfectsystem/config/dgfy/reports/washWorkloadReportView.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/config/dgfy/reports/washWorkloadReportView.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/config/dgfy/reports/washWorkloadReportView.js (revision 25333) @@ -0,0 +1,300 @@ +var entityName = "清洗器械工作量及不合格率"; +var grid; + +var rd = new Ext.data.JsonReader( { + fields : [ + {name : 'id'}, + {name : 'departId'}, + {name : 'name'} + + ] +}); + +var supplyRoomStore = new Ext.data.Store({ + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/baseData/supplyRoomConfigAction!loadSupplyRoomConfigRoom.do', + method : 'POST' + }), + baseParams :{type:"12"}, + reader : rd, + listeners :{ + 'load' : function(thiz,records,options){ + if(records.length > 0){ + Ext.getCmp('querySupplyRoom').setValue(records[0].data.departId); + Ext.getCmp('departCoding').setValue(records[0].data.departId); + Ext.getCmp('querySupplyRoom').setValue(records[0].data.name); + } + } + } +}); +//supplyRoomStore.load(); + +var myMask; +Ext.onReady(function() { + Ext.QuickTips.init(); + //20181225 + var supplyRoomRecord = Ext.data.Record.create([ + {name: 'departCode', type: 'string'}, + {name: 'name', type: 'string'} + ]); + + var supplyRoomStore = new Ext.data.SimpleStore({ + fields : ['departCode','name'] + }); + + var supplyRoomRemoteStore = new Ext.data.Store({ + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/baseData/supplyRoomConfigAction!loadSupplyRoomConfigRoom.do', + method : 'POST' + }), + baseParams :{type:"12"}, + // reader : rd, + reader : new Ext.data.JsonReader({ + fields : [ + {name : 'id', mapping : 'id'}, + {name : 'departCode', mapping : 'departId'}, + {name : 'name', mapping : 'name'} + ] + }), + listeners:{ + beforeload : function(){ + loadMask = new Ext.LoadMask(Ext.getBody(), { + msg: '正在加载供应室...,请稍候!',removeMask: true + }); + loadMask.show(); + }, + load :function (thiz,records,options ){ + loadMask.hide(); + var currentOrgUnitIsSupplyRoom = false; + if(records && records.length > 0){ + for (var i = 0; i < records.length; i++) { + var supplyRoomData = records[i].data; + var departCodeTemp = supplyRoomData.departCode; + //如果没有查看其它供应室权限时,只显示是当前用户的科室 + if(SSTS_View_All_Supply_Room_Report){ + if(departCodeTemp == currentOrgUnitCoding){ + supplyRoomStore.add(new supplyRoomRecord({'departCode':departCodeTemp,'name':supplyRoomData.name})); + currentOrgUnitIsSupplyRoom = true; + } + }else{ + supplyRoomStore.add(new supplyRoomRecord({'departCode':departCodeTemp,'name':supplyRoomData.name})); + if(departCodeTemp == currentOrgUnitCoding){ + currentOrgUnitIsSupplyRoom = true; + } + } + } + } + if(supplyRoomStore.getCount() > 1){ + supplyRoomStore.insert(0 , new supplyRoomRecord({'departCode':ALL,'name':ALL})); + } + //最后使供应室下拉框默认选中用户所属的当前的科室(前提是用户所属的当前的科室也在选项中) + if(currentOrgUnitIsSupplyRoom){ + Ext.getCmp('querySupplyRoom').setValue(currentOrgUnitCoding); + } + } + } + }); + //20181225 end + function reloadReport(){ + var monthSearch= $Id('monthSearch').value; + var querySupplyRoom = Ext.getCmp('querySupplyRoom').getValue(); + if(querySupplyRoom.indexOf(ALL) == 0){ + querySupplyRoom = ""; + } + myMask = new Ext.LoadMask(Ext.getBody(), { + msg: '正在加载,请稍候!', + removeMask: true + }); + myMask.show(); + window.open(WWWROOT + "/jasperreports/jasperreportsAction!createReportFromJavaBeanSource.do?jasperreportName=mainWashWorkloadReprot-dgfy.jasper&month="+monthSearch+"&querySupplyRoom="+querySupplyRoom+"&reportName=washWorkloadReprot-dgfy",'thisIframe','_self'); + } + + var sign = true; + var dwrCallParams = null; + + var tbar = [{ + text : '导出Excel', + iconCls : 'btn_ext_refresh', + id : 'editTbar', + handler : function() { + var month = Ext.getCmp('monthSearch').getRawValue(); + location.href=WWWROOT + "/disinfectsystem/reportforms/departmentMonthlyExport.jsp?month="+month+"&reportType=科室月报明细"; + } + } ]; + + Ext.ux.ForgonPageGrid.prototype.getGridParameterMap = function() { + + }; + + var departJsonStore = new Ext.data.SimpleStore({ + fields : [ 'departName' ], + url : WWWROOT + '/disinfectSystem/reportFormsCenterAction!getAllDepartName.do' + }); + var hideDepartGroup = true; + if(sstsConfig.hasOwnProperty('allowSetDepartGroup') && sstsConfig.allowSetDepartGroup){ + hideDepartGroup = false; + } + 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 : 105, + items : [{ + layout : 'column', + height : 40, + labelWidth : 60, + items : [{ + width : 180, + layout : 'form', + labelWidth : 60, + items : [new Ext.form.DateField({ + id:'monthSearch', + name : 'monthSearch', + fieldLabel : '年月', + readOnly : true, + format:'Y-m', + value : new Date(), + anchor : '95%', + listeners : { + specialkey : function(field, ee) { + if (ee.getKey() == Ext.EventObject.ENTER) { + initQueryValueAndReload(); + } + } + } + })] + },{ + columnWidth : .4, + layout : 'form', + labelWidth : 50, + items : [{ + width : 250, + layout : 'form', + labelWidth : 70, + labelSeparator : '选择供应室:', + items : [{//20181225 + xtype : 'multiSelect', + id : 'querySupplyRoom', + name : 'querySupplyRoom', + valueField : 'departCode', + displayField : 'name', + minChars : 0, + allowBlank : true, + editable : false, + store : supplyRoomStore, + forceSelection : false, + mode : 'local', + triggerAction : 'all', + lazyInit : true, + typeAhead : false, + anchor : '95%', + listeners: { + select: function (combo, record, index) { + //1、如果选中“全部”的项,则把所有的项选中,反之全部取消选择 + if (record.get('departCode') == ALL) { + if (record.get('checked')) { + combo.selectAll(); + } else { + combo.deselectAll(); + } + } + + //2、如果已经选中所有的项,则把“全部”项选中,反之把“全部”项取消选择 + var selectAll = true; + combo.store.each(function(record) { + if (record.get('departCode') != ALL && !record.get(this.checkField)) { + selectAll = false; + return; + } + }, combo); + + var all = combo.store.getAt(0); + if (selectAll) { + all.set(combo.checkField, true); + } else { + all.set(combo.checkField, false); + } + combo.setValue(combo.getCheckedValue()); + } + } + }] +// items : [{ +// xtype : 'combo', +// id : 'querySupplyRoom', +// name : 'querySupplyRoom', +// valueField : 'departId', +// displayField : 'name', +// allowBlank : true, +// editable : false, +// store : supplyRoomStore, +// forceSelection : true, +// mode : 'local', +// triggerAction : 'all', +// anchor : '95%' +// }] + }] + + }] + }], + buttons:[{ + text : '查询', + minWidth : 70, + iconCls : 'icon_search', + handler : function() { + reloadReport(); + } + },{ + text : '重置', + minWidth : 70, + iconCls : 'icon_set', + handler : function() { + $Id('startTime').value = ""; + $Id('endTime').value = ""; + $Id('querySupplyRoom').value = ""; + } + },{ + text : '设置手术器械科室', + minWidth : 70, + iconCls : 'icon_set', + handler : function() { + setapparatusInfuType(optionModel); + } + },{ + text : '设置科室分组', + minWidth : 70, + iconCls : 'icon_set', + hidden : hideDepartGroup, + handler : function() { + setDepartGroup(); + } + }] + }); + + 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 + }] + }); + //supplyRoomStore.load(); + supplyRoomRemoteStore.load();//20181225 +}); \ No newline at end of file Index: ssts-web/src/main/webapp/disinfectsystem/config/dgfy/menu/menuconfigure.js =================================================================== diff -u -r25332 -r25333 --- ssts-web/src/main/webapp/disinfectsystem/config/dgfy/menu/menuconfigure.js (.../menuconfigure.js) (revision 25332) +++ ssts-web/src/main/webapp/disinfectsystem/config/dgfy/menu/menuconfigure.js (.../menuconfigure.js) (revision 25333) @@ -570,7 +570,7 @@ {hidden :SSTS_QuotaReport,text:"十八项指标分析报表",href:WWWROOT+'/disinfectsystem/reportforms/quotaReportView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_WorkQualityCountReport,text:"工作质量持续收集统计报表",href:WWWROOT+'/disinfectsystem/config/dgfy/reports/workQualityCollectionView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_RecycleMaterialDetailReport,text:"回收器械材料明细报表",href:WWWROOT+'/disinfectsystem/reportforms/recycleMaterialDetailView.jsp',hrefTarget:linkTarget,leaf:true}, - {hidden :SSTS_WashWorkloadReport,text:"清洗区工作量及不合格率月报",href:WWWROOT+'/disinfectsystem/reportforms/washWorkloadReportView.jsp',hrefTarget:linkTarget,leaf:true}, + {hidden :SSTS_WashWorkloadReport,text:"清洗区工作量及不合格率月报",href:WWWROOT+'/disinfectsystem/config/dgfy/reports/washWorkloadReportView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_WashMaterialTypeWorkloadReport,text:"清洗区材料类型工作量统计报表",href:WWWROOT+'/disinfectsystem/reportforms/materialTypeWorkloadReportView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_PackingUnqualifieReport,text:"包装区工作量及不合格率月报",href:WWWROOT+'/disinfectsystem/config/dgfy/reports/packingUnqualifieReportView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_SterilizationWorkloadReport,text:"灭菌区工作量及不合格率月报",href:WWWROOT+'/disinfectsystem/config/dgfy/reports/sterilizationWorkloadReportView.jsp',hrefTarget:linkTarget,leaf:true}, Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/wash/WashWorkloadBeanForDgfy.java =================================================================== diff -u --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/wash/WashWorkloadBeanForDgfy.java (revision 0) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/javabeansource/wash/WashWorkloadBeanForDgfy.java (revision 25333) @@ -0,0 +1,154 @@ +package com.forgon.disinfectsystem.jasperreports.javabeansource.wash; + +/** + * 为东莞妇幼定制的清洗区工作量及不合格率月报的bean + * @author Terry + * + */ +public class WashWorkloadBeanForDgfy { + + /** + * 日期 + */ + private String date; + /** + * 清洗总数量 + */ + private Integer washTotalAmount; + /** + * 不合格数量 + */ + private Integer unqualifyAmount; + /** + * 不合格率 + */ + private String unqualifyRate; + /** + * 奶具总数 + */ + private Integer milkTotalAmount; + /** + * 临床器械包数 + */ + private Integer clinicAmount; + /** + * 手术器械包数 + */ + private Integer orAmount; + /** + * 外来器械包数 + */ + private Integer foreignTousseAmount; + /** + * 止血带数量 + */ + private Integer zxdAmount; + /** + * 湿化瓶数量 + */ + private Integer shpAmount; + /** + * 拔火罐数量 + */ + private Integer bhgAmount; + /** + * 消毒物品总数 + */ + private Integer disinfectGoodsTotalAmount; + /** + * 供应室数量 + */ + private Integer cssdAmount; + /** + * 腔镜室数量 + */ + private Integer endoscopeAmount; + + + public String getDate() { + return date; + } + public void setDate(String date) { + this.date = date; + } + public Integer getWashTotalAmount() { + return washTotalAmount; + } + public void setWashTotalAmount(Integer washTotalAmount) { + this.washTotalAmount = washTotalAmount; + } + public Integer getUnqualifyAmount() { + return unqualifyAmount; + } + public void setUnqualifyAmount(Integer unqualifyAmount) { + this.unqualifyAmount = unqualifyAmount; + } + public String getUnqualifyRate() { + return unqualifyRate; + } + public void setUnqualifyRate(String unqualifyRate) { + this.unqualifyRate = unqualifyRate; + } + public Integer getMilkTotalAmount() { + return milkTotalAmount; + } + public void setMilkTotalAmount(Integer milkTotalAmount) { + this.milkTotalAmount = milkTotalAmount; + } + public Integer getClinicAmount() { + return clinicAmount; + } + public void setClinicAmount(Integer clinicAmount) { + this.clinicAmount = clinicAmount; + } + public Integer getOrAmount() { + return orAmount; + } + public void setOrAmount(Integer orAmount) { + this.orAmount = orAmount; + } + public Integer getForeignTousseAmount() { + return foreignTousseAmount; + } + public void setForeignTousseAmount(Integer foreignTousseAmount) { + this.foreignTousseAmount = foreignTousseAmount; + } + public Integer getZxdAmount() { + return zxdAmount; + } + public void setZxdAmount(Integer zxdAmount) { + this.zxdAmount = zxdAmount; + } + public Integer getShpAmount() { + return shpAmount; + } + public void setShpAmount(Integer shpAmount) { + this.shpAmount = shpAmount; + } + public Integer getBhgAmount() { + return bhgAmount; + } + public void setBhgAmount(Integer bhgAmount) { + this.bhgAmount = bhgAmount; + } + public Integer getCssdAmount() { + return cssdAmount; + } + public void setCssdAmount(Integer cssdAmount) { + this.cssdAmount = cssdAmount; + } + public Integer getEndoscopeAmount() { + return endoscopeAmount; + } + public void setEndoscopeAmount(Integer endoscopeAmount) { + this.endoscopeAmount = endoscopeAmount; + } + public Integer getDisinfectGoodsTotalAmount() { + return disinfectGoodsTotalAmount; + } + public void setDisinfectGoodsTotalAmount(Integer disinfectGoodsTotalAmount) { + this.disinfectGoodsTotalAmount = disinfectGoodsTotalAmount; + } + + +} Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/CustomReportsOfDgsfy.java =================================================================== diff -u -r25332 -r25333 --- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/CustomReportsOfDgsfy.java (.../CustomReportsOfDgsfy.java) (revision 25332) +++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/service/CustomReportsOfDgsfy.java (.../CustomReportsOfDgsfy.java) (revision 25333) @@ -8,6 +8,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -16,6 +17,7 @@ import java.util.List; import java.util.Map; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.ArrayUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; @@ -34,12 +36,17 @@ import com.forgon.disinfectsystem.customform.formdefinition.service.FormDefinitionManager; import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodsManager; import com.forgon.disinfectsystem.diposablegoods.service.GodownEntryItemManager; +import com.forgon.disinfectsystem.entity.basedatamanager.reportoption.GoodsOption; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.disinfectsystem.entity.becleanitem.ClassifiedItem; import com.forgon.disinfectsystem.entity.recycledepartmentgroup.DepartmentGroup; import com.forgon.disinfectsystem.foreigntousseapplication.service.ForeignTousseApplicationManager; +import com.forgon.disinfectsystem.jasperreports.javabeansource.CrossTableBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.DisinfectionFractionDefectiveBean; import com.forgon.disinfectsystem.jasperreports.javabeansource.PackingFractionDefectiveBean; +import com.forgon.disinfectsystem.jasperreports.javabeansource.WashWorkload_main; import com.forgon.disinfectsystem.jasperreports.javabeansource.WorkQualityCollection; +import com.forgon.disinfectsystem.jasperreports.javabeansource.wash.WashWorkloadBeanForDgfy; import com.forgon.disinfectsystem.jasperreports.service.dataindex.DataIndex; import com.forgon.disinfectsystem.jasperreports.service.dataindex.WorkQualityCollectionDataIndex; import com.forgon.disinfectsystem.qualitymonitoring.definition.service.QualityMonitoringDefinitionManager; @@ -52,6 +59,7 @@ import com.forgon.disinfectsystem.useRecord.service.UseRecordManager; import com.forgon.systemsetting.model.HttpOption; import com.forgon.systemsetting.service.HttpOptionManager; +import com.forgon.tools.MathTools; import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.db.InitDbConnection; @@ -1241,4 +1249,236 @@ return returnList; } + /** + * 获取数据 清洗区工作量及不合格率月报 + */ + public List getwashWorkloadList(String month,String querySupplyRoom) { + month = month + "-01"; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date startDate = null; + try { + startDate = sdf.parse(month); + + } catch (ParseException e) { + e.printStackTrace(); + } + + Calendar calendar = Calendar.getInstance(); + calendar.setTime(startDate); + calendar.add(Calendar.MONTH, 1); + Date endDate = calendar.getTime(); + List list = new ArrayList(); + while(endDate.after(startDate)){ + WashWorkload_main main = new WashWorkload_main(); + main.setS_DATE(sdf.format(startDate)); + calendar.setTime(startDate); + calendar.add(Calendar.DAY_OF_MONTH, 1); + startDate = calendar.getTime(); + main.setE_DATE(sdf.format(startDate)); + list.add(main); + } + Map> map = httpOptionManager.getGroupAndDepartMap(); + Map titleColumnNumMap = new HashMap(); + int clounmNum = 0; + titleColumnNumMap.put("普通器械", clounmNum++); + titleColumnNumMap.put("手术器械", clounmNum++); + titleColumnNumMap.put("外来器械", clounmNum++); + titleColumnNumMap.put("消毒物品", clounmNum++); + titleColumnNumMap.put("外来器械二次清洗", clounmNum++); + if(map != null && !map.isEmpty()){ + for(String key : map.keySet()){ + titleColumnNumMap.put(key, clounmNum++); + } + } + titleColumnNumMap.put("清洗总数", clounmNum++); + titleColumnNumMap.put("不合格数", clounmNum++); + titleColumnNumMap.put("不合格率", clounmNum++); + List bean = new ArrayList(); + for(WashWorkload_main main : list){ + getWashWorkloadChildList(main.getS_DATE(),main.getE_DATE(),querySupplyRoom,bean,titleColumnNumMap); + // 获取分组的数据 + //getDepartGroupData(map,ctBeanList,titleColumnNumMap,main.getS_DATE(),main.getE_DATE(),querySupplyRoom); + } + // 对数据做合计 ctBeanList + //summationCrossTableWorkLoad(ctBeanList,titleColumnNumMap); + return bean; + } + + /** + * 获取每日清洗数据 + * @param statDate + * @param endDate + * @return + */ + private void getWashWorkloadChildList(String statDate,String endDate,String querySupplyRoom,List beanList,Map titleColumnNumMap){ + if(beanList == null){ + return ; + } + String betweenSql = String.format(" between %s and %s ", + dateQueryAdapter.dateConverAdapter2(statDate, "yyyy-mm-dd"), + dateQueryAdapter.dateConverAdapter2(endDate, "yyyy-mm-dd")); + + ReportQueryParams params = new ReportQueryParams(); + params.betweenSql = betweenSql; + params.querySupplyRoom = querySupplyRoom; + + // 统计清洗项的itemType为材料的物品,包括拆包清洗的器械包以及外来器械包 + String sql = String + .format("select ci.itemType type,ci.orgUnitName,ci.isSencondWashForForeignTousse ,sum(ci.amount) amount,ci.name,td.tousseGroupName,td.taskGroup " + + dataIndex.getWashMaterialAmountSqlFromItemTypeIsMaterial() + + " and wr.endDate %s and wr.washMaterialAmount <> 0 %s group by ci.itemType,ci.orgUnitName,ci.isSencondWashForForeignTousse,ci.name,td.tousseGroupName,td.taskGroup ", + params.betweenSql, + SqlUtils.get_InSql_Extra("wr.orgUnitCoding", params.querySupplyRoom)); + + // 统计清洗项的itemType为材料的物品,单独入清洗篮筐的器械,没有关联的器械包 + sql += " union all "; + sql += String + .format("select ci.itemType type,ci.orgUnitName,ci.isSencondWashForForeignTousse ,sum(ci.amount) amount,ci.name,ci.itemType tousseGroupName,'null' " + + dataIndex.getWashMaterialAmountSqlFromItemTypeIsMaterialWithoutTousseDefinition() + + " and wr.endDate %s and wr.washMaterialAmount <> 0 %s group by ci.itemType,ci.orgUnitName,ci.isSencondWashForForeignTousse,ci.name ", + params.betweenSql, + SqlUtils.get_InSql_Extra("wr.orgUnitCoding", params.querySupplyRoom)); + + + // 统计清洗项的itemType不为材料的物品,包括整包清洗的器械包 + sql += " union all "; + sql += String + .format("select ci.itemType type,ci.orgUnitName,ci.isSencondWashForForeignTousse ,sum(ci.amount*mi.count) amount,ci.name,td.tousseGroupName,td.taskGroup " + + dataIndex.getWashMaterialAmountSqlFromItemTypeIsNotMaterial() + + " and wr.endDate %s and wr.washMaterialAmount <> 0 %s group by ci.itemType,ci.orgUnitName,ci.isSencondWashForForeignTousse,ci.name,td.tousseGroupName,td.taskGroup ", + params.betweenSql, + SqlUtils.get_InSql_Extra("wr.orgUnitCoding", params.querySupplyRoom)); + + // 判断是否需要统计单独清洗的材料的数量 + // 由于要查找清洗记录所属的科室的名称,所以连接了orgUnit表进行查询,没有调用DataIndex服务类的getWashMaterialAmountSqlFromTousseTypeIsMaterial方法 + sql += " union all "; + sql += String + .format("select md.type,org.name orgUnitName,0 isSencondWashForForeignTousse ,sum(wrm.amount) amount,md.name,md.type tousseGroupName,'' " + + "from WashAndDisinfectRecord wr, WashRecord_WashMaterial wm,WashAndDisinfectRecordMaterial wrm,MaterialDefinition md, OrgUnit org " + + "where wm.WashAndDisinfectRecord_ID = wr.id and wrm.id = wm.WashAndDisinfectMaterial_ID and wrm.materialDefinition_id = md.id and org.orgUnitCoding = wr.orgUnitCoding " + + "and wr.endDate %s %s group by md.type,org.name,md.name ", + params.betweenSql, SqlUtils.get_InSql_Extra( + "wr.orgUnitCoding", params.querySupplyRoom)); + sql = " select rs.type,rs.orgUnitName,rs.isSencondWashForForeignTousse,sum(rs.amount),rs.name,rs.tousseGroupName,rs.taskGroup from (" + + sql + + ")rs " + + " group by rs.type,rs.orgUnitName,rs.isSencondWashForForeignTousse,rs.name,rs.tousseGroupName,rs.taskGroup "; + + Map amountMap = getWashWorkloadAmountMap(sql); + // 清洗不合格数量 + String unQualitySql = DataIndex.getQMAmountSqlByFormNames(new String[]{"清洗不合格","清洗不及格"}, params); + + Integer unQualityAmount = dataIndex.getAmountBySql(unQualitySql); + + WashWorkloadBeanForDgfy bean = new WashWorkloadBeanForDgfy(); + bean.setDate(statDate); + + bean.setClinicAmount(DataIndex.nullAmountToZero(amountMap.get("普通器械"))); + bean.setOrAmount(DataIndex.nullAmountToZero(amountMap.get("手术器械"))); + bean.setForeignTousseAmount(DataIndex.nullAmountToZero(amountMap.get("外来器械"))); + bean.setDisinfectGoodsTotalAmount(DataIndex.nullAmountToZero(amountMap.get("消毒物品"))); + + // 止血带 + bean.setZxdAmount(DataIndex.nullAmountToZero(amountMap.get("止血带"))); + // 湿化瓶 + bean.setShpAmount(DataIndex.nullAmountToZero(amountMap.get("湿化瓶"))); + // 拔火罐 + bean.setBhgAmount(DataIndex.nullAmountToZero(amountMap.get("拔火罐"))); + + bean.setMilkTotalAmount(DataIndex.nullAmountToZero(amountMap.get("奶具总数"))); + bean.setEndoscopeAmount(DataIndex.nullAmountToZero(amountMap.get("腔镜室"))); + + bean.setWashTotalAmount(amountMap.get("清洗总数")); + + bean.setCssdAmount(bean.getWashTotalAmount() - bean.getEndoscopeAmount()); + + String rate = "0.0000%"; + if(unQualityAmount > 0 && amountMap.get("清洗总数") > 0){ + rate = MathTools.divideStr(unQualityAmount, amountMap.get("清洗总数"), 4); + } + + bean.setUnqualifyAmount(unQualityAmount); + bean.setUnqualifyRate(rate); + + beanList.add(bean); + +// CrossTableBean ctBean7 = getCrossTableBean("不合格率",titleColumnNumMap,statDate,0,rate); +// if(ctBean7 != null){ +// beanList.add(ctBean7); +// } + } + + private Map getWashWorkloadAmountMap(String sql){ + Map map = new HashMap(); + // 手术器械设置 + GoodsOption option = goodsOptionManager.getGoodsOption(GoodsOption.MODEL_SURGICALINSTRUMENTS_DEPT, null); + List groupDeparts = httpOptionManager.getDepartsFromDepartGroup(); + Integer totalAmount = 0; + ResultSet rs = objectDao.executeSql(sql); + + String[] disinfectGoodsSet = new String[]{"止血带","湿化瓶","拔火罐"}; + String[] endoscopeTaskGroups = new String[]{"腔镜包装组","人流室腔镜包装组"}; + try { + while(rs.next()){ + String type = rs.getString(1); + String orgUnitName = rs.getString(2); + boolean isSecWashForeignTousse = rs.getBoolean(3); + Integer amount = rs.getInt(4); + + String goodsName = rs.getString(5); + String tousseGroupName = rs.getString(6); + String taskGroup = rs.getString(7); + + List keys = new ArrayList(); + + if (ArrayUtils.contains(disinfectGoodsSet, goodsName)){ + keys.add(goodsName); + keys.add("消毒物品"); + } + + if ("奶具".equals(tousseGroupName)){ + keys.add("奶具总数"); + } + + if (ArrayUtils.contains(endoscopeTaskGroups,taskGroup)){ + keys.add("腔镜室"); + } + + + if(ClassifiedItem.TYPE_FOREIGN_TOUSSE.equals(type)){ + // 外来器械包,看是否二次清洗 + if(isSecWashForeignTousse == false){ + keys.add("外来器械"); + }else{ + keys.add("外来器械二次清洗"); + } + } + else{ + // 不是外来器械,不是消毒物品,就是手术器械,或者普通器械,或者分组器械 + // 是手术器械 + if (StringUtils.isNotBlank(orgUnitName) && option != null && StringUtils.isNotBlank(option.getValue()) && option.getValue().indexOf(orgUnitName) != -1) { + keys.add("手术器械"); + }else if( !(CollectionUtils.isNotEmpty(groupDeparts) && groupDeparts.contains(orgUnitName)) ){ + // 也不是分组器械,是普通器械 + keys.add("普通器械"); + } + } + for (String key : keys){ + if(map.containsKey(key)){ + Integer curAmount = map.get(key); + map.put(key, curAmount + amount); + }else{ + map.put(key,amount); + } + } + totalAmount += amount; + } + } catch (SQLException e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + map.put("清洗总数", totalAmount); + return map; + } } Index: ssts-web/src/main/webapp/disinfectsystem/reportforms/washWorkloadReportView.jsp =================================================================== diff -u -r25237 -r25333 --- ssts-web/src/main/webapp/disinfectsystem/reportforms/washWorkloadReportView.jsp (.../washWorkloadReportView.jsp) (revision 25237) +++ ssts-web/src/main/webapp/disinfectsystem/reportforms/washWorkloadReportView.jsp (.../washWorkloadReportView.jsp) (revision 25333) @@ -14,7 +14,7 @@ - + + + + + + + + + + + + + +清洗器械工作量月报 + + + + + + + +
+
+
+ + +
+ + +
+ + + + + + + + \ No newline at end of file