Index: ssts-web/src/main/webapp/js/Ext2CompUtil.js =================================================================== diff -u -r15833 -r16102 --- ssts-web/src/main/webapp/js/Ext2CompUtil.js (.../Ext2CompUtil.js) (revision 15833) +++ ssts-web/src/main/webapp/js/Ext2CompUtil.js (.../Ext2CompUtil.js) (revision 16102) @@ -10,6 +10,12 @@ this.getComboBuilder = function () { return comboBuilder; } + this.getTableBuilder = function () { + return tableBuilder; + } + this.getTableTips = function () { + return tableTips; + } } //region comboBuilder @@ -95,6 +101,179 @@ //endregion + //region tableBuilder + //用于生成table的对象 + var tableBuilder = {}; + + /** + * 根据头部的配置来设置table的头部内容 + * @param tHeadConfig 头部配置(有每一列的宽和内容) + * @returns {string} + */ + tableBuilder.setTHead = function (tHeadConfig) { + var tHead = ""; + for (var prop in tHeadConfig) { + tHead += "

" + prop + "

"; + } + return tHead; + } + + + /** + * 创建table + * @param tHeadConfig table的头部配置 + * @param tBodyContent table的正文内容 + * @returns {string} + */ + tableBuilder.createTable = function (tHeadConfig, tBodyContent) { + var me = this; + var tipTable = + "
" + + "" + + "" + me.setTHead(tHeadConfig) + "" + tBodyContent + + "
" + + "
"; + return tipTable; + } + //endregion + + + //region tableTips + //提示框对象 + var tableTips = {}; + + + /** + * 添加mouseover事件 + * @param winConfig 弹窗提示框配置(里面有grid,url,title,tipManagerCache) + * @param fn 回调函数 + */ + tableTips.popTipWin = function (winConfig, fn) { + var this_ = this; + var grid = winConfig.grid; + var tipManagerCache = winConfig.tipManagerCache; + grid.on('mouseover', function (e, elHtml) { + var me = this; + var thisRow = grid.getView().findRowIndex(elHtml); + if (thisRow !== false) { + var record = me.getStore().getAt(thisRow); + var id = record.get('id'); + //从缓存里找对应生成的html,如果存在,则不再请求服务器,直接从缓存读取并生成 + var tipTable = tipManagerCache[id]; + if (tipTable) { + this_.register({ + text: tipTable, + target: elHtml, + title: winConfig.title + }); + } + else { + //获得提示框的对象 + var tableTips = ext2CompUtil.getTableTips(); + //加载对应提示框需要的数据并且在页面显示 + tableTips.loadGoodsTips(winConfig.url, id, elHtml, fn); + } + } + }); + } + /** + * 加载提示信息 + * @param url 请求的url + * @param id 该项对应的id + * @param fn 回调函数 + * @param elHtml 渲染的地方 + */ + tableTips.loadGoodsTips = function (url, id, elHtml, fn) { + Ext.Ajax.request({ + url: url, + params: {id: id}, + timeout: 600000, + waitMsg: '正在加载数据,请稍候', + method: 'POST', + success: function (response, options) { + try { + var result = Ext.decode(response.responseText); + var items = result.data.items; + //传回给回调函数的参数 + var callBackPara = { + items: items, + elHtml: elHtml, + id: id + } + fn(callBackPara); + } + catch (e) { + alert("Exception : " + e); + } + }, + failure: function (response, options) { + showResult(response.responseText); + } + }); + } + + /** + * 生成弹窗小提示 + * @param tipConfig 相关配置(必传text,target,title) + */ + tableTips.register = function (tipConfig) { + new Ext.ToolTip({ + html: tipConfig.text, + target: tipConfig.target, + // 最大宽度 + maxWidth: tipConfig.maxWidth || 500, + // 最小宽度 + minWidth: tipConfig.minWidth || 300, + //允许溢出 + overflowY: 'scroll', + overflowX: 'scroll', + title: tipConfig.title, + trackMouse: true + }); + /* Ext.QuickTips.register({ + text: tipConfig.text, + target: tipConfig.target, + // 消失的时间 + hideDelay: tipConfig.hideDelay || 5000, + // 最大宽度 + maxWidth: tipConfig.maxWidth || 500, + width: tipConfig.width || 450, + // 最小宽度 + minWidth: tipConfig.minWidth || 300, + // 显示时间 + showDelay: tipConfig.showDelay || 2000, + // 提示框是否跟着鼠标一起走 + trackMouse: tipConfig.showDelay || true, + title: tipConfig.title + });*/ + } + + /** + * 建立提示框 + * @param tHeadConfig table的head设置 + * @param tBodyContent table的正文内容 + * @param target 要渲染到什么地方 + * @param title 提示框的信息 + */ + tableTips.buildTaleTips = function (tHeadConfig, tBodyContent, target, title) { + var me = this; + var tableBuilder = ext2CompUtil.getTableBuilder(); + //获得生成的table的html + var tipTable = tableBuilder.createTable(tHeadConfig, tBodyContent); + var tipContent = { + text: tipTable, + target: target, + title: title + }; + me.register(tipContent); + //返回页面做缓存,不能用register和tipContent返回,tipContent会缓存target,所以鼠标指向的地方要和第一次生成的地方一致才能正常显示,而register会有部分生成不了 + return tipTable; + } + + + //endregion + + return new ExtCompUtilFactory(); })(); \ No newline at end of file Index: ssts-web/src/main/webapp/disinfectsystem/config/gzspyqzyy/config.js =================================================================== diff -u -r15565 -r16102 --- ssts-web/src/main/webapp/disinfectsystem/config/gzspyqzyy/config.js (.../config.js) (revision 15565) +++ ssts-web/src/main/webapp/disinfectsystem/config/gzspyqzyy/config.js (.../config.js) (revision 16102) @@ -1,72 +1,75 @@ var sstsConfig = { - // 禁用批量装入虚拟篮筐功能(仅仅隐藏页面相关的元素、不做后台控制.未配此参数时则标识牌功能默认为禁用),只有值为false才启用,为其它任何值或未配置此属性均表示禁用 - disableLoadToVirtualBasket : false, - // 禁用标识牌功能(仅仅隐藏页面相关的元素、不做后台控制.未配此参数时则标识牌功能默认为禁用),只有值为false才启用,为其它任何值或未配置此属性均表示禁用 - disableIdCard : false, - // 回收时科室显示结算科室 - showSettleAccountsDepartInRecycling : false, - // 审核器械包必须入篮筐(一级供应室) - mustScanBasketForTousseReview : true, - // 审核器械包必须入篮筐(二级供应室) - mustScanBasketForTousseReviewOf2ndSupplyRoom : true, - // 申请表单的类型:1 : 通用申请单(组合申请单),2:分开的申请单 - applicationFormType : 1, - hidePackageSpec : true, - // 申请界面是否显示器械包或消毒物品的的单位 - showTousseUnitColumn : true, - // 申请界面是否隐藏器械包价格 - hideToussePriceColumn : false, - // 申请界面是否隐藏一次性物品价格 - hideDisposablePriceColumn : false, - // 条码类型:1:一维码, 2:二维码 - barcodeType : 1, - // 申请器械包时是否自动归还待归还物品 - autoReturnTousse : true, - // 是否隐藏进入审核列表按钮 - hideEnterReviewListButton : true, - // 已发货但是未签收的物品是否允许登记使用记录 - notSignedItemsCanRegistUseRecord : true, - // 是否自动补全用户名 - autoFillUserName:false, - // 自动补全用户名的长度 - autoFillUserNameLength:6, - // 打印回收清单区分部分的过滤是通过器械包定义的资产归属属性 - recyclingRecordListFilterByAssetBelong : false, - // 打印回收清单的打印物品范围,'器械包'、'消毒物品'、'敷料包'、'全部' - recyclingRecordListPrintTousseType : '全部', - // 是否支持部分终止申请单中的物品 - enableTerminatePartOfApplication : true, - //限制入库单填写的一次性物品为能申领的物品 - restrictGodownEntryDiposableGoods : false, - //提交申请单前显示申请的物品清单 - showAppliedGoodsBeforeSubmit : true, - printRecyclingConfigFormVersion: 2,// 打印发货计划设置页的版本,默认为1 - // 使用记录审核方式, 1: 审核和转换按钮分开; 2:审核和转换按钮合并为1个 - useRecordAuditMode : 1, - //是否禁用科室同步 - hiddenOrgunitSyncButton : true, - //是否禁用人员同步 - hiddenUserSyncButton : true, - hideApplyDepartColumn : false, // 隐藏申请科室 - hideSettleDepartColumn : true, // 隐藏结算科室 - //审核页扫描模式(不配此参数的话默认都为single(单个扫描),也可配置成area(首尾条码),每个project根据需要可进行配置) - reviewPageScanMode : 'single', - //灭菌页扫描模式(不配此参数的话默认都为single(单个扫描),也可配置成area(首尾条码),每个project根据需要可进行配置) - sterilePageScanMode : 'single', - //发货页扫描模式(不配此参数的话默认都为single(单个扫描),也可配置成area(首尾条码),每个project根据需要可进行配置) - invoicePageScanMode : 'single', - //清洗界面添加清洗记录时扫描清洗篮筐条码是否收缩(未配置或配置值为false表示不收缩) - enableCollapseWhenScanWashBasketBarcode : true, - //使能设备接口 - disableDeviceInterface : false, - //装配界面显示灭菌炉和炉次 - showSterilizer : true, - //发货单是否合并打印,如果为true,则把一次性物品、消毒物品、器械包打印到一张单,false或者不配置,都是分三张单打印 - mergePrintInvoiceGoods:true, - //登录完系统默认弹出切换科室选项的小窗口 - defaultShowOrgChange:true, - //查询明细核算月报,核算月报,自定义器械包显示包数量 - isMonthReportShowCustonTousseAmount : true, - //是否启用:IP对应的默认科室配置的菜单 - enableIPAndOrgUnitMapping : true -} \ No newline at end of file + // 禁用批量装入虚拟篮筐功能(仅仅隐藏页面相关的元素、不做后台控制.未配此参数时则标识牌功能默认为禁用),只有值为false才启用,为其它任何值或未配置此属性均表示禁用 + disableLoadToVirtualBasket: false, + // 禁用标识牌功能(仅仅隐藏页面相关的元素、不做后台控制.未配此参数时则标识牌功能默认为禁用),只有值为false才启用,为其它任何值或未配置此属性均表示禁用 + disableIdCard: false, + // 回收时科室显示结算科室 + showSettleAccountsDepartInRecycling: false, + // 审核器械包必须入篮筐(一级供应室) + mustScanBasketForTousseReview: true, + // 审核器械包必须入篮筐(二级供应室) + mustScanBasketForTousseReviewOf2ndSupplyRoom: true, + // 申请表单的类型:1 : 通用申请单(组合申请单),2:分开的申请单 + applicationFormType: 1, + hidePackageSpec: true, + // 申请界面是否显示器械包或消毒物品的的单位 + showTousseUnitColumn: true, + // 申请界面是否隐藏器械包价格 + hideToussePriceColumn: false, + // 申请界面是否隐藏一次性物品价格 + hideDisposablePriceColumn: false, + // 条码类型:1:一维码, 2:二维码 + barcodeType: 1, + // 申请器械包时是否自动归还待归还物品 + autoReturnTousse: true, + // 是否隐藏进入审核列表按钮 + hideEnterReviewListButton: true, + // 已发货但是未签收的物品是否允许登记使用记录 + notSignedItemsCanRegistUseRecord: true, + // 是否自动补全用户名 + autoFillUserName: false, + // 自动补全用户名的长度 + autoFillUserNameLength: 6, + // 打印回收清单区分部分的过滤是通过器械包定义的资产归属属性 + recyclingRecordListFilterByAssetBelong: false, + // 打印回收清单的打印物品范围,'器械包'、'消毒物品'、'敷料包'、'全部' + recyclingRecordListPrintTousseType: '全部', + // 是否支持部分终止申请单中的物品 + enableTerminatePartOfApplication: true, + //限制入库单填写的一次性物品为能申领的物品 + restrictGodownEntryDiposableGoods: false, + //提交申请单前显示申请的物品清单 + showAppliedGoodsBeforeSubmit: true, + printRecyclingConfigFormVersion: 2,// 打印发货计划设置页的版本,默认为1 + // 使用记录审核方式, 1: 审核和转换按钮分开; 2:审核和转换按钮合并为1个 + useRecordAuditMode: 1, + //是否禁用科室同步 + hiddenOrgunitSyncButton: true, + //是否禁用人员同步 + hiddenUserSyncButton: true, + hideApplyDepartColumn: false, // 隐藏申请科室 + hideSettleDepartColumn: true, // 隐藏结算科室 + //审核页扫描模式(不配此参数的话默认都为single(单个扫描),也可配置成area(首尾条码),每个project根据需要可进行配置) + reviewPageScanMode: 'single', + //灭菌页扫描模式(不配此参数的话默认都为single(单个扫描),也可配置成area(首尾条码),每个project根据需要可进行配置) + sterilePageScanMode: 'single', + //发货页扫描模式(不配此参数的话默认都为single(单个扫描),也可配置成area(首尾条码),每个project根据需要可进行配置) + invoicePageScanMode: 'single', + //清洗界面添加清洗记录时扫描清洗篮筐条码是否收缩(未配置或配置值为false表示不收缩) + enableCollapseWhenScanWashBasketBarcode: true, + //使能设备接口 + disableDeviceInterface: false, + //装配界面显示灭菌炉和炉次 + showSterilizer: true, + //发货单是否合并打印,如果为true,则把一次性物品、消毒物品、器械包打印到一张单,false或者不配置,都是分三张单打印 + mergePrintInvoiceGoods: true, + //登录完系统默认弹出切换科室选项的小窗口 + defaultShowOrgChange: true, + //查询明细核算月报,核算月报,自定义器械包显示包数量 + isMonthReportShowCustonTousseAmount: true, + //是否启用:IP对应的默认科室配置的菜单 + enableIPAndOrgUnitMapping: true, + // 消毒供应中心物品领用显示物品明细 + showGoodDetail: true + +}; \ No newline at end of file Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManager.java =================================================================== diff -u -r15993 -r16102 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManager.java (.../DiposableGoodsManager.java) (revision 15993) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManager.java (.../DiposableGoodsManager.java) (revision 16102) @@ -58,8 +58,19 @@ * @return */ public JSONObject searchDisposableGoodsList(String simpleSpell, String allItems,String handleDepartCode,boolean showExternalCodeOfDisposableGoods); - + + /** + * 获取一次性物品定义的列表(用List返回) + * @see DiposableGoodsManager#searchDisposableGoodsList + * @param simpleSpell + * @param allItems + * @param handleDepartCode + * @param showExternalCodeOfDisposableGoods + * @return + */ + List> findDisposableGoodsList(String simpleSpell, String allItems, String handleDepartCode,boolean showExternalCodeOfDisposableGoods); + /** * 获取一次性物品定义及材料定义的列表 * @param simpleSpell 拼音或五笔码,或者是物品名称 * @param allItems 是否能被科室申请的标志,值yes表示能 @@ -76,6 +87,15 @@ */ public JSONObject searchMaterialAndDiposableGoods(String simpleSpell,String goodsType); + /** + * 获取材料或者一次性物品的NAME和ID,用于store中(用list返回) + * @see DiposableGoodsManager#searchMaterialAndDiposableGoods + * @param searchString + * @param goodsType + * @return + */ + List> findMaterialAndDisposableGoods(String searchString, String goodsType); + public String deleteDiposableGoodsAndReturnMessage(String ids); public String importDiposableGoodsFromExcel(HttpServletRequest request); Index: ssts-receiverecord/src/main/java/com/forgon/disinfectsystem/receiverecord/service/GodownBriefHandler.java =================================================================== diff -u --- ssts-receiverecord/src/main/java/com/forgon/disinfectsystem/receiverecord/service/GodownBriefHandler.java (revision 0) +++ ssts-receiverecord/src/main/java/com/forgon/disinfectsystem/receiverecord/service/GodownBriefHandler.java (revision 16102) @@ -0,0 +1,61 @@ +package com.forgon.disinfectsystem.receiverecord.service; + +import com.forgon.Constants; +import com.forgon.disinfectsystem.entity.receiverecord.ReceiveRecord; +import com.forgon.disinfectsystem.entity.receiverecord.ReceiveRecordItem; +import com.forgon.results.handler.ResultBackHandler; + +import java.util.List; + +/** + * Created by zhonghaowen on 2016/12/5. + * 消毒供应中心领用单列表处理类 + */ +public class GodownBriefHandler extends ResultBackHandler { + + + private static GodownBriefHandler godownBriefHandler; + + private GodownBriefHandler() { + } + + + public static GodownBriefHandler getInstance() { + if (godownBriefHandler == null) { + synchronized (GodownBriefHandler.class) { + if (godownBriefHandler == null) { + godownBriefHandler = new GodownBriefHandler(); + } + } + } + return godownBriefHandler; + } + + + /** + * 给物品添加对应的简要(名字x数量) + * + * @param list dwr查询结果的list + */ + @Override + public void handleList(List list) { + try { + for (ReceiveRecord receiveRecord : list) { + List items = receiveRecord.getItems(); + StringBuilder sb = new StringBuilder(); + for (int i = 0, size = items.size(); i < size; i++) { + ReceiveRecordItem item = items.get(i); + sb.append(item.getGoodsName() + "x" + item.getAmount()); + if (i != size - 1) { + sb.append(Constants.IDS_SEPARATOR_COMMA).append(" "); + } + } + receiveRecord.setBrief(sb.toString()); + } + } + catch (Exception e) { + logger.error(e); + throw new RuntimeException(e); + } + } +} Index: ssts-web/src/main/webapp/disinfectsystem/assestManagement/godownEntry/godownOutToSupplyRoomView.jsp =================================================================== diff -u -r12331 -r16102 --- ssts-web/src/main/webapp/disinfectsystem/assestManagement/godownEntry/godownOutToSupplyRoomView.jsp (.../godownOutToSupplyRoomView.jsp) (revision 12331) +++ ssts-web/src/main/webapp/disinfectsystem/assestManagement/godownEntry/godownOutToSupplyRoomView.jsp (.../godownOutToSupplyRoomView.jsp) (revision 16102) @@ -10,17 +10,22 @@ 入库单信息 - + + + + - - - + + + + + @@ -39,6 +44,7 @@ + \ No newline at end of file Index: ssts-web/src/main/webapp/disinfectsystem/assestManagement/godownEntry/godownOutToSupplyRoomView.js =================================================================== diff -u -r15606 -r16102 --- ssts-web/src/main/webapp/disinfectsystem/assestManagement/godownEntry/godownOutToSupplyRoomView.js (.../godownOutToSupplyRoomView.js) (revision 15606) +++ ssts-web/src/main/webapp/disinfectsystem/assestManagement/godownEntry/godownOutToSupplyRoomView.js (.../godownOutToSupplyRoomView.js) (revision 16102) @@ -29,6 +29,9 @@ {name : 'deleteButton'} ]; +//弹窗提示管理器 +var tipManager = {}; + // 清除表单数据 function clearFormData(){ diposableGoodsBatchNumStore.removeAll(); @@ -130,7 +133,8 @@ root : 'data' }, [ {name : 'id',mapping : 'id'}, - {name : 'name',mapping : 'name'} + {name : 'name',mapping : 'name'}, + {name: 'type', mapping: 'type'} ]) }); @@ -1065,6 +1069,25 @@ return "" + value + ""; } +/** + * 建立提示框的正文内容 + * @param items 正文内容的text + * @param nameWidth 名字的宽度 + * @param amountWidth 数量的宽度 + * @returns {string} + */ +function buildTBodyContent(items, nameWidth, amountWidth) { + var tBodyContent = ""; + Ext.each(items, function (item) { + tBodyContent += + "" + + "" + item.name + "" + + "" + item.amount + "" + + ""; + }); + return tBodyContent; +} + Ext.onReady(function() { Ext.QuickTips.init(); //单价数据源 @@ -1080,6 +1103,7 @@ } var columns = [ {header : "领用时间",width : 200,dataIndex : 'time' , renderer : editLink}, + {header: "物品明细", width: 500, dataIndex: 'brief', hidden : !sstsConfig.showGoodDetail}, {header : "领用科室",width : 200,dataIndex : 'depart'}, {header : "领取仓库",width : 200,dataIndex : 'warehouseName'}, {header : "操作员",width : 200,dataIndex : 'operator'}, @@ -1091,6 +1115,7 @@ {name : 'depart'}, {name : 'warehouseName'}, {name : 'operator'}, + {name: 'brief'}, {name : 'time'}, {name : 'remark'} ]; @@ -1164,7 +1189,7 @@ v = "0" + v; } var startDayOfMonth = dt.getFullYear() + "/" + v + "/01"; - var form = new Ext.Panel({ + /*var form = new Ext.Panel({ layout : 'table', frame : true, region : 'north', @@ -1282,15 +1307,64 @@ }] }] }] - }); + });*/ - var viewport = new Ext.Viewport( { - layout : 'border', - items : [form,{ - region : 'center', - margins : '0 0 0 0', - layout : 'fit', - items : grid - }] - }); + + //番禺区中医院只显示物品简要,而不用鼠标停留在上方时显示出材料明细,其他医院则需要 + if (!sstsConfig.showGoodDetail){ + var nameWidth = '300px'; + var amountWidth = '70px'; + var tHeadConfig = { + '名称': nameWidth, + '数量': amountWidth + } + //获得提示框的对象 + var tableTips = ext2CompUtil.getTableTips(); + var title = "领用单信息:

