?下单模块伪代码

11.27伪代码实现下单流程

 

def 下单():
    # 获取参数(前端或内存数据库)
    用户id=request.用户id
        if not 用户id:
            return '请登录'

    if not all(地址, 支付手段, 商品id&购买数量[列表] )
        return '信息不全'
    # 校验    
    try:
        获取地址,支付手段
    except:
        return '信息错误'    


    # 业务处理
    # 拼接订单id, 及其内容
    订单id = 年月日秒UUID+用户id
    总数量 = 0
    总价格 = 0
    运费 = 0
    支付方式 = 支付手段

    # 回滚点1
    设置事务点1
    try-事务:
        创建订单 = (
                ...
            )

        for 商品id,购买数量 in 商品id&购买数量[列表]:
            try:
                查询商品id
                # !设置悲观锁
                (**悲观锁**) 锁定该商品字段.
                (**乐观锁**) 保存库存数
            except:
                回滚节点1
                return '桑品不存在'
            通过商品id查询商品,得商品详情.

            查询商品库存.

            if 商品库存< 购买数量:
                回滚节点1
                return '商品库存不足'


            (**悲观锁**)
            直接修改库存
            (**乐观锁**)
            重新查询商品, 判断库存数是否与之前一致.

            if 一致:
                更新修改库存

            else:
                重试
                if 重试次数>设定次数:
                    回滚节点1
                    return 

            总价格 += 商品小计

        重新保存订单数据(总价格=总价格)

    except:
        回滚节点1
        return '下单失败,请重试'

    提交事务
    # 返回结果
    return '提交订单成功'

### 锁的选择:
#  服务器性能较好或者并发较低时, 可以使用乐观锁, 能充分利用资源
#  反之, 使用悲观锁.

  

posted @ 2019-11-28 15:24  Jrri  阅读(458)  评论(0编辑  收藏  举报