generate:初始化订单,生成待审核订单
- 校验用户是否存在以及是否被禁用
- 校验商品,是否已下架,选购数量是否正,不能为0,不能为null并不能操作5件,检查商品库存,门店会员则检查门店库存
- 预售商品,检查预售时间、预售渠道是否满足配置要求
- 组装满足条件的商品数据结构
- 处理收件人,获取默认收件人信息,如果没有默认收件人则获取收件人第一条数据
- 获取优惠券列表,查询此用户所有满足该商品及渠道的优惠券信息,同时将优惠券的数据封装,并筛选优惠可使用平台及跳转类型。优惠券总可使用次数及剩余可用次数,如果未传值默认为1次
- 根据前端传过来的数据包装需要的数据
- 获取支付方式,配送方式,目前支付方式包括,支付宝付款,微信付款,以及货到付款。配送方式为快递
- 划分订单类型为普通订单或者内卖订单
- 生成订单数据结构
- 获取会员折扣,白金卡会员9折,内卖、预售商品不享受会员折扣,保存订单基本数据。门店会员下单,订单号前缀为"RCK"且不可享受白金会员折扣
- 添加订单子项数据
- 购物车满赠
- 计算订单实际应付金额
- 保存订单,订单状态为"等待审核"保存订单子项
calculateAmountV2:计算金额
- 获取收件人id,支付方式id,配送方式id
- 校验用户,是否登录或者是否被禁用
- 通过订单号获取订单信息,通过收件人id获取收件人信息
- 组装订单 需要的数据结构
- 处理支付方式和配送方式
- 通过地区计算运费,内卖订单金额小于99的运费为12元
- 设置支付方式名称和支付方式类型,0为网上支付,1为货到付款
- 处理订单状态,如果是待审核订单或者门店订单,订单子项amount赋值给amountPaid
- 地址过滤
- 优惠券code不为null不是内卖订单,计算优惠券金额。优惠券分为礼品券、现金券、折扣券。
- 处理优惠券对应的商品类型,商品分为其他商品、正价商品、折扣商品
- 处理不使用优惠券的订单
- 计算订单实际支付金额
- 处理预售商品,如果订单类型为预售商品且订单状态不是等待支付尾款,直接返回尾款金额;如果订单类型是预售商品且订单状态为支付尾款,预售订单 ios 列表切换支付方式需要重新计算尾款,调用create计算尾款方法;普通商品计算金额,商品价格加手续费加运费加tax减促销金额减优惠券金额减抵扣价;礼品券计算
- 更新订单
create:清空购物车,扣减库存,优惠券扣减
- 校验用户,是否登录或者是否被禁用
- 处理订单状态不是等待发货的订单
- 过滤地区更新地区
- 修改订单过期时间,只有第一次点支付或者暂缓支付,设置过期时间,如果后台没有配置支付方式过期时间,默认2小时过期,后边再点付款不会变更过期时间
- 判断收获区域是否支持配送
- 修改订单状态,如果货到付款,则修改订单状态为等待发货,过期时间设为null;如果是预售订单且订单状态不是等待支付尾款,状态改为等待支付定金,从新计算金额;如果订单是预售且订单状态是等待支付尾款时,更新订单状态为等待支付尾款,过期时间设为null,其他情况直接修改订单状态为等待发货
- 扣减库存,如果是货到付款或者0元单,或者订单未分配库存,发送商品销量的消息,检查库存,更新库存。修改IsAllocatedStock为true;
- 扣减优惠券,同时修改setIsUseCouponCode字段
- 清空购物车
- 发送定时释放库存消息,暂缓支付不扣减库存
- 更新createDate,更新订单
cancel:取消订单
1、释放优惠券
2、扣减累计消费(整单)
3、更新订单状态(只能取消一次)
订单子项:
优惠券金额:amount - amoutPaid
会员折扣金额 price - amount
优惠券分摊金额
现金券
先计算权重,商品金额(price)*商品数量(quantity)/商品总金额(total)
再计算分摊到各个商品的金额, 优惠券金额*权重,最后订单子项amount - 优惠券权重金额
折扣券
amount_paid = amount - 商品金额(price)*商品数量(quantity)*优惠券折扣
预售