"; + var winConfig = { + title : title, + url : WWWROOT + '/disinfectSystem/receiveRecordAction!loadReceiveRecord.do', + grid : grid, + tipManagerCache : tipManager + } + tableTips.popTipWin(winConfig, function (callBackPara) { + var tBodyContent = buildTBodyContent(callBackPara.items, nameWidth, amountWidth); + var tipContent = tableTips.buildTaleTips(tHeadConfig, tBodyContent, callBackPara.elHtml, title); + if (!tipManager[callBackPara.id]){ + //将生成的html用对应的id缓存到页面,减少请求服务器次数 + tipManager[callBackPara.id] = tipContent; + } + }); + } + + + //导出按钮 + var exportBtn = { + columnWidth: .3, + layout: 'form', + items: [{ + xtype: 'button', + text: '导出', + minWidth: 70, + iconCls: 'icon_set', + handler: function () { + var code = $Id('keyWord').value; + var startDate = $Id('startDate').value; + var endDate = $Id('endDate').value; + location.href = WWWROOT + "/disinfectsystem/assestManagement/godownEntry/exportSupplyRoomDetail.jsp?code=" + code + "&startDate=" + startDate + "&endDate=" + endDate; + } + }] + }; + var queryForm = new TBarForm(tousseOrDiposableGoodsStore).initForm(exportBtn); + + var viewport = new Ext.Viewport({ + layout: 'border', + items: [queryForm, { + region: 'center', + margins: '0 0 0 0', + layout: 'fit', + items: grid + }] + }); + }); \ No newline at end of file Index: ssts-web/src/main/java/com/forgon/disinfectsystem/component/grid/GridManagerImpl.java =================================================================== diff -u -r15604 -r16102 --- ssts-web/src/main/java/com/forgon/disinfectsystem/component/grid/GridManagerImpl.java (.../GridManagerImpl.java) (revision 15604) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/component/grid/GridManagerImpl.java (.../GridManagerImpl.java) (revision 16102) @@ -18,13 +18,15 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; +import com.forgon.disinfectsystem.entity.receiverecord.ReceiveRecord; +import com.forgon.disinfectsystem.receiverecord.service.GodownBriefHandler; +import com.forgon.results.handler.ResultBackHandler; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.Predicate; import org.apache.commons.lang.StringUtils; import org.hibernate.Query; import org.springframework.util.Assert; -import com.forgon.Constants; import com.forgon.component.grid.GridManager; import com.forgon.component.grid.vo.GridVo; import com.forgon.databaseadapter.service.DateQueryAdapter; @@ -37,7 +39,6 @@ import com.forgon.disinfectsystem.entity.returngoodsrecord.ReturnGoodsItem; import com.forgon.disinfectsystem.entity.returngoodsrecord.ReturnGoodsRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.foreignproxydisinfection.ForeignProxyDisinfection; -import com.forgon.disinfectsystem.entity.sterilizationmanager.foreignproxydisinfection.ForeignProxyItem; import com.forgon.tools.MathTools; import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; @@ -310,6 +311,12 @@ } + //如果是消毒供应中心领用单列表,则添加物品简要 + else if (ReceiveRecord.class.getSimpleName().equals(poClass)) { + ResultBackHandler godownBriefHandler = GodownBriefHandler.getInstance(); + godownBriefHandler.handleList(list); + } + Map map = new HashMap(); map.put("totalResults", totalResults); map.put("list", list); Index: forgon-core/src/main/java/com/forgon/util/SqlUtils.java =================================================================== diff -u -r12331 -r16102 --- forgon-core/src/main/java/com/forgon/util/SqlUtils.java (.../SqlUtils.java) (revision 12331) +++ forgon-core/src/main/java/com/forgon/util/SqlUtils.java (.../SqlUtils.java) (revision 16102) @@ -5,7 +5,10 @@ import java.util.LinkedList; import java.util.List; +import java.util.regex.Matcher; +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.security.tools.Util; import org.apache.commons.lang.StringUtils; import com.forgon.Constants; @@ -43,4 +46,26 @@ //sb.append(")"); return sb.toString(); } + + /** + * 根据输入的关键字来拼接对应要查询的sql + * @param searchString 输入的关键字 + * @param sql 要拼的sql + * @return + */ + public static String getSQLByKeyWord(String searchString, String sql){ + Matcher m = com.forgon.tools.Constants.ChineseCharPattern.matcher(searchString); + String searchMode = AcegiHelper.getLoginUser().getSearchMode(); + searchString = searchString.trim(); + if (searchString.length() > 0) { + searchString = searchString.toUpperCase(); + if (m.find()) { + sql += " and po.name like '%" + searchString + "%'"; + } + else { + sql += Util.getSearchSQLByUserSetting(searchMode, searchString); + } + } + return sql; + } } Index: ssts-receiverecord/src/main/java/com/forgon/disinfectsystem/receiverecord/service/GodownOutToSupplyTableFilterManagerImpl.java =================================================================== diff -u --- ssts-receiverecord/src/main/java/com/forgon/disinfectsystem/receiverecord/service/GodownOutToSupplyTableFilterManagerImpl.java (revision 0) +++ ssts-receiverecord/src/main/java/com/forgon/disinfectsystem/receiverecord/service/GodownOutToSupplyTableFilterManagerImpl.java (revision 16102) @@ -0,0 +1,39 @@ +package com.forgon.disinfectsystem.receiverecord.service; + +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; +import com.forgon.search.service.TBarFilterManager; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.Map; + +/** + * Created by zhonghaowen on 2016/12/5. + * 消毒供应中心领用单列表dwr工具栏sql条件过滤处理类 + */ +@Service("godownOutToSupplyTableFilterManagerImpl") +public class GodownOutToSupplyTableFilterManagerImpl extends TBarFilterManager { + + @Override + public void filterPara(Map sqlWhereParamMap, StringBuilder sql) { + this.createTimeFilterSql(sqlWhereParamMap, sql, "po.time"); + this.createKeyWordFilterSql(sqlWhereParamMap, sql); + } + + @Override + public void createKeyWordFilterSql(Map sqlWhereParamMap, StringBuilder sql) { + String keyWord = sqlWhereParamMap.get("keyWord"); + String goodType = sqlWhereParamMap.get("goodType"); + if (StringUtils.isNotBlank(keyWord) && StringUtils.isNotBlank(goodType)) { + sql.append(" and po.id in (select rri.receiveRecord.id from receiveRecordItem rri "); + //如果是一次性物品 + if (DisposableGoods.TYPE_NAME.equals(goodType)) { + sql.append(String.format(" join rri.diposableGoodBatchStock dgbs join dgbs.diposableGoods dg where dg.disposableGoodsID = %s)", keyWord)); + } + //不是一次性物品 + else { + sql.append(String.format(" join rri.materialDefinition md where md.id = %s)", keyWord)); + } + } + } +} Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java =================================================================== diff -u -r15993 -r16102 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java (.../DiposableGoodsManagerImpl.java) (revision 15993) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java (.../DiposableGoodsManagerImpl.java) (revision 16102) @@ -735,7 +735,13 @@ map.put("data", mapList); return JSONObject.fromObject(map); } - + + public List> findDisposableGoodsList(String simpleSpell, String allItems, String handleDepartCode, boolean showExternalCodeOfDisposableGoods) { + String sql = this.buildGetDisposableGoodsSql(simpleSpell, allItems); + List> mapList = this.getDisposableGoodsListInternal(handleDepartCode, sql,false,showExternalCodeOfDisposableGoods); + return mapList; + } + /** * 查询材料 * @param handleDepartCode @@ -1090,7 +1096,7 @@ JSONObject json = null; String sql = "where 1=1"; - Matcher m = Constants.ChineseCharPattern.matcher(searchString); + /* Matcher m = Constants.ChineseCharPattern.matcher(searchString); String searchMode = AcegiHelper.getLoginUser().getSearchMode(); searchString = searchString.trim(); if (searchString.length() > 0) { @@ -1101,25 +1107,52 @@ sql += Util.getSearchSQLByUserSetting(searchMode, searchString); } - } + }*/ + sql = com.forgon.util.SqlUtils.getSQLByKeyWord(searchString, sql); - List> mapList = new ArrayList>(); - if("disposableGoods".equals(goodsType)){ + List> mapList = this.searchGoodByType(goodsType, sql); + /*if("disposableGoods".equals(goodsType)){ searchDisposableGoods(sql,mapList); }else if("material".equals(goodsType)){ searchMaterialGoods(sql, mapList); }else{ searchDisposableGoods(sql,mapList); searchMaterialGoods(sql, mapList); - } - + }*/ Map map = new HashMap(); map.put("totalCount", mapList.size()); map.put("data", mapList); json = JSONObject.fromObject(map); return json; } + @Override + public List> findMaterialAndDisposableGoods(String searchString,String goodsType){ + String sql = "where 1=1"; + sql = com.forgon.util.SqlUtils.getSQLByKeyWord(searchString, sql); + return this.searchGoodByType(goodsType, sql); + } + + /** + * 根据物品类型来查找对应的物品 + * @param goodsType 物品的类型 + * @param sql 查询的sql + */ + private List> searchGoodByType(String goodsType, String sql){ + List> mapList = new ArrayList<>(); + if("disposableGoods".equals(goodsType)){ + searchDisposableGoods(sql, mapList); + } + else if("material".equals(goodsType)){ + searchMaterialGoods(sql, mapList); + } + else{ + searchDisposableGoods(sql, mapList); + searchMaterialGoods(sql, mapList); + } + return mapList; + } + @SuppressWarnings("unchecked") private void searchDisposableGoods(String sql,List> mapList) { if(mapList != null){ @@ -1133,6 +1166,7 @@ goodsName += "[" + disposableGoods.getSpecification() + "]"; } temp.put("name", goodsName); + temp.put("type", DisposableGoods.TYPE_NAME); mapList.add(temp); } } @@ -1152,6 +1186,7 @@ goodsName += "[" + materialDefinition.getSpecification() + "]"; } temp.put("name", goodsName); + temp.put("type", MaterialDefinition.TYPE_NAME); mapList.add(temp); } } Index: forgon-tools/src/main/java/com/forgon/tools/util/PageUtil.java =================================================================== diff -u -r15948 -r16102 --- forgon-tools/src/main/java/com/forgon/tools/util/PageUtil.java (.../PageUtil.java) (revision 15948) +++ forgon-tools/src/main/java/com/forgon/tools/util/PageUtil.java (.../PageUtil.java) (revision 16102) @@ -1,6 +1,7 @@ package com.forgon.tools.util; import com.forgon.entity.PageEntity; +import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.StrutsResponseUtils; import net.sf.json.JSONObject; import org.apache.commons.beanutils.BeanUtils; @@ -19,6 +20,20 @@ private static final Logger logger = Logger.getLogger(PageUtil.class); /** + * 获得分页参数 + * + * @return {@link PageEntity} + */ + public static PageEntity getPagePara() { + int start = StrutsParamUtils.getPraramValue("start", 0); + int limit = StrutsParamUtils.getPraramValue("limit", 0); + PageEntity pageEntity = new PageEntity(); + pageEntity.setStart(start); + pageEntity.setLimit(limit); + return pageEntity; + } + + /** * 分页方法 * * @param start 从第几条开始 Index: forgon-core/src/main/java/com/forgon/results/handler/ResultBackHandler.java =================================================================== diff -u -r15176 -r16102 --- forgon-core/src/main/java/com/forgon/results/handler/ResultBackHandler.java (.../ResultBackHandler.java) (revision 15176) +++ forgon-core/src/main/java/com/forgon/results/handler/ResultBackHandler.java (.../ResultBackHandler.java) (revision 16102) @@ -4,16 +4,22 @@ import org.json.JSONArray; import org.json.JSONObject; +import java.util.List; + /** * Created by zhonghaowen on 2016/9/29. - * 页面返回结果处理器 + * 页面返回结果处理器,此类提供以下两种处理方案: + *
    + *
  1. handleResult():主要针对rows的处理
  2. + *
  3. handleList():主要针对gridManagerImpl中getObjectList()方法的处理,由于renderGrid()方法返回页面只有po类的普通属性,而不能得到类似list这种属性,所以可以通过此方法来进行处理过滤
  4. + *
