zoukankan      html  css  js  c++  java
  • ?下单模块伪代码

    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 '提交订单成功'
    
    ### 锁的选择:
    #  服务器性能较好或者并发较低时, 可以使用乐观锁, 能充分利用资源
    #  反之, 使用悲观锁.
    

      

  • 相关阅读:
    Eclipse快捷键大全(转载)
    为什么你应该(从现在开始就)写博客 via刘未鹏
    Hadoop琐记
    详解MANIFEST.MF文件
    脚本语言琐记
    因为此版本的应用程序不支持其项目类型(.csproj) .
    求助:关于Activator.CreateInstance
    打印网页指定区域
    CSS中的行为——expression
    ASP.NET使用mysql数据库
  • 原文地址:https://www.cnblogs.com/jrri/p/11950311.html
Copyright © 2011-2022 走看看