2642 Commits

Author SHA1 Message Date
WuYongJie
56548a731e Merge production main into shared baseline for SABC release
Preserve SABC storage-type and batch-search changes, logistics column resizing, and production-main employee-hours and route export compatibility. Verified 54 focused tests and type-check; no pending production migrations.
2026-10-13 16:24:15 +08:00
居居
252624708d Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline 2026-10-13 10:15:47 +08:00
居居
7ae628f9f1 feat(supply-chain): SABC 明细新增「入库/代发」列,货号/商品编码/款式编码支持空格批量查询
- 明细与导出新增「入库/代发」,取值来源产品全量档案 storageType(入仓/代发)
- 已生成月份仍读快照;旧快照缺该字段时按 barcode 从档案补齐,无需重新核算
- 货号/商品编码/款式编码额外支持空格/制表符分隔(可直接粘贴 Excel 多行或多列),服务端最多取 200 个
- 入库/代发取值兼容字典值(INBOUND/DROPSHIP)与中文直填(入仓/入库/代发),产品全量档案列表同步显示
2026-10-13 10:15:34 +08:00
WuYongJie
f8b8959347 feat(diy): persist shared catalog and assets in database and object storage 2026-10-13 09:56:39 +08:00
WuYongJie
409e35e232 feat(diy): persist shared catalog and assets in database and object storage 2026-10-13 09:55:55 +08:00
WuYongJie
ee033a1e08 feat(diy): add cabinet workbench with saved versions and BOM exports 2026-10-12 18:16:14 +08:00
WuYongJie
12de551328 feat(diy): add cabinet workbench with saved versions and BOM exports 2026-10-12 18:14:15 +08:00
WuYongJie
ecd11db3af docs: 删除已废弃的苹果风格视觉标准(验收只按白曜石工坊口径) 2026-10-12 14:05:53 +08:00
WuYongJie
b45b584871 chore(installation-demo): 移除安装演示V2试验链并保留成对迁移历史 2026-10-12 14:05:53 +08:00
WuYongJie
b237bbed7c feat(supply-chain): 产品全量档案定时任务通知——业绩快照每日简报与四任务失败兜底 2026-10-12 14:05:53 +08:00
WuYongJie
b8093f899e feat(supply-chain): 产品全量档案定时任务通知——业绩快照每日简报与四任务失败兜底 2026-10-12 14:05:18 +08:00
WuYongJie
92cd5f2903 docs: 删除已废弃的苹果风格视觉标准(验收只按白曜石工坊口径) 2026-10-12 11:08:32 +08:00
WuYongJie
e612936125 chore(installation-demo): 移除安装演示V2试验链并保留成对迁移历史 2026-10-12 11:08:32 +08:00
WuYongJie
1de64d05f6 fix(supply-chain): keep daily sales notification fields in separate paragraphs 2026-10-12 10:47:05 +08:00
WuYongJie
553c237268 fix(supply-chain): keep daily sales notification fields in separate paragraphs 2026-10-12 10:47:05 +08:00
WuYongJie
00dd1b2f89 fix(supply-chain): 日销通知改为纯文字
去掉新通知的卡片按钮字段,正文采用普通换行。
保留旧投递的幂等重试载荷,公共通知链路不变。
验证:相关25项测试、ESLint及diff检查通过。
2026-10-12 10:26:40 +08:00
WuYongJie
75dd248046 fix(supply-chain): 日销通知改为纯文字
去掉新通知的卡片按钮字段,正文采用普通换行。
保留旧投递的幂等重试载荷,公共通知链路不变。
验证:相关25项测试、ESLint及diff检查通过。
2026-10-12 10:26:40 +08:00
WuYongJie
34e8426bb6 feat(store-account): display exact source platforms and filter before pagination 2026-10-12 10:24:17 +08:00
WuYongJie
a7554bebad feat(store-account): display exact source platforms and filter before pagination 2026-10-12 10:23:48 +08:00
WuYongJie
6a94f1b215 fix(supply-chain): 日销08点同步、失败补跑及管理员结果通知
北京时间08:00开始,未到数或失败按固定10分钟刻度补跑,成功当天停止源查询。
保留重启/PG失败记录和到数时间,正式任务定向徐霞客发送去重结果通知。
验证:31项定向测试、ESLint、全仓TypeScript、脚本语法与本地真实运行通过。
2026-10-12 10:05:44 +08:00
WuYongJie
9ca2f2d382 fix(supply-chain): 日销08点同步、失败补跑及管理员结果通知
北京时间08:00开始,未到数或失败按固定10分钟刻度补跑,成功当天停止源查询。
保留重启/PG失败记录和到数时间,正式任务定向徐霞客发送去重结果通知。
验证:31项定向测试、ESLint、全仓TypeScript、脚本语法与本地真实运行通过。
2026-10-12 10:04:42 +08:00
WuYongJie
cb91d7a42f fix(intake): calibrate Gujia 2026 certificate print positions 2026-10-12 09:22:56 +08:00
WuYongJie
6edf13e974 fix(intake): calibrate Gujia 2026 certificate print positions 2026-10-12 09:22:20 +08:00
WuYongJie
ffa4290c4a feat(product-archive): 全量档案图片自动增量索引、换图失效与失败重试 2026-10-12 08:51:02 +08:00
WuYongJie
7b9fd60f6e feat(product-archive): 全量档案图片自动增量索引、换图失效与失败重试 2026-10-12 08:50:39 +08:00
WuYongJie
393f149c05 feat(product-archive): sync approved owner workflows daily 2026-10-10 16:14:24 +08:00
WuYongJie
50062a4c3d feat(product-archive): sync approved owner workflows daily 2026-10-10 16:13:53 +08:00
WuYongJie
abcffc424a fix(supply-chain): isolate permissions for every menu page 2026-10-10 14:31:38 +08:00
WuYongJie
9b7ab9e532 fix(supply-chain): isolate permissions for every menu page 2026-10-10 14:31:21 +08:00
apple
729eaf492d fix(logistics-arrival): 换货单不再把已换货的 0 数量行算成条码
内部单号 9627695(赔偿换货单)看板显示 X00005、SJ0061100N430V01 两个条码,
但聚水潭里 SJ0061100N430V01 是 qty=0 / item_status=Replaced 的"已换货"原始行,
实际发出的是手工换货替换品 X00005,看板应只显示 X00005。

