edu_manage/script/sql/edu/schema_upgrade_v1.sql
2026-06-26 08:04:05 +08:00

130 lines
9.3 KiB
SQL

-- =====================================================================
-- FIGS 教育管理模块 - 升级脚本 v1 (升学服务/里程碑交付)
-- 增量脚本, 在 schema.sql 之后执行
-- 功能: 升学服务包(强基/综评/竞赛/志愿/留学) + 里程碑交付模型
-- =====================================================================
SET NAMES utf8mb4;
-- -----------------------------------------------------------------
-- 1. 课包表扩展: 支持升学服务包 (用存储过程保证幂等, 可重复执行)
-- -----------------------------------------------------------------
DROP PROCEDURE IF EXISTS `edu_upgrade_v1`;
DELIMITER $$
CREATE PROCEDURE `edu_upgrade_v1`()
BEGIN
-- 放宽 total_hours 约束
IF (SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='edu_course_package' AND COLUMN_NAME='total_hours') = 1 THEN
ALTER TABLE `edu_course_package`
MODIFY COLUMN `total_hours` decimal(10,2) NOT NULL DEFAULT 0.00 COMMENT '总课时(小时, 服务包为0)';
END IF;
-- 新增 billing_type
IF (SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='edu_course_package' AND COLUMN_NAME='billing_type') = 0 THEN
ALTER TABLE `edu_course_package`
ADD COLUMN `billing_type` varchar(16) DEFAULT 'HOURS' COMMENT '计费方式 HOURS=按课时 PROJECT=按项目 MILESTONE=按里程碑 EFFECT=按效果' AFTER `is_gift`;
END IF;
-- 新增 service_category
IF (SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='edu_course_package' AND COLUMN_NAME='service_category') = 0 THEN
ALTER TABLE `edu_course_package`
ADD COLUMN `service_category` varchar(32) DEFAULT NULL COMMENT '升学服务类别(仅SERVICE类型) STRONG_BASE=强基 COMPREHENSIVE=综评 COMPETITION=竞赛 VOLUNTEER=志愿 ABROAD=留学' AFTER `billing_type`;
END IF;
END$$
DELIMITER ;
CALL `edu_upgrade_v1`();
DROP PROCEDURE IF EXISTS `edu_upgrade_v1`;
-- 1.3 更新字典: package_type 增加 SERVICE, 新增 billing_type / service_category 字典
-- (edu_dict 独立字典表, id 不自增需显式传, 当前最大id=107, 从108起; 幂等: 先删后插)
DELETE FROM `edu_dict` WHERE id BETWEEN 108 AND 121;
INSERT INTO `edu_dict`(`id`,`tenant_id`,`dict_type`,`dict_label`,`dict_value`,`sort_order`,`color`,`status`,`remark`,`create_by`,`create_time`) VALUES
(108,'000000','package_type','升学服务包','SERVICE',5,'danger','0','升学服务类(强基/综评/竞赛/志愿/留学)',1,NOW()),
(109,'000000','billing_type','按课时','HOURS',1,'primary','0',NULL,1,NOW()),
(110,'000000','billing_type','按项目','PROJECT',2,'success','0',NULL,1,NOW()),
(111,'000000','billing_type','按里程碑','MILESTONE',3,'warning','0',NULL,1,NOW()),
(112,'000000','billing_type','按效果','EFFECT',4,'info','0',NULL,1,NOW()),
(113,'000000','service_category','强基计划','STRONG_BASE',1,'danger','0',NULL,1,NOW()),
(114,'000000','service_category','综合评价','COMPREHENSIVE',2,'warning','0',NULL,1,NOW()),
(115,'000000','service_category','竞赛背书','COMPETITION',3,'primary','0',NULL,1,NOW()),
(116,'000000','service_category','志愿填报','VOLUNTEER',4,'success','0',NULL,1,NOW()),
(117,'000000','service_category','留学规划','ABROAD',5,'info','0',NULL,1,NOW());
-- -----------------------------------------------------------------
-- 2. 里程碑模板表 (服务包的交付节点定义)
-- -----------------------------------------------------------------
DROP TABLE IF EXISTS `edu_service_milestone`;
CREATE TABLE `edu_service_milestone` (
`id` bigint NOT NULL COMMENT '主键',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户ID',
`package_id` bigint NOT NULL COMMENT '关联课包ID(服务包)',
`milestone_name` varchar(128) NOT NULL COMMENT '里程碑名称(测评定位/笔试培训/面试集训/文书交付等)',
`milestone_code` varchar(32) DEFAULT NULL COMMENT '里程碑编码',
`order_num` int DEFAULT 0 COMMENT '顺序号(从小到大依次交付)',
`planned_amount` decimal(12,2) DEFAULT 0.00 COMMENT '该节点应收金额',
`planned_hours` decimal(10,2) DEFAULT 0.00 COMMENT '该节点计划课时(可空,部分服务含课时)',
`deliverable_desc` varchar(1000) DEFAULT NULL COMMENT '交付物说明(如:出测评报告/完成文书初稿)',
`status` char(1) DEFAULT '0' COMMENT '状态 0=启用 1=停用',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志 0=存在 1=删除',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`create_dept` bigint DEFAULT NULL COMMENT '创建部门',
`create_by` bigint DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_package` (`tenant_id`,`package_id`,`order_num`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='服务包里程碑模板(交付节点定义)';
-- -----------------------------------------------------------------
-- 3. 合同里程碑实例表 (挂在合同上的实际交付节点)
-- 交付即"消课": 状态推进触发金额确认
-- -----------------------------------------------------------------
DROP TABLE IF EXISTS `edu_contract_milestone`;
CREATE TABLE `edu_contract_milestone` (
`id` bigint NOT NULL COMMENT '主键',
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户ID',
`contract_id` bigint NOT NULL COMMENT '合同ID',
`package_id` bigint DEFAULT NULL COMMENT '服务包ID',
`milestone_name` varchar(128) NOT NULL COMMENT '里程碑名称',
`milestone_code` varchar(32) DEFAULT NULL COMMENT '里程碑编码',
`order_num` int DEFAULT 0 COMMENT '顺序号',
`planned_amount` decimal(12,2) DEFAULT 0.00 COMMENT '计划应收金额',
`paid_amount` decimal(12,2) DEFAULT 0.00 COMMENT '已收金额',
`actual_amount` decimal(12,2) DEFAULT 0.00 COMMENT '实际确认金额',
`planned_hours` decimal(10,2) DEFAULT 0.00 COMMENT '计划课时',
`status` char(1) DEFAULT '0' COMMENT '状态 0=待交付 1=进行中 2=已交付 3=已跳过',
`deliverable_url` varchar(500) DEFAULT NULL COMMENT '交付物附件URL(文书/材料)',
`delivered_by` bigint DEFAULT NULL COMMENT '交付人(员工ID, 通常是文书老师)',
`delivered_at` datetime DEFAULT NULL COMMENT '交付时间',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志 0=存在 1=删除',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
`create_dept` bigint DEFAULT NULL COMMENT '创建部门',
`create_by` bigint DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_contract` (`tenant_id`,`contract_id`,`order_num`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='合同里程碑实例(升学服务交付节点)';
-- -----------------------------------------------------------------
-- 4. 菜单: 升学服务 + 里程碑(复用课包/合同页面, 仅加按钮权限)
-- 课包菜单=2002, 合同菜单=2003, 幂等: 先删后插
-- -----------------------------------------------------------------
DELETE FROM `sys_menu` WHERE menu_id IN (2070, 2080, 2081);
INSERT INTO `sys_menu`(`menu_id`,`menu_name`,`parent_id`,`order_num`,`path`,`component`,`query_param`,`is_frame`,`is_cache`,`menu_type`,`visible`,`status`,`perms`,`icon`,`create_dept`,`create_by`,`create_time`,`remark`) VALUES
-- 课包下: 服务包里程碑模板维护按钮
(2070,'里程碑模板',2002,6,'#','',NULL,1,0,'F','0','0','edu:package:milestone','#',NULL,1,NOW(),'服务包里程碑模板'),
-- 合同下: 里程碑交付相关按钮
(2080,'里程碑交付',2003,9,'#','',NULL,1,0,'F','0','0','edu:contract:milestone','#',NULL,1,NOW(),'查看合同里程碑'),
(2081,'推进里程碑',2003,10,'#','',NULL,1,0,'F','0','0','edu:contract:deliver','#',NULL,1,NOW(),'推进里程碑交付');
-- 5. ContractAction 补充(代码常量已加, 此处字典对齐)
INSERT INTO `edu_dict`(`id`,`tenant_id`,`dict_type`,`dict_label`,`dict_value`,`sort_order`,`color`,`status`,`remark`,`create_by`,`create_time`) VALUES
(118,'000000','contract_type','补购','ADDON',6,'info','0',NULL,1,NOW()),
(119,'000000','contract_action','续费','RENEW',6,'primary','0',NULL,1,NOW()),
(120,'000000','contract_action','补购','ADDON',7,'info','0',NULL,1,NOW()),
(121,'000000','contract_action','里程碑交付','MILESTONE_DELIVER',8,'success','0',NULL,1,NOW());