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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: ssts-web/src/main/webapp/homepage/menuconfigure.js
===================================================================
diff -u -r17322 -r17365
--- ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 17322)
+++ ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 17365)
@@ -486,7 +486,8 @@
{hidden :SSTS_MATERIAL_MISS_ITEM_TOTAL_VIEW,text:"器材报损明细统计报表",href:WWWROOT+'/disinfectsystem/reportforms/materialDamageItemView.jsp',hrefTarget:linkTarget,leaf:true},
{hidden :SSTS_MATERIAL_MISS_ITEM_TOTAL_VIEW,text:"器材丢失报损分类统计月报",href:WWWROOT+'/disinfectsystem/reportforms/materialDamageMissMonthView.jsp',hrefTarget:linkTarget,leaf:true},
{hidden :SSTS_SterilizationRecordInfoReport,text:"灭菌情况报表",href:WWWROOT+'/disinfectsystem/reportforms/sterilizationRecordInfoView.jsp',hrefTarget:linkTarget,leaf:true},
- {hidden :!sstsConfig.enableTousseOverloadReport,text:"器械包实际负载组合统计报表",href:WWWROOT+'/disinfectsystem/reportforms/tousseOverLoad.jsp',hrefTarget:linkTarget,leaf:true}
+ {hidden :!sstsConfig.enableTousseOverloadReport,text:"器械包实际负载组合统计报表",href:WWWROOT+'/disinfectsystem/reportforms/tousseOverLoad.jsp',hrefTarget:linkTarget,leaf:true},
+ {hidden :!sstsConfig.enableTousseMorrowSend,text:"器械包次日下送率统计报表",href:WWWROOT+'/disinfectsystem/reportforms/tousseMorrowSend.jsp',hrefTarget:linkTarget,leaf:true}
]
},{
text:"财务核算及物品发放报表",
Index: ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java
===================================================================
diff -u -r17322 -r17365
--- ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 17322)
+++ ssts-reports/src/main/java/com/forgon/disinfectsystem/jasperreports/action/JasperreportsAction.java (.../JasperreportsAction.java) (revision 17365)
@@ -856,6 +856,8 @@
return summaryUseRecordForGoodsVOList;
} else if("tousseOverLoadReport".equals(reportName)){
return jasperReportManager.getTousseOverLoadData(requestParameters);
+ }else if("tousseMorrowSendReport".equals(reportName)){
+ return jasperReportManager.getTousseMorrwoSendData(requestParameters);
}
return null;
}
@@ -1408,6 +1410,11 @@
String endDay = StrutsParamUtils.getPraramValue("endDay", "");
map.put("startDay", startDay);
map.put("endDay", endDay);
+ }else if("tousseMorrowSendReport".equals(reportName)){
+ String timeSlot = StrutsParamUtils.getPraramValue("timeSlot", "");
+ String title = "器械包次日下送率统计报表(" + timeSlot + ")";
+ map.put("title", title);
+ return map;
}
return map;
Index: ssts-web/src/main/webapp/disinfectsystem/reportforms/tousseMorrowSend.jsp
===================================================================
diff -u
--- ssts-web/src/main/webapp/disinfectsystem/reportforms/tousseMorrowSend.jsp (revision 0)
+++ ssts-web/src/main/webapp/disinfectsystem/reportforms/tousseMorrowSend.jsp (revision 17365)
@@ -0,0 +1,59 @@
+<%@page import="org.apache.commons.lang3.ArrayUtils"%>
+<%@page import="com.forgon.disinfectsystem.entity.basedatamanager.reportoption.GoodsOption"%>
+<%@page import="com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition"%>
+<%@ page contentType="text/html; charset=UTF-8"%>
+<%@ include file="/common/taglibs.jsp"%>
+
+
+
+<%@ include file="/common/includeExtJsAndCss.jsp"%>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+器械包次日下送率统计报表
+
+
+
+
+
+
+
+
+
\ No newline at end of file
Index: ssts-web/src/main/webapp/disinfectsystem/config/gdsy/config.js
===================================================================
diff -u -r17322 -r17365
--- ssts-web/src/main/webapp/disinfectsystem/config/gdsy/config.js (.../config.js) (revision 17322)
+++ ssts-web/src/main/webapp/disinfectsystem/config/gdsy/config.js (.../config.js) (revision 17365)
@@ -151,5 +151,7 @@
//是否启用器械包实际负载组合统计报表(true为启用,false或者不配置为不启用)
enableTousseOverloadReport : true,
//是否启用灭菌区工作量统计报表(true为启用,false或者不配置为不启用)
- enableSterilizationAreaWorkLoadReport : true
+ enableSterilizationAreaWorkLoadReport : true,
+ //是否启用器械包次日下送率统计报表,true为显示,false或者不配不显示
+ enableTousseMorrowSend : true
}
\ No newline at end of file
Index: ssts-web/src/main/webapp/disinfectsystem/reportforms/js/setDepartmentOption.js
===================================================================
diff -u -r16920 -r17365
--- ssts-web/src/main/webapp/disinfectsystem/reportforms/js/setDepartmentOption.js (.../setDepartmentOption.js) (revision 16920)
+++ ssts-web/src/main/webapp/disinfectsystem/reportforms/js/setDepartmentOption.js (.../setDepartmentOption.js) (revision 17365)
@@ -191,7 +191,7 @@
id : 'saveBtn',
text : '确定',
handler : function(){
- saveSelect(model,"");
+ saveSelect(model,code);
}
},{
id : 'cancleBtn',
Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/reportoption/GoodsOption.java
===================================================================
diff -u -r17239 -r17365
--- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/reportoption/GoodsOption.java (.../GoodsOption.java) (revision 17239)
+++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/reportoption/GoodsOption.java (.../GoodsOption.java) (revision 17365)
@@ -29,6 +29,8 @@
public static final String MODEL_SURGICALINSTRUMENTS_DEPT = "手术器械科室定义";
public static final String MODEL_TOUSSEGOODSSTOCK = "器械包库存";
public static final String MODEL_TOUSSEOVERLOAD = "器械包负载";
+ public static final String MODEL_TOUSSEMORROWSENDDEPART = "器械包次日下送科室";
+ public static final String MODEL_TOUSSEMORROWSENDGROUP = "器械包次日下送分组";
private String code;