| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- -- =============================================================
- -- 风控品控平台 · 食品安全宣传增量脚本 (2026-07-08)
- -- 文件: risk_food_safety_campaign.sql
- -- 适用: 已有环境升级 / 新环境增量应用
- -- 幂等: 所有 DDL/DML 均使用条件判断,可重复执行
- -- =============================================================
- -- 1. 食品安全宣传活动表
- CREATE TABLE IF NOT EXISTS `risk_food_safety_campaign` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `campaign_code` VARCHAR(50) NOT NULL COMMENT '活动编号(CF+年月日+4位序号)',
- `campaign_name` VARCHAR(200) NOT NULL COMMENT '活动名称',
- `campaign_type` VARCHAR(50) NOT NULL COMMENT '活动类型(字典:risk_food_safety_campaign_type)',
- `start_time` DATETIME NOT NULL COMMENT '开始时间',
- `end_time` DATETIME NOT NULL COMMENT '结束时间',
- `expected_participants` INT DEFAULT 0 COMMENT '预计参与人数',
- `actual_participants` INT DEFAULT 0 COMMENT '实际参与人数',
- `location` VARCHAR(200) DEFAULT NULL COMMENT '活动地点',
- `description` VARCHAR(2000) DEFAULT NULL COMMENT '活动描述',
- `principal_id` BIGINT DEFAULT NULL COMMENT '负责人ID',
- `principal_name` VARCHAR(50) DEFAULT NULL COMMENT '负责人姓名',
- `status` VARCHAR(20) NOT NULL DEFAULT '未开始' COMMENT '状态(未开始/进行中/已结束)',
- `start_real_time` DATETIME DEFAULT NULL COMMENT '实际开始时间(点击"活动开始"时填充)',
- `end_real_time` DATETIME DEFAULT NULL COMMENT '实际结束时间(点击"活动结束"时填充)',
- `summary` VARCHAR(2000) DEFAULT NULL 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 '更新时间',
- `del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0存在 1删除)',
- PRIMARY KEY (`id`),
- UNIQUE KEY `uk_campaign_code` (`campaign_code`),
- KEY `idx_status` (`status`),
- KEY `idx_campaign_type` (`campaign_type`),
- KEY `idx_start_time` (`start_time`),
- KEY `idx_tenant` (`tenant_id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='食品安全·宣传活动表';
- -- 2. 食品安全宣传资料表
- CREATE TABLE IF NOT EXISTS `risk_food_safety_material` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
- `material_code` VARCHAR(50) NOT NULL COMMENT '资料编号(MT+年月日+4位序号)',
- `material_name` VARCHAR(200) NOT NULL COMMENT '资料名称',
- `material_type` VARCHAR(50) NOT NULL COMMENT '资料类型(字典:risk_food_safety_material_type)',
- `material_summary` VARCHAR(1000) DEFAULT NULL COMMENT '资料概述',
- `cover_url` VARCHAR(500) DEFAULT NULL COMMENT '资料封面URL(MinIO)',
- `cover_name` VARCHAR(200) DEFAULT NULL COMMENT '资料封面原始文件名',
- `attachment_url` VARCHAR(500) DEFAULT NULL COMMENT '资料附件URL(MinIO)',
- `attachment_name` VARCHAR(200) DEFAULT NULL COMMENT '资料附件原始文件名',
- `campaign_id` BIGINT DEFAULT NULL COMMENT '关联活动ID(可空)',
- `uploader_id` BIGINT DEFAULT NULL COMMENT '上传人ID',
- `uploader_name` VARCHAR(50) 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 '更新时间',
- `del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0存在 1删除)',
- PRIMARY KEY (`id`),
- UNIQUE KEY `uk_material_code` (`material_code`),
- KEY `idx_material_type` (`material_type`),
- KEY `idx_campaign_id` (`campaign_id`),
- KEY `idx_tenant` (`tenant_id`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='食品安全·宣传资料表';
- -- 3. 字典类型:活动类型(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 (12210, '000000', '食品安全活动类型', 'risk_food_safety_campaign_type', 103, 1, NOW(), 1, NOW(), '食品安全宣传活动类型')
- ON DUPLICATE KEY UPDATE `update_time` = NOW();
- -- 4. 字典类型:活动状态(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 (12211, '000000', '食品安全活动状态', 'risk_food_safety_campaign_status', 103, 1, NOW(), 1, NOW(), '食品安全宣传活动状态')
- ON DUPLICATE KEY UPDATE `update_time` = NOW();
- -- 5. 字典类型:资料类型(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 (12212, '000000', '食品安全资料类型', 'risk_food_safety_material_type', 103, 1, NOW(), 1, NOW(), '食品安全宣传资料类型')
- ON DUPLICATE KEY UPDATE `update_time` = NOW();
- -- 6. 字典数据:活动类型(5 项)
- 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', '食品安全基础培训', '食品安全基础培训', 'risk_food_safety_campaign_type', '', 'primary', 'N', 103, 1, NOW(), '食品安全基础培训'
- WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_campaign_type' 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', '各工作场景专项培训', '各工作场景专项培训', 'risk_food_safety_campaign_type', '', 'success', 'N', 103, 1, NOW(), '各工作场景专项培训'
- WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_campaign_type' 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', '商品标签标识规范培训', '商品标签标识规范培训', 'risk_food_safety_campaign_type', '', 'warning', 'N', 103, 1, NOW(), '商品标签标识规范培训'
- WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_campaign_type' 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 4, '000000', '客诉重点防范方面培训', '客诉重点防范方面培训', 'risk_food_safety_campaign_type', '', 'info', 'N', 103, 1, NOW(), '客诉重点防范方面培训'
- WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_campaign_type' 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 5, '000000', '检测技能及其他专项培训', '检测技能及其他专项培训', 'risk_food_safety_campaign_type', '', 'danger', 'N', 103, 1, NOW(), '检测技能及其他专项培训'
- WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_campaign_type' AND `dict_value` = '检测技能及其他专项培训');
- -- 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', '未开始', '未开始', 'risk_food_safety_campaign_status', '', 'info', 'N', 103, 1, NOW(), '活动创建初始状态'
- WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_campaign_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', '进行中', '进行中', 'risk_food_safety_campaign_status', '', 'primary', 'N', 103, 1, NOW(), '点击开始活动后状态变更为进行中'
- WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_campaign_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', '已结束', '已结束', 'risk_food_safety_campaign_status', '', 'success', 'N', 103, 1, NOW(), '点击活动结束并填写总结后状态变更为已结束'
- WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_campaign_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', '图文海报类', '图文海报类', 'risk_food_safety_material_type', '', 'primary', 'N', 103, 1, NOW(), '图文海报类宣传资料'
- WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_material_type' 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', '培训手册', '培训手册', 'risk_food_safety_material_type', '', 'success', 'N', 103, 1, NOW(), '培训手册类宣传资料'
- WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_material_type' 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', '视频音频类', '视频音频类', 'risk_food_safety_material_type', '', 'warning', 'N', 103, 1, NOW(), '视频音频类宣传资料'
- WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_material_type' AND `dict_value` = '视频音频类');
- -- 9. 验证
- SELECT 'risk_food_safety_campaign' AS tbl, COUNT(*) AS cnt FROM `risk_food_safety_campaign`
- UNION ALL
- SELECT 'risk_food_safety_material', COUNT(*) FROM `risk_food_safety_material`
- UNION ALL
- SELECT 'risk_food_safety_campaign_type', COUNT(*) FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_campaign_type'
- UNION ALL
- SELECT 'risk_food_safety_campaign_status', COUNT(*) FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_campaign_status'
- UNION ALL
- SELECT 'risk_food_safety_material_type', COUNT(*) FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_material_type';
|