云
2026-09-29 f87ce86307056f63f79312178037cc8714eb2b13
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
-- =====================================================
-- 课题经费拨付对接财务报销 - 开发库增量脚本
--
-- 背景:每条 `research_fund_record` 拨款记录改为自动生成并提交一张财务报销单
--       (finance_reimbursement,1:1、金额一致),财务审批结果由
--       ResearchFundStatusListener 回写本台账状态。
--
-- 执行库:脚本用 DATABASE() 判定,与库名无关,故可对任意目标库执行。
--         2026-09-29 已在 application-local.yaml 指向的 mom-jssm 执行并核对通过;
--         其余环境(dev/test 指向 ruoyi-vue-pro,yzfx/wtxc/zsjc/chdl/kyzn 指向各自 mom-* 库)按需另跑。
--         本脚本幂等,可重复执行。
-- 内容:① research_fund_record 新增 4 列 + status 注释更新 + 索引
--       ② system_dict_data 的 research_fund_status 补「报销审批中/已驳回」
-- 注意:本脚本不含 tenant_id(项目不使用多租户模式)。
-- =====================================================
 
-- ----- 1. research_fund_record 新增 4 列(ALTER TABLE ADD COLUMN 不支持 IF NOT EXISTS,用 information_schema 守卫) -----
 
SET @c = (SELECT COUNT(*) FROM information_schema.columns
          WHERE table_schema = DATABASE() AND table_name = 'research_fund_record' AND column_name = 'reimbursement_id');
SET @sql = IF(@c = 0,
    'ALTER TABLE research_fund_record ADD COLUMN reimbursement_id bigint DEFAULT NULL COMMENT ''关联财务报销单 ID(finance_reimbursement.id)'' AFTER status',
    'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
SET @c = (SELECT COUNT(*) FROM information_schema.columns
          WHERE table_schema = DATABASE() AND table_name = 'research_fund_record' AND column_name = 'reimbursement_no');
SET @sql = IF(@c = 0,
    'ALTER TABLE research_fund_record ADD COLUMN reimbursement_no varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '''' COMMENT ''关联财务报销单号'' AFTER reimbursement_id',
    'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
SET @c = (SELECT COUNT(*) FROM information_schema.columns
          WHERE table_schema = DATABASE() AND table_name = 'research_fund_record' AND column_name = 'reject_reason');
SET @sql = IF(@c = 0,
    'ALTER TABLE research_fund_record ADD COLUMN reject_reason varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '''' COMMENT ''报销驳回原因(BPM 回写)'' AFTER reimbursement_no',
    'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
SET @c = (SELECT COUNT(*) FROM information_schema.columns
          WHERE table_schema = DATABASE() AND table_name = 'research_fund_record' AND column_name = 'reject_time');
SET @sql = IF(@c = 0,
    'ALTER TABLE research_fund_record ADD COLUMN reject_time datetime DEFAULT NULL COMMENT ''报销驳回时间'' AFTER reject_reason',
    'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
-- status 列注释更新为「0-待拨付 15-报销审批中 20-已拨付 30-已驳回」
ALTER TABLE research_fund_record
  MODIFY COLUMN status tinyint NOT NULL DEFAULT '0' COMMENT '状态:0-待拨付 15-报销审批中 20-已拨付 30-已驳回';
 
-- 按报销单号回查台账的索引
SET @c = (SELECT COUNT(*) FROM information_schema.statistics
          WHERE table_schema = DATABASE() AND table_name = 'research_fund_record' AND index_name = 'idx_reimbursement_id');
SET @sql = IF(@c = 0,
    'ALTER TABLE research_fund_record ADD INDEX idx_reimbursement_id (reimbursement_id) USING BTREE',
    'SELECT 1');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
 
-- ----- 2. 字典 research_fund_status 补 2 条 + 排序调整 + 类型备注 -----
 
UPDATE system_dict_type SET remark = '课题经费待拨付/报销审批中/已拨付/已驳回', update_time = NOW()
WHERE `type` = 'research_fund_status';
 
-- 先删后插,保证幂等(同 research_module.sql 的写法)
DELETE FROM system_dict_data WHERE dict_type = 'research_fund_status';
INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted)
VALUES (8100401, 1, '待拨付', '0', 'research_fund_status', 0, 'warning', '', '1', NOW(), '1', NOW(), b'0');
INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted)
VALUES (8100403, 2, '报销审批中', '15', 'research_fund_status', 0, 'processing', '', '1', NOW(), '1', NOW(), b'0');
INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted)
VALUES (8100402, 3, '已拨付', '20', 'research_fund_status', 0, 'success', '', '1', NOW(), '1', NOW(), b'0');
INSERT INTO system_dict_data (id, sort, label, value, dict_type, status, color_type, remark, creator, create_time, updater, update_time, deleted)
VALUES (8100404, 4, '已驳回', '30', 'research_fund_status', 0, 'danger', '', '1', NOW(), '1', NOW(), b'0');