|
@@ -4363,6 +4363,8 @@ try {
|
|
|
|
|
|
|
|
// 迁移40: 添加supplier_admin角色到users.role ENUM
|
|
// 迁移40: 添加supplier_admin角色到users.role ENUM
|
|
|
try {
|
|
try {
|
|
|
|
|
+ // 先将非法role值统一修正为parent,避免ALTER ENUM时Data truncated错误
|
|
|
|
|
+ jdbcTemplate.execute("UPDATE users SET role='parent' WHERE role NOT IN ('parent','child','teacher','supplier_admin')");
|
|
|
jdbcTemplate.execute("ALTER TABLE users MODIFY COLUMN role ENUM('parent','child','teacher','supplier_admin') NOT NULL DEFAULT 'parent' COMMENT '当前活跃角色'");
|
|
jdbcTemplate.execute("ALTER TABLE users MODIFY COLUMN role ENUM('parent','child','teacher','supplier_admin') NOT NULL DEFAULT 'parent' COMMENT '当前活跃角色'");
|
|
|
log.info("已添加supplier_admin到users.role ENUM");
|
|
log.info("已添加supplier_admin到users.role ENUM");
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
@@ -5881,5 +5883,79 @@ try {
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
|
// 表已存在,忽略错误
|
|
// 表已存在,忽略错误
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ // 迁移 96: product_orders 添加活动provision字段 + activity_provisions 表(活动商品统一管理)
|
|
|
|
|
+ try {
|
|
|
|
|
+ jdbcTemplate.execute("ALTER TABLE product_orders ADD COLUMN activity_id BIGINT DEFAULT NULL COMMENT '关联活动ID(product_type=activity时有效)'");
|
|
|
|
|
+ log.info("已添加activity_id列到product_orders表");
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ // 列已存在,忽略错误
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ jdbcTemplate.execute("ALTER TABLE product_orders ADD COLUMN provision_status VARCHAR(32) DEFAULT NULL COMMENT '活动provision状态: unprovisioned(待审核)/provisioned(已发货)/signed_in(已签到)/completed(已完成)/cancelled(审核拒绝)'");
|
|
|
|
|
+ log.info("已添加provision_status列到product_orders表");
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ // 列已存在,忽略错误
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ jdbcTemplate.execute("ALTER TABLE product_orders ADD COLUMN auditor_id BIGINT DEFAULT NULL COMMENT '审核人ID'");
|
|
|
|
|
+ log.info("已添加auditor_id列到product_orders表");
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ // 列已存在,忽略错误
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ jdbcTemplate.execute("ALTER TABLE product_orders ADD COLUMN audited_at DATETIME DEFAULT NULL COMMENT '审核时间'");
|
|
|
|
|
+ log.info("已添加audited_at列到product_orders表");
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ // 列已存在,忽略错误
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ jdbcTemplate.execute("ALTER TABLE product_orders ADD COLUMN audit_reason TEXT DEFAULT NULL COMMENT '审核拒绝原因'");
|
|
|
|
|
+ log.info("已添加audit_reason列到product_orders表");
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ // 列已存在,忽略错误
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS activity_provisions (" +
|
|
|
|
|
+ "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
|
|
+ "order_id BIGINT NOT NULL COMMENT '商品订单ID', " +
|
|
|
|
|
+ "order_no VARCHAR(64) NOT NULL COMMENT '订单编号', " +
|
|
|
|
|
+ "product_id BIGINT NOT NULL COMMENT '商品ID', " +
|
|
|
|
|
+ "activity_id BIGINT NOT NULL COMMENT '活动ID', " +
|
|
|
|
|
+ "buyer_id BIGINT NOT NULL COMMENT '购买者用户ID', " +
|
|
|
|
|
+ "family_id BIGINT COMMENT '家庭ID', " +
|
|
|
|
|
+ "child_id BIGINT COMMENT '报名孩子ID(签到时填写)', " +
|
|
|
|
|
+ "status VARCHAR(32) NOT NULL DEFAULT 'unprovisioned' COMMENT 'unprovisioned/provisioned/signed_in/completed/cancelled', " +
|
|
|
|
|
+ "qr_code VARCHAR(512) COMMENT '签到二维码', " +
|
|
|
|
|
+ "checked_in_at DATETIME COMMENT '签到时间', " +
|
|
|
|
|
+ "completed_at DATETIME COMMENT '完成时间', " +
|
|
|
|
|
+ "refund_amount INT COMMENT '退款金额(分)', " +
|
|
|
|
|
+ "refund_at DATETIME COMMENT '退款时间', " +
|
|
|
|
|
+ "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
|
|
+ "updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
|
|
|
|
|
+ "INDEX idx_order (order_id), " +
|
|
|
|
|
+ "INDEX idx_activity (activity_id), " +
|
|
|
|
|
+ "INDEX idx_buyer (buyer_id), " +
|
|
|
|
|
+ "INDEX idx_status (status)" +
|
|
|
|
|
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='活动provision记录表'");
|
|
|
|
|
+ log.info("已创建activity_provisions表");
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ // 表已存在,忽略错误
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 迁移 97: DAN测评服务佣金配置
|
|
|
|
|
+ seedDanCommissionConfig();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private void seedDanCommissionConfig() {
|
|
|
|
|
+ try {
|
|
|
|
|
+ jdbcTemplate.execute("INSERT IGNORE INTO sys_config (config_key, config_value, description, created_at) VALUES " +
|
|
|
|
|
+ "('dan_commission_rate', '10', 'DAN测评服务通用佣金比例(%)', NOW()), " +
|
|
|
|
|
+ "('dan_commission_rate_assessor', '10', 'DAN测评评估师佣金比例(%)', NOW()), " +
|
|
|
|
|
+ "('dan_commission_rate_planner', '10', 'DAN测评规划师佣金比例(%)', NOW())");
|
|
|
|
|
+ log.info("已初始化DAN测评佣金配置");
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.warn("DAN佣金配置种子数据可能已存在: " + e.getMessage());
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|