|
|
@@ -3542,6 +3542,12 @@ insertSysConfigSeed("gift_membership_pay_price", "198000", "送会员商品达
|
|
|
// 迁移474: membership_levels 加会员成本价列 cost_price(F-3a 送会员商品P点口径:
|
|
|
// 配置了「送会员」规则的商品订单,P 点 = 实付 − 商品成本 − 赠送等级会员成本价)
|
|
|
addMembershipCostPriceColumn();
|
|
|
+
|
|
|
+ // 迁移475: 创建商品评价表 product_reviews(P0-A 普通商品评价域,独立于活动评价 review_orders)
|
|
|
+ migrateProductReviewsTable();
|
|
|
+
|
|
|
+ // 迁移476: product_orders 补收货超时兜底列(P0-B 待收货超时自动完成/第9天收货提醒)
|
|
|
+ migrateProductOrderShippedColumns();
|
|
|
}
|
|
|
|
|
|
/** 迁移473(FamilyWorkbench): tasks 加家庭+时间复合索引,支撑工作台按家庭聚合计数与近 30 天逐日趋势。 */
|
|
|
@@ -15930,4 +15936,55 @@ log.info("迁移298: 已为无 openid 的 child 账号补齐 family_members 记
|
|
|
log.warn("迁移474: membership_levels.cost_price 失败(忽略): {}", e.getMessage());
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 迁移475: 创建商品评价表 product_reviews(P0-A 普通商品评价域,独立于活动评价 review_orders)。
|
|
|
+ *
|
|
|
+ * <p>一单一评({@code uk_order_id} 唯一键);商品详情页按 {@code product_id} 聚合列表;
|
|
|
+ * 评价人列表索引 {@code reviewer_id}。与活动评价 {@code review_orders} 通过 {@code order_id}
|
|
|
+ * 完全隔离,两域互不干扰(Q1 口径:新建商品评价域,不复用活动评价表)。</p>
|
|
|
+ */
|
|
|
+ private void migrateProductReviewsTable() {
|
|
|
+ try {
|
|
|
+ jdbcTemplate.execute("CREATE TABLE IF NOT EXISTS product_reviews ("
|
|
|
+ + "id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID', "
|
|
|
+ + "order_id BIGINT NOT NULL COMMENT '关联 product_orders.id', "
|
|
|
+ + "product_id BIGINT NOT NULL COMMENT '关联 products.id(冗余,便于商品详情页列表)', "
|
|
|
+ + "reviewer_id BIGINT NOT NULL COMMENT '评价人ID(user.id)', "
|
|
|
+ + "rating TINYINT NOT NULL COMMENT '综合星级 1-5', "
|
|
|
+ + "review_text VARCHAR(500) NOT NULL DEFAULT '' COMMENT '评价文字 ≤500字', "
|
|
|
+ + "images TEXT COMMENT '晒图URL数组 JSON(≤3张),如 [\"/upload/a.jpg\"]', "
|
|
|
+ + "reply_text VARCHAR(500) DEFAULT NULL COMMENT '商家回复 ≤500字', "
|
|
|
+ + "replied_at DATETIME DEFAULT NULL COMMENT '商家回复时间', "
|
|
|
+ + "reply_by BIGINT DEFAULT NULL COMMENT '回复人ID(商家 user.id)', "
|
|
|
+ + "status TINYINT NOT NULL DEFAULT 1 COMMENT '1=展示 0=隐藏(P2治理预留)', "
|
|
|
+ + "review_at DATETIME NOT NULL COMMENT '评价时间', "
|
|
|
+ + "created_at DATETIME DEFAULT CURRENT_TIMESTAMP, "
|
|
|
+ + "updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, "
|
|
|
+ + "UNIQUE KEY uk_order_id (order_id), "
|
|
|
+ + "KEY idx_product_id (product_id), "
|
|
|
+ + "KEY idx_reviewer_id (reviewer_id)"
|
|
|
+ + ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品订单评价表(独立于活动评价 review_orders)'");
|
|
|
+ log.info("迁移475: product_reviews 表已就绪");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("迁移475: product_reviews 表创建失败: {}", e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 迁移476: product_orders 补收货超时兜底列(P0-B)。
|
|
|
+ *
|
|
|
+ * <p>{@code shipped_at}=发货时间(ship() 落库写,作为超时自动完成/收货提醒的基准时间);
|
|
|
+ * {@code receipt_remind_at}=收货提醒推送时间(第9天推送成功后写,幂等防重复推送)。
|
|
|
+ * 使用 {@code ensureColumn} 幂等:列已存在时自动跳过。</p>
|
|
|
+ */
|
|
|
+ private void migrateProductOrderShippedColumns() {
|
|
|
+ try {
|
|
|
+ ensureColumn("product_orders", "shipped_at", "DATETIME NULL COMMENT '发货时间'");
|
|
|
+ ensureColumn("product_orders", "receipt_remind_at", "DATETIME NULL COMMENT '收货提醒推送时间'");
|
|
|
+ log.info("迁移476: product_orders.shipped_at / receipt_remind_at 列已就绪");
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("迁移476: product_orders 收货超时兜底列失败(忽略): {}", e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|