“编译修改”
This commit is contained in:
1 parent
e79bf5a26c
commit
2f2e303781
105 files changed
+26461
No files matched your search
@@ -0,0 +1,58 @@
|
||||
-- ==============================================
|
||||
-- 出国申请附件表设计
|
||||
-- 表名: rs_overseas_application_attachment
|
||||
-- 说明: 用于管理出国申请的附件信息(支持标题和内容说明)
|
||||
-- 创建时间: 2025-10-10
|
||||
-- ==============================================
|
||||
|
||||
-- 创建附件表
|
||||
DROP TABLE IF EXISTS `rs_overseas_application_attachment`;
|
||||
CREATE TABLE `rs_overseas_application_attachment` (
|
||||
`attachment_id` bigint(20) NOT NULL COMMENT '附件ID(主键)',
|
||||
`application_id` bigint(20) NOT NULL COMMENT '出国申请ID(关联rs_overseas_application)',
|
||||
|
||||
-- 附件基本信息
|
||||
`attachment_title` varchar(200) NOT NULL COMMENT '附件标题',
|
||||
`attachment_content` text COMMENT '附件内容说明',
|
||||
|
||||
-- 文件信息
|
||||
`file_name` varchar(200) NOT NULL COMMENT '文件名称',
|
||||
`file_original_name` varchar(200) NOT NULL COMMENT '文件原始名称',
|
||||
`file_path` varchar(500) NOT NULL COMMENT '文件存储路径/OSS URL',
|
||||
`file_size` bigint(20) DEFAULT NULL COMMENT '文件大小(字节)',
|
||||
`file_type` varchar(50) DEFAULT NULL COMMENT '文件类型(如pdf、jpg、png、doc等)',
|
||||
`mime_type` varchar(100) DEFAULT NULL COMMENT 'MIME类型',
|
||||
|
||||
-- 上传信息
|
||||
`upload_time` datetime DEFAULT NULL COMMENT '上传时间',
|
||||
`upload_user_id` bigint(20) DEFAULT NULL COMMENT '上传人ID',
|
||||
`upload_user_name` varchar(50) DEFAULT NULL COMMENT '上传人姓名',
|
||||
|
||||
-- 系统字段
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`deleted` char(1) DEFAULT '0' COMMENT '删除标志(0-存在,1-删除)',
|
||||
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
|
||||
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
|
||||
PRIMARY KEY (`attachment_id`),
|
||||
KEY `idx_application_id` (`application_id`) COMMENT '出国申请ID索引',
|
||||
KEY `idx_tenant_deleted` (`tenant_id`, `deleted`) COMMENT '租户和删除标志联合索引',
|
||||
KEY `idx_upload_time` (`upload_time`) COMMENT '上传时间索引'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='出国申请附件表';
|
||||
|
||||
-- 添加注释说明
|
||||
ALTER TABLE `rs_overseas_application_attachment` COMMENT = '出国申请附件表 - 支持附件标题和内容说明';
|
||||
|
||||
-- ==============================================
|
||||
-- 使用说明
|
||||
-- ==============================================
|
||||
-- 1. attachment_title: 必填,用于在列表中显示的附件标题
|
||||
-- 2. attachment_content: 可选,用于详细描述附件内容
|
||||
-- 3. 支持多种文件格式:PDF、Word、Excel、图片等
|
||||
-- 4. file_path 存储OSS URL或相对路径
|
||||
-- 5. 逻辑删除:使用deleted字段,不物理删除数据
|
||||
-- ==============================================
|
||||
|
||||
@@ -0,0 +1,214 @@
|
||||
-- ======================================
|
||||
-- 出国行程变更申请表
|
||||
-- 表名: rs_overseas_itinerary_change
|
||||
-- 说明: 存储已通过的出国申请的行程变更申请信息
|
||||
-- 重要说明: 关联的是出国记录表(rs_overseas_record),不是出国申请表
|
||||
-- 创建时间: 2025-10-13
|
||||
-- 更新时间: 2025-10-13 - 修改关联逻辑为出国记录表
|
||||
-- ======================================
|
||||
|
||||
DROP TABLE IF EXISTS `rs_overseas_itinerary_change`;
|
||||
|
||||
CREATE TABLE `rs_overseas_itinerary_change` (
|
||||
`change_id` bigint(20) NOT NULL COMMENT '变更ID(主键,雪花ID)',
|
||||
`record_id` bigint(20) NOT NULL COMMENT '关联出国记录ID(关联rs_overseas_record表)',
|
||||
`application_id` bigint(20) DEFAULT NULL COMMENT '原出国申请ID(关联rs_overseas_application表,来自记录表冗余)',
|
||||
`applicant_id` bigint(20) NOT NULL COMMENT '申请人ID(用户ID)',
|
||||
`applicant_name` varchar(100) NOT NULL COMMENT '申请人姓名',
|
||||
`department` varchar(200) DEFAULT NULL COMMENT '部门',
|
||||
|
||||
-- 原记录信息(从出国记录表冗余存储,便于查询和历史记录)
|
||||
`original_destination` varchar(100) DEFAULT NULL COMMENT '原目的地国家',
|
||||
`original_destination_city` varchar(100) DEFAULT NULL COMMENT '原目的地城市',
|
||||
`original_exit_reason` varchar(100) DEFAULT NULL COMMENT '原出境事由',
|
||||
`original_start_date` date DEFAULT NULL COMMENT '原出发日期',
|
||||
`original_end_date` date DEFAULT NULL COMMENT '原返回日期',
|
||||
`original_duration` int(11) DEFAULT NULL COMMENT '原出国天数',
|
||||
`original_itinerary` text COMMENT '原行程安排',
|
||||
`original_accommodation_plan` text COMMENT '原住宿安排',
|
||||
`original_transportation_plan` text COMMENT '原交通安排',
|
||||
|
||||
-- 变更信息
|
||||
`change_type` varchar(200) NOT NULL COMMENT '变更类型(目的地变更,时间变更,行程变更,多个用逗号分隔)',
|
||||
`new_destination` varchar(100) DEFAULT NULL COMMENT '新目的地国家',
|
||||
`new_destination_city` varchar(100) DEFAULT NULL COMMENT '新目的地城市',
|
||||
`new_exit_reason` varchar(100) DEFAULT NULL COMMENT '新出境事由',
|
||||
`new_start_date` date DEFAULT NULL COMMENT '新出发日期',
|
||||
`new_end_date` date DEFAULT NULL COMMENT '新返回日期',
|
||||
`new_duration` int(11) DEFAULT NULL COMMENT '新出国天数',
|
||||
`new_itinerary` text COMMENT '新行程安排',
|
||||
`new_accommodation_plan` text COMMENT '新住宿安排',
|
||||
`new_transportation_plan` text COMMENT '新交通安排',
|
||||
|
||||
-- 变更原因和备注
|
||||
`change_reason` varchar(500) NOT NULL COMMENT '变更原因(必填)',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
|
||||
-- 审批信息
|
||||
`status` char(1) NOT NULL DEFAULT '0' COMMENT '变更状态(0=待审核,1=已通过,2=已拒绝,3=已撤回)',
|
||||
`approval_opinion` varchar(500) DEFAULT NULL COMMENT '审批意见',
|
||||
`approval_time` datetime DEFAULT NULL COMMENT '审批时间',
|
||||
`approver_id` bigint(20) DEFAULT NULL COMMENT '审批人ID',
|
||||
`approver_name` varchar(100) DEFAULT NULL COMMENT '审批人姓名',
|
||||
|
||||
-- 多租户字段
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户ID',
|
||||
|
||||
-- 标准基础字段
|
||||
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
|
||||
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除标志(0=未删除,1=已删除)',
|
||||
|
||||
PRIMARY KEY (`change_id`),
|
||||
KEY `idx_record_id` (`record_id`) COMMENT '出国记录ID索引',
|
||||
KEY `idx_application_id` (`application_id`) COMMENT '原申请ID索引',
|
||||
KEY `idx_applicant_id` (`applicant_id`) COMMENT '申请人ID索引',
|
||||
KEY `idx_status` (`status`) COMMENT '状态索引',
|
||||
KEY `idx_tenant_id` (`tenant_id`) COMMENT '租户ID索引',
|
||||
KEY `idx_create_time` (`create_time`) COMMENT '创建时间索引'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='出国行程变更申请表';
|
||||
|
||||
-- ======================================
|
||||
-- 字典数据 - 变更状态
|
||||
-- ======================================
|
||||
|
||||
-- 删除旧字典(如果存在)
|
||||
DELETE FROM sys_dict_type WHERE dict_type = 'rs_itinerary_change_status';
|
||||
DELETE FROM sys_dict_data WHERE dict_type = 'rs_itinerary_change_status';
|
||||
|
||||
-- 插入字典类型
|
||||
INSERT INTO sys_dict_type VALUES (
|
||||
NULL, -- dict_id (自增)
|
||||
'000000', -- tenant_id
|
||||
'行程变更状态', -- dict_name
|
||||
'rs_itinerary_change_status', -- dict_type
|
||||
1, -- status
|
||||
NULL, -- create_dept
|
||||
0, -- create_by
|
||||
SYSDATE(), -- create_time
|
||||
NULL, -- update_by
|
||||
NULL, -- update_time
|
||||
'出国行程变更申请状态字典' -- remark
|
||||
);
|
||||
|
||||
-- 插入字典数据
|
||||
INSERT INTO sys_dict_data VALUES (NULL, '000000', 0, '待审核', '0', 'rs_itinerary_change_status', '', 'primary', 'N', 1, NULL, 0, SYSDATE(), NULL, NULL, '待审核状态');
|
||||
INSERT INTO sys_dict_data VALUES (NULL, '000000', 1, '已通过', '1', 'rs_itinerary_change_status', '', 'success', 'N', 1, NULL, 0, SYSDATE(), NULL, NULL, '已通过状态');
|
||||
INSERT INTO sys_dict_data VALUES (NULL, '000000', 2, '已拒绝', '2', 'rs_itinerary_change_status', '', 'danger', 'N', 1, NULL, 0, SYSDATE(), NULL, NULL, '已拒绝状态');
|
||||
INSERT INTO sys_dict_data VALUES (NULL, '000000', 3, '已撤回', '3', 'rs_itinerary_change_status', '', 'info', 'N', 1, NULL, 0, SYSDATE(), NULL, NULL, '已撤回状态');
|
||||
|
||||
-- ======================================
|
||||
-- 字典数据 - 变更类型
|
||||
-- ======================================
|
||||
|
||||
DELETE FROM sys_dict_type WHERE dict_type = 'rs_itinerary_change_type';
|
||||
DELETE FROM sys_dict_data WHERE dict_type = 'rs_itinerary_change_type';
|
||||
|
||||
INSERT INTO sys_dict_type VALUES (
|
||||
NULL,
|
||||
'000000',
|
||||
'行程变更类型',
|
||||
'rs_itinerary_change_type',
|
||||
1,
|
||||
NULL,
|
||||
0,
|
||||
SYSDATE(),
|
||||
NULL,
|
||||
NULL,
|
||||
'出国行程变更类型字典'
|
||||
);
|
||||
|
||||
INSERT INTO sys_dict_data VALUES (NULL, '000000', 0, '目的地变更', 'destination_change', 'rs_itinerary_change_type', '', 'primary', 'N', 1, NULL, 0, SYSDATE(), NULL, NULL, '目的地变更');
|
||||
INSERT INTO sys_dict_data VALUES (NULL, '000000', 1, '时间变更', 'time_change', 'rs_itinerary_change_type', '', 'warning', 'N', 1, NULL, 0, SYSDATE(), NULL, NULL, '时间变更');
|
||||
INSERT INTO sys_dict_data VALUES (NULL, '000000', 2, '行程变更', 'itinerary_change', 'rs_itinerary_change_type', '', 'info', 'N', 1, NULL, 0, SYSDATE(), NULL, NULL, '行程变更');
|
||||
INSERT INTO sys_dict_data VALUES (NULL, '000000', 3, '交通方式变更', 'transportation_change', 'rs_itinerary_change_type', '', 'success', 'N', 1, NULL, 0, SYSDATE(), NULL, NULL, '交通方式变更');
|
||||
INSERT INTO sys_dict_data VALUES (NULL, '000000', 4, '住宿变更', 'accommodation_change', 'rs_itinerary_change_type', '', 'default', 'N', 1, NULL, 0, SYSDATE(), NULL, NULL, '住宿变更');
|
||||
|
||||
-- ======================================
|
||||
-- 字段说明
|
||||
-- ======================================
|
||||
|
||||
/*
|
||||
核心业务字段:
|
||||
1. change_id: 变更申请ID(雪花ID,主键)
|
||||
2. record_id: 关联的出国记录ID(主要关联字段)
|
||||
3. application_id: 原出国申请ID(冗余字段,来自记录表)
|
||||
4. applicant_id, applicant_name: 申请人信息
|
||||
5. original_*: 原记录信息(从出国记录表冗余存储)
|
||||
6. new_*: 变更后的新信息
|
||||
7. change_type: 变更类型(支持多种变更类型组合)
|
||||
8. change_reason: 变更原因(必填)
|
||||
9. status: 变更状态(0=待审核,1=已通过,2=已拒绝,3=已撤回)
|
||||
|
||||
数据关联说明:
|
||||
- 通过record_id关联rs_overseas_record表(出国记录)
|
||||
- 变更申请基于已通过的出国申请生成的出国记录
|
||||
- 选择原出国申请时,实际选择的是出国记录选项卡中的记录
|
||||
|
||||
审批字段:
|
||||
- approval_opinion: 审批意见
|
||||
- approval_time: 审批时间
|
||||
- approver_id, approver_name: 审批人信息
|
||||
|
||||
标准字段:
|
||||
- tenant_id: 多租户支持
|
||||
- create_dept: 创建部门
|
||||
- create_by, create_time: 创建信息
|
||||
- update_by, update_time: 更新信息
|
||||
- deleted: 逻辑删除标志
|
||||
|
||||
索引说明:
|
||||
- PRIMARY KEY: change_id(主键索引)
|
||||
- idx_record_id: 用于快速查询某个出国记录的所有变更记录
|
||||
- idx_application_id: 用于快速查询某个出国申请的所有变更记录
|
||||
- idx_applicant_id: 用于快速查询某个用户的所有变更申请
|
||||
- idx_status: 用于按状态筛选(待审核、已通过等)
|
||||
- idx_tenant_id: 多租户数据隔离
|
||||
- idx_create_time: 按创建时间排序和筛选
|
||||
*/
|
||||
|
||||
-- ======================================
|
||||
-- 常用查询示例
|
||||
-- ======================================
|
||||
|
||||
-- 1. 查询某个用户的所有变更申请
|
||||
-- SELECT * FROM rs_overseas_itinerary_change
|
||||
-- WHERE applicant_id = ? AND deleted = 0
|
||||
-- ORDER BY create_time DESC;
|
||||
|
||||
-- 2. 查询某个出国记录的所有变更记录
|
||||
-- SELECT * FROM rs_overseas_itinerary_change
|
||||
-- WHERE record_id = ? AND deleted = 0
|
||||
-- ORDER BY create_time DESC;
|
||||
|
||||
-- 3. 查询待审核的变更申请
|
||||
-- SELECT * FROM rs_overseas_itinerary_change
|
||||
-- WHERE status = '0' AND deleted = 0
|
||||
-- ORDER BY create_time ASC;
|
||||
|
||||
-- 4. 查询已通过的变更申请
|
||||
-- SELECT * FROM rs_overseas_itinerary_change
|
||||
-- WHERE status = '1' AND deleted = 0
|
||||
-- ORDER BY approval_time DESC;
|
||||
|
||||
-- 5. 统计各状态的变更申请数量
|
||||
-- SELECT status, COUNT(*) as count
|
||||
-- FROM rs_overseas_itinerary_change
|
||||
-- WHERE deleted = 0
|
||||
-- GROUP BY status;
|
||||
|
||||
-- 6. 联合查询变更申请和出国记录详情
|
||||
-- SELECT
|
||||
-- c.*,
|
||||
-- r.applicant_name,
|
||||
-- r.department,
|
||||
-- r.destination,
|
||||
-- r.actual_start_date,
|
||||
-- r.actual_end_date
|
||||
-- FROM rs_overseas_itinerary_change c
|
||||
-- LEFT JOIN rs_overseas_record r ON c.record_id = r.record_id
|
||||
-- WHERE c.deleted = 0 AND r.deleted = 0
|
||||
-- ORDER BY c.create_time DESC;
|
||||
@@ -0,0 +1,58 @@
|
||||
-- ====================================
|
||||
-- 出国行程变更表增加本人基本情况字段脚本
|
||||
-- 用途: 为rs_overseas_itinerary_change表添加性别、出生年月、政治面貌、职称、职务、证件等字段
|
||||
-- 创建时间: 2025-10-13
|
||||
-- ====================================
|
||||
|
||||
-- 添加新字段到rs_overseas_itinerary_change表
|
||||
ALTER TABLE `rs_overseas_itinerary_change`
|
||||
ADD COLUMN `gender` char(1) DEFAULT NULL COMMENT '性别:0-男,1-女' AFTER `applicant_name`,
|
||||
ADD COLUMN `birth_date` date DEFAULT NULL COMMENT '出生日期' AFTER `gender`,
|
||||
ADD COLUMN `political_status` varchar(20) DEFAULT NULL COMMENT '政治面貌' AFTER `birth_date`,
|
||||
ADD COLUMN `professional_title` varchar(100) DEFAULT NULL COMMENT '职称' AFTER `political_status`,
|
||||
ADD COLUMN `position` varchar(100) DEFAULT NULL COMMENT '职务' AFTER `professional_title`,
|
||||
ADD COLUMN `document_name` varchar(100) DEFAULT NULL COMMENT '申领证件名称' AFTER `position`,
|
||||
ADD COLUMN `document_number` varchar(100) DEFAULT NULL COMMENT '证件号码' AFTER `document_name`;
|
||||
|
||||
-- 验证字段添加结果
|
||||
SELECT
|
||||
COLUMN_NAME AS '字段名',
|
||||
COLUMN_TYPE AS '字段类型',
|
||||
IS_NULLABLE AS '允许空值',
|
||||
COLUMN_COMMENT AS '字段说明'
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'rs_overseas_itinerary_change'
|
||||
AND COLUMN_NAME IN ('gender', 'birth_date', 'political_status', 'professional_title', 'position', 'document_name', 'document_number')
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
|
||||
-- ====================================
|
||||
-- 使用说明
|
||||
-- ====================================
|
||||
/*
|
||||
1. 执行前请确认:
|
||||
- 数据库连接正常
|
||||
- rs_overseas_itinerary_change表已存在
|
||||
- 有足够的权限执行ALTER TABLE操作
|
||||
|
||||
2. 新增字段说明:
|
||||
- gender: 性别(0-男,1-女),与出国申请表保持一致
|
||||
- birth_date: 出生日期
|
||||
- political_status: 政治面貌(使用字典值)
|
||||
- professional_title: 职称
|
||||
- position: 职务
|
||||
- document_name: 申领证件名称(如:护照、通行证等)
|
||||
- document_number: 证件号码
|
||||
|
||||
3. 字段用途:
|
||||
- 这些字段会在变更申请时从原出国申请中自动填充
|
||||
- 用于在"一、本人基本情况"部分显示完整的个人信息
|
||||
- 所有字段均为可选字段,不影响现有数据
|
||||
|
||||
4. 执行后续步骤:
|
||||
- 更新后端VO类,添加新字段
|
||||
- 更新前端TypeScript接口定义
|
||||
- 修改前端表单,在"一、本人基本情况"部分显示新字段
|
||||
- 更新数据自动填充逻辑
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,187 @@
|
||||
-- ======================================
|
||||
-- 出国行程变更审批管理 - 菜单权限配置SQL
|
||||
-- 创建时间: 2025-10-13
|
||||
-- 说明: 在人事管理菜单下新增"行程变更审批"菜单及相关权限
|
||||
-- 用途: 用于审批人员审批出国行程变更申请
|
||||
-- ======================================
|
||||
|
||||
-- ======================================
|
||||
-- 1. 查询人事管理菜单ID(假设人事管理菜单已存在)
|
||||
-- ======================================
|
||||
-- 假设人事管理菜单的menu_id为105(实际使用时需要查询确认)
|
||||
-- SELECT menu_id, menu_name, parent_id FROM sys_menu WHERE menu_name = '人事管理';
|
||||
|
||||
-- ======================================
|
||||
-- 2. 插入行程变更审批菜单(二级菜单)
|
||||
-- ======================================
|
||||
-- 注意:menu_id使用实际系统的菜单ID规则,这里使用示例值2060
|
||||
-- 注意:parent_id需要替换为实际的"人事管理"菜单ID
|
||||
|
||||
INSERT INTO `sys_menu` VALUES (
|
||||
2060, -- menu_id(菜单ID,需根据实际情况调整)
|
||||
'行程变更审批', -- menu_name(菜单名称)
|
||||
105, -- parent_id(父菜单ID,假设105是"人事管理")
|
||||
6, -- order_num(显示顺序,在人事管理下第6个)
|
||||
'itinerary-change-approval', -- path(路由地址)
|
||||
'rs/overseas/itinerary-change-approval', -- component(对应前端页面路径)
|
||||
'F', -- is_frame(是否外链:N=否)
|
||||
'1', -- is_cache(是否缓存:1=缓存)
|
||||
'C', -- menu_type(菜单类型:M=目录,C=菜单,F=按钮)
|
||||
'0', -- visible(显示状态:0=显示,1=隐藏)
|
||||
'0', -- status(菜单状态:0=正常,1=停用)
|
||||
'rs:itineraryChange:approve', -- perms(权限标识)
|
||||
'circle-check', -- icon(菜单图标)
|
||||
SYSDATE(), -- create_time(创建时间)
|
||||
0, -- create_by(创建者)
|
||||
NULL, -- update_time(更新时间)
|
||||
NULL, -- update_by(更新者)
|
||||
'出国行程变更审批管理', -- remark(备注)
|
||||
0 -- deleted(删除标志:0=未删除,1=已删除)
|
||||
);
|
||||
|
||||
-- ======================================
|
||||
-- 3. 插入功能按钮权限(三级菜单)
|
||||
-- ======================================
|
||||
|
||||
-- 3.1 查询按钮(查看待审批列表和审批记录)
|
||||
INSERT INTO `sys_menu` VALUES (
|
||||
2061, -- menu_id
|
||||
'行程变更审批查询', -- menu_name
|
||||
2060, -- parent_id
|
||||
1, -- order_num
|
||||
'#', -- path
|
||||
'', -- component
|
||||
'F', -- is_frame
|
||||
'1', -- is_cache
|
||||
'F', -- menu_type(F=按钮)
|
||||
'0', -- visible
|
||||
'0', -- status
|
||||
'rs:itineraryChange:query', -- perms
|
||||
'#', -- icon
|
||||
SYSDATE(), -- create_time
|
||||
0, -- create_by
|
||||
NULL, -- update_time
|
||||
NULL, -- update_by
|
||||
'查看行程变更详情', -- remark
|
||||
0 -- deleted
|
||||
);
|
||||
|
||||
-- 3.2 审批按钮
|
||||
INSERT INTO `sys_menu` VALUES (
|
||||
2062, -- menu_id
|
||||
'行程变更审批', -- menu_name
|
||||
2060, -- parent_id
|
||||
2, -- order_num
|
||||
'#', -- path
|
||||
'', -- component
|
||||
'F', -- is_frame
|
||||
'1', -- is_cache
|
||||
'F', -- menu_type(F=按钮)
|
||||
'0', -- visible
|
||||
'0', -- status
|
||||
'rs:itineraryChange:approve', -- perms
|
||||
'#', -- icon
|
||||
SYSDATE(), -- create_time
|
||||
0, -- create_by
|
||||
NULL, -- update_time
|
||||
NULL, -- update_by
|
||||
'审批行程变更(通过/拒绝)', -- remark
|
||||
0 -- deleted
|
||||
);
|
||||
|
||||
-- ======================================
|
||||
-- 4. 菜单权限说明
|
||||
-- ======================================
|
||||
--
|
||||
-- 【菜单结构】
|
||||
-- 人事管理
|
||||
-- ├─ 变更行程(申请人员使用,menu_id=2050)
|
||||
-- │ └─ 变更行程管理(申请页面,menu_id=2051)
|
||||
-- │ ├─ 查询(rs:itineraryChange:query)
|
||||
-- │ ├─ 新增(rs:itineraryChange:add)
|
||||
-- │ ├─ 修改(rs:itineraryChange:edit)
|
||||
-- │ ├─ 删除(rs:itineraryChange:remove)
|
||||
-- │ └─ 撤回(rs:itineraryChange:cancel)
|
||||
-- │
|
||||
-- └─ 行程变更审批(审批人员使用,menu_id=2060)⬅️ 本SQL新增
|
||||
-- ├─ 查询(rs:itineraryChange:query)
|
||||
-- └─ 审批(rs:itineraryChange:approve)
|
||||
--
|
||||
-- 【权限标识说明】
|
||||
-- rs:itineraryChange:query - 查询行程变更详情
|
||||
-- rs:itineraryChange:approve - 审批行程变更(通过/拒绝)
|
||||
-- rs:itineraryChange:list - 查询行程变更列表(申请页面使用)
|
||||
-- rs:itineraryChange:add - 新增行程变更申请(申请页面使用)
|
||||
-- rs:itineraryChange:edit - 修改行程变更申请(申请页面使用)
|
||||
-- rs:itineraryChange:remove - 删除行程变更申请(申请页面使用)
|
||||
-- rs:itineraryChange:cancel - 撤回行程变更申请(申请页面使用)
|
||||
--
|
||||
-- 【角色权限配置建议】
|
||||
-- 1. 申请人员:分配"变更行程"菜单权限(menu_id=2050及其子菜单)
|
||||
-- - 可以提交、修改、撤回、删除自己的变更申请
|
||||
-- - 可以查看自己的变更申请列表
|
||||
--
|
||||
-- 2. 审批人员:分配"行程变更审批"菜单权限(menu_id=2060及其子菜单)
|
||||
-- - 可以查看待审批的变更申请列表
|
||||
-- - 可以审批(通过/拒绝)变更申请
|
||||
-- - 可以查看审批记录
|
||||
--
|
||||
-- 3. 管理员:同时分配两个菜单权限
|
||||
-- - 既可以申请,也可以审批
|
||||
--
|
||||
-- ======================================
|
||||
-- 5. 角色菜单关联示例(可选)
|
||||
-- ======================================
|
||||
-- 假设角色ID:
|
||||
-- - 申请人员角色ID = 10
|
||||
-- - 审批人员角色ID = 20
|
||||
-- - 管理员角色ID = 1
|
||||
--
|
||||
-- 5.1 为申请人员角色分配权限
|
||||
-- INSERT INTO sys_role_menu (role_id, menu_id) VALUES
|
||||
-- (10, 2050), -- 变更行程菜单
|
||||
-- (10, 2051), -- 变更行程管理页面
|
||||
-- (10, 2052), -- 查询按钮
|
||||
-- (10, 2053), -- 新增按钮
|
||||
-- (10, 2054), -- 修改按钮
|
||||
-- (10, 2055), -- 删除按钮
|
||||
-- (10, 2056); -- 撤回按钮
|
||||
--
|
||||
-- 5.2 为审批人员角色分配权限
|
||||
-- INSERT INTO sys_role_menu (role_id, menu_id) VALUES
|
||||
-- (20, 2060), -- 行程变更审批菜单
|
||||
-- (20, 2061), -- 查询按钮
|
||||
-- (20, 2062); -- 审批按钮
|
||||
--
|
||||
-- 5.3 为管理员角色分配权限(拥有全部权限)
|
||||
-- INSERT INTO sys_role_menu (role_id, menu_id) VALUES
|
||||
-- (1, 2050), (1, 2051), (1, 2052), (1, 2053), (1, 2054), (1, 2055), (1, 2056), -- 申请相关
|
||||
-- (1, 2060), (1, 2061), (1, 2062); -- 审批相关
|
||||
--
|
||||
-- ======================================
|
||||
-- 6. 验证SQL
|
||||
-- ======================================
|
||||
--
|
||||
-- 6.1 查询菜单是否创建成功
|
||||
-- SELECT menu_id, menu_name, parent_id, path, component, perms, menu_type
|
||||
-- FROM sys_menu
|
||||
-- WHERE menu_id BETWEEN 2060 AND 2062
|
||||
-- ORDER BY menu_id;
|
||||
--
|
||||
-- 6.2 查询某个角色的菜单权限
|
||||
-- SELECT m.menu_id, m.menu_name, m.perms, m.menu_type
|
||||
-- FROM sys_menu m
|
||||
-- INNER JOIN sys_role_menu rm ON m.menu_id = rm.menu_id
|
||||
-- WHERE rm.role_id = 20 -- 替换为实际角色ID
|
||||
-- AND m.menu_id BETWEEN 2050 AND 2062
|
||||
-- ORDER BY m.menu_id;
|
||||
--
|
||||
-- ======================================
|
||||
-- 7. 删除菜单SQL(回滚用)
|
||||
-- ======================================
|
||||
--
|
||||
-- DELETE FROM sys_role_menu WHERE menu_id BETWEEN 2060 AND 2062;
|
||||
-- DELETE FROM sys_menu WHERE menu_id BETWEEN 2060 AND 2062;
|
||||
--
|
||||
-- ======================================
|
||||
|
||||
@@ -0,0 +1,320 @@
|
||||
-- ======================================
|
||||
-- 出国行程变更管理 - 完整SQL脚本
|
||||
-- 包括: 数据库表、字典数据、菜单权限配置
|
||||
-- 创建时间: 2025-10-13
|
||||
-- 更新时间: 2025-10-13(修复字符集编码问题)
|
||||
-- 说明: 一键导入所有配置
|
||||
-- ======================================
|
||||
|
||||
-- ⚠️ 重要:设置字符集,避免中文乱码
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- ======================================
|
||||
-- 第一部分: 数据库表结构
|
||||
-- ======================================
|
||||
|
||||
DROP TABLE IF EXISTS `rs_overseas_itinerary_change`;
|
||||
|
||||
CREATE TABLE `rs_overseas_itinerary_change` (
|
||||
`change_id` bigint(20) NOT NULL COMMENT '变更ID(主键,雪花ID)',
|
||||
`record_id` bigint(20) NOT NULL COMMENT '关联出国记录ID(关联rs_overseas_record表)',
|
||||
`application_id` bigint(20) DEFAULT NULL COMMENT '原出国申请ID(关联rs_overseas_application表,来自记录表冗余)',
|
||||
`applicant_id` bigint(20) NOT NULL COMMENT '申请人ID(用户ID)',
|
||||
`applicant_name` varchar(100) NOT NULL COMMENT '申请人姓名',
|
||||
`gender` char(1) DEFAULT NULL COMMENT '性别:0-男,1-女',
|
||||
`birth_date` date DEFAULT NULL COMMENT '出生日期',
|
||||
`political_status` varchar(20) DEFAULT NULL COMMENT '政治面貌',
|
||||
`professional_title` varchar(100) DEFAULT NULL COMMENT '职称',
|
||||
`position` varchar(100) DEFAULT NULL COMMENT '职务',
|
||||
`document_name` varchar(100) DEFAULT NULL COMMENT '申领证件名称',
|
||||
`document_number` varchar(100) DEFAULT NULL COMMENT '证件号码',
|
||||
`department` varchar(200) DEFAULT NULL COMMENT '部门',
|
||||
|
||||
-- 原记录信息(从出国记录表冗余存储)
|
||||
`original_destination` varchar(100) DEFAULT NULL COMMENT '原目的地国家',
|
||||
`original_destination_city` varchar(100) DEFAULT NULL COMMENT '原目的地城市',
|
||||
`original_exit_reason` varchar(100) DEFAULT NULL COMMENT '原出境事由',
|
||||
`original_start_date` date DEFAULT NULL COMMENT '原出发日期',
|
||||
`original_end_date` date DEFAULT NULL COMMENT '原返回日期',
|
||||
`original_duration` int(11) DEFAULT NULL COMMENT '原出国天数',
|
||||
`original_itinerary` text COMMENT '原行程安排',
|
||||
`original_accommodation_plan` text COMMENT '原住宿安排',
|
||||
`original_transportation_plan` text COMMENT '原交通安排',
|
||||
|
||||
-- 变更信息
|
||||
`change_type` varchar(200) NOT NULL COMMENT '变更类型(目的地变更,时间变更,行程变更,多个用逗号分隔)',
|
||||
`new_destination` varchar(100) DEFAULT NULL COMMENT '新目的地国家',
|
||||
`new_destination_city` varchar(100) DEFAULT NULL COMMENT '新目的地城市',
|
||||
`new_exit_reason` varchar(100) DEFAULT NULL COMMENT '新出境事由',
|
||||
`new_start_date` date DEFAULT NULL COMMENT '新出发日期',
|
||||
`new_end_date` date DEFAULT NULL COMMENT '新返回日期',
|
||||
`new_duration` int(11) DEFAULT NULL COMMENT '新出国天数',
|
||||
`new_itinerary` text COMMENT '新行程安排',
|
||||
`new_accommodation_plan` text COMMENT '新住宿安排',
|
||||
`new_transportation_plan` text COMMENT '新交通安排',
|
||||
|
||||
-- 变更原因和备注
|
||||
`change_reason` varchar(500) NOT NULL COMMENT '变更原因(必填)',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
|
||||
-- 审批信息
|
||||
`status` char(1) NOT NULL DEFAULT '0' COMMENT '变更状态(0=待审核,1=已通过,2=已拒绝,3=已撤回)',
|
||||
`approval_opinion` varchar(500) DEFAULT NULL COMMENT '审批意见',
|
||||
`approval_time` datetime DEFAULT NULL COMMENT '审批时间',
|
||||
`approver_id` bigint(20) DEFAULT NULL COMMENT '审批人ID',
|
||||
`approver_name` varchar(100) DEFAULT NULL COMMENT '审批人姓名',
|
||||
|
||||
-- 多租户字段
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户ID',
|
||||
|
||||
-- 标准基础字段
|
||||
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
|
||||
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
`deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除标志(0=未删除,1=已删除)',
|
||||
|
||||
PRIMARY KEY (`change_id`),
|
||||
KEY `idx_record_id` (`record_id`) COMMENT '出国记录ID索引',
|
||||
KEY `idx_application_id` (`application_id`) COMMENT '原申请ID索引',
|
||||
KEY `idx_applicant_id` (`applicant_id`) COMMENT '申请人ID索引',
|
||||
KEY `idx_status` (`status`) COMMENT '状态索引',
|
||||
KEY `idx_tenant_id` (`tenant_id`) COMMENT '租户ID索引',
|
||||
KEY `idx_create_time` (`create_time`) COMMENT '创建时间索引'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='出国行程变更申请表';
|
||||
|
||||
-- ======================================
|
||||
-- 第二部分: 字典数据
|
||||
-- ======================================
|
||||
|
||||
-- 删除旧字典(如果存在)
|
||||
DELETE FROM sys_dict_type WHERE dict_type = 'rs_itinerary_change_status';
|
||||
DELETE FROM sys_dict_data WHERE dict_type = 'rs_itinerary_change_status';
|
||||
DELETE FROM sys_dict_type WHERE dict_type = 'rs_itinerary_change_type';
|
||||
DELETE FROM sys_dict_data WHERE dict_type = 'rs_itinerary_change_type';
|
||||
|
||||
-- 插入字典类型:行程变更状态(使用CONVERT确保正确编码)
|
||||
INSERT INTO sys_dict_type (dict_id, tenant_id, dict_name, dict_type, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (
|
||||
3000000000000001018,
|
||||
'000000',
|
||||
CONVERT('行程变更状态' USING utf8mb4),
|
||||
'rs_itinerary_change_status',
|
||||
NULL,
|
||||
0,
|
||||
SYSDATE(),
|
||||
NULL,
|
||||
NULL,
|
||||
CONVERT('出国行程变更申请状态字典' USING utf8mb4)
|
||||
);
|
||||
|
||||
-- 插入字典数据:行程变更状态(使用CONVERT确保正确编码)
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (3000000000000002069, '000000', 0, CONVERT('待审核' USING utf8mb4), '0', 'rs_itinerary_change_status', '', 'primary', 'N', NULL, 0, SYSDATE(), NULL, NULL, CONVERT('待审核状态' USING utf8mb4));
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (3000000000000002070, '000000', 1, CONVERT('已通过' USING utf8mb4), '1', 'rs_itinerary_change_status', '', 'success', 'N', NULL, 0, SYSDATE(), NULL, NULL, CONVERT('已通过状态' USING utf8mb4));
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (3000000000000002071, '000000', 2, CONVERT('已拒绝' USING utf8mb4), '2', 'rs_itinerary_change_status', '', 'danger', 'N', NULL, 0, SYSDATE(), NULL, NULL, CONVERT('已拒绝状态' USING utf8mb4));
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (3000000000000002072, '000000', 3, CONVERT('已撤回' USING utf8mb4), '3', 'rs_itinerary_change_status', '', 'info', 'N', NULL, 0, SYSDATE(), NULL, NULL, CONVERT('已撤回状态' USING utf8mb4));
|
||||
|
||||
-- 插入字典类型:行程变更类型(使用CONVERT确保正确编码)
|
||||
INSERT INTO sys_dict_type (dict_id, tenant_id, dict_name, dict_type, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (
|
||||
3000000000000001019,
|
||||
'000000',
|
||||
CONVERT('行程变更类型' USING utf8mb4),
|
||||
'rs_itinerary_change_type',
|
||||
NULL,
|
||||
0,
|
||||
SYSDATE(),
|
||||
NULL,
|
||||
NULL,
|
||||
CONVERT('出国行程变更类型字典' USING utf8mb4)
|
||||
);
|
||||
|
||||
-- 插入字典数据:行程变更类型(使用CONVERT确保正确编码)
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (3000000000000002073, '000000', 0, CONVERT('目的地变更' USING utf8mb4), 'destination_change', 'rs_itinerary_change_type', '', 'primary', 'N', NULL, 0, SYSDATE(), NULL, NULL, CONVERT('目的地变更' USING utf8mb4));
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (3000000000000002074, '000000', 1, CONVERT('时间变更' USING utf8mb4), 'time_change', 'rs_itinerary_change_type', '', 'warning', 'N', NULL, 0, SYSDATE(), NULL, NULL, CONVERT('时间变更' USING utf8mb4));
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (3000000000000002075, '000000', 2, CONVERT('行程变更' USING utf8mb4), 'itinerary_change', 'rs_itinerary_change_type', '', 'info', 'N', NULL, 0, SYSDATE(), NULL, NULL, CONVERT('行程变更' USING utf8mb4));
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (3000000000000002076, '000000', 3, CONVERT('交通方式变更' USING utf8mb4), 'transportation_change', 'rs_itinerary_change_type', '', 'success', 'N', NULL, 0, SYSDATE(), NULL, NULL, CONVERT('交通方式变更' USING utf8mb4));
|
||||
INSERT INTO sys_dict_data (dict_code, tenant_id, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (3000000000000002077, '000000', 4, CONVERT('住宿变更' USING utf8mb4), 'accommodation_change', 'rs_itinerary_change_type', '', 'default', 'N', NULL, 0, SYSDATE(), NULL, NULL, CONVERT('住宿变更' USING utf8mb4));
|
||||
|
||||
-- ======================================
|
||||
-- 第三部分: 菜单权限配置
|
||||
-- ======================================
|
||||
|
||||
-- 注意:menu_id使用2050-2058,请确保这些ID在系统中未被占用
|
||||
-- 如果已被占用,请替换为其他可用ID
|
||||
|
||||
-- 删除旧菜单(如果存在)
|
||||
DELETE FROM sys_menu WHERE menu_id >= 2050 AND menu_id <= 2058;
|
||||
DELETE FROM sys_role_menu WHERE menu_id >= 2050 AND menu_id <= 2058;
|
||||
|
||||
-- 插入一级菜单:变更行程
|
||||
INSERT INTO `sys_menu` (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (
|
||||
2050, -- menu_id
|
||||
'变更行程', -- menu_name
|
||||
105, -- parent_id(人事管理菜单ID,请根据实际情况调整)
|
||||
5, -- order_num
|
||||
'/rs/itinerary-change', -- path
|
||||
'', -- component
|
||||
'', -- query_param
|
||||
0, -- is_frame (0=否,1=是)
|
||||
1, -- is_cache (0=不缓存,1=缓存)
|
||||
'C', -- menu_type
|
||||
'0', -- visible
|
||||
'0', -- status
|
||||
'rs:itineraryChange:list', -- perms
|
||||
'edit', -- icon
|
||||
103, -- create_dept
|
||||
1, -- create_by
|
||||
SYSDATE(), -- create_time
|
||||
NULL, -- update_by
|
||||
NULL, -- update_time
|
||||
'出国行程变更申请管理' -- remark
|
||||
);
|
||||
|
||||
-- 插入二级菜单:变更行程管理
|
||||
INSERT INTO `sys_menu` (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (
|
||||
2051,
|
||||
'变更行程管理',
|
||||
2050,
|
||||
1,
|
||||
'index',
|
||||
'rs/overseas/itinerary-change',
|
||||
'',
|
||||
0,
|
||||
1,
|
||||
'C',
|
||||
'0',
|
||||
'0',
|
||||
'rs:itineraryChange:list',
|
||||
'edit',
|
||||
103,
|
||||
1,
|
||||
SYSDATE(),
|
||||
NULL,
|
||||
NULL,
|
||||
'变更行程管理页面'
|
||||
);
|
||||
|
||||
-- 插入功能按钮:查询
|
||||
INSERT INTO `sys_menu` (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (2052, '变更行程查询', 2051, 1, '#', '', '', 0, 1, 'F', '0', '0', 'rs:itineraryChange:query', '#', 103, 1, SYSDATE(), NULL, NULL, '');
|
||||
|
||||
-- 插入功能按钮:新增
|
||||
INSERT INTO `sys_menu` (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (2053, '变更行程新增', 2051, 2, '#', '', '', 0, 1, 'F', '0', '0', 'rs:itineraryChange:add', '#', 103, 1, SYSDATE(), NULL, NULL, '');
|
||||
|
||||
-- 插入功能按钮:修改
|
||||
INSERT INTO `sys_menu` (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (2054, '变更行程修改', 2051, 3, '#', '', '', 0, 1, 'F', '0', '0', 'rs:itineraryChange:edit', '#', 103, 1, SYSDATE(), NULL, NULL, '');
|
||||
|
||||
-- 插入功能按钮:删除
|
||||
INSERT INTO `sys_menu` (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (2055, '变更行程删除', 2051, 4, '#', '', '', 0, 1, 'F', '0', '0', 'rs:itineraryChange:remove', '#', 103, 1, SYSDATE(), NULL, NULL, '');
|
||||
|
||||
-- 插入功能按钮:撤回
|
||||
INSERT INTO `sys_menu` (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (2056, '变更行程撤回', 2051, 5, '#', '', '', 0, 1, 'F', '0', '0', 'rs:itineraryChange:cancel', '#', 103, 1, SYSDATE(), NULL, NULL, '');
|
||||
|
||||
-- 插入功能按钮:导出
|
||||
INSERT INTO `sys_menu` (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (2057, '变更行程导出', 2051, 6, '#', '', '', 0, 1, 'F', '0', '0', 'rs:itineraryChange:export', '#', 103, 1, SYSDATE(), NULL, NULL, '');
|
||||
|
||||
-- 插入功能按钮:审批
|
||||
INSERT INTO `sys_menu` (menu_id, menu_name, parent_id, order_num, path, component, query_param, is_frame, is_cache, menu_type, visible, status, perms, icon, create_dept, create_by, create_time, update_by, update_time, remark)
|
||||
VALUES (2058, '变更行程审批', 2051, 7, '#', '', '', 0, 1, 'F', '0', '0', 'rs:itineraryChange:approve', '#', 103, 1, SYSDATE(), NULL, NULL, '');
|
||||
|
||||
-- ======================================
|
||||
-- 为管理员角色分配菜单权限(可选)
|
||||
-- ======================================
|
||||
-- 注意:role_id需要替换为实际的管理员角色ID(通常为1)
|
||||
-- 如果需要自动为管理员分配权限,取消下面的注释
|
||||
|
||||
-- INSERT INTO `sys_role_menu` VALUES (1, 2050); -- 变更行程菜单
|
||||
-- INSERT INTO `sys_role_menu` VALUES (1, 2051); -- 变更行程管理页面
|
||||
-- INSERT INTO `sys_role_menu` VALUES (1, 2052); -- 查询权限
|
||||
-- INSERT INTO `sys_role_menu` VALUES (1, 2053); -- 新增权限
|
||||
-- INSERT INTO `sys_role_menu` VALUES (1, 2054); -- 修改权限
|
||||
-- INSERT INTO `sys_role_menu` VALUES (1, 2055); -- 删除权限
|
||||
-- INSERT INTO `sys_role_menu` VALUES (1, 2056); -- 撤回权限
|
||||
-- INSERT INTO `sys_role_menu` VALUES (1, 2057); -- 导出权限
|
||||
-- INSERT INTO `sys_role_menu` VALUES (1, 2058); -- 审批权限
|
||||
|
||||
-- ======================================
|
||||
-- 验证导入结果
|
||||
-- ======================================
|
||||
|
||||
-- 验证表结构
|
||||
SELECT '验证表结构' AS '检查项';
|
||||
SHOW TABLES LIKE 'rs_overseas_itinerary_change';
|
||||
|
||||
-- 验证字典数据
|
||||
SELECT '验证字典数据' AS '检查项';
|
||||
SELECT dict_type, dict_name FROM sys_dict_type WHERE dict_type LIKE 'rs_itinerary_change%';
|
||||
SELECT dict_type, COUNT(*) AS count FROM sys_dict_data WHERE dict_type LIKE 'rs_itinerary_change%' GROUP BY dict_type;
|
||||
|
||||
-- 验证菜单配置
|
||||
SELECT '验证菜单配置' AS '检查项';
|
||||
SELECT menu_id, menu_name, parent_id, perms, menu_type
|
||||
FROM sys_menu
|
||||
WHERE menu_id >= 2050 AND menu_id <= 2058
|
||||
ORDER BY menu_id;
|
||||
|
||||
-- ======================================
|
||||
-- 使用说明
|
||||
-- ======================================
|
||||
/*
|
||||
1. 执行步骤:
|
||||
- 确保数据库连接正常
|
||||
- 确保menu_id(2050-2058)在系统中未被占用
|
||||
- 执行完整SQL脚本
|
||||
- 检查验证结果
|
||||
|
||||
2. 菜单层级结构:
|
||||
人事管理(105)
|
||||
└── 变更行程(2050)
|
||||
└── 变更行程管理(2051)
|
||||
├── 变更行程查询(2052)
|
||||
├── 变更行程新增(2053)
|
||||
├── 变更行程修改(2054)
|
||||
├── 变更行程删除(2055)
|
||||
├── 变更行程撤回(2056)
|
||||
├── 变更行程导出(2057)
|
||||
└── 变更行程审批(2058)
|
||||
|
||||
3. API接口路径:
|
||||
- 列表查询: GET /rs/itinerary/change/list
|
||||
- 我的申请: GET /rs/itinerary/change/my/list
|
||||
- 待审批: GET /rs/itinerary/change/pending/list
|
||||
- 详情查询: GET /rs/itinerary/change/{changeId}
|
||||
- 新增申请: POST /rs/itinerary/change
|
||||
- 修改申请: PUT /rs/itinerary/change
|
||||
- 删除申请: DELETE /rs/itinerary/change/{changeIds}
|
||||
- 撤回申请: PUT /rs/itinerary/change/cancel/{changeId}
|
||||
- 审批申请: PUT /rs/itinerary/change/approve
|
||||
- 导出列表: POST /rs/itinerary/change/export
|
||||
- 可用记录: GET /rs/itinerary/change/available-records
|
||||
- 记录详情: GET /rs/itinerary/change/record/{recordId}
|
||||
- 变更历史: GET /rs/itinerary/change/record/{recordId}/history
|
||||
|
||||
4. 前端页面路径:
|
||||
- 前端访问: /rs/itinerary-change
|
||||
- 前端组件: src/views/rs/overseas/itinerary-change.vue
|
||||
|
||||
5. 后续操作:
|
||||
- 在"系统管理-角色管理"中为相应角色分配菜单权限
|
||||
- 在前端创建对应的Vue组件页面
|
||||
- 测试所有功能接口
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,278 @@
|
||||
-- ======================================
|
||||
-- 出国行程变更管理 - 菜单权限配置SQL
|
||||
-- 创建时间: 2025-10-13
|
||||
-- 说明: 在人事管理菜单下新增"变更行程"菜单及相关权限
|
||||
-- ======================================
|
||||
|
||||
-- ======================================
|
||||
-- 1. 查询人事管理菜单ID(假设人事管理菜单已存在)
|
||||
-- ======================================
|
||||
-- 假设人事管理菜单的menu_id为105(实际使用时需要查询确认)
|
||||
-- SELECT menu_id, menu_name, parent_id FROM sys_menu WHERE menu_name = '人事管理';
|
||||
|
||||
-- ======================================
|
||||
-- 2. 插入变更行程菜单(一级菜单:变更行程)
|
||||
-- ======================================
|
||||
-- 注意:menu_id使用实际系统的菜单ID规则,这里使用示例值2050
|
||||
-- 注意:parent_id需要替换为实际的"人事管理"菜单ID
|
||||
|
||||
INSERT INTO `sys_menu` VALUES (
|
||||
2050, -- menu_id(菜单ID,需根据实际情况调整)
|
||||
'变更行程', -- menu_name(菜单名称)
|
||||
105, -- parent_id(父菜单ID,假设105是"人事管理")
|
||||
5, -- order_num(显示顺序,在人事管理下第5个)
|
||||
'/rs/itinerary-change', -- path(路由地址)
|
||||
'', -- component(组件路径,空表示Layout)
|
||||
'F', -- is_frame(是否外链:N=否)
|
||||
'1', -- is_cache(是否缓存:1=缓存)
|
||||
'C', -- menu_type(菜单类型:M=目录,C=菜单,F=按钮)
|
||||
'0', -- visible(显示状态:0=显示,1=隐藏)
|
||||
'0', -- status(菜单状态:0=正常,1=停用)
|
||||
'rs:itineraryChange:list', -- perms(权限标识)
|
||||
'edit', -- icon(菜单图标)
|
||||
SYSDATE(), -- create_time(创建时间)
|
||||
0, -- create_by(创建者)
|
||||
NULL, -- update_time(更新时间)
|
||||
NULL, -- update_by(更新者)
|
||||
'出国行程变更申请管理', -- remark(备注)
|
||||
0 -- deleted(删除标志:0=未删除,1=已删除)
|
||||
);
|
||||
|
||||
-- ======================================
|
||||
-- 3. 插入变更行程管理页面路由(二级菜单)
|
||||
-- ======================================
|
||||
|
||||
INSERT INTO `sys_menu` VALUES (
|
||||
2051, -- menu_id
|
||||
'变更行程管理', -- menu_name
|
||||
2050, -- parent_id(指向"变更行程"菜单)
|
||||
1, -- order_num
|
||||
'index', -- path
|
||||
'rs/overseas/itinerary-change', -- component(对应前端页面路径)
|
||||
'F', -- is_frame
|
||||
'1', -- is_cache
|
||||
'C', -- menu_type
|
||||
'0', -- visible
|
||||
'0', -- status
|
||||
'rs:itineraryChange:list', -- perms
|
||||
'edit', -- icon
|
||||
SYSDATE(), -- create_time
|
||||
0, -- create_by
|
||||
NULL, -- update_time
|
||||
NULL, -- update_by
|
||||
'变更行程管理页面', -- remark
|
||||
0 -- deleted
|
||||
);
|
||||
|
||||
-- ======================================
|
||||
-- 4. 插入功能按钮权限(三级菜单)
|
||||
-- ======================================
|
||||
|
||||
-- 4.1 查询按钮
|
||||
INSERT INTO `sys_menu` VALUES (
|
||||
2052, -- menu_id
|
||||
'变更行程查询', -- menu_name
|
||||
2051, -- parent_id
|
||||
1, -- order_num
|
||||
'#', -- path
|
||||
'', -- component
|
||||
'F', -- is_frame
|
||||
'1', -- is_cache
|
||||
'F', -- menu_type(F=按钮)
|
||||
'0', -- visible
|
||||
'0', -- status
|
||||
'rs:itineraryChange:query', -- perms
|
||||
'#', -- icon
|
||||
SYSDATE(), -- create_time
|
||||
0, -- create_by
|
||||
NULL, -- update_time
|
||||
NULL, -- update_by
|
||||
'', -- remark
|
||||
0 -- deleted
|
||||
);
|
||||
|
||||
-- 4.2 新增按钮
|
||||
INSERT INTO `sys_menu` VALUES (
|
||||
2053, -- menu_id
|
||||
'变更行程新增', -- menu_name
|
||||
2051, -- parent_id
|
||||
2, -- order_num
|
||||
'#', -- path
|
||||
'', -- component
|
||||
'F', -- is_frame
|
||||
'1', -- is_cache
|
||||
'F', -- menu_type
|
||||
'0', -- visible
|
||||
'0', -- status
|
||||
'rs:itineraryChange:add', -- perms
|
||||
'#', -- icon
|
||||
SYSDATE(), -- create_time
|
||||
0, -- create_by
|
||||
NULL, -- update_time
|
||||
NULL, -- update_by
|
||||
'', -- remark
|
||||
0 -- deleted
|
||||
);
|
||||
|
||||
-- 4.3 修改按钮
|
||||
INSERT INTO `sys_menu` VALUES (
|
||||
2054, -- menu_id
|
||||
'变更行程修改', -- menu_name
|
||||
2051, -- parent_id
|
||||
3, -- order_num
|
||||
'#', -- path
|
||||
'', -- component
|
||||
'F', -- is_frame
|
||||
'1', -- is_cache
|
||||
'F', -- menu_type
|
||||
'0', -- visible
|
||||
'0', -- status
|
||||
'rs:itineraryChange:edit', -- perms
|
||||
'#', -- icon
|
||||
SYSDATE(), -- create_time
|
||||
0, -- create_by
|
||||
NULL, -- update_time
|
||||
NULL, -- update_by
|
||||
'', -- remark
|
||||
0 -- deleted
|
||||
);
|
||||
|
||||
-- 4.4 删除按钮
|
||||
INSERT INTO `sys_menu` VALUES (
|
||||
2055, -- menu_id
|
||||
'变更行程删除', -- menu_name
|
||||
2051, -- parent_id
|
||||
4, -- order_num
|
||||
'#', -- path
|
||||
'', -- component
|
||||
'F', -- is_frame
|
||||
'1', -- is_cache
|
||||
'F', -- menu_type
|
||||
'0', -- visible
|
||||
'0', -- status
|
||||
'rs:itineraryChange:remove', -- perms
|
||||
'#', -- icon
|
||||
SYSDATE(), -- create_time
|
||||
0, -- create_by
|
||||
NULL, -- update_time
|
||||
NULL, -- update_by
|
||||
'', -- remark
|
||||
0 -- deleted
|
||||
);
|
||||
|
||||
-- 4.5 撤回按钮
|
||||
INSERT INTO `sys_menu` VALUES (
|
||||
2056, -- menu_id
|
||||
'变更行程撤回', -- menu_name
|
||||
2051, -- parent_id
|
||||
5, -- order_num
|
||||
'#', -- path
|
||||
'', -- component
|
||||
'F', -- is_frame
|
||||
'1', -- is_cache
|
||||
'F', -- menu_type
|
||||
'0', -- visible
|
||||
'0', -- status
|
||||
'rs:itineraryChange:cancel', -- perms
|
||||
'#', -- icon
|
||||
SYSDATE(), -- create_time
|
||||
0, -- create_by
|
||||
NULL, -- update_time
|
||||
NULL, -- update_by
|
||||
'', -- remark
|
||||
0 -- deleted
|
||||
);
|
||||
|
||||
-- ======================================
|
||||
-- 5. 为管理员角色分配菜单权限(可选)
|
||||
-- ======================================
|
||||
-- 注意:role_id需要替换为实际的管理员角色ID(通常为1)
|
||||
-- 如果需要自动为管理员分配权限,取消下面的注释
|
||||
|
||||
-- INSERT INTO `sys_role_menu` VALUES (1, 2050); -- 变更行程菜单
|
||||
-- INSERT INTO `sys_role_menu` VALUES (1, 2051); -- 变更行程管理页面
|
||||
-- INSERT INTO `sys_role_menu` VALUES (1, 2052); -- 查询权限
|
||||
-- INSERT INTO `sys_role_menu` VALUES (1, 2053); -- 新增权限
|
||||
-- INSERT INTO `sys_role_menu` VALUES (1, 2054); -- 修改权限
|
||||
-- INSERT INTO `sys_role_menu` VALUES (1, 2055); -- 删除权限
|
||||
-- INSERT INTO `sys_role_menu` VALUES (1, 2056); -- 撤回权限
|
||||
-- INSERT INTO `sys_role_menu` VALUES (1, 2057); -- 导出权限
|
||||
|
||||
-- ======================================
|
||||
-- 6. 验证菜单配置
|
||||
-- ======================================
|
||||
-- 查询变更行程菜单及其子菜单
|
||||
-- SELECT
|
||||
-- menu_id,
|
||||
-- menu_name,
|
||||
-- parent_id,
|
||||
-- order_num,
|
||||
-- path,
|
||||
-- component,
|
||||
-- perms,
|
||||
-- menu_type,
|
||||
-- visible,
|
||||
-- status
|
||||
-- FROM sys_menu
|
||||
-- WHERE menu_id >= 2050 AND menu_id <= 2056
|
||||
-- ORDER BY menu_id;
|
||||
|
||||
-- ======================================
|
||||
-- 7. 删除菜单配置(回滚用,慎用)
|
||||
-- ======================================
|
||||
-- DELETE FROM sys_menu WHERE menu_id >= 2050 AND menu_id <= 2056;
|
||||
-- DELETE FROM sys_role_menu WHERE menu_id >= 2050 AND menu_id <= 2056;
|
||||
|
||||
-- ======================================
|
||||
-- 菜单结构说明
|
||||
-- ======================================
|
||||
/*
|
||||
菜单层级结构:
|
||||
人事管理(105)
|
||||
└── 变更行程(2050)
|
||||
└── 变更行程管理(2051)
|
||||
├── 变更行程查询(2052)- rs:itineraryChange:query
|
||||
├── 变更行程新增(2053)- rs:itineraryChange:add
|
||||
├── 变更行程修改(2054)- rs:itineraryChange:edit
|
||||
├── 变更行程删除(2055)- rs:itineraryChange:remove
|
||||
└── 变更行程撤回(2056)- rs:itineraryChange:cancel
|
||||
|
||||
权限标识说明:
|
||||
- rs:itineraryChange:list - 访问变更行程列表页面
|
||||
- rs:itineraryChange:query - 查询变更行程详情
|
||||
- rs:itineraryChange:add - 新增变更申请
|
||||
- rs:itineraryChange:edit - 修改变更申请(重新提交)
|
||||
- rs:itineraryChange:remove - 删除变更申请
|
||||
- rs:itineraryChange:cancel - 撤回变更申请
|
||||
|
||||
路由配置:
|
||||
- 前端访问路径: /rs/itinerary-change
|
||||
- 前端组件路径: rs/overseas/itinerary-change.vue
|
||||
*/
|
||||
|
||||
-- ======================================
|
||||
-- 使用说明
|
||||
-- ======================================
|
||||
/*
|
||||
1. 执行前请先确认:
|
||||
- 人事管理菜单的实际menu_id(本脚本假设为105)
|
||||
- 确保menu_id(2050-2056)在系统中未被占用
|
||||
- 确认sys_menu表结构与本脚本一致
|
||||
|
||||
2. 执行顺序:
|
||||
- 先执行菜单插入SQL(第2-4节)
|
||||
- 再为相应角色分配菜单权限(第5节)
|
||||
- 最后验证菜单配置(第6节)
|
||||
|
||||
3. 权限分配:
|
||||
- 管理员默认拥有所有权限
|
||||
- 其他角色需要在"系统管理-角色管理"中分配相应权限
|
||||
|
||||
4. 前端路由配置:
|
||||
- 确保前端已创建对应的Vue组件:src/views/rs/overseas/itinerary-change.vue
|
||||
- 确保前端路由配置正确
|
||||
|
||||
5. 后端接口开发:
|
||||
- Controller需要使用对应的权限注解:@SaCheckPermission("rs:itineraryChange:xxx")
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
-- =====================================================
|
||||
-- 培训申请表字段补充SQL脚本
|
||||
-- 目标数据库:hzdyjs_xg (远程数据库)
|
||||
-- 表名:rs_training_application
|
||||
-- 执行时间:2025-01-03
|
||||
-- 描述:添加前端申请培训界面新增的字段
|
||||
-- =====================================================
|
||||
|
||||
-- 1. 检查当前表结构
|
||||
-- DESC rs_training_application;
|
||||
|
||||
-- 2. 备份表数据(可选,建议在生产环境执行)
|
||||
-- CREATE TABLE rs_training_application_backup AS SELECT * FROM rs_training_application;
|
||||
|
||||
-- 3. 一次性添加所有缺失字段
|
||||
ALTER TABLE `rs_training_application`
|
||||
ADD COLUMN `course_id` bigint(20) DEFAULT NULL COMMENT '课程ID' AFTER `application_id`,
|
||||
ADD COLUMN `current_title` varchar(100) DEFAULT NULL COMMENT '现职称' AFTER `position`,
|
||||
ADD COLUMN `current_position` varchar(50) DEFAULT NULL COMMENT '现岗位' AFTER `current_title`,
|
||||
ADD COLUMN `work_start_time` date DEFAULT NULL COMMENT '参加工作时间' AFTER `current_position`,
|
||||
ADD COLUMN `phone` varchar(20) DEFAULT NULL COMMENT '联系电话' AFTER `work_start_time`,
|
||||
ADD COLUMN `organizer_unit` varchar(200) DEFAULT NULL COMMENT '主办单位' AFTER `phone`,
|
||||
ADD COLUMN `training_type` varchar(50) DEFAULT NULL COMMENT '培训类型' AFTER `organizer_unit`,
|
||||
ADD COLUMN `training_fee` decimal(10,2) DEFAULT '0.00' COMMENT '培训费用' AFTER `training_type`,
|
||||
ADD COLUMN `companions` text DEFAULT NULL COMMENT '同行人员列表(JSON格式)' AFTER `training_fee`,
|
||||
ADD COLUMN `training_purpose` text DEFAULT NULL COMMENT '培训目的' AFTER `companions`,
|
||||
ADD COLUMN `attachment_ids` text DEFAULT NULL COMMENT '附件ID列表(逗号分隔)' AFTER `training_purpose`;
|
||||
|
||||
-- 4. 验证表结构
|
||||
-- DESC rs_training_application;
|
||||
|
||||
-- 5. 查看更新后的表结构
|
||||
-- SHOW CREATE TABLE rs_training_application;
|
||||
|
||||
-- 6. 测试数据插入(验证用,执行后可删除)
|
||||
/*
|
||||
INSERT INTO rs_training_application (
|
||||
application_id, course_id, course_name, user_id, user_name,
|
||||
department, position, current_title, current_position,
|
||||
work_start_time, phone, organizer_unit, training_type,
|
||||
training_fee, companions, training_purpose, attachment_ids,
|
||||
reason, status, apply_time, location, duration,
|
||||
start_time, end_time, tenant_id, create_dept,
|
||||
create_by, create_time, remark, deleted
|
||||
) VALUES (
|
||||
999999999, 0, '测试培训课程', 1, '测试用户',
|
||||
'人文学院', '教师', '副教授', '教学',
|
||||
'2020-01-01', '13800138000', '浙江大学', '教学',
|
||||
1500.00, '[{"teacherId": 2, "teacherName": "李四"}]', '提升教学能力', '1001,1002',
|
||||
'参加培训提升能力', '0', NOW(), '杭州', 40,
|
||||
'2025-02-01', '2025-02-05', '000000', 101,
|
||||
1, NOW(), '测试备注', '0'
|
||||
);
|
||||
|
||||
-- 验证插入的测试数据
|
||||
SELECT * FROM rs_training_application WHERE application_id = 999999999;
|
||||
|
||||
-- 删除测试数据
|
||||
DELETE FROM rs_training_application WHERE application_id = 999999999;
|
||||
*/
|
||||
|
||||
-- =====================================================
|
||||
-- 执行结果验证
|
||||
-- =====================================================
|
||||
-- 1. 检查字段是否添加成功
|
||||
-- SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE, COLUMN_DEFAULT, COLUMN_COMMENT
|
||||
-- FROM INFORMATION_SCHEMA.COLUMNS
|
||||
-- WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
-- AND TABLE_NAME = 'rs_training_application'
|
||||
-- ORDER BY ORDINAL_POSITION;
|
||||
|
||||
-- 2. 检查新增字段
|
||||
-- SELECT COLUMN_NAME, COLUMN_COMMENT
|
||||
-- FROM INFORMATION_SCHEMA.COLUMNS
|
||||
-- WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
-- AND TABLE_NAME = 'rs_training_application'
|
||||
-- AND COLUMN_NAME IN ('course_id', 'current_title', 'current_position', 'work_start_time', 'phone', 'organizer_unit', 'training_type', 'training_fee', 'companions', 'training_purpose', 'attachment_ids');
|
||||
|
||||
-- =====================================================
|
||||
-- 字段说明
|
||||
-- =====================================================
|
||||
/*
|
||||
新增字段说明:
|
||||
1. course_id - 课程ID,关联课程表
|
||||
2. current_title - 现职称,如:教授、副教授、讲师等
|
||||
3. current_position - 现岗位,如:教学、管理、其他
|
||||
4. work_start_time - 参加工作时间
|
||||
5. phone - 联系电话
|
||||
6. organizer_unit - 主办单位,培训的组织方
|
||||
7. training_type - 培训类型,如:教学、德育、行政、管理、其他
|
||||
8. training_fee - 培训费用
|
||||
9. companions - 同行人员,JSON格式存储
|
||||
10. training_purpose - 培训目的
|
||||
11. attachment_ids - 附件ID列表,逗号分隔
|
||||
*/
|
||||
@@ -0,0 +1,28 @@
|
||||
-- ⚡ 一键修复:添加行程变更表缺失的个人信息字段
|
||||
-- 直接复制粘贴到MySQL中执行即可!
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- 添加8个缺失的个人信息字段
|
||||
ALTER TABLE rs_overseas_itinerary_change
|
||||
ADD COLUMN `gender` char(1) DEFAULT NULL COMMENT '性别:0-男,1-女' AFTER `applicant_name`,
|
||||
ADD COLUMN `birth_date` date DEFAULT NULL COMMENT '出生日期' AFTER `gender`,
|
||||
ADD COLUMN `political_status` varchar(20) DEFAULT NULL COMMENT '政治面貌' AFTER `birth_date`,
|
||||
ADD COLUMN `professional_title` varchar(100) DEFAULT NULL COMMENT '职称' AFTER `political_status`,
|
||||
ADD COLUMN `position` varchar(100) DEFAULT NULL COMMENT '职务' AFTER `professional_title`,
|
||||
ADD COLUMN `document_name` varchar(100) DEFAULT NULL COMMENT '申领证件名称' AFTER `position`,
|
||||
ADD COLUMN `document_number` varchar(100) DEFAULT NULL COMMENT '证件号码' AFTER `document_name`,
|
||||
ADD COLUMN `department` varchar(200) DEFAULT NULL COMMENT '部门' AFTER `document_number`;
|
||||
|
||||
-- 验证修复结果(字段数量应该是47)
|
||||
SELECT COUNT(*) AS '字段数量' FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'rs_overseas_itinerary_change';
|
||||
|
||||
-- 查看新添加的字段
|
||||
SHOW COLUMNS FROM rs_overseas_itinerary_change WHERE Field IN (
|
||||
'gender', 'birth_date', 'political_status', 'professional_title',
|
||||
'position', 'document_name', 'document_number', 'department'
|
||||
);
|
||||
|
||||
-- ✅ 修复完成!下一步:重启后端服务
|
||||
|
||||
@@ -0,0 +1,96 @@
|
||||
-- ⚡ 智能修复:只添加缺失的个人信息字段
|
||||
-- 跳过已存在的字段,只添加缺失的字段
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- 添加 gender 字段(如果不存在)
|
||||
SET @sql = (SELECT IF(
|
||||
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg' AND TABLE_NAME = 'rs_overseas_itinerary_change' AND COLUMN_NAME = 'gender') = 0,
|
||||
'ALTER TABLE rs_overseas_itinerary_change ADD COLUMN `gender` char(1) DEFAULT NULL COMMENT ''性别:0-男,1-女'' AFTER `applicant_name`;',
|
||||
'SELECT ''字段 gender 已存在,跳过'' AS result;'
|
||||
));
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 添加 birth_date 字段(如果不存在)
|
||||
SET @sql = (SELECT IF(
|
||||
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg' AND TABLE_NAME = 'rs_overseas_itinerary_change' AND COLUMN_NAME = 'birth_date') = 0,
|
||||
'ALTER TABLE rs_overseas_itinerary_change ADD COLUMN `birth_date` date DEFAULT NULL COMMENT ''出生日期'' AFTER `gender`;',
|
||||
'SELECT ''字段 birth_date 已存在,跳过'' AS result;'
|
||||
));
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 添加 political_status 字段(如果不存在)
|
||||
SET @sql = (SELECT IF(
|
||||
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg' AND TABLE_NAME = 'rs_overseas_itinerary_change' AND COLUMN_NAME = 'political_status') = 0,
|
||||
'ALTER TABLE rs_overseas_itinerary_change ADD COLUMN `political_status` varchar(20) DEFAULT NULL COMMENT ''政治面貌'' AFTER `birth_date`;',
|
||||
'SELECT ''字段 political_status 已存在,跳过'' AS result;'
|
||||
));
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 添加 professional_title 字段(如果不存在)
|
||||
SET @sql = (SELECT IF(
|
||||
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg' AND TABLE_NAME = 'rs_overseas_itinerary_change' AND COLUMN_NAME = 'professional_title') = 0,
|
||||
'ALTER TABLE rs_overseas_itinerary_change ADD COLUMN `professional_title` varchar(100) DEFAULT NULL COMMENT ''职称'' AFTER `political_status`;',
|
||||
'SELECT ''字段 professional_title 已存在,跳过'' AS result;'
|
||||
));
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 添加 position 字段(如果不存在)
|
||||
SET @sql = (SELECT IF(
|
||||
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg' AND TABLE_NAME = 'rs_overseas_itinerary_change' AND COLUMN_NAME = 'position') = 0,
|
||||
'ALTER TABLE rs_overseas_itinerary_change ADD COLUMN `position` varchar(100) DEFAULT NULL COMMENT ''职务'' AFTER `professional_title`;',
|
||||
'SELECT ''字段 position 已存在,跳过'' AS result;'
|
||||
));
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 添加 document_name 字段(如果不存在)
|
||||
SET @sql = (SELECT IF(
|
||||
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg' AND TABLE_NAME = 'rs_overseas_itinerary_change' AND COLUMN_NAME = 'document_name') = 0,
|
||||
'ALTER TABLE rs_overseas_itinerary_change ADD COLUMN `document_name` varchar(100) DEFAULT NULL COMMENT ''申领证件名称'' AFTER `position`;',
|
||||
'SELECT ''字段 document_name 已存在,跳过'' AS result;'
|
||||
));
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 添加 document_number 字段(如果不存在)
|
||||
SET @sql = (SELECT IF(
|
||||
(SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg' AND TABLE_NAME = 'rs_overseas_itinerary_change' AND COLUMN_NAME = 'document_number') = 0,
|
||||
'ALTER TABLE rs_overseas_itinerary_change ADD COLUMN `document_number` varchar(100) DEFAULT NULL COMMENT ''证件号码'' AFTER `document_name`;',
|
||||
'SELECT ''字段 document_number 已存在,跳过'' AS result;'
|
||||
));
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- department 字段已存在,跳过
|
||||
|
||||
-- 验证修复结果(字段数量应该是47)
|
||||
SELECT COUNT(*) AS '字段数量' FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg' AND TABLE_NAME = 'rs_overseas_itinerary_change';
|
||||
|
||||
-- 查看所有字段
|
||||
SELECT COLUMN_NAME AS '字段名', COLUMN_TYPE AS '类型', COLUMN_COMMENT AS '注释'
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg' AND TABLE_NAME = 'rs_overseas_itinerary_change'
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
|
||||
-- ✅ 修复完成!下一步:重启后端服务
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
-- ============================================================
|
||||
-- 🔴 紧急修复:出国登记表 political_status 字段长度不足
|
||||
-- 创建时间: 2025-10-05
|
||||
-- 问题: Data too long for column 'political_status' at row 1
|
||||
-- 原因: 字段长度不足以存储完整的政治面貌文本
|
||||
-- ============================================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- ============================================================
|
||||
-- 第一步:备份现有数据(安全起见)
|
||||
-- ============================================================
|
||||
|
||||
-- 创建备份表(如果不存在)
|
||||
CREATE TABLE IF NOT EXISTS rs_overseas_registration_backup_20251005
|
||||
SELECT * FROM rs_overseas_registration;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS rs_overseas_application_backup_20251005
|
||||
SELECT * FROM rs_overseas_application;
|
||||
|
||||
-- ============================================================
|
||||
-- 第二步:修改字段长度
|
||||
-- ============================================================
|
||||
|
||||
-- 修改出国登记表的 political_status 字段
|
||||
ALTER TABLE `rs_overseas_registration`
|
||||
MODIFY COLUMN `political_status` varchar(50) NOT NULL COMMENT '政治面貌';
|
||||
|
||||
-- 修改出国申请表的 political_status 字段(保持一致)
|
||||
ALTER TABLE `rs_overseas_application`
|
||||
MODIFY COLUMN `political_status` varchar(50) NOT NULL COMMENT '政治面貌';
|
||||
|
||||
-- ============================================================
|
||||
-- 第三步:验证修改结果
|
||||
-- ============================================================
|
||||
|
||||
SELECT
|
||||
'✅ 字段修改验证' as '步骤',
|
||||
TABLE_NAME as '表名',
|
||||
COLUMN_NAME as '字段名',
|
||||
DATA_TYPE as '数据类型',
|
||||
CHARACTER_MAXIMUM_LENGTH as '最大长度',
|
||||
COLUMN_COMMENT as '注释'
|
||||
FROM
|
||||
information_schema.COLUMNS
|
||||
WHERE
|
||||
TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME IN ('rs_overseas_registration', 'rs_overseas_application')
|
||||
AND COLUMN_NAME = 'political_status';
|
||||
|
||||
-- ============================================================
|
||||
-- 预期结果
|
||||
-- ============================================================
|
||||
-- TABLE_NAME | COLUMN_NAME | DATA_TYPE | CHARACTER_MAXIMUM_LENGTH
|
||||
-- ----------------------------|------------------|-----------|------------------------
|
||||
-- rs_overseas_registration | political_status | varchar | 50
|
||||
-- rs_overseas_application | political_status | varchar | 50
|
||||
|
||||
-- ============================================================
|
||||
-- 执行说明
|
||||
-- ============================================================
|
||||
-- 1. 直接执行本脚本即可完成修复
|
||||
-- 2. 执行时间约1-2秒(取决于表中数据量)
|
||||
-- 3. ALTER TABLE不会丢失现有数据
|
||||
-- 4. 已自动创建备份表,可随时回滚
|
||||
-- 5. 修复完成后请测试"新增出国登记"功能
|
||||
|
||||
-- ============================================================
|
||||
-- 问题分析
|
||||
-- ============================================================
|
||||
-- 原字段: char(2) 或 varchar(20)
|
||||
-- 前端传值: 完整中文文本(如"中共党员")
|
||||
-- UTF-8编码: 4个中文字符 = 12字节
|
||||
-- 结论: char(2)完全无法存储,varchar(20)也不够安全
|
||||
-- 修复: varchar(50) 可以存储最长16个中文字符,满足需求
|
||||
@@ -0,0 +1,18 @@
|
||||
-- ==========================================
|
||||
-- 添加OSS ID字段到出国申请表
|
||||
-- 用于支持安全的文件下载功能
|
||||
-- ==========================================
|
||||
|
||||
-- 添加盖章文件OSS ID字段
|
||||
ALTER TABLE `rs_overseas_application`
|
||||
ADD COLUMN `stamped_file_oss_id` BIGINT(20) NULL COMMENT '盖章文件OSS ID' AFTER `stamped_file_upload_status`;
|
||||
|
||||
-- 添加党籍保留附件OSS ID字段
|
||||
ALTER TABLE `rs_overseas_application`
|
||||
ADD COLUMN `party_retention_file_oss_id` BIGINT(20) NULL COMMENT '党籍保留附件OSS ID' AFTER `party_retention_upload_status`;
|
||||
|
||||
-- 添加索引以提升查询性能
|
||||
ALTER TABLE `rs_overseas_application`
|
||||
ADD INDEX `idx_stamped_file_oss_id` (`stamped_file_oss_id`),
|
||||
ADD INDEX `idx_party_retention_file_oss_id` (`party_retention_file_oss_id`);
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
-- ============================================================
|
||||
-- 数据库迁移脚本:为出国申请表添加党籍保留附件字段
|
||||
-- ============================================================
|
||||
-- 创建时间:2025-10-10
|
||||
-- 说明:为支持党籍保留附件上传功能,在 rs_overseas_application 表中添加4个字段
|
||||
-- 执行方式:直接在生产数据库执行
|
||||
-- ============================================================
|
||||
|
||||
USE hzdyjs_xg;
|
||||
|
||||
-- 检查字段是否已存在,如果不存在则添加
|
||||
SET @dbname = DATABASE();
|
||||
SET @tablename = 'rs_overseas_application';
|
||||
|
||||
-- 添加党籍保留附件文件路径
|
||||
SET @column_check = (
|
||||
SELECT COUNT(*)
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = @dbname
|
||||
AND TABLE_NAME = @tablename
|
||||
AND COLUMN_NAME = 'party_retention_file_path'
|
||||
);
|
||||
|
||||
SET @sql = IF(@column_check = 0,
|
||||
'ALTER TABLE rs_overseas_application ADD COLUMN party_retention_file_path VARCHAR(500) DEFAULT NULL COMMENT ''党籍保留附件文件路径'' AFTER stamped_file_upload_status',
|
||||
'SELECT ''字段 party_retention_file_path 已存在,跳过添加'' AS result'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 添加党籍保留附件文件名
|
||||
SET @column_check = (
|
||||
SELECT COUNT(*)
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = @dbname
|
||||
AND TABLE_NAME = @tablename
|
||||
AND COLUMN_NAME = 'party_retention_file_name'
|
||||
);
|
||||
|
||||
SET @sql = IF(@column_check = 0,
|
||||
'ALTER TABLE rs_overseas_application ADD COLUMN party_retention_file_name VARCHAR(200) DEFAULT NULL COMMENT ''党籍保留附件文件名'' AFTER party_retention_file_path',
|
||||
'SELECT ''字段 party_retention_file_name 已存在,跳过添加'' AS result'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 添加党籍保留附件上传时间
|
||||
SET @column_check = (
|
||||
SELECT COUNT(*)
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = @dbname
|
||||
AND TABLE_NAME = @tablename
|
||||
AND COLUMN_NAME = 'party_retention_upload_time'
|
||||
);
|
||||
|
||||
SET @sql = IF(@column_check = 0,
|
||||
'ALTER TABLE rs_overseas_application ADD COLUMN party_retention_upload_time DATETIME DEFAULT NULL COMMENT ''党籍保留附件上传时间'' AFTER party_retention_file_name',
|
||||
'SELECT ''字段 party_retention_upload_time 已存在,跳过添加'' AS result'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 添加党籍保留附件上传状态
|
||||
SET @column_check = (
|
||||
SELECT COUNT(*)
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = @dbname
|
||||
AND TABLE_NAME = @tablename
|
||||
AND COLUMN_NAME = 'party_retention_upload_status'
|
||||
);
|
||||
|
||||
SET @sql = IF(@column_check = 0,
|
||||
'ALTER TABLE rs_overseas_application ADD COLUMN party_retention_upload_status VARCHAR(1) DEFAULT ''0'' COMMENT ''党籍保留附件上传状态:0-未上传,1-已上传'' AFTER party_retention_upload_time',
|
||||
'SELECT ''字段 party_retention_upload_status 已存在,跳过添加'' AS result'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 验证字段是否添加成功
|
||||
SELECT
|
||||
COLUMN_NAME AS '字段名',
|
||||
COLUMN_TYPE AS '字段类型',
|
||||
COLUMN_DEFAULT AS '默认值',
|
||||
COLUMN_COMMENT AS '备注'
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'rs_overseas_application'
|
||||
AND COLUMN_NAME IN (
|
||||
'party_retention_file_path',
|
||||
'party_retention_file_name',
|
||||
'party_retention_upload_time',
|
||||
'party_retention_upload_status'
|
||||
)
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
|
||||
-- ============================================================
|
||||
-- 执行完成提示
|
||||
-- ============================================================
|
||||
SELECT '党籍保留附件字段添加完成!请检查上方验证结果。' AS '执行结果';
|
||||
|
||||
@@ -0,0 +1,117 @@
|
||||
-- ======================================
|
||||
-- 修复行程变更状态字典编码问题
|
||||
-- ======================================
|
||||
-- 问题描述:字典数据存在双重UTF-8编码,导致前端显示乱码
|
||||
-- 根本原因:插入数据时字符集设置不正确,导致UTF-8数据被当作Latin1存储
|
||||
-- 解决方案:使用正确的字符集连接,重新插入数据
|
||||
-- 执行时间:2025-10-13
|
||||
-- ======================================
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- 步骤1: 删除旧的字典数据
|
||||
DELETE FROM sys_dict_data WHERE dict_type = 'rs_itinerary_change_status';
|
||||
DELETE FROM sys_dict_type WHERE dict_type = 'rs_itinerary_change_status';
|
||||
|
||||
-- 步骤2: 插入字典类型(使用CONVERT确保正确编码)
|
||||
INSERT INTO sys_dict_type (
|
||||
dict_id,
|
||||
tenant_id,
|
||||
dict_name,
|
||||
dict_type,
|
||||
create_dept,
|
||||
create_by,
|
||||
create_time,
|
||||
update_by,
|
||||
update_time,
|
||||
remark
|
||||
) VALUES (
|
||||
3000000000000001018,
|
||||
'000000',
|
||||
CONVERT('行程变更状态' USING utf8mb4),
|
||||
'rs_itinerary_change_status',
|
||||
NULL,
|
||||
0,
|
||||
NOW(),
|
||||
NULL,
|
||||
NULL,
|
||||
CONVERT('出国行程变更申请状态字典' USING utf8mb4)
|
||||
);
|
||||
|
||||
-- 步骤3: 插入字典数据(使用CONVERT确保正确编码)
|
||||
INSERT INTO sys_dict_data (
|
||||
dict_code,
|
||||
tenant_id,
|
||||
dict_sort,
|
||||
dict_label,
|
||||
dict_value,
|
||||
dict_type,
|
||||
css_class,
|
||||
list_class,
|
||||
is_default,
|
||||
create_dept,
|
||||
create_by,
|
||||
create_time,
|
||||
update_by,
|
||||
update_time,
|
||||
remark
|
||||
) VALUES
|
||||
(3000000000000002069, '000000', 0, CONVERT('待审核' USING utf8mb4), '0', 'rs_itinerary_change_status', '', 'primary', 'N', NULL, 0, NOW(), NULL, NULL, CONVERT('待审核状态' USING utf8mb4)),
|
||||
(3000000000000002070, '000000', 1, CONVERT('已通过' USING utf8mb4), '1', 'rs_itinerary_change_status', '', 'success', 'N', NULL, 0, NOW(), NULL, NULL, CONVERT('已通过状态' USING utf8mb4)),
|
||||
(3000000000000002071, '000000', 2, CONVERT('已拒绝' USING utf8mb4), '2', 'rs_itinerary_change_status', '', 'danger', 'N', NULL, 0, NOW(), NULL, NULL, CONVERT('已拒绝状态' USING utf8mb4)),
|
||||
(3000000000000002072, '000000', 3, CONVERT('已撤回' USING utf8mb4), '3', 'rs_itinerary_change_status', '', 'info', 'N', NULL, 0, NOW(), NULL, NULL, CONVERT('已撤回状态' USING utf8mb4));
|
||||
|
||||
-- ======================================
|
||||
-- 验证修复结果
|
||||
-- ======================================
|
||||
|
||||
SELECT '===== 1. 验证字典类型 =====' AS step;
|
||||
SELECT
|
||||
dict_id,
|
||||
dict_name,
|
||||
dict_type,
|
||||
HEX(dict_name) as hex_encoding,
|
||||
LENGTH(dict_name) as byte_length,
|
||||
CHAR_LENGTH(dict_name) as char_length
|
||||
FROM sys_dict_type
|
||||
WHERE dict_type = 'rs_itinerary_change_status';
|
||||
|
||||
SELECT '===== 2. 验证字典数据 =====' AS step;
|
||||
SELECT
|
||||
dict_code,
|
||||
dict_label,
|
||||
dict_value,
|
||||
HEX(dict_label) as hex_encoding,
|
||||
LENGTH(dict_label) as byte_length,
|
||||
CHAR_LENGTH(dict_label) as char_length
|
||||
FROM sys_dict_data
|
||||
WHERE dict_type = 'rs_itinerary_change_status'
|
||||
ORDER BY dict_sort;
|
||||
|
||||
SELECT '===== 3. 测试字典关联查询 =====' AS step;
|
||||
SELECT
|
||||
c.change_id,
|
||||
c.applicant_name,
|
||||
c.status as status_value,
|
||||
d.dict_label as status_text
|
||||
FROM rs_overseas_itinerary_change c
|
||||
LEFT JOIN sys_dict_data d
|
||||
ON d.dict_value = c.status
|
||||
AND d.dict_type = 'rs_itinerary_change_status'
|
||||
WHERE c.deleted = 0
|
||||
LIMIT 3;
|
||||
|
||||
-- ======================================
|
||||
-- 预期结果说明
|
||||
-- ======================================
|
||||
-- 1. HEX编码应该是正确的UTF-8编码,例如:
|
||||
-- "待审核" = E5BE85E5AEA1E6A0B8
|
||||
-- "已通过" = E5B7B2E9809AE8BF87
|
||||
-- "已拒绝" = E5B7B2E68B92E7BB9D
|
||||
-- "已撤回" = E5B7B2E692A4E59B9E
|
||||
--
|
||||
-- 2. byte_length应该是char_length的3倍(UTF-8中文字符占3字节)
|
||||
--
|
||||
-- 3. 字典关联查询应该正确返回status_text中文文本
|
||||
-- ======================================
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
-- ============================================================
|
||||
-- 修复出国登记表 political_status 字段长度
|
||||
-- 创建时间: 2025-10-04
|
||||
-- 问题描述: 字段长度不足,导致插入数据时报错
|
||||
-- 原长度: varchar(20)
|
||||
-- 新长度: varchar(50)
|
||||
-- ============================================================
|
||||
|
||||
-- 修改 rs_overseas_registration 表的 political_status 字段长度
|
||||
ALTER TABLE `rs_overseas_registration`
|
||||
MODIFY COLUMN `political_status` varchar(50) NOT NULL COMMENT '政治面貌';
|
||||
|
||||
-- 验证修改
|
||||
SELECT
|
||||
TABLE_NAME,
|
||||
COLUMN_NAME,
|
||||
DATA_TYPE,
|
||||
CHARACTER_MAXIMUM_LENGTH,
|
||||
COLUMN_COMMENT
|
||||
FROM
|
||||
information_schema.COLUMNS
|
||||
WHERE
|
||||
TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'rs_overseas_registration'
|
||||
AND COLUMN_NAME = 'political_status';
|
||||
|
||||
-- ============================================================
|
||||
-- 同步修改出国申请表(如果需要的话)
|
||||
-- ============================================================
|
||||
|
||||
-- 修改 rs_overseas_application 表的 political_status 字段长度
|
||||
ALTER TABLE `rs_overseas_application`
|
||||
MODIFY COLUMN `political_status` varchar(50) NOT NULL COMMENT '政治面貌(字典值1-13)';
|
||||
|
||||
-- 验证修改
|
||||
SELECT
|
||||
TABLE_NAME,
|
||||
COLUMN_NAME,
|
||||
DATA_TYPE,
|
||||
CHARACTER_MAXIMUM_LENGTH,
|
||||
COLUMN_COMMENT
|
||||
FROM
|
||||
information_schema.COLUMNS
|
||||
WHERE
|
||||
TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'rs_overseas_application'
|
||||
AND COLUMN_NAME = 'political_status';
|
||||
|
||||
-- ============================================================
|
||||
-- 政治面貌字典数据统计
|
||||
-- ============================================================
|
||||
|
||||
-- 查看政治面貌字典中最长的标签
|
||||
SELECT
|
||||
dict_label,
|
||||
dict_value,
|
||||
LENGTH(dict_label) as label_length,
|
||||
CHAR_LENGTH(dict_label) as char_count
|
||||
FROM
|
||||
sys_dict_data
|
||||
WHERE
|
||||
dict_type = 'xg_political_status'
|
||||
ORDER BY
|
||||
LENGTH(dict_label) DESC;
|
||||
|
||||
-- ============================================================
|
||||
-- 问题分析
|
||||
-- ============================================================
|
||||
-- 1. 原字段长度: varchar(20) - 最多20个字节
|
||||
-- 2. 中文字符编码: UTF-8,每个中文字符占3个字节
|
||||
-- 3. 最长标签: "中国国民党革命委员会会员" = 13个中文字符 = 39字节
|
||||
-- 4. 结论: varchar(20)远远不够,需要至少varchar(40),为安全起见设为varchar(50)
|
||||
|
||||
-- ============================================================
|
||||
-- 字典数据长度对比
|
||||
-- ============================================================
|
||||
-- 字典标签 | 字符数 | 字节数(UTF-8)
|
||||
-- ----------------------------|--------|-------------
|
||||
-- 中国国民党革命委员会会员 | 13 | 39
|
||||
-- 中国共产主义青年团团员 | 12 | 36
|
||||
-- 台湾民主自治同盟盟员 | 11 | 33
|
||||
-- 中国民主建国会会员 | 10 | 30
|
||||
-- 中国民主促进会会员 | 10 | 30
|
||||
-- 中国农工民主党党员 | 10 | 30
|
||||
-- 中国共产党预备党员 | 9 | 27
|
||||
-- 中国民主同盟盟员 | 8 | 24
|
||||
-- 中国共产党党员 | 7 | 21 ⚠️ 超过varchar(20)
|
||||
-- 中国致公党党员 | 7 | 21 ⚠️ 超过varchar(20)
|
||||
-- 九三学社社员 | 6 | 18
|
||||
-- 无党派民主人士 | 7 | 21 ⚠️ 超过varchar(20)
|
||||
-- 群众 | 2 | 6
|
||||
|
||||
|
||||
@@ -0,0 +1,524 @@
|
||||
# 出国管理三表架构设计方案
|
||||
|
||||
**文档版本**: v1.0
|
||||
**创建日期**: 2025-09-30
|
||||
**更新日期**: 2025-09-30
|
||||
**设计原则**: 三表独立 + 流程递进 + 状态关联
|
||||
|
||||
---
|
||||
|
||||
## 📋 业务背景
|
||||
|
||||
出国管理系统涉及**三个独立的业务流程**:
|
||||
|
||||
1. **出国申请** → 教职工因私出国的初始申请
|
||||
2. **出国登记** → 申请通过后的登记备案
|
||||
3. **出国党籍保留** → 党员出国超过1个月需办理党籍保留
|
||||
|
||||
### 业务关系
|
||||
|
||||
```
|
||||
┌──────────────┐ ┌──────────────┐ ┌──────────────────┐
|
||||
│ 出国申请 │ ───> │ 出国登记 │ ───> │ 出国党籍保留 │
|
||||
│ (必须先办理) │ │ (申请通过后) │ │ (党员且>1个月) │
|
||||
└──────────────┘ └──────────────┘ └──────────────────┘
|
||||
状态:已审批 ───> 状态:已确认 ───> 状态:已批准
|
||||
```
|
||||
|
||||
### 递进规则
|
||||
|
||||
- ✅ **出国登记**: 必须基于**已审批通过**的出国申请
|
||||
- ✅ **出国党籍保留**: 必须基于**已确认**的出国登记
|
||||
- ✅ 每个流程都有独立的ID和审批状态
|
||||
- ✅ 通过关联字段判断前置流程完成情况
|
||||
|
||||
---
|
||||
|
||||
## 🗂️ 三表设计总览
|
||||
|
||||
| 表名 | 中文名 | 主键 | 关联字段 | 前置条件 |
|
||||
|------|--------|------|----------|----------|
|
||||
| `rs_overseas_application` | 出国申请表 | application_id | - | 无 |
|
||||
| `rs_overseas_registration` | 出国登记表 | registration_id | application_id | 申请已审批 |
|
||||
| `rs_party_membership_retention` | 出国党籍保留表 | retention_id | application_id, registration_id | 登记已确认 |
|
||||
|
||||
---
|
||||
|
||||
## 📊 表一:出国申请表 (rs_overseas_application)
|
||||
|
||||
### 表结构概述
|
||||
- **表名**: `rs_overseas_application`
|
||||
- **主键**: `application_id` bigint(20)
|
||||
- **字段数量**: 30个 (23个业务字段 + 7个系统字段)
|
||||
- **状态字典**: `rs_overseas_application_status`
|
||||
|
||||
### 完整字段列表
|
||||
|
||||
#### 1. 主键字段
|
||||
```sql
|
||||
application_id bigint(20) NOT NULL AUTO_INCREMENT -- 申请ID(主键)
|
||||
```
|
||||
|
||||
#### 2. 基本信息字段 (6个)
|
||||
```sql
|
||||
applicant_name varchar(50) NOT NULL -- 申请人姓名
|
||||
gender char(1) NOT NULL -- 性别:0-男,1-女
|
||||
birth_date date NULL -- 出生年月
|
||||
political_status varchar(20) NOT NULL -- 政治面貌(字典值1-13)
|
||||
department varchar(100) NOT NULL -- 现工作部门
|
||||
position varchar(100) NULL -- 职务
|
||||
```
|
||||
|
||||
#### 3. 职业信息字段 (1个)
|
||||
```sql
|
||||
professional_title varchar(100) NULL -- 职称
|
||||
```
|
||||
|
||||
#### 4. 证件信息字段 (2个)
|
||||
```sql
|
||||
document_name varchar(100) NULL -- 申领证件名称
|
||||
document_number varchar(100) NULL -- 证件号码
|
||||
```
|
||||
|
||||
#### 5. 出国信息字段 (5个)
|
||||
```sql
|
||||
destination_country varchar(100) NOT NULL -- 前往国家
|
||||
exit_reason varchar(50) NOT NULL -- 出境事由:旅游、探亲
|
||||
visit_relationship varchar(200) NULL -- 探望对象关系(仅探亲时填写)
|
||||
start_date date NOT NULL -- 出发日期
|
||||
end_date date NOT NULL -- 返回日期
|
||||
```
|
||||
|
||||
#### 6. 计算字段 (1个)
|
||||
```sql
|
||||
duration int(11) NULL -- 出国天数(自动计算)
|
||||
```
|
||||
|
||||
#### 7. 联系信息字段 (2个)
|
||||
```sql
|
||||
mobile_phone varchar(20) NULL -- 联系电话
|
||||
emergency_contact varchar(100) NULL -- 应急联系人及电话
|
||||
```
|
||||
|
||||
#### 8. 签名和备注字段 (2个)
|
||||
```sql
|
||||
signature text NULL -- 手写签名(Base64)
|
||||
remarks text NULL -- 备注
|
||||
```
|
||||
|
||||
#### 9. 文件上传字段 (3个)
|
||||
```sql
|
||||
stamped_file_path varchar(500) NULL -- 盖章文件路径
|
||||
stamped_file_name varchar(200) NULL -- 盖章文件名称
|
||||
stamped_file_upload_time datetime NULL -- 盖章文件上传时间
|
||||
```
|
||||
|
||||
#### 10. 状态和时间字段 (2个)
|
||||
```sql
|
||||
status char(1) NOT NULL DEFAULT '0' -- 申请状态
|
||||
apply_time datetime NULL -- 申请时间
|
||||
```
|
||||
|
||||
#### 11. 系统字段 (7个)
|
||||
```sql
|
||||
tenant_id varchar(20) DEFAULT '000000' -- 租户编号
|
||||
deleted char(1) DEFAULT '0' -- 删除标志
|
||||
create_dept bigint(20) NULL -- 创建部门
|
||||
create_by bigint(20) NULL -- 创建者
|
||||
create_time datetime NULL -- 创建时间
|
||||
update_by bigint(20) NULL -- 更新者
|
||||
update_time datetime NULL -- 更新时间
|
||||
```
|
||||
|
||||
### 状态定义
|
||||
```sql
|
||||
-- 申请状态字典 (rs_overseas_application_status)
|
||||
'0' - 待审核 (info) -- 已提交,等待审批
|
||||
'1' - 已通过 (success) -- 审批通过,可生成登记表
|
||||
'2' - 已拒绝 (danger) -- 审批拒绝
|
||||
'3' - 已取消 (warning) -- 用户主动取消
|
||||
```
|
||||
|
||||
### 索引设计
|
||||
```sql
|
||||
PRIMARY KEY (application_id)
|
||||
INDEX idx_applicant_name (applicant_name)
|
||||
INDEX idx_department (department)
|
||||
INDEX idx_status (status)
|
||||
INDEX idx_apply_time (apply_time)
|
||||
INDEX idx_tenant_deleted (tenant_id, deleted)
|
||||
INDEX idx_create_time (create_time)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 表二:出国登记表 (rs_overseas_registration)
|
||||
|
||||
### 表结构概述
|
||||
- **表名**: `rs_overseas_registration`
|
||||
- **主键**: `registration_id` bigint(20)
|
||||
- **关联字段**: `application_id` (关联出国申请)
|
||||
- **字段数量**: 22个 (15个业务字段 + 7个系统字段)
|
||||
- **状态字典**: `rs_overseas_registration_status`
|
||||
|
||||
### 完整字段列表
|
||||
|
||||
#### 1. 主键和关联字段 (2个)
|
||||
```sql
|
||||
registration_id bigint(20) NOT NULL AUTO_INCREMENT -- 登记ID(主键)
|
||||
application_id bigint(20) NULL -- 关联出国申请ID(可为空)
|
||||
```
|
||||
|
||||
#### 2. 基本信息字段 (7个)
|
||||
```sql
|
||||
name varchar(50) NOT NULL -- 姓名
|
||||
gender char(1) NOT NULL -- 性别:0-男,1-女
|
||||
birth_date date NOT NULL -- 出生日期
|
||||
photo varchar(500) NULL -- 照片地址(预留区域)
|
||||
id_number varchar(18) NOT NULL -- 公民身份号码
|
||||
political_status varchar(20) NOT NULL -- 政治面貌
|
||||
registered_address varchar(200) NOT NULL -- 户籍所在地
|
||||
```
|
||||
|
||||
#### 3. 工作信息字段 (4个)
|
||||
```sql
|
||||
department varchar(100) NOT NULL -- 工作部门
|
||||
position varchar(100) NOT NULL -- 职务职称
|
||||
administrative_level varchar(20) NULL -- 行政职级
|
||||
personnel_category varchar(10) NULL -- 人员类别代码
|
||||
```
|
||||
|
||||
#### 4. 状态和时间字段 (2个)
|
||||
```sql
|
||||
status char(1) NOT NULL DEFAULT '0' -- 登记状态
|
||||
registration_time datetime NULL -- 登记时间
|
||||
```
|
||||
|
||||
#### 5. 备注字段 (1个)
|
||||
```sql
|
||||
remarks text NULL -- 备注
|
||||
```
|
||||
|
||||
#### 6. 系统字段 (7个)
|
||||
```sql
|
||||
tenant_id varchar(20) DEFAULT '000000'
|
||||
deleted char(1) DEFAULT '0'
|
||||
create_dept bigint(20) NULL
|
||||
create_by bigint(20) NULL
|
||||
create_time datetime NULL
|
||||
update_by bigint(20) NULL
|
||||
update_time datetime NULL
|
||||
```
|
||||
|
||||
### 状态定义
|
||||
```sql
|
||||
-- 登记状态字典 (rs_overseas_registration_status)
|
||||
'0' - 草稿 (info) -- 初始创建状态,可编辑
|
||||
'1' - 已提交 (warning) -- 提交后等待确认
|
||||
'2' - 已确认 (success) -- 管理员确认,可生成证明
|
||||
'3' - 已撤回 (danger) -- 用户主动撤回
|
||||
```
|
||||
|
||||
### 索引设计
|
||||
```sql
|
||||
PRIMARY KEY (registration_id)
|
||||
INDEX idx_application_id (application_id) -- 关联查询
|
||||
INDEX idx_name (name)
|
||||
INDEX idx_id_number (id_number)
|
||||
INDEX idx_department (department)
|
||||
INDEX idx_status (status)
|
||||
INDEX idx_registration_time (registration_time)
|
||||
INDEX idx_tenant_deleted (tenant_id, deleted)
|
||||
INDEX idx_create_time (create_time)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 表三:出国党籍保留表 (rs_party_membership_retention)
|
||||
|
||||
### 表结构概述
|
||||
- **表名**: `rs_party_membership_retention`
|
||||
- **主键**: `retention_id` bigint(20)
|
||||
- **关联字段**: `application_id`、`registration_id`
|
||||
- **字段数量**: 25个 (18个业务字段 + 7个系统字段)
|
||||
- **状态字典**: `rs_party_retention_status`
|
||||
|
||||
### 完整字段列表
|
||||
|
||||
#### 1. 主键和关联字段 (3个)
|
||||
```sql
|
||||
retention_id bigint(20) NOT NULL AUTO_INCREMENT -- 党籍保留ID(主键)
|
||||
application_id bigint(20) NULL -- 关联出国申请ID
|
||||
registration_id bigint(20) NULL -- 关联出国登记ID
|
||||
```
|
||||
|
||||
#### 2. 基本信息字段 (2个)
|
||||
```sql
|
||||
name varchar(50) NOT NULL -- 我支部同志(姓名)
|
||||
spouse varchar(50) NULL -- 偕配偶姓名
|
||||
```
|
||||
|
||||
#### 3. 出国时间字段 (3个)
|
||||
```sql
|
||||
travel_start_date date NOT NULL -- 拟出国开始日期
|
||||
travel_end_date date NOT NULL -- 拟出国结束日期
|
||||
stay_days int(11) NULL -- 在外停留天数
|
||||
```
|
||||
|
||||
#### 4. 出国目的和地点字段 (3个)
|
||||
```sql
|
||||
destination varchar(100) NOT NULL -- 因私赴XX(国家或地区)
|
||||
purpose text NULL -- 出国目的详细说明
|
||||
travel_reason varchar(50) NULL -- 出国原因(简要)
|
||||
```
|
||||
|
||||
#### 5. 费用信息字段 (1个)
|
||||
```sql
|
||||
self_funded char(1) NOT NULL DEFAULT '1' -- 费用自理:1-是,0-否
|
||||
```
|
||||
|
||||
#### 6. 审批信息字段 (2个)
|
||||
```sql
|
||||
request_approval text NULL -- 请求批准说明(固定文本)
|
||||
final_approval text NULL -- 妥否请审批(固定文本)
|
||||
```
|
||||
|
||||
#### 7. 党支部信息字段 (2个)
|
||||
```sql
|
||||
party_branch varchar(100) NOT NULL -- XXXX党支部
|
||||
application_date date NOT NULL -- 申请日期
|
||||
```
|
||||
|
||||
#### 8. 状态和时间字段 (2个)
|
||||
```sql
|
||||
status char(1) NOT NULL DEFAULT '0' -- 申请状态
|
||||
application_time datetime NULL -- 申请时间
|
||||
```
|
||||
|
||||
#### 9. 备注字段 (1个)
|
||||
```sql
|
||||
remarks text NULL -- 备注
|
||||
```
|
||||
|
||||
#### 10. 系统字段 (7个)
|
||||
```sql
|
||||
tenant_id varchar(20) DEFAULT '000000'
|
||||
deleted char(1) DEFAULT '0'
|
||||
create_dept bigint(20) NULL
|
||||
create_by bigint(20) NULL
|
||||
create_time datetime NULL
|
||||
update_by bigint(20) NULL
|
||||
update_time datetime NULL
|
||||
```
|
||||
|
||||
### 状态定义
|
||||
```sql
|
||||
-- 党籍保留状态字典 (rs_party_retention_status)
|
||||
'0' - 草稿 (info) -- 初始创建状态,可编辑
|
||||
'1' - 已提交 (warning) -- 提交后等待审批
|
||||
'2' - 已批准 (success) -- 党支部批准
|
||||
'3' - 已拒绝 (danger) -- 审批拒绝
|
||||
'4' - 已撤回 (warning) -- 用户主动撤回
|
||||
```
|
||||
|
||||
### 索引设计
|
||||
```sql
|
||||
PRIMARY KEY (retention_id)
|
||||
INDEX idx_application_id (application_id)
|
||||
INDEX idx_registration_id (registration_id)
|
||||
INDEX idx_name (name)
|
||||
INDEX idx_destination (destination)
|
||||
INDEX idx_status (status)
|
||||
INDEX idx_application_time (application_time)
|
||||
INDEX idx_tenant_deleted (tenant_id, deleted)
|
||||
INDEX idx_create_time (create_time)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔗 流程递进关系设计
|
||||
|
||||
### 1. 关联关系图
|
||||
|
||||
```
|
||||
rs_overseas_application (出国申请)
|
||||
|
|
||||
| application_id
|
||||
|
|
||||
├──> rs_overseas_registration (出国登记)
|
||||
| |
|
||||
| | registration_id
|
||||
| |
|
||||
| └──> rs_party_membership_retention (党籍保留)
|
||||
| |
|
||||
└─────────────────┘ (同时关联 application_id)
|
||||
```
|
||||
|
||||
### 2. 流程判断逻辑
|
||||
|
||||
#### 出国登记前置条件检查
|
||||
```sql
|
||||
-- 检查是否可以创建出国登记
|
||||
SELECT
|
||||
application_id,
|
||||
applicant_name,
|
||||
status,
|
||||
CASE
|
||||
WHEN status = '1' THEN '可以创建登记'
|
||||
ELSE '申请未通过审批'
|
||||
END AS can_create_registration
|
||||
FROM rs_overseas_application
|
||||
WHERE application_id = ?
|
||||
AND status = '1' -- 必须是已通过状态
|
||||
AND deleted = '0';
|
||||
```
|
||||
|
||||
#### 出国党籍保留前置条件检查
|
||||
```sql
|
||||
-- 检查是否可以创建党籍保留
|
||||
SELECT
|
||||
reg.registration_id,
|
||||
reg.name,
|
||||
reg.status AS registration_status,
|
||||
app.political_status,
|
||||
DATEDIFF(app.end_date, app.start_date) AS travel_days,
|
||||
CASE
|
||||
WHEN reg.status = '2'
|
||||
AND app.political_status IN ('1', '2') -- 党员或预备党员
|
||||
AND DATEDIFF(app.end_date, app.start_date) >= 30 -- 超过30天
|
||||
THEN '可以创建党籍保留'
|
||||
WHEN reg.status != '2' THEN '登记未确认'
|
||||
WHEN app.political_status NOT IN ('1', '2') THEN '非党员无需办理'
|
||||
WHEN DATEDIFF(app.end_date, app.start_date) < 30 THEN '出国时间不足30天'
|
||||
ELSE '不符合条件'
|
||||
END AS can_create_retention
|
||||
FROM rs_overseas_registration reg
|
||||
INNER JOIN rs_overseas_application app ON reg.application_id = app.application_id
|
||||
WHERE reg.registration_id = ?
|
||||
AND reg.deleted = '0'
|
||||
AND app.deleted = '0';
|
||||
```
|
||||
|
||||
### 3. 前端按钮显示逻辑
|
||||
|
||||
#### 出国申请列表按钮显示
|
||||
```javascript
|
||||
// 生成登记表按钮
|
||||
canGenerateRegistration(row) {
|
||||
return row.status === '1' && !row.hasRegistration;
|
||||
}
|
||||
```
|
||||
|
||||
#### 出国登记列表按钮显示
|
||||
```javascript
|
||||
// 生成党籍保留按钮
|
||||
canGenerateRetention(row) {
|
||||
return row.status === '2' // 登记已确认
|
||||
&& row.isPartyMember // 是党员
|
||||
&& row.travelDays >= 30 // 出国时间>=30天
|
||||
&& !row.hasRetention; // 未生成过党籍保留
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 业务规则总结
|
||||
|
||||
### 必须遵守的流程规则
|
||||
|
||||
1. ✅ **出国申请** → 必须先审批通过 (status='1')
|
||||
2. ✅ **出国登记** → 基于已通过的申请,需管理员确认 (status='2')
|
||||
3. ✅ **党籍保留** → 基于已确认的登记,仅党员且出国>=30天
|
||||
|
||||
### 数据完整性约束
|
||||
|
||||
1. ✅ 每个表都有独立的主键ID
|
||||
2. ✅ 通过 application_id 关联出国申请
|
||||
3. ✅ 通过 registration_id 关联出国登记
|
||||
4. ✅ 使用逻辑删除,不使用物理删除
|
||||
5. ✅ 所有表支持多租户隔离
|
||||
|
||||
### 状态流转规则
|
||||
|
||||
#### 出国申请状态流转
|
||||
```
|
||||
草稿 → 待审核(0) → 已通过(1) / 已拒绝(2)
|
||||
↓
|
||||
可撤回为已取消(3)
|
||||
```
|
||||
|
||||
#### 出国登记状态流转
|
||||
```
|
||||
草稿(0) → 已提交(1) → 已确认(2)
|
||||
↓
|
||||
可撤回(3)
|
||||
```
|
||||
|
||||
#### 党籍保留状态流转
|
||||
```
|
||||
草稿(0) → 已提交(1) → 已批准(2) / 已拒绝(3)
|
||||
↓
|
||||
可撤回(4)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📝 实施建议
|
||||
|
||||
### 第一步:创建三个表
|
||||
1. ✅ 执行出国申请表创建脚本
|
||||
2. ✅ 执行出国登记表创建脚本
|
||||
3. ⏳ 执行出国党籍保留表创建脚本(待创建)
|
||||
|
||||
### 第二步:插入字典数据
|
||||
1. ✅ `rs_overseas_application_status` (4条)
|
||||
2. ✅ `rs_overseas_registration_status` (4条)
|
||||
3. ⏳ `rs_party_retention_status` (5条)
|
||||
4. ✅ `rs_political_status` (13条 - 共用)
|
||||
|
||||
### 第三步:后端开发
|
||||
1. 为每个表创建独立的实体类、VO、BO
|
||||
2. 实现流程递进判断的Service方法
|
||||
3. 添加关联查询的API接口
|
||||
4. 实现状态流转的业务逻辑
|
||||
|
||||
### 第四步:前端开发
|
||||
1. 三个独立的页面组件
|
||||
2. 实现按钮显示的条件判断
|
||||
3. 添加流程提示信息
|
||||
4. 实现关联数据的展示
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 重要注意事项
|
||||
|
||||
### 数据一致性
|
||||
- 🔴 删除申请时,关联的登记和党籍保留不应被级联删除
|
||||
- 🔴 使用逻辑删除,保留历史数据追溯
|
||||
- 🟡 状态变更需要记录操作日志
|
||||
|
||||
### 性能优化
|
||||
- ✅ 在关联字段上创建索引
|
||||
- ✅ 避免过度的多表JOIN查询
|
||||
- ✅ 使用VO对象返回关联数据
|
||||
|
||||
### 安全性
|
||||
- ✅ 严格的权限控制
|
||||
- ✅ 状态流转的业务校验
|
||||
- ✅ 防止跨租户数据访问
|
||||
|
||||
---
|
||||
|
||||
## 📞 相关文档
|
||||
|
||||
- **数据库规范**: `docs/设计文档/database/mysql-database-standard.md`
|
||||
- **后端开发规范**: `.cursor/cursorrules-backend.md`
|
||||
- **API文档**: `docs/开发文档/API/出国登记管理API.md`
|
||||
- **需求文档**: `docs/需求文档/人事管理/出国申请管理需求.md`
|
||||
|
||||
---
|
||||
|
||||
**文档维护人**: Cursor AI
|
||||
**创建时间**: 2025-09-30
|
||||
**审核状态**: ✅ 设计完成,待实施
|
||||
**下一步**: 创建党籍保留表SQL脚本
|
||||
@@ -0,0 +1,38 @@
|
||||
-- ======================================================
|
||||
-- rs_overseas_record_status_backup 表字符集修复脚本
|
||||
-- ======================================================
|
||||
-- 问题:old_status_text 字段使用了 latin1 字符集,导致中文乱码
|
||||
-- 解决:修改为 utf8mb4 字符集,符合项目数据库规范
|
||||
-- 创建时间:2025-01-08
|
||||
-- ======================================================
|
||||
|
||||
-- 1. 备份表数据(可选,建议在生产环境执行)
|
||||
-- CREATE TABLE rs_overseas_record_status_backup_20250108 AS SELECT * FROM rs_overseas_record_status_backup;
|
||||
|
||||
-- 2. 修复字符集问题
|
||||
ALTER TABLE `rs_overseas_record_status_backup`
|
||||
MODIFY COLUMN `old_status_text` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '原状态文本';
|
||||
|
||||
-- 3. 验证修复结果
|
||||
-- SHOW FULL COLUMNS FROM rs_overseas_record_status_backup;
|
||||
|
||||
-- ======================================================
|
||||
-- 修复后的正确表结构
|
||||
-- ======================================================
|
||||
/*
|
||||
CREATE TABLE `rs_overseas_record_status_backup` (
|
||||
`record_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '记录ID',
|
||||
`completion_status` char(1) DEFAULT '0' COMMENT '完成状态:0-进行中,1-已完成,2-提前结束',
|
||||
`old_status_text` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '原状态文本',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间'
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
|
||||
*/
|
||||
|
||||
-- ======================================================
|
||||
-- 注意事项
|
||||
-- ======================================================
|
||||
-- 1. 修复前建议备份数据
|
||||
-- 2. 如果已有乱码数据,可能需要数据转换
|
||||
-- 3. 修复后需要重新插入中文数据以验证
|
||||
-- ======================================================
|
||||
@@ -0,0 +1,114 @@
|
||||
-- ======================================================
|
||||
-- 数据库字符集检测和验证脚本
|
||||
-- ======================================================
|
||||
-- 用途:检测和验证数据库字符集配置是否符合项目规范
|
||||
-- 创建时间:2025-01-08
|
||||
-- 适用数据库:hzdyjs_xg
|
||||
-- ======================================================
|
||||
|
||||
-- 1. 检查数据库默认字符集
|
||||
-- ======================================================
|
||||
SELECT
|
||||
SCHEMA_NAME as '数据库名',
|
||||
DEFAULT_CHARACTER_SET_NAME as '默认字符集',
|
||||
DEFAULT_COLLATION_NAME as '默认排序规则'
|
||||
FROM INFORMATION_SCHEMA.SCHEMATA
|
||||
WHERE SCHEMA_NAME = 'hzdyjs_xg';
|
||||
|
||||
-- 2. 检查所有非utf8mb4字符集的字段
|
||||
-- ======================================================
|
||||
SELECT
|
||||
TABLE_NAME as '表名',
|
||||
COLUMN_NAME as '字段名',
|
||||
DATA_TYPE as '数据类型',
|
||||
CHARACTER_SET_NAME as '字符集',
|
||||
COLLATION_NAME as '排序规则',
|
||||
COLUMN_COMMENT as '字段注释'
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND CHARACTER_SET_NAME IS NOT NULL
|
||||
AND CHARACTER_SET_NAME != 'utf8mb4'
|
||||
ORDER BY TABLE_NAME, COLUMN_NAME;
|
||||
|
||||
-- 3. 专门检查 rs_overseas_record_status_backup 表
|
||||
-- ======================================================
|
||||
SELECT
|
||||
COLUMN_NAME as '字段名',
|
||||
DATA_TYPE as '数据类型',
|
||||
CHARACTER_MAXIMUM_LENGTH as '最大长度',
|
||||
CHARACTER_SET_NAME as '字符集',
|
||||
COLLATION_NAME as '排序规则',
|
||||
IS_NULLABLE as '可为空',
|
||||
COLUMN_DEFAULT as '默认值',
|
||||
COLUMN_COMMENT as '注释'
|
||||
FROM INFORMATION_SCHEMA.COLUMNS
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'rs_overseas_record_status_backup'
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
|
||||
-- 4. 检查表的默认字符集
|
||||
-- ======================================================
|
||||
SELECT
|
||||
TABLE_NAME as '表名',
|
||||
TABLE_COLLATION as '表排序规则',
|
||||
ENGINE as '存储引擎',
|
||||
TABLE_COMMENT as '表注释'
|
||||
FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE TABLE_SCHEMA = 'hzdyjs_xg'
|
||||
AND TABLE_NAME = 'rs_overseas_record_status_backup';
|
||||
|
||||
-- ======================================================
|
||||
-- 修复后验证脚本
|
||||
-- ======================================================
|
||||
|
||||
-- 5. 验证修复效果 - 中文数据测试
|
||||
-- ======================================================
|
||||
|
||||
-- 5.1 插入中文测试数据
|
||||
INSERT INTO rs_overseas_record_status_backup
|
||||
(record_id, completion_status, old_status_text, create_time)
|
||||
VALUES
|
||||
(999999, '0', '测试中文', NOW()),
|
||||
(999998, '1', '已完成', NOW()),
|
||||
(999997, '2', '提前结束', NOW());
|
||||
|
||||
-- 5.2 查询验证中文显示
|
||||
SELECT
|
||||
record_id as '记录ID',
|
||||
completion_status as '完成状态',
|
||||
old_status_text as '原状态文本',
|
||||
CHAR_LENGTH(old_status_text) as '字符长度',
|
||||
LENGTH(old_status_text) as '字节长度',
|
||||
create_time as '创建时间'
|
||||
FROM rs_overseas_record_status_backup
|
||||
WHERE record_id IN (999999, 999998, 999997)
|
||||
ORDER BY record_id DESC;
|
||||
|
||||
-- 5.3 验证字符编码
|
||||
SELECT
|
||||
old_status_text as '原文',
|
||||
HEX(old_status_text) as '十六进制编码',
|
||||
CHAR_LENGTH(old_status_text) as '字符数',
|
||||
LENGTH(old_status_text) as '字节数'
|
||||
FROM rs_overseas_record_status_backup
|
||||
WHERE record_id = 999999;
|
||||
|
||||
-- 5.4 清理测试数据
|
||||
DELETE FROM rs_overseas_record_status_backup
|
||||
WHERE record_id IN (999999, 999998, 999997);
|
||||
|
||||
-- ======================================================
|
||||
-- 预期验证结果
|
||||
-- ======================================================
|
||||
/*
|
||||
正确的验证结果应该显示:
|
||||
|
||||
1. 字符集检查:old_status_text 字段显示为 utf8mb4
|
||||
2. 中文测试:中文字符正常显示,无乱码
|
||||
3. 字符编码:中文字符的十六进制编码正确(每个中文字符占3字节)
|
||||
|
||||
如果仍有问题,请检查:
|
||||
- 数据库连接字符集配置
|
||||
- 应用程序的字符集配置
|
||||
- 客户端工具的字符集设置
|
||||
*/
|
||||
@@ -0,0 +1,220 @@
|
||||
# 出国行程变更表增加本人基本情况字段 - 执行步骤
|
||||
|
||||
## 📋 快速执行指南
|
||||
|
||||
### 第一步:执行数据库脚本
|
||||
|
||||
1. **连接到MySQL数据库**
|
||||
```bash
|
||||
mysql -u your_username -p your_database_name
|
||||
```
|
||||
|
||||
2. **执行ALTER脚本**
|
||||
```bash
|
||||
source /path/to/rs_overseas_itinerary_change_add_fields.sql
|
||||
```
|
||||
|
||||
或者直接在MySQL客户端中执行SQL:
|
||||
```sql
|
||||
ALTER TABLE `rs_overseas_itinerary_change`
|
||||
ADD COLUMN `gender` char(1) DEFAULT NULL COMMENT '性别:0-男,1-女' AFTER `applicant_name`,
|
||||
ADD COLUMN `birth_date` date DEFAULT NULL COMMENT '出生日期' AFTER `gender`,
|
||||
ADD COLUMN `political_status` varchar(20) DEFAULT NULL COMMENT '政治面貌' AFTER `birth_date`,
|
||||
ADD COLUMN `professional_title` varchar(100) DEFAULT NULL COMMENT '职称' AFTER `political_status`,
|
||||
ADD COLUMN `position` varchar(100) DEFAULT NULL COMMENT '职务' AFTER `professional_title`,
|
||||
ADD COLUMN `document_name` varchar(100) DEFAULT NULL COMMENT '申领证件名称' AFTER `position`,
|
||||
ADD COLUMN `document_number` varchar(100) DEFAULT NULL COMMENT '证件号码' AFTER `document_name`;
|
||||
```
|
||||
|
||||
3. **验证字段添加成功**
|
||||
```sql
|
||||
DESC rs_overseas_itinerary_change;
|
||||
```
|
||||
|
||||
应该能看到以下新字段:
|
||||
- gender
|
||||
- birth_date
|
||||
- political_status
|
||||
- professional_title
|
||||
- position
|
||||
- document_name
|
||||
- document_number
|
||||
|
||||
### 第二步:重启后端服务
|
||||
|
||||
1. **编译后端项目**
|
||||
```bash
|
||||
cd backend
|
||||
mvn clean package
|
||||
```
|
||||
|
||||
2. **重启后端服务**
|
||||
```bash
|
||||
# 根据你的部署方式选择
|
||||
# 方式1: 直接运行
|
||||
java -jar ruoyi-admin/target/ruoyi-admin.jar
|
||||
|
||||
# 方式2: Docker
|
||||
docker-compose restart backend
|
||||
|
||||
# 方式3: systemctl
|
||||
systemctl restart ruoyi
|
||||
```
|
||||
|
||||
### 第三步:重启前端服务
|
||||
|
||||
1. **重新构建前端**
|
||||
```bash
|
||||
cd web
|
||||
npm run build
|
||||
```
|
||||
|
||||
2. **重启前端服务**
|
||||
```bash
|
||||
# 开发环境
|
||||
npm run dev
|
||||
|
||||
# 生产环境
|
||||
systemctl restart nginx
|
||||
```
|
||||
|
||||
### 第四步:验证功能
|
||||
|
||||
1. **登录系统**
|
||||
- 访问前端页面
|
||||
- 使用管理员账号登录
|
||||
|
||||
2. **打开行程变更页面**
|
||||
- 导航:人事管理 → 变更行程 → 变更行程管理
|
||||
|
||||
3. **测试新增功能**
|
||||
- 点击"新增变更申请"
|
||||
- 选择一个已审批通过的出国申请
|
||||
- 检查"一、本人基本情况"部分是否显示了所有新字段:
|
||||
- ✅ 姓名
|
||||
- ✅ 性别
|
||||
- ✅ 出生年月
|
||||
- ✅ 政治面貌
|
||||
- ✅ 职称
|
||||
- ✅ 职务
|
||||
- ✅ 申领证件名称
|
||||
- ✅ 证件号码
|
||||
- ✅ 单位
|
||||
|
||||
4. **测试数据保存**
|
||||
- 填写实际行程情况
|
||||
- 填写变更原因
|
||||
- 提交保存
|
||||
- 查看详情,验证新字段已保存
|
||||
|
||||
## 🔍 常见问题排查
|
||||
|
||||
### 问题1:字段添加失败
|
||||
|
||||
**错误信息**:`Duplicate column name 'gender'`
|
||||
|
||||
**解决方案**:字段已存在,跳过此步骤或先删除字段再添加
|
||||
```sql
|
||||
-- 检查字段是否存在
|
||||
SHOW COLUMNS FROM rs_overseas_itinerary_change LIKE 'gender';
|
||||
|
||||
-- 如果存在且需要重新添加,先删除
|
||||
ALTER TABLE rs_overseas_itinerary_change DROP COLUMN gender;
|
||||
```
|
||||
|
||||
### 问题2:后端启动失败
|
||||
|
||||
**错误信息**:MyBatis映射错误
|
||||
|
||||
**解决方案**:
|
||||
1. 检查实体类字段是否正确添加
|
||||
2. 清理Maven缓存
|
||||
```bash
|
||||
mvn clean
|
||||
rm -rf ~/.m2/repository
|
||||
mvn install
|
||||
```
|
||||
|
||||
### 问题3:前端字段不显示
|
||||
|
||||
**可能原因**:
|
||||
1. 前端缓存未清理
|
||||
2. 类型定义未更新
|
||||
3. 后端未返回新字段
|
||||
|
||||
**解决方案**:
|
||||
```bash
|
||||
# 清理前端缓存
|
||||
cd web
|
||||
rm -rf node_modules/.cache
|
||||
rm -rf dist
|
||||
|
||||
# 重新安装依赖
|
||||
npm install
|
||||
|
||||
# 重新运行
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### 问题4:性别显示为空
|
||||
|
||||
**可能原因**:出国申请表中gender字段为空
|
||||
|
||||
**解决方案**:
|
||||
1. 检查原出国申请数据
|
||||
2. 确保出国申请表中有gender字段且有值
|
||||
|
||||
## 📊 SQL验证脚本
|
||||
|
||||
```sql
|
||||
-- 验证表结构
|
||||
SELECT
|
||||
COLUMN_NAME AS '字段名',
|
||||
COLUMN_TYPE AS '字段类型',
|
||||
IS_NULLABLE AS '允许空值',
|
||||
COLUMN_COMMENT AS '字段说明'
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'rs_overseas_itinerary_change'
|
||||
AND COLUMN_NAME IN ('gender', 'birth_date', 'political_status', 'professional_title', 'position', 'document_name', 'document_number')
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
|
||||
-- 验证数据
|
||||
SELECT
|
||||
change_id,
|
||||
applicant_name,
|
||||
gender,
|
||||
birth_date,
|
||||
political_status,
|
||||
professional_title,
|
||||
position,
|
||||
document_name,
|
||||
document_number
|
||||
FROM rs_overseas_itinerary_change
|
||||
LIMIT 5;
|
||||
```
|
||||
|
||||
## ✅ 执行检查清单
|
||||
|
||||
- [ ] 数据库字段添加成功
|
||||
- [ ] 后端代码已更新(Entity、VO、Bo)
|
||||
- [ ] 前端代码已更新(API类型、表单UI)
|
||||
- [ ] 后端服务重启成功
|
||||
- [ ] 前端服务重启成功
|
||||
- [ ] 新增变更申请功能正常
|
||||
- [ ] 字段自动填充正常
|
||||
- [ ] 数据保存正常
|
||||
- [ ] 查看详情显示正常
|
||||
|
||||
## 📞 技术支持
|
||||
|
||||
如遇到问题,请检查:
|
||||
1. 日志文件:`backend/logs/`
|
||||
2. 浏览器控制台:F12 → Console
|
||||
3. 网络请求:F12 → Network
|
||||
|
||||
---
|
||||
|
||||
**文档版本**:1.0
|
||||
**最后更新**:2025-10-13
|
||||
|
||||
@@ -0,0 +1,124 @@
|
||||
-- ======================================
|
||||
-- 诊断:检查行程变更表缺失的字段
|
||||
-- 创建时间: 2025-10-13
|
||||
-- 执行方式: 在MySQL中直接执行
|
||||
-- ======================================
|
||||
|
||||
-- 设置字符集
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- ======================================
|
||||
-- 检查1:查看当前表结构
|
||||
-- ======================================
|
||||
SELECT '当前表结构' AS '检查项';
|
||||
SHOW COLUMNS FROM rs_overseas_itinerary_change;
|
||||
|
||||
-- ======================================
|
||||
-- 检查2:统计字段数量
|
||||
-- ======================================
|
||||
SELECT
|
||||
'字段数量检查' AS '检查项',
|
||||
COUNT(*) AS '当前字段数',
|
||||
'47' AS '期望字段数',
|
||||
CASE
|
||||
WHEN COUNT(*) < 47 THEN '⚠️ 缺少字段'
|
||||
WHEN COUNT(*) = 47 THEN '✅ 字段完整'
|
||||
ELSE '❓ 字段数量异常'
|
||||
END AS '状态'
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'rs_overseas_itinerary_change';
|
||||
|
||||
-- ======================================
|
||||
-- 检查3:检查必需的个人信息字段是否存在
|
||||
-- ======================================
|
||||
SELECT
|
||||
'个人信息字段检查' AS '检查项',
|
||||
CASE WHEN COUNT(*) = 8 THEN '✅ 全部存在' ELSE CONCAT('⚠️ 缺少 ', 8 - COUNT(*), ' 个字段') END AS '状态',
|
||||
GROUP_CONCAT(COLUMN_NAME ORDER BY COLUMN_NAME) AS '已存在的字段'
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'rs_overseas_itinerary_change'
|
||||
AND COLUMN_NAME IN (
|
||||
'gender',
|
||||
'birth_date',
|
||||
'political_status',
|
||||
'professional_title',
|
||||
'position',
|
||||
'document_name',
|
||||
'document_number',
|
||||
'department'
|
||||
);
|
||||
|
||||
-- ======================================
|
||||
-- 检查4:列出缺失的字段
|
||||
-- ======================================
|
||||
SELECT '缺失字段列表' AS '检查项';
|
||||
|
||||
SELECT
|
||||
field_name AS '缺失字段',
|
||||
field_type AS '字段类型',
|
||||
field_comment AS '字段说明'
|
||||
FROM (
|
||||
SELECT 'gender' AS field_name, 'char(1)' AS field_type, '性别:0-男,1-女' AS field_comment
|
||||
UNION ALL
|
||||
SELECT 'birth_date', 'date', '出生日期'
|
||||
UNION ALL
|
||||
SELECT 'political_status', 'varchar(20)', '政治面貌'
|
||||
UNION ALL
|
||||
SELECT 'professional_title', 'varchar(100)', '职称'
|
||||
UNION ALL
|
||||
SELECT 'position', 'varchar(100)', '职务'
|
||||
UNION ALL
|
||||
SELECT 'document_name', 'varchar(100)', '申领证件名称'
|
||||
UNION ALL
|
||||
SELECT 'document_number', 'varchar(100)', '证件号码'
|
||||
UNION ALL
|
||||
SELECT 'department', 'varchar(200)', '部门'
|
||||
) AS required_fields
|
||||
WHERE field_name NOT IN (
|
||||
SELECT COLUMN_NAME
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'rs_overseas_itinerary_change'
|
||||
);
|
||||
|
||||
-- ======================================
|
||||
-- 检查5:查看表的基本信息
|
||||
-- ======================================
|
||||
SELECT
|
||||
'表基本信息' AS '检查项',
|
||||
TABLE_NAME AS '表名',
|
||||
TABLE_ROWS AS '数据行数',
|
||||
CREATE_TIME AS '创建时间',
|
||||
UPDATE_TIME AS '更新时间',
|
||||
TABLE_COMMENT AS '表注释'
|
||||
FROM information_schema.TABLES
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'rs_overseas_itinerary_change';
|
||||
|
||||
-- ======================================
|
||||
-- 诊断结果说明
|
||||
-- ======================================
|
||||
/*
|
||||
诊断说明:
|
||||
|
||||
1. 如果"字段数量检查"显示 ⚠️ 缺少字段:
|
||||
- 说明表结构不完整
|
||||
- 需要执行修复SQL(🔧修复-添加缺失字段.sql)
|
||||
|
||||
2. 如果"个人信息字段检查"显示 ⚠️ 缺少X个字段:
|
||||
- 说明缺少个人信息相关字段
|
||||
- 这正是导致"Unknown column 'gender'"错误的原因
|
||||
|
||||
3. "缺失字段列表"会显示具体缺少哪些字段:
|
||||
- 如果有结果,说明需要添加这些字段
|
||||
- 如果无结果,说明字段完整
|
||||
|
||||
下一步操作:
|
||||
1. 如果发现缺失字段 → 执行 🔧修复-添加缺失字段.sql
|
||||
2. 如果字段完整 → 检查后端Mapper映射是否正确
|
||||
3. 修复后重启后端服务
|
||||
4. 重新测试审批功能
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,163 @@
|
||||
-- ======================================
|
||||
-- 修复:添加行程变更表缺失的字段
|
||||
-- 创建时间: 2025-10-13
|
||||
-- 问题描述: 表中缺少gender等个人信息字段
|
||||
-- 执行方式: 直接在MySQL中执行
|
||||
-- ======================================
|
||||
|
||||
-- 设置字符集
|
||||
SET NAMES utf8mb4;
|
||||
|
||||
-- ======================================
|
||||
-- 第一步:检查当前表结构(诊断用)
|
||||
-- ======================================
|
||||
SHOW COLUMNS FROM rs_overseas_itinerary_change;
|
||||
|
||||
-- ======================================
|
||||
-- 第二步:添加缺失的个人信息字段
|
||||
-- ======================================
|
||||
|
||||
-- 添加性别字段(在applicant_name之后)
|
||||
ALTER TABLE rs_overseas_itinerary_change
|
||||
ADD COLUMN `gender` char(1) DEFAULT NULL COMMENT '性别:0-男,1-女'
|
||||
AFTER `applicant_name`;
|
||||
|
||||
-- 添加出生日期字段
|
||||
ALTER TABLE rs_overseas_itinerary_change
|
||||
ADD COLUMN `birth_date` date DEFAULT NULL COMMENT '出生日期'
|
||||
AFTER `gender`;
|
||||
|
||||
-- 添加政治面貌字段
|
||||
ALTER TABLE rs_overseas_itinerary_change
|
||||
ADD COLUMN `political_status` varchar(20) DEFAULT NULL COMMENT '政治面貌'
|
||||
AFTER `birth_date`;
|
||||
|
||||
-- 添加职称字段
|
||||
ALTER TABLE rs_overseas_itinerary_change
|
||||
ADD COLUMN `professional_title` varchar(100) DEFAULT NULL COMMENT '职称'
|
||||
AFTER `political_status`;
|
||||
|
||||
-- 添加职务字段
|
||||
ALTER TABLE rs_overseas_itinerary_change
|
||||
ADD COLUMN `position` varchar(100) DEFAULT NULL COMMENT '职务'
|
||||
AFTER `professional_title`;
|
||||
|
||||
-- 添加证件名称字段
|
||||
ALTER TABLE rs_overseas_itinerary_change
|
||||
ADD COLUMN `document_name` varchar(100) DEFAULT NULL COMMENT '申领证件名称'
|
||||
AFTER `position`;
|
||||
|
||||
-- 添加证件号码字段
|
||||
ALTER TABLE rs_overseas_itinerary_change
|
||||
ADD COLUMN `document_number` varchar(100) DEFAULT NULL COMMENT '证件号码'
|
||||
AFTER `document_name`;
|
||||
|
||||
-- 添加部门字段
|
||||
ALTER TABLE rs_overseas_itinerary_change
|
||||
ADD COLUMN `department` varchar(200) DEFAULT NULL COMMENT '部门'
|
||||
AFTER `document_number`;
|
||||
|
||||
-- ======================================
|
||||
-- 第三步:验证修复结果
|
||||
-- ======================================
|
||||
|
||||
-- 查看表结构(检查字段是否添加成功)
|
||||
SELECT '验证表结构' AS '检查项';
|
||||
SHOW COLUMNS FROM rs_overseas_itinerary_change;
|
||||
|
||||
-- 统计字段数量(应该是47个字段)
|
||||
SELECT
|
||||
'字段数量检查' AS '检查项',
|
||||
COUNT(*) AS '当前字段数',
|
||||
'47' AS '期望字段数'
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'rs_overseas_itinerary_change';
|
||||
|
||||
-- 查看新添加的字段
|
||||
SELECT
|
||||
COLUMN_NAME AS '字段名',
|
||||
COLUMN_TYPE AS '字段类型',
|
||||
IS_NULLABLE AS '允许NULL',
|
||||
COLUMN_DEFAULT AS '默认值',
|
||||
COLUMN_COMMENT AS '字段说明'
|
||||
FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'rs_overseas_itinerary_change'
|
||||
AND COLUMN_NAME IN (
|
||||
'gender',
|
||||
'birth_date',
|
||||
'political_status',
|
||||
'professional_title',
|
||||
'position',
|
||||
'document_name',
|
||||
'document_number',
|
||||
'department'
|
||||
)
|
||||
ORDER BY ORDINAL_POSITION;
|
||||
|
||||
-- ======================================
|
||||
-- 使用说明
|
||||
-- ======================================
|
||||
/*
|
||||
问题原因:
|
||||
数据库中的表结构是旧版本,缺少个人信息相关字段。
|
||||
后端查询时包含了这些字段,导致SQL语法错误。
|
||||
|
||||
修复步骤:
|
||||
1. 确保数据库连接正常
|
||||
2. 选择正确的数据库(USE your_database)
|
||||
3. 执行本SQL脚本
|
||||
4. 检查验证结果,确认字段已添加
|
||||
5. 重启后端服务(清除MyBatis缓存)
|
||||
6. 重新测试审批功能
|
||||
|
||||
添加的字段列表:
|
||||
- gender: 性别(char(1))
|
||||
- birth_date: 出生日期(date)
|
||||
- political_status: 政治面貌(varchar(20))
|
||||
- professional_title: 职称(varchar(100))
|
||||
- position: 职务(varchar(100))
|
||||
- document_name: 申领证件名称(varchar(100))
|
||||
- document_number: 证件号码(varchar(100))
|
||||
- department: 部门(varchar(200))
|
||||
|
||||
注意事项:
|
||||
1. 这些字段都允许为NULL(因为已有数据可能没有这些信息)
|
||||
2. 新添加的字段会自动插入到applicant_name字段之后
|
||||
3. 现有数据的这些字段值为NULL
|
||||
4. 如需填充数据,可以从其他表(如用户表)同步
|
||||
*/
|
||||
|
||||
-- ======================================
|
||||
-- 可选:从其他表同步数据(如果需要)
|
||||
-- ======================================
|
||||
/*
|
||||
-- 示例:从sys_user表同步性别和部门信息
|
||||
UPDATE rs_overseas_itinerary_change c
|
||||
LEFT JOIN sys_user u ON c.applicant_id = u.user_id
|
||||
SET
|
||||
c.gender = u.sex,
|
||||
c.department = (
|
||||
SELECT dept_name
|
||||
FROM sys_dept
|
||||
WHERE dept_id = u.dept_id
|
||||
)
|
||||
WHERE c.gender IS NULL;
|
||||
|
||||
-- 示例:从rs_overseas_application表同步个人信息
|
||||
UPDATE rs_overseas_itinerary_change c
|
||||
LEFT JOIN rs_overseas_application a ON c.application_id = a.application_id
|
||||
SET
|
||||
c.gender = a.gender,
|
||||
c.birth_date = a.birth_date,
|
||||
c.political_status = a.political_status,
|
||||
c.professional_title = a.professional_title,
|
||||
c.position = a.position,
|
||||
c.document_name = a.document_name,
|
||||
c.document_number = a.document_number,
|
||||
c.department = a.department
|
||||
WHERE c.application_id IS NOT NULL
|
||||
AND c.gender IS NULL;
|
||||
*/
|
||||
|
||||
Reference in new issue
Block a user