优化
This commit is contained in:
@@ -65,7 +65,9 @@
|
|||||||
|
|
||||||
## 业务快速路由表
|
## 业务快速路由表
|
||||||
|
|
||||||
领星 WMS 自研系统(OMP)、经营总览图表、自营 SKU 日销量、热销与滞销排行、分仓产品库存与可售天数、库存周转、数据采集:`docs/自营业务/README.md` → `领星一件代发数据统计一期方案.md`(架构、表结构与验收)、`经营总览图表设计.md`(图形、聚合与下钻)、`库存周转视图设计.md`(三窗出库、SKU/货主汇总及周转资格)、`数据采集页面设计.md`(首页、详情、进度图与预计时间)、`领星统计查询性能优化方案.md`(查询优化与验证顺序)、`领星WMS接口联调手册.md`(签名、参数与实测);Admin 从 `apps/admin-web/src/modules/self-operated/AGENTS.md` 进入,后端从 `integration-service/AGENTS.md` 与 `lastleg-service/AGENTS.md` 进入,区别于整箱库存和客户 WMS 作业库存。
|
领星 WMS 自研系统(OMP)、经营总览图表、自营 SKU 日销量、热销与滞销排行、分仓产品库存与可售天数、库存周转、数据采集:先读 `apps/admin-web/src/modules/self-operated/AGENTS.md`;查询与采集编排查 `baiyue-firstleg/lastleg-service/AGENTS.md` 的自营入口,签名/限流/供应商分页问题才读 `baiyue-firstleg/integration-service/AGENTS.md`。区别于整箱库存和客户 WMS 作业库存。
|
||||||
|
|
||||||
|
自营专题按任务选择:总览图形/下钻查 `docs/自营业务/经营总览图表设计.md`,库存周转查 `docs/自营业务/库存周转视图设计.md`,采集交互查 `docs/自营业务/数据采集页面设计.md`,查询性能查 `docs/自营业务/领星统计查询性能优化方案.md`,外部接口联调查 `docs/自营业务/领星WMS接口联调手册.md`。架构/表结构不明时从 `docs/自营业务/README.md` 定位一期方案,不默认同时读取所有专题。
|
||||||
|
|
||||||
美国各类预约统一总览、提柜/用车/送仓预约梳理:`docs/海外仓业务/美国预约管理统一总览与优化方案.md`(设计建议);实际维护仍按下述来源模块进入。
|
美国各类预约统一总览、提柜/用车/送仓预约梳理:`docs/海外仓业务/美国预约管理统一总览与优化方案.md`(设计建议);实际维护仍按下述来源模块进入。
|
||||||
|
|
||||||
|
|||||||
+61
-1
@@ -1,6 +1,66 @@
|
|||||||
# 测试环境单机部署与配置契约
|
# 测试环境单机部署与配置契约
|
||||||
|
|
||||||
## 自营统计 TEST 发布与验收(2026-10-13,进行中)
|
## 自营统计 TEST 发布与验收(2026-10-14,进行中)
|
||||||
|
|
||||||
|
2026-10-14 10:19(北京时间)按用户“采完一天、校验通过就发布一天,并优化本地处理”要求,Lastleg提交 `61930438808e2cf407a39905b7f20f34ecaf2f7a` 已经预构建#308及backend-java #684成功发布,运行digest为 `sha256:133bfa20b3c89c6516018553f0973633184a75ef09b82b9e9f8094eef125614f`。删除常规构建的固定30分钟等待,保留事实归并、版本复用、完整性和发布屏障;完整列表订单每批最多100单原子保存有效暂存、观测序号及检查点,缺项和修订仍走单独解析。97项采集/恢复/发布测试、5项网关检查通过;更新后真实HTTP冒烟16请求/11项检查通过。Integration容器未变化,两端仍BUSINESS/continuous/1200ms且唯一出口正常。10:12:33~10:13:45维护窗口约72秒,仅持有并释放五项租约,检查点和请求计数未改,无DDL或Nacos变更。9月18日整天实际2186单、44次列表请求、零额外详情,全部VALID、业务键和观测序号各2186且无空商品明细;本地有效暂存阶段2549ms,账号采集86730ms,从首次采集到两仓全部发布127689ms。两仓均SUCCEEDED/APPLIED、PUBLISHED/COMPLETE、daily ready且结果版本关联一致,未等30分钟;随后9月17日也完成发布,10:19逐日核验两仓共27/61天正式覆盖、无待发布日、9月16日在采、33天排队,无漏排或重复活动根。单次耗时不是P95或稳定吞吐承诺。此次包含此前674914c的库存显式重试修复,但该入口真实失败恢复场景仍未另行验收;两个月销量、P2正式容量和人工视觉仍未全部完成。证据位于后端target:`selfop-root-immediate-publish-tests-r2.log`、`selfop-root-immediate-publish-gates-r1.log`、`selfop-root-immediate-deploy-dispatch.json.status`、`selfop-root-immediate-runtime-after.json`、`selfop-root-immediate-deploy-hold.json.released`、`selfop-root-immediate-live-acceptance-r2.json`、`inventory-turnover-http-current684-r1.json`、`selfop-root-calendar-audit-r49.json`。
|
||||||
|
|
||||||
|
2026-10-14 09:47(北京时间)库存扫描与周转修复已发布:Lastleg预构建#306 SUCCESS,`backend-java #683 SUCCESS`仅部署提交 `2e2a354ba60635fa3bc8c59f2a41f535fe120ac3`,digest `sha256:d34748898da8ab819676686a7a17b5c4d5d171ad2df408baaee39bc307093c59`,容器 `f41a2abe297f91a9bac2b8ca337c3e4d7faa452f980c6bedf2eda1ad7466eb7b`。Integration保持#679/c640fa,容器身份未变化;两端真实BUSINESS、continuous、1200ms及唯一出口核验通过。09:41:08在自然检查点取得五条维护租约,09:41:50释放,约42秒,任务状态、检查点和请求计数未改;随后销量自动接续。US01库存原计划任务第三次尝试于09:46:01~09:46:34读取6页、新增6次请求,09:46:35 PUBLISHED/COMPLETE;来源总数、唯一业务键、有效stage与库存快照均5760,任务及scope指针一致,10月14日日代表已保存。US02当日库存仍有效。09:47销量已自动接续9月23日,61日中18日正式覆盖、2日在发布流程、1日在采、40日READY,无漏排或重复活动根。真实周转HTTP回归30请求/25项检查通过,覆盖两仓SKU/OWNER、7/15/30窗口、同版本分页、筛选和权限;不等同正式容量或人工视觉验收。证据:后端target `selfop-root-inventory-deploy-dispatch.json.status`、`selfop-root-inventory-runtime-after.json`、`selfop-root-inventory-deploy-hold.json.released`、`selfop-root-us01-inventory-published-r1.json`、`inventory-turnover-http-current683-r1.json`、`selfop-root-calendar-audit-r33.json`。
|
||||||
|
|
||||||
|
本次库存恢复使用精确SQL而非成功的RETRY接口:09:42接口返回HTTP200/B0001,真实businessGuard把DEAD库存根写入合成停止原因 `BUSINESS_SESSION_STOPPED`,未创建重试审计。独立读回确认后,09:43只对上述库存任务恢复READY并撤销该合成原因,保留原计划身份、失败证据和累计55次请求;未清除账号冷却或供应商错误保护。该完整恢复链的缺陷已用真实CommandService→TaskService调用回归复现并修复,提交 `674914c65194e259d4cf697d49afb8ca3c6690e6`,61项定向测试及5项网关检查通过;此提交尚未部署,不为该入口再次中断正在运行的P0。证据为 `selfop-root-us01-inventory-api-retry-r1.json`、`selfop-root-us01-inventory-exact-recover-r1.json`、`selfop-root-inventory-explicit-retry-tests-r2.log`。只关闭本次库存整轮恢复和上述HTTP回归项;两个月完整销量、该入口真实恢复验收、正式容量及人工视觉仍未完成。
|
||||||
|
|
||||||
|
2026-10-14 09:38(北京时间)销量仍持续运行,未为本次修复暂停:09:37只读核验已接续9月25日,1113/3009单、62次请求;61日中13日正式覆盖、5日在发布流程、42日READY及1日在采,无漏排或重复活动根。US01库存同日任务在保留计划身份和全部请求计数后单次显式恢复,第二次尝试仍于第49页遇到跨页重复而DEAD(已确认55次请求、48/58页),不能认定库存恢复成功;US02当日库存已发布。后端新增提交 `6024faa9a` 将库存分页独立为 `inventory-page-size=1000`(出库默认100不变),并将已核验的持续库存扫描异常有界重扫落入提交;`0aa188445`修复持续计划身份的显式RETRY入口;`2e2a354ba60635fa3bc8c59f2a41f535fe120ac3`收口周转精度、资格判断及销量复用run的scope约束。93项采集/恢复/目录测试、65项周转/发布测试和17项网关/发布检查通过。精确候选Lastleg #306(queue7789)正在预构建,DEPLOY=false;这些后端改动尚未部署,实际后端仍为#682/#679,不能把本地通过算作运行恢复。证据:后端target `selfop-root-us01-inventory-resume-r1-result.json`、`selfop-root-us01-inventory-progress-r5.json`、`selfop-root-calendar-audit-r26.json`、`selfop-root-inventory-pages-tests-r2.log`、`selfop-root-turnover-publish-release-tests-r1.log`、`selfop-root-inventory-release-gates-r1.log`、`selfop-business-prebuild-lastleg-service-2e2a354ba606.json`。后续仅需一次Lastleg更新,库存重扫验收、真实容量与人工视觉仍未关闭。
|
||||||
|
|
||||||
|
2026-10-14 09:25(北京时间)库存周转前端独立发布完成,不中断P0采集:Admin提交 `3f728cd0b2c8392960ad9487fd10e991282ea1ee`,Jenkins `admin-web-test #599 SUCCESS`,精确提交已核实且SCM恢复release/test。仅纳入周转/原库存明细的显示及切换相关7文件,采集看板布局与后端未提交改动未混入。修正DataTable slotName契约,正式数量/已知小计、过期库存/采集失败和空图状态分别展示;两视图切换保留仓库,趋势及证据弹框根部挂载。本地前端61项定向测试、类型检查与构建通过。运行镜像 `admin-web-test:3f728cd0b2c8`,imageId `sha256:510676d51f3976198fb1452013e8d433555d3213474e6d940e9b6319de84ccf8`,健康及库存路由200,实际响应的库存JS资源含本次修复标记;人工1920×1080截图验收仍待确认。首次资产检查错误假设入口JS直接包含库存块名而未命中,随后按容器真实资产清单读取HTTP资源核验通过,未重发部署。Lastleg与Integration容器身份保持#682/#679且健康,销量采集继续。证据:后端target `selfop-root-turnover-admin-release-admin-web-test.json`、`selfop-root-turnover-admin-runtime-r2.json`、`selfop-root-turnover-admin-consumers-r1.log`、`selfop-root-turnover-admin-build-r1.log`。下段“未发布”仅保留为此前本地核验事实;本次只关闭上述前端发布项,后端精度/重试修复、US01库存恢复、容量和人工视觉仍未完成。
|
||||||
|
|
||||||
|
2026-10-14 09:21(北京时间)P0保持自动采集,本地核对P2现有未提交改动:库存周转前端20项、后端SQL/资格31项、库存分页异常重试54项通过,Admin类型检查通过;SQL语义测试为H2合成数据,不代表MySQL容量验收。待发布改动包括DataTable的slotName契约修正、库存过期/采集失败提示、周转精度与资格校验,以及库存重复/条数变化时有界重扫;本轮未新增业务代码、未发布、未改测试环境数据。09:15只读确认US01当天08:00库存任务 `LXCOL-20261014-9D09C8ED42364633` DEAD/SELFOP_STOCK_DUPLICATE,最近库存发布仍为10/13 00:15;US02当天08:01:43已PUBLISHED。US01恢复仍未验收,不将本地重试测试算作线上恢复。09:21核验9月29日3422单全部VALID,共70次列表请求、未追加详情;US01/US02均APPLIED等待合并发布,9月28日已自动接续。61天中13天正式覆盖、2天已入库待发布、1天在采集、45天排队,无漏排或重复活动根。另有容量生成器、固定响应对照和压测执行器35项离线测试通过,不等同真实容量验收。证据为 `selfop-root-sep29-fast-progress-r2.json`、`selfop-root-calendar-audit-r14.json`、`selfop-root-turnover-capacity-tools-r1.log`。精确工作区指纹与日志:后端target `selfop-root-turnover-worktree-audit-r1.json`、`selfop-root-turnover-inventory-state-r1.json`、`selfop-root-calendar-audit-r8.json`。P2发布、正式容量/后台构建并发、人工视觉仍待完成;保持P0优先。
|
||||||
|
|
||||||
|
2026-10-14 09:13(北京时间)补充自动接续与任务池核验:9月30日根已完成1951单,共40次列表请求,全部暂存VALID;US01/US02均APPLIED,但尚未正式发布。两仓按现行首采合并构建间隔等待至09:39:39/09:39:47重试(run YIELDED、无错误),来源为 `SelfopExecutionService` / `OutboundCandidateBuilder.regularBuildDue` 的30分钟规则,并非供应商冷却或账号暂停。9月29日已自动开始列表采集,等待发布不阻断后续根。逐日审计8/14—10/13共61天:13天已正式覆盖,1天待构建发布,1天正在采集,46天READY,无漏排、无重复活动根;后续审计同时核对活动分仓子任务,避免将已归并待发布误判漏排。证据:后端target下 `selfop-root-calendar-audit-r3.json`、`selfop-root-calendar-audit-r4.json`、`selfop-root-sep30-fast-progress-r3.json`。完整两个月覆盖仍未达成,本轮未改代码、配置或运行数据。
|
||||||
|
|
||||||
|
2026-10-14 09:10(北京时间)按用户要求放弃慢任务后,重新获取列表的10月1日整天采集已完成,两仓均正式发布。新根 `LXCOL-20261014-3202CA3607FC47E8` 共2050单、两轮各21页,共42次已确认请求,完整列表直接处理,未追加逐单详情;US01于09:09:44、US02于09:09:47发布,子任务均SUCCEEDED/APPLIED、run为PUBLISHED、coverage COMPLETE且daily ready=1。此前慢的主要原因是每处理一单重复扫描整批做分仓投影;提交 `c0e1d42b621477a345c5987cb473eae54d743274` 移除循环中的重复投影,保留开始与完成时的投影及缺项补详情。Lastleg预构建#305通过,backend-java #682仅部署Lastleg成功,运行摘要为 `sha256:911e8b65a043e42ad21576804f0c100e9ea749326f43d4563ec2dd733c0098a0`;Integration保持#679的c640fa2镜像,#111新预构建未部署。原配对发布#680在HOLD_INTENT_ACKNOWLEDGED阶段取消,未取得维护租约或修改服务;#681编译失败无环境写入。旧列表根9B6C已停止,部署后仅按精确旧owner/fence释放已退出进程的过期等待,未清空数据或计数。新根本地处理实测42秒推进658单,HTTP保持42。Discovery定向19项及Gateway5项通过。Admin提交 `3291d34fb8b2508d7f6800d57f4af972a250ab65` 经#598成功发布,阶段标签改为“处理出库订单”,10项定向测试通过,人工视觉待确认。运行仍为BUSINESS/continuous=true/1200ms,无DDL或Nacos变更。
|
||||||
|
|
||||||
|
09:10:24独立只读核验两仓正式发布覆盖均为10/01—10/13共13/61天,剩余48天;发布run、scope及覆盖快照身份匹配。9月30日根 `LXCOL-20261014-84B80BD4B26147C6` 已自动接续到605/1951,无暂停或实时冷却。两个月全量及P2仍未完成,P2继续后置。证据位于后端target:`selfop-root-oct1-fast-progress-r7.json`、`selfop-root-local-perf-coverage-r1.json`、`selfop-root-local-perf-runtime-r1.json`、`selfop-root-local-perf-expire-exited-lease.json`、`selfop-root-list-label-admin-release-admin-web-test.json`,以及定向测试日志。本段替代下文08:54尚未发布、仍待排查本地性能的当前结论。
|
||||||
|
|
||||||
|
2026-10-14 08:54(北京时间)按用户明确要求放弃10月1日旧根并重新按列表采集:旧根 `LXCOL-20261014-7C26A31C56A64E96` 已通过原business stopReason机制终止为DEAD,原因 `USER_RESTART_WITH_LIST`,停在1315/2050;首次事务因本地ROW_COUNT读取方式错误已回滚,经回读确认未写入后执行第二次事务成功。旧暂存和检查点保留,不再续跑该根;账号计数、节流、配置和服务未改。正式BACKFILL接口单次返回200并创建新根 `LXCOL-20261014-9B6C031B52C54A9F`,来源北京时间10/01 00:00—10/02 00:00,自动派生US01/US02子任务。08:51:58提交,08:53:31已完成两轮21页目录,共42请求、2050单/2262条SKU,SKU及数量缺失均为0;08:54:10本地有效处理34/2050而请求仍42,当前未新增详情请求。阶段标签DETAIL包含本地订单处理,不能据标签认定还在调用详情;本地保存、校验和分仓耗时仍需排查,整天统计尚未发布。此前临时旧目录补扫代码已撤回,本轮没有新发布。证据为后端target下 `selfop-root-oct1-abandon-r2.json`、`selfop-root-oct1-list-restart-r1-result.json`、`selfop-root-oct1-list-fields-r1.json`、`selfop-root-oct1-list-progress-r3.json`及`r4.json`。
|
||||||
|
|
||||||
|
2026-10-14 08:47(北京时间)P0「列表可用、缺失补详情」已完成 TEST 发布:总控按用户单独接手授权执行 backend-java #679(queue7774),提交 `c640fa2d0d4d9a926f272754679101c23645d6c4`,使用已成功预构建的 Integration #110、Lastleg #304。远端执行 `8590f70e-0f37-4033-8339-b85ad706e70d` 已 DONE,Jenkins SUCCESS 且结束,维护租约 release ACK 后独立连接确认无维护 owner;双服务健康、运行提交及精确镜像摘要均匹配,BUSINESS、continuous=true、1200ms 保持。本次无DDL、无Nacos发布、无重新arm,断点及已采数据保留。此前两次回退的终态验证已修正:按实际HTTP协议冻结 retainedBytes 十进制字符串,并接受省略的null绑定字段,历史会话和其余字段仍严格核对;本轮Node105、Python21项定向检查通过。10月1日原根恢复RUNNING,08:46:44至08:47:08有效暂存从1168增至1181/2050,账号无暂停、无实时冷却。旧根已完成的目录缺列表商品行,仍需补详情;新目录开始使用列表优先,暂未据本次续跑证明整体提速幅度。证据:`baiyue-firstleg/target/selfop-root-p0-post-deploy-r1.json`、`selfop-root-p0-post-deploy-r2.json`、`selfop-root-p0-final-gates.log` 及私有执行回执。本段取代下文候选未上线的当前状态;两个月完整覆盖与P2仍未完成,P2依用户指示后置。
|
||||||
|
|
||||||
|
2026-10-14 08:35(北京时间)列表优先第二次切换 backend-java #678(queue7772)因 `TERMINAL_STATUS_MISMATCH` 未通过候选发布门禁,未发送释放意图;驱动已完成保护恢复(verified=false、recovered=true),远端 CANCELLED、构建不再运行。原双服务镜像恢复核验通过,五条维护租约 cancel ACK、事务后 owner 均为空,两个部署锁已释放。08:35:50 原采集根 RUNNING、DETAIL 892/2050;诊断 active/pending/nonTerminal 均为0,保留历史摘要未变。证据为后端 `target/selfop-list-preferred-recovery-progress-build678-r1.json`。当前新候选仍不能记为上线成功;冻结输入不修改、不自动重试,终态字段差异由接管总控统一定位和分工。
|
||||||
|
|
||||||
|
2026-10-14 08:29(北京时间)列表优先候选 `c640fa2d0d4d9a926f272754679101c23645d6c4` 已提交推送,Integration #110、Lastleg #304 预构建成功并核实精确镜像摘要。首次切换 backend-java #677(queue7770)已保护恢复,未完成候选发布验收:候选双服务启动及远端运行检查通过后,末端诊断检查仍要求 status 返回 null,因保留的终态会话触发 `STATUS_NOT_UNARMED`。恢复至原 `4ae158c93e2aa5d77761307d8d39c25077ab9444` 双镜像,健康、BUSINESS/1200ms保持;五条维护租约 cancel ACK,新连接确认无维护 owner,两个部署锁释放。08:26:44—08:28:10 原采集根从692/2050推进到739/2050,正常续跑。此次无DDL、无Nacos配置发布、未删除诊断或采集记录。#677 Jenkins结果SUCCESS表示保护恢复流程成功,远端阶段为CANCELLED,不表示新版本发布成功。已修正Python候选状态与Node释放门禁:仅接受冻结的同一终态会话及字段,结合active/pending为0和历史摘要不变;正反测试Node132项、Python19项通过。修正尚未重新发布,待当前总控核对新execution与精确清单。证据为后端 `target/selfop-list-preferred-build677-recovered-r1.json`、`selfop-list-preferred-recovery-progress-r1.json`、`selfop-list-preferred-recovery-progress-r2.json`、`selfop-list-preferred-terminal-status-fix-r1.json`;旧#676证据保留。
|
||||||
|
|
||||||
|
2026-10-14 08:12(北京时间)列表优先紧急修改已完成交接及本地定向验证,尚未提交或部署:接管对话 `01a137b9-87ca-7db0-a400-7c48c301ae9b` 接续原总控的现有修改,修正 Discovery 定位分支括号错误,并在列表本地处理循环独立检查执行时限、超时让出,不消耗供应商请求额度。最终用户口径为列表 SKU/数量完整则直接采用,具体订单缺商品行、SKU 或数量才补原详情,真实零值有效。两服务及依赖测试编译成功,5类定向测试108项、Gateway合同5项通过;发布专项只读复核两项修复及测试证据通过。测试覆盖完整列表不请求详情、缺项补取、补取失败重试、零值、空目录、旧目录恢复与超时断点续跑。证据为后端 `target/list-preferred-tests-r2.log`、`target/selfop-list-preferred-readonly-review-r2.json`。原总控、开发专项已交回本批写权,发布专项无在途发布;正常采集未因本轮交接停止。旧数量诊断已正式停止、占用释放且历史保留,见发布专项 `target/selfop-list-preferred-readonly-review-r1.json`。仍需冻结本批精确提交、绑定新镜像并完成环境发布及采集验收,不能据本地通过宣称列表优先已上线;库存周转与发布查询范围修复不混入本批。
|
||||||
|
|
||||||
|
2026-10-14 07:05(北京时间)#676 库存周转最小只读 HTTP 回归通过:`post676-smoke` 针对已部署 `4ae158c93e2aa5d77761307d8d39c25077ab9444` 串行执行一次,5次业务查询、含必要身份与退出共16请求、11/11断言通过。覆盖 US01/US02 × SKU/OWNER 首屏7/15/30窗口、US01 SKU固定上下文第二页及只读/无权限/客户/匿名访问边界;未造数、压测或变更采集。报告 `baiyue-firstleg/target/inventory-turnover-http-post676-r1.json`。A 已独立复核本轮11/11断言及后端身份与 #676 成功发布证据一致。当前仅关闭基础 HTTP 回归项;正式容量、P95、10并发下后台 build、完整30日样本数值及人工视觉仍未验,整个 P2 不关闭。有界数量诊断仍等待下一正常root绑定。
|
||||||
|
|
||||||
|
2026-10-14 07:03(北京时间)下一正常 root 的有界数量诊断已单次 arm 成功:HTTP 200/code200、session `quantity-next-da598868-9251-4a9b-8fdb-72b5c4caa2e3` 为 ARMED,来源 lingxing-primary、US01/US02、全货主;明确排除当前10月2日 root,当前业务仍 RUNNING。独立DB核验唯一 active_slot=1、未绑定root/collectionSession、真实生产者已附着、候选/配对/待配对均0;未重发arm、未用其他producer调用status。状态按持久字段派生,Session.state 本身不写入 state_json;首次提取断言错误保留在r1,正确复核为 `target/selfop-quantity-v2-next-root-arm-db-r2.json`,HTTP证据为 `selfop-quantity-v2-next-root-arm-r1-http.json`。等待下一合格LIST绑定,不强制指定或重放root;上限100单、2000 SKU行、2MiB,13:03:14前须绑定,绝对17:03:14到期且绑定后至多4小时,首个差异或不可判定按现有逻辑终止。仅DB有界观察已实际启动,统一执行 session `46440`,脚本 `baiyue-firstleg/target/selfop-quantity-v2-arm-observe-bounded.mjs`;首个观察时刻07:19:40,此后每15分钟一次、最多6次至08:34:40,终态提前停止。调度证据为 `baiyue-firstleg/target/selfop-quantity-v2-arm-observation-schedule-r1.json`,沿用该进程,不新增OS计划任务。尚无数量对照结果,不能据此认定可取消详情请求。
|
||||||
|
|
||||||
|
2026-10-14 07:00(北京时间)数量诊断 v2 能力发布成功:backend-java #676(queue7764)SUCCESS/DONE,精确提交 `4ae158c93e2aa5d77761307d8d39c25077ab9444`,Integration digest `sha256:c38c2631b27832888f95ec58ca4066c3ee395fc4a0427788d03e21fc2419f329`、Lastleg digest `sha256:b77c0aa6082516e10dba07d1c239e69f1e78ad58aab0e2cef029025547753be1`。remote 与候选 adapter 两处 Java/Docker 纳秒时间解析已修复;实际 Jenkins Python 3.10 完整 adapter fixture 13/13 通过后执行本轮。POST_SCHEMA_ONLY 路径未执行 DDL,候选双服务真实身份、健康、BUSINESS/1200ms及无诊断 grant 门禁通过;五条维护租约 release ACK,新物理连接确认无维护 owner,双部署锁释放。10月2日采集从维护前159/2051推进到07:00:28的185/2051,RUNNING/FETCHING、无新增限流;两仓正式覆盖各11/61天。证据:后端 `target/selfop-quantity-v2-build676-success-r1.json`、`selfop-quantity-v2-adapter-python310-full-r1.json`、`selfop-continuous-b6-r3.json`。本次发布步骤未 arm,后续07:03单次启用事实见上段;能力发布成功不等于实际数量对照采样验收完成。
|
||||||
|
|
||||||
|
2026-10-14 06:55(北京时间)后续 POST_SCHEMA_ONLY 切换 backend-java #675(queue7762)已按既定流程恢复为 `CANCELLED`,候选版本仍未验收通过。Jenkins Python 3.10 纳秒时间解析在 remote 已修复并实机只读回放通过;本轮候选双服务启动及 remote 运行态检查通过后,本地候选 adapter 仍因另一处时间解析报 `UTC_TIME_REQUIRED`,尚未发送 release intent,触发 ABORT。旧配置及旧镜像恢复、五条维护租约 cancel 均 ACK;06:55:11新连接读回无维护 owner,双服务健康、BUSINESS/1200ms、双部署锁释放。本轮零 DDL、未 arm;adapter 及直接测试由实现专项修复,发布专项仅保留环境执行职责。10月3日已完成,两仓实际已发布 run 身份与覆盖均匹配、各11/61天(剩50天);10月2日原根 `LXCOL-20261014-32493F115A934917` 已恢复至 attempt32、DETAIL45/2051、RUNNING/FETCHING,无暂停、有效冷却或新增限流。证据:后端 `target/selfop-quantity-v2-build675-recovered-r1.json`、`selfop-continuous-b6-r1.json`、`selfop-continuous-b6-r2.json`。后续不得重用本轮 executionId、容器身份或租约窗口直接重试。
|
||||||
|
|
||||||
|
2026-10-14 06:41(北京时间)数量诊断 v2 切换未验收通过,原业务采集已恢复。backend-java #673(queue7758)于06:33:05取得五条维护租约,执行两项增量 DDL、两个 quantity 配置节点 CAS 及候选双镜像启动;随后 `BUSINESS_RUNTIME_CHANGED` 触发恢复。原配置及旧双镜像恢复均有 ACK,但运行态核验再次失败,06:35:35进入 `FAILED_CONTAINED`,两个服务停止。#674(queue7760)按最小恢复方案持双部署锁,核对精确旧容器、旧 digest 与原配置后仅启动原容器并恢复 on-failure 策略;06:40新鲜运行态核验通过,两服务健康、BUSINESS 模式、1200ms、原 grant 匹配。已审 `cancelOwned` 仅释放本次五条维护租约,提交 ACK,新物理连接读回无维护 owner;#674 SUCCESS、双锁已释放。10月3日原根从维护前 attempt81 的2039/2250接续到06:40:59 attempt82 的2045/2250,RUNNING/FETCHING、无新增限流、暂停或有效冷却。两仓仍各10/61天。两项增量 DDL 保留,旧发布包不得原样重试;未 arm、未重建或重部署,后续失败根因由实现专项并行核对。脱敏证据:后端 `target/selfop-quantity-v2-contained-recovery-final-r1.json`、`selfop-quantity-v2-contained-control-r1.json`、`selfop-continuous-b5-r3.json`。此结论只确认原业务恢复,不代表候选数量诊断版本通过验收。
|
||||||
|
|
||||||
|
2026-10-14 06:24(北京时间)数量诊断v2尚未发布:预构建Integration #109、Lastleg #303均为DEPLOY=false。实际切换尝试backend-java #670因Pipeline沙箱解析入口失败,#671因节点名门禁失败;修正入口后的#672(queue7756)完成启动只读核验并取得双部署锁,但140秒内未获得自然无在途断点,本地NO_SAFE_BUSINESS_YIELD退出,远端06:23:28按180秒期限REFUSED/PHASE_DEADLINE。#672最终FAILURE,双部署锁已释放,主日志环境变更事件和命令消费均为空,五租约无维护owner,未停服务、执行DDL或修改配置。06:24原根10月3日继续RUNNING/FETCHING至1811/2250,无错误、暂停、有效冷却或新增限流,两仓仍各10/61天。证据为后端 `target/selfop-quantity-v2-build672-final-readonly.json`、`selfop-quantity-v2-build672-original-runtime-readonly.json`、`selfop-continuous-b5-r2.json`;本轮未arm,后续尝试须按新的明确执行决定推进,不能将预构建或执行器测试通过记为已上线。
|
||||||
|
|
||||||
|
2026-10-14 06:03(北京时间)第三批有界只读观察完成:10月3日根 `LXCOL-20261014-151408258B61481D` 从05:33的DETAIL 338/2250,经05:48的804,推进至06:03的1245/2250,RUNNING/FETCHING、error为空。10月4日已在候选构建间隔结束后发布;05:48及06:03两仓实际发布版本身份均匹配,完整覆盖10月4—13日,各10/61天、各剩51天。账号无暂停、有效冷却或废弃未决请求,限流累计仍为2,06:03确认请求数21029。证据为后端 `target/selfop-continuous-b3-r1.json` 至 `r3.json`。本批仅观察,未重新扫描供应商、改速或部署;数量诊断新版本仍处于发布执行器验证阶段,预构建成功不代表已切换。
|
||||||
|
|
||||||
|
2026-10-14 05:34(北京时间)采集与发布分别核对:05:33自动根已为10月3日 `LXCOL-20261014-151408258B61481D`,DETAIL 338/2250、RUNNING/FETCHING、error为空,两仓实际发布覆盖仍各9/61天。定向核查10月4日根已166/166、SUCCEEDED/ROUTED/COMPLETE;两个仓任务均APPLIED但RETRY_WAIT/YIELDED、首次执行、error为空,尚未PUBLISHED。其nextRetry分别05:45:33.475、05:45:40.242,与各仓上一候选build_started_at加30分钟精确相等;部署版本的SelfopExecutionService与OutboundCandidateBuilder对应规则确认这是首次BACKFILL的候选构建间隔等待,不据下一采集根开始推定上一日已发布。账号无暂停、有效冷却或新增限流。证据 `target/selfop-continuous-b3-r1.json`、`selfop-oct-four-publish-readonly-r1.json`、`selfop-oct-four-publish-throttle-readonly-r1.json` 均位于后端目录;未重排任务或修改间隔。
|
||||||
|
|
||||||
|
2026-10-14 05:18(北京时间)第二批有界只读观察收口:10月5日原根 `LXCOL-20261014-72E387FBCC984D86` 已完成2834/2834详情,SUCCEEDED/ROUTED、coverage=COMPLETE;两仓子任务分别于05:15:36、05:15:40达到SUCCEEDED/APPLIED/PUBLISHED,warehouse_daily_ready=1,任务结果、当前scope发布指针及run身份均匹配。两仓冻结完整区间均覆盖10月5—13日,即各9/61天、各缺52天。10月4日自动根 `LXCOL-20261014-E20AE949EF184AFE` 已由SELFOP_CONTINUOUS_PLANNER接续,05:18实查DETAIL 74/166、RETRY_WAIT/YIELDED,有真实开始及结束时间、无错误;不是仅READY入池。账号pause=null、无有效冷却、pending未废弃,限流累计仍为2。04:48观察曾捕获新run初始化时的DIRECTORY 0,后续只读核查确认manifest目录已完整、有效暂存及详情断点保留,未发生重新扫描或丢失进度。证据为 `baiyue-firstleg/target/selfop-oct-five-post301-b2-r1.json` 至 `r3.json` 和 `selfop-oct-five-phase-reset-readonly-r1.json`。本批观察已结束,未停止持续采集、重提任务或修改运行配置;本段不代表61天历史全部完成。
|
||||||
|
|
||||||
|
2026-10-14 04:33(北京时间)#301发布后有界只读观察完成:10月5日原根 `LXCOL-20261014-72E387FBCC984D86` 从03:48基线892/2834,经04:03的1260、04:18的1619,推进至04:33的1956/2834,仍为RUNNING/FETCHING、DETAIL,最新errorCode为空。三次间隔15分钟的观察均无账号暂停、无有效冷却、无新增限流(累计仍为2),确认请求数17626→17994→18353→18690;两仓子任务仍WAITING_SOURCE/NOT_STARTED,不能记为10月5日已发布。两仓当前发布版本身份及冻结完整区间复核均通过,仍各覆盖10月6—13日8/61天、各缺53天。证据为 `baiyue-firstleg/target/selfop-oct-five-post301-r0.json` 至 `r3.json`。本观察批次已达到最多3次并结束,仅停止本地观察等待,未停止服务端持续采集,未重提任务、改配置或重复部署。
|
||||||
|
|
||||||
|
2026-10-14 03:45(北京时间)查询优化发布后的真实HTTP验收已通过:指标专项报告 `baiyue-firstleg/target/inventory-turnover-http-postpublish-r1.json` 绑定后端 `765b6e6208581006ae2e09dd672368aa3809d5b4`、前端 `02a9d72ef818a2c5f05ff38291b61f9a8c4ff888`,30次请求、25项检查全部通过,覆盖两仓SKU/货主、7/15/30日窗口、固定上下文分页、空筛选保留全局概览、无效/跨仓上下文及权限拒绝。US01 SKU首屏713ms、分页407ms,货主首屏445ms、分页402ms;US02各首屏139—171ms。这些为当前数据、并发1的单次HTTP耗时,真实链路覆盖部署版本MyBatis绑定及MySQL执行,不代表至少1万SKU、30个有效日样本、10并发或P95正式性能验收通过;人工视觉仍待确认。本段关闭下文“发布后HTTP待验”项,保留上述规模与视觉限制。
|
||||||
|
|
||||||
|
2026-10-14 03:45(北京时间)库存周转查询优化已单独发布:Lastleg `765b6e6208581006ae2e09dd672368aa3809d5b4`,Jenkins `#301 SUCCESS`,仅提交冻结的 `InventoryTurnoverSql.java` 及两个直接测试文件;35项定向测试与5项Gateway合同通过,最终MySQL r33六组完整结果一致、r34执行计划复核通过。当前小样本串行SQL为SKU首屏436ms、第二页405ms、货主首屏390ms,不作为HTTP耗时或正式规模性能达标证据。此次仅一次Lastleg构建部署,SKIP_TESTS=true仍编译测试源码;镜像推送后才等待10月5日自动根正常YIELDED断点,03:43接管五项维护租约,任务、预算及未决请求哈希保持不变,再放行部署。实际镜像引用及摘要与本次构建一致,两服务健康,Integration容器及启动时间保持,Admin未发布;三份Nacos全文哈希未变,两服务运行态continuous=true、间隔1200ms及同一grant保持。运行核验后维护租约ACKNOWLEDGED释放,Jenkins部署锁及数据库维护租约余留均为0。原根 `LXCOL-20261014-72E387FBCC984D86` 恢复RUNNING,第70次执行在03:44:29、03:44:57、03:45:13分别为802→815→821/2834;账号pause=null、无冷却,限流累计仍为2。主要证据前缀 `baiyue-firstleg/target/selfop-turnover-perf-`:`release-state.json`、`r205-capture-1-hold.json`、`r207-live-proof.json`及`-evidence.json`、`r208-release.json`、`r209/r210/r211-continuity.json`、`final-gate.json`。发布后真实HTTP验收由指标专项另行收口;人工视觉、至少1万SKU及30个有效日样本的正式性能资格、并发目标仍未验,本段不据部署成功宣称全部验收通过。
|
||||||
|
|
||||||
|
2026-10-14 03:18(北京时间)真实补采完成新日期并自动接续:13日根 `LXCOL-20261014-24F6B3648C324475` 已完成2960/2960详情,03:11:16为SUCCEEDED/ROUTED、coverage=COMPLETE;两仓子任务 `LXCOL-20261014-79925813D3594E6F`、`LXCOL-20261014-5E078271773D4AF1` 分别于03:11:48、03:11:58达到SUCCEEDED/APPLIED/PUBLISHED,warehouse_daily_ready=1,任务结果及scope发布指针均匹配。两仓冻结发布覆盖均为10月6—13日完整8天,即各8/61天、仍各缺53天。下一历史日10月5日根 `LXCOL-20261014-72E387FBCC984D86` 由服务端自动接续,03:13为目录21/29、RETRY_WAIT,03:18已到DETAIL 137/2834、RUNNING;同期账号确认请求数16726→16871,pause=null,限流累计保持2,未新增限流。以上为本发布对话03:13、03:18只读数据库快照;本批未重提任务、调速、部署、重启或修改环境数据,持续采集保持运行。此段覆盖下文“仅7天/13日仍采集”的旧状态,不代表61天已全部发布。
|
||||||
|
|
||||||
|
2026-10-14 02:04(北京时间)库存周转候选已发布:Lastleg `16d0b9c80fd8ee627407e306418b4e42d2320f3d`(#300 SUCCESS,SKIP_TESTS=true保留测试编译)与Admin `02a9d72ef818a2c5f05ff38291b61f9a8c4ff888`(#597 SUCCESS)均固定远端已审核提交,各仅一次构建发布;Admin SCM已恢复release/test及lightweight=true。后端构建期间仅预留Jenkins实际部署锁,镜像推送完成且执行确实停在该锁后,才在正常无在途断点持有五项数据库维护租约并放行替换;实际镜像摘要与构建推送摘要一致、Integration未重启。两端continuous=true、额度0及1200ms配置完整保留;运行态验证后租约ACKNOWLEDGED释放,Jenkins预留与数据库维护租约余留均为0。02:04:51复查采集进度1549→1621/2960、无暂停或新增限流;两仓仍各7天已完整发布、54天待补。部署版本、健康、页面入口及静态资源81项通过;真实HTTP/首屏耗时由总控另行收口记录;人工视觉与高并发目标性能仍未验,不能据本次发布完成宣称全部目标完成。证据前缀 `baiyue-firstleg/target/selfop-quantity-sampling-config-turnover-`:`backend-state.json`、`r154-live-proof.json`、`admin-release-admin-web-test.json`、`runtime-r1.json`、`final-continuity.json`;维护释放为 `selfop-quantity-sampling-config-continuous-r155-turnover-release.json`。本段覆盖下文周转“待发布”及Lastleg仍为3d3507的旧状态,61天数据补采仍未完成。
|
||||||
|
|
||||||
|
2026-10-14 01:38(北京时间)当前运行事实:已按本轮授权开启两端持续 BUSINESS 采集,并将 Lastleg `daily-request-budget` 从实际旧值12000改为0;两端间隔仍为1200ms,已用计数、未决请求、grant及原截止配置均保留。Jenkins `backend-java #669` SUCCESS,沿用已部署 `3d3507a770cc067209cfb779840a1a01ae5b87af` 的原容器和镜像,仅配置CAS及重启;三份Nacos完整回读、两端内部运行态continuous=true与健康检查通过。五项维护租约已ACKNOWLEDGED释放且余留为0,原13日任务 `LXCOL-20261014-24F6B3648C324475` 恢复RUNNING,01:36实查详情由994增长至1016/2960。前两次#667/#668均在写入前失败,随后完整只读确认配置及容器未变;预算断言和远端Python纳秒解析修正后19项直接测试及远端全套写入前预检通过,不将其表述为应用全量测试。
|
||||||
|
|
||||||
|
服务端已持久化8月14日至10月13日共61天的对应任务,其中53条为新自动补采根,13日沿用原人工根;10月10日查得3个历史根(1成功、2其他状态),不属于本次新增重复。按两仓当前已发布版本的冻结覆盖证据,各仓仅10月6—12日7天完整,仍各缺54天,不能将任务入池记为两个月数据采完。数量诊断24单/25条SKU配对均相同,尚不足以取消详情采集。库存周转新候选仍待独立发布及真实HTTP验收,本条不据配置切换推定其完成。主要证据位于 `baiyue-firstleg/target/selfop-quantity-sampling-config-continuous-` 前缀的 `r142-result.json`、`r143-live-proof.json`、`r144-release.json`、`r145-pool.json`、`r146-progress.json`、`r147-coverage.json`、`r148-config-confirmed.json`;本段覆盖下列旧额度、有限队列及持续开关未启用的历史状态。
|
||||||
|
|
||||||
20:04 按用户“先手动恢复采集,再改额度”执行:19:55已通过原人工BACKFILL接口提交10/07根 `LXCOL-20261013-6ECEF4366F694584`,20:04实查RUNNING、325请求、账号无暂停;原1.2秒间隔、Nacos、日计数和独占截止均未改。提交前只将本机必须容纳root10800秒加900秒的过保守预检改为90分钟余量,按2100预估核对剩余3180后提交,未重复已有日期。取消BUSINESS每日/根次数硬额度的代码 `c2bb769676c487c13eb6dee962c13febeeffe83e` 已推送,121项定向测试及5项Gateway检查通过;计数、1.2秒、期限、429/鉴权/未知结果保护和VALIDATION上限保留,每轮requestBudget仍是YIELDED批次边界。该版本尚未部署,当前仍由旧服务采集。已准备一次性有限接续脚本,在7日两仓发布且无活动请求后只部署Lastleg、验证镜像和运行API无次数上限,再接6日;不续22:36:59原许可,不执行SQL/清零或修改Integration。20:05接续进程已启动(PID17464),状态WAITING_CURRENT_COLLECTION,当前根354请求;启动状态以 `target/selfop-unlimited-cutover-r1.json` 为准,不将待发布代码记为运行生效。
|
20:04 按用户“先手动恢复采集,再改额度”执行:19:55已通过原人工BACKFILL接口提交10/07根 `LXCOL-20261013-6ECEF4366F694584`,20:04实查RUNNING、325请求、账号无暂停;原1.2秒间隔、Nacos、日计数和独占截止均未改。提交前只将本机必须容纳root10800秒加900秒的过保守预检改为90分钟余量,按2100预估核对剩余3180后提交,未重复已有日期。取消BUSINESS每日/根次数硬额度的代码 `c2bb769676c487c13eb6dee962c13febeeffe83e` 已推送,121项定向测试及5项Gateway检查通过;计数、1.2秒、期限、429/鉴权/未知结果保护和VALIDATION上限保留,每轮requestBudget仍是YIELDED批次边界。该版本尚未部署,当前仍由旧服务采集。已准备一次性有限接续脚本,在7日两仓发布且无活动请求后只部署Lastleg、验证镜像和运行API无次数上限,再接6日;不续22:36:59原许可,不执行SQL/清零或修改Integration。20:05接续进程已启动(PID17464),状态WAITING_CURRENT_COLLECTION,当前根354请求;启动状态以 `target/selfop-unlimited-cutover-r1.json` 为准,不将待发布代码记为运行生效。
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,11 @@
|
|||||||
# 测试环境独立任务协作登记
|
# 测试环境独立任务协作登记
|
||||||
|
|
||||||
|
## 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 或内部子代理。
|
||||||
|
|
||||||
|
范围为 Integration 列表 SKU/数量 DTO、映射、内部 OpenAPI 与直接测试,以及 Lastleg 列表消费、Discovery/Validation、RoutingManifest、单次执行预算与直接测试。最终口径为列表完整时直接采用列表数量,仅具体订单缺商品行、SKU 或数量时补取既有详情;真实零值有效,正常空订单页不补详情。原开发对话 `01a135d0-f5c7-7422-892f-037b0c9ea00e` 已交回写权。`01a12f38-d28c-75c0-bc1a-dfb27e7a4961` 继续承担只读审查和唯一环境发布执行,接管协调者核对候选、验证与既有授权后安排,不自行并行执行 Maven 或发布。库存周转、发布查询范围修复及其他冻结修改不混入本批。此项交接不新增环境授权,运行及验收事实只维护正式部署契约。
|
||||||
|
|
||||||
## 2026-10-13 用户指定的数量对照临时验证
|
## 2026-10-13 用户指定的数量对照临时验证
|
||||||
|
|
||||||
用户明确指定已自行创建的 `01a135d0-f5c7-7422-892f-037b0c9ea00e`(开启新对话)处理列表量/预报量/实际量验证,在不影响现有采集的前提下开发。保存项目 TEST `c64729ff-6710-43c6-8ef2-d84e9666cc1e`、host local、cwd `C:/Users/BY-OY/Desktop/code/chongchong-global`;本次只登记既有对话的一次性范围,不创建长期专项或新对话。采集整体协调仍归当前总控 `01a13496-1713-7ac3-9981-1ae9ed551571`。
|
用户明确指定已自行创建的 `01a135d0-f5c7-7422-892f-037b0c9ea00e`(开启新对话)处理列表量/预报量/实际量验证,在不影响现有采集的前提下开发。保存项目 TEST `c64729ff-6710-43c6-8ef2-d84e9666cc1e`、host local、cwd `C:/Users/BY-OY/Desktop/code/chongchong-global`;本次只登记既有对话的一次性范围,不创建长期专项或新对话。采集整体协调仍归当前总控 `01a13496-1713-7ac3-9981-1ae9ed551571`。
|
||||||
|
|||||||
+5
-1
@@ -51,6 +51,8 @@ SKU/商品/货主 | 实物/可售 | 7日/15日/30日出库 | 日均 |
|
|||||||
|
|
||||||
图表约 220~260px 高,可折叠且记住本页偏好,表格仍是比较明细的主区。四张指标卡和两图显示当前仓库及精确货主范围的整体情况,不随 SKU 关键字、关注筛选及翻页改变;区块标明“本仓概览”或“本货主概览”。列表上方单独显示筛选结果条数,不能让全仓卡片被误读为当前页合计。
|
图表约 220~260px 高,可折叠且记住本页偏好,表格仍是比较明细的主区。四张指标卡和两图显示当前仓库及精确货主范围的整体情况,不随 SKU 关键字、关注筛选及翻页改变;区块标明“本仓概览”或“本货主概览”。列表上方单独显示筛选结果条数,不能让全仓卡片被误读为当前页合计。
|
||||||
|
|
||||||
|
指标卡主数值只展示正式总量,未知总量显示“—”;已知小计(含0)与待核验SKU数放辅助说明,不用已知小计冒充完整总量。库存过期须明确显示最近观测完成时间及受影响指标;同仓采集失败独立显示原因、真实任务号与状态观测时间,沿现有数据采集入口查看。整体刷新同时更新只读采集状态,状态请求失败须说明,不能继续把旧失败当最新状态或影响已成功返回的经营数据。样本证据明确区分出库历史和每日库存观测,补采/验证不计日代表,截止日只允许已结束的北京时间日期,因此今天采集成功的合格计划库存样本最早次日查询时才能纳入窗口;当天样本数仍为0不代表采集未成功。
|
||||||
|
|
||||||
货主 Top10 按有效全品质实物件数排序,未知货主不按零参与排名,图旁显示未能完整计算的货主数;标题必须是“实物件数”,不写“占仓面积/占仓最多”。相同件数按货主编码稳定排序。点击条目切入本仓该货主的 SKU 视图,显示可清除的货主条件,保留上下文;不足十个按实际数展示。
|
货主 Top10 按有效全品质实物件数排序,未知货主不按零参与排名,图旁显示未能完整计算的货主数;标题必须是“实物件数”,不写“占仓面积/占仓最多”。相同件数按货主编码稳定排序。点击条目切入本仓该货主的 SKU 视图,显示可清除的货主条件,保留上下文;不足十个按实际数展示。
|
||||||
|
|
||||||
日均对比使用该范围内完整的 7/15/30 天总出库分别除以 7/15/30,各柱独立判覆盖,不比较不同天数的原始累计量;无完整口径的柱留空并显示原因,不画零柱。图表用于观察平均速度,不直接生成增长率或客户等级。
|
日均对比使用该范围内完整的 7/15/30 天总出库分别除以 7/15/30,各柱独立判覆盖,不比较不同天数的原始累计量;无完整口径的柱留空并显示原因,不画零柱。图表用于观察平均速度,不直接生成增长率或客户等级。
|
||||||
@@ -88,6 +90,8 @@ SKU 列表是只读分析表,无须新增“操作”列。第一组身份列
|
|||||||
|
|
||||||
计算保留原六位小数精度;日均显示两位、天数一位、周转次数两位,筛选和排序使用未舍入值。很小的正数按显示精度显示“<0.01/<0.1”,不伪装为真实零;前端不重新推算业务指标。
|
计算保留原六位小数精度;日均显示两位、天数一位、周转次数两位,筛选和排序使用未舍入值。很小的正数按显示精度显示“<0.01/<0.1”,不伪装为真实零;前端不重新推算业务指标。
|
||||||
|
|
||||||
|
仓库/货主的 7/15/30 日日均出库图按固定已发布销量版的实际覆盖与单位资格独立计算。后台补采或归并触发 `rebuildRequired` 时,不抹去该版已经完整覆盖的日期;图表显示销量发布时间和新版待重算提示,未发布的事实及其他版本均不混入。30 日未齐不能用已覆盖天数缩小分母。SKU当前库存评估继续受待重算保护,图表旧版可读不代表可作为最新补货或告警依据。
|
||||||
|
|
||||||
### 零值与数据不足
|
### 零值与数据不足
|
||||||
|
|
||||||
| 条件 | 结果 |
|
| 条件 | 结果 |
|
||||||
@@ -144,7 +148,7 @@ SKU 列表是只读分析表,无须新增“操作”列。第一组身份列
|
|||||||
| sortBy、current、size | 按分组白名单排序;默认 PHYSICAL_DESC,1/20,size≤100;同值以 SKU+货主或货主编码稳定排序,未知末尾 |
|
| sortBy、current、size | 按分组白名单排序;默认 PHYSICAL_DESC,1/20,size≤100;同值以 SKU+货主或货主编码稳定排序,未知末尾 |
|
||||||
| 查询上下文 | 复用固定版本、queryAsOf 和有效期;新增历史日代表集合的固定证据,不能由客户端任填 run ID 绕过检查 |
|
| 查询上下文 | 复用固定版本、queryAsOf 和有效期;新增历史日代表集合的固定证据,不能由客户端任填 run ID 绕过检查 |
|
||||||
|
|
||||||
SKU 排序至少提供实物/可售降序、7/15/30 日出库降序、所选基准可售天数升降序、期间件数周转次数降序;正式值优先,部分出库只能以明确的“已采集量排序”独立模式参与,不伪装成完整销量排序。OWNER 不支持 SKU 天数排序;支持实物、完整窗口出库、已确认无出库实物小计等明确排序,未知状态随值返回。
|
SKU 数值表头支持实物件数、正品可售、7/15/30 日出库、所选基准日均出库、预计可售天数,以及扩展列冻结件数、次品实物、期间平均实物、期间件数周转的升降序。首次点击未选中的列使用降序,再次点击切换升序;箭头表示成功查询的顺序,与排序下拉框共用同一合同。切换排序回到第一页,保持有效的查询上下文;按全部筛选结果排序后分页,不在当前页重排。日均排序随 `baseWindowDays` 使用对应窗口。未知或覆盖不足的正式值始终排在末尾,不按已采集小计或零参与;同值按 SKU+货主稳定排序。OWNER 支持相同指标(预计可售天数除外)及已确认无出库实物小计排序,同值按货主编码稳定排序,未知状态随值返回。
|
||||||
|
|
||||||
一次响应返回 `context,summary,charts,rows,total`。首次/整体刷新返回概览与两图,普通列表翻页用同一上下文及 `includeOverview=false` 省去重复汇总;筛选 SKU 或关注不改变概览范围。切仓、截止日、基准、精确货主或分组变化时,重新请求对应概览;不得把新上下文的行与旧图拼屏。
|
一次响应返回 `context,summary,charts,rows,total`。首次/整体刷新返回概览与两图,普通列表翻页用同一上下文及 `includeOverview=false` 省去重复汇总;筛选 SKU 或关注不改变概览范围。切仓、截止日、基准、精确货主或分组变化时,重新请求对应概览;不得把新上下文的行与旧图拼屏。
|
||||||
|
|
||||||
|
|||||||
+24
-24
@@ -1,6 +1,6 @@
|
|||||||
# 自营经营总览图表设计
|
# 自营经营总览图表设计
|
||||||
|
|
||||||
新增 Admin「自营业务 → 经营总览」,用图表回答本仓近期出库是否变化、库存大约需要多久消化、哪些 SKU 出库多、哪些库存值得关注。页面以 SKU 为中心,所属货主只作识别;保持同仓同名 SKU 跨货主分开,不恢复已取消的货主独立筛选或经营面板。
|
新增 Admin「海外仓 → 经营总览」,用图表回答本仓近期出库是否变化、库存大约需要多久消化、哪些 SKU 出库多、哪些库存值得关注。页面以 SKU 为中心,所属货主只作识别;保持同仓同名 SKU 跨货主分开,不恢复已取消的货主独立筛选或经营面板。
|
||||||
|
|
||||||
本文件是经营总览页面、聚合接口、下钻和验收的维护入口;原始事实、同步、可售天数、观察资格、版本与权限沿用[一期方案](领星一件代发数据统计一期方案.md)。本次范围为设计与开发交接,不表示页面已经实现、上线或通过视觉验收。采集和环境操作继续按当前正式契约及用户授权执行,图表查询不调用领星。
|
本文件是经营总览页面、聚合接口、下钻和验收的维护入口;原始事实、同步、可售天数、观察资格、版本与权限沿用[一期方案](领星一件代发数据统计一期方案.md)。本次范围为设计与开发交接,不表示页面已经实现、上线或通过视觉验收。采集和环境操作继续按当前正式契约及用户授权执行,图表查询不调用领星。
|
||||||
|
|
||||||
@@ -14,19 +14,19 @@
|
|||||||
|
|
||||||
```text
|
```text
|
||||||
经营总览 查看销量 查看库存 数据采集
|
经营总览 查看销量 查看库存 数据采集
|
||||||
仓库 [选择] 出库趋势范围 [今日/近3天/本周/近15天/本月/自定义] 查询 刷新
|
仓库 [选择] 统计时间范围 [今日/近3天/本周/近15天/本月/自定义] 查询 刷新
|
||||||
销量覆盖截至…… 库存采集于…… 有新数据可刷新 / 部分资料提示
|
销量覆盖截至…… 库存采集于…… 有新数据可刷新 / 部分资料提示
|
||||||
──────────────────────────────────────────────────────────────────────
|
──────────────────────────────────────────────────────────────────────
|
||||||
区间出库量 | 近30日日均出库 | 实物库存 | 正品可售 | 有库存SKU | 无出库SKU
|
区间出库量 | 所选时段日均出库 | 实物库存 | 正品可售 | 有库存SKU | 无出库SKU
|
||||||
──────────────────────────────────────────────────────────────────────
|
──────────────────────────────────────────────────────────────────────
|
||||||
出库趋势(日折线,约 2/3 宽) 库存消化天数分布(横向条形,约 1/3 宽)
|
出库趋势(日折线,约 2/3 宽) 库存消化天数分布(横向条形,约 1/3 宽)
|
||||||
所选日期范围;真实每日点 固定近30个完整日;分类数量与待核验范围
|
所选日期范围;真实每日点 所选日期范围;分类数量与待核验范围
|
||||||
──────────────────────────────────────────────────────────────────────
|
──────────────────────────────────────────────────────────────────────
|
||||||
所选时段热销Top10 预计消化时间最长Top10 近30日无出库库存Top10
|
所选时段热销Top10 预计消化时间最长Top10 所选时段无出库库存Top10
|
||||||
按出库件数的横向条形 按可售天数的横向条形 按实物件数的横向条形
|
按出库件数的横向条形 按可售天数的横向条形 按实物件数的横向条形
|
||||||
```
|
```
|
||||||
|
|
||||||
出库趋势范围默认近 15 天,支持主方案确认的五种自然周期和最多 366 天的自定义范围。该控件同时影响趋势、区间出库 KPI 与热销榜;热销按所选日期内已采集有效出库量排序,未采齐显示部分覆盖。日均、分布、最长消化及无出库库存榜仍标注近 30 个完整日范围。
|
统计时间范围默认近 15 天,支持主方案确认的五种自然周期和最多 366 天的自定义范围。该控件同时影响趋势、区间出库与日均 KPI、库存分布和三个榜单;热销按所选日期内已采集有效出库量排序,未采齐显示部分覆盖。日均与库存评估以同一所选区间的自然日数为分母,包含今日或缺失日期时不以部分销量推算。库存数量仍来自当前固定库存版本,不代表所选日期的历史库存。
|
||||||
|
|
||||||
KPI 采用紧凑的一行指标带;图表是主要内容,不再以整页描述表承载。复用 Admin 密度令牌,图表不套详情字段网格或普通表格行高。图表行建议趋势约 280~320px 高;榜单给 10 条保留可读高度,不强制全部首屏可见。长 SKU 可换行或省略并提供可聚焦的完整文字;名称与货主为辅助文本,不以内部 ID 回退。
|
KPI 采用紧凑的一行指标带;图表是主要内容,不再以整页描述表承载。复用 Admin 密度令牌,图表不套详情字段网格或普通表格行高。图表行建议趋势约 280~320px 高;榜单给 10 条保留可读高度,不强制全部首屏可见。长 SKU 可换行或省略并提供可聚焦的完整文字;名称与货主为辅助文本,不以内部 ID 回退。
|
||||||
|
|
||||||
@@ -37,11 +37,11 @@ KPI 采用紧凑的一行指标带;图表是主要内容,不再以整页描
|
|||||||
| 指标 | 展示口径 |
|
| 指标 | 展示口径 |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| 区间出库量 | 与当前全仓趋势的日点合计守恒;全日均完整才显示正式总量,否则标为“区间已采集出库量”,全无可靠值为“—” |
|
| 区间出库量 | 与当前全仓趋势的日点合计守恒;全日均完整才显示正式总量,否则标为“区间已采集出库量”,全无可靠值为“—” |
|
||||||
| 近 30 日日均出库 | 本仓最近 30 个完整自然日实际出库总量÷30;完整仓级覆盖即可计算,不因某个 SKU 库存观察不足抹去有效出库。不用当前图表天数做分母 |
|
| 所选时段日均出库 | 本仓所选区间实际出库总量÷区间自然日数;完整仓级覆盖即可计算,不因某个 SKU 库存观察不足抹去有效出库。缺日或含未完整今日则为空 |
|
||||||
| 实物库存 | 当前固定库存版各货主/SKU/品质的有效实物量;冻结、次品已经包含在实物中,不重复相加;在途不加入 |
|
| 实物库存 | 当前固定库存版各货主/SKU/品质的有效实物量;冻结、次品已经包含在实物中,不重复相加;在途不加入 |
|
||||||
| 正品可售 | 只汇总正品有效可用数量,不再减冻结、不加在途或次品 |
|
| 正品可售 | 只汇总正品有效可用数量,不再减冻结、不加在途或次品 |
|
||||||
| 有库存 SKU | 全品质实物量已核验大于零的货主+SKU 去重数;品质行不是独立 SKU;存在库存未知时标记“已确认 N,另 M 待核验” |
|
| 有库存 SKU | 全品质实物量已核验大于零的货主+SKU 去重数;品质行不是独立 SKU;存在库存未知时标记“已确认 N,另 M 待核验” |
|
||||||
| 近 30 日无出库 SKU | 有实物且满足完整 30 日零出库及本仓观察资格的 SKU 数;观察不足和未知另外说明,不认定卖不掉 |
|
| 所选时段无出库 SKU | 有实物且满足完整所选区间零出库及本仓观察资格的 SKU 数;观察不足和未知另外说明,不认定卖不掉 |
|
||||||
|
|
||||||
库存或风险总量存在依赖未知时,正式值为空,允许显示“已知小计”及未知 SKU 数;不把未知过滤后仍显示成全仓总数。单项完整性独立:库存失败不阻止完整销量图;销量不足不掩盖已核验库存。全仓可售天数、平均 SKU 可售天数、评分和“优级客户”不在指标带中。
|
库存或风险总量存在依赖未知时,正式值为空,允许显示“已知小计”及未知 SKU 数;不把未知过滤后仍显示成全仓总数。单项完整性独立:库存失败不阻止完整销量图;销量不足不掩盖已核验库存。全仓可售天数、平均 SKU 可售天数、评分和“优级客户”不在指标带中。
|
||||||
|
|
||||||
@@ -49,7 +49,7 @@ KPI 采用紧凑的一行指标带;图表是主要内容,不再以整页描
|
|||||||
|
|
||||||
### 出库趋势
|
### 出库趋势
|
||||||
|
|
||||||
使用日折线图,横轴为北京时间业务日期,纵轴为件数,零基线;日期轴包含完整选择区间。后台按仓库及固定销量版直接汇总有效日事实,包含现在已无库存的出库商品,不从库存列表或 Top 榜单反推总量。仓级全日覆盖完整且无出库时可为零,不要求每个 SKU 均满足 30 日库存观察期。
|
使用日折线图,横轴为北京时间业务日期,纵轴为件数,零基线;日期轴包含完整选择区间。后台按仓库及固定销量版直接汇总有效日事实,包含现在已无库存的出库商品,不从库存列表或 Top 榜单反推总量。仓级全日覆盖完整且无出库时可为零,不要求每个 SKU 均满足所选区间库存观察资格。
|
||||||
|
|
||||||
每个日点返回正式量、已采集量、完整性和覆盖原因。缺日断线,部分日用明确的点形/虚线及“未完整”文字;不平滑跨越缺口。今日只有一个日累计点,不画小时趋势;自定义长区间减少坐标标签密度但保留全部日点和提示。整段已采集合计等于可靠日点已采集量之和;所有日点未知时合计为空。
|
每个日点返回正式量、已采集量、完整性和覆盖原因。缺日断线,部分日用明确的点形/虚线及“未完整”文字;不平滑跨越缺口。今日只有一个日累计点,不画小时趋势;自定义长区间减少坐标标签密度但保留全部日点和提示。整段已采集合计等于可靠日点已采集量之和;所有日点未知时合计为空。
|
||||||
|
|
||||||
@@ -67,24 +67,24 @@ KPI 采用紧凑的一行指标带;图表是主要内容,不再以整页描
|
|||||||
| --- | --- |
|
| --- | --- |
|
||||||
| `UNKNOWN` 库存或销量待核验 | 先检查本 SKU 实物或用于可售天数的正品可售数据异常/未知/过期;命中即归此桶。后续因销量窗口或观察资格不足无法计算时也归此桶,分别统计原因 |
|
| `UNKNOWN` 库存或销量待核验 | 先检查本 SKU 实物或用于可售天数的正品可售数据异常/未知/过期;命中即归此桶。后续因销量窗口或观察资格不足无法计算时也归此桶,分别统计原因 |
|
||||||
| `NO_AVAILABLE` 无可售库存 | 库存有效、实物大于零且正品可售量明确为零;可包含冻结或次品,不宣称周转良好,不依赖销量资格 |
|
| `NO_AVAILABLE` 无可售库存 | 库存有效、实物大于零且正品可售量明确为零;可包含冻结或次品,不宣称周转良好,不依赖销量资格 |
|
||||||
| `NO_OUTBOUND_30D` 近 30 日无出库 | 有效正可售量、完整 30 日及观察资格且出库为零;天数为空,不转成无限大 |
|
| `NO_OUTBOUND_IN_WINDOW` 所选时段无出库 | 有效正可售量、完整所选区间及观察资格且出库为零;天数为空,不转成无限大 |
|
||||||
| `DAYS_0_30`、`DAYS_30_60`、`DAYS_60_90`、`DAYS_GT_90` | 正可售量、正日均且资格完整,按未舍入天数分别落 `(0,30]`、`(30,60]`、`(60,90]`、`(90,+∞)` |
|
| `DAYS_0_30`、`DAYS_30_60`、`DAYS_60_90`、`DAYS_GT_90` | 正可售量、正日均且资格完整,按未舍入天数分别落 `(0,30]`、`(30,60]`、`(60,90]`、`(90,+∞)` |
|
||||||
|
|
||||||
在无可售库存判断之后、零出库或数值分桶之前检查销量/观察资格;不足回到 UNKNOWN。展示顺序为四个数值桶、无出库、无可售、待核验,不等于执行判定顺序。30/60/90 仅为本版图形分组边界,不是收费、补货或优劣政策。
|
在无可售库存判断之后、零出库或数值分桶之前检查销量/观察资格;不足回到 UNKNOWN。展示顺序为四个数值桶、无出库、无可售、待核验,不等于执行判定顺序。可售天数=当前正品可售量×所选区间自然日数÷区间完整出库量;SKU 的最早有效观察证据须不晚于区间起点。30/60/90 仅为本版图形分组边界,不是收费、补货或优劣政策。
|
||||||
|
|
||||||
各桶 `skuCount` 之和必须等于 `candidateSkuCount`,并同时返回已排除的确定零实物 SKU 数。图表不展示“风险率”百分比;待核验量无法被藏进已评估分母。可在提示中显示桶内已知实物小计及未知件数范围,不把件数与 SKU 个数混用。
|
各桶 `skuCount` 之和必须等于 `candidateSkuCount`,并同时返回已排除的确定零实物 SKU 数。图表不展示“风险率”百分比;待核验量无法被藏进已评估分母。可在提示中显示桶内已知实物小计及未知件数范围,不把件数与 SKU 个数混用。
|
||||||
|
|
||||||
此分布为互斥展示分组,主方案 attention 是可并存的关注条件,两者不等价。例:全冻结且近 30 日零出库 SKU 归 NO_AVAILABLE,但仍可出现在无出库库存榜。冻结、次品、可售、在途不能作为可相加的饼图组成部分。
|
此分布为互斥展示分组,主方案 attention 是可并存的关注条件,两者不等价。例:全冻结且所选区间零出库 SKU 归 NO_AVAILABLE,但仍可出现在无出库库存榜。冻结、次品、可售、在途不能作为可相加的饼图组成部分。
|
||||||
|
|
||||||
### 三个 SKU 榜单
|
### 三个 SKU 榜单
|
||||||
|
|
||||||
均为横向条形图,最多 10 个候选;热销使用页面所选日期,另两个库存榜固定至昨日的 30 个完整自然日;无合格候选显示原因,不造空条或补足 10 个。每条展示 SKU、可用名称、所属货主及主指标,提示补充库存/日均/日期依据。同名 SKU 不跨货主合并;坐标从零开始,条长按真实数值,不截成相同最大长度。数量过大可用统一刻度单位,提示保留原值。
|
均为横向条形图,最多 10 个候选;三个榜单统一使用页面所选日期;无合格候选显示原因,不造空条或补足 10 个。每条展示 SKU、可用名称、所属货主及主指标,提示补充库存/日均/日期依据。同名 SKU 不跨货主合并;坐标从零开始,条长按真实数值,不截成相同最大长度。数量过大可用统一刻度单位,提示保留原值。
|
||||||
|
|
||||||
| 图表 | 资格与排序 | 下钻 |
|
| 图表 | 资格与排序 | 下钻 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| 所选时段热销 Top 10 | 按所选日期已采集有效正出库量降序、单数降序、SKU/货主编码升序;部分覆盖也展示,明确标记未完整,不将未采集当零。库存缺失或售罄不阻止进入 | 条目打开同窗口 SKU 趋势;“查看 Top 100”进入销量分析相同 CUSTOM 日期范围 |
|
| 所选时段热销 Top 10 | 按所选日期已采集有效正出库量降序、单数降序、SKU/货主编码升序;部分覆盖也展示,明确标记未完整,不将未采集当零。库存缺失或售罄不阻止进入 | 条目打开同窗口 SKU 趋势;“查看 Top 100”进入销量分析相同 CUSTOM 日期范围 |
|
||||||
| 预计消化时间最长 Top 10 | 有效正可售、正日均、完整窗口及观察资格;按未舍入可售天数降序,SKU/货主编码升序。零销量单列,不冒充无限天数;不等同原 slow-skus 低销量榜 | 条目打开 SKU 趋势;“查看全部”进入库存分析相同有限天数候选及天数降序 |
|
| 预计消化时间最长 Top 10 | 有效正可售、正日均、完整窗口及观察资格;按未舍入可售天数降序,SKU/货主编码升序。零销量单列,不冒充无限天数;不等同原 slow-skus 低销量榜 | 条目打开 SKU 趋势;“查看全部”进入库存分析相同有限天数候选及天数降序 |
|
||||||
| 近 30 日无出库库存 Top 10 | 主方案 attention=NO_OUTBOUND_30D:全品质有效正实物、完整窗口和观察资格、出库零;包含全冻结/次品有实物者。按实物量降序,SKU/货主编码升序 | 条目打开 SKU 趋势;“查看全部”进入库存分析无出库关注及实物量降序 |
|
| 所选时段无出库库存 Top 10 | 主方案 attention=NO_OUTBOUND_IN_WINDOW:全品质有效正实物、完整窗口和观察资格、出库零;包含全冻结/次品有实物者。按实物量降序,SKU/货主编码升序 | 条目打开 SKU 趋势;“查看全部”进入库存分析无出库关注及实物量降序 |
|
||||||
|
|
||||||
排名从全仓所有已授权货主的候选先算资格/排序后截取,不先截 SKU 清单或逐货主各取十个再汇总。观察不足时返回待评估数量;榜单明确是“符合条件的 SKU”,不以没有合格候选推断库存健康。可售天数很长仍是按历史速度的估算,不标成真实库龄或一定卖不掉。
|
排名从全仓所有已授权货主的候选先算资格/排序后截取,不先截 SKU 清单或逐货主各取十个再汇总。观察不足时返回待评估数量;榜单明确是“符合条件的 SKU”,不以没有合格候选推断库存健康。可售天数很长仍是按历史速度的估算,不标成真实库龄或一定卖不掉。
|
||||||
|
|
||||||
@@ -94,10 +94,10 @@ KPI 采用紧凑的一行指标带;图表是主要内容,不再以整页描
|
|||||||
|
|
||||||
| 页面操作 | 承载与行为 | 设计验收 |
|
| 页面操作 | 承载与行为 | 设计验收 |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| 仓库/趋势范围查询 | 同页紧凑 QueryToolbar;查询先校验再更新,切仓清旧数据并取消旧请求 | 不增加独立货主控件,不在主区堆账号键、时区技术值、长规则 |
|
| 仓库/统计范围查询 | 同页紧凑 QueryToolbar;查询先校验再更新,切仓清旧数据并取消旧请求 | 不增加独立货主控件,不在主区堆账号键、时区技术值、长规则 |
|
||||||
| 刷新 | 明确按钮整体更新版本与 queryAsOf;新数据提示不自行替换某张图 | 过期上下文显示刷新提示,不混合版本 |
|
| 刷新 | 明确按钮整体更新版本与 queryAsOf;新数据提示不自行替换某张图 | 过期上下文显示刷新提示,不混合版本 |
|
||||||
| 柱/条与日点提示 | 图内提示,键盘可聚焦查看同等内容;未知日只展示缺口原因 | 不是新业务弹框,不仅靠颜色或悬浮识别数值 |
|
| 柱/条与日点提示 | 图内提示,键盘可聚焦查看同等内容;未知日只展示缺口原因 | 不是新业务弹框,不仅靠颜色或悬浮识别数值 |
|
||||||
| SKU 条目趋势 | 沿用当前 1120px 居中 AppDialog,支持已有全屏/关闭;传该行 customerCode+sku 和上下文,热销使用所选范围,另两个榜固定 30 日范围 | 不改为列表下方详情、抽屉或新详情页;关闭取消请求 |
|
| SKU 条目趋势 | 沿用当前 1120px 居中 AppDialog,支持已有全屏/关闭;传该行 customerCode+sku 和上下文,三个榜单均使用所选范围 | 不改为列表下方详情、抽屉或新详情页;关闭取消请求 |
|
||||||
| 分桶或查看全部 | 导航至既有销量/库存正式页面并带准确筛选、版本和返回来源 | 目标页显示可清除的“来自经营总览”条件摘要,不重新引入货主选择器 |
|
| 分桶或查看全部 | 导航至既有销量/库存正式页面并带准确筛选、版本和返回来源 | 目标页显示可清除的“来自经营总览”条件摘要,不重新引入货主选择器 |
|
||||||
| 查看采集状态 | 导航至所选仓的数据采集页 | 只查看当前状态,不触发采集/重试 |
|
| 查看采集状态 | 导航至所选仓的数据采集页 | 只查看当前状态,不触发采集/重试 |
|
||||||
|
|
||||||
@@ -109,14 +109,14 @@ KPI 采用紧凑的一行指标带;图表是主要内容,不再以整页描
|
|||||||
|
|
||||||
新增 `GET /api/platform/v1/last-leg/self-operated-analytics/dashboard`,前端使用独立 `analyticsApi.dashboard`。现有前端 `overview` 实际调用 `sync-overview`,是采集状态接口,不能用它冒充经营聚合或改掉原语义。
|
新增 `GET /api/platform/v1/last-leg/self-operated-analytics/dashboard`,前端使用独立 `analyticsApi.dashboard`。现有前端 `overview` 实际调用 `sync-overview`,是采集状态接口,不能用它冒充经营聚合或改掉原语义。
|
||||||
|
|
||||||
入参要求 `sourceAccount,warehouseCode`,趋势参数复用 `rangePreset` 和 CUSTOM 的 `startDate,endDate`;不接受 customerCode、SKU、跨仓合并或任意 Top N。首次查询固定主方案中的两版、范围摘要、queryAsOf 及到期时间;后续只切趋势范围复用上下文,显式刷新/切仓重新建立。榜单数量服务端固定 10,消化天数分组固定 V1。
|
入参要求 `sourceAccount,warehouseCode`,趋势参数复用 `rangePreset` 和 CUSTOM 的 `startDate,endDate`;不接受 customerCode、SKU、跨仓合并或任意 Top N。首次查询固定主方案中的两版、范围摘要、queryAsOf 及到期时间;后续切换统计范围复用上下文,显式刷新/切仓重新建立。榜单数量服务端固定 10,消化天数分组固定 V1。
|
||||||
|
|
||||||
在一次短只读一致快照中校验范围/版本并读取所需数据;整个响应共同使用同一上下文,不由前端并发获取多个“最新版本”后拼屏。某一数据族不可用时仅返回该族不可用,不妨碍另一族可用图形;鉴权失败、参数错误、版本无效或 SQL 失败是请求错误,不吞掉后转零或正常空图。
|
在一次短只读一致快照中校验范围/版本并读取所需数据;整个响应共同使用同一上下文,不由前端并发获取多个“最新版本”后拼屏。某一数据族不可用时仅返回该族不可用,不妨碍另一族可用图形;鉴权失败、参数错误、版本无效或 SQL 失败是请求错误,不吞掉后转零或正常空图。
|
||||||
|
|
||||||
| 响应块 | 主要字段与要求 |
|
| 响应块 | 主要字段与要求 |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| `context` | 主方案现有完整版本上下文、实际趋势范围、固定 30 日窗口、salesCoveredFrom/Until、库存观测起止、inventoryFreshUntil、queryExpiresAt,另含 inventoryDrilldownExpiresAt(有效库存时取前两截止时间的较早值,否则不可用);技术字段用于程序,不放主页面占位 |
|
| `context` | 主方案现有完整版本上下文、统一所选范围 rangeStartDate/rangeEndDateExclusive、salesCoveredFrom/Until、库存观测起止、inventoryFreshUntil、queryExpiresAt,另含 inventoryDrilldownExpiresAt(有效库存时取前两截止时间的较早值,否则不可用);技术字段用于程序,不放主页面占位 |
|
||||||
| `kpis` | 六项指标各有 value/knownSubtotal、单位、dataStatus、unknownSkuCount、reasonCodes;区间出库另有正式量/已采集量,日均使用独立完整日窗口 |
|
| `kpis` | 六项指标各有 value/knownSubtotal、单位、dataStatus、unknownSkuCount、reasonCodes;区间出库另有正式量/已采集量,日均 averageDailyOutboundQuantity 与无出库数 noOutboundSkuCount 使用同一所选区间 |
|
||||||
| `salesTrend` | 每日 points 及区间汇总;每点 businessDate、outboundQuantity、observedQuantity、dataStatus、reasonCodes,最多 366 点,日轴不省略缺日 |
|
| `salesTrend` | 每日 points 及区间汇总;每点 businessDate、outboundQuantity、observedQuantity、dataStatus、reasonCodes,最多 366 点,日轴不省略缺日 |
|
||||||
| `coverageDistribution` | bucketRuleVersion、candidateSkuCount、excludedZeroPhysicalSkuCount、各 bucketCode/skuCount、可选已知实物小计/未知数、dataStatus/reasonCodes;分组未知原因有摘要 |
|
| `coverageDistribution` | bucketRuleVersion、candidateSkuCount、excludedZeroPhysicalSkuCount、各 bucketCode/skuCount、可选已知实物小计/未知数、dataStatus/reasonCodes;分组未知原因有摘要 |
|
||||||
| `hotSkus`/`longCoverageSkus`/`noOutboundSkus` | 各自实际窗口(windowStartDate/windowEndDateExclusive/calculationWindowDays)、eligibleCount、unassessableCount、items(最多 10)、dataStatus/reasonCodes;每项包含实际 customerCode+sku、名称、主指标及其单位/必要辅助值,窗口出库字段为windowOutboundQuantity。热销部分覆盖返回PARTIAL与SALES_WINDOW_INCOMPLETE,不返回该部分量推算的日均和消化天数。单点弹框复用原 daily API,不因图形新增另一份销量公式 |
|
| `hotSkus`/`longCoverageSkus`/`noOutboundSkus` | 各自实际窗口(windowStartDate/windowEndDateExclusive/calculationWindowDays)、eligibleCount、unassessableCount、items(最多 10)、dataStatus/reasonCodes;每项包含实际 customerCode+sku、名称、主指标及其单位/必要辅助值,窗口出库字段为windowOutboundQuantity。热销部分覆盖返回PARTIAL与SALES_WINDOW_INCOMPLETE,不返回该部分量推算的日均和消化天数。单点弹框复用原 daily API,不因图形新增另一份销量公式 |
|
||||||
@@ -129,11 +129,11 @@ KPI 采用紧凑的一行指标带;图表是主要内容,不再以整页描
|
|||||||
|
|
||||||
- 通用路由条件:`warehouseCode`、可选精确 `sku,customerCode`(仅行身份,不显示独立货主选择器)、原完整版本上下文、`from=overview`。使用固定本地路由,不接受任意 return URL;编码/日期/枚举非法显式提示,不能静默忽略成全仓查询。
|
- 通用路由条件:`warehouseCode`、可选精确 `sku,customerCode`(仅行身份,不显示独立货主选择器)、原完整版本上下文、`from=overview`。使用固定本地路由,不接受任意 return URL;编码/日期/枚举非法显式提示,不能静默忽略成全仓查询。
|
||||||
- 趋势日点:销量页 `analysis=SKU`、`rangePreset=CUSTOM` 且 startDate=endDate=该日。热销 Top 100:`analysis=HOT,rangePreset=CUSTOM,startDate,endDate`,日期来自榜单窗口(endDate 为 exclusive 截止前一日),不再携带 windowDays。这两个路由枚举是新增初始化合同,开发映射到现有页面状态,不能原样当作新的外部 API 字段。dashboard 的 eligibleCount 是当前已采集有效正出库候选数,热销明细沿用原 Top 100 上限,故 total=min(eligibleCount,100),前 10 名及主值必须一致;不扩展成无限热销榜。
|
- 趋势日点:销量页 `analysis=SKU`、`rangePreset=CUSTOM` 且 startDate=endDate=该日。热销 Top 100:`analysis=HOT,rangePreset=CUSTOM,startDate,endDate`,日期来自榜单窗口(endDate 为 exclusive 截止前一日),不再携带 windowDays。这两个路由枚举是新增初始化合同,开发映射到现有页面状态,不能原样当作新的外部 API 字段。dashboard 的 eligibleCount 是当前已采集有效正出库候选数,热销明细沿用原 Top 100 上限,故 total=min(eligibleCount,100),前 10 名及主值必须一致;不扩展成无限热销榜。
|
||||||
- 无出库全部:库存页 `attention=NO_OUTBOUND_30D,sortBy=PHYSICAL_DESC`。最长可售全部:`/inventory-coverage` 和路由均新增 `coverageSelection=FINITE_POSITIVE`,在服务端 SQL 分页前过滤为正式有限正可售天数候选,`sortBy=COVERAGE_DAYS_DESC`;不能仅在浏览器当前页过滤,也不能把零库存、未知天数放进候选冒充同一榜单。该字段属于本地报表接口,不传领星。
|
- 无出库全部:库存页 `attention=NO_OUTBOUND_IN_WINDOW,sortBy=PHYSICAL_DESC`。最长可售全部:`/inventory-coverage` 和路由均新增 `coverageSelection=FINITE_POSITIVE`,在服务端 SQL 分页前过滤为正式有限正可售天数候选,`sortBy=COVERAGE_DAYS_DESC`;不能仅在浏览器当前页过滤,也不能把零库存、未知天数放进候选冒充同一榜单。该字段属于本地报表接口,不传领星。
|
||||||
- 分布条形:库存页新增 `coverageBucket` 与 `bucketRuleVersion=COVERAGE_DISTRIBUTION_V1`。服务端 `/inventory-coverage` 同步接收并按上述唯一分组谓词过滤;不能把区间点击近似替换成 attention 或一个“大于”阈值。coverageBucket 与 coverageSelection、非 ALL attention 互斥,冲突拒绝;未带 bucket 时不接收单独 ruleVersion。FINITE_POSITIVE 与非 ALL attention 也互斥。
|
- 分布条形:库存页新增 `coverageBucket` 与 `bucketRuleVersion=COVERAGE_DISTRIBUTION_V1`。服务端 `/inventory-coverage` 同步接收并按上述唯一分组谓词过滤;不能把区间点击近似替换成 attention 或一个“大于”阈值。coverageBucket 与 coverageSelection、非 ALL attention 互斥,冲突拒绝;未带 bucket 时不接收单独 ruleVersion。FINITE_POSITIVE 与非 ALL attention 也互斥。
|
||||||
- 日点、整榜、分桶或具体 SKU 下钻均携带同一版本上下文;条件 chip 可清除,清除后恢复目标页常规范围,但不更换仍有效的上下文。返回总览恢复原仓库、趋势范围、上下文及滚动位置;到期或版本不可用时提示整体刷新,不能悄悄换新后声称与原图一致。
|
- 日点、整榜、分桶或具体 SKU 下钻均携带同一版本上下文;条件 chip 可清除,清除后恢复目标页常规范围,但不更换仍有效的上下文。返回总览恢复原仓库、趋势范围、上下文及滚动位置;到期或版本不可用时提示整体刷新,不能悄悄换新后声称与原图一致。
|
||||||
|
|
||||||
库存严格下钻额外携带 `drilldownFrom=DASHBOARD` 给 `/inventory-coverage`,用于声明与原图一致的读取要求,不授予额外权限;from=overview 的目标页必须映射此参数。服务端从原上下文及库存 run 的真实时效重新计算 inventoryDrilldownExpiresAt,不信任客户端传入的截止时间。库存已超过有效期或上下文到期时返回明确的“原图库存已过期,请刷新总览”错误,不能按过期后的 UNKNOWN 重新分桶再冒充原图结果;前端同时禁用原库存图的分桶/榜单列表下钻。此时趋势与热销的有效读取仍可继续,普通库存页的历史/过期展示保持原规则;重新加载的过期总览仅提供普通库存诊断入口,不提供严格分桶下钻。单条 SKU 的出库趋势不受库存过期阻断。
|
库存严格下钻从原图 context 提取起止日期,向 `/inventory-coverage` 携带 `drilldownFrom=DASHBOARD,rangePreset=CUSTOM,startDate,endDate`(endDate 含当日),不携带 salesWindowDays/salesWindowEndDate。普通库存明细仍使用独立的 10/30 日选择;同一无出库关注与区间出库排序按实际窗口计算。严格下钻标志用于声明与原图一致的读取要求,不授予额外权限;from=overview 的目标页必须映射此参数。服务端从原上下文及库存 run 的真实时效重新计算 inventoryDrilldownExpiresAt,不信任客户端传入的截止时间。库存已超过有效期或上下文到期时返回明确的“原图库存已过期,请刷新总览”错误,不能按过期后的 UNKNOWN 重新分桶再冒充原图结果;前端同时禁用原库存图的分桶/榜单列表下钻。此时趋势与热销的有效读取仍可继续,普通库存页的历史/过期展示保持原规则;重新加载的过期总览仅提供普通库存诊断入口,不提供严格分桶下钻。单条 SKU 的出库趋势不受库存过期阻断。
|
||||||
|
|
||||||
## 数据模型与查询性能
|
## 数据模型与查询性能
|
||||||
|
|
||||||
@@ -153,10 +153,10 @@ KPI 采用紧凑的一行指标带;图表是主要内容,不再以整页描
|
|||||||
|
|
||||||
| 用例 | 必须得到的结果 |
|
| 用例 | 必须得到的结果 |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| 近 15 天含今日,另选今日/本周/本月/CUSTOM | 趋势轴、区间出库与热销榜随选择变化,另两榜/分布/日均仍固定 30 日;今日单点无小时数据 |
|
| 近 15 天含今日,另选今日/本周/本月/CUSTOM | 趋势轴、区间出库、日均、分布和三个榜单均随选择变化;含今日或缺日时保留待评估,不填零;今日单点无小时数据 |
|
||||||
| 日量 2、未知、5,今日部分 1 | 可靠值合计 8 标已采集,正式总量为空;缺日断线,今日部分;全未知合计为空,不为 0 |
|
| 日量 2、未知、5,今日部分 1 | 可靠值合计 8 标已采集,正式总量为空;缺日断线,今日部分;全未知合计为空,不为 0 |
|
||||||
| 同仓 SKU X 属货主 A 出库 2、B 出库 5,均有效 | 全仓对应日为 7;榜单与点击身份保留两条,下钻分别为 2/5 |
|
| 同仓 SKU X 属货主 A 出库 2、B 出库 5,均有效 | 全仓对应日为 7;榜单与点击身份保留两条,下钻分别为 2/5 |
|
||||||
| 库存缺失但完整 30 日热销数据存在 | 日均、趋势、热销可用,依赖库存的图形显示未就绪,不让库存失败清空销售 |
|
| 库存缺失但所选区间完整销量数据存在 | 日均、趋势、热销可用,依赖库存的图形显示未就绪,不让库存失败清空销售 |
|
||||||
| A 正可售 3000、30 日出库 300;B 正可售 30、出库 30 | A 可售 300、B 30,分别归 >90 和 (0,30],最长榜 A 在前;不按低销量将 B 当更积压 |
|
| A 正可售 3000、30 日出库 300;B 正可售 30、出库 30 | A 可售 300、B 30,分别归 >90 和 (0,30],最长榜 A 在前;不按低销量将 B 当更积压 |
|
||||||
| 候选 5 个:有效正可售零出库、全冻结且零出库、库存未知、有效天数 30、有效天数 30.04;再有明确零实物 1 个 | 分别落无出库/无可售/待核验/(0,30]/(30,60];桶合计 5、排除数 1;冻结 SKU 仍能进入独立无出库库存榜 |
|
| 候选 5 个:有效正可售零出库、全冻结且零出库、库存未知、有效天数 30、有效天数 30.04;再有明确零实物 1 个 | 分别落无出库/无可售/待核验/(0,30]/(30,60];桶合计 5、排除数 1;冻结 SKU 仍能进入独立无出库库存榜 |
|
||||||
| 正品实物 120 含冻结 20,可售 100;次品实物 8,在途 30 | 实物 128、可售 100,不相加为 278;图中不出现这几个重叠量的库存组成饼图 |
|
| 正品实物 120 含冻结 20,可售 100;次品实物 8,在途 30 | 实物 128、可售 100,不相加为 278;图中不出现这几个重叠量的库存组成饼图 |
|
||||||
@@ -167,7 +167,7 @@ KPI 采用紧凑的一行指标带;图表是主要内容,不再以整页描
|
|||||||
| 同一版本和 30 分钟上下文仍有效,但库存先到 freshUntil,再点击原分桶/库存榜单 | 前端阻止旧图严格下钻,服务端同样拒绝,不返回改变分类的结果冒充一致;要求刷新总览,出库趋势/热销仍按其独立资格读取 |
|
| 同一版本和 30 分钟上下文仍有效,但库存先到 freshUntil,再点击原分桶/库存榜单 | 前端阻止旧图严格下钻,服务端同样拒绝,不返回改变分类的结果冒充一致;要求刷新总览,出库趋势/热销仍按其独立资格读取 |
|
||||||
| dashboard 或路由参数缺仓、非法桶、互斥参数冲突、客户身份调用 | 明确拒绝,不能悄悄全仓查询;平台鉴权和来源范围校验不因汇总而弱化 |
|
| dashboard 或路由参数缺仓、非法桶、互斥参数冲突、客户身份调用 | 明确拒绝,不能悄悄全仓查询;平台鉴权和来源范围校验不因汇总而弱化 |
|
||||||
|
|
||||||
设计评审收口项:SKU 中心与现有页面一致;两套窗口分开;分布互斥且守恒;零出库与有限天数分开;全品质实物不重叠相加;未知不隐藏;下钻需要真实参数接线和共用谓词;新增聚合接口与运行概览分开。评审不覆盖生产吞吐、真实数据对账或人工视觉验收。
|
设计评审收口项:SKU 中心与现有页面一致;总览及下钻统一所选区间;分布互斥且守恒;零出库与有限天数分开;全品质实物不重叠相加;未知不隐藏;下钻需要真实参数接线和共用谓词;新增聚合接口与运行概览分开。评审不覆盖生产吞吐、真实数据对账或人工视觉验收。
|
||||||
|
|
||||||
本轮已分别完成数据口径、页面/接口两项独立评审,并复核修正后的合同:补齐仓级部分日零值规则、库存时效先于查询上下文到期的严格下钻门禁,以及热销完整候选数与原 Top 100 上限的区别。设计范围内无剩余阻塞,可交开发总控安排;不把该结论作为代码、性能或视觉验收通过。
|
本轮已分别完成数据口径、页面/接口两项独立评审,并复核修正后的合同:补齐仓级部分日零值规则、库存时效先于查询上下文到期的严格下钻门禁,以及热销完整候选数与原 Top 100 上限的区别。设计范围内无剩余阻塞,可交开发总控安排;不把该结论作为代码、性能或视觉验收通过。
|
||||||
|
|
||||||
|
|||||||
+22
-4
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
接口体系为领星 WMS 管理后台的“自研系统/服务商内部系统对接”,官方文档站为 OMP。不要换成 OMS 货主端或 WMS 智能设备的路径和签名。
|
接口体系为领星 WMS 管理后台的“自研系统/服务商内部系统对接”,官方文档站为 OMP。不要换成 OMS 货主端或 WMS 智能设备的路径和签名。
|
||||||
|
|
||||||
**当前执行边界:首次正式历史采集改为最近 2 个月,放在生产执行;测试只做有硬上限的小样本。** 同一真实账号由一个环境独占,测试不能与生产并行请求;默认最多累计 10 次分页、20 次详情、40 次总 HTTP 及 5 分钟,任一上限即停止,预算含复核及失败请求。详细边界与用途隔离以[生产首采与测试请求边界](领星一件代发数据统计一期方案.md#生产首采与测试请求边界)为准。下文此前一个月样本、全库存扫描及重读均是历史联调证据,不是现在要求测试环境重复执行的步骤;本轮未发起新请求。
|
**当前执行边界与数量来源**以[一期方案](领星一件代发数据统计一期方案.md)的持续 BUSINESS 自动采集及“出库件数”规则为准。2026-10-14 用户确认列表优先、仅缺商品行/SKU/数量的具体订单补详情;本手册下文数量对照是历史验证依据,不再是采用列表数量的前置门禁,也不表示已经证明列表量与实际量始终相等。历史 TEST 小样本次数及时间限制只对应当次 VALIDATION,不覆盖已授权持续 BUSINESS。实际部署、采集及验收状态只看[测试环境主契约](../测试环境单机部署与配置契约.md)。
|
||||||
|
|
||||||
**时间口径已确认:2026-10-12 用户说明领星返回时间已转换为北京时间。** 本期两个仓库均按 `Asia/Shanghai` 解析出库时间和统计日期,直接使用有效返回日期;查询 `startTime/endTime` 同样按北京时间传参。不要再按洛杉矶、纽约或仓库资料中的 `timeZone` 二次转换。08:00/20:00 出库同步、建议的每日 08:00 库存同步及五种图表自然周期均采用北京时间;分仓任务、覆盖与时效继续独立。
|
**时间口径已确认:2026-10-12 用户说明领星返回时间已转换为北京时间。** 本期两个仓库均按 `Asia/Shanghai` 解析出库时间和统计日期,直接使用有效返回日期;查询 `startTime/endTime` 同样按北京时间传参。不要再按洛杉矶、纽约或仓库资料中的 `timeZone` 二次转换。08:00/20:00 出库同步、建议的每日 08:00 库存同步及五种图表自然周期均采用北京时间;分仓任务、覆盖与时效继续独立。
|
||||||
|
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
| 一件代发单的实际 SKU 明细 | `POST /openapi/v2/order/delivery/detail` | `data` | 已有内部详情接口及 SKU 数量 DTO 源码;外部接口已直接 HTTP 联调 |
|
| 一件代发单的实际 SKU 明细 | `POST /openapi/v2/order/delivery/detail` | `data` | 已有内部详情接口及 SKU 数量 DTO 源码;外部接口已直接 HTTP 联调 |
|
||||||
| 产品库存 | `POST /openapi/v2/stock/stockSku/page` | `data.records[]` | 已有内部产品库存接口源码;外部接口已直接 HTTP 联调 |
|
| 产品库存 | `POST /openapi/v2/stock/stockSku/page` | `data.records[]` | 已有内部产品库存接口源码;外部接口已直接 HTTP 联调 |
|
||||||
|
|
||||||
当前 Java 已有五个内部 POST 入口,共用 `/internal/integrations/lingxing/wms` 前缀并要求内部服务令牌:`/warehouses/query`、`/outbound-orders/query`、`/outbound-orders/locate`、`/outbound-orders/detail`、`/product-inventory/query`。出库发现接口返回单据摘要,实际 SKU 数量须通过详情接口获取;不能把摘要当作完整明细。接口职责和字段见[一期方案的接口约定](领星一件代发数据统计一期方案.md#平台查询接口和权限建议)。本轮只核对源码,不把外部直接 HTTP 联调成功推定为这五个 Java 入口已全部运行验收。[本地启动说明](../../baiyue-firstleg/integration-service/README.md)
|
当前 Java 已有五个内部 POST 入口,共用 `/internal/integrations/lingxing/wms` 前缀并要求内部服务令牌:`/warehouses/query`、`/outbound-orders/query`、`/outbound-orders/locate`、`/outbound-orders/detail`、`/product-inventory/query`。出库发现与按单定位接口同时传递 `productList[].productSku/productName/qty`;列表字段完整时直接用于统计,缺项时才补该单详情,数量为零不属于缺项。接口职责和字段见[一期方案的接口约定](领星一件代发数据统计一期方案.md#平台查询接口和权限建议)。外部直接 HTTP 联调或源码核对不代表 Java 入口已运行验收。[本地启动说明](../../baiyue-firstleg/integration-service/README.md)
|
||||||
|
|
||||||
## 认证和请求格式
|
## 认证和请求格式
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ var signed = signer.sign(appKey, appSecret,
|
|||||||
|
|
||||||
正式任务按已确认账号全集读取,不传 `customerCodes`。用户已确认当前可见全部 70 个货主、2 个仓库均为自营统计范围,货主数量不作为硬编码上限。若后续加入货主子集筛选,应先实测该字符串参数,不能依据复数名称自行发送 JSON 数组。
|
正式任务按已确认账号全集读取,不传 `customerCodes`。用户已确认当前可见全部 70 个货主、2 个仓库均为自营统计范围,货主数量不作为硬编码上限。若后续加入货主子集筛选,应先实测该字符串参数,不能依据复数名称自行发送 JSON 数组。
|
||||||
|
|
||||||
目录保留 `deliveryNo`、`sourceNo`、`customerCode`、`whCode`、`status`、`createTime`、`outboundTime`。`productList[].qty` 不直接作为正式实际出库量;本期明细统一来自详情。
|
目录保留 `deliveryNo`、`sourceNo`、`customerCode`、`whCode`、`status`、`createTime`、`outboundTime`,并保留商品列表的 SKU、名称与 `qty`;统计取值按一期方案“出库件数”的列表优先规则执行。
|
||||||
|
|
||||||
## 一件代发出库详情
|
## 一件代发出库详情
|
||||||
|
|
||||||
@@ -140,12 +140,30 @@ var signed = signer.sign(appKey, appSecret,
|
|||||||
- 同时查询已出库状态100、商品实际量为0的候选,结果为空;不能据此推断所有订单预报量等于实际量。
|
- 同时查询已出库状态100、商品实际量为0的候选,结果为空;不能据此推断所有订单预报量等于实际量。
|
||||||
- Integration 列表映射只保留订单头,不返回 `productList[].qty`。所以当前库不能直接筛选预报/实出差异,现有内部列表接口也不能完成三值对照。当前检索结果是“缺比较字段”,不是“已证明一致”。
|
- Integration 列表映射只保留订单头,不返回 `productList[].qty`。所以当前库不能直接筛选预报/实出差异,现有内部列表接口也不能完成三值对照。当前检索结果是“缺比较字段”,不是“已证明一致”。
|
||||||
|
|
||||||
下一步最小验证应优先附着正常采集已经收到的响应,采集少量白名单对照证据:同一账号、仓库、货主、出库单、SKU 的列表 `qty`、详情 `deliveryQty`、详情 `actualDeliveryQty`,订单状态/出库时间及列表、详情观测时间。按同 SKU 汇总后比较,同时核对 SKU 集合完整性。最多保留100个完整配对订单或首次出现差异即停止;不额外创建历史采集,不输出面单、收件信息、签名或凭据。该诊断需要开发总控协调列表字段与预报量的有限保留,当前尚未实施。
|
下一步最小验证应优先附着正常采集已经收到的响应,采集少量白名单对照证据:同一账号、仓库、货主、出库单、SKU 的列表 `qty`、详情 `deliveryQty`、详情 `actualDeliveryQty`,订单状态/出库时间及列表、详情观测时间。按同 SKU 汇总后比较,同时核对 SKU 集合完整性。一次授权累计最多选择100个 LIST 候选,缺失配对不补选;首次三值任一已知差异、未知量或 SKU 集合不一致即停止诊断。不额外创建历史采集,不输出面单、收件信息、签名或凭据。当前有界诊断实现及发布边界见下节。
|
||||||
|
|
||||||
命中预报量不等于实际量时,优先使用同次配对的列表证据;若列表/详情时点相差或订单被修订,则仅针对该订单在现有账号预算和统一出口内最多补一次列表与一次详情核验,限流即停止。已保存匹配证据不重新请求。
|
命中预报量不等于实际量时,优先使用同次配对的列表证据;若列表/详情时点相差或订单被修订,则仅针对该订单在现有账号预算和统一出口内最多补一次列表与一次详情核验,限流即停止。已保存匹配证据不重新请求。
|
||||||
|
|
||||||
验收判定:列表量等于预报且不等于实际量,可否定“列表直接替代实际量”;列表量等于实际量且不等于预报,只证明该差异样本支持替代方向,还需确认 SKU 完整性、修订与取消边界;三值相同不能区分语义。未取得差异样本时明确保留未验证,不停用详情链路。
|
验收判定:列表量等于预报且不等于实际量,可否定“列表直接替代实际量”;列表量等于实际量且不等于预报,只证明该差异样本支持替代方向,还需确认 SKU 完整性、修订与取消边界;三值相同不能区分语义。未取得差异样本时明确保留未验证,不停用详情链路。
|
||||||
|
|
||||||
|
### 下一自动 root 的一次性有界诊断
|
||||||
|
|
||||||
|
当前实现通过 Lastleg 内部 `quantity-diagnostics/arm、status、observe、stop` 管理单次授权,四个入口均校验内部服务令牌,不经 Gateway 公开。旧固定 root/30 分钟配置及 `/orders` 协议已替换,Integration、Lastleg 必须成对更新。默认两端诊断开关关闭;完成契约核验后才能显式 arm,不因重启、会话终止或 root 切换自动重新授权。
|
||||||
|
|
||||||
|
- `arm` 冻结诊断 ID、账号、允许仓库、货主及当时实际当前自动 root。客户端传入的排除 root 必须与服务端只读查询一致;当前没有已开始且未结束的自动 root 时传空,发现多个则拒绝。已结束的历史 root 不能冒充当前 root。
|
||||||
|
- 最多等待 6 小时,接收时刻及原始 LIST 观测时刻均须在绑定截止前。只绑定随后正常 `OUTBOUND_QUERY` 的自动历史出库 root,排除 LOCATE、DETAIL 首绑定、验证与手工任务。root 可以提前规划,不能用创建时间晚于授权作为条件。账号、root 自动属性和 `selfop-<root>` 会话由服务端核验,延迟回调不依赖已经清除的瞬时 permit。
|
||||||
|
- 采样开始取首次 LIST 原始 `observedAt`,最多再采 4 小时,同时绝不晚于授权后 10 小时;网络延迟、重试和排空均不顺延。会话终态不自动绑定下一个 root。
|
||||||
|
- 同一会话在诊断行锁内串行选择累计最多 100 个候选。唯一业务键为账号、仓库、货主、出库单;LIST 先存入独立 pending 表,DETAIL 再与首次 LIST 配对。未选中的 early DETAIL 忽略;两侧原始时间、attempt、SKU 数量保持不变。相同规范载荷重传幂等,包含终态重传;新 attempt 或改写载荷不能覆盖首次证据。
|
||||||
|
- 新授权的持久证据将数量编码为无指数、去除尾零的十进制字符串,读取时严格恢复 BigDecimal;哈希、字节额度与重复比较使用同一规范编码,避免数据库 JSON 数字归一化造成精度损失。未知仍为 null,负数拒绝。此编码只用于诊断存储,外部回调仍传数值并精确解析;JSON 列及历史证据不变,不增加旧数值证据读取分支。
|
||||||
|
- pending 与最终配对共同累计最多 2000 个保留 SKU 行、2 MiB 规范证据(含配对包装预留),提升为最终证据不返还额度,不通过删除或换候选重新获得预算。未知量或 SKU 不齐为 `INCONCLUSIVE`;三值任意已知差异为 `QUANTITY_DIFFERENCE`,与证据同事务关闭诊断。100 个完整配对且无观察丢失才为 `COMPLETED`,全相等也不证明列表与实际量语义一致。
|
||||||
|
- 接收线性化点为 Lastleg 会话锁下持久化成功;Integration 本地入队不算已接收。root 结束进入 `DRAINING`,禁止新 LIST 候选,只排空已选候选的在途 DETAIL。Integration 停止入队、依次发送已入队观察后,才提交 drained 确认。少于 100 个完整配对明确为 `ROOT_ENDED_INSUFFICIENT`;有未配对或观察可能丢失则为 `INCOMPLETE`;硬截止始终优先。
|
||||||
|
- Integration 重启可从持久候选恢复,但未持久化的内存尾部不可证明无损,因此替换 producer 会设置 `deliveryUncertain`,旧 producer 被隔离,最终不能报完整成功。回调不可用、队列满或诊断失败只关闭诊断,不影响正常采集返回,不补发领星请求。
|
||||||
|
- 正常出口线程只做有界白名单快照和 `tryLock` 入队,不解析/序列化整个原始响应,不等待诊断 HTTP。队列最多100项、2000行和2 MiB保守内存记账;独立单工作线程发送。Lastleg 在获取连接前非等待准入,诊断专用池最多1条连接、借用超时250ms,事务3秒及语句2秒限制;初始化失败只让诊断 API 不可用,不阻止业务服务启动,也不关闭主池。请求/响应均流式限制262144字节。
|
||||||
|
|
||||||
|
配置只保留 Integration 的 `quantity-capture.enabled/source-account`,以及 Lastleg 的 `quantity-diagnostics.enabled/source-account/warehouse-codes`。这些是启动时配置,不具备热启用能力;若以 enabled=false 启动,之后改配置不能直接 arm,需重新加载对应进程。本轮总控选择一次成对发布:旧版本窗口已过期且无在途诊断作为变更前停止证据;新版本以能力 enabled=true、无新授权启动,核验带内部令牌的 status 返回 null、active_slot 无活动且 pending 为空,再释放维护、显式 arm。未授权时观察器不接收或留存样本,只查询内部授权状态。不做 OFF→ON 二次重启,也不得把“未授权”与“配置关闭”混称。授权参数与时限留在诊断会话,不通过修改 Nacos、重启或每次 root 发布代码重新启用。源 DDL 为 `lastleg-service/src/main/resources/db/selfop-quantity-diagnostics.sql`:原会话表、配对表以及一张 pending 表,只写诊断证据,不改业务表。该文件是最终空库结构基线,不自动执行。已有表只需会话表增加 `active_slot/state_json` 两个可空字段及活动授权唯一索引,root/session标识允许授权未绑定时为空,另建 pending 表;原配对表结构和全部已有证据保留。原 `stop_reason/accepted_orders/accepted_sku_rows/accepted_bytes` 列仍为终态及计数的唯一事实来源,根标识、开始与截止也使用原列;`state_json` 只补授权范围、绑定截止、producer、候选数、root结束及丢失标记,不另存一份终态或计数。历史会话 `state_json` 为空,不参与新授权协议,不能复用旧 ID arm;不回填、不改写旧证据。发布前由负责发布者先只读导出并核对原证据哈希,再逐项审查已有表的必要 ALTER,不在同名表上运行整份 CREATE,也不执行 DROP。
|
||||||
|
|
||||||
|
本地合成测试只证明边界实现;没有执行环境 SQL、发布、arm 或真实取样,不能据此宣称已取得新样本、诊断无物理开销或列表量可替代详情实际量。1200ms 出口间隔、原采集任务、统计来源及业务表保持原逻辑。
|
||||||
|
|
||||||
### 数量对照验证的采集保护与开发交接
|
### 数量对照验证的采集保护与开发交接
|
||||||
|
|
||||||
2026-10-13 用户指定已有对话 [开启新对话](codex://threads/01a135d0-f5c7-7422-892f-037b0c9ea00e) 实施本次有界验证,要求不影响采集。仅接管数量对照与所需只读状态判断,不恢复其他对话已暂停的开发、服务或采集。业务销量继续以详情实际量为准;验证通过前不切换统计来源。
|
2026-10-13 用户指定已有对话 [开启新对话](codex://threads/01a135d0-f5c7-7422-892f-037b0c9ea00e) 实施本次有界验证,要求不影响采集。仅接管数量对照与所需只读状态判断,不恢复其他对话已暂停的开发、服务或采集。业务销量继续以详情实际量为准;验证通过前不切换统计来源。
|
||||||
|
|||||||
+19
-11
@@ -14,10 +14,18 @@ Lastleg `baiyue.self-operated-analytics.continuous-business-collection-enabled`
|
|||||||
|
|
||||||
BUSINESS 的 `budgetDate` 随北京时间跨日更新,但 `reservedHttp/confirmedHttp` 保留累计值,不将新日期误解为当日新增次数或零点清零;根计数同样累计。有限 VALIDATION 日额度按原日边界换日,冷却、暂停和未确认 pending 跨日保留。查询和页面对 BUSINESS 显示累计请求消耗,不能按该日期把累计量标为当日消耗。
|
BUSINESS 的 `budgetDate` 随北京时间跨日更新,但 `reservedHttp/confirmedHttp` 保留累计值,不将新日期误解为当日新增次数或零点清零;根计数同样累计。有限 VALIDATION 日额度按原日边界换日,冷却、暂停和未确认 pending 跨日保留。查询和页面对 BUSINESS 显示累计请求消耗,不能按该日期把累计量标为当日消耗。
|
||||||
|
|
||||||
|
持续 BUSINESS 库存扫描在收到完整响应后遇到重复库存键、扫描唯一条数不符或分页总数变化,可按 `maxAttempts` 限制失败次数并指数退避重试(首次10秒,上限1小时);主动让出不计失败。每次失败保留原尝试证据并清空分页检查点,新尝试从第一页完整读取,以新批次隔离失败数据,禁止去重补齐或拼接后发布。达到上限转 DEAD 并清空下次重试时间;已有 DEAD 不自动复活。该例外不放开出库任务、鉴权、限流、身份错误、未知响应、传输结果未知及账号暂停保护。重试保留原定时任务和计划日;已开始执行的库存任务可在次日继续到期重试或中断续跑,仍受原失败次数、任务终态和出口保护约束;尚未开始的历史计划不补跑。只有同计划日成功的合格观测可成为日代表,跨日重试仍可更新当前库存但不能回填历史日样本。
|
||||||
|
|
||||||
|
平台授权人员显式恢复持续计划任务时,沿现有 `POST sync-tasks` 的 `RETRY`、独立 sync 权限和幂等审计。TEST 在持续 BUSINESS 开关开启且持久化计划身份严格匹配时允许恢复,不能继续按旧的“仅人工根”条件拒绝;开关关闭、旧定时槽位或伪造计划身份仍拒绝。恢复沿用原任务、计划日期和请求计数,不把计划任务改成手工补采,也不跳过原业务停止原因、冷却、租约及执行保护。
|
||||||
|
|
||||||
发布必须先确认旧 cutover 的固定版本部署及续接状态,再在自然日完成、两仓发布、无活动根/未完成出口请求的边界,由总控指定准确候选提交和发布操作。两服务新代码部署并验证后,配对配置再显式开启,避免新旧代码混用;旧本机 helper 只读,未经核对和明确指令不得修改、停止或与其并行发布。发布完成不等于真实验收通过。
|
发布必须先确认旧 cutover 的固定版本部署及续接状态,再在自然日完成、两仓发布、无活动根/未完成出口请求的边界,由总控指定准确候选提交和发布操作。两服务新代码部署并验证后,配对配置再显式开启,避免新旧代码混用;旧本机 helper 只读,未经核对和明确指令不得修改、停止或与其并行发布。发布完成不等于真实验收通过。
|
||||||
|
|
||||||
验收分别提供代码门禁、实际镜像与配对配置、真实 HTTP/任务池证据:完整日期集合、无重复或漏日、已完成日不重采、每日 00:05 与优先顺序、旧截止过去仍有效持续、重启续跑和出口保护。两仓完成与独立完整日覆盖按原发布条件证明;库存观测不倒推历史、未采日不填零。危险的 429/鉴权/fence/未知响应分支用离线定向测试证明,不为验收主动制造供应商限流或破坏真实任务。
|
验收分别提供代码门禁、实际镜像与配对配置、真实 HTTP/任务池证据:完整日期集合、无重复或漏日、已完成日不重采、每日 00:05 与优先顺序、旧截止过去仍有效持续、重启续跑和出口保护。两仓完成与独立完整日覆盖按原发布条件证明;库存观测不倒推历史、未采日不填零。危险的 429/鉴权/fence/未知响应分支用离线定向测试证明,不为验收主动制造供应商限流或破坏真实任务。
|
||||||
|
|
||||||
|
库存全量扫描使用独立配置 `baiyue.self-operated-analytics.inventory-page-size`,默认 1000,允许 1~1000;出库目录仍使用 `page-size`,默认 100。库存不再受出库页大小限制,以减少分页请求和完整扫描耗时;账号统一 1200ms 间隔、全仓全货主全品质及零库存保留规则不变。大页不等于稳定快照,跨页重复、总数变化及唯一键计数校验仍必须通过,失败不能去重后发布。
|
||||||
|
|
||||||
|
显式重试持续库存任务时,若原计划身份有效、持久化停止原因为空,且最近一次真实尝试仅因重复键、总数变化或唯一键计数失败,可恢复原 DEAD 根并在同一事务创建重试审计。不能把这种扫描失败自动写成整个会话已停止;恢复前后计划日、失败尝试和请求计数保留。已有持久化停止原因、限流、鉴权和结果未知仍拒绝;被拒绝的恢复命令不新增会话停止原因。此项运行是否生效见工程主契约,不以源码测试代替真实恢复验收。
|
||||||
|
|
||||||
## 库存周转视图新增范围(2026-10-13)
|
## 库存周转视图新增范围(2026-10-13)
|
||||||
|
|
||||||
用户要求收集开发讨论并交总控开发“库存周转”,新增视图、接口、指标与验收以[库存周转视图设计](库存周转视图设计.md)为唯一维护入口:库存分析普通进入默认该视图,7/15/30 个完整日出库同屏,SKU 默认、货主汇总可选;原库存明细 10/30 天查询及总览严格下钻保持明确入口。此处仅允许新视图的货主汇总,不恢复销量分析或经营总览的独立货主控件。
|
用户要求收集开发讨论并交总控开发“库存周转”,新增视图、接口、指标与验收以[库存周转视图设计](库存周转视图设计.md)为唯一维护入口:库存分析普通进入默认该视图,7/15/30 个完整日出库同屏,SKU 默认、货主汇总可选;原库存明细 10/30 天查询及总览严格下钻保持明确入口。此处仅允许新视图的货主汇总,不恢复销量分析或经营总览的独立货主控件。
|
||||||
@@ -146,7 +154,7 @@ OMP 的 `customerCode` 是外部货主编码,必须保存,不创建虚构客
|
|||||||
| 出库明细 | `POST /openapi/v2/order/delivery/detail` | 从列表带入 `deliveryNo`、`customerCode`、`whCode`;以 `skuVOList.productSku` 与 `actualDeliveryQty` 核对实际出库量,`deliveryQty` 为预报量。见[出库详情](https://apidoc-omp.xlwms.com/reference/post_openapi-v2-order-delivery-detail-1) |
|
| 出库明细 | `POST /openapi/v2/order/delivery/detail` | 从列表带入 `deliveryNo`、`customerCode`、`whCode`;以 `skuVOList.productSku` 与 `actualDeliveryQty` 核对实际出库量,`deliveryQty` 为预报量。见[出库详情](https://apidoc-omp.xlwms.com/reference/post_openapi-v2-order-delivery-detail-1) |
|
||||||
| 当前产品库存 | `POST /openapi/v2/stock/stockSku/page` | 全量不传品质过滤、`isHideInventory=0`;保存 `stkQty` 实物、`freezeQty` 冻结、`useStkQty` 可用、`transitQty` 在途。计算可售量时只取 `productQuality=0` 正品。见[产品库存](https://apidoc-omp.xlwms.com/reference/post_openapi-v2-stock-stocksku-page-1) |
|
| 当前产品库存 | `POST /openapi/v2/stock/stockSku/page` | 全量不传品质过滤、`isHideInventory=0`;保存 `stkQty` 实物、`freezeQty` 冻结、`useStkQty` 可用、`transitQty` 在途。计算可售量时只取 `productQuality=0` 正品。见[产品库存](https://apidoc-omp.xlwms.com/reference/post_openapi-v2-stock-stocksku-page-1) |
|
||||||
|
|
||||||
出库列表分页使用 `current`、`size`,默认每页 10 条、最大 1000 条;可用 `customerCodes` 筛货主,公开入参没有 `whCode`。账号发现完成后根据返回 `whCode` 分仓,记录每仓应处理的目录集合与详情完成情况;只有共享目录窗口完整且该仓所需详情完整,才推进该仓覆盖。不能把某页未出现某仓解释为该仓该窗口零出库。返回时间按用户确认的北京时间解释;其他仓/时间类型的边界和查询窗口限制仍需核验。当前已出库单样本验证起点、终点均包含,具体条件见手册,不能从其他产品接口搬用约束。
|
出库列表分页使用 `current`、`size`,默认每页 10 条、最大 1000 条;可用 `customerCodes` 筛货主,公开入参没有 `whCode`。账号发现完成后根据返回 `whCode` 分仓,记录每仓应处理的目录集合与订单数量完成情况;只有共享目录窗口完整且该仓所需订单数量完整,才推进该仓覆盖。不能把某页未出现某仓解释为该仓该窗口零出库。返回时间按用户确认的北京时间解释;其他仓/时间类型的边界和查询窗口限制仍需核验。当前已出库单样本验证起点、终点均包含,具体条件见手册,不能从其他产品接口搬用约束。
|
||||||
|
|
||||||
### 最小字段映射
|
### 最小字段映射
|
||||||
|
|
||||||
@@ -155,7 +163,7 @@ OMP 的 `customerCode` 是外部货主编码,必须保存,不创建虚构客
|
|||||||
| 出库单标识 | 来源账号+货主 `customerCode`+`deliveryNo`;另存 `sourceNo` 供业务展示和对照,不把两类单号混用,仓库变化必须复核 |
|
| 出库单标识 | 来源账号+货主 `customerCode`+`deliveryNo`;另存 `sourceNo` 供业务展示和对照,不把两类单号混用,仓库变化必须复核 |
|
||||||
| SKU 标识 | 来源账号+货主 `customerCode`+原始 `productSku`;仓级统计再加 `whCode`,不按名称归并或随意改大小写 |
|
| SKU 标识 | 来源账号+货主 `customerCode`+原始 `productSku`;仓级统计再加 `whCode`,不按名称归并或随意改大小写 |
|
||||||
| 外部唯一键 | `uniqueKey4tenant` 仅作为来源证据保存;业务关联使用明确的账号、货主、仓库、SKU、品质字段,不拆字符串推断身份 |
|
| 外部唯一键 | `uniqueKey4tenant` 仅作为来源证据保存;业务关联使用明确的账号、货主、仓库、SKU、品质字段,不拆字符串推断身份 |
|
||||||
| 出库件数 | 已出库详情的 `skuVOList.actualDeliveryQty`;同单同 SKU 先归并,不叠加包裹层重复数量,不以预报 `deliveryQty` 替代。列表 `productList.qty` 的实际/预报语义需样本核对,不直接作为正式销量 |
|
| 出库件数 | 按当前确认采用列表优先:已出库列表 `productList` 的 SKU 与 `qty` 均完整时直接使用 `qty`;仅单笔订单缺明细、SKU 或数量时补详情并使用整单 `skuVOList.actualDeliveryQty`。真实数值零不触发补取,空目录不拉详情。同单同 SKU 先归并,不叠加包裹层数量,不混加列表与详情,不使用预报 `deliveryQty`。此为用户确认的采集取值策略,未证明列表数量与实际出库数量在所有订单上语义等价 |
|
||||||
| 出库日期 | `outboundTime` 已是北京时间,校验并解析后直接取其日期作为业务日;不再转为美国时间。缺失或无法解析时进入异常,不用创建时间或拉取时间补值 |
|
| 出库日期 | `outboundTime` 已是北京时间,校验并解析后直接取其日期作为业务日;不再转为美国时间。缺失或无法解析时进入异常,不用创建时间或拉取时间补值 |
|
||||||
| 在库数量 | `stkQty` 实物数量;在途 `transitQty` 单列,不相加充当在库 |
|
| 在库数量 | `stkQty` 实物数量;在途 `transitQty` 单列,不相加充当在库 |
|
||||||
| 可售数量 | 自营授权货主、指定仓库、正品 `productQuality=0` 的 `useStkQty`;不再次扣减冻结量,也不使用实物量自行推算 |
|
| 可售数量 | 自营授权货主、指定仓库、正品 `productQuality=0` 的 `useStkQty`;不再次扣减冻结量,也不使用实物量自行推算 |
|
||||||
@@ -530,10 +538,10 @@ OMP 列表支持按出库时间查询,但公开 `timeType` 未列订单更新
|
|||||||
| `order_id` | `BIGINT` | 对应外部出库事实 |
|
| `order_id` | `BIGINT` | 对应外部出库事实 |
|
||||||
| `sku_code` | `VARCHAR(128)` | 原始 `productSku` |
|
| `sku_code` | `VARCHAR(128)` | 原始 `productSku` |
|
||||||
| `product_name` | `VARCHAR(255)`,可空 | 来源商品名称,仅作展示 |
|
| `product_name` | `VARCHAR(255)`,可空 | 来源商品名称,仅作展示 |
|
||||||
| `actual_quantity` | `DECIMAL(20,6)` | 详情 `actualDeliveryQty`,必须为非负有效数值 |
|
| `actual_quantity` | `DECIMAL(20,6)` | 完整列表 `qty`,缺项整单补取时用详情 `actualDeliveryQty`;必须为非负有效数值 |
|
||||||
| `quantity_unit` | `VARCHAR(32)` | 已核准业务单位;未确认单位不发布正式数量统计 |
|
| `quantity_unit` | `VARCHAR(32)` | 已核准业务单位;未确认单位不发布正式数量统计 |
|
||||||
|
|
||||||
唯一键 `uk_selfop_order_sku(order_id,sku_code)`;索引 `idx_selfop_item_sku(sku_code,order_id)`。同一详情中同 SKU 的有效行先按相同单位合计,再整单替换;包裹层数量仅核对,不再次累加。新旧内容相同时不替换、不增加修订号;数量缺失、解析失败或单位冲突保留在暂存并拒绝该批归并,不能用零替换旧事实。
|
唯一键 `uk_selfop_order_sku(order_id,sku_code)`;索引 `idx_selfop_item_sku(sku_code,order_id)`。所选整单数量来源中同 SKU 的有效行先按相同单位合计,再整单替换;包裹层数量仅核对,不再次累加。新旧内容相同时不替换、不增加修订号;数量缺失、解析失败或单位冲突保留在暂存并拒绝该批归并,不能用零替换旧事实。
|
||||||
|
|
||||||
### 7. `ll_selfop_inventory_snapshot`:产品库存全量批次明细
|
### 7. `ll_selfop_inventory_snapshot`:产品库存全量批次明细
|
||||||
|
|
||||||
@@ -732,17 +740,17 @@ SKU 每日出库销量
|
|||||||
|
|
||||||
实物量为同 SKU 全部已核验品质的 `physical_quantity` 之和;冻结量按各品质 `frozen_quantity` 独立汇总,是实物中的受限数量,不再加到实物总量;次品实物也是实物的一部分。可售量只取正品 `available_quantity`;在途单列,不视为当前占仓。未知品质可保留来源实物,但不推断它是正品或次品。任何数量缺失或异常均按其指标依赖传播,不能把一个数值有效误当该 SKU 所有指标均有效。实物件数仅表示数量,不表示立方米、托盘或库位占用。
|
实物量为同 SKU 全部已核验品质的 `physical_quantity` 之和;冻结量按各品质 `frozen_quantity` 独立汇总,是实物中的受限数量,不再加到实物总量;次品实物也是实物的一部分。可售量只取正品 `available_quantity`;在途单列,不视为当前占仓。未知品质可保留来源实物,但不推断它是正品或次品。任何数量缺失或异常均按其指标依赖传播,不能把一个数值有效误当该 SKU 所有指标均有效。实物件数仅表示数量,不表示立方米、托盘或库位占用。
|
||||||
|
|
||||||
关注条件使用下列明确语义;所需库存必须有效且不过期,销售资格沿用完整 30 天及本仓观察依据。标签可并存,不将冻结/次品与其他标签的命中数简单相加:
|
关注条件使用下列明确语义;所需库存必须有效且不过期,销售资格沿用所选完整窗口及本仓观察依据(经营总览及严格下钻的窗口以[经营总览图表设计](经营总览图表设计.md)为准)。标签可并存,不将冻结/次品与其他标签的命中数简单相加:
|
||||||
|
|
||||||
| `attention` | 判定及输出 |
|
| `attention` | 判定及输出 |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| `ALL` | 不按关注原因过滤,保留未知、零库存及待观察候选 |
|
| `ALL` | 不按关注原因过滤,保留未知、零库存及待观察候选 |
|
||||||
| `NO_OUTBOUND_30D` | 全品质实物量大于零、30 天出库资格完整且数量为零;冻结/次品即使正品可售为零也可命中。标签是“有实物库存且近 30 天无出库”,不是实际库龄或从未售出 |
|
| `NO_OUTBOUND_IN_WINDOW` | 全品质实物量大于零、所选窗口出库资格完整且数量为零;冻结/次品即使正品可售为零也可命中。标签是“有实物库存且所选时段无出库”,不是实际库龄或从未售出 |
|
||||||
| `COVERAGE_GT_THRESHOLD` | 正品可售量和日均出库均大于零、正式可售天数严格大于 `coverageDaysThreshold`;使用未四舍五入的计算值比较。阈值是用户本次查询输入的正整数天,不内置未确认的 90/180 天经营政策 |
|
| `COVERAGE_GT_THRESHOLD` | 正品可售量和日均出库均大于零、正式可售天数严格大于 `coverageDaysThreshold`;使用未四舍五入的计算值比较。阈值是用户本次查询输入的正整数天,不内置未确认的 90/180 天经营政策 |
|
||||||
| `FROZEN_STOCK`/`DEFECTIVE_STOCK` | 对应有效冻结件数/次品实物量大于零;不依赖销量窗口,单独提示受限或次品占仓 |
|
| `FROZEN_STOCK`/`DEFECTIVE_STOCK` | 对应有效冻结件数/次品实物量大于零;不依赖销量窗口,单独提示受限或次品占仓 |
|
||||||
| `UNASSESSABLE` | 影响基本出库/可售天数判断的库存异常、过期、销量覆盖不足或观察不足;零销量且数据完整属于“无出库”,不是待观察 |
|
| `UNASSESSABLE` | 影响基本出库/可售天数判断的库存异常、过期、销量覆盖不足或观察不足;零销量且数据完整属于“无出库”,不是待观察 |
|
||||||
|
|
||||||
有库存零出库时可售天数仍为空,不当作无穷大,也不混入“超过阈值”的数值排序;零库存返回零天不代表货主优质。`NO_OUTBOUND_30D` 和 `COVERAGE_GT_THRESHOLD` 是不同关注集合,前者不可因分母为零被遗漏。现有 slow Top 100 仍限定正品可售库存大于零,不用它替代上述全品质实物关注。
|
有库存零出库时可售天数仍为空,不当作无穷大,也不混入“超过阈值”的数值排序;零库存返回零天不代表货主优质。`NO_OUTBOUND_IN_WINDOW` 和 `COVERAGE_GT_THRESHOLD` 是不同关注集合,前者不可因分母为零被遗漏。现有 slow Top 100 仍限定正品可售库存大于零,不用它替代上述全品质实物关注。
|
||||||
|
|
||||||
货主概览的总量来自完整候选集,不能加总当前页或 Top 100。每个指标分别返回正式总量、已知有效小计及未知数量:同一指标任一候选依赖未知,正式总量为空,已知小计明确标为部分资料;完全无可靠行时小计也为空。统计中明确的零值不算未知。库存候选/缺行资格沿用固定 profile 与完整库存快照,数据范围未发布不能输出空集零总量。
|
货主概览的总量来自完整候选集,不能加总当前页或 Top 100。每个指标分别返回正式总量、已知有效小计及未知数量:同一指标任一候选依赖未知,正式总量为空,已知小计明确标为部分资料;完全无可靠行时小计也为空。统计中明确的零值不算未知。库存候选/缺行资格沿用固定 profile 与完整库存快照,数据范围未发布不能输出空集零总量。
|
||||||
|
|
||||||
@@ -896,7 +904,7 @@ SKU 观察依据与候选资格也只取这两个版本的不可变快照,不
|
|||||||
| daily 唯一商品 | `customerCode,sku` 必填并精确匹配固定候选;缺失不能合并同名 SKU,候选不存在则返回明确无记录。返回商品身份、区间汇总及每天一点的 `points` |
|
| daily 唯一商品 | `customerCode,sku` 必填并精确匹配固定候选;缺失不能合并同名 SKU,候选不存在则返回明确无记录。返回商品身份、区间汇总及每天一点的 `points` |
|
||||||
| 数值与状态 | 汇总和每个 point 包含 `outboundQuantity,observedQuantity,dataStatus,reasonCodes,quantityUnit`;point 另含 `businessDate` 和当日已证明覆盖的起止(无覆盖可空),汇总含 `completeDayCount,partialDayCount,unknownDayCount`。区间总量必须与同一 SKU daily 的日点按上述规则相加一致 |
|
| 数值与状态 | 汇总和每个 point 包含 `outboundQuantity,observedQuantity,dataStatus,reasonCodes,quantityUnit`;point 另含 `businessDate` 和当日已证明覆盖的起止(无覆盖可空),汇总含 `completeDayCount,partialDayCount,unknownDayCount`。区间总量必须与同一 SKU daily 的日点按上述规则相加一致 |
|
||||||
| 覆盖与时效 | 返回 `salesCoveredFrom,salesCoveredUntil`、完整自然日范围、销量发布时间、修订待核对状态,以及可用时的库存观测起止;批次完整状态与查询范围完整性分字段,不能互相代替 |
|
| 覆盖与时效 | 返回 `salesCoveredFrom,salesCoveredUntil`、完整自然日范围、销量发布时间、修订待核对状态,以及可用时的库存观测起止;批次完整状态与查询范围完整性分字段,不能互相代替 |
|
||||||
| 其他指标的窗口 | `hot-skus` 只接受 `windowDays=7/30`,默认 30;`slow-skus`、`inventory-coverage` 固定 30,返回 `calculationWindowDays=30` 和实际起止。三者均以固定 `queryAsOf` 所属业务日的昨日为最后完整日,不接收图表的 `rangePreset`,误传明确拒绝 |
|
| 其他指标的窗口 | `hot-skus` 独立入口使用 `windowDays=7/30`,总览下钻的 CUSTOM 日期合同见[经营总览图表设计](经营总览图表设计.md);`slow-skus` 仍使用截至查询基准昨日的30日。普通 `inventory-coverage` 使用 salesWindowDays=10/30(默认30)及含当日的 salesWindowEndDate(默认查询基准昨日且须早于查询当日),返回实际起止和 calculationWindowDays;总览严格下钻改用原图CUSTOM区间,禁止混用两组日期参数,详见同一设计入口 |
|
||||||
|
|
||||||
调用示例为 `GET .../sku-sales-summary?sourceAccount=demo&warehouseCode=WH-DEMO&rangePreset=THIS_MONTH¤t=1&size=20`,账号和仓库仅为占位值。首屏解析本月范围后,选择一条货主/SKU 调用 daily,传相同范围与返回的版本上下文即可得到日趋势。任何范围切换都不触发 Integration 调用,不创建新的领星统计接口;不要把本地预设名、日期范围或业务时区直接透传给外部产品库存接口。
|
调用示例为 `GET .../sku-sales-summary?sourceAccount=demo&warehouseCode=WH-DEMO&rangePreset=THIS_MONTH¤t=1&size=20`,账号和仓库仅为占位值。首屏解析本月范围后,选择一条货主/SKU 调用 daily,传相同范围与返回的版本上下文即可得到日趋势。任何范围切换都不触发 Integration 调用,不创建新的领星统计接口;不要把本地预设名、日期范围或业务时区直接透传给外部产品库存接口。
|
||||||
|
|
||||||
@@ -911,7 +919,7 @@ SKU 观察依据与候选资格也只取这两个版本的不可变快照,不
|
|||||||
| 概览总量 DTO | 数量指标采用 `overallTotal,knownSubtotal,unknownSkuCount,dataStatus,reasonCodes`;缺失与部分不得扁平化为 0。货主销量总量按销售覆盖判断,SKU 观察期不足另体现在风险统计,不混为同一个未知原因 |
|
| 概览总量 DTO | 数量指标采用 `overallTotal,knownSubtotal,unknownSkuCount,dataStatus,reasonCodes`;缺失与部分不得扁平化为 0。货主销量总量按销售覆盖判断,SKU 观察期不足另体现在风险统计,不混为同一个未知原因 |
|
||||||
| 关注占比 DTO | 无出库与超阈值各返回 `matchedSkuCount,matchedPhysicalQuantity,physicalQuantityRatio`;存在影响判断的未知时三个正式值为空,另给 `knownMatchedSkuCount,knownMatchedPhysicalQuantity,unassessableSkuCount,unassessableKnownPhysicalQuantity,reasonCodes`。比例为 0~1,前端转百分比;分母及其状态同时返回。已确认无命中时可为 0,范围未知不能为 0;未设阈值用 `THRESHOLD_NOT_SET` |
|
| 关注占比 DTO | 无出库与超阈值各返回 `matchedSkuCount,matchedPhysicalQuantity,physicalQuantityRatio`;存在影响判断的未知时三个正式值为空,另给 `knownMatchedSkuCount,knownMatchedPhysicalQuantity,unassessableSkuCount,unassessableKnownPhysicalQuantity,reasonCodes`。比例为 0~1,前端转百分比;分母及其状态同时返回。已确认无命中时可为 0,范围未知不能为 0;未设阈值用 `THRESHOLD_NOT_SET` |
|
||||||
| SKU 明细筛选 | `/inventory-coverage` 保留可选精确 `customerCode,sku`,新增单值 `attention`,默认 ALL,枚举按前文。仅 `COVERAGE_GT_THRESHOLD` 必须传正整数 `coverageDaysThreshold`,其他关注可携带阈值用于行标签。所有货主/SKU/关注条件在完整候选上生效,然后统计 total、排序、分页;不得先取全仓 Top 100 再筛货主 |
|
| SKU 明细筛选 | `/inventory-coverage` 保留可选精确 `customerCode,sku`,新增单值 `attention`,默认 ALL,枚举按前文。仅 `COVERAGE_GT_THRESHOLD` 必须传正整数 `coverageDaysThreshold`,其他关注可携带阈值用于行标签。所有货主/SKU/关注条件在完整候选上生效,然后统计 total、排序、分页;不得先取全仓 Top 100 再筛货主 |
|
||||||
| SKU 排序 | `sortBy=AVAILABLE_DESC/COVERAGE_DAYS_DESC/PHYSICAL_DESC/OUTBOUND_30D_ASC`,默认 AVAILABLE_DESC;按未舍入值排序,未知末尾;同值按 SKU、货主编码升序稳定排序。零销量的空可售天数不强行变为极大数,另用 NO_OUTBOUND_30D 查看 |
|
| SKU 排序 | `sortBy=AVAILABLE_DESC/COVERAGE_DAYS_DESC/PHYSICAL_DESC/OUTBOUND_ASC`,默认 AVAILABLE_DESC;按未舍入值排序,未知末尾;同值按 SKU、货主编码升序稳定排序。零销量的空可售天数不强行变为极大数,另用 NO_OUTBOUND_IN_WINDOW 查看 |
|
||||||
| 明细与标签 | 复用既有数量、覆盖字段,补 `outboundQuantity30d,defectivePhysicalQuantity,lastObservedOutboundDate,attentionReasons` 及各自质量依据;最近出库是日粒度,不冒充精确时间或真实库龄。不存在可靠最后日期时为空,附已采集历史起点/原因;正式值与小计、样本不足分开 |
|
| 明细与标签 | 复用既有数量、覆盖字段,补 `outboundQuantity30d,defectivePhysicalQuantity,lastObservedOutboundDate,attentionReasons` 及各自质量依据;最近出库是日粒度,不冒充精确时间或真实库龄。不存在可靠最后日期时为空,附已采集历史起点/原因;正式值与小计、样本不足分开 |
|
||||||
| 页面一致性 | 概览命中 SKU 与同版本/阈值的全量筛选结果一致;不能用本页求和代替概览。前端只渲染服务端公式结果,不自行重算评级/占比或连接不同版本 |
|
| 页面一致性 | 概览命中 SKU 与同版本/阈值的全量筛选结果一致;不能用本页求和代替概览。前端只渲染服务端公式结果,不自行重算评级/占比或连接不同版本 |
|
||||||
|
|
||||||
@@ -997,7 +1005,7 @@ Integration 仅提供 `/internal/integrations/lingxing/...` 内部查询,沿
|
|||||||
|
|
||||||
一期继续采用固定事实修订号生成本仓完整日版本,保持前文发布屏障和原子切换;**全历史重算发生在后台,不在每次页面查询时发生**。每仓同一时刻只构建一个销量候选,按数据库聚合与有界批量写入处理,不把整仓全部订单加载进 Java 内存。
|
一期继续采用固定事实修订号生成本仓完整日版本,保持前文发布屏障和原子切换;**全历史重算发生在后台,不在每次页面查询时发生**。每仓同一时刻只构建一个销量候选,按数据库聚合与有界批量写入处理,不把整仓全部订单加载进 Java 内存。
|
||||||
|
|
||||||
正常 08:00/20:00 逻辑批次就绪后合并构建,不按每页、每条订单触发全历史重算。首采/补采有大量切片时,设计默认将常规阶段构建合并到至少 30 分钟一次,以最近 `build_started_at_utc` 计时;只有已经完成逻辑归并且通过屏障的部分可以进入候选。修订后的必要重建和失败恢复按任务优先级及退避执行,不为凑够间隔跳过修订。事实修订号、覆盖、范围、时区与 profile 依据均未改变时,不重复生成相同销量版;即使销量为零,只要覆盖推进仍需发布新的覆盖结论。库存每天的真实观测版本不因数量未变而跳过。
|
正常逻辑批次就绪后构建,不按每页、每条订单触发全历史重算。历史首采/补采按完整自然日推进:当天目录完整、订单校验及分仓逻辑归并完成并通过屏障后,立即进入候选构建和发布,不再等待固定 30 分钟间隔。完整列表订单每批最多 100 单在同一事务保存有效暂存、连续观测序号和任务检查点,避免逐单重写整天清单;缺项、较新修订和已存在的恢复引用仍逐单核验。中断只从已提交检查点续跑,不因批量处理放宽租约、暂停、完整性或发布屏障。修订后的必要重建和失败恢复按任务优先级及退避执行,不为凑够间隔跳过修订。事实修订号、覆盖、范围、时区与 profile 依据均未改变时,不重复生成相同销量版;即使销量为零,只要覆盖推进仍需发布新的覆盖结论。库存每天的真实观测版本不因数量未变而跳过。
|
||||||
|
|
||||||
无变化任务须在核验后以 `SUCCEEDED` 结束,将 `result_published_run_id` 指向复用的已发布版本,本次执行以 `REUSED` 终结且不成为统计版本头。合并构建承接的多个任务,只有新版本实际包含各自已归并事实及应声明的覆盖后才分别成功,均记录同一结果版本;负责发布的 run 为 `PUBLISHED`,其他复用尝试为 `REUSED`。尚未完整承接或仍处于 `APPLYING/BLOCKED` 的任务不能提前成功。此结果落账与版本关联必须可恢复,避免完成构建后任务永久未结束、重复恢复或永久保护旧输入。
|
无变化任务须在核验后以 `SUCCEEDED` 结束,将 `result_published_run_id` 指向复用的已发布版本,本次执行以 `REUSED` 终结且不成为统计版本头。合并构建承接的多个任务,只有新版本实际包含各自已归并事实及应声明的覆盖后才分别成功,均记录同一结果版本;负责发布的 run 为 `PUBLISHED`,其他复用尝试为 `REUSED`。尚未完整承接或仍处于 `APPLYING/BLOCKED` 的任务不能提前成功。此结果落账与版本关联必须可恢复,避免完成构建后任务永久未结束、重复恢复或永久保护旧输入。
|
||||||
|
|
||||||
@@ -1060,7 +1068,7 @@ Integration 仅提供 `/internal/integrations/lingxing/...` 内部查询,沿
|
|||||||
| 同仓同货主 A 库存 3,000、30 日出库 300;B 库存 30、出库 30,均正品有效且观察完整,查询阈值 90 | 日均分别 10/1,可售 300/30 天;超阈值只命中 A。命中 SKU 实物 3,000、货主实物 3,030,占比 3,000÷3,030;不能按出库量小优先认定 B 更积压 | 合成 SQL/DTO 数值及排序测试 |
|
| 同仓同货主 A 库存 3,000、30 日出库 300;B 库存 30、出库 30,均正品有效且观察完整,查询阈值 90 | 日均分别 10/1,可售 300/30 天;超阈值只命中 A。命中 SKU 实物 3,000、货主实物 3,030,占比 3,000÷3,030;不能按出库量小优先认定 B 更积压 | 合成 SQL/DTO 数值及排序测试 |
|
||||||
| 全仓热销榜前 100 无货主 B,但 B 有 3 个有销量 SKU;库存列表多页 | 筛 B 后热销候选仍有 3 个;B 概览与 B 的全量结果一致,不随页码改变,不从全仓前 100 或当前页二次筛选 | 过滤顺序、跨页与概览一致性测试 |
|
| 全仓热销榜前 100 无货主 B,但 B 有 3 个有销量 SKU;库存列表多页 | 筛 B 后热销候选仍有 3 个;B 概览与 B 的全量结果一致,不随页码改变,不从全仓前 100 或当前页二次筛选 | 过滤顺序、跨页与概览一致性测试 |
|
||||||
| 正品实物 120(冻结 20)、次品实物 8、可售 100、在途 30 | SKU/货主实物为 128、可售 100;冻结不叠加,次品不重复相加,在途不算占仓;品质连接不能复制销量。另测全冻结正品可售为零仍显示实物和冻结关注 | 品质聚合及受限库存测试 |
|
| 正品实物 120(冻结 20)、次品实物 8、可售 100、在途 30 | SKU/货主实物为 128、可售 100;冻结不叠加,次品不重复相加,在途不算占仓;品质连接不能复制销量。另测全冻结正品可售为零仍显示实物和冻结关注 | 品质聚合及受限库存测试 |
|
||||||
| 有实物库存且完整 30 日零出库;另一个正库存 SKU 观察不足,第三个库存未知 | 前者 NO_OUTBOUND_30D、天数为空,不冒充超过阈值;后两者保留待判断。风险正式数量/占比为空,已确认命中小计仍展示;库存完整且销量覆盖完整时,仅观察不足不使货主实际出库总量变空 | 零分母、资格与未知传播测试 |
|
| 有实物库存且完整 30 日零出库;另一个正库存 SKU 观察不足,第三个库存未知 | 前者 NO_OUTBOUND_IN_WINDOW、天数为空,不冒充超过阈值;后两者保留待判断。风险正式数量/占比为空,已确认命中小计仍展示;库存完整且销量覆盖完整时,仅观察不足不使货主实际出库总量变空 | 零分母、资格与未知传播测试 |
|
||||||
| 无阈值、阈值 0/负数、实际可售 90.04 天显示 90.0 天且阈值 90 | 未设置不计算超阈值指标;非法值拒绝;90.04 按未舍入值命中。没有任何实物库存时占比为空,不给优秀评级 | 入参、精度及无库存测试 |
|
| 无阈值、阈值 0/负数、实际可售 90.04 天显示 90.0 天且阈值 90 | 未设置不计算超阈值指标;非法值拒绝;90.04 按未舍入值命中。没有任何实物库存时占比为空,不给优秀评级 | 入参、精度及无库存测试 |
|
||||||
| 同日计划库存先失败后成功,再有一次成功;另测并发发布和发布后恢复 | 选择同日第一次成功发布 run 为日代表,同日后续不覆盖;账号/仓/日唯一,失败及 VALIDATION 无日标记,恢复不重复标记 | 发布事务、幂等与唯一键测试 |
|
| 同日计划库存先失败后成功,再有一次成功;另测并发发布和发布后恢复 | 选择同日第一次成功发布 run 为日代表,同日后续不覆盖;账号/仓/日唯一,失败及 VALIDATION 无日标记,恢复不重复标记 | 发布事务、幂等与唯一键测试 |
|
||||||
| 昨日计划跨午夜扫描或今日补跑;另测今日与昨日数量完全相同 | 不回填昨日或冒充今日正常日样本;数量相同仍保留真实今日观测。缺口留空不沿用旧值;日代表 run/snapshot/profile 不受销量版 7 天清理规则影响 | 时区边界、缺口和保留合同测试 |
|
| 昨日计划跨午夜扫描或今日补跑;另测今日与昨日数量完全相同 | 不回填昨日或冒充今日正常日样本;数量相同仍保留真实今日观测。缺口留空不沿用旧值;日代表 run/snapshot/profile 不受销量版 7 天清理规则影响 | 时区边界、缺口和保留合同测试 |
|
||||||
|
|||||||
Reference in New Issue
Block a user