*/ -public abstract class ResultBackHandler { +public abstract class ResultBackHandler { protected Logger logger = Logger.getLogger(this.getClass()); /** - * 处理页面返回结果 + * 处理页面返回结果(用于对字符串的处理,主要处理字符串中rows列) * * @param target 返回页面json字符串 * @return 处理后返回页面的json字符串 @@ -34,10 +40,23 @@ } /** - * 处理rows的数组 + * 处理rows的数组,如果需要用handleResult,必须重写此方法 + *

(注:此方法作为钩子使用,每个子类根据自己的业务逻辑,来判断到底需要使用handleResult还是handleList,重写对应的方法即可,不必要重写两个方法)

* * @param rows JSONArray数组 */ - public abstract void doHandleRows(JSONArray rows); + public void doHandleRows(JSONArray rows) { + } + /** + * 处理页面返回结果(主要用于gridManagerImpl中getObjectList方法得到list时的处理) + *

(注:此方法作为钩子使用,每个子类根据自己的业务逻辑,来判断到底需要使用handleResult还是handleList,重写对应的方法即可,不必要重写两个方法)

+ * + * @param list dwr查询结果的list,使用泛型来处理 + */ + public void handleList(List list) { + + } + + } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/receiverecord/ReceiveRecord.java =================================================================== diff -u -r15308 -r16102 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/receiverecord/ReceiveRecord.java (.../ReceiveRecord.java) (revision 15308) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/receiverecord/ReceiveRecord.java (.../ReceiveRecord.java) (revision 16102) @@ -14,6 +14,7 @@ import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.OneToMany; +import javax.persistence.Transient; import org.hibernate.annotations.Cache; import org.hibernate.annotations.CacheConcurrencyStrategy; @@ -73,6 +74,11 @@ private Long inventoryWriteBackEntryId; private String type = TYPE_MANUAL_APPLICATION; + + /** + * 物品简要(只用于显示对应的物品加数量,不持久化到数据库) + */ + private String brief; @Id @GeneratedValue(strategy = GenerationType.AUTO) @@ -177,4 +183,13 @@ this.type = type; } } + + @Transient + public String getBrief() { + return brief; + } + + public void setBrief(String brief) { + this.brief = brief; + } } Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/DiposableGoodsAction.java =================================================================== diff -u -r15993 -r16102 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/DiposableGoodsAction.java (.../DiposableGoodsAction.java) (revision 15993) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/action/DiposableGoodsAction.java (.../DiposableGoodsAction.java) (revision 16102) @@ -18,6 +18,7 @@ import com.beust.jcommander.ParameterException; import com.forgon.tools.util.IntegerUtils; +import com.forgon.tools.util.PageUtil; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; @@ -860,13 +861,15 @@ if(warehouse != null){ handleDepartCode = warehouse.getOrgUnitCode(); } - JSONObject json = diposableGoodsManager.searchDisposableGoodsList( - spell, allItems,handleDepartCode,true); - HttpServletResponse response = StrutsParamUtils.getResponse(); - response.setCharacterEncoding("UTF-8"); - PrintWriter out = response.getWriter(); - out.print(json); - out.close(); + // JSONObject json = diposableGoodsManager.searchDisposableGoodsList( + // spell, allItems,handleDepartCode,true); + List> reList = diposableGoodsManager.findDisposableGoodsList(spell, allItems, handleDepartCode, true); + PageUtil.outPutResult(PageUtil.getPagePara(), reList); + // HttpServletResponse response = StrutsParamUtils.getResponse(); + // response.setCharacterEncoding("UTF-8"); + // PrintWriter out = response.getWriter(); + // out.print(json); + // out.close(); } catch (Exception e) { e.printStackTrace(); } @@ -892,15 +895,10 @@ spell = spell.toUpperCase(); } String goodsType = StrutsParamUtils.getPraramValue("goodsType", null); - JSONObject json = diposableGoodsManager - .searchMaterialAndDiposableGoods(spell,goodsType); - HttpServletResponse response = StrutsParamUtils.getResponse(); - response.setCharacterEncoding("UTF-8"); - PrintWriter out; - - out = response.getWriter(); - out.print(json); - out.close(); + // JSONObject json = diposableGoodsManager + // .searchMaterialAndDiposableGoods(spell,goodsType); + List> reList = diposableGoodsManager.findMaterialAndDisposableGoods(spell, goodsType); + PageUtil.outPutResult(PageUtil.getPagePara(), reList); } catch (IOException e) { e.printStackTrace(); } Index: ssts-receiverecord/src/main/java/com/forgon/disinfectsystem/receiverecord/dwr/table/ReceiveRecordTableManager.java =================================================================== diff -u -r13089 -r16102 --- ssts-receiverecord/src/main/java/com/forgon/disinfectsystem/receiverecord/dwr/table/ReceiveRecordTableManager.java (.../ReceiveRecordTableManager.java) (revision 13089) +++ ssts-receiverecord/src/main/java/com/forgon/disinfectsystem/receiverecord/dwr/table/ReceiveRecordTableManager.java (.../ReceiveRecordTableManager.java) (revision 16102) @@ -1,55 +1,55 @@ /** - * + * */ package com.forgon.disinfectsystem.receiverecord.dwr.table; -import java.util.List; -import java.util.Map; - -import org.apache.commons.lang.StringUtils; - import com.forgon.component.grid.GridManager; -import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.disinfectsystem.entity.receiverecord.ReceiveRecord; -import com.forgon.disinfectsystem.entity.receiverecord.ReceiveRecordItem; import com.forgon.disinfectsystem.receiverecord.service.ReceiveRecordManager; +import com.forgon.search.service.TBarFilterManager; +import com.forgon.tools.util.GetJsonUtil; +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + /** * @author JamZhou - * + *

