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 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+清洗器械工作量月报
+
+
+
+
+
+
+
+
+
+
+
+
+
+