11 Commits

Author SHA1 Message Date
8fba83d768 merge: 合并最新 main 到发货数据分支(保留线上修复 + 对齐工作平台规则)
以 main 的同步实现为底(超时重连、按 io_date 预载出库映射、逐包裹替换并保留人工字段、
未扫到旧记录保留待核、全表扫描),移植发货数据对齐工作平台的规则:
- 出库映射预载改为富结构:单号/订单/单号+订单 三种定位,作废重出优先有效单,记录 io_date 作发货时间
- 订单元数据补查增加 状态(取消/拆分/合并) 与 线上发货 标记,替代原 LEFT JOIN;全表扫描后释放缓存
- 换单配对、出库单兜底、采购退货出库、组合件拆件、明细体积口径、仓库/名称清洗
- 按规则明确排除的包裹(取消/拆分/合并/线上发货)在本窗口内清除旧记录,其余未扫到记录仍按 main 逻辑保留
- @ 前缀:沿用 main 的同订单同日去重,剩余 @ 统一去掉
- 同步命令额外输出出库单兜底、采购退货条数(仅窗口模式返回)

验证:发货同步单元测试 29/29、发货页面测试 5/5 通过;本地清空 8.15-9.30 后全量同步 9.1-9.16,
与工作平台对比两边共有包裹 195,555,带单号漏拉仅 1 单(工作平台拉数后单号被改)。
BusinessDataPlacementTest(数据集数量写死 56,实际 66)在 main 上本就失败,与本次无关。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014nvGZkg27YMEdhry6eiuwf
2026-10-07 16:13:35 +08:00
f06380bcd0 fix(发货数据): 两种导出模式对齐工作平台取值逻辑
按工作平台 OmsDataDay 源码 + 9.1-9.16 逐单对比反推,合并/明细基础信息一致率均达 99.9% 以上。

取数范围
- 换单配对:快递明细旧单号在出库单查不到时,配同订单下未被占用的出库单新单号
- 作废重出:同单号/同订单多张出库单时优先有效单、再取最新 io_date
- 订单已取消/已拆分/已合并的快递明细不出行;订单标签含"线上发货"同样排除
- 合包/拼单:按 单号+订单号 定位出库单;同单号不同交易单号的出库单照常补出
- 发货明细无单号:出库单单号 -> 订单单号 -> 空,不再借运费表里其它包裹单号
- 自动发货仓虚拟/补差单:单号已被别的包裹输出则留空
- @ 去重只在同一交易单号、本次同步时间段内比对,剩余 @ 前缀统一去掉

