按客户与证用品类自动选证,未配置生效时间拦住安排;齐备仅放行安排,归档前须完善挂证,并补充迁移与测试造数脚本。 Co-authored-by: Cursor <cursoragent@cursor.com>
113 lines
6.7 KiB
SQL
113 lines
6.7 KiB
SQL
-- 客户+品类证件额度:证用品类、规则切点、证件/计划扩展字段。
|
|
-- MySQL 5.7。可重复执行。
|
|
-- 回滚思路(勿自动执行):停用新规则配置;新表可 DROP;新增列可 ALTER DROP(上线后有数据时先备份)。
|
|
SET NAMES utf8mb4;
|
|
SET @schema_name = DATABASE();
|
|
|
|
-- ---------- 证用品类 ----------
|
|
CREATE TABLE IF NOT EXISTS `pl_cert_category` (
|
|
`id` varchar(64) NOT NULL COMMENT '主键UUID',
|
|
`category_name` varchar(128) NOT NULL COMMENT '证用品类名称,如硫酸',
|
|
`category_code` varchar(64) DEFAULT NULL COMMENT '品类编码,可选',
|
|
`status` char(1) NOT NULL DEFAULT '1' COMMENT '状态 1启用 0停用',
|
|
`tenant_no` varchar(64) NOT NULL COMMENT '租户编号',
|
|
`order_num` int DEFAULT NULL COMMENT '排序号',
|
|
`remark` varchar(1000) DEFAULT NULL COMMENT '备注',
|
|
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
|
|
`create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建部门',
|
|
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
|
|
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
`del_flag` smallint NOT NULL DEFAULT 0 COMMENT '软删除 0正常 1删除',
|
|
PRIMARY KEY (`id`),
|
|
KEY `idx_cert_category_tenant` (`tenant_no`, `del_flag`, `status`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='证用品类';
|
|
|
|
CREATE TABLE IF NOT EXISTS `pl_cert_category_product` (
|
|
`id` varchar(64) NOT NULL COMMENT '主键UUID',
|
|
`category_id` varchar(64) NOT NULL COMMENT '证用品类ID',
|
|
`product_id` varchar(64) NOT NULL COMMENT 'CRM产品ID',
|
|
`scope_status` varchar(20) NOT NULL DEFAULT 'active' COMMENT 'active/inactive',
|
|
`tenant_no` varchar(64) NOT NULL COMMENT '租户编号',
|
|
`order_num` int DEFAULT NULL COMMENT '排序号',
|
|
`remark` varchar(1000) DEFAULT NULL COMMENT '备注',
|
|
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
|
|
`create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建部门',
|
|
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
|
|
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
`del_flag` smallint NOT NULL DEFAULT 0 COMMENT '软删除 0正常 1删除',
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_cert_category_product` (`tenant_no`, `category_id`, `product_id`),
|
|
KEY `idx_cert_cat_prod_product` (`tenant_no`, `product_id`, `del_flag`, `scope_status`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='证用品类关联系统产品';
|
|
|
|
-- ---------- 规则切点配置(每租户一行) ----------
|
|
CREATE TABLE IF NOT EXISTS `pl_cert_quota_rule_config` (
|
|
`id` varchar(64) NOT NULL COMMENT '主键UUID',
|
|
`effective_at` datetime DEFAULT NULL COMMENT '客户品类额度生效时间;空表示未配置,安排将被拦住',
|
|
`tenant_no` varchar(64) NOT NULL COMMENT '租户编号',
|
|
`order_num` int DEFAULT NULL COMMENT '排序号',
|
|
`remark` varchar(1000) DEFAULT NULL COMMENT '备注',
|
|
`create_by` varchar(64) DEFAULT NULL COMMENT '创建人',
|
|
`create_dept_id` varchar(64) NOT NULL DEFAULT '' COMMENT '创建部门',
|
|
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
`update_by` varchar(64) DEFAULT NULL COMMENT '更新人',
|
|
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
`del_flag` smallint NOT NULL DEFAULT 0 COMMENT '软删除 0正常 1删除',
|
|
PRIMARY KEY (`id`),
|
|
UNIQUE KEY `uk_cert_quota_rule_tenant` (`tenant_no`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='运输证件额度规则切点';
|
|
|
|
-- ---------- 购买证扩展 ----------
|
|
SET @col = (SELECT COUNT(*) FROM information_schema.COLUMNS
|
|
WHERE TABLE_SCHEMA=@schema_name AND TABLE_NAME='pl_purchase_cert' AND COLUMN_NAME='customer_id');
|
|
SET @sql = IF(@col=0,
|
|
'ALTER TABLE pl_purchase_cert ADD COLUMN customer_id varchar(64) DEFAULT NULL COMMENT ''系统客户ID;选证必填'' AFTER purchase_purpose',
|
|
'SELECT 1');
|
|
PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
|
|
|
|
SET @col = (SELECT COUNT(*) FROM information_schema.COLUMNS
|
|
WHERE TABLE_SCHEMA=@schema_name AND TABLE_NAME='pl_purchase_cert' AND COLUMN_NAME='category_id');
|
|
SET @sql = IF(@col=0,
|
|
'ALTER TABLE pl_purchase_cert ADD COLUMN category_id varchar(64) DEFAULT NULL COMMENT ''证用品类ID;选证必填'' AFTER customer_id',
|
|
'SELECT 1');
|
|
PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
|
|
|
|
SET @idx = (SELECT COUNT(*) FROM information_schema.STATISTICS
|
|
WHERE TABLE_SCHEMA=@schema_name AND TABLE_NAME='pl_purchase_cert' AND INDEX_NAME='idx_purchase_cert_customer');
|
|
SET @sql = IF(@idx=0,
|
|
'ALTER TABLE pl_purchase_cert ADD KEY idx_purchase_cert_customer (tenant_no, customer_id, category_id, status, del_flag)',
|
|
'SELECT 1');
|
|
PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
|
|
|
|
-- ---------- 运输证扩展 ----------
|
|
SET @col = (SELECT COUNT(*) FROM information_schema.COLUMNS
|
|
WHERE TABLE_SCHEMA=@schema_name AND TABLE_NAME='pl_transport_cert' AND COLUMN_NAME='customer_id');
|
|
SET @sql = IF(@col=0,
|
|
'ALTER TABLE pl_transport_cert ADD COLUMN customer_id varchar(64) DEFAULT NULL COMMENT ''系统客户ID;选证必填'' AFTER applicant_name',
|
|
'SELECT 1');
|
|
PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
|
|
|
|
SET @idx = (SELECT COUNT(*) FROM information_schema.STATISTICS
|
|
WHERE TABLE_SCHEMA=@schema_name AND TABLE_NAME='pl_transport_cert' AND INDEX_NAME='idx_transport_cert_customer');
|
|
SET @sql = IF(@idx=0,
|
|
'ALTER TABLE pl_transport_cert ADD KEY idx_transport_cert_customer (tenant_no, customer_id, status, del_flag)',
|
|
'SELECT 1');
|
|
PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
|
|
|
|
-- ---------- 计划规则版本 / 待完善 ----------
|
|
SET @col = (SELECT COUNT(*) FROM information_schema.COLUMNS
|
|
WHERE TABLE_SCHEMA=@schema_name AND TABLE_NAME='pl_plan' AND COLUMN_NAME='cert_quota_rule_version');
|
|
SET @sql = IF(@col=0,
|
|
'ALTER TABLE pl_plan ADD COLUMN cert_quota_rule_version varchar(32) DEFAULT NULL COMMENT ''legacy|customer_category;创建时打标'' AFTER quota_cert_waived_time',
|
|
'SELECT 1');
|
|
PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
|
|
|
|
SET @col = (SELECT COUNT(*) FROM information_schema.COLUMNS
|
|
WHERE TABLE_SCHEMA=@schema_name AND TABLE_NAME='pl_plan' AND COLUMN_NAME='quota_cert_pending_fulfill');
|
|
SET @sql = IF(@col=0,
|
|
'ALTER TABLE pl_plan ADD COLUMN quota_cert_pending_fulfill tinyint NOT NULL DEFAULT 0 COMMENT ''新规则证书齐备待完善 0否 1是'' AFTER cert_quota_rule_version',
|
|
'SELECT 1');
|
|
PREPARE s FROM @sql; EXECUTE s; DEALLOCATE PREPARE s;
|