标签:直接 内存数据 try 数据 方式 获取 选择 商品 订单
1 def 下单(): 2 # 获取参数(前端或内存数据库) 3 用户id=request.用户id 4 if not 用户id: 5 return ‘请登录‘ 6 7 if not all(地址, 支付手段, 商品id&购买数量[列表] ) 8 return ‘信息不全‘ 9 # 校验 10 try: 11 获取地址,支付手段 12 except: 13 return ‘信息错误‘ 14 15 16 # 业务处理 17 # 拼接订单id, 及其内容 18 订单id = 年月日秒UUID+用户id 19 总数量 = 0 20 总价格 = 0 21 运费 = 0 22 支付方式 = 支付手段 23 24 # 回滚点1 25 设置事务点1 26 try-事务: 27 创建订单 = ( 28 ... 29 ) 30 31 for 商品id,购买数量 in 商品id&购买数量[列表]: 32 try: 33 查询商品id 34 # !设置悲观锁 35 (**悲观锁**) 锁定该商品字段. 36 (**乐观锁**) 保存库存数 37 except: 38 回滚节点1 39 return ‘桑品不存在‘ 40 通过商品id查询商品,得商品详情. 41 42 查询商品库存. 43 44 if 商品库存< 购买数量: 45 回滚节点1 46 return ‘商品库存不足‘ 47 48 49 (**悲观锁**) 50 直接修改库存 51 (**乐观锁**) 52 重新查询商品, 判断库存数是否与之前一致. 53 54 if 一致: 55 更新修改库存 56 57 else: 58 重试 59 if 重试次数>设定次数: 60 回滚节点1 61 return 62 63 总价格 += 商品小计 64 65 重新保存订单数据(总价格=总价格) 66 67 except: 68 回滚节点1 69 return ‘下单失败,请重试‘ 70 71 提交事务 72 # 返回结果 73 return ‘提交订单成功‘ 74 75 ### 锁的选择: 76 # 服务器性能较好或者并发较低时, 可以使用乐观锁, 能充分利用资源 77 # 反之, 使用悲观锁.
标签:直接 内存数据 try 数据 方式 获取 选择 商品 订单
原文地址:https://www.cnblogs.com/jrri/p/12099537.html