# 部门编码映射表 ## 概述 本文档记录了MySQL `sys_dept`表与SQL Server `dictionary`表中订单编码的映射关系。 **更新日期**:2025-10-19 **版本**:v1.0 ## 字段映射 ### MySQL sys_dept表 | 字段名 | 类型 | 说明 | 示例 | |-------|------|------|------| | dept_id | BIGINT | 部门ID(主键) | 200 | | dept_name | VARCHAR(30) | 部门名称 | 中山分公司 | | parent_id | BIGINT | 父部门ID | 100 | | service_order_class | VARCHAR(20) | 服务单编码 | JA | | dispatch_order_class | VARCHAR(20) | 调度单编码 | JA01 | ### SQL Server dictionary表 | 字段名 | 类型 | 说明 | 示例 | |-------|------|------|------| | vtext | VARCHAR(50) | 编码文本 | 中山服务单 | | vOrder2 | VARCHAR(20) | 编码值 | JA | | vtitle | VARCHAR(50) | 编码标题 | OrderClass | | vType | INT | 编码类型 | 1-服务单,2-调度单 | ## 编码类型说明 ### vType = 1(服务单编码) 对应MySQL表的`service_order_class`字段 **查询SQL**: ```sql SELECT vtext, vOrder2 FROM dictionary WHERE vtitle = 'OrderClass' AND vType = 1 ORDER BY vOrder2; ``` ### vType = 2(调度单编码) 对应MySQL表的`dispatch_order_class`字段 **查询SQL**: ```sql SELECT vtext, vOrder2 FROM dictionary WHERE vtitle = 'OrderClass' AND vType = 2 ORDER BY vOrder2; ``` ## 编码示例数据 ### 服务单编码示例(vType=1) | vtext | vOrder2 | 说明 | |-------|---------|------| | 中山服务单 | JA | 中山地区服务单 | | 广州服务单 | GZ | 广州地区服务单 | | 湛江服务单 | ZJ | 湛江地区服务单 | | 珠海服务单 | ZH | 珠海地区服务单 | | 佛山服务单 | FS | 佛山地区服务单 | ### 调度单编码示例(vType=2) | vtext | vOrder2 | 说明 | |-------|---------|------| | 中山调度单 | JA01 | 中山地区调度单 | | 广州调度单 | GZ01 | 广州地区调度单 | | 湛江调度单 | ZJ01 | 湛江地区调度单 | | 珠海调度单 | ZH01 | 珠海地区调度单 | | 佛山调度单 | FS01 | 佛山地区调度单 | ## 地名匹配规则 ### 匹配算法 ``` 输入:分公司名称(如:湛江--护士) ↓ 步骤1:提取城市名(湛江) ↓ 步骤2:在vtext中查找包含该城市名的记录 ↓ 步骤3:返回对应的vOrder2值 ``` ### 匹配示例 | 分公司名称 | 提取城市名 | 匹配vtext | 服务单编码 | 调度单编码 | |-----------|-----------|----------|-----------|-----------| | 中山--护士 | 中山 | 中山服务单/中山调度单 | JA | JA01 | | 广州--车队 | 广州 | 广州服务单/广州调度单 | GZ | GZ01 | | 湛江--客服 | 湛江 | 湛江服务单/湛江调度单 | ZJ | ZJ01 | | 珠海--办公室 | 珠海 | 珠海服务单/珠海调度单 | ZH | ZH01 | ## 编码使用场景 ### 1. 部门同步时自动填充 在部门同步过程中,系统会自动: 1. 从SQL Server查询最新的编码列表 2. 根据分公司名称提取城市名 3. 匹配对应的编码 4. 填充到`service_order_class`和`dispatch_order_class`字段 ### 2. 旧系统数据同步 在向旧系统同步数据时,可以使用这些编码: ```java // 查询部门信息 SysDept dept = sysDeptMapper.selectDeptById(deptId); // 获取编码 String serviceOrderClass = dept.getServiceOrderClass(); // 如:JA String dispatchOrderClass = dept.getDispatchOrderClass(); // 如:JA01 // 传递给旧系统 params.put("orderClass", serviceOrderClass); params.put("dispatchClass", dispatchOrderClass); ``` ### 3. 前端展示 在前端部门管理页面,可以展示这些编码: ```javascript { deptId: 200, deptName: '中山分公司', serviceOrderClass: 'JA', dispatchOrderClass: 'JA01' } ``` ## 数据维护 ### 添加新编码 在SQL Server的dictionary表中添加: ```sql -- 添加服务单编码 INSERT INTO dictionary (vtitle, vtext, vOrder2, vType) VALUES ('OrderClass', '深圳服务单', 'SZ', 1); -- 添加调度单编码 INSERT INTO dictionary (vtitle, vtext, vOrder2, vType) VALUES ('OrderClass', '深圳调度单', 'SZ01', 2); ``` ### 修改编码 ```sql -- 修改服务单编码 UPDATE dictionary SET vOrder2 = 'NEW_CODE' WHERE vtitle = 'OrderClass' AND vtext = '中山服务单' AND vType = 1; ``` ### 删除编码 ```sql -- 删除编码 DELETE FROM dictionary WHERE vtitle = 'OrderClass' AND vtext = '中山服务单' AND vType = 1; ``` ## 数据验证 ### 验证编码完整性 检查是否所有分公司都有对应的编码: ```sql -- MySQL查询 SELECT d.dept_id, d.dept_name, d.service_order_class, d.dispatch_order_class, CASE WHEN d.service_order_class IS NULL THEN '缺少服务单编码' WHEN d.dispatch_order_class IS NULL THEN '缺少调度单编码' ELSE '完整' END AS status FROM sys_dept d WHERE d.parent_id = 100 AND d.dept_name LIKE '%分公司' ORDER BY d.dept_name; ``` ### 验证编码存在性 检查MySQL中的编码是否在SQL Server中存在: ```sql -- 在SQL Server中验证 SELECT d.dept_name, d.service_order_class, d.dispatch_order_class, (SELECT COUNT(*) FROM dictionary WHERE vtitle = 'OrderClass' AND vOrder2 = d.service_order_class AND vType = 1) AS service_exists, (SELECT COUNT(*) FROM dictionary WHERE vtitle = 'OrderClass' AND vOrder2 = d.dispatch_order_class AND vType = 2) AS dispatch_exists FROM mysql_sys_dept d WHERE d.parent_id = 100; ``` ## 编码规范 ### 命名规范 1. **vtext命名**: - 格式:`{城市名}服务单` 或 `{城市名}调度单` - 示例:中山服务单、广州调度单 2. **vOrder2命名**: - 服务单:通常使用城市拼音首字母(大写) - 调度单:通常在服务单编码后加01 - 示例:JA(中山)、JA01(中山调度单) ### 编码长度 - `vOrder2`字段最大长度:20个字符 - 建议使用2-10个字符的编码 - 保持简洁易识别 ## 常见问题 ### Q1: 如何查看当前所有可用的编码? **SQL Server查询**: ```sql SELECT vtext, vOrder2, vType FROM dictionary WHERE vtitle = 'OrderClass' ORDER BY vType, vOrder2; ``` ### Q2: 新增分公司后编码为空怎么办? 1. 检查SQL Server中是否有对应城市的编码 2. 如果没有,需要在dictionary表中添加 3. 添加后重新执行部门同步 ### Q3: 如何手动更新编码? ```sql UPDATE sys_dept SET service_order_class = 'JA', dispatch_order_class = 'JA01' WHERE dept_name = '中山分公司'; ``` ### Q4: 编码可以重复吗? - 理论上可以,但不建议 - 建议每个分公司使用唯一的编码 - 便于在旧系统中区分不同分公司 ## 扩展字段说明 ### service_order_class(服务单编码) - **用途**:标识该分公司的服务单类型 - **来源**:SQL Server dictionary表(vType=1) - **格式**:通常2-5个字符 - **示例**:JA, GZ, ZJ ### dispatch_order_class(调度单编码) - **用途**:标识该分公司的调度单类型 - **来源**:SQL Server dictionary表(vType=2) - **格式**:通常3-6个字符 - **示例**:JA01, GZ01, ZJ01 ## 相关文档 - [部门编码同步功能说明](./部门编码同步功能说明.md) - [部门编码同步-快速开始](./部门编码同步-快速开始.md) - [部门同步功能说明](./部门同步功能说明.md) --- **维护人**:系统管理员 **更新频率**:按需更新 **最后更新**:2025-10-19