申请售后

待发货状态

  • 同步(主逻辑):

    1. 退款
    2. 创建售后记录
    3. 获取商品,更新状态
    4. 更新拆分表
  • 异步(拆单):

    1. 如果是一个,直接更新订单主状态

    2. 如果是多个,复制一个售后的订单,记录订单主键和复制订单主键关系

    3. 复制拆分的商品,挂载副订单

    4. 维护副商品和商品的关系(Id:复制的,Parent Id :真的的商品主键)

    5. 当全部拆单,删除副订单挂载的商品,主订单状态变更,删除副订单,删除订单主键和复制订单主键关系

    6. 删除副商品和商品的关系。

  • 异步(订单历史):

    1. 当全部跑到售后的时候,如果是待发货触发,则更新待发货 -> 售后;如果是待收货触发,则更新待收货- >售后

      注意,这里的异步必须先执行,拿到当前订单的状态,不然执行异步拆单,状态会变。

  • 异步(订单商品历史)

    1. 记录当前商品售后记录,状态待处理

待收货状态

同上逻辑,售后增加换货,退货退款,退款逻辑

取消申请

  • 同步(主逻辑):

    1. 取消的商品状态回退,回退订单主状态
    2. 更新售后表,商品状态取消售后
    3. 拆分表更新
    4. 传参加入是取消申请的操作标识
    5. 不管是单个还是多个,只要主订单状态已经是售后,查询订单历史状态,主订单状态回退取消前状态(异步订单历史:这里记录历史变更)
  • 异步(合单):

    1. 复制主订单,更新复制订单的状态为售后
    2. 更新拆分表的主订单和副订单主键关系
    3. 拿到当前未取消的售后商品主键,查询这些商品
    4. 复制这些商品,挂载副订单
    5. 售后商品的主键在拆分表数量为0,则说明全部取消申请了,删除副订单的商品,删除副商品和商品关系表,删除副订单,更新拆分表的订单主键和副订单主键的关系。
  • 异步(订单历史):

    1. 当售后的商品全部取消,订单主状态记录历史,先执行异步合单逻辑,回退之前状态,记录开始状态:售后状态 -> 回退的状态

    2. 这里有问题,可能主状态是待发货,其中一个在售后,这个时候取消,历史不变。(改成同步的主逻辑)

  • 异步(订单商品历史)

    1. 记录当前商品售后记录,状态待处理

表结构设计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-- chh_mmplanet_order.chh_order_combination_split definition

CREATE TABLE `chh_order_combination_split` (
`id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '主键',
`order_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '订单主键',
`order_split_sale_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '拆分订单主键',
`order_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '订单编码',
`combination_count` int DEFAULT NULL COMMENT '组合数量',
`wait_send_id` varchar(3000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '待发货的商品主键',
`wait_send_count` int DEFAULT '0' COMMENT '待发货的数量',
`wait_receive_id` varchar(3000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '待收货的商品主键',
`wait_receive_count` int DEFAULT '0' COMMENT '待收货的商品数量',
`after_sale_id` varchar(3000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '售后的商品主键',
`after_sale_count` int DEFAULT '0' COMMENT '售后的商品数量',
`cancel_id` varchar(3000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '取消的商品主键',
`cancel_count` int DEFAULT '0' COMMENT '取消的商品数量',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='订单状态组合拆分明细表';