要如何保证大礼包发货的完整性?
1. 背景
今早,接到一个新需求,跟同事讨论了一下,确实也没有想到什么太好的解决方案,希望找社区的大佬们指点一二
2. 场景
1、一个抢购活动;
1、用户支付成功之后,会有一个大礼包要派发;
2、这个大礼包包含了 =》 9个商品;
3、商品类型(采购导入的券码、实物、第三方接口直充票券);
3. 疑问点
1、库存的问题,逻辑上的限制处理(只限制大礼包库存 还是 细分到商品的库存)
2、如何保证商品的发货流程,第三方接口出现异常,应该怎么处理?
3、漏发的情况,是应该做退款处理,还是事后补发?
4、是否使用事务,可事务回滚,没法处理第三方已经充值的问题呢
5、9个商品,感觉代码会特别臃肿,感觉代码怎么简化好些?
4. 个人思路
1、下单时只判断大礼包的库存,发货流程不再判断商品的库存,抢购前运营人员需保证库存的配置问题
2、不做退款处理,事后写脚本补发
3、伪代码
public function delivery(Order $order)
{
$products = colletct();
foreach($products as $product){
// 实物商品
if ($product->isNormal()) {
return $this->deliveryOfNormalGoods($order, $product);
}
// 券码商品
if ($product->isCode()) {
return $this->deliveryOfCodeGoods($order, $product);
}
// 权益商品
if ($product->isBenefit()) {
return $this->deliveryOfBenefitGoods($order, $product);
}
}
}
感觉你在说一会即将开始的小米社区大礼包 :grin:
3.1是需求,不是技术问题,是PM要解决的。
订单设计是总单到分单模式,支付订单和商品订单是两个维度且关联。
支付行为是为了支付某一笔商品订单。
预扣减库存还是支付后扣减库存,这也是PM决定的。
支付后逻辑 是
$总单->subOrders()->each( function ( $subOrder ) { GoodsAbstract::factory($subOrder->goods->type)->delivery()
把不同类型的商品按照抽象出不同的分拆逻辑接口。不同类型商品实现各自的逻辑。
3.1大礼包可以先由运营在后台创建并预减少礼包商品库存(价格这些可以先计算出来,就不用处理9个商品了,因为库存已经减少了,直接扣钱就行,后面删除礼包,按大礼包剩余库存返回商品数量就行了)
3.2第三方接口出现异常可以用户手动退款,或者补发都可以.
3.3第三方充值无法执行退款操作那只能补发商品了.