11231

 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 #  反之, 使用悲观锁.

猜你喜欢

转载自www.cnblogs.com/jrri/p/12099537.html