- 条码匹配时跳过 qty<=0 的明细行(已换货/取消的原始行不产生条码);
- 明细查询补上 oi.qty 字段;
- 补单测:换货单只保留实际发出条码、0/负数行不计入,并把原有两条条码用例补上 qty。

实测(10-01~10-09 窗口):jst_OrderItem 2436 行、jst_qmcust_orderlist_item 3007 行
数量为 0 且全部是 Replaced;过滤后没有任何订单会变成无条码。

注:快照里的条码是生成时固化的,快照区间需重跑当天批次后才会更新。
任务名:物流到货签收时长-deepseek
2026-10-10 14:18:40 +08:00
apple
253c803be6 fix(logistics-arrival): 换货单不再把已换货的 0 数量行算成条码
内部单号 9627695(赔偿换货单)看板显示 X00005、SJ0061100N430V01 两个条码,
但聚水潭里 SJ0061100N430V01 是 qty=0 / item_status=Replaced 的"已换货"原始行,
实际发出的是手工换货替换品 X00005,看板应只显示 X00005。

- 条码匹配时跳过 qty<=0 的明细行(已换货/取消的原始行不产生条码);
- 明细查询补上 oi.qty 字段;
- 补单测:换货单只保留实际发出条码、0/负数行不计入,并把原有两条条码用例补上 qty。

实测(10-01~10-09 窗口):jst_OrderItem 2436 行、jst_qmcust_orderlist_item 3007 行
数量为 0 且全部是 Replaced;过滤后没有任何订单会变成无条码。

注:快照里的条码是生成时固化的,快照区间需重跑当天批次后才会更新。
任务名:物流到货签收时长-deepseek
2026-10-10 13:48:03 +08:00
apple
91eeb6402a fix(docs): 恢复生产部署说明中被覆盖的 SABC 章节并重放停产收口章节
上一次提交把 deploy 文档替换成旧版本,误删了「商品 SABC 月度核算」等主线内容;本次恢复主线版本并仅追加「停产需求确认超时收口」章节。
2026-10-10 13:21:18 +08:00
apple
f2480700ee chore(production-stop-demands): 补齐超时自动收口定时器与部署说明
- 新增 scripts/install-production-stop-confirmation-finalize-timer.sh:systemd service+timer,每 10 分钟检查一次(Asia/Shanghai),失败 5 分钟后自动重试,日志进 journald
- 生产部署入口说明新增「停产需求确认超时收口」章节(脚本、systemd 名称、调度、日志、启用步骤与授权边界)
2026-10-10 13:21:18 +08:00
apple
158995b71b fix(docs): 恢复生产部署说明中被覆盖的 SABC 章节并重放停产收口章节
上一次提交把 deploy 文档替换成旧版本,误删了「商品 SABC 月度核算」等主线内容;本次恢复主线版本并仅追加「停产需求确认超时收口」章节。
2026-10-10 12:14:38 +08:00
apple
26ebec4c40 chore(production-stop-demands): 补齐超时自动收口定时器与部署说明
- 新增 scripts/install-production-stop-confirmation-finalize-timer.sh:systemd service+timer,每 10 分钟检查一次(Asia/Shanghai),失败 5 分钟后自动重试,日志进 journald
- 生产部署入口说明新增「停产需求确认超时收口」章节(脚本、systemd 名称、调度、日志、启用步骤与授权边界)
2026-10-10 12:13:28 +08:00
apple
8270ae9b38 Merge branch 'codex/wuyongjie-production-stop-demands' into codex/xuxiake-mainline
feat(production-stop-demands): 停产需求管理全流程(提单→需求确认→走停产流程→流程结果同步)
- 按条码拆单提交;批量同意/不同意、批量走流程、批量修改停产原因
- 需求确认人与流程负责人分开配置(批量新增/删除/查询)
- 确认截止时间(15:00/16:00 规则)与超时默认同意;任一人不同意即整单驳回
- PLM 流程结果同步(拒绝→需求驳回;商品停产/退市→流程审批通过)与盘停建议配置

