|
|
@@ -1055,8 +1055,10 @@ public class DatabaseInitializer implements CommandLineRunner {
|
|
|
insertSysConfigSeed("trial_days", "7", "试用天数");
|
|
|
insertSysConfigSeed("trial_features", "[\"free_activities\",\"free_courses\",\"teacher_consultation\"]", "试用期间可用功能");
|
|
|
insertSysConfigSeed("member_pay_virtual_enabled", "1", "会员支付是否使用虚拟支付通道(1=虚拟,0=普通微信)");
|
|
|
- insertSysConfigSeed("gift_membership_threshold", "198000", "购买送会员商品累计达到该金额(分)赠送会员");
|
|
|
- insertSysConfigSeed("gift_membership_level", "FAMILY", "达到送会员额度后赠送的会员等级");
|
|
|
+insertSysConfigSeed("gift_membership_threshold", "198000", "购买送会员商品累计达到该金额(分)赠送会员");
|
|
|
+insertSysConfigSeed("gift_membership_level", "FAMILY", "达到送会员额度后赠送的会员等级");
|
|
|
+insertSysConfigSeed("gift_membership_original_threshold", "1000000", "送会员商品原价达标阈值(分),达到此金额后送会员商品部分实付一口价");
|
|
|
+insertSysConfigSeed("gift_membership_pay_price", "198000", "送会员商品达标后一口实付价(分)");
|
|
|
insertSysConfigSeed("health_dimension_weights", "{\"growth\":0.20,\"sleep\":0.15,\"vision\":0.10,\"immunity\":0.15,\"nutrition\":0.15,\"gut\":0.10,\"exercise\":0.15}", "7维健康→身能量权重配置");
|
|
|
insertSysConfigSeed("health_dimension_sync_factor", "0.5", "7维健康同步至身能量系数");
|
|
|
log.info("SysConfig 种子数据已加载");
|
|
|
@@ -2213,248 +2215,6 @@ public class DatabaseInitializer implements CommandLineRunner {
|
|
|
log.warn("创建 cart 表失败: {}", e.getMessage());
|
|
|
}
|
|
|
|
|
|
- // ==================== DanShop 电商模块建表 ============= // 1. danshop_categories (商品分类表)
|
|
|
- try {
|
|
|
- jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS danshop_categories (" +
|
|
|
- "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
- "parent_id BIGINT DEFAULT NULL COMMENT '父分类ID(null=一级)', " +
|
|
|
- "name VARCHAR(64) NOT NULL COMMENT '分类名称', " +
|
|
|
- "image VARCHAR(512) DEFAULT NULL COMMENT '分类图标URL', " +
|
|
|
- "sort_order INT DEFAULT 0 COMMENT '排序(越小越靠前)', " +
|
|
|
- "energy_dimension_id BIGINT DEFAULT NULL COMMENT '关联五维维度ID', " +
|
|
|
- "status INT DEFAULT 1 COMMENT '1启用/0禁用', " +
|
|
|
- "created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
- "updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
|
|
|
- "INDEX idx_parent (parent_id), " +
|
|
|
- "INDEX idx_status (status)" +
|
|
|
- ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品分类表'");
|
|
|
- log.info("已创建 danshop_categories 表");
|
|
|
- } catch (Exception e) {
|
|
|
- log.warn("创建 danshop_categories 表失败: {}", e.getMessage());
|
|
|
- }
|
|
|
-
|
|
|
- // 2. danshop_products (商品表)
|
|
|
- try {
|
|
|
- jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS danshop_products (" +
|
|
|
- "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
- "category_id BIGINT NOT NULL COMMENT '所属分类ID', " +
|
|
|
- "name VARCHAR(128) NOT NULL COMMENT '商品名称', " +
|
|
|
- "description TEXT COMMENT '商品详细描述', " +
|
|
|
- "cover_image VARCHAR(512) COMMENT '封面图URL', " +
|
|
|
- "images TEXT COMMENT '多图(JSON数组)', " +
|
|
|
- "price INT NOT NULL COMMENT '售价(分)', " +
|
|
|
- "member_price INT DEFAULT NULL COMMENT '会员价(分)', " +
|
|
|
- "cost_price INT DEFAULT NULL COMMENT '成本价(分)', " +
|
|
|
- "stock INT DEFAULT 0 COMMENT '库存数量', " +
|
|
|
- "sales_count INT DEFAULT 0 COMMENT '销量', " +
|
|
|
- "product_type VARCHAR(32) NOT NULL COMMENT '类型: physical/virtual/coupon/course', " +
|
|
|
- "vendor_id BIGINT DEFAULT NULL COMMENT '供应商ID', " +
|
|
|
- "vendor_name VARCHAR(64) COMMENT '供应商名称', " +
|
|
|
- "status VARCHAR(16) NOT NULL DEFAULT 'pending' COMMENT 'pending/approved/rejected/on_shelf/off_shelf', " +
|
|
|
- "reject_reason VARCHAR(255) DEFAULT NULL COMMENT '审核拒绝原因', " +
|
|
|
- "profit_rate INT DEFAULT 0 COMMENT '平台利润率(bps,100=1%)', " +
|
|
|
- "external_source VARCHAR(32) COMMENT '外部商品来源', " +
|
|
|
- "external_id VARCHAR(64) COMMENT '外部商品ID', " +
|
|
|
- "external_data TEXT COMMENT '外部商品完整数据(JSON)', " +
|
|
|
- "created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
- "updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
|
|
|
- "INDEX idx_category (category_id), " +
|
|
|
- "INDEX idx_vendor (vendor_id), " +
|
|
|
- "INDEX idx_status (status)" +
|
|
|
- ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表'");
|
|
|
- log.info("已创建 danshop_products 表");
|
|
|
- } catch (Exception e) {
|
|
|
- log.warn("创建 danshop_products 表失败: {}", e.getMessage());
|
|
|
- }
|
|
|
-
|
|
|
- // 3. danshop_orders (主订单表)
|
|
|
- try {
|
|
|
- jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS danshop_orders (" +
|
|
|
- "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
- "order_no VARCHAR(32) NOT NULL UNIQUE COMMENT '订单号(DS+时间戳+6位随机)', " +
|
|
|
- "buyer_id BIGINT NOT NULL COMMENT '买家ID', " +
|
|
|
- "family_id BIGINT DEFAULT NULL COMMENT '家庭ID', " +
|
|
|
- "total_amount INT NOT NULL COMMENT '订单总金额(分)', " +
|
|
|
- "discount_amount INT DEFAULT 0 COMMENT '优惠金额(分)', " +
|
|
|
- "actual_amount INT NOT NULL COMMENT '实付金额(分)', " +
|
|
|
- "status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT 'pending/paid/shipped/completed/refunding/refunded/cancelled', " +
|
|
|
- "payment_method VARCHAR(16) DEFAULT 'wechat' COMMENT 'wechat/alipay', " +
|
|
|
- "transaction_id VARCHAR(64) DEFAULT NULL COMMENT '微信/支付宝交易号', " +
|
|
|
- "paid_at DATETIME DEFAULT NULL COMMENT '支付时间', " +
|
|
|
- "shipped_at DATETIME DEFAULT NULL COMMENT '发货时间', " +
|
|
|
- "completed_at DATETIME DEFAULT NULL COMMENT '完成时间', " +
|
|
|
- "remark VARCHAR(255) DEFAULT NULL COMMENT '买家备注', " +
|
|
|
- "cancel_reason VARCHAR(255) DEFAULT NULL COMMENT '取消原因', " +
|
|
|
- "receiver_name VARCHAR(32) DEFAULT NULL COMMENT '收件人姓名', " +
|
|
|
- "receiver_phone VARCHAR(16) DEFAULT NULL COMMENT '收件人电话', " +
|
|
|
- "receiver_address VARCHAR(256) DEFAULT NULL COMMENT '收件人地址', " +
|
|
|
- "freight INT DEFAULT 0 COMMENT '运费(分)', " +
|
|
|
- "profit_amount INT DEFAULT 0 COMMENT '返利金额(分)', " +
|
|
|
- "created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
- "updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
|
|
|
- "INDEX idx_buyer (buyer_id), " +
|
|
|
- "INDEX idx_family (family_id), " +
|
|
|
- "INDEX idx_status (status), " +
|
|
|
- "INDEX idx_order_no (order_no)" +
|
|
|
- ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='主订单表'");
|
|
|
- log.info("已创建 danshop_orders 表");
|
|
|
- } catch (Exception e) {
|
|
|
- log.warn("创建 danshop_orders 表失败: {}", e.getMessage());
|
|
|
- }
|
|
|
-
|
|
|
- // 4. danshop_order_items (订单明细表)
|
|
|
- try {
|
|
|
- jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS danshop_order_items (" +
|
|
|
- "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
- "order_id BIGINT NOT NULL COMMENT '所属订单ID', " +
|
|
|
- "product_id BIGINT NOT NULL COMMENT '商品ID', " +
|
|
|
- "product_name VARCHAR(128) NOT NULL COMMENT '商品名称(快照)', " +
|
|
|
- "cover_image VARCHAR(512) COMMENT '封面图(快照)', " +
|
|
|
- "unit_price INT NOT NULL COMMENT '单价(分,快照)', " +
|
|
|
- "price INT NOT NULL COMMENT '单价(分,别名兼容)', " +
|
|
|
- "quantity INT NOT NULL DEFAULT 1 COMMENT '购买数量', " +
|
|
|
- "subtotal INT NOT NULL COMMENT '小计(分)', " +
|
|
|
- "product_type VARCHAR(32) COMMENT '商品类型(快照)', " +
|
|
|
- "vendor_id BIGINT COMMENT '供应商ID(快照)', " +
|
|
|
- "vendor_name VARCHAR(64) COMMENT '供应商名称(快照)', " +
|
|
|
- "created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
- "INDEX idx_order (order_id), " +
|
|
|
- "INDEX idx_product (product_id)" +
|
|
|
- ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单明细表'");
|
|
|
- log.info("已创建 danshop_order_items 表");
|
|
|
- } catch (Exception e) {
|
|
|
- log.warn("创建 danshop_order_items 表失败: {}", e.getMessage());
|
|
|
- }
|
|
|
-
|
|
|
- // 5. danshop_order_logs (订单操作日志表)
|
|
|
- try {
|
|
|
- jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS danshop_order_logs (" +
|
|
|
- "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
- "order_id BIGINT NOT NULL COMMENT '订单ID', " +
|
|
|
- "action VARCHAR(32) NOT NULL COMMENT '操作: create/pay/ship/confirm/refund/cancel', " +
|
|
|
- "operator_id BIGINT DEFAULT NULL COMMENT '操作人ID', " +
|
|
|
- "operator_type VARCHAR(16) DEFAULT NULL COMMENT 'buyer/vendor/admin/system', " +
|
|
|
- "detail TEXT DEFAULT NULL COMMENT '操作详情(JSON)', " +
|
|
|
- "created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
- "INDEX idx_order (order_id)" +
|
|
|
- ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单操作日志表'");
|
|
|
- log.info("已创建 danshop_order_logs 表");
|
|
|
- } catch (Exception e) {
|
|
|
- log.warn("创建 danshop_order_logs 表失败: {}", e.getMessage());
|
|
|
- }
|
|
|
-
|
|
|
- // 6. danshop_logistics (物流信息表)
|
|
|
- try {
|
|
|
- jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS danshop_logistics (" +
|
|
|
- "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
- "order_id BIGINT NOT NULL COMMENT '订单ID', " +
|
|
|
- "order_item_id BIGINT DEFAULT NULL COMMENT '订单明细ID', " +
|
|
|
- "logistics_no VARCHAR(64) NOT NULL COMMENT '物流单号', " +
|
|
|
- "logistics_company VARCHAR(32) NOT NULL COMMENT '物流公司编码: sf/yto/zt/sto/yd/ttkd', " +
|
|
|
- "logistics_name VARCHAR(32) DEFAULT NULL COMMENT '物流公司名称', " +
|
|
|
- "sender_name VARCHAR(32) DEFAULT NULL COMMENT '发货人姓名', " +
|
|
|
- "sender_phone VARCHAR(16) DEFAULT NULL COMMENT '发货人电话', " +
|
|
|
- "sender_address VARCHAR(256) DEFAULT NULL COMMENT '发货人地址', " +
|
|
|
- "receiver_name VARCHAR(32) NOT NULL COMMENT '收件人姓名', " +
|
|
|
- "receiver_phone VARCHAR(16) NOT NULL COMMENT '收件人电话', " +
|
|
|
- "receiver_address VARCHAR(256) NOT NULL COMMENT '收件人地址', " +
|
|
|
- "status VARCHAR(16) NOT NULL DEFAULT 'pending' COMMENT 'pending/shipped/signing/completed', " +
|
|
|
- "tracking_data TEXT DEFAULT NULL COMMENT '物流轨迹(JSON数组)', " +
|
|
|
- "shipped_at DATETIME DEFAULT NULL COMMENT '发货时间', " +
|
|
|
- "signed_at DATETIME DEFAULT NULL COMMENT '签收时间', " +
|
|
|
- "created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
- "updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
|
|
|
- "INDEX idx_order (order_id), " +
|
|
|
- "INDEX idx_logistics_no (logistics_no), " +
|
|
|
- "INDEX idx_status (status)" +
|
|
|
- ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='物流信息表'");
|
|
|
- log.info("已创建 danshop_logistics 表");
|
|
|
- } catch (Exception e) {
|
|
|
- log.warn("创建 danshop_logistics 表失败: {}", e.getMessage());
|
|
|
- }
|
|
|
-
|
|
|
- // 7. danshop_profit_rules (返利规则配置表)
|
|
|
- try {
|
|
|
- jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS danshop_profit_rules (" +
|
|
|
- "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
- "rule_name VARCHAR(64) NOT NULL COMMENT '规则名称', " +
|
|
|
- "rule_type VARCHAR(32) NOT NULL COMMENT '规则类型: product_category/vendor_level/global', " +
|
|
|
- "target_id BIGINT DEFAULT NULL COMMENT '关联目标ID', " +
|
|
|
- "platform_profit_rate INT NOT NULL COMMENT '平台利润率(bps,100=1%)', " +
|
|
|
- "referrer_l1_rate INT DEFAULT 0 COMMENT '直接推荐人返利比例(bps,占利润%)', " +
|
|
|
- "referrer_l2_rate INT DEFAULT 0 COMMENT '间接推荐人返利比例(bps,占利润%)', " +
|
|
|
- "platform_service_rate INT DEFAULT 0 COMMENT '平台服务费率(bps,占订单金额%)', " +
|
|
|
- "is_active INT DEFAULT 1 COMMENT '1启用/0禁用', " +
|
|
|
- "created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
- "updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
|
|
|
- "INDEX idx_type (rule_type, target_id), " +
|
|
|
- "INDEX idx_active (is_active)" +
|
|
|
- ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='返利规则配置表'");
|
|
|
- log.info("已创建 danshop_profit_rules 表");
|
|
|
- } catch (Exception e) {
|
|
|
- log.warn("创建 danshop_profit_rules 表失败: {}", e.getMessage());
|
|
|
- }
|
|
|
-
|
|
|
- // 8. danshop_profit_logs (返利流水表)
|
|
|
- try {
|
|
|
- jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS danshop_profit_logs (" +
|
|
|
- "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
- "order_id BIGINT NOT NULL COMMENT '订单ID', " +
|
|
|
- "order_no VARCHAR(32) NOT NULL COMMENT '订单号', " +
|
|
|
- "order_amount INT NOT NULL COMMENT '订单实付金额(分)', " +
|
|
|
- "cost_amount INT DEFAULT 0 COMMENT '成本金额(分)', " +
|
|
|
- "profit_amount INT NOT NULL COMMENT '利润金额(分)', " +
|
|
|
- "platform_retained INT NOT NULL COMMENT '平台留存金额(分)', " +
|
|
|
- "vendor_income INT NOT NULL COMMENT '供应商实收金额(分)', " +
|
|
|
- "commission_l1 INT DEFAULT 0 COMMENT 'L1推荐人佣金(分)', " +
|
|
|
- "commission_l2 INT DEFAULT 0 COMMENT 'L2推荐人佣金(分)', " +
|
|
|
- "rule_id BIGINT DEFAULT NULL COMMENT '使用的返利规则ID', " +
|
|
|
- "created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
- "INDEX idx_order (order_id), " +
|
|
|
- "INDEX idx_order_no (order_no)" +
|
|
|
- ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='返利流水表'");
|
|
|
- log.info("已创建 danshop_profit_logs 表");
|
|
|
- } catch (Exception e) {
|
|
|
- log.warn("创建 danshop_profit_logs 表失败: {}", e.getMessage());
|
|
|
- }
|
|
|
-
|
|
|
- // 9. danshop_favorites (商品收藏表)
|
|
|
- try {
|
|
|
- jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS danshop_favorites (" +
|
|
|
- "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
- "user_id BIGINT NOT NULL COMMENT '用户ID', " +
|
|
|
- "product_id BIGINT NOT NULL COMMENT '商品ID', " +
|
|
|
- "created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
- "UNIQUE INDEX idx_user_product (user_id, product_id), " +
|
|
|
- "INDEX idx_user (user_id)" +
|
|
|
- ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品收藏表'");
|
|
|
- log.info("已创建 danshop_favorites 表");
|
|
|
- } catch (Exception e) {
|
|
|
- log.warn("创建 danshop_favorites 表失败: {}", e.getMessage());
|
|
|
- }
|
|
|
-
|
|
|
- // 10. danshop_addresses (收货地址表)
|
|
|
- try {
|
|
|
- jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS danshop_addresses (" +
|
|
|
- "id BIGINT AUTO_INCREMENT PRIMARY KEY, " +
|
|
|
- "user_id BIGINT NOT NULL COMMENT '用户ID', " +
|
|
|
- "receiver_name VARCHAR(32) NOT NULL COMMENT '收货人姓名', " +
|
|
|
- "phone VARCHAR(16) NOT NULL COMMENT '收货人电话', " +
|
|
|
- "province VARCHAR(32) NOT NULL COMMENT '省份', " +
|
|
|
- "city VARCHAR(32) NOT NULL COMMENT '城市', " +
|
|
|
- "district VARCHAR(32) NOT NULL COMMENT '区县', " +
|
|
|
- "street VARCHAR(256) NOT NULL COMMENT '详细地址', " +
|
|
|
- "is_default INT DEFAULT 0 COMMENT '是否默认地址 1=是 0=否', " +
|
|
|
- "created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, " +
|
|
|
- "updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, " +
|
|
|
- "INDEX idx_user (user_id), " +
|
|
|
- "INDEX idx_user_default (user_id, is_default)" +
|
|
|
- ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='收货地址表'");
|
|
|
- log.info("已创建 danshop_addresses 表");
|
|
|
- } catch (Exception e) {
|
|
|
- log.warn("创建 danshop_addresses 表失败: {}", e.getMessage());
|
|
|
- }
|
|
|
-
|
|
|
// ==================== 迁移: activities表添加visible_scope列 =============
|
|
|
try {
|
|
|
Integer colExists = jdbcTemplate.queryForObject(
|
|
|
@@ -11753,4 +11513,27 @@ log.info("迁移298: 已为无 openid 的 child 账号补齐 family_members 记
|
|
|
"BIGINT DEFAULT NULL COMMENT '报告归属成员ID(family_members.id),A2/DAN自动采集必需'");
|
|
|
log.info("迁移343: health_report_drafts.member_id 已确保存在");
|
|
|
}
|
|
|
+
|
|
|
+ // 迁移344: 创建 supply_customer_relation 表(供应商团队客户归属记录)
|
|
|
+ private void createSupplyCustomerRelationTable() {
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS supply_customer_relation (" +
|
|
|
+ "id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID'," +
|
|
|
+ "system_id BIGINT NOT NULL COMMENT '供应商体系ID(supply_system.id)'," +
|
|
|
+ "parent_user_id BIGINT NOT NULL COMMENT '上级供应商用户ID(supply_hierarchy.parent_id)'," +
|
|
|
+ "family_id BIGINT NOT NULL COMMENT '客户家庭ID(family_members.family_id)'," +
|
|
|
+ "child_user_id BIGINT DEFAULT NULL COMMENT '下单用户ID(users.id),可为空'," +
|
|
|
+ "relation_type VARCHAR(32) NOT NULL DEFAULT 'family' COMMENT '归属类型: family=家庭归属 order=订单关联'," +
|
|
|
+ "source VARCHAR(32) NOT NULL DEFAULT 'manual' COMMENT '来源: manual=人工绑定 order=下单自动 referral=推荐码'," +
|
|
|
+ "created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间'," +
|
|
|
+ "INDEX idx_system_family (system_id, family_id)," +
|
|
|
+ "INDEX idx_parent_user (parent_user_id)," +
|
|
|
+ "INDEX idx_family_id (family_id)," +
|
|
|
+ "UNIQUE KEY uk_system_family (system_id, family_id)" +
|
|
|
+ ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='供应商团队客户归属关系表'");
|
|
|
+ log.info("迁移344: 已创建 supply_customer_relation 表");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("迁移344: 创建 supply_customer_relation 表失败: {}", e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|