-- ============================================= -- 售后:问题库 + 回访(可重复执行) -- 含:after_sale_ticket 加 6 列、after_sale_problem / after_sale_visit 建表、问题库菜单(空闲 id 602710-602716) -- ============================================= -- 1. after_sale_ticket 加回访/沉淀相关列 SET @c := (SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'after_sale_ticket' AND COLUMN_NAME = 'visit_status'); SET @ddl := IF(@c = 0, 'ALTER TABLE `after_sale_ticket` ADD COLUMN `visit_status` tinyint NULL COMMENT ''回访状态: 0-待回访 1-已回访通过'' AFTER `closed_time`, ADD COLUMN `last_visit_time` datetime NULL COMMENT ''最近一次回访时间'' AFTER `visit_status`, ADD COLUMN `last_visit_satisfied` bit(1) NULL COMMENT ''最近一次回访是否满意'' AFTER `last_visit_time`, ADD COLUMN `last_visit_recurred` bit(1) NULL COMMENT ''最近一次回访问题是否复发'' AFTER `last_visit_satisfied`, ADD COLUMN `problem_id` bigint NULL COMMENT ''沉淀问题编号'' AFTER `last_visit_recurred`, ADD COLUMN `problem_no` varchar(64) NULL COMMENT ''沉淀问题单号'' AFTER `problem_id`', 'SELECT 1'); PREPARE s FROM @ddl; EXECUTE s; DEALLOCATE PREPARE s; -- 2. 问题库表 CREATE TABLE IF NOT EXISTS `after_sale_problem` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '问题编号', `no` varchar(64) DEFAULT NULL COMMENT '问题单号 AP+yyyyMMdd+6位', `title` varchar(255) DEFAULT NULL COMMENT '问题标题', `source_ticket_id` bigint DEFAULT NULL COMMENT '来源工单编号', `source_ticket_no` varchar(64) DEFAULT NULL COMMENT '来源工单单号', `customer_id` bigint DEFAULT NULL COMMENT '客户编号', `item_id` bigint DEFAULT NULL COMMENT '物料编号', `item_code` varchar(64) DEFAULT NULL COMMENT '物料编码', `item_name` varchar(255) DEFAULT NULL COMMENT '物料名称', `batch_id` bigint DEFAULT NULL COMMENT '生产批次编号', `batch_code` varchar(64) DEFAULT NULL COMMENT '生产批次号', `issue_type` tinyint DEFAULT NULL COMMENT '问题类型', `issue_category` varchar(64) DEFAULT NULL COMMENT '问题分类', `severity_level` tinyint DEFAULT NULL COMMENT '严重程度', `description` varchar(1000) DEFAULT NULL COMMENT '问题描述', `root_cause_category` tinyint DEFAULT NULL COMMENT '根因分类', `root_cause` text COMMENT '根因分析', `solution` text COMMENT '解决方案', `status` tinyint NOT NULL DEFAULT 0 COMMENT '状态', `owner_user_id` bigint DEFAULT NULL COMMENT '沉淀人用户编号', `publish_time` datetime DEFAULT NULL COMMENT '发布时间', `remark` varchar(500) DEFAULT NULL COMMENT '备注', `creator` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`), KEY `idx_source_ticket` (`source_ticket_id`), KEY `idx_item` (`item_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='售后问题库表'; -- 3. 回访记录表 CREATE TABLE IF NOT EXISTS `after_sale_visit` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '回访记录编号', `ticket_id` bigint DEFAULT NULL COMMENT '工单编号', `visit_type` tinyint DEFAULT NULL COMMENT '回访方式: 0-电话 1-上门 2-远程 3-其他', `visitor_user_id` bigint DEFAULT NULL COMMENT '回访人用户编号', `content` varchar(1000) DEFAULT NULL COMMENT '回访内容', `is_satisfied` bit(1) DEFAULT NULL COMMENT '是否满意', `is_recurred` bit(1) DEFAULT NULL COMMENT '问题是否复发', `visit_time` datetime DEFAULT NULL COMMENT '回访时间', `remark` varchar(500) DEFAULT NULL COMMENT '备注', `creator` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updater` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', PRIMARY KEY (`id`), KEY `idx_ticket` (`ticket_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='售后回访记录表'; -- 4. 问题库菜单(挂 602587 售后管理 下,空闲 id 602710-602716) INSERT INTO `system_menu` (`id`,`name`,`permission`,`type`,`sort`,`parent_id`,`path`,`icon`,`component`,`component_name`,`status`,`visible`,`keep_alive`,`always_show`,`creator`,`create_time`,`updater`,`update_time`,`deleted`) VALUES (602710,'问题库','',2,3,602587,'problem','ep:collection','/aftersales/problem/index','AfterSaleProblem',0,b'1',b'1',b'1','1',NOW(),'1',NOW(),b'0'), (602711,'问题库查询','aftersales:problem:query',3,1,602710,'','','',NULL,0,b'1',b'1',b'1','1',NOW(),'1',NOW(),b'0'), (602712,'问题库创建','aftersales:problem:create',3,2,602710,'','','',NULL,0,b'1',b'1',b'1','1',NOW(),'1',NOW(),b'0'), (602713,'问题库更新','aftersales:problem:update',3,3,602710,'','','',NULL,0,b'1',b'1',b'1','1',NOW(),'1',NOW(),b'0'), (602714,'问题库删除','aftersales:problem:delete',3,4,602710,'','','',NULL,0,b'1',b'1',b'1','1',NOW(),'1',NOW(),b'0'), (602715,'问题库发布','aftersales:problem:publish',3,5,602710,'','','',NULL,0,b'1',b'1',b'1','1',NOW(),'1',NOW(),b'0'), (602716,'问题库停用','aftersales:problem:disable',3,6,602710,'','','',NULL,0,b'1',b'1',b'1','1',NOW(),'1',NOW(),b'0') ON DUPLICATE KEY UPDATE `name`=VALUES(`name`),`permission`=VALUES(`permission`),`type`=VALUES(`type`),`parent_id`=VALUES(`parent_id`),`path`=VALUES(`path`),`component`=VALUES(`component`),`component_name`=VALUES(`component_name`),`status`=VALUES(`status`),`deleted`=b'0'; INSERT INTO `system_role_menu` (`role_id`,`menu_id`,`creator`,`create_time`,`updater`,`update_time`,`deleted`) SELECT 1, m.menu_id, '1', NOW(), '1', NOW(), b'0' FROM (SELECT 602710 AS menu_id UNION ALL SELECT 602711 UNION ALL SELECT 602712 UNION ALL SELECT 602713 UNION ALL SELECT 602714 UNION ALL SELECT 602715 UNION ALL SELECT 602716) m WHERE NOT EXISTS (SELECT 1 FROM `system_role_menu` rm WHERE rm.`role_id`=1 AND rm.`menu_id`=m.menu_id AND rm.`deleted`=b'0'); SELECT '售后问题库/回访初始化完成' AS result;