-- =====================================================
|
-- 课题经费拨付对接财务报销 - 开发库增量脚本
|
--
|
-- 背景:每条 `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');
|