Index: forgon-core/src/main/java/com/forgon/directory/service/OrgUnitManagerImpl.java =================================================================== diff -u -r17785 -r18004 --- forgon-core/src/main/java/com/forgon/directory/service/OrgUnitManagerImpl.java (.../OrgUnitManagerImpl.java) (revision 17785) +++ forgon-core/src/main/java/com/forgon/directory/service/OrgUnitManagerImpl.java (.../OrgUnitManagerImpl.java) (revision 18004) @@ -1206,7 +1206,7 @@ "select ou.orgUnitCoding orgUnitCoding," + "ou.name orgUnitName " + "from OrgUnit ou " - + "where 1=1 " + + "where ou.id<>0 " + likeSql ; Index: ssts-web/src/main/webapp/disinfectsystem/basedatamanager/operationRoom/operationRoomView.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/basedatamanager/operationRoom/operationRoomView.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/basedatamanager/operationRoom/operationRoomView.js (revision 18004) @@ -0,0 +1,312 @@ +var grid; + +/** + * 点击修改时执行的方法 + * + */ +function loadFormDataAndUpdate(grid) { + var records = grid.getSelectionModel().getSelections(); + if (records.length == 0) { + showResult("请选择要修改的记录!"); + return false; + } + if (records.length > 1) { + showResult("一次只能修改一条记录!"); + return false; + } + var id = records[0].data['id']; + addAndModify(id); +} + +/** + * 修改记录 + * modifyRecord函数 触发modify函数调用,并传入当前列的值以及record.data对象 + * 页面中需要定义 modify(v,data) 函数 + */ +function modify(v,data){ + loadFormDataAndUpdate(grid); +} + +/** + * 点击某个手术间节点执行的函数 + * @param id 手术间id + * @param operationRoomName 手术间名称 + * @param orgUnitName 手术间所属科室名称 + * @param orgUnitCoding 手术间所属科室编码 + * @param isInvoice 是否发货 + */ +function reloadGrid(id, operationRoomName, orgUnitName, orgUnitCoding, isInvoice){ + $Id("parm_s_id").value = id; + $Id("parm_s_operationRoomName").value = operationRoomName; + $Id("parm_s_orgUnitName").value = orgUnitName; + $Id("parm_s_orgUnitCoding").value = orgUnitCoding; + $Id("parm_s_isInvoice").value = isInvoice; + grid.dwrReload(); +} + +/** + * 删除手术间 + * @param grid + * @returns {Boolean} + */ +function deleteOperationRoom(grid){ + var ids = grid.getSelectedValues('id', ';'); + if(ids==""){ + alert("请选择要删除的手术间!"); + return false; + } + Ext.MessageBox.confirm("请确认","是否确定要删除选中的组织机构?",function(button, text){ + if("yes" == button){ + Ext.Ajax.request({ + url : WWWROOT + '/disinfectSystem/baseData/operationRoomAction!deleteOperationRoomByIds.do', + params : {ids : ids}, + success : function(response, options) { + var result = Ext.decode(response.responseText); + if (result.success) { + showResult('删除成功!'); + Ext.getCmp('west-panel').root.reload(); + grid.dwrReload(); + } else { + showResult('删除失败!'); + } + }, + failure : function(response, options) { + showResult('对不起!服务器正忙,删除失败'); + } + }); + } + }); +} + +/** + * 手术间树形的搜索手术间,搜索对应的搜索间节点,并且点击自动一下 + */ +function search(){ + var searchId = Ext.getCmp('searchField').getValue(); //手术间id + if(searchId){ + var treePanel = Ext.getCmp('west-panel'); + Ext.Ajax.request({ + url: WWWROOT + '/disinfectSystem/baseData/operationRoomAction!getTreePathById.do', + params: {searchId: searchId}, + success: function(response ,options){ + var jsonObj = Ext.decode(response.responseText); + if(jsonObj != null && jsonObj.length != 0){ + if(jsonObj.success){ + treePanel.expandPath(jsonObj.nodePath, 'id', function(bSuccess, oLastNode){ + if(!bSuccess) return; + //focus 节点,并选中节点!,以下代码不可少 + oLastNode.on('click',function(node,event){ + var attributes = node.attributes; + reloadGrid(attributes.id, attributes.operationRoomName, attributes.orgUnitName, attributes.orgUnitCoding, attributes.isInvoice) + }); + oLastNode.ensureVisible(); + oLastNode.select(); + oLastNode.fireEvent('click', oLastNode); + }); + }else{ + alert('没有找到相关的手术间!'); + } + } + }, + failure: function(){ + alert('没有找到相关的手术间!'); + } + }); + }else{ + alert('请输入手术间名称!'); + } +} + +Ext.onReady(function(){ + Ext.QuickTips.init(); + + //所有grid之外的参数用这个方法传入,返回的是Map> + Ext.ux.ForgonPageGrid.prototype.getGridParameterMap = function(){}; + + var readerDetail = [{ + name : 'id' + },{ + name : 'orgUnitName' + },{ + name : 'orgUnitCoding' + },{ + name : 'operationRoomName' + },{ + name : 'operationRoomCoding' + },{ + name : 'parentOperationRoomName' + },{ + name : 'parentOperationRoomCoding' + },{ + name : 'isInvoice' + }]; + var tbar = [{ + text : '添加', + iconCls : 'btn_ext_application_add', + handler : function() { + addAndModify(null); + } + }, '-', { + text : '修改', + iconCls : 'btn_ext_application_edit', + handler : function() { + loadFormDataAndUpdate(grid); + } + }, '-', { + text : '删除', + iconCls : 'btn_ext_application_del', + handler : function() { + deleteOperationRoom(grid); + } + }]; + var columns = [{ + header : "手术间名称",width : 150,dataIndex : 'operationRoomName',renderer : modifyRecord + },{ + header : "手术间编码",width : 80,dataIndex : 'operationRoomCoding' + },{ + header : "所属科室名称",width : 100,dataIndex : 'orgUnitName' + },{ + header : "是否发货",width : 80,dataIndex : 'isInvoice' + }]; + + var filters = new Ext.grid.GridFilters({ + filters : [{ + type : 'string', dataIndex : 'operationRoomName' + },{ + type : 'string', dataIndex : 'operationRoomCoding' + },{ + type : 'string', dataIndex : 'orgUnitName' + },{ + type : 'string', dataIndex : 'isInvoice' + }] + }); + + grid = new Ext.ux.ForgonPageGrid({ + tbar:tbar, + pageSize:20, + defaultSortField:'id', + defaultSortDirection:'DESC', + isCheckboxSelectionModel:true, + plugins: filters, + rememberSelected:false, + columns: columns + }, + readerDetail, + OperationRoomTableManager.findOperationRoomTableList, + null //这个参数只是占位作用 + ); + + var root = new Ext.tree.AsyncTreeNode({ + text:'手术间', + id:'0', + listeners :{ + click : function(thisNode, e) { + $Id("parm_s_id").value = thisNode.id; + $Id("parm_s_operationRoomName").value = thisNode.text; + $Id("parm_s_orgUnitName").value = ""; + $Id("parm_s_orgUnitCoding").value = ""; + $Id("parm_s_isInvoice").value = ""; + grid.dwrReload(); + } + } + }); + var myLoader = new Ext.tree.TreeLoader({ + dataUrl:WWWROOT + '/disinfectSystem/baseData/operationRoomAction!treeLoad.do' + }); + myLoader.on("beforeload", function(treeLoader, node){ + treeLoader.baseParams.id = node.id; + }); + + //组织机构Store + var operationRoomStore = new Ext.data.Store({ + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/baseData/operationRoomAction!searchOperationRoom.do', + method : 'POST' + }), + reader : new Ext.data.JsonReader({ + root : 'data' + },[ + {name : 'id',mapping : 'id'}, + {name : 'operationRoomName',mapping : 'operationRoomName'} + ] + ) + }); + + var viewport = new Ext.Viewport({ + layout:'border', + items:[{ //西面的树 + region:'west', + id:'west-panel', + lines : false, + margins : '0 0 5 5', + cmargins : '0 0 0 0', + layout : 'accordion', + layoutConfig : { + animate : true + }, + collapsible: true, //允许折叠 + animCollapse:true, //折叠时是否有动画效果 + split: true, //是否允许拖动大小,与下面的折叠形式配合 + collapseMode:'mini', //折叠形式 + width: 200, + minSize : 100, + maxSize : 400, + xtype: 'treepanel', + autoScroll: true, + loader: myLoader, //数据加载 + root: root, + tbar:[ + new Ext.Action({ + text: '展开', + handler: function(){ + var treePanel = viewport.findById('west-panel'); + treePanel.expandAll(); + } + }),'-', + new Ext.Action({ + text: '折叠', + handler: function(){ + var treePanel = viewport.findById('west-panel'); + treePanel.collapseAll(); + } + }),'-', + { + xtype : 'combo', + id : 'searchField', + name : 'searchField', + queryParam : 'spell', + minChars : 0, + hideLabel :true, + valueField : 'id', + displayField : 'operationRoomName', + store : operationRoomStore, + forceSelection : true, + lazyInit : true, + width:60, + listWidth:200, + triggerAction : 'all', + hideTrigger : true, + typeAhead : false, + allowBlank : true, + anchor : '100%', + listeners:{ + select:function(combo, record, index){ + search(); + } + } + },{ + text:'查询', + handler:function(){ + search(); + } + } + ] + },{ //中间的数据表格 + region:'center', + xtype : 'panel', + margins : '0 0 0 0', + layout:'fit', + items:grid + }] + }); +}); \ No newline at end of file Index: forgon-core/src/main/java/com/forgon/directory/action/OrgUnitAction.java =================================================================== diff -u -r17763 -r18004 --- forgon-core/src/main/java/com/forgon/directory/action/OrgUnitAction.java (.../OrgUnitAction.java) (revision 17763) +++ forgon-core/src/main/java/com/forgon/directory/action/OrgUnitAction.java (.../OrgUnitAction.java) (revision 18004) @@ -132,19 +132,11 @@ } } - public String treeLoad() { + public void treeLoad() { String parentId = StrutsParamUtils.getPraramValue("parentId", ""); String json = orgUnitManager.getJsonChildrenNode(Long .valueOf(parentId)); - HttpServletResponse response = StrutsParamUtils.getResponse(); - try { - response.setCharacterEncoding("utf-8"); - // response.setContentType(""); - response.getWriter().print(json); - } catch (IOException e) { - e.printStackTrace(); - } - return null; + StrutsResponseUtils.output(json); } /** * 根据名字,查找到节点,返回根节点到当前节点的路径 Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/operationroom/action/OperationRoomAction.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/operationroom/action/OperationRoomAction.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/operationroom/action/OperationRoomAction.java (revision 18004) @@ -0,0 +1,184 @@ +package com.forgon.disinfectsystem.basedatamanager.operationroom.action; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.apache.commons.lang.StringUtils; +import org.apache.struts2.convention.annotation.Action; +import org.apache.struts2.convention.annotation.Namespace; +import org.apache.struts2.convention.annotation.ParentPackage; + +import com.forgon.disinfectsystem.basedatamanager.operationroom.service.OperationRoomManager; +import com.forgon.disinfectsystem.entity.basedatamanager.operationRoom.OperationRoom; +import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.StrutsResponseUtils; +import com.forgon.tools.json.JSONUtil; +import com.forgon.tools.string.StringTools; +import com.opensymphony.xwork2.ModelDriven; +import com.opensymphony.xwork2.Preparable; +/** + * 手术间的Action + * @author Chenjiaru 2017-05-04 + * + */ +@ParentPackage(value = "default") +@Namespace(value = "/disinfectSystem/baseData") +@Action(value = "operationRoomAction") +public class OperationRoomAction implements ModelDriven, Preparable{ + + private OperationRoom operationRoom; + private OperationRoomManager operationRoomManager; + + public void setOperationRoomManager(OperationRoomManager operationRoomManager) { + this.operationRoomManager = operationRoomManager; + } + + /** + * 加载手术间某个树节点的所有子节点(注意只是所有子节点,不包含子节点的子节点) + * @param id 节点id + */ + public void treeLoad() { + String id = StrutsParamUtils.getPraramValue("id", ""); + if (StringTools.isNotBlank(id)) { + String json = operationRoomManager.getJsonChildrenNode(Long.valueOf(id)); + StrutsResponseUtils.output(json); + } + } + + /** + * 保存手术间 + * @param parentOperationRoomId 上级手术间的id,通过这个可以得到上级手术间的名称和编码 + */ + public void saveOperationRoom() { + String parentOperationRoomId = StrutsParamUtils.getPraramValue("parentOperationRoomId", ""); + if (StringTools.isNotBlank(parentOperationRoomId)) { + OperationRoom parent = operationRoomManager.getOperationRoomById(Long.valueOf(parentOperationRoomId)); + operationRoom.setParentOperationRoomId(parent.getId()); + operationRoom.setParentOperationRoomName(parent.getOperationRoomName()); + operationRoom.setParentOperationRoomCoding(parent.getOperationRoomCoding()); + operationRoomManager.saveOrUpdateOperationRoom(operationRoom); + } + } + + /** + * 根据id加载手术间 + * @param id 手术间id + */ + public void loadOperationRoomById() { + Map map = new HashMap(); + map.put("success", true); + map.put("data", operationRoom); + JSONObject jsonObject = JSONObject.fromObject(map); + StrutsResponseUtils.output(jsonObject); + } + + /** + * 删除手术间(支持批量,并且会删除目标手术间的所有的下级手术间) + * @param ids 将要被删除的手术间id集合,用分号分隔 + */ + public void deleteOperationRoomByIds() { + String ids = StrutsParamUtils.getPraramValue("ids", ""); + if (StringTools.isNotBlank(ids)) { + JSONObject jsonObj = JSONUtil.buildJsonObject(true); + String[] idsArr = ids.split(";"); + + List idList = new LinkedList(); + for (String id : idsArr) { + idList.add(Long.valueOf(id)); + } + + try { + operationRoomManager.deleteOperationRoomByIds(idList); + } catch (Exception e) { + jsonObj = JSONUtil.buildJsonObject(false); + e.printStackTrace(); + } + StrutsResponseUtils.output(jsonObj); + } + } + + /** + * 在所有的手术间(不包含手术间id为0的那一条记录)中,根据关键字搜索手术间 + * @param spell 搜索的关键字 + * @return 返回值如下: + * { + * totalCount:结果集总数, + * data[{ + * id:手术间id1, operationRoomName:手术间名称1 + * },{ + * id:手术间id2, operationRoomName:手术间名称3 + * },...] + * } + */ + public void searchOperationRoom() { + String spell = StrutsParamUtils.getPraramValue("spell", ""); + List list = operationRoomManager.findAllOperationRoomByKeyword(spell); + JSONArray jsonArr = new JSONArray(); + for (OperationRoom operationRoom : list) { + JSONObject jsonObj = new JSONObject(); + jsonObj.put("id", operationRoom.getId()); + jsonObj.put("operationRoomName", operationRoom.getOperationRoomName()); + jsonArr.add(jsonObj); + } + JSONObject jsonObj = new JSONObject(); + jsonObj.put("totalCount", jsonArr.size()); + jsonObj.put("data", jsonArr.toString()); + StrutsResponseUtils.output(jsonObj); + } + + /** + * 获取某个手术间在树形视图上的路径 + * @param searchId 目标对象的id + * @return 返回值格式如:/0/1/2/3 + */ + public void getTreePathById() { + String searchId = StrutsParamUtils.getPraramValue("searchId", ""); + if (StringUtils.isNotBlank(searchId)) { + operationRoom = operationRoomManager.getOperationRoomById(Long.valueOf(searchId)); + LinkedList link = new LinkedList(); + if(operationRoom != null){ + //递归往上查找父节点,构建从根节点到当前节点的完整路径 + while(operationRoom.getId() != null && operationRoom.getId() != 0){ + link.push("/" + operationRoom.getId()); + operationRoom = operationRoomManager + .getOperationRoomById(operationRoom.getParentOperationRoomId()); //这里没处理空异常,因为每一个节点的父节点id不可能为空 + } + link.push("/0"); + StringBuffer sb = new StringBuffer(); + Iterator it = link.iterator(); + while(it.hasNext()){ + sb.append(it.next()); + } + JSONObject jsonObj = JSONUtil.buildJsonObject(true); + jsonObj.put("nodePath", sb.toString()); + StrutsResponseUtils.output(jsonObj); + } + } + } + + @Override + public void prepare() throws Exception { + try { + String id = StrutsParamUtils.getPraramValue("id", ""); + if (StringUtils.isNotBlank(id)) { + operationRoom = operationRoomManager.getOperationRoomById(Long.valueOf(id)); + } else { + operationRoom = new OperationRoom(); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + @Override + public OperationRoom getModel() { + return operationRoom; + } + +} Index: ssts-web/src/main/webapp/homepage/menu.jsp =================================================================== diff -u -r17849 -r18004 --- ssts-web/src/main/webapp/homepage/menu.jsp (.../menu.jsp) (revision 17849) +++ ssts-web/src/main/webapp/homepage/menu.jsp (.../menu.jsp) (revision 18004) @@ -1407,6 +1407,17 @@ /** + * 《手术间管理》权限 + */ +var SSTS_OperationRoom_manager = true; + + SSTS_OperationRoom_manager = false; + +if (!sstsConfig.enableOperationRoomManagerViwe){ + SSTS_OperationRoom_manager = true; +} + +/** * 《参数设置》菜单,注意:后续新增的功能只要是“参数设置”菜单的子菜单,需要把此子菜单的权限变量加上 */ var SSTS_BaseData_Manager = SSTS_departMentApplication && SSTS_ShiftConfig_manager @@ -1416,7 +1427,8 @@ && SSTS_Operation_manager && SSTS_ProjectName_manager && SSTS_PackType_manager && SSTS_Tousse_Update && SSTS_DiposableGoodsType_manager && SSTS_Container && SSTS_Supplier && SSTS_CleanMethod && SSTS_Rinser && SSTS_Sterilisation && SSTS_Sterilizer && SSTS_Expiration && SSTS_SerialNumber_manager && SSTS_ImportBaseData_manager && SSTS_IPAndOrgUnitMapping -&& SSTS_GoodsBindingConfig && SSTS_GoodsFilterConfig && SSTS_Tousse && SSTS_Damage && SSTS_TousseGroup && SSTS_UrgentLevel_manager; +&& SSTS_GoodsBindingConfig && SSTS_GoodsFilterConfig && SSTS_Tousse && SSTS_Damage && SSTS_TousseGroup && SSTS_UrgentLevel_manager +&& SSTS_OperationRoom_manager; Index: forgon-core/src/main/java/com/forgon/treenode/ext/model/OperationRoomTreeNode.java =================================================================== diff -u --- forgon-core/src/main/java/com/forgon/treenode/ext/model/OperationRoomTreeNode.java (revision 0) +++ forgon-core/src/main/java/com/forgon/treenode/ext/model/OperationRoomTreeNode.java (revision 18004) @@ -0,0 +1,100 @@ +package com.forgon.treenode.ext.model; + +public class OperationRoomTreeNode { + private Long id; + private String keyId; + private String text; + private boolean singleClickExpand=true; + private String href; + private String hrefTarget; + private boolean leaf=true; + private boolean expanded = false; + private boolean isManager = false; + + private String operationRoomName; + private String orgUnitName; + private String orgUnitCoding; + private String isInvoice; + + + public Long getId() { + return id; + } + public void setId(Long id) { + this.id = id; + } + public String getKeyId() { + return keyId; + } + public void setKeyId(String keyId) { + this.keyId = keyId; + } + public String getText() { + return text; + } + public void setText(String text) { + this.text = text; + } + public boolean isSingleClickExpand() { + return singleClickExpand; + } + public void setSingleClickExpand(boolean singleClickExpand) { + this.singleClickExpand = singleClickExpand; + } + public String getHref() { + return href; + } + public void setHref(String href) { + this.href = href; + } + public String getHrefTarget() { + return hrefTarget; + } + public void setHrefTarget(String hrefTarget) { + this.hrefTarget = hrefTarget; + } + public boolean isLeaf() { + return leaf; + } + public void setLeaf(boolean leaf) { + this.leaf = leaf; + } + public boolean isExpanded() { + return expanded; + } + public void setExpanded(boolean expanded) { + this.expanded = expanded; + } + public boolean isManager() { + return isManager; + } + public void setManager(boolean isManager) { + this.isManager = isManager; + } + public String getOperationRoomName() { + return operationRoomName; + } + public void setOperationRoomName(String operationRoomName) { + this.operationRoomName = operationRoomName; + } + public String getOrgUnitName() { + return orgUnitName; + } + public void setOrgUnitName(String orgUnitName) { + this.orgUnitName = orgUnitName; + } + public String getOrgUnitCoding() { + return orgUnitCoding; + } + public void setOrgUnitCoding(String orgUnitCoding) { + this.orgUnitCoding = orgUnitCoding; + } + public String getIsInvoice() { + return isInvoice; + } + public void setIsInvoice(String isInvoice) { + this.isInvoice = isInvoice; + } + + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/operationroom/service/OperationRoomManager.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/operationroom/service/OperationRoomManager.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/operationroom/service/OperationRoomManager.java (revision 18004) @@ -0,0 +1,46 @@ +package com.forgon.disinfectsystem.basedatamanager.operationroom.service; + +import java.util.List; + +import com.forgon.disinfectsystem.entity.basedatamanager.operationRoom.OperationRoom; + +public interface OperationRoomManager { + + /** + * 加载手术间某个树节点的所有子节点(注意只是所有子节点,不包含子节点的子节点) + * @param id 节点id + */ + public String getJsonChildrenNode(Long id); + + /** + * 通过id获取手术间 + * @param id 手术间id + * @return + */ + public OperationRoom getOperationRoomById(Long id); + + /** + * 保存或者更新手术间(注意:1、如果把是否发货属性值为否,则所有下级的值也要改成否 2、如果修改了所属科室,所有下级的也要修改) + * @param operationRoom 目标手术间 + */ + public void saveOrUpdateOperationRoom(OperationRoom operationRoom); + + /** + * 删除手术间(支持批量,并且会删除目标手术间的所有的下级手术间) + * @param idList 将要被删除的手术间id集合 + */ + public void deleteOperationRoomByIds(List idList); + + /** + * 获取所有的手术间(不包含手术间id为0的那一条记录) + * @return + */ + public List findAllOperationRoom(); + + /** + * 在所有的手术间(不包含手术间id为0的那一条记录)中,根据关键字搜索手术间 + * @return + */ + public List findAllOperationRoomByKeyword(String keyword); + +} Index: ssts-web/src/main/webapp/disinfectsystem/basedatamanager/operationRoom/operationRoom.jsp =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/basedatamanager/operationRoom/operationRoom.jsp (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/basedatamanager/operationRoom/operationRoom.jsp (revision 18004) @@ -0,0 +1,31 @@ +<%@ page contentType="text/html; charset=UTF-8"%> +<%@ include file="/common/taglibs.jsp"%> +<%@ include file="/common/includeExtJsAndCss.jsp"%> + + + 手术间管理 + + + + + + + + + + +
+
+
+
+ + +
+ + + + + +
+ + \ No newline at end of file Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/operationroom/service/OperationRoomManagerImpl.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/operationroom/service/OperationRoomManagerImpl.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/operationroom/service/OperationRoomManagerImpl.java (revision 18004) @@ -0,0 +1,204 @@ +package com.forgon.disinfectsystem.basedatamanager.operationroom.service; + +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import net.sf.json.JSONArray; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; + +import com.forgon.Constants; +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.directory.model.OrgUnit; +import com.forgon.disinfectsystem.entity.basedatamanager.operationRoom.OperationRoom; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.SqlUtils; +import com.forgon.treenode.ext.model.ExtTreeNode; +import com.forgon.treenode.ext.model.OperationRoomTreeNode; +import com.forgon.treenode.model.THTreeNode; + +public class OperationRoomManagerImpl implements OperationRoomManager { + private ObjectDao objectDao; + + public void setObjectDao(ObjectDao objectDao) { + this.objectDao = objectDao; + } + @Override + public String getJsonChildrenNode(Long parentId) { + List children = findSubordinateOperationRoomById(parentId); + + //获取是否该部门为叶子节点 + ArrayList parentIds = new ArrayList(); + if (CollectionUtils.isNotEmpty(children)) { + for (OperationRoom operationRoom : children) { + parentIds.add(operationRoom.getId()); + } + } + + String parentIdString = ""; + for (Long id : parentIds){ + parentIdString += "," + id ; + } + + if (parentIdString.startsWith(",")){ + parentIdString = parentIdString.substring(1); + } + + String sql = "select parentOperationRoomId, count(*) from OperationRoom where parentOperationRoomId in (" + parentIdString + ") group by parentOperationRoomId"; + + // 子节点数量的Map + Map subNodesCountMap = new HashMap(); + + ResultSet rs = objectDao.executeSql(sql); + try { + while (rs.next()) { + Long myId = rs.getLong(1); + Long subNodesCount = rs.getLong(2); + subNodesCountMap.put(myId, subNodesCount); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + List operationRoomTreeNodes = new ArrayList(); //kfj + if (CollectionUtils.isNotEmpty(children)) { + for (OperationRoom thTreeNode : children) { + OperationRoomTreeNode operationRoomTreeNode = new OperationRoomTreeNode(); + + Long id = thTreeNode.getId(); + String orgUnitName = thTreeNode.getOrgUnitName(); + String orgUnitCoding = thTreeNode.getOrgUnitCoding(); + String isInvoice = thTreeNode.getIsInvoice(); + String operationRoomName = thTreeNode.getOperationRoomName(); + + operationRoomTreeNode.setId(id); + operationRoomTreeNode.setText(operationRoomName); + operationRoomTreeNode.setHref(String.format("javascript:reloadGrid(%s,'%s','%s','%s','%s');", id, operationRoomName, orgUnitName,orgUnitCoding, isInvoice)); + operationRoomTreeNode.setHrefTarget("_self"); + operationRoomTreeNode.setOperationRoomName(operationRoomName); + operationRoomTreeNode.setOrgUnitName(orgUnitName); + operationRoomTreeNode.setOrgUnitCoding(orgUnitCoding); + operationRoomTreeNode.setIsInvoice(isInvoice); + + Long subNodesCount = subNodesCountMap.get(id); + boolean isLeaf = true; + if (subNodesCount == null || subNodesCount == 0) { + isLeaf = true; + } else if (subNodesCount > 0) { + isLeaf = false; + } + operationRoomTreeNode.setLeaf(isLeaf); + operationRoomTreeNodes.add(operationRoomTreeNode); + } + } + JSONArray jsonArray = JSONArray.fromObject(operationRoomTreeNodes); + return jsonArray.toString(); + } + + /** + * 获取某个手术间的下级手术间(注意只是下级,不包含下级的下级) + * @param id 目标对象的id + * @return + */ + private List findSubordinateOperationRoomById(Long id) { + return (List) objectDao.findByProperty(OperationRoom.class.getSimpleName(), + "parentOperationRoomId", id.toString()); + } + @Override + public OperationRoom getOperationRoomById(Long id) { + return (OperationRoom) objectDao + .getByProperty(OperationRoom.class.getSimpleName(), "id", id); + + } + @Override + public void saveOrUpdateOperationRoom(OperationRoom operationRoom) { + String isInvoice = operationRoom.getIsInvoice(); + Long id = operationRoom.getId(); + if (id != null) { + if (Constants.STR_NO.equals(isInvoice)) { + LinkedList idList = new LinkedList(); + getAllSubordinateOperationRoomId(id, idList); + if (CollectionUtils.isNotEmpty(idList)) { + String inMember = SqlUtils.getNonStringFieldInCollectionsPredicate("id", idList); + String sql = String.format("update OperationRoom set isInvoice='%s' where %s", Constants.STR_NO, inMember); + objectDao.executeUpdate(sql); + } + } + String whereHql = String.format("where parentOperationRoomId=%s", id); + OperationRoom subordinateOperationRoom = (OperationRoom) objectDao + .getBySql(OperationRoom.class.getSimpleName(), whereHql); + if (subordinateOperationRoom != null + && !StringTools.equals(subordinateOperationRoom.getOrgUnitName(), operationRoom.getOrgUnitName())) { + LinkedList idList = new LinkedList(); + getAllSubordinateOperationRoomId(id, idList); + if (CollectionUtils.isNotEmpty(idList)) { + String inMember = SqlUtils.getNonStringFieldInCollectionsPredicate("id", idList); + String sql = String.format("update OperationRoom set orgUnitName='%s',orgUnitCoding='%s' where %s", + operationRoom.getOrgUnitName(), operationRoom.getOrgUnitCoding(), inMember); + objectDao.executeUpdate(sql); + } + } + } + objectDao.saveOrUpdate(operationRoom); + } + @Override + public void deleteOperationRoomByIds(List idList) { + if (CollectionUtils.isNotEmpty(idList)) { + LinkedList tempList = new LinkedList(); + for (Long id : idList) { + getAllSubordinateOperationRoomId(id, tempList); + } + tempList.addAll(idList); + String inMember = SqlUtils.getNonStringFieldInCollectionsPredicate("po.id", tempList); + String whereHql = String.format("where %s", inMember); + List list = (List) objectDao + .findBySql(OperationRoom.class.getSimpleName(),whereHql); + for (OperationRoom operationRoom : list) { + objectDao.delete(operationRoom); + } + } + } + + /** + * 根据某个手术间的id,获取其所有下级手术间的id(包含下级手术间的下级手术间,采用递归算法) + * @param id 手术间id + * @param idList 所有下级手术间的id集合,作为输出对象 + */ + private void getAllSubordinateOperationRoomId(Long id, LinkedList idList) { + String sql = String.format("select id from OperationRoom where parentOperationRoomId=%s", id); + ResultSet result = objectDao.executeSql(sql); + try { + while(result.next()){ + Long tempId = result.getLong("id"); + idList.add(tempId); + getAllSubordinateOperationRoomId(tempId, idList); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(result); + } + } + @Override + public List findAllOperationRoom() { + return (List) objectDao + .findBySql(OperationRoom.class.getSimpleName(), "where id<>0"); + } + @Override + public List findAllOperationRoomByKeyword(String keyword) { + String whereHql = "where id<>0 and operationRoomName like '%" + keyword + "%'"; + return (List) objectDao + .findBySql(OperationRoom.class.getSimpleName(), whereHql); + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/operationroom/dwr/OperationRoomTableManager.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/operationroom/dwr/OperationRoomTableManager.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/operationroom/dwr/OperationRoomTableManager.java (revision 18004) @@ -0,0 +1,35 @@ +package com.forgon.disinfectsystem.basedatamanager.operationroom.dwr; + +import java.util.List; +import java.util.Map; + +import com.forgon.component.grid.GridManager; +import com.forgon.disinfectsystem.entity.basedatamanager.operationRoom.OperationRoom; +import com.forgon.tools.string.StringTools; +/** + * 手术间管理的TableManager + * @author Chenjiaru 2017-05-04 + * + */ +public class OperationRoomTableManager { + private GridManager gridManager; + + public void setGridManager(GridManager gridManager) { + this.gridManager = gridManager; + } + public String findOperationRoomTableList(Map> parameterMap) { + Map sqlWhereParamMap = gridManager + .getParamFromView(parameterMap); + String parentId = (String) sqlWhereParamMap.get("id"); + + String jsonDataString = ""; + if (StringTools.isNotBlank(parentId)) { + StringBuffer hql = new StringBuffer("where 1=1 "); + hql.append(String.format("and po.parentOperationRoomId=%s",parentId)); + jsonDataString = gridManager.renderGrid(parameterMap, OperationRoom.class.getSimpleName(), + hql.toString(), new String[] {}); + } + return jsonDataString; + } + +} Index: ssts-web/src/main/webapp/disinfectsystem/basedatamanager/operationRoom/operationRoomForm.js =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/basedatamanager/operationRoom/operationRoomForm.js (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/basedatamanager/operationRoom/operationRoomForm.js (revision 18004) @@ -0,0 +1,236 @@ +var windowObj = null; +var formObj = null; + +/** + * 保存 + */ +function save() { + var saveBtn = top.Ext.getCmp('saveBtn'); + saveBtn.disable(); + if (!formObj.form.isValid()) { + showResult('请正确填写表单各值'); + saveBtn.enable(); + return false; + } + + top.Ext.getCmp('isInvoice').enable(); + formObj.form.submit({ + url : WWWROOT + '/disinfectSystem/baseData/operationRoomAction!saveOperationRoom.do', + method : 'POST', + success : function(thisForm, action) { + windowObj.close(); + showResult('保存成功'); + Ext.getCmp('west-panel').root.reload(); + grid.dwrReload(); + }, + failure : function(thisForm, action) { + showResult('保存失败了,请联系管理员'); + } + }); +} + + + +/** + * 新增或者修改 + * @param id 如果是新增的值为空(注意不要传0)或者不传,如果是修改,值为被修改那条记录的id + */ +function addAndModify(id) { + var parentId = $Id("parm_s_id").value; //上级手术间id + var parentOperationRoom = $Id("parm_s_operationRoomName").value; //这个属性只用于展示,后台会根据parentId属性重新赋值的 + var orgUnitName = $Id("parm_s_orgUnitName").value; + var orgUnitCoding = $Id("parm_s_orgUnitCoding").value; + var isInvoice = $Id("parm_s_isInvoice").value; + /** + * 所属科室combo的store + */ + var orgUnitSimpleStore = new Ext.data.SimpleStore({ + fields : [ 'orgUnitValue', 'orgUnitDisplay' ], + url : WWWROOT + '/systemmanage/orgUnit/getOrgUnitCodingAndNameByName.do', + listeners : { + beforeload : function(thisCombo, options) { + orgUnitSimpleStore.baseParams.orgUnit = top.Ext.getCmp('orgUnit').getRawValue(); + } + } + }); + + formObj = new top.Ext.FormPanel({ + frame : true, + labelSeparator : ':', + bodyStyle : 'padding:5px 5px 0px 5px', + height : 400, + autoScroll : true, + labelAlign : 'right', + items : [{ + xtype : 'hidden', + id : 'id', + name : 'id', + value : id + },{ + xtype : 'hidden', + id : 'orgUnitName', + name : 'orgUnitName' + },{ + xtype : 'hidden', + id : 'orgUnitCoding', + name : 'orgUnitCoding' + },{ + xtype : 'hidden', + id : 'parentOperationRoomId', + name : 'parentOperationRoomId', + value : parentId + },{ + layout : 'column', + labelWidth : 90, + items : [{ + columnWidth : .5, + layout : 'form', + labelAlign:"right", + items:[{ + xtype : 'combo', + name : "orgUnit", + id : "orgUnit", + fieldLabel : '所属科室', + valueField : 'orgUnitValue', + displayField : 'orgUnitDisplay', + store : orgUnitSimpleStore, + allowBlank : false, + blankText : '此文本框不能为空', + forceSelection : true, + triggerAction : 'all', + minChars : 0, + maxHeight : 200, + anchor : '95%', + hideTrigger : true, + listeners:{ + select:function(combo, record, index){ + var orgUnitName = top.Ext.getCmp("orgUnit").getRawValue(); + var orgUnitCoding = top.Ext.getCmp("orgUnit").getValue(); + top.Ext.getCmp("orgUnitName").setValue(orgUnitName); + top.Ext.getCmp("orgUnitCoding").setValue(orgUnitCoding); + }, + render:function(thisCombo) { + if (parentId != '0') { + top.Ext.getCmp("orgUnitName").setValue(orgUnitName); + top.Ext.getCmp("orgUnitCoding").setValue(orgUnitCoding); + thisCombo.setValue(orgUnitName); + thisCombo.disable(); + thisCombo.addClass('fieldReadOnlyNoRemove'); + } + } + } + }] + },{ + columnWidth : .5, + layout : 'form', + labelAlign:"right", + items:[{ + xtype : 'textfield', + name : 'parentOperationRoom', + id : 'parentOperationRoom', + fieldLabel : '上级手术间', + anchor : '95%', + value : parentOperationRoom, + disabled : true, + cls:'fieldReadOnlyNoRemove', + allowBlank : false, + blankText : '此文本框不能为空' + }] + },{ + columnWidth : .5, + layout : 'form', + labelAlign:"right", + items:[{ + xtype : 'textfield', + name : 'operationRoomName', + id : 'operationRoomName', + fieldLabel : '手术间名称', + anchor : '95%', + allowBlank : false, + blankText : '此文本框不能为空' + }] + },{ + columnWidth : .5, + layout : 'form', + labelAlign:"right", + items:[{ + xtype : 'textfield', + name : 'operationRoomCoding', + id : 'operationRoomCoding', + fieldLabel : '手术间编码', + anchor : '95%' + }] + },{ + columnWidth : .5, + layout : 'form', + labelAlign:"right", + items:[{ + xtype : 'combo', + fieldLabel : '是否发货', + id : 'isInvoice', + name : 'isInvoice', + valueField : 'value', + displayField : 'value', + allowBlank : false, + value : '是', + store : new Ext.data.SimpleStore({ + fields : [ 'value'], + data : [['是'],['否']] + }), + editable : false, + forceSelection : true, + mode : 'local', + triggerAction : 'all', + hideTrigger : (isInvoice == '否'), + anchor : '95%', + listeners : { + render : function(thisCombo) { + if (isInvoice == '否') { + thisCombo.disable(); + thisCombo.setValue('否'); + } + } + } + }] + }] + }], + buttons : [{ + text : '保存', + id : 'saveBtn', +// hidden : id ? SSTS_IPAndOrgUnitMapping_Update : false, //如果没有修改的权限,隐藏此按钮,因为用户可能通过点击链接来修改 + handler : save + }, { + text : '取消', + handler : function() { + windowObj.close(); + } + }] + }); + + windowObj = new top.Ext.Window({ + layout : 'fit', + title : '手术间管理', + width : 550, + height : 200, + border : false, + modal : true, + plain : true, + items : formObj + }); + windowObj.show(); + + if (id){ //如果是修改就加载需要的数据 + formObj.form.load({ + url : WWWROOT + '/disinfectSystem/baseData/operationRoomAction!loadOperationRoomById.do', + method : 'POST', + waitMsg : '正在加载数据,请稍候', + params : {id : id}, + success : function(form, action) { + var data = action.result.data; + top.Ext.getCmp('orgUnit').setValue(data.orgUnitName); + }, + failure : function(form, action) { + } + }); + } +} Index: ssts-web/src/main/java/com/forgon/disinfectsystem/initdata/service/InitializeDataManagerImpl.java =================================================================== diff -u -r17877 -r18004 --- ssts-web/src/main/java/com/forgon/disinfectsystem/initdata/service/InitializeDataManagerImpl.java (.../InitializeDataManagerImpl.java) (revision 17877) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/initdata/service/InitializeDataManagerImpl.java (.../InitializeDataManagerImpl.java) (revision 18004) @@ -42,10 +42,12 @@ import com.forgon.directory.service.SysUserManager; import com.forgon.disinfectsystem.barcode.service.BarcodeManager; import com.forgon.disinfectsystem.basedatamanager.container.service.ContainerManager; +import com.forgon.disinfectsystem.basedatamanager.operationroom.service.OperationRoomManager; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.basedatamanager.urgent.service.UrgentLevelManager; import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager; import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; +import com.forgon.disinfectsystem.entity.basedatamanager.operationRoom.OperationRoom; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.WareHouse; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; @@ -109,6 +111,7 @@ private CSSDTestDataProcess cssdTestDataProcess; private UrgentLevelManager urgentLevelManager; + private OperationRoomManager operationRoomManager; public void setUrgentLevelManager(UrgentLevelManager urgentLevelManager) { this.urgentLevelManager = urgentLevelManager; @@ -135,6 +138,10 @@ public void setBarcodeManager(BarcodeManager barcodeManager) { this.barcodeManager = barcodeManager; } + + public void setOperationRoomManager(OperationRoomManager operationRoomManager) { + this.operationRoomManager = operationRoomManager; + } public void setHttpOptionManager(HttpOptionManager httpOptionManager) { this.httpOptionManager = httpOptionManager; @@ -231,6 +238,8 @@ */ initOrgUnitAndAdministrator(); + initOperationRoom(); + /** * 初始化知识管理模块 */ @@ -602,7 +611,23 @@ } return orgUnit; } + /** + * 初始化手术间的根节点 + */ + private void initOperationRoom() { + OperationRoom operationRoom = (OperationRoom) operationRoomManager + .getOperationRoomById(Long.valueOf(0)); + if (operationRoom == null) { + String sql = String.format("insert into OperationRoom(id,operationRoomName,operationRoomCoding) values(%s,'%s','%s')", "0", "手术间", "手术间编码"); + if (dbConnection.isMySQL() || dbConnection.isOracle()) { + objectDao.excuteSQL(sql); + } else if (dbConnection.isSqlServer()) { + insertIntoFirstItemFromSQLServer(sql, OperationRoom.class.getSimpleName()); + } + } + } + /** * 给所有“没有仓库的科室”初始化一个默认的仓库 */ private void initWareHouseOfOrgUnit(){ Index: ssts-web/src/main/resources/spring/applicationContext-disinfectsystem-service.xml =================================================================== diff -u -r17897 -r18004 --- ssts-web/src/main/resources/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 17897) +++ ssts-web/src/main/resources/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 18004) @@ -2130,7 +2130,28 @@ class="com.forgon.disinfectsystem.basedatamanager.ipandorgunitmapping.dwr.IpAndOrgUnitMappingTableManager"> + + + + + + + + + PROPAGATION_REQUIRED + + + + + + + + + Index: ssts-web/src/main/webapp/disinfectsystem/config/zsyy/config.js =================================================================== diff -u -r17971 -r18004 --- ssts-web/src/main/webapp/disinfectsystem/config/zsyy/config.js (.../config.js) (revision 17971) +++ ssts-web/src/main/webapp/disinfectsystem/config/zsyy/config.js (.../config.js) (revision 18004) @@ -107,5 +107,7 @@ //已经预回收的,回收数量为0的物品,在回收的时候是否隐藏.为true则隐藏,为false则不隐藏,默认为false hideZeroPrerecycleAmountTousseItem:true, //器械包有材料丢失,是否必须确认。默认值为true,表示必须确认。false表示不用确认,此时保存后,历史回收记录的状态就是已确认(这就跟标识牌丢失一样,不用再次确认) - tousseMaterialsLostMustConfirm:false + tousseMaterialsLostMustConfirm:false, + //是否启用手术间管理界面(true为启用,false或者不配置都不启用) + enableOperationRoomManagerViwe:true } \ No newline at end of file Index: ssts-web/src/main/webapp/homepage/menuconfigure.js =================================================================== diff -u -r17849 -r18004 --- ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 17849) +++ ssts-web/src/main/webapp/homepage/menuconfigure.js (.../menuconfigure.js) (revision 18004) @@ -593,6 +593,7 @@ {hidden :SSTS_GoodsBindingConfig,text:"物品绑定",href:WWWROOT+ '/disinfectsystem/goodsBindingConfig/goodsBindingConfigView.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_GoodsFilterConfig,text:"物品黑白名单过滤设置",href:WWWROOT+'/disinfectsystem/goodFilterConfig/goodFilterTemplate.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_UrgentLevel_manager,text:"加急级别管理",href:WWWROOT+'/disinfectsystem/basedatamanager/urgentLevel/urgentLevelView.jsp',hrefTarget:linkTarget,leaf:true}, + {hidden :SSTS_OperationRoom_manager,text:"手术间管理",href:WWWROOT+'/disinfectsystem/basedatamanager/operationRoom/operationRoom.jsp',hrefTarget:linkTarget,leaf:true}, {hidden :SSTS_SupplyRoomType_manager,text:"科室供应室设置",href:WWWROOT+'/disinfectsystem/basedatamanager/supplyroomtype/supplyRoomTypeView.jsp?editMode=true',hrefTarget:linkTarget,leaf:true} ] },{ Index: ssts-web/src/main/webapp/WEB-INF/dwr.xml =================================================================== diff -u -r17849 -r18004 --- ssts-web/src/main/webapp/WEB-INF/dwr.xml (.../dwr.xml) (revision 17849) +++ ssts-web/src/main/webapp/WEB-INF/dwr.xml (.../dwr.xml) (revision 18004) @@ -522,6 +522,11 @@ + + + + + Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/operationRoom/OperationRoom.java =================================================================== diff -u -r17952 -r18004 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/operationRoom/OperationRoom.java (.../OperationRoom.java) (revision 17952) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/operationRoom/OperationRoom.java (.../OperationRoom.java) (revision 18004) @@ -27,6 +27,11 @@ private Long id; /** + * 所属科室名称(为手术间分组才有对应的科室名称,为具体某个手术间时不会有科室名称) + */ + private String orgUnitName; + + /** * 所属科室编码(为手术间分组才有对应的科室编码,为具体某个手术间时不会有科室编码) */ private String orgUnitCoding; @@ -42,6 +47,16 @@ private String operationRoomName; /** + * 上级手术间(分组)id + */ + private Long parentOperationRoomId; + + /** + * 上级手术间(分组)名称 + */ + private String parentOperationRoomName; + + /** * 上级手术间(分组)编码 */ private String parentOperationRoomCoding; @@ -100,5 +115,29 @@ public void setIsInvoice(String isInvoice) { this.isInvoice = isInvoice; } + + public String getOrgUnitName() { + return orgUnitName; + } + + public void setOrgUnitName(String orgUnitName) { + this.orgUnitName = orgUnitName; + } + + public String getParentOperationRoomName() { + return parentOperationRoomName; + } + + public void setParentOperationRoomName(String parentOperationRoomName) { + this.parentOperationRoomName = parentOperationRoomName; + } + + public Long getParentOperationRoomId() { + return parentOperationRoomId; + } + + public void setParentOperationRoomId(Long parentOperationRoomId) { + this.parentOperationRoomId = parentOperationRoomId; + } } Index: ssts-web/src/main/resources/systemset/operationDefine.xml =================================================================== diff -u -r17849 -r18004 --- ssts-web/src/main/resources/systemset/operationDefine.xml (.../operationDefine.xml) (revision 17849) +++ ssts-web/src/main/resources/systemset/operationDefine.xml (.../operationDefine.xml) (revision 18004) @@ -474,6 +474,7 @@ +