Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/WareHouseManager.java =================================================================== diff -u -r20280 -r26757 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/WareHouseManager.java (.../WareHouseManager.java) (revision 20280) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/WareHouseManager.java (.../WareHouseManager.java) (revision 26757) @@ -128,4 +128,10 @@ * @return */ public JSONArray searchWareHouseOrOperationRoom(String spell); + /** + * 验证仓库是否是一级供应室的仓库 + * @param id 仓库id + * @return + */ + public boolean checkIsOneCSSDWareHouse(Long id); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/action/WareHouseAction.java =================================================================== diff -u -r26724 -r26757 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/action/WareHouseAction.java (.../WareHouseAction.java) (revision 26724) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/action/WareHouseAction.java (.../WareHouseAction.java) (revision 26757) @@ -30,6 +30,7 @@ import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.json.JsonPropertyFilter; +import com.forgon.tools.StrutsResponseUtils; import com.opensymphony.xwork2.ModelDriven; import com.opensymphony.xwork2.Preparable; @@ -303,6 +304,20 @@ public WareHouse getModel() { return wareHouse; } - - + /** + * 获取指定科室的所有仓库 + */ + public void getWareHouseByDepartCoding(){ + JSONObject json = new JSONObject(); + try { + String departCoding = StrutsParamUtils.getPraramValue("departCoding", null); + if(StringUtils.isNotBlank(departCoding)){ + json = wareHouseManager.getAllWareHouse(departCoding); + } + } catch (Exception e) { + e.printStackTrace(); + json.put("success", false); + } + StrutsResponseUtils.output(json); + } } Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java =================================================================== diff -u -r26602 -r26757 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java (.../TousseInstanceAction.java) (revision 26602) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java (.../TousseInstanceAction.java) (revision 26757) @@ -39,6 +39,7 @@ import com.forgon.disinfectsystem.basedatamanager.sterilisation.service.SterilisationManager; import com.forgon.disinfectsystem.basedatamanager.sterilizer.service.SterilizerManager; import com.forgon.disinfectsystem.basedatamanager.urgent.vo.UrgentLevelVo; +import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager; import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveDisposablegoods; @@ -139,6 +140,11 @@ private IDCardDefinitionManager idCardDefinitionManager; + private WareHouseManager wareHouseManager; + + public void setWareHouseManager(WareHouseManager wareHouseManager) { + this.wareHouseManager = wareHouseManager; + } public void setIdCardDefinitionManager( IDCardDefinitionManager idCardDefinitionManager) { this.idCardDefinitionManager = idCardDefinitionManager; @@ -1631,4 +1637,94 @@ } StrutsResponseUtils.output(obj); } + /** + * 获取科室库存盘点信息 + */ + public void getDepartInventoryInfo(){ + Long id = StrutsParamUtils.getPraramLongValue("id", null); + JSONArray arr = null; + if(id != null){ + arr = tousseInstanceManager.getInventoryOfBaseAmoutById(id); + }else{ + String departCoding = StrutsParamUtils.getPraramValue("departCoding", null); + String tousseNames = StrutsParamUtils.getPraramValue("tousseNames", null); + String wareHouseId = StrutsParamUtils.getPraramValue("wareHouseId",null); + arr = tousseInstanceManager.getDepartInventoryInfo(departCoding, wareHouseId, tousseNames); + } + StrutsResponseUtils.output(arr); + } + /** + * 通过包条码获取包实例,供部门库存盘点使用 + */ + public void getTousseInstanceByBarcodeForDepartInventory(){ + String barcode = StrutsParamUtils.getPraramValue("barcode", null); + String departCoding = StrutsParamUtils.getPraramValue("departCoding", null); + Long wareHouseId = StrutsParamUtils.getPraramLongValue("wareHouseId", null); + JSONObject obj = new JSONObject(); + try { + TousseInstance ti = tousseInstanceManager.getTousseInstanceByBarcode(barcode); + if(ti == null){ + throw new RuntimeException("查无此包!"); + } + TousseDefinition td = ti.getTousseDefinition(); + if(td == null){ + throw new RuntimeException("找不到条码对应的包定义!"); + } + //仓库为空,或仓库属于供应室仓库 + if(wareHouseId == null || (ti.getWareHouseId() != null && !wareHouseId.equals(ti.getWareHouseId()) && !wareHouseManager.checkIsOneCSSDWareHouse(ti.getWareHouseId()))){ + throw new RuntimeException(String.format("[%s]仓库位置不匹配且不为一级供应室仓库!仓库为%s", ti.getTousseName(), ti.getWareHouseName())); + } + if(!departCoding.equals(ti.getDepartCoding())){ + throw new RuntimeException(String.format("[%s]申请科室不一致!申请科室为%s", ti.getTousseName(), ti.getDepart())); + } + if(ti.getTousseFixedBarcode()){ + throw new RuntimeException(String.format("[%s]有固定条码!", ti.getTousseName())); + } + if(ti.getComboTousseInstanceId() != null){ + throw new RuntimeException("不支持聚合包"); + } + if(!TousseDefinition.PACKAGE_TYPE_DISINFECTION.equals(td.getTousseType()) && + !TousseDefinition.PACKAGE_TYPE_INSIDE.equals(td.getTousseType())){ + throw new RuntimeException(String.format("%s的包类型为%s,只支持%和%s", + td.getName(),td.getTousseType(),TousseDefinition.PACKAGE_TYPE_DISINFECTION, + TousseDefinition.PACKAGE_TYPE_INSIDE)); + } + JSONObject tousseInstanceJSON = new JSONObject(); + tousseInstanceJSON.put("id",ti.getId()); + tousseInstanceJSON.put("barcode",ti.getBarcode()); + tousseInstanceJSON.put("tousseName",td.getName()); + obj.put("success", true); + obj.put("tousseInstance", tousseInstanceJSON); + } catch (Exception e) { + e.printStackTrace(); + obj.put("success", false); + obj.put("msg", e.getMessage()); + } + StrutsResponseUtils.output(obj); + } + /** + * 部门库存盘点时,获取差异数量的包实例信息或打开盘点记录盘点项 + * scanTousseInstanceIds 已扫描的包ids + * diffAmount 误差数量 + * wareHouseId 仓库id + */ + public void getDifftousseInstanceInfo(){ + Long id = StrutsParamUtils.getPraramLongValue("id", null); + JSONArray arr = null; + if(id != null){//获取盘点记录盘点项信息 + arr = tousseInstanceManager.getDifftousseInstanceInfo(id,null, null, null, null, null); + }else{//基数盘点获取盘点项信息 + String departCoding = StrutsParamUtils.getPraramValue("departCoding", null); + Long wareHouseId = StrutsParamUtils.getPraramLongValue("wareHouseId", null); + String tousseName = StrutsParamUtils.getPraramValue("tousseName", null); + String[] scanTousseInstanceIds = StrutsParamUtils.getPrarmArrValue("scanTousseInstanceIds"); + String idStr = StrutsParamUtils.getPraramValue("ids", null); + String[] ids = null; + if(StringUtils.isNotBlank(idStr)){ + ids = idStr.split(","); + } + arr = tousseInstanceManager.getDifftousseInstanceInfo(null,departCoding, tousseName, wareHouseId, scanTousseInstanceIds, ids); + } + StrutsResponseUtils.output(arr); + } } \ No newline at end of file Index: ssts-web/src/main/webapp/disinfectsystem/departmentStock/departmentStockInputView.jsp =================================================================== diff -u -r26717 -r26757 --- ssts-web/src/main/webapp/disinfectsystem/departmentStock/departmentStockInputView.jsp (.../departmentStockInputView.jsp) (revision 26717) +++ ssts-web/src/main/webapp/disinfectsystem/departmentStock/departmentStockInputView.jsp (.../departmentStockInputView.jsp) (revision 26757) @@ -72,6 +72,8 @@ + + Index: ssts-web/src/main/webapp/disinfectsystem/departmentStock/baseCountInventory.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/departmentStock/baseCountInventory.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/departmentStock/baseCountInventory.js (revision 26757) @@ -0,0 +1,320 @@ +var itemsOfBaseNum; +var sanBarcode=[];//扫描的包条码 +var departCoding = null; +var departName = null; +var wareHouseId = null; +var baseCountInventoryWin; +/** + * 打开盘点项目信息,id为null则是基数盘点,不为null则为历史盘点记录查看盘点项 + */ +function goBaseCountInventory(id,departCoding,departName,wareHouseId,wareHouseName,tousseNames) { + var idIsNotNull = false; + if(id != null){ + idIsNotNull = true; + } + sanBarcode = []; + this.departCoding = departCoding; + this.wareHouseId = wareHouseId; + this.wareHouseName = wareHouseName; + this.departName = departName; + var tbar; + var saveBtn = { + text : '保存', + hidden : idIsNotNull, + handler : save + }; + var cancelBtn = { + text : '取消', + handler : function() { + baseCountInventoryWin.close(); + } + }; + tbar = [saveBtn, cancelBtn]; + var rd = new Ext.data.JsonReader( { + fields : [ + {name : 'id'}, + {name : 'tousseName'}, + {name : 'amount'}, + {name : 'ids'}, + {name : 'scanIds'}, + {name : 'scanAmount'}, + {name : 'diffAmount'} + ] + }); + /*var sm = new top.Ext.grid.CheckboxSelectionModel({ + singleSelect : false + });*/ + itemsOfBaseNum = new Ext.data.Store({ + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/tousseInstanceAction!getDepartInventoryInfo.do', + method : 'POST' + }), + reader : rd + , sortInfo: { + field: 'diffAmount', + direction: 'DESC' // 'ASC'or 'DESC' + } + }); + itemsOfBaseNum.on("beforeload", function(thiz, options) { + thiz.baseParams["id"] = id; + thiz.baseParams["departCoding"] = departCoding; + thiz.baseParams["wareHouseId"] = wareHouseId; + thiz.baseParams["tousseNames"] = tousseNames; + }); + itemsOfBaseNum.load(); + var tousseCm = new Ext.grid.ColumnModel([/*sm,*/ + {id : 'id',dataIndex : 'id',hidden : true}, + {header : "名称",dataIndex : 'tousseName',width : 40,menuDisabled : true}, + {header : "ids",dataIndex : 'ids',hidden:true, width : 40,menuDisabled : true}, + {header : "scanIds",dataIndex : 'scanIds',hidden:true, width : 40,menuDisabled : true}, + {header : "库存数量",dataIndex : 'amount',width : 30,menuDisabled : true}, + {header : "扫描数量",dataIndex : 'scanAmount',width : 30,menuDisabled : true}, + {header : "差异数量",dataIndex : 'diffAmount',width : 30,menuDisabled : true, + renderer: function(v,p,record,index){ + return "" + v + ""; + } + } + ]); + var formWidth = 930; + var windowWidth = 930; + var windowHeight = 550;itemsOfBaseNum + formObj = new top.Ext.FormPanel({ + id : 'useRecordForm', + frame : true, + labelSeparator : ':', + bodyStyle : 'padding:5px 5px 0px 5px', + labelAlign : 'right', + width : formWidth, + autoScroll : true, + labelWidth : 80, + items : [new top.Ext.grid.EditorGridPanel({ + id : 'tousseInstanceGrid', + store : itemsOfBaseNum, + cm : tousseCm, + height : 500, + width:900, + autoExpandColumn : 'delAction', + frame : false, + viewConfig: { + forceFit:true + }, + bodyStyle : 'border:1px solid #afd7af', + //selModel :sm, + listeners: { + headerclick:function(ct,column,e,t,opts) { + if(column == 6){ + var tousseInstanceGrid = top.Ext.getCmp('tousseInstanceGrid'); + var inventoryList = tousseInstanceGrid.store.data; + var s = 0; + var st = top.Ext.getCmp('tousseInstanceGrid').store; + if(st.getSortState().direction == 'ASC'){ + st.sort('diffAmount', 'DESC'); + }else{ + st.sort('diffAmount', 'ASC'); + } + } + } + }, + tbar : [{ + text : '扫描条码:', + hidden : idIsNotNull + }, { + xtype : 'textfield', + fieldLabel : '扫描条码', + id : 'tempBarcode', + name : 'tempBarcode', + width : 200, + hidden : idIsNotNull, + anchor : '99%', + enableKeyEvents : true, + listeners : { + render : function(c) { + c.getEl().on('keypress', function(e) { + if (e.getKey() == 13) {// + loadScanGoods(); + } + }); + } + } + }] + })], + buttons : tbar + }); + baseCountInventoryWin = new top.Ext.Window( { + id : 'useRecordApplicationWin', + layout : 'fit', + title : '盘点信息', + width : windowWidth, + height : windowHeight, + border : false, + modal : true, + plain : true, + items : [ formObj ] + }); + baseCountInventoryWin.show(); + +} +/** + * 扫描器械包条码 + */ +function loadScanGoods() { + var barcode = top.Ext.getCmp('tempBarcode').getValue(); + top.Ext.getCmp('tempBarcode').setValue(''); + if (barcode != '') { + if(barcode.indexOf(",")){ + var barcodeArray = barcode.split(","); + barcode = barcodeArray[barcodeArray.length - 1]; + } + if (checkBarcodeIsExist(barcode)) { + showResult('条码为:' + barcode + '的物品已在当前扫描物品里!'); + top.Ext.getCmp('tempBarcode').setValue(''); + return; + } + Ext.Ajax.request({ + url : WWWROOT + '/disinfectSystem/tousseInstanceAction!getTousseInstanceByBarcodeForDepartInventory.do', + params : { + barcode : barcode, + wareHouseId : wareHouseId, + departCoding : departCoding + }, + success : function(response, options) { + var result = Ext.decode(response.responseText); + if(result.success){ + addScanTousseInstance(result.tousseInstance,barcode); + }else{ + showResult(result.msg); + } + }, + failure : function(response, options) { + showResult('加载出错!请稍候再试。'); + } + }); + } +} +//检测该条码是否已在扫描的物品里 +function checkBarcodeIsExist(currentBarcode) { + var exist = false; + if (currentBarcode == ""){ + return exist; + } + if(sanBarcode.indexOf(currentBarcode) > -1){ + exist = true; + } + /*if(sanBarcode.includes(currentBarcode)){ + exist = true; + }*/ + return exist; +} +function addScanTousseInstance(tousseInstance,barcode){ + var flag = true; + for ( var i = 0; i < itemsOfBaseNum.getCount(); i++) { + var currentRecord = itemsOfBaseNum.getAt(i); + var tousseName = currentRecord.get('tousseName'); + if(tousseName == tousseInstance.tousseName){ + var scanAmount = currentRecord.get('scanAmount'); + var diffAmount = currentRecord.get('diffAmount'); + var ids = currentRecord.get('ids'); + var scanIds = currentRecord.get('scanIds'); + var amount = currentRecord.get('amount'); + currentRecord.set('scanAmount',scanAmount + 1); + sanBarcode.push(barcode); + scanIds.push(tousseInstance.id); + var ids = currentRecord.get('ids'); + /*var intersection = scanIds.filter(function(v){ + return ids.indexOf(v)!==-1; // 利用filter方法来遍历是否有相同的元素 + })*/ + var intersection = includeSet(ids, scanIds); + currentRecord.set('diffAmount',scanIds.length + ids.length - intersection.length * 2); + flag = false; + break; + } + } + if(flag){ + showResult('列表无'+ tousseInstance.tousseName +'!'); + } +} +/** + * 打开包实例信息之前 + * @param v + * @param p + * @param record + * @returns + */ +function beforeGoDiffTousseInfoWin(id, tousseName , ids, scanIds,diffAmount){ + if(diffAmount == 0){ + return; + } + if(diffAmount < 0 && sanBarcode.length == 0){ + showResult(tousseName+'扫描数量为0!'); + return; + } + goDiffTousseInfoWin(id,departCoding,wareHouseId,tousseName,scanIds,ids); +} +function save() { + this.disable(); + var tousseInstanceGrid = top.Ext.getCmp('tousseInstanceGrid'); + var inventoryList = tousseInstanceGrid.store.data; + var inventoryListInfo = []; + var hasWasteTousse = false;//有需要废弃的包,有就提示 + var tousseNamesUnscanned = '';//未扫描的科室库存 + for(var i = 0; i < inventoryList.keys.length; i++){ + var item = inventoryList.get(inventoryList.keys[i]).data; + if(item.scanIds == null || item.scanIds.length == 0){ + tousseNamesUnscanned += '['+item.tousseName+']'; + } + if(!hasWasteTousse && subSet(item.ids,item.scanIds).length > 0){ + hasWasteTousse = true; + } + inventoryListInfo.push(item); + } + if(tousseNamesUnscanned != ''){ + showResult( tousseNamesUnscanned + '未扫描盘点,请确认盘点信息!'); + this.enable(); + return false; + } + this.enable(); + if(hasWasteTousse){ + top.Ext.MessageBox.confirm("请确认","是否确认废弃没有盘点成功的器械包?", + function(button, text) { + if ("yes" == button){ + formObj.form.submit({ + url : WWWROOT + '/disinfectSystem/inventoryRecordAction!saveInventoryRecordOfBaseAmount.do', + method:'POST', + params:{inventoryInfo:JSON.stringify(inventoryListInfo), + wareHouseName : wareHouseName, + wareHouseId : wareHouseId, + departName : departName, + departCoding : departCoding}, + waitMsg:'正在保存数据,请稍候', + waitTitle:'提交表单', + success:function(form,action){ + showResult("保存成功!"); + baseCountInventoryWin.close(); + grid.dwrReload(); + }, + failure:function(form, action){ + showResult(action.result.message); + } + }); + } + }); + } +} +function subSet(arr1, arr2) { + var subArr = []; + for(var i = 0; i < arr1.length; i++){ + if (arr2.indexOf(arr1[i]) == -1) { + subArr.push(arr1[i]); + } + } + return subArr; +}; +function includeSet(arr1, arr2){ + var includeArr = []; + for(var i = 0; i < arr1.length; i++){ + if (arr2.indexOf(arr1[i]) != -1) { + includeArr.push(arr1[i]); + } + } + return includeArr; +} \ No newline at end of file Index: ssts-web/src/main/webapp/disinfectsystem/config/szszlyy/menu/menuconfigure.js =================================================================== diff -u -r26726 -r26757 --- ssts-web/src/main/webapp/disinfectsystem/config/szszlyy/menu/menuconfigure.js (.../menuconfigure.js) (revision 26726) +++ ssts-web/src/main/webapp/disinfectsystem/config/szszlyy/menu/menuconfigure.js (.../menuconfigure.js) (revision 26757) @@ -419,7 +419,8 @@ {hidden :SSTS_Tousse,text:"器械包库存",href:WWWROOT+'/disinfectsystem/toussemanager/toussegoodsstock/tousseGoodsStockView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_TousseMaintain_Manager,text:"器械包保养",href:WWWROOT+'/disinfectsystem/toussemanager/toussemaintain/tousseMaintainView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :!sstsConfig.hasOwnProperty('enableComboTousse') || sstsConfig.enableComboTousse == false || SSTS_ComboTousseManager,text:"聚合包定义管理",href:WWWROOT+'/disinfectsystem/basedatamanager/tousse/comboTousse.jsp?editMode=true',hrefTarget:linkTarget,leaf:true}, - {hidden :SSTS_DepartMentTousseManager,text:"基数管理",href:WWWROOT+'/disinfectsystem/departmentStock/departmentStockInputView.jsp',hrefTarget:linkTarget,leaf:true} + {hidden :SSTS_DepartMentTousseManager,text:"基数管理",href:WWWROOT+'/disinfectsystem/departmentStock/departmentStockInputView.jsp',hrefTarget:linkTarget,leaf:true}, + {hidden :SSTS_BaseAmountinventoryCheck_Manager,text:"基数盘点历史记录",href:WWWROOT+'/disinfectsystem/stocktakerecordmanager/inventoryrecordView.jsp?type='+inventoryTypeCodeBaseAmount,hrefTarget:linkTarget,leaf:true} ] },{ text:"手术仪器管理", Index: ssts-web/src/main/webapp/homepage/menuconfigure.js =================================================================== diff -u -r26725 -r26757 --- ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 26725) +++ ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 26757) @@ -428,7 +428,8 @@ {hidden :SSTS_Tousse,text:"器械包库存",href:WWWROOT+'/disinfectsystem/toussemanager/toussegoodsstock/tousseGoodsStockView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_TousseMaintain_Manager,text:"器械包保养",href:WWWROOT+'/disinfectsystem/toussemanager/toussemaintain/tousseMaintainView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :!sstsConfig.hasOwnProperty('enableComboTousse') || sstsConfig.enableComboTousse == false || SSTS_ComboTousseManager,text:"聚合包定义管理",href:WWWROOT+'/disinfectsystem/basedatamanager/tousse/comboTousse.jsp?editMode=true',hrefTarget:linkTarget,leaf:true}, - {hidden :SSTS_DepartMentTousseManager,text:"基数管理",href:WWWROOT+'/disinfectsystem/departmentStock/departmentStockInputView.jsp',hrefTarget:linkTarget,leaf:true} + {hidden :SSTS_DepartMentTousseManager,text:"基数管理",href:WWWROOT+'/disinfectsystem/departmentStock/departmentStockInputView.jsp',hrefTarget:linkTarget,leaf:true}, + {hidden :SSTS_BaseAmountinventoryCheck_Manager,text:"基数盘点历史记录",href:WWWROOT+'/disinfectsystem/stocktakerecordmanager/inventoryrecordView.jsp?type='+inventoryTypeCodeBaseAmount,hrefTarget:linkTarget,leaf:true} ] },{ text:"手术仪器管理", Index: ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/service/InventoryRecordManager.java =================================================================== diff -u -r26534 -r26757 --- ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/service/InventoryRecordManager.java (.../InventoryRecordManager.java) (revision 26534) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/service/InventoryRecordManager.java (.../InventoryRecordManager.java) (revision 26757) @@ -93,6 +93,14 @@ public JSONArray importMaterialInventoryRecordFromInputStreams_TRANS_REQUIRED( HttpServletRequest request, List inputStreams, List errInfos); - - + /** + * 保存基数盘点记录 + * @param arr 盘点项数组 + * @param wareHouseName 仓库名 + * @param wareHouseId 仓库id + * @param departCoding 部门编码 + * @param departName 部门名字 + */ + public void saveInventoryInfo(JSONArray arr, String wareHouseName, Long wareHouseId, String departCoding, + String departName); } Index: ssts-web/src/main/webapp/disinfectsystem/config/dgfy/menu/menuconfigure.js =================================================================== diff -u -r26603 -r26757 --- ssts-web/src/main/webapp/disinfectsystem/config/dgfy/menu/menuconfigure.js (.../menuconfigure.js) (revision 26603) +++ ssts-web/src/main/webapp/disinfectsystem/config/dgfy/menu/menuconfigure.js (.../menuconfigure.js) (revision 26757) @@ -411,7 +411,8 @@ {hidden :SSTS_Tousse,text:"器械包库存",href:WWWROOT+'/disinfectsystem/toussemanager/toussegoodsstock/tousseGoodsStockView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_TousseMaintain_Manager,text:"器械包保养",href:WWWROOT+'/disinfectsystem/toussemanager/toussemaintain/tousseMaintainView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :!sstsConfig.hasOwnProperty('enableComboTousse') || sstsConfig.enableComboTousse == false || SSTS_ComboTousseManager,text:"聚合包定义管理",href:WWWROOT+'/disinfectsystem/basedatamanager/tousse/comboTousse.jsp?editMode=true',hrefTarget:linkTarget,leaf:true}, - {hidden :SSTS_DepartMentTousseManager,text:"基数管理",href:WWWROOT+'/disinfectsystem/departmentStock/departmentStockInputView.jsp',hrefTarget:linkTarget,leaf:true} + {hidden :SSTS_DepartMentTousseManager,text:"基数管理",href:WWWROOT+'/disinfectsystem/departmentStock/departmentStockInputView.jsp',hrefTarget:linkTarget,leaf:true}, + {hidden :SSTS_BaseAmountinventoryCheck_Manager,text:"基数盘点历史记录",href:WWWROOT+'/disinfectsystem/stocktakerecordmanager/inventoryrecordView.jsp?type='+inventoryTypeCodeBaseAmount,hrefTarget:linkTarget,leaf:true} ] },{ text:"手术仪器管理", Index: ssts-web/src/main/webapp/disinfectsystem/stocktakerecordmanager/inventoryrecordView.js =================================================================== diff -u -r22838 -r26757 --- ssts-web/src/main/webapp/disinfectsystem/stocktakerecordmanager/inventoryrecordView.js (.../inventoryrecordView.js) (revision 22838) +++ ssts-web/src/main/webapp/disinfectsystem/stocktakerecordmanager/inventoryrecordView.js (.../inventoryrecordView.js) (revision 26757) @@ -544,16 +544,22 @@ getDisposablegoodsInventoryRecord(id,time,operator,wareHouseName,status); }else if(inventoryTypeCodeExpensiveGoods == type){ getExpensiveGoodsInventoryRecord(id,time,operator,wareHouseName,status); + }else if(inventoryTypeCodeBaseAmount == type){ + goBaseCountInventory(id,null,null,null,null,null); } } Ext.onReady(function() { var columns = new Array(); + var isBaseAmountInventory = false; + if(type == inventoryTypeCodeBaseAmount){ + isBaseAmountInventory = true; + } columns.push( {header : "盘点日期",width : 150,dataIndex : 'time',renderer : myDateFormatByMinute,renderer : modifyRecord}, {header : "盘点人",width : 100,dataIndex : 'operator'}, - {header : "状态",width : 135,dataIndex : 'status'}, + {header : "状态",width : 135,hidden:isBaseAmountInventory,dataIndex : 'status'}, {header : "仓库名称",width : 135,dataIndex : 'wareHouseName'}, {header : "备注",width : 200,hidden:true,dataIndex : 'remark'} ); @@ -580,21 +586,26 @@ var tbar = [{ text : '添加盘点记录', iconCls : 'btn_ext_application_add', - hidden:SSTS_StockTakeInfo_Create, + hidden:SSTS_StockTakeInfo_Create || isBaseAmountInventory, handler : function() { addInventoryRecord(); } },{ text : '删除', iconCls : 'btn_ext_application_del', - hidden:SSTS_StockTakeInfo_Delete, + hidden:SSTS_StockTakeInfo_Delete || isBaseAmountInventory, handler : function() { deleteStockRecord(grid); } },{ text : '导出', iconCls:'btn_ext_download', + hidden : isBaseAmountInventory, handler : function() { + if(inventoryTypeCodeBaseAmount == type){ + showResult("未有打印格式!"); + return false; + } var records = grid.getSelectionModel().getSelections(); if (records.length == 0) { showResult("请选择要导出的记录!"); Index: ssts-web/src/main/webapp/disinfectsystem/config/ggsrmyy/menu/menuconfigure.js =================================================================== diff -u -r26603 -r26757 --- ssts-web/src/main/webapp/disinfectsystem/config/ggsrmyy/menu/menuconfigure.js (.../menuconfigure.js) (revision 26603) +++ ssts-web/src/main/webapp/disinfectsystem/config/ggsrmyy/menu/menuconfigure.js (.../menuconfigure.js) (revision 26757) @@ -411,7 +411,8 @@ {hidden :SSTS_Tousse,text:"器械包库存",href:WWWROOT+'/disinfectsystem/toussemanager/toussegoodsstock/tousseGoodsStockView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_TousseMaintain_Manager,text:"器械包保养",href:WWWROOT+'/disinfectsystem/toussemanager/toussemaintain/tousseMaintainView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :!sstsConfig.hasOwnProperty('enableComboTousse') || sstsConfig.enableComboTousse == false || SSTS_ComboTousseManager,text:"聚合包定义管理",href:WWWROOT+'/disinfectsystem/basedatamanager/tousse/comboTousse.jsp?editMode=true',hrefTarget:linkTarget,leaf:true}, - {hidden :SSTS_DepartMentTousseManager,text:"基数管理",href:WWWROOT+'/disinfectsystem/departmentStock/departmentStockInputView.jsp',hrefTarget:linkTarget,leaf:true} + {hidden :SSTS_DepartMentTousseManager,text:"基数管理",href:WWWROOT+'/disinfectsystem/departmentStock/departmentStockInputView.jsp',hrefTarget:linkTarget,leaf:true}, + {hidden :SSTS_BaseAmountinventoryCheck_Manager,text:"基数盘点历史记录",href:WWWROOT+'/disinfectsystem/stocktakerecordmanager/inventoryrecordView.jsp?type='+inventoryTypeCodeBaseAmount,hrefTarget:linkTarget,leaf:true} ] },{ text:"手术仪器管理", Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r26738 -r26757 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 26738) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 26757) @@ -93,6 +93,7 @@ import com.forgon.disinfectsystem.entity.sterilizationTransition.SterilizationTransitionItem; import com.forgon.disinfectsystem.entity.sterilizationTransition.SterilizationTransitionItemVO; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; +import com.forgon.disinfectsystem.entity.stocktakemanager.InventoryItemOfBaseNum; import com.forgon.disinfectsystem.entity.systemwarning.SystemWarningItemVO; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.entity.urgent.UrgentLevel; @@ -6295,4 +6296,196 @@ return result; } + @Override + public JSONArray getDepartInventoryInfo(String departCoding, + String wareHouseIds, String tousseNames) { + if(StringUtils.isBlank(wareHouseIds)){ + return null; + } + ResultSet rs = null; + JSONArray arr = new JSONArray(); + try { + rs = objectDao.executeSql(buildSqlOfGetDepartInventoryInfo(departCoding, wareHouseIds, tousseNames)); + JSONObject nameAndItem = new JSONObject(); + while(rs.next()){ + String tousseName = rs.getString("tousseName"); + Long id = rs.getLong("id"); + JSONObject item = null; + if(nameAndItem.containsKey(tousseName)){ + item = (JSONObject)nameAndItem.get(tousseName); + item.put("amount", (Integer)item.get("amount") + 1); + item.getJSONArray("ids").add(id); + }else{ + item = new JSONObject(); + item.put("tousseName", tousseName); + item.put("amount", 1); + JSONArray ids = new JSONArray(); + item.put("scanIds", ids); + ids.add(id); + item.put("ids", ids); + item.put("scanAmount", 0); + item.put("diffAmount", 0); + nameAndItem.put(tousseName, item); + } + } + if(nameAndItem.size() > 0){ + Set tousseNameSet = nameAndItem.keySet(); + for (String tousseName : tousseNameSet){ + JSONObject obj = (JSONObject)nameAndItem.get(tousseName); + arr.add(obj); + } + } + } catch (Exception e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return arr; + } + /** + * 构建getDepartInventoryInfo方法的sql语句 + * @param departCoding + * @param wareHouseId + * @return + */ + private String buildSqlOfGetDepartInventoryInfo(String departCoding, String wareHouseIds, String tousseNames){ + Set tousseNamesSet = null; + String tousseNameSql = ""; + String wareHouseIdSql = null; + if(wareHouseIds.indexOf("all") != -1){ + wareHouseIds = wareHouseIds.replace("all,", ""); + } + if(wareHouseIds.indexOf(",") == -1){ + wareHouseIdSql = String.format("and wareHouseId =%s ", wareHouseIds); + }else{ + StringBuffer sbf = new StringBuffer(); + wareHouseIdSql = sbf.insert(0, "and wareHouseId in(").append(wareHouseIds).append(")").toString(); + } + if(StringUtils.isNotBlank(tousseNames)){ + tousseNamesSet = new HashSet(); + String[] names = tousseNames.split(","); + for (int i = 0; i < names.length; i++) { + tousseNamesSet.add(names[i]); + } + tousseNameSql = String.format(" and %s ", SqlUtils.getStringFieldInLargeCollectionsPredicate("ti.tousseName", tousseNamesSet)); + } + String startDateStr = CssdUtils.getSystemSetConfigByName("startDateOfDepartmentStock"); + String endDateStr = null;//结束时间 + String dateSql = ""; + if(StringUtils.isNotBlank(startDateStr)){ + startDateStr = dateQueryAdapter.dateAdapter(startDateStr); + endDateStr = dateQueryAdapter.dateAdapter(new Date()); + dateSql = String.format(" and operationTime between %s and %s and (ds.startTime is null or ds.startTime < operationTime) ", startDateStr, endDateStr); + } + String sql = String.format(" select ti.tousseName,ti.id from %s ti " + + " inner join %s ds on ds.tousseDefinition_id=ti.tousseDefinition_id " + + " where ti.departCoding=ds.departCoding and ti.departCoding='%s' and tousseFixedBarcode=0 %s and status='%s' %s and comboTousseInstanceId is null %s", + TousseInstance.class.getSimpleName(),DepartmentStock.class.getSimpleName(), + departCoding,wareHouseIdSql,TousseInstance.STATUS_SIGNED, tousseNameSql, dateSql); + return sql; + } + @Override + public JSONArray getDifftousseInstanceInfo(Long id, String departCoding, + String tousseName, Long wareHouseId , String[] scanTousseInstanceIds, String[] ids) { + ResultSet rs = null; + JSONArray arr = new JSONArray(); + try { + String s = bulidSqlOfGetDifftousseInstanceInfo(id, departCoding, tousseName, wareHouseId, scanTousseInstanceIds,ids); + rs = objectDao.executeSql(s); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + while(rs.next()){ + Long tiId = rs.getLong("id"); + String barcode = rs.getString("barcode"); + String status = rs.getString("status"); + JSONObject obj = new JSONObject(); + obj.put("id", tiId); + obj.put("barcode", barcode); + obj.put("status", status); + setDateOfJSONobject(sdf, "sterileEndTime", obj, rs); + setDateOfJSONobject(sdf, "invoiceSendTime", obj, rs); + setDateOfJSONobject(sdf, "signedDate", obj, rs); + arr.add(obj); + } + } catch (Exception e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return arr; + } + /** + * 从ResultSet读取key的日期值,赋值给obj的key,防止空串报错影响程序继续读取 + * @param sdf + * @param key obj key + * @param obj + * @param ResultSet rs + */ + private void setDateOfJSONobject(SimpleDateFormat sdf, String key, JSONObject obj, ResultSet rs){ + Date date = null; + try {//防止空串报错 + date = rs.getTimestamp(key); + obj.put(key, sdf.format(date)); + } catch (Exception e) { + } + } + /** + * 构建GetDifftousseInstanceInfo方法的sql + * @param departCoding + * @param tousseName + * @param wareHouseId + * @param diffAmount 误差数量 + * @param scanTousseInstanceIds 扫描包实例的ids + * @return + */ + private String bulidSqlOfGetDifftousseInstanceInfo(Long id, String departCoding, + String tousseName, Long wareHouseId, String[] scanTousseInstanceIds, String[] ids){ + String sql = null; + if(id != null){ + sql = String.format("select ti.id,barcode,status,sterileEndTime,invoiceSendTime,signedDate from %s ti " + + "inner join %s bd on ti.id=bd.id " + + "inner join TousseInstance_InventoryItemOfBaseNum tii on tii.tousseInstanceId=ti.id where tii.inventoryItemOfBaseNumId=%s ", + TousseInstance.class.getSimpleName(),BarcodeDevice.class.getSimpleName(),id); + }else{ + Set scanIdSet = new HashSet<>(Arrays.asList(scanTousseInstanceIds)); + Set idSet = new HashSet<>(Arrays.asList(ids)); + Collection result = CollectionUtils.disjunction(scanIdSet, idSet); + sql = String.format("select ti.id,barcode,status,sterileEndTime,invoiceSendTime,signedDate from %s ti " + + "inner join %s bd on ti.id=bd.id where %s ", + TousseInstance.class.getSimpleName(),BarcodeDevice.class.getSimpleName(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("ti.id", result)); + } + return sql; + } + + @Override + public JSONArray getInventoryOfBaseAmoutById(Long inventoryRecordId) { + JSONArray arr =new JSONArray(); + ResultSet rs = null; + try { + String sql = String.format("select * from %s where inventoryRecordId=%s ", InventoryItemOfBaseNum.class.getSimpleName(), inventoryRecordId); + rs = objectDao.executeSql(sql); + JSONArray ids = new JSONArray(); + while(rs.next()){ + String tousseName = rs.getString("tousseName"); + Integer diffAmount = rs.getInt("diffAmount"); + Integer scanAmount = rs.getInt("scanAmount"); + Integer inventoryNum = rs.getInt("inventoryNum"); + Long id = rs.getLong("id"); + JSONObject item =new JSONObject(); + item.put("id", id); + item.put("tousseName", tousseName); + item.put("amount", inventoryNum); + item.put("scanIds", ids); + item.put("ids", ids); + item.put("scanAmount", scanAmount); + item.put("diffAmount", diffAmount); + arr.add(item); + } + } catch (Exception e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return arr; + } } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java =================================================================== diff -u -r26738 -r26757 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 26738) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 26757) @@ -951,6 +951,30 @@ * @return */ public Map getUseRecordMapByTousseInstanceList(List instances); + /** + * 获取科室库存盘点信息 + * @param departCoding 盘点科室编码 + * @param wareHouseId 盘点仓库id + * @return + */ + public JSONArray getDepartInventoryInfo(String departCoding, String wareHouseIds, String tousseNames); + /** + * 基数盘点获取差异器械包信息 查看历史盘点项时,除了id,其他参数可为null + * @param id 盘点项 null:基数盘点 非null:历史盘点记录盘点项id + * @param departCoding 盘点部门编码 + * @param tousseName 包名 + * @param wareHouseId 仓库id + * @param scanTousseInstanceIds 扫描器械包id + * @param ids 库存数量对应的包id + * @return + */ + public JSONArray getDifftousseInstanceInfo(Long id, String departCoding, String tousseName, Long wareHouseId, String[] scanTousseInstanceIds, String[] ids); + /** + * 通过盘点记录id获取盘点项 + * @param inventoryRecordId + * @return + */ + public JSONArray getInventoryOfBaseAmoutById(Long inventoryRecordId); } Index: ssts-web/src/main/webapp/disinfectsystem/stocktakerecordmanager/inventoryrecordView.jsp =================================================================== diff -u -r24232 -r26757 --- ssts-web/src/main/webapp/disinfectsystem/stocktakerecordmanager/inventoryrecordView.jsp (.../inventoryrecordView.jsp) (revision 24232) +++ ssts-web/src/main/webapp/disinfectsystem/stocktakerecordmanager/inventoryrecordView.jsp (.../inventoryrecordView.jsp) (revision 26757) @@ -29,6 +29,8 @@ + + 盘点记录 @@ -50,7 +52,7 @@ var inventoryTypeCodeMaterial = '<%=InventoryRecord.TYPECODE_MATERIAL %>'; var inventoryTypeCodeDisposableGoods = '<%=InventoryRecord.TYPECODE_DISPOSABLEGOODS %>'; var inventoryTypeCodeExpensiveGoods = '<%=InventoryRecord.TYPECODE_EXPENSIVEGOODS %>'; - + var inventoryTypeCodeBaseAmount = '<%=InventoryRecord.TYPE_BASEAMOUNT %>'; //高值耗材供应商 var expensiveGoodsSupplier = '<%=ExpensiveGoodsSupplier.SUPPLIER_TYPE_EXPENSIVEGOODSSUPPLIER%>'; Index: ssts-web/src/main/resources/systemset/operationDefine.xml =================================================================== diff -u -r26725 -r26757 --- ssts-web/src/main/resources/systemset/operationDefine.xml (.../operationDefine.xml) (revision 26725) +++ ssts-web/src/main/resources/systemset/operationDefine.xml (.../operationDefine.xml) (revision 26757) @@ -361,6 +361,7 @@ + Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/stocktakemanager/InventoryRecord.java =================================================================== diff -u -r23492 -r26757 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/stocktakemanager/InventoryRecord.java (.../InventoryRecord.java) (revision 23492) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/stocktakemanager/InventoryRecord.java (.../InventoryRecord.java) (revision 26757) @@ -52,7 +52,7 @@ public static String TYPE_MATERIALENTRY = "材料";//材料(器械仓库) public static String TYPE_DISPOSABLEGOOD = "一次性物品";//一次性物品 public static String TYPE_EXPENSIVEGOODS = "高值耗材";//高值耗材 - + public static String TYPE_BASEAMOUNT = "基数盘点";//基数盘点 private String type;//盘点物品的类型 //材料(器械仓库)或一次性物品 /** Index: ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/service/InventoryRecordManagerImpl.java =================================================================== diff -u -r26534 -r26757 --- ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/service/InventoryRecordManagerImpl.java (.../InventoryRecordManagerImpl.java) (revision 26534) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/service/InventoryRecordManagerImpl.java (.../InventoryRecordManagerImpl.java) (revision 26757) @@ -9,12 +9,15 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; +import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Set; import javax.servlet.http.HttpServletRequest; @@ -48,21 +51,22 @@ import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveDisposablegoods; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoods; -import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsBill; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsGodownEntry; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsInstance; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsStock; import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntry; import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntryItem; import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.supplier.RegistrationCertification; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; import com.forgon.disinfectsystem.entity.expensivegoods.ExpensiveGoodsModel; import com.forgon.disinfectsystem.entity.expensivegoods.ExpensiveGoodsModelStock; import com.forgon.disinfectsystem.entity.materialmanager.MaterialEntry; import com.forgon.disinfectsystem.entity.stocktakemanager.InventoryExpensiveGoodsItem; import com.forgon.disinfectsystem.entity.stocktakemanager.InventoryExpensiveItem; import com.forgon.disinfectsystem.entity.stocktakemanager.InventoryItem; +import com.forgon.disinfectsystem.entity.stocktakemanager.InventoryItemOfBaseNum; import com.forgon.disinfectsystem.entity.stocktakemanager.InventoryRecord; import com.forgon.disinfectsystem.exception.ImportDataException; import com.forgon.disinfectsystem.expensiveGoods.service.ExpensiveGoodsGodownEntryManager; @@ -90,8 +94,8 @@ import com.forgon.tools.excel.ExcelHelper; import com.forgon.tools.excel.ParerUtils; import com.forgon.tools.hibernate.BasePoManagerImpl; -import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.json.JSONUtil; +import com.forgon.tools.util.SqlUtils; import edu.emory.mathcs.backport.java.util.Arrays; @@ -2360,5 +2364,91 @@ return importInventoryRecord; } - + @Override + public void saveInventoryInfo(JSONArray arr, String wareHouseName, Long wareHouseId, String departCoding, + String departName){ + //保存盘点记录 + InventoryRecord ir = new InventoryRecord(); + LoginUserData currentLoginUser = AcegiHelper.getLoginUser(); + String userFullName = currentLoginUser.getUserFullName(); + ir.setOperator(userFullName); + ir.setOrgUnitCode(departCoding); + ir.setOrgUnitName(departName); + ir.setTime(new Date()); + ir.setType(InventoryRecord.TYPE_BASEAMOUNT); + ir.setWareHouseId(wareHouseId); + ir.setWareHouseName(wareHouseName); + objectDao.save(ir); + //处理器械包、保存盘点项 + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String nowDateStr = sdf.format(new Date()); + userFullName = String.format("盘点:%s", userFullName); + for (int i = 0; i < arr.size(); i++) { + JSONObject item = (JSONObject)arr.get(i); + String tousseName = item.optString("tousseName"); + Integer amount = item.optInt("amount"); + JSONArray ids = item.optJSONArray("ids"); + JSONArray scanIds = item.optJSONArray("scanIds"); + Integer scanAmount = item.optInt("scanAmount"); + Integer diffAmount = item.optInt("diffAmount"); + InventoryItemOfBaseNum iib = new InventoryItemOfBaseNum(); + iib.setDiffAmount(diffAmount); + iib.setScanAmount(scanAmount); + iib.setTousseName(tousseName); + iib.setInventoryNum(amount); + Collection diffIds = CollectionUtils.disjunction(ids, scanIds); + setTousseInstances(iib, diffIds); + iib.setInventoryRecord(ir); + objectDao.save(iib);//保存盘点项 + Collection idSubScanId = CollectionUtils.subtract(ids, scanIds); + //废弃未扫描到的科室库存里的器械包信息 + updateTousseOfUnscanned(idSubScanId, userFullName, nowDateStr); + Collection scanIdSubId = CollectionUtils.subtract(scanIds, ids); + //修改扫描到且未在库存数量里的器械包信息 + updateTousseInfoOfNotInInventoryNum(scanIdSubId, userFullName, nowDateStr); + } + } + /** + * InventoryItemOfBaseNum设置TousseInstances + * @param iib InventoryItemOfBaseNum + * @param diffIds 包实例id + */ + private void setTousseInstances(InventoryItemOfBaseNum iib ,Collection diffIds){ + if(diffIds == null || diffIds.size() < 1){ + return; + } + Set tousseInstances = null; + tousseInstances = new HashSet(); + for(Integer diffId : diffIds ){ + TousseInstance tiItem = new TousseInstance(); + tiItem.setId(diffId.longValue()); + tousseInstances.add(tiItem); + } + iib.setTousseInstances(tousseInstances); + } + /** + * 修改扫描到且未在库存数量里的器械包信息 + * @param scanIdSubId + */ + private void updateTousseInfoOfNotInInventoryNum(Collection scanIdSubId, String userFullName, String nowDateStr){ + if(scanIdSubId == null || scanIdSubId.size() < 1){ + return; + } + objectDao.executeUpdate(String.format("update %s set status='%s',invoiceSender='%s',invoiceSendTime='%s',signedUser='%s',signedDate='%s' where %s", + TousseInstance.class.getSimpleName(),TousseInstance.STATUS_SIGNED,userFullName,nowDateStr, + userFullName,nowDateStr,SqlUtils.getNonStringFieldInLargeCollectionsPredicate("id", scanIdSubId))); + } + /** + * 废弃未扫描到的科室库存里的器械包信息 + * @param idSubScanId + * @param userFullName + * @param nowDateStr + */ + private void updateTousseOfUnscanned(Collection idSubScanId, String userFullName, String nowDateStr){ + if(idSubScanId == null || idSubScanId.size() < 1){ + return; + } + objectDao.executeUpdate(String.format("update %s set status='%s',wasteDate='%s',wasteReason='基数盘点',operateUser='%s' where %s ", + TousseInstance.class.getSimpleName(),TousseInstance.STATUS_DISCARD,nowDateStr, userFullName,SqlUtils.getNonStringFieldInLargeCollectionsPredicate("id", idSubScanId))); + } } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/stocktakemanager/InventoryItemOfBaseNum.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/stocktakemanager/InventoryItemOfBaseNum.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/stocktakemanager/InventoryItemOfBaseNum.java (revision 26757) @@ -0,0 +1,104 @@ +package com.forgon.disinfectsystem.entity.stocktakemanager; + +import java.util.HashSet; +import java.util.Set; + +import javax.persistence.CascadeType; +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.ManyToMany; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; + +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Table(name = "InventoryItemOfBaseNum") +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class InventoryItemOfBaseNum { + private Long id; + /** + * 库存数量 + */ + private Integer inventoryNum; + /** + * 扫描数量 + */ + private Integer scanAmount; + /** + * 差异数量(库存数量对应的包和扫描数量对应的包,存在差异的包数.如库存数量包含1,2,3,4;扫描包数量含3,4,5,6;差异包为1256,差异数量为4) + */ + private Integer diffAmount; + /** + * 器械包名称 + */ + private String tousseName; + /** + * 盘点记录 + */ + private InventoryRecord inventoryRecord; + /** + * + */ + private Set tousseInstances = new HashSet(0); + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + public Integer getInventoryNum() { + return inventoryNum; + } + public void setInventoryNum(Integer inventoryNum) { + this.inventoryNum = inventoryNum; + } + public Integer getScanAmount() { + return scanAmount; + } + public void setScanAmount(Integer scanAmount) { + this.scanAmount = scanAmount; + } + public Integer getDiffAmount() { + return diffAmount; + } + public void setDiffAmount(Integer diffAmount) { + this.diffAmount = diffAmount; + } + public String getTousseName() { + return tousseName; + } + public void setTousseName(String tousseName) { + this.tousseName = tousseName; + } + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "inventoryRecordId") + public InventoryRecord getInventoryRecord() { + return inventoryRecord; + } + public void setInventoryRecord(InventoryRecord inventoryRecord) { + this.inventoryRecord = inventoryRecord; + } + @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.LAZY) + @JoinTable(name = "TousseInstance_InventoryItemOfBaseNum", joinColumns = { @JoinColumn(name = "inventoryItemOfBaseNumId") }, inverseJoinColumns = { @JoinColumn(name = "tousseInstanceId") }) + public Set getTousseInstances() { + return tousseInstances; + } + public void setTousseInstances(Set tousseInstances) { + this.tousseInstances = tousseInstances; + } +} Index: ssts-web/src/main/webapp/disinfectsystem/config/gzzyyfy/menu/menuconfigure.js =================================================================== diff -u -r26636 -r26757 --- ssts-web/src/main/webapp/disinfectsystem/config/gzzyyfy/menu/menuconfigure.js (.../menuconfigure.js) (revision 26636) +++ ssts-web/src/main/webapp/disinfectsystem/config/gzzyyfy/menu/menuconfigure.js (.../menuconfigure.js) (revision 26757) @@ -417,7 +417,8 @@ {hidden :SSTS_Tousse,text:"器械包库存",href:WWWROOT+'/disinfectsystem/toussemanager/toussegoodsstock/tousseGoodsStockView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_TousseMaintain_Manager,text:"器械包保养",href:WWWROOT+'/disinfectsystem/toussemanager/toussemaintain/tousseMaintainView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :!sstsConfig.hasOwnProperty('enableComboTousse') || sstsConfig.enableComboTousse == false || SSTS_ComboTousseManager,text:"聚合包定义管理",href:WWWROOT+'/disinfectsystem/basedatamanager/tousse/comboTousse.jsp?editMode=true',hrefTarget:linkTarget,leaf:true}, - {hidden :SSTS_DepartMentTousseManager,text:"基数管理",href:WWWROOT+'/disinfectsystem/departmentStock/departmentStockInputView.jsp',hrefTarget:linkTarget,leaf:true} + {hidden :SSTS_DepartMentTousseManager,text:"基数管理",href:WWWROOT+'/disinfectsystem/departmentStock/departmentStockInputView.jsp',hrefTarget:linkTarget,leaf:true}, + {hidden :SSTS_BaseAmountinventoryCheck_Manager,text:"基数盘点历史记录",href:WWWROOT+'/disinfectsystem/stocktakerecordmanager/inventoryrecordView.jsp?type='+inventoryTypeCodeBaseAmount,hrefTarget:linkTarget,leaf:true} ] },{ text:"手术仪器管理", Index: ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/action/InventoryRecordAction.java =================================================================== diff -u -r26490 -r26757 --- ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/action/InventoryRecordAction.java (.../InventoryRecordAction.java) (revision 26490) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/action/InventoryRecordAction.java (.../InventoryRecordAction.java) (revision 26757) @@ -359,5 +359,16 @@ } return null; } - + /** + * 保存基数盘点记录相关信息 + */ + public void saveInventoryRecordOfBaseAmount(){ + String inventoryInfo = StrutsParamUtils.getPraramValue("inventoryInfo", null); + String wareHouseName = StrutsParamUtils.getPraramValue("wareHouseName", null); + Long wareHouseId = StrutsParamUtils.getPraramLongValue("wareHouseId", null); + String departName = StrutsParamUtils.getPraramValue("departName", null); + String departCoding = StrutsParamUtils.getPraramValue("departCoding", null); + JSONArray arr = JSONArray.fromObject(inventoryInfo); + inventoryRecordManager.saveInventoryInfo(arr, wareHouseName, wareHouseId, departCoding, departName); + } } Index: ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/dwr/table/InventoryRecordTableManager.java =================================================================== diff -u -r23826 -r26757 --- ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/dwr/table/InventoryRecordTableManager.java (.../InventoryRecordTableManager.java) (revision 23826) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/dwr/table/InventoryRecordTableManager.java (.../InventoryRecordTableManager.java) (revision 26757) @@ -50,6 +50,8 @@ sql += " and po.type = '"+InventoryRecord.TYPE_MATERIALENTRY+"'"; }else if("disposableGoods".equals(type)){ sql += " and po.type = '"+InventoryRecord.TYPE_DISPOSABLEGOOD+"'"; + }else if(InventoryRecord.TYPE_BASEAMOUNT.equals(type)){ + sql = " po.type = '"+InventoryRecord.TYPE_BASEAMOUNT+"'"; } } return gridManager.renderGrid(parameterListMap, Index: ssts-web/src/main/webapp/homepage/menu.jsp =================================================================== diff -u -r26725 -r26757 --- ssts-web/src/main/webapp/homepage/menu.jsp (.../menu.jsp) (revision 26725) +++ ssts-web/src/main/webapp/homepage/menu.jsp (.../menu.jsp) (revision 26757) @@ -29,6 +29,7 @@ var inventoryTypeCodeMaterial = '<%=InventoryRecord.TYPECODE_MATERIAL %>'; var inventoryTypeCodeDisposableGoods = '<%=InventoryRecord.TYPECODE_DISPOSABLEGOODS %>'; var inventoryTypeCodeExpensiveGoods = '<%=InventoryRecord.TYPECODE_EXPENSIVEGOODS %>'; +var inventoryTypeCodeBaseAmount= '<%=InventoryRecord.TYPE_BASEAMOUNT %>'; //科室分组设置类型(审核) var departmentGroupOption_REVIEWE = '<%=DepartmentGroupOption.TYPE_GROUP_REVIEWE%>';//审核科室分组 @@ -1442,7 +1443,15 @@ SSTS_DisposableGoodsCheck_Manager = false; } + /** + * 《基数盘点历史记录》权限 + */ +var SSTS_BaseAmountinventoryCheck_Manager = true; + + SSTS_BaseAmountinventoryCheck_Manager = false; + +/** * 《一次性物品结算管理》权限 */ var SSTS_DisposableGoodSsettleAccounts_Manager = true; @@ -1459,7 +1468,7 @@ SSTS_DisposableGoodsStock_Manager && SSTS_DisposableGoodsOutOfStorage_Manager && SSTS_DisposableGoodsGodownEntry_Manager && SSTS_DisposableGoodsCancellingStocks_Manager && SSTS_DisposableGoodsAllot_Manager && SSTS_DisposableGoodsProfitAndLoss_Manager && - SSTS_DisposableGoodsCheck_Manager && SSTS_DisposableGoodSsettleAccounts_Manager + SSTS_DisposableGoodsCheck_Manager && SSTS_BaseAmountinventoryCheck_Manager && SSTS_DisposableGoodSsettleAccounts_Manager ; /** Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseInstance.java =================================================================== diff -u -r26368 -r26757 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseInstance.java (.../TousseInstance.java) (revision 26368) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseInstance.java (.../TousseInstance.java) (revision 26757) @@ -5,13 +5,18 @@ import java.util.Comparator; import java.util.Date; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; +import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Index; import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; import javax.persistence.Table; import javax.persistence.Transient; @@ -42,6 +47,7 @@ import com.forgon.disinfectsystem.entity.sterilizationmanager.foreignproxydisinfection.ForeignProxyDisinfection; import com.forgon.disinfectsystem.entity.sterilizationmanager.foreignproxydisinfection.ForeignProxyItem; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; +import com.forgon.disinfectsystem.entity.stocktakemanager.InventoryItemOfBaseNum; import com.forgon.disinfectsystem.entity.urgent.UrgentLevel; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import com.forgon.disinfectsystem.idpredicate.IDAble; @@ -721,7 +727,8 @@ */ private UrgentLevel urgentLevel; - + private Set inventoryItemOfBaseNums = new HashSet(0); + public static final String[] filterProperties = { "handler", "hibernateLazyInitializer", "fieldHandler", "materialInstances", "sterilizationRecords", "isUploadImage", "isUploadVideo", "images", @@ -2526,4 +2533,13 @@ public void setOperationRoomName(String operationRoomName) { this.operationRoomName = operationRoomName; } + @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE }, fetch = FetchType.LAZY) + @JoinTable(name = "TousseInstance_InventoryItemOfBaseNum", joinColumns = { @JoinColumn(name = "tousseInstanceId") }, inverseJoinColumns = { @JoinColumn(name = "inventoryItemOfBaseNumId") }) + public Set getInventoryItemOfBaseNums() { + return inventoryItemOfBaseNums; + } + + public void setInventoryItemOfBaseNums(Set inventoryItemOfBaseNums) { + this.inventoryItemOfBaseNums = inventoryItemOfBaseNums; + } } \ No newline at end of file Index: ssts-web/src/main/webapp/disinfectsystem/departmentStock/departmentStockInputView.js =================================================================== diff -u -r26717 -r26757 --- ssts-web/src/main/webapp/disinfectsystem/departmentStock/departmentStockInputView.js (.../departmentStockInputView.js) (revision 26717) +++ ssts-web/src/main/webapp/disinfectsystem/departmentStock/departmentStockInputView.js (.../departmentStockInputView.js) (revision 26757) @@ -13,6 +13,8 @@ Ext.getCmp("tousseName2").setValue(""); Ext.getCmp("tousseGroupName").setValue(""); Ext.getCmp("tousseGroupName").setRawValue(""); + Ext.getCmp("wareHouseName").store.baseParams.departCoding = currentClickNode.attributes.keyId; + Ext.getCmp("wareHouseName").store.load(); $Id("parm_s_currentOrgUnitCoding").value = currentClickNode.attributes.keyId; $Id("parm_s_tousseName").value = ""; $Id("parm_s_tousseGroupName").value = ""; @@ -129,6 +131,33 @@ ] ) }); + var records = Ext.data.Record.create([ + {name : 'id',mapping : 'id'}, + {name : 'name',mapping : 'name'} + ]); + var newRecord = new records({id:"all",name:"全部"}); + //仓库 + var wareHouseStore = new Ext.data.JsonStore({ + url : WWWROOT + '/disinfectSystem/baseData/wareHouseAction!getWareHouseByDepartCoding.do', + root: 'data', + fields: [ + {name : 'id',mapping : 'id'}, + {name : 'name',mapping : 'name'} + ], + listeners : { + load : function(store,record) { + if(record.length > 1){//大于1个仓库才显示全部 + store.insert(0,newRecord); + } + if(record.length > 0) { + if (Ext.getCmp('wareHouseName')) { + Ext.getCmp('wareHouseName').setValue(record[0].data.id); + } + } + } + } + }); + wareHouseStore.load(); var stockItem = Ext.data.Record.create([ {name : 'id'}, {name : 'tousseName'}, @@ -294,7 +323,38 @@ + record.data["id"]+"','"+departCoding+"','"+departName+"','"+record.data.tousseName + "','"+STATUS_SHIPPED +"','"+v +"');return false;\" >" + v + ""; return str; } - + //盘点验证 + function checkBaseCountInventory(inventoryType){ + if(!currentClickNode){ + showResult("请选择申请科室!"); + return false; + } + var wareHouseId = Ext.getCmp('wareHouseName').getValue(); + var wareHouseName = Ext.getCmp('wareHouseName').getRawValue(); + var departCoding = currentClickNode.attributes.keyId; + var departName = currentClickNode.attributes.text; + var tousseNames = ""; + if('部分盘点' == inventoryType){ + var recordArr = grid.getSelectionModel().getSelections(); + if(recordArr.length < 1){ + showResult("请选择需要盘点的科室库存!"); + return false; + }else{ + for (var i = 0; i < recordArr.length; i++) { + if(i == 0){ + tousseNames += recordArr[i].data["tousseName"]; + }else{ + tousseNames += ',' + recordArr[i].data["tousseName"]; + } + } + } + } + if(wareHouseId == null || wareHouseId == ''){ + showResult("请选择盘点仓库!"); + return false; + } + goBaseCountInventory(null,departCoding,departName,wareHouseId,wareHouseName,tousseNames); + } var columns = [ {header:"器械包名称",width:300,dataIndex:'tousseName',menuDisabled:true, renderer : gotoPage}, {header:"库存数量",width:100,dataIndex:'signedAmount',menuDisabled:true,renderer :amountDetailsStock}, @@ -500,6 +560,7 @@ Ext.getCmp('tousseName2').setValue(""); $Id("parm_s_tousseName").value = ""; Ext.getCmp("tousseGroupName").setValue(""); + Ext.getCmp("wareHouseName").setValue(""); $Id("parm_s_tousseGroupName").value = ""; } },{ @@ -510,6 +571,50 @@ handler : function() { queryDepartmentTousse(); } + },{ + text: "仓库:" + },{ + /*xtype : 'combo', + id : 'wareHouseName', + name : 'wareHouseName', + editable:false, + valueField : 'id', + displayField : 'name', + store : wareHouseStore, + forceSelection : true, + allowBlank : false, + triggerAction : 'all', + anchor : '100%'*/ + xtype : 'multiSelect', + id : 'wareHouseName', + name : 'wareHouseName', + valueField : 'id', + displayField : 'name', + allowBlank : true, + editable : false, + fieldLabel:'仓库', + listeners : { + select : function(combo, record, index){ + onAllChoosedOrNot(combo, record,index,'name'); + } + }, + store : wareHouseStore, + triggerAction : 'all', + anchor : '95%' + },{ + xtype : 'button', + text : '全部盘点', + minWidth : 70, + handler : function() { + checkBaseCountInventory('全部盘点'); + } + },{ + xtype : 'button', + text : '部分盘点', + minWidth : 70, + handler : function() { + checkBaseCountInventory('部分盘点'); + } } ] }); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/WareHouseManagerImpl.java =================================================================== diff -u -r23823 -r26757 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/WareHouseManagerImpl.java (.../WareHouseManagerImpl.java) (revision 23823) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/WareHouseManagerImpl.java (.../WareHouseManagerImpl.java) (revision 26757) @@ -498,4 +498,10 @@ } return jsonArray; } + + @Override + public boolean checkIsOneCSSDWareHouse(Long id) { + WareHouse wh = getWareHouseById(id); + return supplyRoomConfigManager.isFirstSupplyRoomOrgUnit(wh.getOrgUnitCode()); + } } Index: ssts-web/src/main/webapp/disinfectsystem/departmentStock/diffFousseInstanceInfo.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/departmentStock/diffFousseInstanceInfo.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/departmentStock/diffFousseInstanceInfo.js (revision 26757) @@ -0,0 +1,128 @@ +var diffTousseStore; +/** + * 点击差异数量,打开差异器械包信息 + * @param id 盘点项id,id有值时,其他参数均可为空 + * @param departCoding 部门编码 + * @param wareHouseId 仓库id + * @param tousseName 器械包名 + * @param scanTousseInstanceIds 扫描的器械包id + * @param ids 库存数量对应的器械包 + */ +function goDiffTousseInfoWin(id, departCoding, wareHouseId, tousseName, + scanTousseInstanceIds, ids) { + var tbar; + var cancelBtn = { + text : '取消', + handler : function() { + diffTousseWin.close(); + } + }; + tbar = [ cancelBtn ]; + var rd = new Ext.data.JsonReader({ + fields : [ { + name : 'id' + }, { + name : 'barcode' + }, { + name : 'status' + }, { + name : 'sterileEndTime' + }, { + name : 'invoiceSendTime' + }, { + name : 'signedDate' + } ] + }); + /*var sm = new top.Ext.grid.CheckboxSelectionModel({ + singleSelect : false + });*/ + diffTousseStore = new Ext.data.Store( + { + proxy : new Ext.data.HttpProxy( + { + url : WWWROOT + + '/disinfectSystem/tousseInstanceAction!getDifftousseInstanceInfo.do', + method : 'POST' + }), + reader : rd + }); + diffTousseStore.on("beforeload", function(thiz, options) { + thiz.baseParams["departCoding"] = departCoding; + thiz.baseParams["wareHouseId"] = wareHouseId; + thiz.baseParams["tousseName"] = tousseName; + thiz.baseParams["scanTousseInstanceIds"] = scanTousseInstanceIds; + thiz.baseParams["ids"] = ids; + thiz.baseParams["id"] = id; + }); + diffTousseStore.load(); + var tousseCm = new Ext.grid.ColumnModel([ /*sm,*/ { + id : 'id', + dataIndex : 'id', + hidden : true + }, { + header : "条码", + dataIndex : 'barcode', + width : 40, + menuDisabled : true + }, { + header : "状态", + dataIndex : 'status', + width : 30, + menuDisabled : true + }, { + header : "灭菌时间", + dataIndex : 'sterileEndTime', + width : 30, + menuDisabled : true + }, { + header : "发货时间", + dataIndex : 'invoiceSendTime', + width : 30, + menuDisabled : true + }, { + header : "签收时间", + dataIndex : 'signedDate', + width : 30, + menuDisabled : true + } ]); + var formWidth = 930; + var windowWidth = 930; + var windowHeight = 550; + diffFormObj = new top.Ext.FormPanel({ + id : 'diffTousseForm', + frame : true, + labelSeparator : ':', + bodyStyle : 'padding:5px 5px 0px 5px', + labelAlign : 'right', + width : formWidth, + autoScroll : true, + labelWidth : 80, + items : [ new top.Ext.grid.EditorGridPanel({ + id : 'diffTousseInstanceGrid', + store : diffTousseStore, + cm : tousseCm, + height : 500, + width : 900, + autoExpandColumn : 'delAction', + frame : false, + viewConfig : { + forceFit : true + }, + bodyStyle : 'border:1px solid #afd7af' + //selModel : sm + }) ], + buttons : tbar + }); + var diffTousseWin = new top.Ext.Window({ + id : 'diffTousseWin', + layout : 'fit', + title : tousseName + '误差信息', + width : windowWidth, + height : windowHeight, + border : false, + modal : true, + plain : true, + items : [ diffFormObj ] + }); + diffTousseWin.show(); +} Index: ssts-web/src/main/webapp/disinfectsystem/config/xjjqzyy/menu/menuconfigure.js =================================================================== diff -u -r26603 -r26757 --- ssts-web/src/main/webapp/disinfectsystem/config/xjjqzyy/menu/menuconfigure.js (.../menuconfigure.js) (revision 26603) +++ ssts-web/src/main/webapp/disinfectsystem/config/xjjqzyy/menu/menuconfigure.js (.../menuconfigure.js) (revision 26757) @@ -410,7 +410,8 @@ {hidden :SSTS_Tousse,text:"器械包库存",href:WWWROOT+'/disinfectsystem/toussemanager/toussegoodsstock/tousseGoodsStockView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_TousseMaintain_Manager,text:"器械包保养",href:WWWROOT+'/disinfectsystem/toussemanager/toussemaintain/tousseMaintainView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :!sstsConfig.hasOwnProperty('enableComboTousse') || sstsConfig.enableComboTousse == false || SSTS_ComboTousseManager,text:"聚合包定义管理",href:WWWROOT+'/disinfectsystem/basedatamanager/tousse/comboTousse.jsp?editMode=true',hrefTarget:linkTarget,leaf:true}, - {hidden :SSTS_DepartMentTousseManager,text:"基数管理",href:WWWROOT+'/disinfectsystem/departmentStock/departmentStockInputView.jsp',hrefTarget:linkTarget,leaf:true} + {hidden :SSTS_DepartMentTousseManager,text:"基数管理",href:WWWROOT+'/disinfectsystem/departmentStock/departmentStockInputView.jsp',hrefTarget:linkTarget,leaf:true}, + {hidden :SSTS_BaseAmountinventoryCheck_Manager,text:"基数盘点历史记录",href:WWWROOT+'/disinfectsystem/stocktakerecordmanager/inventoryrecordView.jsp?type='+inventoryTypeCodeBaseAmount,hrefTarget:linkTarget,leaf:true} ] },{ text:"手术仪器管理",