Files
zkxw/docs/sql/migrations/2026-10-17-protocol-status-change-log.sql
T
2026-10-17 11:46:53 +08:00

323 lines
9.4 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 采集协议单 / 科研捐赠:状态变更历史表(追加写,同类型不覆盖)
-- 对齐 docs/superpowers/plans/2026-10-17-protocol-status-change-history.md
CREATE TABLE IF NOT EXISTS biz_protocol_status_change (
id VARCHAR(64) NOT NULL COMMENT '主键ID',
collection_protocol_id VARCHAR(64) NOT NULL COMMENT '采集协议单ID',
change_type VARCHAR(32) NOT NULL COMMENT '变更类型 activate/expire/void/to_research',
from_status VARCHAR(16) DEFAULT NULL COMMENT '变更前状态码',
to_status VARCHAR(16) NOT NULL COMMENT '变更后状态码',
change_time DATETIME NOT NULL COMMENT '业务变更时间',
change_desc VARCHAR(512) DEFAULT NULL COMMENT '变更描述',
void_type VARCHAR(32) DEFAULT NULL COMMENT '作废类型(字典 xyzflx)',
operator_user_id VARCHAR(64) DEFAULT NULL COMMENT '操作人用户ID',
tenant_no VARCHAR(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
order_num INT DEFAULT NULL COMMENT '排序号',
remark VARCHAR(512) DEFAULT NULL COMMENT '备注',
create_by VARCHAR(64) DEFAULT NULL COMMENT '创建人id',
create_dept_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
create_time DATETIME NOT NULL COMMENT '创建时间',
update_by VARCHAR(64) DEFAULT NULL COMMENT '更新人id',
update_time DATETIME NOT NULL COMMENT '更新时间',
del_flag SMALLINT NOT NULL DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (id),
KEY idx_bpsc_protocol_time (tenant_no, collection_protocol_id, del_flag, change_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='采集协议单状态变更记录';
CREATE TABLE IF NOT EXISTS biz_donation_status_change (
id VARCHAR(64) NOT NULL COMMENT '主键ID',
research_donation_id VARCHAR(64) NOT NULL COMMENT '科研捐赠单ID',
change_type VARCHAR(32) NOT NULL COMMENT '变更类型 activate/expire/void/to_storage',
from_status VARCHAR(16) DEFAULT NULL COMMENT '变更前状态码',
to_status VARCHAR(16) NOT NULL COMMENT '变更后状态码',
change_time DATETIME NOT NULL COMMENT '业务变更时间',
change_desc VARCHAR(512) DEFAULT NULL COMMENT '变更描述',
void_type VARCHAR(32) DEFAULT NULL COMMENT '作废类型(字典 xyzflx)',
operator_user_id VARCHAR(64) DEFAULT NULL COMMENT '操作人用户ID',
tenant_no VARCHAR(64) NOT NULL DEFAULT 'zkxw' COMMENT '租户编号',
order_num INT DEFAULT NULL COMMENT '排序号',
remark VARCHAR(512) DEFAULT NULL COMMENT '备注',
create_by VARCHAR(64) DEFAULT NULL COMMENT '创建人id',
create_dept_id VARCHAR(64) NOT NULL DEFAULT '' COMMENT '创建人部门ID',
create_time DATETIME NOT NULL COMMENT '创建时间',
update_by VARCHAR(64) DEFAULT NULL COMMENT '更新人id',
update_time DATETIME NOT NULL COMMENT '更新时间',
del_flag SMALLINT NOT NULL DEFAULT 0 COMMENT '删除标记',
PRIMARY KEY (id),
KEY idx_bdsc_donation_time (tenant_no, research_donation_id, del_flag, change_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='科研捐赠状态变更记录';
-- 回填:主表已有快照各插 1 条(幂等:同协议同 change_type 尚无历史时)
INSERT INTO biz_protocol_status_change (
id, collection_protocol_id, change_type, from_status, to_status,
change_time, change_desc, void_type, operator_user_id,
tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT
UPPER(MD5(CONCAT(p.id, '|activate'))),
p.id,
'activate',
NULL,
'sxz',
p.effective_time,
p.effective_desc,
NULL,
p.update_by,
p.tenant_no,
0,
NULL,
p.update_by,
'',
IFNULL(p.effective_time, NOW()),
p.update_by,
IFNULL(p.effective_time, NOW()),
0
FROM biz_collection_protocol p
WHERE p.del_flag = 0
AND p.effective_time IS NOT NULL
AND NOT EXISTS (
SELECT 1 FROM biz_protocol_status_change c
WHERE c.collection_protocol_id = p.id
AND c.change_type = 'activate'
AND c.del_flag = 0
);
INSERT INTO biz_protocol_status_change (
id, collection_protocol_id, change_type, from_status, to_status,
change_time, change_desc, void_type, operator_user_id,
tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT
UPPER(MD5(CONCAT(p.id, '|expire'))),
p.id,
'expire',
NULL,
'ygq',
p.expire_time,
p.expire_desc,
NULL,
p.update_by,
p.tenant_no,
0,
NULL,
p.update_by,
'',
IFNULL(p.expire_time, NOW()),
p.update_by,
IFNULL(p.expire_time, NOW()),
0
FROM biz_collection_protocol p
WHERE p.del_flag = 0
AND p.expire_time IS NOT NULL
AND NOT EXISTS (
SELECT 1 FROM biz_protocol_status_change c
WHERE c.collection_protocol_id = p.id
AND c.change_type = 'expire'
AND c.del_flag = 0
);
INSERT INTO biz_protocol_status_change (
id, collection_protocol_id, change_type, from_status, to_status,
change_time, change_desc, void_type, operator_user_id,
tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT
UPPER(MD5(CONCAT(p.id, '|void'))),
p.id,
'void',
NULL,
'yzf',
p.void_time,
p.void_desc,
p.void_type,
p.update_by,
p.tenant_no,
0,
NULL,
p.update_by,
'',
IFNULL(p.void_time, NOW()),
p.update_by,
IFNULL(p.void_time, NOW()),
0
FROM biz_collection_protocol p
WHERE p.del_flag = 0
AND p.void_time IS NOT NULL
AND NOT EXISTS (
SELECT 1 FROM biz_protocol_status_change c
WHERE c.collection_protocol_id = p.id
AND c.change_type = 'void'
AND c.del_flag = 0
);
INSERT INTO biz_protocol_status_change (
id, collection_protocol_id, change_type, from_status, to_status,
change_time, change_desc, void_type, operator_user_id,
tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT
UPPER(MD5(CONCAT(p.id, '|to_research'))),
p.id,
'to_research',
NULL,
'zky',
p.to_research_time,
p.to_research_desc,
NULL,
p.update_by,
p.tenant_no,
0,
NULL,
p.update_by,
'',
IFNULL(p.to_research_time, NOW()),
p.update_by,
IFNULL(p.to_research_time, NOW()),
0
FROM biz_collection_protocol p
WHERE p.del_flag = 0
AND p.to_research_time IS NOT NULL
AND NOT EXISTS (
SELECT 1 FROM biz_protocol_status_change c
WHERE c.collection_protocol_id = p.id
AND c.change_type = 'to_research'
AND c.del_flag = 0
);
INSERT INTO biz_donation_status_change (
id, research_donation_id, change_type, from_status, to_status,
change_time, change_desc, void_type, operator_user_id,
tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT
UPPER(MD5(CONCAT(d.id, '|activate'))),
d.id,
'activate',
NULL,
'sxz',
d.effective_time,
d.effective_desc,
NULL,
d.update_by,
d.tenant_no,
0,
NULL,
d.update_by,
'',
IFNULL(d.effective_time, NOW()),
d.update_by,
IFNULL(d.effective_time, NOW()),
0
FROM biz_research_donation d
WHERE d.del_flag = 0
AND d.effective_time IS NOT NULL
AND NOT EXISTS (
SELECT 1 FROM biz_donation_status_change c
WHERE c.research_donation_id = d.id
AND c.change_type = 'activate'
AND c.del_flag = 0
);
INSERT INTO biz_donation_status_change (
id, research_donation_id, change_type, from_status, to_status,
change_time, change_desc, void_type, operator_user_id,
tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT
UPPER(MD5(CONCAT(d.id, '|expire'))),
d.id,
'expire',
NULL,
'ygq',
d.expire_time,
d.expire_desc,
NULL,
d.update_by,
d.tenant_no,
0,
NULL,
d.update_by,
'',
IFNULL(d.expire_time, NOW()),
d.update_by,
IFNULL(d.expire_time, NOW()),
0
FROM biz_research_donation d
WHERE d.del_flag = 0
AND d.expire_time IS NOT NULL
AND NOT EXISTS (
SELECT 1 FROM biz_donation_status_change c
WHERE c.research_donation_id = d.id
AND c.change_type = 'expire'
AND c.del_flag = 0
);
INSERT INTO biz_donation_status_change (
id, research_donation_id, change_type, from_status, to_status,
change_time, change_desc, void_type, operator_user_id,
tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT
UPPER(MD5(CONCAT(d.id, '|void'))),
d.id,
'void',
NULL,
'yzf',
d.void_time,
d.void_desc,
d.void_type,
d.update_by,
d.tenant_no,
0,
NULL,
d.update_by,
'',
IFNULL(d.void_time, NOW()),
d.update_by,
IFNULL(d.void_time, NOW()),
0
FROM biz_research_donation d
WHERE d.del_flag = 0
AND d.void_time IS NOT NULL
AND NOT EXISTS (
SELECT 1 FROM biz_donation_status_change c
WHERE c.research_donation_id = d.id
AND c.change_type = 'void'
AND c.del_flag = 0
);
INSERT INTO biz_donation_status_change (
id, research_donation_id, change_type, from_status, to_status,
change_time, change_desc, void_type, operator_user_id,
tenant_no, order_num, remark, create_by, create_dept_id, create_time, update_by, update_time, del_flag
)
SELECT
UPPER(MD5(CONCAT(d.id, '|to_storage'))),
d.id,
'to_storage',
NULL,
'zckc',
d.to_storage_time,
d.to_storage_desc,
NULL,
d.update_by,
d.tenant_no,
0,
NULL,
d.update_by,
'',
IFNULL(d.to_storage_time, NOW()),
d.update_by,
IFNULL(d.to_storage_time, NOW()),
0
FROM biz_research_donation d
WHERE d.del_flag = 0
AND d.to_storage_time IS NOT NULL
AND NOT EXISTS (
SELECT 1 FROM biz_donation_status_change c
WHERE c.research_donation_id = d.id
AND c.change_type = 'to_storage'
AND c.del_flag = 0
);