(cherry picked from commit 33555c7f6bc0881452a074b06c89b6caf911ca1d)
2026-10-10 11:41:51 +08:00
apple
33555c7f6b Merge branch 'codex/wuyongjie-production-stop-demands' into codex/xuxiake-mainline
feat(production-stop-demands): 停产需求管理全流程(提单→需求确认→走停产流程→流程结果同步)
- 按条码拆单提交;批量同意/不同意、批量走流程、批量修改停产原因
- 需求确认人与流程负责人分开配置(批量新增/删除/查询)
- 确认截止时间(15:00/16:00 规则)与超时默认同意;任一人不同意即整单驳回
- PLM 流程结果同步(拒绝→需求驳回;商品停产/退市→流程审批通过)与盘停建议配置
2026-10-10 11:28:48 +08:00
apple
737926de7e feat(production-stop-demands): 停产需求管理全流程(提单/确认/走流程/结果同步)
- 按条码拆单提交,支持批量同意/不同意、批量走流程、批量修改停产原因
- 需求确认人与流程负责人分别配置,支持批量新增/删除/查询
- 确认截止时间规则(当天15:00前当天16:00截止,否则次日16:00)与超时默认同意;任一人不同意即整单驳回
- PLM 流程结果同步:流程拒绝→需求驳回;商品状态变为停产/退市→流程审批通过
- 盘停建议配置:批量导入(模板/文件/三种模式)、表格式维护、提单按条码自动带出
- 列表支持列宽拖拽、表头排序、日期区间/需求人/采购筛选、需求状态流程步骤条与批量操作
2026-10-10 11:17:18 +08:00
WuYongJie
de7518bb16 feat(product-archive): use marketing daily sales with daily sync and arrival monitor
Aggregate rpt.op_marketingDailySales by complete SKU and calculate weighted purchase sales.
Persist daily source fingerprints, skip unchanged archive writes and prevent old enrichment from overwriting sales.
Run daily at 09:30 Beijing time and observe source arrival every 10 minutes on 2026-10-11 08:00-09:30.
2026-10-10 11:09:51 +08:00
WuYongJie
cd8d5f2799 feat(product-archive): use marketing daily sales with daily sync and arrival monitor
Aggregate rpt.op_marketingDailySales by complete SKU and calculate weighted purchase sales.
Persist daily source fingerprints, skip unchanged archive writes and prevent old enrichment from overwriting sales.
Run daily at 09:30 Beijing time and observe source arrival every 10 minutes on 2026-10-11 08:00-09:30.
2026-10-10 11:08:29 +08:00
apple
ce3658a33d fix(logistics-arrival): 条码不再并集同一物流单号上的其它订单
内部单号 9627695(线上单 351207604012)实际只有 X00005 和 SJ0061100N430V01
两项,看板却显示 4 个条码——多出来的 SJ0061100N430V01-5/-7 属于同一物流单号
75627908174893 上的另一张订单 9593499(合并发货)。

根因:buildBarcodeMap 把"物流单号"键的条码无条件并入,而一个物流单号可能合并
发货多张订单,于是一张单会串上别单的条码;同一张单还会因为分页里恰好有没有
那张邻单而显示不同条码。

- 条码匹配规则抽成纯函数 matchLogisticsArrivalSigningDurationBarcodes:
  先用内部单号/线上订单号/物流单号+付款时间匹配本单自己的明细,
  物流单号只在精确键一个都匹配不到时兜底;
- 补单测覆盖"合并发货不串单"和"精确键为空才兜底且去重"。

注:快照里的条码是生成时固化的,快照区间需重跑当天批次后才会更新。
任务名:物流到货签收时长-deepseek
2026-10-10 10:52:42 +08:00
apple
3679c247bf feat(logistics-arrival): 订单明细支持拖动调整各字段列宽
20 个字段原来只有统一的 max-width: 260px + 省略号,长文本(备注/留言/地址)
看不全也没法放大。现在每列表头右侧都有拖拽把手:

