summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshizhendong <[email protected]>2019-10-23 10:18:03 +0800
committershizhendong <[email protected]>2019-10-23 10:18:03 +0800
commitd2375f6f919371822af054eafa72592e8e44bfba (patch)
treeb944da15de0e6c74fd754ebf49ce2479c5914392
parent0768b178b7386c07a32292a4a7954147fbcef298 (diff)
1.后台增加查询节点组包含节点个数接口
2.节点组页面显示包含节点数 3.节点表单布局修改
-rw-r--r--nezha-admin/src/main/java/com/nis/modules/node/controller/NodeGroupInfoController.java18
-rw-r--r--nezha-admin/src/main/java/com/nis/modules/node/dao/NodeGroupInfoDao.java3
-rw-r--r--nezha-admin/src/main/java/com/nis/modules/node/service/NodeGroupInfoService.java3
-rw-r--r--nezha-admin/src/main/java/com/nis/modules/node/service/impl/NodeGroupInfoServiceImpl.java13
-rw-r--r--nezha-admin/src/main/resources/mapper/node/NodeGroupInfoDao.xml5
-rw-r--r--nezha-admin/src/main/resources/templates/js/modules/node/nodeGroup.js32
-rw-r--r--nezha-admin/src/main/resources/templates/modules/node/nodeGroup.html54
-rw-r--r--nezha-admin/src/main/resources/templates/modules/node/nodeInfo.html166
-rw-r--r--nezha-common/src/main/java/com/nis/common/utils/RCode.java1
9 files changed, 170 insertions, 125 deletions
diff --git a/nezha-admin/src/main/java/com/nis/modules/node/controller/NodeGroupInfoController.java b/nezha-admin/src/main/java/com/nis/modules/node/controller/NodeGroupInfoController.java
index 71fe2514..63086f24 100644
--- a/nezha-admin/src/main/java/com/nis/modules/node/controller/NodeGroupInfoController.java
+++ b/nezha-admin/src/main/java/com/nis/modules/node/controller/NodeGroupInfoController.java
@@ -76,7 +76,8 @@ class NodeGroupInfoController {
@PutMapping("/update")
public R update(@RequestBody NodeGroupInfoEntity nodegroupInfo) {
ValidateUtils.is(nodegroupInfo).notNull(RCode.NOT_NULL_ERROR)
- .and(nodegroupInfo.getName()).notNull(RCode.NODEGROUP_NAME_ISNULL);
+ .and(nodegroupInfo.getName()).notNull(RCode.NODEGROUP_NAME_ISNULL)
+ .and(nodegroupInfo.getId()).notNull(RCode.NODEGROUP_ID_ISNULL);
nodegroupInfoService.updateNodeGroupInfo(nodegroupInfo);
return R.ok();
}
@@ -87,7 +88,7 @@ class NodeGroupInfoController {
public R groupNameCheck(Long id, String name, Long pid, Long systemId) {
ValidateUtils.is(name).notNull(RCode.NODEGROUP_NAME_ISNULL).and(pid).notNull(RCode.NODEGROUP_PID_ISNULL);
- if (nodegroupInfoService.groupNameCheck(id, name, pid,systemId)) {
+ if (nodegroupInfoService.groupNameCheck(id, name, pid, systemId)) {
return R.ok();
}
return R.error(RCode.NODEGROUP_NAME_DUPLICATE);//节点组名称重复错误
@@ -127,4 +128,17 @@ class NodeGroupInfoController {
PageUtils page = nodegroupInfoService.assList(params);
return R.ok(page);
}
+
+
+ /**
+ * 获取当前节点组包含的节点个数
+ *
+ * @return
+ */
+ @GetMapping("/getNodeCount")
+ public R getNodeCount(Long id) {
+ ValidateUtils.is(id).notNull(RCode.NODEGROUP_ID_ISNULL);
+ Integer nodeCount = nodegroupInfoService.getNodeCount(id);
+ return R.ok(nodeCount);
+ }
}
diff --git a/nezha-admin/src/main/java/com/nis/modules/node/dao/NodeGroupInfoDao.java b/nezha-admin/src/main/java/com/nis/modules/node/dao/NodeGroupInfoDao.java
index 3544b403..d2c0a1a5 100644
--- a/nezha-admin/src/main/java/com/nis/modules/node/dao/NodeGroupInfoDao.java
+++ b/nezha-admin/src/main/java/com/nis/modules/node/dao/NodeGroupInfoDao.java
@@ -25,4 +25,7 @@ public interface NodeGroupInfoDao extends BaseMapper<NodeGroupInfoEntity> {
// 节点组详情查询
NodeGroupInfoEntity detail(Long id);
+
+ // 获取当前节点组包含的节点个数
+ Integer getNodeCount(Long id);
}
diff --git a/nezha-admin/src/main/java/com/nis/modules/node/service/NodeGroupInfoService.java b/nezha-admin/src/main/java/com/nis/modules/node/service/NodeGroupInfoService.java
index 74200863..aac293ab 100644
--- a/nezha-admin/src/main/java/com/nis/modules/node/service/NodeGroupInfoService.java
+++ b/nezha-admin/src/main/java/com/nis/modules/node/service/NodeGroupInfoService.java
@@ -35,5 +35,8 @@ public interface NodeGroupInfoService extends IService<NodeGroupInfoEntity> {
PageUtils assList(Map<String, Object> params);
boolean isCurrentSystem(Long [] ids);
+
+ // 根据当前节点组ID获取包含的节点个数
+ Integer getNodeCount(Long id);
}
diff --git a/nezha-admin/src/main/java/com/nis/modules/node/service/impl/NodeGroupInfoServiceImpl.java b/nezha-admin/src/main/java/com/nis/modules/node/service/impl/NodeGroupInfoServiceImpl.java
index cc4cd11a..5d4a34a8 100644
--- a/nezha-admin/src/main/java/com/nis/modules/node/service/impl/NodeGroupInfoServiceImpl.java
+++ b/nezha-admin/src/main/java/com/nis/modules/node/service/impl/NodeGroupInfoServiceImpl.java
@@ -418,4 +418,17 @@ public class NodeGroupInfoServiceImpl extends ServiceImpl<NodeGroupInfoDao, Node
return list == null || list.size() < 1;
}
+
+ /**
+ * 根据节点组ID 获取包含的节点个数
+ * @param id
+ * @return
+ */
+ @Override
+ public Integer getNodeCount(Long id) {
+ // 判断是否为叶子节点组 暂未
+ // 获取当前节点组包含的节点个数
+ Integer nodeCount = nodegroupInfoDao.getNodeCount(id);
+ return nodeCount;
+ }
} \ No newline at end of file
diff --git a/nezha-admin/src/main/resources/mapper/node/NodeGroupInfoDao.xml b/nezha-admin/src/main/resources/mapper/node/NodeGroupInfoDao.xml
index b2223633..b1025719 100644
--- a/nezha-admin/src/main/resources/mapper/node/NodeGroupInfoDao.xml
+++ b/nezha-admin/src/main/resources/mapper/node/NodeGroupInfoDao.xml
@@ -49,4 +49,9 @@
SELECT ni.*,(SELECT NAME FROM nodegroup_info WHERE id = ni.pid) AS pname FROM nodegroup_info ni WHERE ni.id =
#{id} AND ni.del_flag = 0
</select>
+
+ <!-- 查询当前节点组下包含的节点数 -->
+ <select id="getNodeCount" resultType="integer">
+ SELECT COUNT(1) FROM node_group_rel ngr WHERE ngr.group_id = #{id} AND ngr.del_flag = 0
+ </select>
</mapper> \ No newline at end of file
diff --git a/nezha-admin/src/main/resources/templates/js/modules/node/nodeGroup.js b/nezha-admin/src/main/resources/templates/js/modules/node/nodeGroup.js
index 6ea1fd4b..3cfeeca3 100644
--- a/nezha-admin/src/main/resources/templates/js/modules/node/nodeGroup.js
+++ b/nezha-admin/src/main/resources/templates/js/modules/node/nodeGroup.js
@@ -16,7 +16,8 @@ let groupTree = Vue.component('groupTree', {
view: {
addHoverDom: this.addHoverDom,
removeHoverDom: this.removeHoverDom,
- showIcon: false
+ showIcon: false,
+ nameIsHTML: true // 名称支持Html标签转换
},
edit: {
enable: true,
@@ -29,6 +30,9 @@ let groupTree = Vue.component('groupTree', {
idKey: "id",
pIdKey: "pid",
rootPId: 0
+ },
+ key:{
+ title:"nodeTitle" // 因为name 拼接了带有html的字段 所以默认的title 会展示html标签
}
},
check: {
@@ -46,6 +50,24 @@ let groupTree = Vue.component('groupTree', {
methods: {
// 初始化ztree
init() {
+ // 获取当前的集合
+ this.znodes.forEach(item => {
+ this.$set(item,"nodeTitle",item.name);
+ if(item.allowAss == 1){ // 证明是叶子节点
+ var count = "";
+ $.ajax({
+ type: "GET",
+ url: baseURL + "nodegroup/getNodeCount?id="+item.id,
+ async: false,
+ dataType: "json",
+ success: function (r) {
+ count = r.data;
+ }
+ });
+ this.$set(item,"name",item.name + " <font color='gray'>("+ count +")</font>");
+ }
+ });
+ // 生成树结构
var tree = $.fn.zTree.init($("#treeDemo" + this.node.id), this.setting, this.znodes);
tree.expandAll(true);
},
@@ -121,12 +143,12 @@ let groupTree = Vue.component('groupTree', {
},
watch: {
// 监听树节点的变化更新树
- znodes: function (val) {
+ /* znodes: function (val) {
this.init();
- },
+ },*/
},
mounted() {
- this.init();
+ this.init();
}
});
@@ -262,7 +284,7 @@ var vue = new Vue({
} else {
url = "nodegroup/update";
}
- vue.$set(vm.nodeGroup, "pid", vue.nodeGroup.parentGroup.id);
+ vue.$set(vue.nodeGroup, "pid", vue.nodeGroup.parentGroup.id);
vue.$set(vue.nodeGroup, "systemId", vue.system == null ? null : vue.system.id);
if (vue.nodeGroup.id) {
vue.nodeGroup.pid = vue.nodeGroup.pids = vue.nodeGroup.systemId = null;
diff --git a/nezha-admin/src/main/resources/templates/modules/node/nodeGroup.html b/nezha-admin/src/main/resources/templates/modules/node/nodeGroup.html
index c2686fa0..6b3cd81e 100644
--- a/nezha-admin/src/main/resources/templates/modules/node/nodeGroup.html
+++ b/nezha-admin/src/main/resources/templates/modules/node/nodeGroup.html
@@ -98,64 +98,12 @@
<div class="form-group">
<a class="" href="#" style="font-size: 16px;"><@spring.message 'node.list'/></a>
<!-- 当前节点组 -->
- <a v-if="nodeGroup != null" class="" href="#" style="font-size: 16px;"> {{nodeGroup.name}}</a>
+ <a v-if="nodeGroup != null" class="" href="#" style="font-size: 16px;"> {{nodeGroup.nodeTitle}}</a>
<!-- 分配节点 -->
<a v-if="nodeGroup != null && nodeGroup.allowAss == 1" class="btn btn-primary" @click="" style="float: right">
<i class="fa"></i>&nbsp;<@spring.message 'nodegroup.assignNode'/></a>
</div>
- <!--<div v-show="showList">
- <div class="grid-btn">
-
- &lt;!&ndash; 搜索条件 &ndash;&gt;
- <div class="form-group col-sm-2">
- <input type="text" class="form-control"
- v-model="q.ip" @keyup.enter="query"
- placeholder="<@spring.message 'node.ipAddress'/>">
- </div>
-
- <div class="form-group col-sm-2">
- <multiselect :options="nodeTypes" label="value" :show-labels="false"
- v-model="q.type"
- placeholder="<@spring.message 'node.type'/>"></multiselect>
- </div>
-
- &lt;!&ndash; 功能按钮 &ndash;&gt;
- <a class="btn btn-default" @click="advancedSearch">
- <i class="fa"
- :class="{'fa-angle-double-down': !isAdvancedSearch, 'fa-angle-double-up': isAdvancedSearch}"></i></a>
- <a class="btn btn-default" @click="query" title="<@spring.message 'common.search'/>">
- <i class="fa fa-search"></i></a>
- <a class="btn btn-default" @click="reset" title="<@spring.message 'common.reset'/>">
- <i class="fa fa-refresh"></i></a>
-
- &lt;!&ndash; 搜索条件 &ndash;&gt;
- <div class="grid-btn grid-btn_advanced" v-show="isAdvancedSearch">
- <div class="form-group col-sm-2">
- <input type="text" class="form-control"
- v-model="q.name" @keyup.enter="query"
- placeholder="<@spring.message 'common.name'/>">
- </div>
-
- <div class="form-group col-sm-2">
- <multiselect :options="queryTags" label="value" :show-labels="false"
- v-model="q.tag"
- placeholder="<@spring.message 'node.tag'/>"></multiselect>
- </div>
-
- <div class="form-group col-sm-2">
- <multiselect :options="nodeStates" label="value" :show-labels="false"
- v-model="q.state"
- placeholder="<@spring.message 'common.onLineState'/>"></multiselect>
- </div>
- </div>
- </div>
-
- &lt;!&ndash; 列表数据 / 分页 &ndash;&gt;
- <table id="jqGrid"></table>
- <div id="jqGridPager"></div>
-
- </div>-->
<!-- 列表 查询 -->
<div v-show="showList">
<div class="tools">
diff --git a/nezha-admin/src/main/resources/templates/modules/node/nodeInfo.html b/nezha-admin/src/main/resources/templates/modules/node/nodeInfo.html
index 14ad02b2..a423c277 100644
--- a/nezha-admin/src/main/resources/templates/modules/node/nodeInfo.html
+++ b/nezha-admin/src/main/resources/templates/modules/node/nodeInfo.html
@@ -152,87 +152,97 @@
</div>
</div>
- <!-- U位大小 -->
+ <!-- 在线状态 -->
<div class="form-group">
- <div class="col-sm-2 control-label"><@spring.message 'node.uSize'/>(U)</div>
+ <div class="col-sm-2 control-label"><@spring.message 'common.onLineState'/></div>
<div class="col-sm-9">
- <input type="text" class="form-control"
- :class="{'form-control--error': $v.nodeInfo.uSize.$dirty && !$v.nodeInfo.uSize.minValue || !$v.nodeInfo.uSize.integer}"
- v-model.trim="$v.nodeInfo.uSize.$model"
- placeholder="<@spring.message 'node.uSize'/>(U)"/>
- <span class="required-symbol"
- v-if="$v.nodeInfo.uSize.$dirty && !$v.nodeInfo.uSize.sizeRequired">*</span>
- <div class="form-control_error-msg"
- v-if="$v.nodeInfo.uSize.$dirty && !$v.nodeInfo.uSize.minValue || !$v.nodeInfo.uSize.integer">
- <@spring.message 'validate.common.positiveInteger'/>
- </div>
- <div class="form-control_error-msg"
- v-if="$v.nodeInfo.uSize.$dirty && !$v.nodeInfo.uSize.sizeRequired">
+ <multiselect :options="nodeStates" label="value" :disabled="disabledFlag" :show-labels="false"
+ :class="{'form-control--error': $v.nodeInfo.state.$dirty && !$v.nodeInfo.state.required}"
+ v-model="$v.nodeInfo.state.$model"
+ placeholder="<@spring.message 'common.pleaseSelect'/>"></multiselect>
+ <span class="required-symbol">*</span>
+ <div class="form-control_error-msg" v-if="$v.nodeInfo.state.$dirty && !$v.nodeInfo.state.required">
<@spring.message 'validate.common.required'/>
</div>
</div>
</div>
- <!-- 机房名称 -->
+ <!-- 位置信息 -->
<div class="form-group">
- <div class="col-sm-2 control-label"><@spring.message 'node.room.name'/></div>
+ <div class="col-sm-2 control-label"><@spring.message 'node.position.information'/>:</div>
<div class="col-sm-9">
- <multiselect :options="rooms" label="roomName" :disabled="disabledFlag" :show-labels="false"
- @close="getCabinets($event),$v.nodeInfo.cabinetId.$touch(),$v.nodeInfo.uSize.$touch()"
- v-model="nodeInfo.nodeRoom" @open="checkUsize()"
- placeholder="<@spring.message 'common.pleaseSelect'/>"></multiselect>
- </div>
- </div>
- <!-- 机柜名称 -->
- <div class="form-group">
- <div class="col-sm-2 control-label"><@spring.message 'node.cabinet.name'/></div>
- <div class="col-sm-9">
- <multiselect :options="cabinets" label="name" :disabled="disabledFlag" :show-labels="false"
- @close="getStarts($event),$v.nodeInfo.cabinetStart.$touch(),$v.nodeInfo.uSize.$touch()"
- v-model="nodeInfo.cabinetId" @open="checkNodeRoom()"
- placeholder="<@spring.message 'common.pleaseSelect'/>"></multiselect>
- <span class="required-symbol"
- v-if="$v.nodeInfo.cabinetId.$dirty && !$v.nodeInfo.cabinetId.cabRequired">*</span>
- <div class="form-control_error-msg"
- v-if="$v.nodeInfo.cabinetId.$dirty && !$v.nodeInfo.cabinetId.cabRequired">
- <@spring.message 'validate.common.required'/>
- </div>
- </div>
- </div>
+ <div class="add-box2">
- <!-- 机柜起始位置 -->
- <div class="form-group">
- <div class="col-sm-2 control-label"><@spring.message 'node.cabinetStart'/></div>
- <div class="col-sm-9">
- <multiselect :options="starts" :show-labels="false" :disabled="disabledFlag"
- v-model="nodeInfo.cabinetStart" @open="checkCabStart()"
- @blur="$v.nodeInfo.uSize.$touch()"
- placeholder="<@spring.message 'common.pleaseSelect'/>"></multiselect>
- <span class="required-symbol"
- v-if="$v.nodeInfo.cabinetId.$dirty && !$v.nodeInfo.cabinetId.cabRequired || !$v.nodeInfo.cabinetStart.startRequired">*</span>
- <div class="form-control_error-msg"
- v-if="$v.nodeInfo.cabinetId.$dirty && !$v.nodeInfo.cabinetId.cabRequired || !$v.nodeInfo.cabinetStart.startRequired">
- <@spring.message 'validate.common.required'/>
- </div>
- </div>
- </div>
+ <div class="form-group">
+ <div class="col-sm-3 control-label"><@spring.message 'node.uSize'/>(U)</div>
+ <div class="col-sm-8">
+ <input type="text" class="form-control"
+ :class="{'form-control--error': $v.nodeInfo.uSize.$dirty && !$v.nodeInfo.uSize.minValue || !$v.nodeInfo.uSize.integer}"
+ v-model.trim="$v.nodeInfo.uSize.$model"
+ placeholder="<@spring.message 'node.uSize'/>(U)"/>
+ <span class=""
+ v-if="$v.nodeInfo.uSize.$dirty && !$v.nodeInfo.uSize.sizeRequired">*</span>
+ <div class="form-control_error-msg"
+ v-if="$v.nodeInfo.uSize.$dirty && !$v.nodeInfo.uSize.minValue || !$v.nodeInfo.uSize.integer">
+ <@spring.message 'validate.common.positiveInteger'/>
+ </div>
+ <div class="form-control_error-msg"
+ v-if="$v.nodeInfo.uSize.$dirty && !$v.nodeInfo.uSize.sizeRequired">
+ <@spring.message 'validate.common.required'/>
+ </div>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <div class="col-sm-3 control-label"><@spring.message 'node.room.name'/></div>
+ <div class="col-sm-8">
+ <multiselect :options="rooms" label="roomName" :disabled="disabledFlag"
+ :show-labels="false"
+ @close="getCabinets($event),$v.nodeInfo.cabinetId.$touch(),$v.nodeInfo.uSize.$touch()"
+ v-model="nodeInfo.nodeRoom" @open="checkUsize()"
+ placeholder="<@spring.message 'common.pleaseSelect'/>"></multiselect>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <div class="col-sm-3 control-label"><@spring.message 'node.cabinet.name'/></div>
+ <div class="col-sm-8">
+ <multiselect :options="cabinets" label="name" :disabled="disabledFlag"
+ :show-labels="false"
+ @close="getStarts($event),$v.nodeInfo.cabinetStart.$touch(),$v.nodeInfo.uSize.$touch()"
+ v-model="nodeInfo.cabinetId" @open="checkNodeRoom()"
+ placeholder="<@spring.message 'common.pleaseSelect'/>"></multiselect>
+ <span class="add-box2-required-symbol"
+ v-if="nodeInfo.nodeRoom != null">*</span>
+ <div class="form-control_error-msg"
+ v-if="$v.nodeInfo.cabinetId.$dirty && !$v.nodeInfo.cabinetId.cabRequired">
+ <@spring.message 'validate.common.required'/>
+ </div>
+ </div>
+ </div>
+
+ <div class="form-group">
+ <div class="col-sm-3 control-label"><@spring.message 'node.cabinetStart'/></div>
+ <div class="col-sm-8" style="position:relative;">
+ <multiselect :options="starts" :show-labels="false" :disabled="disabledFlag"
+ v-model="nodeInfo.cabinetStart" @open="checkCabStart()"
+ @blur="$v.nodeInfo.uSize.$touch()"
+ placeholder="<@spring.message 'common.pleaseSelect'/>"></multiselect>
+ <span class="add-box2-required-symbol"
+ v-if="nodeInfo.nodeRoom != null">*</span>
+ <div class="form-control_error-msg"
+ v-if="$v.nodeInfo.cabinetId.$dirty && !$v.nodeInfo.cabinetId.cabRequired || !$v.nodeInfo.cabinetStart.startRequired">
+ <@spring.message 'validate.common.required'/>
+ </div>
+ </div>
+ </div>
- <!-- 在线状态 -->
- <div class="form-group">
- <div class="col-sm-2 control-label"><@spring.message 'common.onLineState'/></div>
- <div class="col-sm-9">
- <multiselect :options="nodeStates" label="value" :disabled="disabledFlag" :show-labels="false"
- :class="{'form-control--error': $v.nodeInfo.state.$dirty && !$v.nodeInfo.state.required}"
- v-model="$v.nodeInfo.state.$model"
- placeholder="<@spring.message 'common.pleaseSelect'/>"></multiselect>
- <span class="required-symbol">*</span>
- <div class="form-control_error-msg" v-if="$v.nodeInfo.state.$dirty && !$v.nodeInfo.state.required">
- <@spring.message 'validate.common.required'/>
</div>
</div>
</div>
+
<!-- snmp端口 -->
<div class="form-group" v-show="nodeInfo.type != null && nodeInfo.type.code == 2">
<div class="col-sm-2 control-label"><@spring.message 'node.snmpPort'/></div>
@@ -303,5 +313,31 @@
</div>
<!--<script src="${request.contextPath}/statics/js/modules/node/nodeInfo.js"></script>-->
<#include "/js/modules/node/nodeInfo.js">
+
+<style>
+ .add-box2 {
+ font-size: 13px;
+ border: 1px solid #cccccc;
+ width: 90%;
+ border-radius: 4px;
+ padding: 15px 0 0 0;
+ }
+
+ .add-box2 .form-group {
+ margin-bottom: 15px;
+ }
+
+
+ /*添加框中必填提示*的style*/
+ .add-box2-required-symbol{
+ position: absolute;
+ display: inline-block;
+ top: 7px;
+ left: 205px;
+ color: #f57f6c;
+ font-size: 20px;
+ }
+
+</style>
</body>
</html> \ No newline at end of file
diff --git a/nezha-common/src/main/java/com/nis/common/utils/RCode.java b/nezha-common/src/main/java/com/nis/common/utils/RCode.java
index 03488a90..a6191870 100644
--- a/nezha-common/src/main/java/com/nis/common/utils/RCode.java
+++ b/nezha-common/src/main/java/com/nis/common/utils/RCode.java
@@ -74,6 +74,7 @@ public enum RCode {
NODEGROUP_PARENTIDS_NOT_MODIFIED(202012, "nodegroup_parentids_not_modified"), // 节点组pidS不许修改
NODEGROUP_PARENT_SYSTEM_NOT_EQUALS(202013, "nodegroup_parent_system_not_equals"), // 父级级节点组系统ID不同
NODEGROUP_NOT_EXISTS_THIS_SYSTEM(202014, "nodegroup_not_exists_this_system"), // 节点组不在这个业务系统中
+ NODEGROUP_ID_ISNULL(202015, "nodegroup_id_isnull"), // 节点组id不能为Null
NODEROOM_NAME_DUPLICATE(203001, "roomname_duplicate_error"), // 机房名称重复
NODEROOM_ROW_OCCUPIED(203002,"row_occupied_error"), // 机房行号已被占用