修复店铺数据抓取新店铺归档 daily_file 报 user_id 无默认值
线上现象:店铺数据抓取任务 26401 失败,错误 "Field 'user_id' doesn't have a default value", INSERT 列清单不含 user_id(MyBatis-Plus 对 null 字段跳过该列)。 根因链: 1. V95(97ae8a7)累计文件改为店铺级共享(去 user 维度), persistDailyAggregation 新建 daily_file 时删掉了 setUserId; 2. 但 V95 只改了唯一键为 (shop_key, business_date),未把 user_id 列改可空; 3. 表列 user_id 仍为 NOT NULL 无默认值 → 新店铺首次插入必报错; 已有 daily_file 行的店铺走 update 分支不受影响,因此只在 新店铺(如 26401)出现。 修复: - persistDailyAggregation 新建 daily_file 时补回 setUserId(row.getUserId()), 新店铺也写入正确归属; - V104 迁移把 user_id 改可空,兼容存量/历史数据(保留兼容,不再使用); - 新增回归断言(新建累计文件必须写入 user_id), shopdatacrawl 全包 255 测试全绿,双机已部署验证。
This commit is contained in:
+4
@@ -554,6 +554,10 @@ class ShopDataCrawlDailyFileIncrementalTest {
|
||||
|
||||
assertEquals(1, dbDailyFiles.size(), "跨账号同店同日只保留一份累计文件");
|
||||
assertEquals(3, dbMembers.size(), "三个结果各有一个成员行");
|
||||
// 回归:V95 把累计文件改为店铺级共享时误删了 setUserId,导致新建
|
||||
// daily_file 的 INSERT 不含 user_id(表列 NOT NULL 无默认值),
|
||||
// 新店铺首次归档必报 Field 'user_id' doesn't have a default value。
|
||||
assertEquals(7L, dbDailyFiles.get(0).getUserId(), "新建累计文件必须写入 user_id");
|
||||
|
||||
// 整表重建:英国以最后一次(9503)为准,德国(9502)保留
|
||||
triggerRebuild();
|
||||
|
||||
Reference in New Issue
Block a user