-- 项目定制需求(99积分提交,审核不通过自动退回) -- 可重复执行菜单部分;建表仅在表不存在时执行。 CREATE TABLE IF NOT EXISTS `app_tech_stack` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `name` varchar(50) NOT NULL COMMENT '技术栈名称', `sort` int NOT NULL DEFAULT 0 COMMENT '显示排序', `status` char(1) NOT NULL DEFAULT '0' COMMENT '0启用 1停用', `remark` varchar(500) DEFAULT NULL COMMENT '备注', `create_by` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_app_tech_stack_name` (`name`), KEY `idx_app_tech_stack_status_sort` (`status`, `sort`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='项目定制技术栈表'; INSERT INTO `app_tech_stack` (`name`, `sort`, `status`, `remark`, `create_by`, `create_time`) SELECT 'UniApp + Spring Boot', 1, '0', '适合跨端小程序项目', 'admin', NOW() WHERE NOT EXISTS (SELECT 1 FROM `app_tech_stack` WHERE `name` = 'UniApp + Spring Boot'); INSERT INTO `app_tech_stack` (`name`, `sort`, `status`, `remark`, `create_by`, `create_time`) SELECT 'Vue + Spring Boot', 2, '0', '适合管理系统和Web项目', 'admin', NOW() WHERE NOT EXISTS (SELECT 1 FROM `app_tech_stack` WHERE `name` = 'Vue + Spring Boot'); INSERT INTO `app_tech_stack` (`name`, `sort`, `status`, `remark`, `create_by`, `create_time`) SELECT '微信小程序原生 + Spring Boot', 3, '0', '适合微信原生小程序项目', 'admin', NOW() WHERE NOT EXISTS (SELECT 1 FROM `app_tech_stack` WHERE `name` = '微信小程序原生 + Spring Boot'); INSERT INTO `app_tech_stack` (`name`, `sort`, `status`, `remark`, `create_by`, `create_time`) SELECT '其他(请在需求中说明)', 99, '0', '未确定或需要其他技术栈', 'admin', NOW() WHERE NOT EXISTS (SELECT 1 FROM `app_tech_stack` WHERE `name` = '其他(请在需求中说明)'); CREATE TABLE IF NOT EXISTS `app_custom_request` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `request_no` varchar(32) NOT NULL COMMENT '需求单号', `user_id` bigint NOT NULL COMMENT '用户ID', `project_name` varchar(30) NOT NULL COMMENT '项目名称', `requirement_content` varchar(500) NOT NULL COMMENT '项目需求', `tech_stack_id` bigint DEFAULT NULL COMMENT '技术栈ID', `tech_stack_name` varchar(50) DEFAULT NULL COMMENT '提交时技术栈名称', `status` tinyint NOT NULL DEFAULT 0 COMMENT '0待审核 1审核中 2已接单 3开发中 4已完成 5审核未通过', `progress_note` varchar(300) DEFAULT NULL COMMENT '当前进度说明', `point_amount` int NOT NULL DEFAULT 99 COMMENT '提交扣除积分', `point_status` tinyint NOT NULL DEFAULT 0 COMMENT '0已扣除 1已退回', `reject_reason` varchar(300) DEFAULT NULL COMMENT '审核未通过原因', `create_by` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime NOT NULL COMMENT '创建时间', `update_by` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_custom_request_no` (`request_no`), KEY `idx_custom_request_user_time` (`user_id`, `update_time`), KEY `idx_custom_request_status_time` (`status`, `update_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='项目定制需求表'; -- 兼容已经创建过 app_custom_request 的数据库。 SET @tech_stack_id_exists := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'app_custom_request' AND COLUMN_NAME = 'tech_stack_id' ); SET @tech_stack_id_sql := IF( @tech_stack_id_exists = 0, 'ALTER TABLE `app_custom_request` ADD COLUMN `tech_stack_id` bigint DEFAULT NULL COMMENT ''技术栈ID'' AFTER `requirement_content`', 'SELECT 1' ); PREPARE tech_stack_id_stmt FROM @tech_stack_id_sql; EXECUTE tech_stack_id_stmt; DEALLOCATE PREPARE tech_stack_id_stmt; SET @tech_stack_name_exists := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'app_custom_request' AND COLUMN_NAME = 'tech_stack_name' ); SET @tech_stack_name_sql := IF( @tech_stack_name_exists = 0, 'ALTER TABLE `app_custom_request` ADD COLUMN `tech_stack_name` varchar(50) DEFAULT NULL COMMENT ''提交时技术栈名称'' AFTER `tech_stack_id`', 'SELECT 1' ); PREPARE tech_stack_name_stmt FROM @tech_stack_name_sql; EXECUTE tech_stack_name_stmt; DEALLOCATE PREPARE tech_stack_name_stmt; SET @custom_request_parent_id := COALESCE( (SELECT parent_id FROM sys_menu WHERE perms = 'app:resource:list' LIMIT 1), (SELECT parent_id FROM sys_menu WHERE perms = 'app:article:list' LIMIT 1), 0 ); SET @custom_request_order_num := COALESCE( (SELECT MAX(order_num) + 1 FROM sys_menu WHERE parent_id = @custom_request_parent_id), 1 ); INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) SELECT '项目定制', @custom_request_parent_id, @custom_request_order_num, 'customRequest', 'app/customRequest/index', '', 1, 0, 'C', '0', '0', 'app:customRequest:list', 'form', 'admin', NOW(), '', NULL, '项目定制需求管理' WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'app:customRequest:list'); SET @custom_request_menu_id := ( SELECT menu_id FROM sys_menu WHERE perms = 'app:customRequest:list' LIMIT 1 ); INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) SELECT '定制需求查询', @custom_request_menu_id, 1, '', '', '', 1, 0, 'F', '0', '0', 'app:customRequest:query', '#', 'admin', NOW(), '', NULL, '' WHERE @custom_request_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'app:customRequest:query'); INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) SELECT '定制状态修改', @custom_request_menu_id, 2, '', '', '', 1, 0, 'F', '0', '0', 'app:customRequest:edit', '#', 'admin', NOW(), '', NULL, '' WHERE @custom_request_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'app:customRequest:edit'); SET @tech_stack_order_num := COALESCE( (SELECT MAX(order_num) + 1 FROM sys_menu WHERE parent_id = @custom_request_parent_id), 1 ); INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) SELECT '技术栈管理', @custom_request_parent_id, @tech_stack_order_num, 'techStack', 'app/techStack/index', '', 1, 0, 'C', '0', '0', 'app:techStack:list', 'tree-table', 'admin', NOW(), '', NULL, '项目定制技术栈管理' WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'app:techStack:list'); SET @tech_stack_menu_id := ( SELECT menu_id FROM sys_menu WHERE perms = 'app:techStack:list' LIMIT 1 ); INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) SELECT '技术栈查询', @tech_stack_menu_id, 1, '', '', '', 1, 0, 'F', '0', '0', 'app:techStack:query', '#', 'admin', NOW(), '', NULL, '' WHERE @tech_stack_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'app:techStack:query'); INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) SELECT '技术栈新增', @tech_stack_menu_id, 2, '', '', '', 1, 0, 'F', '0', '0', 'app:techStack:add', '#', 'admin', NOW(), '', NULL, '' WHERE @tech_stack_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'app:techStack:add'); INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) SELECT '技术栈修改', @tech_stack_menu_id, 3, '', '', '', 1, 0, 'F', '0', '0', 'app:techStack:edit', '#', 'admin', NOW(), '', NULL, '' WHERE @tech_stack_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'app:techStack:edit'); INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, query, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark) SELECT '技术栈删除', @tech_stack_menu_id, 4, '', '', '', 1, 0, 'F', '0', '0', 'app:techStack:remove', '#', 'admin', NOW(), '', NULL, '' WHERE @tech_stack_menu_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE perms = 'app:techStack:remove');