risk_food_safety_campaign.sql 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. -- =============================================================
  2. -- 风控品控平台 · 食品安全宣传增量脚本 (2026-07-08)
  3. -- 文件: risk_food_safety_campaign.sql
  4. -- 适用: 已有环境升级 / 新环境增量应用
  5. -- 幂等: 所有 DDL/DML 均使用条件判断,可重复执行
  6. -- =============================================================
  7. -- 1. 食品安全宣传活动表
  8. CREATE TABLE IF NOT EXISTS `risk_food_safety_campaign` (
  9. `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  10. `campaign_code` VARCHAR(50) NOT NULL COMMENT '活动编号(CF+年月日+4位序号)',
  11. `campaign_name` VARCHAR(200) NOT NULL COMMENT '活动名称',
  12. `campaign_type` VARCHAR(50) NOT NULL COMMENT '活动类型(字典:risk_food_safety_campaign_type)',
  13. `start_time` DATETIME NOT NULL COMMENT '开始时间',
  14. `end_time` DATETIME NOT NULL COMMENT '结束时间',
  15. `expected_participants` INT DEFAULT 0 COMMENT '预计参与人数',
  16. `actual_participants` INT DEFAULT 0 COMMENT '实际参与人数',
  17. `location` VARCHAR(200) DEFAULT NULL COMMENT '活动地点',
  18. `description` VARCHAR(2000) DEFAULT NULL COMMENT '活动描述',
  19. `principal_id` BIGINT DEFAULT NULL COMMENT '负责人ID',
  20. `principal_name` VARCHAR(50) DEFAULT NULL COMMENT '负责人姓名',
  21. `status` VARCHAR(20) NOT NULL DEFAULT '未开始' COMMENT '状态(未开始/进行中/已结束)',
  22. `start_real_time` DATETIME DEFAULT NULL COMMENT '实际开始时间(点击"活动开始"时填充)',
  23. `end_real_time` DATETIME DEFAULT NULL COMMENT '实际结束时间(点击"活动结束"时填充)',
  24. `summary` VARCHAR(2000) DEFAULT NULL COMMENT '活动总结',
  25. `remark` VARCHAR(1000) DEFAULT NULL COMMENT '备注',
  26. `tenant_id` VARCHAR(20) NOT NULL DEFAULT '000000' COMMENT '租户ID',
  27. `create_dept` BIGINT DEFAULT NULL COMMENT '创建部门',
  28. `create_by` BIGINT DEFAULT NULL COMMENT '创建人',
  29. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  30. `update_by` BIGINT DEFAULT NULL COMMENT '更新人',
  31. `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  32. `del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0存在 1删除)',
  33. PRIMARY KEY (`id`),
  34. UNIQUE KEY `uk_campaign_code` (`campaign_code`),
  35. KEY `idx_status` (`status`),
  36. KEY `idx_campaign_type` (`campaign_type`),
  37. KEY `idx_start_time` (`start_time`),
  38. KEY `idx_tenant` (`tenant_id`)
  39. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='食品安全·宣传活动表';
  40. -- 2. 食品安全宣传资料表
  41. CREATE TABLE IF NOT EXISTS `risk_food_safety_material` (
  42. `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  43. `material_code` VARCHAR(50) NOT NULL COMMENT '资料编号(MT+年月日+4位序号)',
  44. `material_name` VARCHAR(200) NOT NULL COMMENT '资料名称',
  45. `material_type` VARCHAR(50) NOT NULL COMMENT '资料类型(字典:risk_food_safety_material_type)',
  46. `material_summary` VARCHAR(1000) DEFAULT NULL COMMENT '资料概述',
  47. `cover_url` VARCHAR(500) DEFAULT NULL COMMENT '资料封面URL(MinIO)',
  48. `cover_name` VARCHAR(200) DEFAULT NULL COMMENT '资料封面原始文件名',
  49. `attachment_url` VARCHAR(500) DEFAULT NULL COMMENT '资料附件URL(MinIO)',
  50. `attachment_name` VARCHAR(200) DEFAULT NULL COMMENT '资料附件原始文件名',
  51. `campaign_id` BIGINT DEFAULT NULL COMMENT '关联活动ID(可空)',
  52. `uploader_id` BIGINT DEFAULT NULL COMMENT '上传人ID',
  53. `uploader_name` VARCHAR(50) DEFAULT NULL COMMENT '上传人姓名',
  54. `tenant_id` VARCHAR(20) NOT NULL DEFAULT '000000' COMMENT '租户ID',
  55. `create_dept` BIGINT DEFAULT NULL COMMENT '创建部门',
  56. `create_by` BIGINT DEFAULT NULL COMMENT '创建人',
  57. `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  58. `update_by` BIGINT DEFAULT NULL COMMENT '更新人',
  59. `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  60. `del_flag` CHAR(1) DEFAULT '0' COMMENT '删除标志(0存在 1删除)',
  61. PRIMARY KEY (`id`),
  62. UNIQUE KEY `uk_material_code` (`material_code`),
  63. KEY `idx_material_type` (`material_type`),
  64. KEY `idx_campaign_id` (`campaign_id`),
  65. KEY `idx_tenant` (`tenant_id`)
  66. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='食品安全·宣传资料表';
  67. -- 3. 字典类型:活动类型(5 项)
  68. INSERT INTO `sys_dict_type` (`dict_id`, `tenant_id`, `dict_name`, `dict_type`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
  69. VALUES (12210, '000000', '食品安全活动类型', 'risk_food_safety_campaign_type', 103, 1, NOW(), 1, NOW(), '食品安全宣传活动类型')
  70. ON DUPLICATE KEY UPDATE `update_time` = NOW();
  71. -- 4. 字典类型:活动状态(3 项)
  72. INSERT INTO `sys_dict_type` (`dict_id`, `tenant_id`, `dict_name`, `dict_type`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
  73. VALUES (12211, '000000', '食品安全活动状态', 'risk_food_safety_campaign_status', 103, 1, NOW(), 1, NOW(), '食品安全宣传活动状态')
  74. ON DUPLICATE KEY UPDATE `update_time` = NOW();
  75. -- 5. 字典类型:资料类型(3 项)
  76. INSERT INTO `sys_dict_type` (`dict_id`, `tenant_id`, `dict_name`, `dict_type`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
  77. VALUES (12212, '000000', '食品安全资料类型', 'risk_food_safety_material_type', 103, 1, NOW(), 1, NOW(), '食品安全宣传资料类型')
  78. ON DUPLICATE KEY UPDATE `update_time` = NOW();
  79. -- 6. 字典数据:活动类型(5 项)
  80. 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`)
  81. SELECT 1, '000000', '食品安全基础培训', '食品安全基础培训', 'risk_food_safety_campaign_type', '', 'primary', 'N', 103, 1, NOW(), '食品安全基础培训'
  82. WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_campaign_type' AND `dict_value` = '食品安全基础培训');
  83. 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`)
  84. SELECT 2, '000000', '各工作场景专项培训', '各工作场景专项培训', 'risk_food_safety_campaign_type', '', 'success', 'N', 103, 1, NOW(), '各工作场景专项培训'
  85. WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_campaign_type' AND `dict_value` = '各工作场景专项培训');
  86. 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`)
  87. SELECT 3, '000000', '商品标签标识规范培训', '商品标签标识规范培训', 'risk_food_safety_campaign_type', '', 'warning', 'N', 103, 1, NOW(), '商品标签标识规范培训'
  88. WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_campaign_type' AND `dict_value` = '商品标签标识规范培训');
  89. 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`)
  90. SELECT 4, '000000', '客诉重点防范方面培训', '客诉重点防范方面培训', 'risk_food_safety_campaign_type', '', 'info', 'N', 103, 1, NOW(), '客诉重点防范方面培训'
  91. WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_campaign_type' AND `dict_value` = '客诉重点防范方面培训');
  92. 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`)
  93. SELECT 5, '000000', '检测技能及其他专项培训', '检测技能及其他专项培训', 'risk_food_safety_campaign_type', '', 'danger', 'N', 103, 1, NOW(), '检测技能及其他专项培训'
  94. WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_campaign_type' AND `dict_value` = '检测技能及其他专项培训');
  95. -- 7. 字典数据:活动状态(3 项)
  96. 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`)
  97. SELECT 1, '000000', '未开始', '未开始', 'risk_food_safety_campaign_status', '', 'info', 'N', 103, 1, NOW(), '活动创建初始状态'
  98. WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_campaign_status' AND `dict_value` = '未开始');
  99. 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`)
  100. SELECT 2, '000000', '进行中', '进行中', 'risk_food_safety_campaign_status', '', 'primary', 'N', 103, 1, NOW(), '点击开始活动后状态变更为进行中'
  101. WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_campaign_status' AND `dict_value` = '进行中');
  102. 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`)
  103. SELECT 3, '000000', '已结束', '已结束', 'risk_food_safety_campaign_status', '', 'success', 'N', 103, 1, NOW(), '点击活动结束并填写总结后状态变更为已结束'
  104. WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_campaign_status' AND `dict_value` = '已结束');
  105. -- 8. 字典数据:资料类型(3 项)
  106. 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`)
  107. SELECT 1, '000000', '图文海报类', '图文海报类', 'risk_food_safety_material_type', '', 'primary', 'N', 103, 1, NOW(), '图文海报类宣传资料'
  108. WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_material_type' AND `dict_value` = '图文海报类');
  109. 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`)
  110. SELECT 2, '000000', '培训手册', '培训手册', 'risk_food_safety_material_type', '', 'success', 'N', 103, 1, NOW(), '培训手册类宣传资料'
  111. WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_material_type' AND `dict_value` = '培训手册');
  112. 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`)
  113. SELECT 3, '000000', '视频音频类', '视频音频类', 'risk_food_safety_material_type', '', 'warning', 'N', 103, 1, NOW(), '视频音频类宣传资料'
  114. WHERE NOT EXISTS (SELECT 1 FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_material_type' AND `dict_value` = '视频音频类');
  115. -- 9. 验证
  116. SELECT 'risk_food_safety_campaign' AS tbl, COUNT(*) AS cnt FROM `risk_food_safety_campaign`
  117. UNION ALL
  118. SELECT 'risk_food_safety_material', COUNT(*) FROM `risk_food_safety_material`
  119. UNION ALL
  120. SELECT 'risk_food_safety_campaign_type', COUNT(*) FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_campaign_type'
  121. UNION ALL
  122. SELECT 'risk_food_safety_campaign_status', COUNT(*) FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_campaign_status'
  123. UNION ALL
  124. SELECT 'risk_food_safety_material_type', COUNT(*) FROM `sys_dict_data` WHERE `dict_type` = 'risk_food_safety_material_type';