瀏覽代碼

fix(phase1): 数据库 schema 加 UNIQUE 约束 + 时间戳默认值 + 平台商品 vendor_id 置空

User 3 月之前
父節點
當前提交
a3d39cc2b4
共有 1 個文件被更改,包括 15 次插入15 次删除
  1. 15 15
      zxyj-backend/src/main/java/com/zxyj/config/DatabaseInitializer.java

+ 15 - 15
zxyj-backend/src/main/java/com/zxyj/config/DatabaseInitializer.java

@@ -1256,8 +1256,8 @@ log.info("已添加template_id列到tasks表");
                 "  external_source VARCHAR(64)," +
                 "  external_id VARCHAR(128)," +
                 "  external_data TEXT," +
-                "  created_at DATETIME," +
-                "  updated_at DATETIME" +
+                "  created_at DATETIME DEFAULT CURRENT_TIMESTAMP," +
+                "  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" +
                 ")"
             );
         } catch (Exception e) {
@@ -1269,7 +1269,7 @@ log.info("已添加template_id列到tasks表");
             jdbcTemplate.execute(
                 "CREATE TABLE IF NOT EXISTS product_orders (" +
                 "  id BIGINT AUTO_INCREMENT PRIMARY KEY," +
-                "  order_no VARCHAR(64) NOT NULL," +
+                "  order_no VARCHAR(64) NOT NULL UNIQUE," +
                 "  product_id BIGINT NOT NULL," +
                 "  product_name VARCHAR(200)," +
                 "  product_type VARCHAR(32)," +
@@ -1282,8 +1282,8 @@ log.info("已添加template_id列到tasks表");
                 "  payment_method VARCHAR(32) COMMENT 'wechat/points/membership'," +
                 "  remark VARCHAR(500)," +
                 "  paid_at DATETIME," +
-                "  created_at DATETIME," +
-                "  updated_at DATETIME" +
+                "  created_at DATETIME DEFAULT CURRENT_TIMESTAMP," +
+                "  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" +
                 ")"
             );
         } catch (Exception e) {
@@ -1295,10 +1295,10 @@ log.info("已添加template_id列到tasks表");
             jdbcTemplate.execute(
                 "CREATE TABLE IF NOT EXISTS sys_config (" +
                 "  id BIGINT AUTO_INCREMENT PRIMARY KEY," +
-                "  config_key VARCHAR(64) NOT NULL," +
+                "  config_key VARCHAR(64) NOT NULL UNIQUE," +
                 "  config_value TEXT," +
                 "  description VARCHAR(500)," +
-                "  updated_at DATETIME" +
+                "  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP" +
                 ")"
             );
         } catch (Exception e) {
@@ -1322,11 +1322,11 @@ log.info("已添加template_id列到tasks表");
 
         // Product 种子数据(5 个示例商品,覆盖全部 5 种 productType)
         try {
-            insertProductSeed("亲子关系工作坊", "线下半日工作坊,重建家庭对话模式", "activity", new java.math.BigDecimal("388.00"), 1L, "action", "all");
-            insertProductSeed("情绪管理21天训练营", "21天视频课程,识别并管理情绪", "course", new java.math.BigDecimal("199.00"), 1L, "mind", "all");
-            insertProductSeed("肠道菌群检测套装", "家用检测 + 报告解读", "physical", new java.math.BigDecimal("599.00"), 1L, "body", "budget");
-            insertProductSeed("儿童多模态认知测评", "在线测评 + 个性化建议", "digital", new java.math.BigDecimal("99.00"), 1L, "wisdom", "none");
-            insertProductSeed("成长规划师1对1咨询", "60分钟专业规划", "service", new java.math.BigDecimal("500.00"), 1L, "wealth", "budget");
+            insertProductSeed("亲子关系工作坊", "线下半日工作坊,重建家庭对话模式", "activity", new java.math.BigDecimal("388.00"), "action", "all");
+            insertProductSeed("情绪管理21天训练营", "21天视频课程,识别并管理情绪", "course", new java.math.BigDecimal("199.00"), "mind", "all");
+            insertProductSeed("肠道菌群检测套装", "家用检测 + 报告解读", "physical", new java.math.BigDecimal("599.00"), "body", "budget");
+            insertProductSeed("儿童多模态认知测评", "在线测评 + 个性化建议", "digital", new java.math.BigDecimal("99.00"), "wisdom", "none");
+            insertProductSeed("成长规划师1对1咨询", "60分钟专业规划", "service", new java.math.BigDecimal("500.00"), "wealth", "budget");
             log.info("Product 种子数据已加载");
         } catch (Exception e) {
             log.warn("Product 种子数据初始化失败: {}", e.getMessage());
@@ -1805,15 +1805,15 @@ try {
     }
 
     private void insertProductSeed(String name, String desc, String type,
-                                java.math.BigDecimal price, Long vendorId,
+                                java.math.BigDecimal price,
                                 String domain, String memberEligible) {
         Integer count = jdbcTemplate.queryForObject(
             "SELECT COUNT(*) FROM products WHERE name = ? AND product_type = ?", Integer.class, name, type);
         if (count == null || count == 0) {
             jdbcTemplate.update(
                 "INSERT INTO products (name, description, price, product_type, vendor_id, vendor_name, status, domain, member_eligible, created_at, updated_at) " +
-                "VALUES (?, ?, ?, ?, ?, '平台官方', 'on_shelf', ?, ?, NOW(), NOW())",
-                name, desc, price, type, vendorId, domain, memberEligible);
+                "VALUES (?, ?, ?, ?, NULL, '平台官方', 'on_shelf', ?, ?, NOW(), NOW())",
+                name, desc, price, type, domain, memberEligible);
         }
     }
 }