- 拖动调整列宽(72~640px),键盘 ←/→ 微调,双击把手恢复该列默认宽度;
- 列宽写进 localStorage,刷新/切页后保留;改过列宽后表头出现"恢复默认列宽"按钮;
- colgroup + table-layout: fixed,列宽所见即所得,表格总宽随列宽变化并横向滚动。

任务名:物流到货签收时长-deepseek
2026-10-10 10:12:36 +08:00
apple
7e1ca79dc0 fix(logistics-arrival): 变体条码回退基准条码,商品维度不再是未填写
聚水潭同款不同规格会给基准条码加 `-数字`(如 SJ0061100N430V01-5),
产品档案只登记基准条码,于是变体条码查不到档案、供应商/采购为空;
而订单明细行是按整单所有明细聚合的,只要单里有基准条码就有值——
同一张订单因此出现"商品维度未填写、订单明细有值"。

- 档案查询两步走:先精确匹配,未命中再用基准条码(去掉结尾 `-数字`)兜底;
- 基准条码可能与本批一起查询,两轮结果都参与回退;
- 新增 logisticsArrivalSigningDurationArchiveFallbackBarcodes 纯函数 + 单测。

注:快照里的 productItems 是生成时固化的,需重跑当天批次后分析看板才会带上兜底结果。
任务名:物流到货签收时长-deepseek
2026-10-10 10:06:10 +08:00
apple
f665a6d271 fix(logistics-arrival): 快照覆盖判定改用实际数据覆盖,修当天少算/导出缺单
看板/导出的快照覆盖判定此前只比对批次"声明窗口"(windowTo = 跑批当天),
但每天 03:00/05:30 跑批时当天还没签收完,数据只到跑批那一刻,于是把
"还没签收完的当天"误判成已覆盖:10-08 生成的批次只会算到 10-07(约 3.8 万),
当天签收的单(用户清单里那 5,820 条)整批缺失。

- 快照批次新增 dataThrough(该批真实最大签收时间),覆盖上限改为
  min(windowTo - 1, dataThrough 当天):跑批当天永远不完整,只信任到前一天;
  数据源本身滞后时再由 dataThrough 收窄。
- 生成任务逐片记录 dataThrough 并写回批次;旧批次缺值时按 windowTo - 1 兜底。
- 定时器默认 05:30 → 03:00;文档同步更新覆盖规则。
- migration: LogisticsArrivalSigningDurationSnapshotRun.dataThrough。

任务名:物流到货签收时长-deepseek

(cherry picked from commit eca96b3067d73bc01e54f72dd11dd7253b324b97)
2026-10-09 18:01:32 +08:00
居居
1a53aa31a3 feat(supply-chain): 各部门数据分类去掉「数据权限例外」,权限统一以用户管理后台为准
- 配置弹窗移除「数据权限例外」输入项,保存时不再写入该字段(旧配置下次保存即清空)
- 数据范围不再按人收窄:部门负责人/总负责人/普通账号一律看全部利润中心
- 设置结构、settings 接口返回与权限节点描述同步移除 dataScopeGrants
2026-10-09 17:47:34 +08:00
apple
eca96b3067 fix(logistics-arrival): 快照覆盖判定改用实际数据覆盖,修当天少算/导出缺单
看板/导出的快照覆盖判定此前只比对批次"声明窗口"(windowTo = 跑批当天),
但每天 03:00/05:30 跑批时当天还没签收完,数据只到跑批那一刻,于是把
"还没签收完的当天"误判成已覆盖:10-08 生成的批次只会算到 10-07(约 3.8 万),
当天签收的单(用户清单里那 5,820 条)整批缺失。

- 快照批次新增 dataThrough(该批真实最大签收时间),覆盖上限改为
  min(windowTo - 1, dataThrough 当天):跑批当天永远不完整,只信任到前一天;
  数据源本身滞后时再由 dataThrough 收窄。
- 生成任务逐片记录 dataThrough 并写回批次;旧批次缺值时按 windowTo - 1 兜底。
- 定时器默认 05:30 → 03:00;文档同步更新覆盖规则。
- migration: LogisticsArrivalSigningDurationSnapshotRun.dataThrough。

任务名:物流到货签收时长-deepseek
2026-10-09 17:16:12 +08:00
居居
1779d8a697 style(supply-chain): 各部门数据分类配置弹窗标题去掉「(仅管理员)」 2026-10-09 16:42:01 +08:00
居居
e95748dee9 Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline 2026-10-09 16:30:54 +08:00
居居
530a35711f style(supply-chain): 各部门数据分类配置弹窗标题去掉「(仅管理员)」 2026-10-09 16:30:45 +08:00
居居
810f3a8a07 Merge branch 'codex/xuxiake-sabc-sync-20260929' into codex/xuxiake-mainline 2026-10-09 16:19:12 +08:00