|
@@ -0,0 +1,143 @@
|
|
|
|
|
+-- =============================================================
|
|
|
|
|
+-- 风控品控平台 · 品控访厂增量脚本 (2026-07-07)
|
|
|
|
|
+-- 文件: risk_quality_factory_visit.sql
|
|
|
|
|
+-- 适用: 已有环境升级 / 新环境增量应用
|
|
|
|
|
+-- 幂等: 所有 DDL/DML 均使用条件判断,可重复执行
|
|
|
|
|
+-- =============================================================
|
|
|
|
|
+
|
|
|
|
|
+-- 1. 访厂主表
|
|
|
|
|
+CREATE TABLE IF NOT EXISTS `risk_factory_visit` (
|
|
|
|
|
+ `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
|
|
|
|
+ `visit_code` VARCHAR(50) NOT NULL COMMENT '访厂ID(FC+年月日+4位序号)',
|
|
|
|
|
+ `company_name` VARCHAR(200) NOT NULL COMMENT '被访厂商名称',
|
|
|
|
|
+ `company_address` VARCHAR(500) DEFAULT NULL COMMENT '厂商地址',
|
|
|
|
|
+ `visit_date` DATE DEFAULT NULL COMMENT '访厂日期',
|
|
|
|
|
+ `visitor_id` BIGINT DEFAULT NULL COMMENT '访查人ID',
|
|
|
|
|
+ `visitor_name` VARCHAR(50) DEFAULT NULL COMMENT '访查人姓名',
|
|
|
|
|
+ `audit_dept` VARCHAR(100) DEFAULT NULL COMMENT '审核部门',
|
|
|
|
|
+ `product_scope` VARCHAR(200) DEFAULT NULL COMMENT '审核产品范围',
|
|
|
|
|
+ `reviewer_id` BIGINT DEFAULT NULL COMMENT '评审人ID',
|
|
|
|
|
+ `reviewer_name` VARCHAR(50) DEFAULT NULL COMMENT '评审人姓名',
|
|
|
|
|
+ `total_score` DECIMAL(6,2) DEFAULT 0.00 COMMENT '访查实际得分(各模块加权求和)',
|
|
|
|
|
+ `audit_result` VARCHAR(20) DEFAULT NULL COMMENT '审核结论(通过/不通过/待定)',
|
|
|
|
|
+ `audit_remark` VARCHAR(1000) DEFAULT NULL COMMENT '审核意见',
|
|
|
|
|
+ `auditor_id` BIGINT DEFAULT NULL COMMENT '审核人ID',
|
|
|
|
|
+ `auditor_name` VARCHAR(50) DEFAULT NULL COMMENT '审核人姓名',
|
|
|
|
|
+ `audit_time` DATETIME DEFAULT NULL COMMENT '审核时间',
|
|
|
|
|
+ `status` VARCHAR(20) NOT NULL DEFAULT '待访厂' COMMENT '状态(待访厂/待审核/已审核)',
|
|
|
|
|
+ `remark` VARCHAR(1000) DEFAULT NULL COMMENT '备注',
|
|
|
|
|
+ `tenant_id` VARCHAR(20) NOT NULL DEFAULT '000000' COMMENT '租户ID',
|
|
|
|
|
+ `create_dept` BIGINT DEFAULT NULL COMMENT '创建部门',
|
|
|
|
|
+ `create_by` BIGINT DEFAULT NULL COMMENT '创建人',
|
|
|
|
|
+ `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
+ `update_by` BIGINT DEFAULT NULL COMMENT '更新人',
|
|
|
|
|
+ `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
|
|
+ PRIMARY KEY (`id`),
|
|
|
|
|
+ UNIQUE KEY `uk_visit_code` (`visit_code`),
|
|
|
|
|
+ KEY `idx_status` (`status`),
|
|
|
|
|
+ KEY `idx_visit_date` (`visit_date`),
|
|
|
|
|
+ KEY `idx_tenant` (`tenant_id`)
|
|
|
|
|
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='品控·访厂主表';
|
|
|
|
|
+
|
|
|
|
|
+-- 2. 访厂报告子表(JSON 存储 7 个模块评分,简化表结构)
|
|
|
|
|
+CREATE TABLE IF NOT EXISTS `risk_factory_visit_report` (
|
|
|
|
|
+ `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
|
|
|
|
|
+ `visit_id` BIGINT NOT NULL COMMENT '访厂主表ID',
|
|
|
|
|
+ `basic_evaluate` JSON DEFAULT NULL COMMENT '基础信息核查(9项是/否)',
|
|
|
|
|
+ `esg_score` JSON DEFAULT NULL COMMENT 'ESG评分(10项数字)',
|
|
|
|
|
+ `gmp_score` JSON DEFAULT NULL COMMENT 'GMP评分(5项数字)',
|
|
|
|
|
+ `iso14001_score` JSON DEFAULT NULL COMMENT 'ISO14001评分(4项数字)',
|
|
|
|
|
+ `iso45001_score` JSON DEFAULT NULL COMMENT 'ISO45001评分(4项数字)',
|
|
|
|
|
+ `iso9001_score` JSON DEFAULT NULL COMMENT 'ISO9001评分(5项数字)',
|
|
|
|
|
+ `allergen_evaluate` JSON DEFAULT NULL COMMENT '致敏原管控(19项合格/不合格/不适用+备注)',
|
|
|
|
|
+ `summary` TEXT DEFAULT NULL COMMENT '7.6 问题汇总与整改要求',
|
|
|
|
|
+ `tenant_id` VARCHAR(20) NOT NULL DEFAULT '000000' COMMENT '租户ID',
|
|
|
|
|
+ `create_dept` BIGINT DEFAULT NULL COMMENT '创建部门',
|
|
|
|
|
+ `create_by` BIGINT DEFAULT NULL COMMENT '创建人',
|
|
|
|
|
+ `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
|
|
|
|
+ `update_by` BIGINT DEFAULT NULL COMMENT '更新人',
|
|
|
|
|
+ `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
|
|
|
|
+ PRIMARY KEY (`id`),
|
|
|
|
|
+ UNIQUE KEY `uk_visit_id` (`visit_id`)
|
|
|
|
|
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='品控·访厂报告(7模块评分JSON)';
|
|
|
|
|
+
|
|
|
|
|
+-- 3. 字典类型:访厂状态
|
|
|
|
|
+INSERT INTO `sys_dict_type` (`dict_id`, `tenant_id`, `dict_name`, `dict_type`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
|
|
|
|
|
+VALUES (12200, '000000', '访厂状态', 'visit_status', 103, 1, NOW(), 1, NOW(), '访厂任务状态(待访厂/待审核/已审核)')
|
|
|
|
|
+ON DUPLICATE KEY UPDATE `update_time` = NOW();
|
|
|
|
|
+
|
|
|
|
|
+-- 4. 字典类型:审核结论
|
|
|
|
|
+INSERT INTO `sys_dict_type` (`dict_id`, `tenant_id`, `dict_name`, `dict_type`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
|
|
|
|
|
+VALUES (12201, '000000', '访厂审核结论', 'visit_audit_result', 103, 1, NOW(), 1, NOW(), '访厂审核结论(通过/不通过/待定)')
|
|
|
|
|
+ON DUPLICATE KEY UPDATE `update_time` = NOW();
|
|
|
|
|
+
|
|
|
|
|
+-- 5. 字典类型:基础信息评价
|
|
|
|
|
+INSERT INTO `sys_dict_type` (`dict_id`, `tenant_id`, `dict_name`, `dict_type`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
|
|
|
|
|
+VALUES (12202, '000000', '基础信息评价', 'visit_basic_evaluate', 103, 1, NOW(), 1, NOW(), '基础信息核查模块评价(是/否)')
|
|
|
|
|
+ON DUPLICATE KEY UPDATE `update_time` = NOW();
|
|
|
|
|
+
|
|
|
|
|
+-- 6. 字典类型:致敏原评价
|
|
|
|
|
+INSERT INTO `sys_dict_type` (`dict_id`, `tenant_id`, `dict_name`, `dict_type`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
|
|
|
|
|
+VALUES (12203, '000000', '致敏原评价', 'visit_allergen_evaluate', 103, 1, NOW(), 1, NOW(), '致敏原管控模块评价(合格/不合格/不适用)')
|
|
|
|
|
+ON DUPLICATE KEY UPDATE `update_time` = NOW();
|
|
|
|
|
+
|
|
|
|
|
+-- 7. 字典数据:访厂状态(3 项)
|
|
|
|
|
+INSERT INTO `sys_dict_data` (`dict_sort`, `tenant_id`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
|
|
|
|
+SELECT 1, '000000', '待访厂', '待访厂', 'visit_status', '', 'warning', 'N', 103, 1, NOW(), '等待填写访厂报告'
|
|
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'visit_status' AND `dict_value` = '待访厂');
|
|
|
|
|
+
|
|
|
|
|
+INSERT INTO `sys_dict_data` (`dict_sort`, `tenant_id`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
|
|
|
|
+SELECT 2, '000000', '待审核', '待审核', 'visit_status', '', 'primary', 'N', 103, 1, NOW(), '已提交,等待审核'
|
|
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'visit_status' AND `dict_value` = '待审核');
|
|
|
|
|
+
|
|
|
|
|
+INSERT INTO `sys_dict_data` (`dict_sort`, `tenant_id`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
|
|
|
|
+SELECT 3, '000000', '已审核', '已审核', 'visit_status', '', 'success', 'N', 103, 1, NOW(), '审核完成'
|
|
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'visit_status' AND `dict_value` = '已审核');
|
|
|
|
|
+
|
|
|
|
|
+-- 8. 字典数据:访厂审核结论(3 项)
|
|
|
|
|
+INSERT INTO `sys_dict_data` (`dict_sort`, `tenant_id`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
|
|
|
|
+SELECT 1, '000000', '通过', '通过', 'visit_audit_result', '', 'success', 'N', 103, 1, NOW(), '审核通过'
|
|
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'visit_audit_result' AND `dict_value` = '通过');
|
|
|
|
|
+
|
|
|
|
|
+INSERT INTO `sys_dict_data` (`dict_sort`, `tenant_id`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
|
|
|
|
+SELECT 2, '000000', '不通过', '不通过', 'visit_audit_result', '', 'danger', 'N', 103, 1, NOW(), '审核不通过'
|
|
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'visit_audit_result' AND `dict_value` = '不通过');
|
|
|
|
|
+
|
|
|
|
|
+INSERT INTO `sys_dict_data` (`dict_sort`, `tenant_id`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
|
|
|
|
+SELECT 3, '000000', '待定', '待定', 'visit_audit_result', '', 'info', 'N', 103, 1, NOW(), '待定,需补充资料'
|
|
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'visit_audit_result' AND `dict_value` = '待定');
|
|
|
|
|
+
|
|
|
|
|
+-- 9. 字典数据:基础信息评价(2 项)
|
|
|
|
|
+INSERT INTO `sys_dict_data` (`dict_sort`, `tenant_id`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
|
|
|
|
+SELECT 1, '000000', '是', '是', 'visit_basic_evaluate', '', 'success', 'N', 103, 1, NOW(), '评价为是'
|
|
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'visit_basic_evaluate' AND `dict_value` = '是');
|
|
|
|
|
+
|
|
|
|
|
+INSERT INTO `sys_dict_data` (`dict_sort`, `tenant_id`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
|
|
|
|
+SELECT 2, '000000', '否', '否', 'visit_basic_evaluate', '', 'danger', 'N', 103, 1, NOW(), '评价为否'
|
|
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'visit_basic_evaluate' AND `dict_value` = '否');
|
|
|
|
|
+
|
|
|
|
|
+-- 10. 字典数据:致敏原评价(3 项)
|
|
|
|
|
+INSERT INTO `sys_dict_data` (`dict_sort`, `tenant_id`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
|
|
|
|
+SELECT 1, '000000', '合格', '合格', 'visit_allergen_evaluate', '', 'success', 'N', 103, 1, NOW(), '评价为合格'
|
|
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'visit_allergen_evaluate' AND `dict_value` = '合格');
|
|
|
|
|
+
|
|
|
|
|
+INSERT INTO `sys_dict_data` (`dict_sort`, `tenant_id`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
|
|
|
|
+SELECT 2, '000000', '不合格', '不合格', 'visit_allergen_evaluate', '', 'danger', 'N', 103, 1, NOW(), '评价为不合格'
|
|
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'visit_allergen_evaluate' AND `dict_value` = '不合格');
|
|
|
|
|
+
|
|
|
|
|
+INSERT INTO `sys_dict_data` (`dict_sort`, `tenant_id`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `create_dept`, `create_by`, `create_time`, `remark`)
|
|
|
|
|
+SELECT 3, '000000', '不适用', '不适用', 'visit_allergen_evaluate', '', 'info', 'N', 103, 1, NOW(), '不适用本项'
|
|
|
|
|
+WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'visit_allergen_evaluate' AND `dict_value` = '不适用');
|
|
|
|
|
+
|
|
|
|
|
+-- 11. 验证
|
|
|
|
|
+SELECT 'risk_factory_visit' AS tbl, COUNT(*) AS cnt FROM `risk_factory_visit`
|
|
|
|
|
+UNION ALL
|
|
|
|
|
+SELECT 'risk_factory_visit_report', COUNT(*) FROM `risk_factory_visit_report`
|
|
|
|
|
+UNION ALL
|
|
|
|
|
+SELECT 'visit_status', COUNT(*) FROM `sys_dict_data` WHERE `dict_type` = 'visit_status'
|
|
|
|
|
+UNION ALL
|
|
|
|
|
+SELECT 'visit_audit_result', COUNT(*) FROM `sys_dict_data` WHERE `dict_type` = 'visit_audit_result'
|
|
|
|
|
+UNION ALL
|
|
|
|
|
+SELECT 'visit_basic_evaluate', COUNT(*) FROM `sys_dict_data` WHERE `dict_type` = 'visit_basic_evaluate'
|
|
|
|
|
+UNION ALL
|
|
|
|
|
+SELECT 'visit_allergen_evaluate', COUNT(*) FROM `sys_dict_data` WHERE `dict_type` = 'visit_allergen_evaluate';
|