* 2012-11-7 上午10:55:27 */ public class ReceiveRecordTableManager { - private GridManager gridManager; + private GridManager gridManager; - private DateQueryAdapter dateQueryAdapter; - - private ReceiveRecordManager receiveRecordManager; - - public void setReceiveRecordManager(ReceiveRecordManager receiveRecordManager) { - this.receiveRecordManager = receiveRecordManager; - } - public void setGridManager(GridManager gridManager) { - this.gridManager = gridManager; - } + private ReceiveRecordManager receiveRecordManager; - public void setDateQueryAdapter(DateQueryAdapter dateQueryAdapter) { - this.dateQueryAdapter = dateQueryAdapter; - } + @Resource(name = "godownOutToSupplyTableFilterManagerImpl") + private TBarFilterManager godownOutToSupplyTableFilterManagerImpl; - public String findReceiveRecordTableList( - Map> parameterMap) { - Map sqlWhereParamMap = gridManager - .getParamFromView(parameterMap); - String sql = " where 1=1"; - String keyWord = sqlWhereParamMap.get("keyWord"); + public void setReceiveRecordManager(ReceiveRecordManager receiveRecordManager) { + this.receiveRecordManager = receiveRecordManager; + } + + public void setGridManager(GridManager gridManager) { + this.gridManager = gridManager; + } + + + public String findReceiveRecordTableList(Map> parameterMap) { + Map sqlWhereParamMap = gridManager.getParamFromView(parameterMap); + StringBuilder sql = new StringBuilder(" where 1=1 "); + godownOutToSupplyTableFilterManagerImpl.filterPara(sqlWhereParamMap, sql); + String result = gridManager.renderGrid(parameterMap, ReceiveRecord.class.getSimpleName(), sql.toString(), new String[]{"items"}); + return result; + + /*String sql = " where 1=1"; + String keyWord = sqlWhereParamMap.get("keyWord"); int codeIndex = keyWord.lastIndexOf("["); String specification = ""; if (StringUtils.isNotBlank(keyWord) && codeIndex != -1) { - specification = keyWord.substring(codeIndex + 1, - keyWord.length() - 1); + specification = keyWord.substring(codeIndex + 1, keyWord.length() - 1); keyWord = keyWord.substring(0, codeIndex); } String startDate = sqlWhereParamMap.get("startDate"); @@ -91,13 +91,10 @@ endDate += " 23:59:59"; sql += " and po.time <= " + dateQueryAdapter.dateAdapter(endDate); } + String result = gridManager.renderGrid(parameterMap, ReceiveRecord.class.getSimpleName(), sql.toString(), null);*/ + } - return gridManager.renderGrid(parameterMap, - ReceiveRecord.class.getSimpleName(), sql, - new String[] { "items" }); - } - - public boolean updateReceiveRecordItems(){ - return receiveRecordManager.updateReceiveRecordItems(); - } + public boolean updateReceiveRecordItems() { + return receiveRecordManager.updateReceiveRecordItems(); + } }