字段取值
- 发货时间取出库单 io_date;平台取视图 shop_site(无则映射);省市区取视图
- 合并商品名称/供应商取包裹内最后一个商品(原为 MIN);名称 & 转 ^
- 明细体积:数量×长×宽×高,代发仓非标准承运商不乘数量,指定快递为 0(config detail_volume)
- 组合件合并值单独存 m_* 列(新迁移),合并导出优先使用
- 仓库 {未指定发货仓} 导出为空;明细 0 尺寸/体积导出为空

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014nvGZkg27YMEdhry6eiuwf
2026-10-07 09:14:31 +08:00
eecb2b1863 修复发货历史窗口安全回补与数量状态 (#263) 2026-09-24 13:30:09 +08:00
2017d6520b feat: add Jushuitan shipping data mirror 2026-09-23 18:29:15 +08:00
2a1b663da2 feat(发货数据): 合并/明细双模式,还原工作平台 导出/导出明细
- 同步改为"一个发货单×每件商品一行"(明细底座);新增 pkg_count 列存"1/N"件数
- 体积=数量×长×宽×高;包裹级(实称重量/运费)仅落首件,合并求和不重复
- 仓储 paginate/exportRows 支持 mode:
  合并=按 source_id 归并(条码/商品ID逗号拼接、数量/重量/体积/金额/运费求和、长宽高取最大、其余取值);
  明细=每件一行
- 页面加"合并/明细"切换 + 两个导出(导出/导出明细) + 件数列
- 同步内存加固(1.5G、关本地查询日志、每批释放+gc),避免全量 OOM

实测:包裹199602/明细222311,多件包裹11667,补差0;
7件样例合并体积=各件求和、运费不重复、明细每行1/7。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014nvGZkg27YMEdhRy6EiUwf
2026-09-21 07:49:26 +00:00
440f06079f feat(发货数据): 供应商/店铺/仓库/快递公司改为勾选式多选下拉
- 下拉面板:回车检索 + 清除 + 表头全选 + 复选框列表,勾选多个即可
- 后端多选精确匹配:仓库/店铺/供应商 whereIn;快递公司匹配快递名称1/2 任一
- suggest 接口支持 limit(≤500),过滤空值与占位脏值"0"
- 查询与导出均按所选多个值生效

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014nvGZkg27YMEdhRy6EiUwf
2026-09-21 03:54:48 +00:00
b9e0835ef5 feat(发货数据): 供应商/店铺/仓库/快递公司筛选框自动补全
- 新增只读取值接口 shipping-data/suggest:按字段去重返回匹配候选(供应商/店铺名称/仓库/快递公司,快递取 express_name1/2 并集)
- ShippingOrderRepository::distinctValues 去重查询
- 前端 typeahead:输入弹下拉,支持鼠标点选与上下键/回车选择

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014nvGZkg27YMEdhRy6EiUwf
2026-09-21 03:36:07 +00:00
34b68bb431 feat: 增加发货数据筛选日期选择与导出 2026-09-16 10:57:27 +08:00
b038909cb0 feat: 发货数据页接入(caiwu 直连聚水潭/奇门)
- 聚水潭奇门客户端与发货同步器骨架:QimenClient(签名+POST)、ShippingDataSynchronizer(erp.sctrade.query 列表 + erp.sradesku.query 明细 + upsert + modified 水位)
- 发货明细扁平展示表 jst_oms_shipping(对齐工作平台发货数据 47 列/顺序,用于快递运费核算);原始表 jst_sctrade/_items/_skus/_receiver + jst_sync_state
- 快递应付新增「发货数据」页:Pages.contentForShippingData + 视图 + business_navigation 导航项(slug=shipping-data)
- ShippingOrderRepository 读展示表;artisan jushuitan:sync-shipping + 每10分钟增量调度(JST_SYNC_ENABLED 默认关)
- 落库连接 jushuitan_local(本地容器,env 可覆盖);演示 Seeder(6 条家具发货样例);.env.jushuitan.example

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014nvGZkg27YMEdhRy6EiUwf
2026-09-16 10:57:12 +08:00
f580807097 feat: 增加发货数据筛选日期选择与导出 2026-09-16 10:55:27 +08:00
9190ecff67 feat: 发货数据页接入(caiwu 直连聚水潭/奇门)
- 聚水潭奇门客户端与发货同步器骨架:QimenClient(签名+POST)、ShippingDataSynchronizer(erp.sctrade.query 列表 + erp.sradesku.query 明细 + upsert + modified 水位)
- 发货明细扁平展示表 jst_oms_shipping(对齐工作平台发货数据 47 列/顺序,用于快递运费核算);原始表 jst_sctrade/_items/_skus/_receiver + jst_sync_state
- 快递应付新增「发货数据」页:Pages.contentForShippingData + 视图 + business_navigation 导航项(slug=shipping-data)
- ShippingOrderRepository 读展示表;artisan jushuitan:sync-shipping + 每10分钟增量调度(JST_SYNC_ENABLED 默认关)
- 落库连接 jushuitan_local(本地容器,env 可覆盖);演示 Seeder(6 条家具发货样例);.env.jushuitan.example

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014nvGZkg27YMEdhRy6EiUwf
2026-09-15 06:32:45 +00:00