Files
zkxw/docs/sql/migrations/2026-10-13-sample-storage-cert-insurance.sql
T

158 lines
6.5 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.
-- 样本级储存证 / 保险 + 协议级数据迁移(2026-10-13)
-- 对齐 docs/superpowers/specs/2026-10-13-customer-service-management-design.md
CREATE TABLE IF NOT EXISTS biz_sample_storage_cert (
id VARCHAR(64) NOT NULL COMMENT '主键ID',
sample_code VARCHAR(32) NOT NULL COMMENT '样本编码',
collection_protocol_id VARCHAR(64) DEFAULT NULL COMMENT '采集协议单ID冗余',
make_status CHAR(1) DEFAULT '0' COMMENT '制作状态 0-未制作 1-已制作',
cert_image_urls VARCHAR(4000) DEFAULT NULL COMMENT '证书图片URLs',
make_date CHAR(8) DEFAULT NULL COMMENT '制作日期YYYYMMDD',
handle_time DATETIME DEFAULT NULL COMMENT '办理时间',
handler_user_id VARCHAR(64) DEFAULT NULL COMMENT '办理人用户ID',
mail_cert_time DATETIME DEFAULT NULL COMMENT '邮寄储存证时间',
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),
UNIQUE KEY uk_bssc_tenant_sample (tenant_no, sample_code),
KEY idx_bssc_protocol (tenant_no, collection_protocol_id, del_flag)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='样本储存证办理';
-- 注:uk_bssc_tenant_sample 不含 del_flag;del_flag=0 行唯一性由应用层保证(与 biz_sample_storage_cert_qc 一致)。
CREATE TABLE IF NOT EXISTS biz_sample_insurance (
id VARCHAR(64) NOT NULL COMMENT '主键ID',
sample_code VARCHAR(32) NOT NULL COMMENT '样本编码',
collection_protocol_id VARCHAR(64) DEFAULT NULL COMMENT '采集协议单ID冗余',
todo_status CHAR(1) NOT NULL DEFAULT '0' COMMENT '1已办保险 0未办保险',
handle_date CHAR(8) DEFAULT NULL COMMENT '办理日期',
handle_time DATETIME DEFAULT NULL COMMENT '办理时间',
handler_user_id VARCHAR(64) DEFAULT NULL COMMENT '办理人用户ID',
handle_remark VARCHAR(512) DEFAULT NULL COMMENT '办理备注',
insurance_attachments VARCHAR(4000) DEFAULT NULL COMMENT '保险附件逗号分隔',
insurance_company_id VARCHAR(64) DEFAULT NULL COMMENT '保险公司ID',
insurance_company_name VARCHAR(200) DEFAULT NULL COMMENT '保险公司名称(冗余快照)',
insurance_type VARCHAR(200) DEFAULT NULL COMMENT '保险险种',
insurance_policy_no VARCHAR(100) DEFAULT NULL COMMENT '保险单号',
insurance_effective_date CHAR(8) DEFAULT NULL COMMENT '保险单生效时间YYYYMMDD',
insurance_expiry_date CHAR(8) DEFAULT NULL COMMENT '保险单失效时间YYYYMMDD',
insurance_subscribed CHAR(1) DEFAULT '0' COMMENT '是否已订购保险',
insurance_fee DECIMAL(18, 2) DEFAULT NULL COMMENT '保单费用(元)',
policy_send_time DATETIME DEFAULT NULL COMMENT '保单发送时间',
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),
UNIQUE KEY uk_bsi_tenant_sample (tenant_no, sample_code),
KEY idx_bsi_protocol (tenant_no, collection_protocol_id, del_flag)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='样本保险办理';
-- 注:uk_bsi_tenant_sample 不含 del_flag;del_flag=0 行唯一性由应用层保证(与 biz_sample_storage_cert_qc 一致)。
-- 迁移:协议级储存证 → 协议下每个未删样本一行(幂等 NOT EXISTS)
INSERT INTO biz_sample_storage_cert (
id, sample_code, collection_protocol_id, make_status, cert_image_urls,
make_date, handle_time, handler_user_id, mail_cert_time,
tenant_no, order_num, remark, create_by, create_dept_id, create_time,
update_by, update_time, del_flag
)
SELECT
REPLACE(UUID(), '-', ''),
ps.sample_code,
c.collection_protocol_id,
c.make_status,
c.cert_image_urls,
c.make_date,
c.handle_time,
c.handler_user_id,
NULL,
c.tenant_no,
c.order_num,
c.remark,
c.create_by,
c.create_dept_id,
NOW(),
c.update_by,
NOW(),
0
FROM biz_protocol_storage_cert c
INNER JOIN biz_protocol_sample ps
ON ps.collection_protocol_id = c.collection_protocol_id
AND ps.tenant_no = c.tenant_no
AND ps.del_flag = 0
WHERE c.del_flag = 0
AND ps.sample_code IS NOT NULL
AND ps.sample_code <> ''
AND NOT EXISTS (
SELECT 1 FROM biz_sample_storage_cert t
WHERE t.tenant_no = c.tenant_no
AND t.sample_code = ps.sample_code
AND t.del_flag = 0
);
-- 迁移:协议级满月保险 → 协议下每个未删样本一行(幂等 NOT EXISTS)
INSERT INTO biz_sample_insurance (
id, sample_code, collection_protocol_id, todo_status, handle_date, handle_time,
handler_user_id, handle_remark, insurance_attachments,
insurance_company_id, insurance_company_name, insurance_type, insurance_policy_no,
insurance_effective_date, insurance_expiry_date, insurance_subscribed, insurance_fee,
policy_send_time,
tenant_no, order_num, remark, create_by, create_dept_id, create_time,
update_by, update_time, del_flag
)
SELECT
REPLACE(UUID(), '-', ''),
ps.sample_code,
t.collection_protocol_id,
t.todo_status,
t.handle_date,
t.handle_time,
t.handler_user_id,
t.handle_remark,
t.insurance_attachments,
t.insurance_company_id,
t.insurance_company_name,
t.insurance_type,
t.insurance_policy_no,
t.insurance_effective_date,
t.insurance_expiry_date,
t.insurance_subscribed,
t.insurance_fee,
NULL,
t.tenant_no,
t.order_num,
t.remark,
t.create_by,
t.create_dept_id,
NOW(),
t.update_by,
NOW(),
0
FROM biz_protocol_fullmoon_todo t
INNER JOIN biz_protocol_sample ps
ON ps.collection_protocol_id = t.collection_protocol_id
AND ps.tenant_no = t.tenant_no
AND ps.del_flag = 0
WHERE t.del_flag = 0
AND ps.sample_code IS NOT NULL
AND ps.sample_code <> ''
AND NOT EXISTS (
SELECT 1 FROM biz_sample_insurance s
WHERE s.tenant_no = t.tenant_no
AND s.sample_code = ps.sample_code
AND s.del_flag = 0
);