CaiWuXiTong/docs/发货数据_工作平台还原_逻辑对照.md

6.9 KiB
Raw Permalink Blame History

发货数据:工作平台 → 财务系统(caiwu) 100% 还原逻辑对照

目的:让 caiwu「发货数据」界面与工作平台一致(含"导出/导出明细"两种口径),并把逻辑梳理清楚,脱离将停用的工作平台/ jiansun 库,改由经营分析副本库(operations_replica)直取。

一、总体数据流

工作平台(现状,即将停用)

  1. 定时调聚水潭 erp.dlv.query(参数 tradetype=1=正常出库、sendsgn=1=已发货),按发货时间取发货单;erp.dlv.getDlv 取每单的商品明细。
  2. 逐件写入 fys_omsDataDayDetail(明细表,一件商品一行)。
  3. 按 Expressno, Packageno 归并成 fys_omsDataDay(合并表,一个快递单号/包裹一行)。
  4. 页面与导出:导出明细=查明细表;导出=查合并表;两者都再左连 店铺/仓库/快递/成品/运费/换单 维表。

caiwu(目标)

  1. 副本库 rpt.jst_order_express_details(发货单 dlv 镜像)× rpt.jst_OrderItem(逐件)+ rpt.jst_sku(尺寸/重量/供应商)+ rpt.fys_jstFreightCostDetail(运费)。
  2. 逐件写入 jst_oms_shipping(明细,一件一行;唯一键=包裹id+商品id)。
  3. 查询时按包裹归并出"合并"视图(不再单独建表,用 GROUP BY 实时归并)。
  4. 页面加「合并/明细」切换+两个导出,默认合并。

二、明细口径(对应"导出明细")——每件商品一行

一个发货单(包裹) × 其每件商品 = 一行。字段来源:

列 工作平台字段 caiwu 来源
快递单号 Expressno dlv.postcode express_details.logistic_id(空时回落 l_id/运费expressNo)
交易单号 Sourceno dlv.sourceno express_details.so_id
配货单号 Packageno dlv.wmspackno 待补(副本库对应字段确认中)
商品ID shopproid item.shopproid OrderItem.shop_i_id
条形码 Barcode item.skuoid OrderItem.sku_id
货号 Productcode item.procode OrderItem.i_id
商品名称 SkuName item.skuname OrderItem.name
数量 Num item.skucount OrderItem.qty
供应商 SupplierName item.scmname / scsku sku.supplier_name / dis_co_name
长/宽/高 商品资料 sku.l / w / h
体积 Svolume 见"体积规则" 见"体积规则"
实称重量 Weight dlv 回传重量 express_details.weight
发货时间 Shiptime dlv.sended express_details.send_time(空回落 jst_Orders.send_date)
付款时间 Paydate dlv.paytime express_details.pay_time
省/市/区/地址/收货人/电话 dlv.linker.* express_details.receiver_* / 地址拆分
店铺/平台/仓库 dlv.shopcode/pltmcode/whcode express_details.shop_name/platform_name/warehouse_name
件数 Count '1/N' 同 Packageno 商品件数 → '1/N'

明细专有规则

  • Count = '1/N':同一 Packageno 有 N 件商品,则每行显示 1/N。
  • 体积 Svolume:
    • 普通商品(货号不在配件表 ProCodeOfShipData、快递在 ExpressOfShipData、条码不含 P-):Svolume = 数量 × 长 × 宽 × 高。
    • 配件"一单多货"(同快递单号多件配件):只保留体积最大的一件,其余置 0(避免重复计泡)。
  • 去重:同 OmsId 重复的明细只留最小 Id 的一条。

三、合并口径(对应"导出")——按 Expressno + Packageno 归并

工作平台 group by Expressno, Packageno,各列归并规则(照抄其 groupStr):

  • 去重逗号拼接:条形码 Barcode、商品ID shopproid(同包裹多件时拼成 A,B,C)。
  • 求和 sum:数量 Num、实称重量 Weight、体积 Svolume、对账重量 ReturnMinWeight。
  • 取最大 max:长 Slength、宽 Swidth、高 Sheight、RuleWeight、RuleVolume。
  • 取第一 min:其余全部(交易单号、发货时间、省市区、地址、收货人、电话、商品名称 SkuName、店铺、买家昵称、买家/卖家留言、仓库、供应商、货号、平台、付款时间、成品编码/名称、备注 等)。
  • 分组键:Expressno, Packageno。

直白说:一个快递单号发了多件不同货 → 合并视图里"条形码/商品ID"逗号拼接、数量/重量/体积加总、长宽高取最大、其它取任一件的值;明细视图里则拆成多行、每行 1/N。

四、派生显示字段(两口径查询时左连/计算)

  • 快递名称 ExNameDto:fys_express.ExpressName 去掉"一区""其他"后,取"-"前一段(无"-"则原值)。
  • 店铺名 SpName:快递为"发票邮政"时=买家留言(去逗号),否则=店铺名。
  • 发货批次 ExpreBatch:仅拼多多/京东——发货时间 0–12 点 → 日期_第一批,12–24 点 → 日期_第二批。
  • 换单前单号 FrontNum:fys_omsDataDay_ChangeOrder(按 Sourceno+Packageno, chgsgn=2)。
  • 地区 Area、ABpackage、CommodityExpress 等由维表补充。

五、筛选条件(合并/明细一致)——已核对工作平台 searchStr

条件 匹配方式 caiwu 现状
发货时间起/止 Shiptime 区间 ✅ 已实现
交易单号 Sourceno 精确 = ✅
快递单号 Expressno 精确 = ✅
条形码 BarCode 精确 = ✅(现为模糊,可改精确)
货号 ProCode 精确 = 待补
配货单号 Packageno 精确 = 待补
买家昵称 Buyernick 精确 = 待补
收货人 Receivername 精确 = 待补
电话 Receiverphone 精确 = 待补
快递公司 Express IN 多选 ✅ 已做多选
店铺 Shop / 仓库 Warehouse / 供应商 Supplier IN 多选 ✅ 已做多选
异常/加急/换单/快递标记 errsgn/jjsgn/chgsgn/kdsgn = 待补(可选)

工作平台快递/店铺/仓库/供应商本就是多选 IN —— 与刚做的勾选式多选一致。

六、暂缓项(依赖"计泡 + 报价规则",报价系统建好后再做)

NewWeight(计泡后重量)、NewVolue(计泡体积)、ReturnMinVolue、FreightNew(运费)、FreightRate(费率)、FreightFormula(公式)、JSFreight(结算运费)。 这些依赖各快递计泡规则(fys_DisExpressWeight 等)与报价,先留空,后续接。

七、落地计划(分阶段,均可脱离工作平台)

  1. 明细存储:同步改成"发货单 × 每件商品"一行;补 Count='1/N'、体积规则(数量×长×宽×高 / 配件只留最大件)。
  2. 双口径:仓储/页面支持 合并(默认) / 明细 切换;合并按 §三 规则 GROUP BY 实时归并;两个导出分别对应。
  3. 补齐筛选与派生:货号/配货单号/买家昵称/收货人/电话 单值筛选;ExNameDto/SpName/ExpreBatch/换单前单号 派生列。
  4. (后续)计泡 + 运费:报价系统就绪后接 §六。

本文据 JSCrm 源码 OmsDataDayService.cs(getPageList / searchStr / searchDetailStr / DownLoadShipmentData 归并段)整理,作为 caiwu 发货数据还原的对照基准。