docs: record TEST inventory history rollout and verified turnover
This commit is contained in:
+11
-3
@@ -2,17 +2,25 @@
|
||||
|
||||
## 自营库存周转 TEST 发布与验收(2026-10-15)
|
||||
|
||||
历史库存还原实现已在本地完成并提交:后端 `99215bbb796248d4e3f6ad7897982678b363c072`,Admin `5e8c17c82fc6bef7340cb078ddc7660fc68dba10`;尚未推送、执行三表DDL、开启流水后台任务或发布本批代码。后端受影响257项测试通过(252项整组回归+新增5项针对性回归),前端38项测试、类型检查与构建及5项路由检查通过;独立DDL、Lastleg源基线和海外统一基线的三表定义完全一致,所有新字段有中文注释。端到端H2验证覆盖真实Mapper、任务/分页暂存、修订归并、独立锚点对账及原子日版本切换;重启从新尝试第一页开始、分页异常拆片、失效旧版、负库存/未知类型/缺覆盖拒绝、货主整体资格和固定版本导出均纳入检查。未以H2通过替代MySQL8真实执行、全仓容量或浏览器人工验收。
|
||||
历史库存还原本批已按用户授权推送并发布:Integration、Lastleg 初版 `99215bbb796248d4e3f6ad7897982678b363c072`,Admin `5e8c17c82fc6bef7340cb078ddc7660fc68dba10`。TEST 的三张历史库存表已创建,60 个字段与源DDL逐项核对一致,保留原有销量和原始库存。Integration 标准发布 #115、Lastleg #323、Admin #612 均 SUCCESS,实际镜像与HTTP资源已核验;Admin Job 已恢复原分支及 lightweight 配置。后端受影响257项测试通过(252项整组回归+新增5项针对性回归),前端38项测试、类型检查与构建及5项路由检查通过;独立DDL、Lastleg源基线和海外统一基线的三表定义完全一致,所有新字段有中文注释。端到端H2验证覆盖真实Mapper、任务/分页暂存、修订归并、独立锚点对账及原子日版本切换;重启从新尝试第一页开始、分页异常拆片、失效旧版、负库存/未知类型/缺覆盖拒绝、货主整体资格和固定版本导出均纳入检查。未以H2通过替代MySQL8真实执行、全仓容量或浏览器人工验收。
|
||||
|
||||
13:40 Nacos 已按CAS更新并回读确认历史开关 true、天数60,但配置刷新遇到遗留 `execution-enabled` 输入:它在当前代码中是只读派生属性,刷新 BUSINESS 实例时产生 `No setter found`,导致新开关未生效、健康检查失败,后台尚无历史任务。只移除 application.yml 和环境示例的废弃输入并补真实YAML重复绑定回归,提交 `235b9469d974c78f182237029d9b6bb26c8bacf0`;91项相关测试、5项路由检查通过,Lastleg #324 已 SUCCESS,实际 digest `sha256:a3c46aa6d2213a60667f4da9a3c80cb4371748b07e01a09dcc3c6edb2083cb4c`、健康和绑定配置已核验。此前 backend-java #703 因Groovy编译失败、#704 因健康预检失败,均未执行容器重启;不计为两次成功部署。13:50 后台流水已实际开始,业务模式/持续采集/1200ms/唯一供应商出口均保持。13:53 两仓累计47,432条流水,已生成US01八天、US02七天日库存;已知样本八天日末与独立本地回放逐日一致,10/14为145件。初始补采中新增事实会使旧日版本失效并重算,当时稳定查询/排序/导出尚待本批结束后验收,最终结果见下段。WOPS类型已真实命中但语义未核准,关联日样本保留UNKNOWN,不据猜测计入正式周转率。
|
||||
|
||||
14:00 初始两仓60日加当日锚点尾段共122个流水任务均SUCCEEDED/FACTS_APPLIED,累计归并US01 120,176条、US02 20,298条,账号无暂停、无有效冷却、无在途请求。14:02复核两仓均已发布2026-08-16至10-14连续60个有效日头,invalidated=0;122个流水任务及11个还原构建任务全部成功。US01每日日样本合格5,309个SKU、待核验114个;US02合格1,058个、待核验4个。最终有效版本的独立已知样本最近30个日末与本地逐日回放完全一致。14:02真实HTTP九请求核验两仓各200行的一天窗口周转公式、升降序及跨页顺序,全部通过,样本10/14日末145件;14:04补验两仓30天货主多选、摘要/图表合计、重复去重、恢复全部、固定版本全页数据,共26请求通过,1,016行非空周转公式逐行一致。14:05使用已部署Admin精确提交的真实导出函数,读取704行、生成25列CSV,逐格百分比及补充历史来源/天数/期间列通过;独立样本平均日末95.6件、期间出库29件,显示周转率30.33%。此为实际函数与HTTP数据验证,不冒充人工浏览器下载或视觉验收。业务服务健康、唯一供应商出口及1200ms仍确认;原销量、原始库存、持续采集保持。用户另授权两个既有对话并行只读验证,具体边界见协作登记;不增加领星请求或发布。
|
||||
|
||||
并行只读验收确认140,474条流水与采集暂存的内容哈希、变动量和结存量差异为0,122个来源页计数一致;独立保存的77条原始流水另行回放,样本60/60日末一致。UNKNOWN包含US01 WOPS13个SKU/DFT_ORD98个SKU、缺独立锚点2个SKU,US02 WOPS4个SKU,均按未验证类型或缺证据保留未知;另有US01一个SKU的同秒100条唯一余额链被8条枚举上限误判,已按用户授权移交“库存分析-2”最小修复;43项history回归通过(含8,004组小图完整枚举对照、乱序100条及2万条长链),总控审查后提交 `22d79e08f91dcadcacdf19a14b21b097462b260d` 并仅发布Lastleg #325 SUCCESS,实际digest `sha256:d6c509db55ab122c0fea99d69c59a22c0beb356edc4159072ae31e66ad30a823`。公开口径保持FLOW_EOD_V1,内部计算修订2进入构建签名及证据,自动使用既有流水重算。首次发布前只读Jenkins请求连接失败、postSent=false,确认没有队列/构建/镜像后重试,实际只触发一次#325;Integration和Admin不重复发布。14:19最终两仓均60/60有效日头且计算修订2,误判SKU的60个UNKNOWN消除;US01每日合格SKU升至5,310、剩113个待核验,US02仍合格1,058/待核验4。受影响SKU真实HTTP四请求通过:30天平均日末1,418.766667件/出库990/周转0.697789,60天平均1,744.316667件/出库1,382/周转0.792287;全窗口资格分别30/30、60/60。服务健康、唯一出口保持,领星计数始终27,937,证明本地重算未新增来源请求。“库存分析-2”此前因该对话在途列任务未执行HTTP包,30天查询与导出由总控收回完成。
|
||||
|
||||
最终运行版本为Integration `99215bbb7962`、Lastleg `22d79e08f91d`、Admin `5e8c17c82fc6`。部署/DDL/配置/请求及查询证据保存在后端target的 `selfop-history-schema-create.json`、`selfop-history-config-enable.json`、`selfop-history-*-release-*.json`、`selfop-history-runtime-chain-after.json`、`selfop-history-chain-final.json`、`selfop-history-http-30day-final.json`、`selfop-history-http-chain-final.json`、`selfop-history-http-csv-after-chain.json` 与 `history-review-collection-summary.json`。人工1920×1080视觉、实际浏览器下载和次日自动续跑仍须在相应时点确认,不把程序化接口/导出函数检查替代这些验收;后台日增量配置保持开启。
|
||||
|
||||
本地真实响应回放用新Java算法处理既有77条流水,三个独立库存观测点全部一致,30个日末结果与逐日核验记录一致;平均日末库存95.6件,同期出库29件,周转率30.334728%。这一回放零新增领星请求、零共享库写入,只证明该样本。新增类型及两个仓库的全量覆盖仍必须随实际受控采集逐SKU/日期核验。证据在后端 `target/selfop-history-final-tests.log`、`selfop-history-final-hardening.log`、`selfop-history-context-final.log` 与本地 `HistoryRealResponseReplay`;原始数据和真实主体标识不入Git。
|
||||
|
||||
待授权批次:仅在 `baiyue_lastleg` 执行 `lastleg-service/src/main/resources/db/selfop-inventory-history.sql` 新建三表,保留全部销量/原始库存;按精确提交依次构建部署 TEST Integration、Lastleg、Admin。Lastleg 新增配置 `baiyue.self-operated-analytics.inventory-history-enabled=true`、`inventory-history-days=60`,只在表结构及服务健康验证通过后开启,先30日再60日;业务账号/仓范围沿已有配置。流水每页共享原账号出口,现有1200ms、冷却和人工停止保持,销量/当日库存优先。版本发布、首个整仓片覆盖、至少一个SKU实际日末及查询/排序/导出一致性、次日自动续跑分别验收;不能把发布成功当两仓历史补齐。
|
||||
已授权并执行的批次:仅在 `baiyue_lastleg` 执行 `lastleg-service/src/main/resources/db/selfop-inventory-history.sql` 新建三表,保留全部销量/原始库存;按精确提交依次构建部署 TEST Integration、Lastleg、Admin。Lastleg 新增配置 `baiyue.self-operated-analytics.inventory-history-enabled=true`、`inventory-history-days=60`,只在表结构及服务健康验证通过后开启,先30日再60日;业务账号/仓范围沿已有配置。流水每页共享原账号出口,现有1200ms、冷却和人工停止保持,销量/当日库存优先。版本发布、首个整仓片覆盖、至少一个SKU实际日末及查询/排序/导出一致性、次日自动续跑分别验收;不能把发布成功当两仓历史补齐。
|
||||
|
||||
12:18—12:24 按用户“先在本地核验再实现”的授权追加25次有界只读请求,其中24次为既定小范围核验,另1次仅追查已命中的品质转换业务单。22次流水查询、3次产品库存查询,均HTTP200/业务码200,最小请求起始间隔7.138秒;每次前后只读检查账号无待执行/运行任务、活动租约、暂停、冷却或pending请求,12:26收尾检查仍为空闲。没有停止原采集、改配置、部署、SQL写入或业务导入。本地诊断请求以私有intent/response/summary单独记账,未计入平台任务计数。
|
||||
|
||||
本批234条去重流水:DO153、IMO32、PA2、IAT35、RI12;其中正品228条、次品6条。已核验包含端点及前后排除、原32条SKU流水分页等价、跨两个货主的完整小片10条在不同页大小下集合一致。IAT完整窗口35条,7正28负;10组同品质移库净额0。额外定向取得一个完整IMO单12条,6个SKU正品−17/次品+17、总实物净变化0,证明该样本是品质转换。六次响应出现空首分页size10;定向零库存样本在隐藏开关0时明确返回零、1时不返回。US02只读首分页及空片,不记为全仓覆盖验收;BO/OBIAT未命中,不解释为永久不存在。同链同秒样本存在,未据此建立ID顺序合同。
|
||||
|
||||
本地Java回放复现了现有流水适配对合法空页报 `SIZE_MISMATCH`,随后开始最小实现:只为流水合法空首分页归一化sourceSize10,保留非空、页码、页数与未知页大小拒绝,库存和其他出库页大小策略不放宽。含此前字符串ID修复的72项定向测试、5项路由检查、实际空响应及原77条响应回放通过;回放没有新增供应商请求。当时历史三表与日发布尚未实现,后续本地实现见本节顶部,TEST尚未更新。脱敏核验为后端 `target/selfop-flow-semantics-audit.json`,测试为 `target/selfop-flow-semantics-tests.log`;原始响应与真实主体标识仅保留私有目录。字段与实施限制已更新接口手册和设计主文档。
|
||||
本地Java回放复现了现有流水适配对合法空页报 `SIZE_MISMATCH`,随后开始最小实现:只为流水合法空首分页归一化sourceSize10,保留非空、页码、页数与未知页大小拒绝,库存和其他出库页大小策略不放宽。含此前字符串ID修复的72项定向测试、5项路由检查、实际空响应及原77条响应回放通过;回放没有新增供应商请求。当时历史三表与日发布尚未实现,后续本地实现见本节顶部,当时TEST尚未更新;后续发布见本节顶部。脱敏核验为后端 `target/selfop-flow-semantics-audit.json`,测试为 `target/selfop-flow-semantics-tests.log`;原始响应与真实主体标识仅保留私有目录。字段与实施限制已更新接口手册和设计主文档。
|
||||
|
||||
11:46 按用户对精确提交 `d81d9cbda4c80dcc65001c45e83d8234495c92a5` 的授权,完成库存流水诊断补丁:Integration预构建#114、backend-java #701 SUCCESS(digest `sha256:98bbef793085a47f368bc2ad59e4f263ab7abbc10ac241b0c117ac9db41f03b0`);Lastleg预构建#322、backend-java #702 SUCCESS(digest `sha256:76b7ec8bfd7ed8d91bd0ec04df1e78c049a12f97af28012a8884a1fd035101d6`)。两服务按顺序各部署一次,实际digest、健康、唯一供应商出口及BUSINESS/continuousEnabled=true/1200ms均核验通过。无DDL、SQL写入、Admin或Nacos更新。发布前2条13号WAITING_SOURCE旧标记不在调度due集合;实际READY/RUNNING/RETRY_WAIT、有效租约及pending HTTP为0,未处理或改写这两条旧记录。
|
||||
|
||||
|
||||
+13
@@ -1,5 +1,18 @@
|
||||
# 测试环境独立任务协作登记
|
||||
|
||||
## 2026-10-15 库存历史还原并行只读验收
|
||||
|
||||
用户明确授权复用现有“库存分析-1”和“库存分析-2”,总控为“平台销量总控” / `01a13496-1713-7ac3-9981-1ae9ed551571`;TEST 项目 `c64729ff-6710-43c6-8ef2-d84e9666cc1e`、host local、cwd `C:/Users/BY-OY/Desktop/code/chongchong-global` 已核对。仅本轮临时验收,不创建长期任务,不改变原业务代码写权。
|
||||
|
||||
| task_id | 对话 | 本轮只读职责与证据写权 |
|
||||
| --- | --- | --- |
|
||||
| `01a137dd-dc62-7000-88b9-fb1df4a2dd22` | 库存分析-1 | 真实流水归并、日末库存及独立样本对账、UNKNOWN原因;仅写后端 `target/history-review-collection-*`。 |
|
||||
| `01a138f8-4b84-7d01-b47a-3caaf160e6f6` | 库存分析-2 | 周转率公式、排序、货主汇总和固定版本导出;仅写后端 `target/history-review-query-*`。 |
|
||||
|
||||
允许只读测试SQL和已授权账号的HTTP查询验证;禁止SQL写入、业务代码或配置修改、部署、停止采集、额外领星请求、Git提交及子代理。总控唯一负责运行、发布及主文档收口,主动读取专项结果。原采集与指标两个旧任务无法被当前工具访问,本轮未向其成功派工。
|
||||
|
||||
用户随后明确授权让“库存分析-2”直接修改新发现的同秒长唯一余额链误判,覆盖其只读限制。仅移交 `InventoryHistoryCalculator.java`、`InventoryHistoryBuilder.java` 的计算修订签名和对应history直接测试;使用已有流水本地重算,公开日末口径保持,禁止额外领星请求、环境写入、提交或部署。该任务获得一次定向Maven测试窗口,总控暂停并行Maven;总控负责审查、提交、发布及真实复核。
|
||||
|
||||
## 2026-10-14 列表优先采集紧急修改接管
|
||||
|
||||
用户在 `01a137b9-87ca-7db0-a400-7c48c301ae9b` 指定接续原总控 `01a13496-1713-7ac3-9981-1ae9ed551571` 的本批工作;原总控已明确释放本批代码、文档、共享 Maven 和发布调度权。本批唯一协调与实现写者为接管对话,继续使用 TEST 项目 `c64729ff-6710-43c6-8ef2-d84e9666cc1e`、host local、cwd `C:/Users/BY-OY/Desktop/code/chongchong-global`,不创建新对话、分支、worktree 或内部子代理。
|
||||
|
||||
+2
-2
@@ -54,7 +54,7 @@
|
||||
以 `账号+仓库+货主+SKU` 为统计身份,内部链进一步按 `库位+内部批次+品质` 区分。同名SKU不跨货主合并,跨仓独立。
|
||||
|
||||
1. **变动量**用有符号 `bookChangQty` 解析为DECIMAL;PA/DO样本中它与 `bookQty` 一致。两字段保留,不相加、不因业务类型再取负号。`bookQty` 不是期初量。其他类型是否同义由类型样本验证,未知语义不能用于正式日库存。
|
||||
2. **链校验**:同一链前一笔结存+当前变动=当前结存;首笔前结存=首笔结存-首笔变动。`closeQty` 只对该库位/批次/品质有效,不能把多笔结存直接相加或取最新一笔当SKU总量。分组键、同秒顺序未确认时保留歧义,不仅按字符串ID排序猜时间。
|
||||
2. **链校验**:同一链前一笔结存+当前变动=当前结存;首笔前结存=首笔结存-首笔变动。`closeQty` 只对该库位/批次/品质有效,不能把多笔结存直接相加或取最新一笔当SKU总量。分组键缺失时保留未知;同秒流水按“前结存→后结存”构成有向余额图,只有使用全部独立流水边的完整路径唯一时才接受,不按条数阈值或字符串ID猜顺序。无前序余额的多边回路、重复边引起的多解及真正分支歧义仍未知,断链/断开图拒绝;用相反边优先级的两次迭代欧拉路径核对唯一性,避免阶乘枚举。
|
||||
3. **SKU锚点**:使用已保存、身份与单位明确的SKU分品质实物快照作为独立锚点,按同品质完整流水反推,再合计全品质。某批次在窗口内无变动就可能完全不出现在流水中,因此不能要求“出现过的链结存之和=SKU快照”,也不能把两者的差额自动判为漏账。例如活动批次10件、无变动批次90件,SKU锚点仍是100件;90件保留在锚点余额内。链连续性检查只约束实际观察到的链;只有另有完整同刻批次清单,才做全链总额对账。缺品质快照不能把总量任意拆分;快照缺行只有在供应商已核验的完整返回/零库存省略规则下才能认定零,否则未知。
|
||||
库存扫描不是原子历史快照,`observed_at` 也不保证就是供应商扣账时刻;保存真实页面/整次扫描观测区间。若该SKU在区间内发生变动而无法确定先后,标记 `ANCHOR_TIME_AMBIGUOUS`,补稳定锚点或缩小对账区间,不能把秒级流水与毫秒响应时间机械相减。用其他独立库存观测点检验还原结果;仅从同一个锚点正推、反推互相吻合不能充当独立正确性证明。
|
||||
4. **反推公式与尾段**:在已确认稳定的锚点状态A下,日期D日末为 `I_D = I_A − ΣΔ`,求和范围从 `D+1 00:00`(含)到锚点状态已包含的最后事件,不能漏掉次日零点至早晨锚点之间的流水。来源端点未核验或无法确认事件是否已包含于锚点时,不发布该SKU。目标日期片与锚点尾段分别冻结边界并记录覆盖;尾段必须覆盖锚点整个观测区间以检查歧义,不以“昨日片已完成”替代。跨片重复按来源ID只计一次,恰好零点的事件属于新一天。也可从已核验期初正推逐笔核对;没有变动的日子只有在完整流水范围与有效锚点支撑下才继承余额,这属于结存推导,不是缺日补零。
|
||||
@@ -69,7 +69,7 @@
|
||||
流程为:`固定片拉取 → stage落地 → 覆盖校验 → 幂等归并flow事实 → 固定输入构建day_version/daily → 锚点及链校验 → 原子发布日版本 → 查询读取`。
|
||||
|
||||
- 相同流水ID、相同内容重复采集只更新本次已见证据,不重复增减库存;同ID内容变化生成本地修订号,保留旧stage、标记受影响日版本需重算。同ID异身份先隔离冲突并使可能受影响范围待核验,不能自动搬移事实;只有身份更正得到确认后,才按新旧依赖并集重建。不能用 `ON DUPLICATE KEY` 累加delta,也不因为某一页没返回就删除历史流水。
|
||||
- 每日候选在独立版本下批量写入;写入中断只留下未发布候选,页面读不到半批数据。输入流水修订号、锚点、范围、候选身份全集、规则版本及校验摘要冻结,指向可重放的不可变stage修订,不能只存摘要后再读flow表最新值。归并事实修订与发布校验共用同仓版本互斥;发布短事务内核对输入代次未变并切换日头,变化则重建,不能在校验和切换之间放入新的修订。
|
||||
- 每日候选在独立版本下批量写入;写入中断只留下未发布候选,页面读不到半批数据。公开日末口径 `FLOW_EOD_V1` 与内部计算修订分开:计算修订号进入构建去重签名和版本证据;算法修复后用已存流水自动重算一次,相同输入和修订成功后不重复构建,无需重新请求来源。输入流水修订号、锚点、范围、候选身份全集、规则版本及校验摘要冻结,指向可重放的不可变stage修订,不能只存摘要后再读flow表最新值。归并事实修订与发布校验共用同仓版本互斥;发布短事务内核对输入代次未变并切换日头,变化则重建,不能在校验和切换之间放入新的修订。
|
||||
- **首次补齐或新增日期,一天构建和校验通过即可发布一天**,不设30分钟等待,不等60天全跑完。版本包含全候选的有效/未知状态;个别SKU异常不阻塞其他SKU出结果,但未知不能被省略而使货主合计看似完整。若本次也修正已发布日期或改变既有候选全集,按下述校正组发布,不能借“逐日发布”跳过跨日一致性。
|
||||
- 同一SKU历史变动修订会影响多个日余额,必须按实际计算依赖确定受影响日期,不能只重算发生当日或机械地重算“事件日至锚点”。以较晚锚点反推时,某笔delta修订影响求和范围包含它的更早日末;以较早锚点正推时则影响其后的日末。时间、身份、品质或锚点变化按新旧依赖范围并集失效重建;新发现的售空SKU也要重新核对候选全集。按依赖重建保留范围内的全部受影响日期,无需重拉其他未变化的历史销量。无修改时间或删除契约时,旧记录缺失只进入冲突核验,不自动抹账。
|
||||
- **校正组原子发布**:一个重建任务保存不可变的组清单(publication_group_id、受影响日期、预期旧头、新候选ID、输入代次)。全部候选就绪后,在一个短事务内校验旧头和输入代次、切换全部日头及有效区间、标记整组完成;失败全部回滚。批量计算与daily写入在事务外提前完成,切换只涉及头记录;同仓重建互斥避免并发覆盖。查询可读完整旧组或完整新组,不能读到一半新、一半旧;重启用组清单确认整组是否已提交,不逐日猜测完成状态。
|
||||
|
||||
Reference in New Issue
Block a user