-- 客户+品类证件额度:证用品类、规则切点、证件/计划扩展字段。 -- 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;