Vortmall使用文档

订单与配送

1. 多店铺拆单结算流程

说明: 购物车包含多个店铺商品时,一次结算生成一个父订单与多个子订单;各子订单独立计算运费、店铺级优惠与履约,顾客可一次性合并支付。

参与角色: 顾客、购物车服务、计价服务、订单服务、各店铺履约方。

flowchart TD
    multiShop([购物车含多店铺商品])
    groupByShop[按店铺分组待结算行]
    loopEach[逐店铺计算子单金额]
    shipEach[各店铺独立匹配运费模板]
    promoEach[各店铺独立适用店铺券或活动]
    sumParent[汇总父订单总金额与状态]
    singlePay[顾客一次支付父单或按产品拆分支付]
    multiShop --> groupByShop
    groupByShop --> loopEach
    loopEach --> shipEach
    shipEach --> promoEach
    promoEach --> sumParent
    sumParent --> singlePay

步骤说明:

  1. 顾客勾选跨店铺商品进入结算,系统按店铺维度拆分商品行。
  2. 每个店铺生成逻辑上的子订单草稿,包含该店 SKU、数量、小计。
  3. 各子订单分别匹配该店的运费模板、包邮条件与店铺优惠券。
  4. 父订单汇总所有子订单金额、运费与优惠后展示总应付。
  5. 提交时创建父订单记录,并批量创建子订单,关联父订单标识。
  6. 支付可按产品设计为「整单支付」或「按子单分别支付」,需与退款、售后策略一致。

特别说明:

  • 拆单后售后、物流、评价通常以子订单为粒度。
  • 平台券与跨店活动需在规则引擎中明确分摊方式。

2. 不同配送方式结算流程

说明: 根据业务选择的配送类型(物流配送、自提、同城配送、无需配送),结算页收集的字段、运费计算与履约节点不同,需在下单前完成校验。

参与角色: 顾客、地址服务、门店或自提点服务、计价与配送服务。

flowchart TD
    selType([选择配送方式])
    type1{deliveryType值}
    logistics[物流配送 1]
    pickup[自提 2]
    sameCity[同城配送 3]
    virtual[无需配送 4]
    addrReq[需详细收货地址]
    pickPoint[选自提点与联系人]
    cityAddr[同城地址与配送时段]
    noShip[不计算物流运费]
    selType --> type1
    type1 -->|1| logistics
    type1 -->|2| pickup
    type1 -->|3| sameCity
    type1 -->|4| virtual
    logistics --> addrReq
    pickup --> pickPoint
    sameCity --> cityAddr
    virtual --> noShip

步骤说明:

  1. 物流配送(1): 顾客填写或选择收货地址,按重量或件数匹配运费模板,计算运费与预计时效。
  2. 自提(2): 顾客选择自提门店或自提点、提货人及电话,通常不产生快递运费,可能产生打包费(依配置)。
  3. 同城配送(3): 在指定城市范围内填写地址或地图选点,可能有时段与起送价、同城运费规则。
  4. 无需配送(4): 适用于虚拟商品或线下已履约场景,不展示物流运费,地址可为可选或简化。
  5. 切换配送方式时,系统重新校验商品是否支持该方式并重算金额。
  6. 提交订单时固化配送类型与相关快照,供仓储与配送接单使用。

特别说明:

  • 同一父订单下若多子订单,各子订单可配置不同配送方式时需分别校验。
  • 自提与同城可能涉及营业时间与库存地点,需提前校验可履约性。

3. 管理端改价流程

说明: 后台管理员仅可对未付款(待支付,PENDING)订单调整成交金额,包括改商品折扣、改运费等;改价后顾客侧应付金额同步更新,需重新支付或继续支付流程。

参与角色: 平台管理员、订单服务、权限与审计、顾客(确认支付)。

flowchart TD
    adminOpen([管理员打开订单详情])
    checkStatus{订单是否为PENDING}
    rejectEdit[拒绝改价并提示]
    editFields[修改运费或折扣等]
    validateRule[校验改价权限与幅度]
    recalc[重算订单应付金额]
    saveLog[保存操作日志]
    notifyUser[通知顾客订单金额变更]
    payContinue[顾客按新金额支付]
    adminOpen --> checkStatus
    checkStatus -->|否| rejectEdit
    checkStatus -->|是| editFields
    editFields --> validateRule
    validateRule --> recalc
    recalc --> saveLog
    saveLog --> notifyUser
    notifyUser --> payContinue

步骤说明:

  1. 管理员在后台查询目标订单,仅当状态为未付款(PENDING)时允许改价入口。
  2. 已支付、已关闭或已取消订单不得修改价格,避免账务不一致。
  3. 管理员调整项目可包括:行项目折扣、整单优惠、运费改价等(以产品能力为准)。
  4. 系统按权限校验改价幅度、是否需要二次审批(若启用)。
  5. 保存后重算应付总额,并记录操作人、时间与改价前后快照。
  6. 通知顾客(站内信、短信等),顾客在待支付订单中按新金额完成支付。

特别说明:

  • 改价与优惠券、积分、余额的互斥关系需在系统中定义,避免重复让利。
  • 若已生成支付单,可能需要关闭旧支付单并按新金额重新发起。

4. 运费计算流程

说明: 每个店铺独立绑定运费模板;根据模板的计费方式(按重量、按件数等)与免邮条件计算子订单运费,多店铺场景下各自计算后汇总。

参与角色: 计价服务、运费模板配置、商品属性(重量或件数)、地址与区域规则。

flowchart TD
    calcStart([开始计算某子订单运费])
    loadTpl[加载店铺运费模板]
    getGoods[汇总行项目重量或件数]
    matchRegion[匹配收货地址对应运费区域]
    ruleType{计费方式}
    byWeight[按重量阶梯计费]
    byPiece[按件数阶梯计费]
    freeCheck{是否满足包邮条件}
    freeFee[运费为0]
    addShip[计入子订单运费]
    calcStart --> loadTpl
    loadTpl --> getGoods
    getGoods --> matchRegion
    matchRegion --> ruleType
    ruleType -->|按重量| byWeight
    ruleType -->|按件数| byPiece
    byWeight --> freeCheck
    byPiece --> freeCheck
    freeCheck -->|是| freeFee
    freeCheck -->|否| addShip

步骤说明:

  1. 针对每个子订单,读取所属店铺启用的运费模板及优先级规则。
  2. 汇总该子订单内各行的计费重量或件数(含 SKU 属性与购买数量)。
  3. 根据收货地址解析省市区,匹配模板中的区域与运费区间。
  4. 若模板为按重量,则按重量阶梯取首重、续重费用;若为按件数,则按件数阶梯计费。
  5. 判断是否满足包邮条件(如满额包邮、满件包邮、指定区域包邮)。
  6. 满足则该子订单运费记为零;否则将计算出的运费加入子订单应付。
  7. 多店铺时重复上述过程,父订单展示运费汇总或分列展示。

特别说明:

  • 偏远地区可加收附加费,需在区域表中预先配置。
  • 与「不同配送方式」结合时,仅对需要物流运费的类型执行本流程;自提、无需配送等走对应分支。

文档版本说明:流程与字段以实际部署的配置与版本为准;上线前请结合合同与实施清单做验收。

订单与配送
请输入搜索内容
大纲
1. 多店铺拆单结算流程
2. 不同配送方式结算流程
3. 管理端改价流程
4. 运费计算流程