Пример #1
0
def make_order(request):
    if request.method == 'POST':
        user = request.user
        data = {
            'code': 200,
            'msg': '请求成功',
        }
        if user.id:
            o_num = get_order_num()
            order = OrderModel.objects.create(user=user,
                                              o_num=o_num,
                                              o_status=0)
            # cart 表示的就是购物车里的商品
            carts = CartModel.objects.filter(user=user,
                                             is_select=True)
            # 遍历购物车 让所有商品和订单建立关系
            for cart in carts:
                OrderGoodsModel.objects.create(goods_num=cart.c_num,
                                               goods=cart.goods,
                                               order=order)

            carts.delete()
            data['order_id'] = order.id

            return JsonResponse(data)
        data['code'] = 1001
        data['msg'] = '用户未登录'
        return JsonResponse(data)
Пример #2
0
def submit_order(reuqest):
    if reuqest.method == 'POST':
        user = reuqest.user
        carts = Cart.objects.filter(user=user, is_select=True)
        o_num = get_order_num()
        order = Order.objects.create(user=user, o_num=o_num)
        for cart in carts:
            OrderGoods.objects.create(order=order, goods=cart.goods, goods_num=cart.c_num)
        carts.delete()
        return JsonResponse({'code': 200})
Пример #3
0
def order(request):
    if request.method == 'POST':
        user = request.user
        # 那些商品需要下单
        carts = CartModel.objects.filter(user=user, is_select=True)
        # 创建订单
        o_num = get_order_num()
        order = OrderModel.objects.create(user=user, o_num=o_num)
        # 创建订单详情信息
        for cart in carts:
            OrderGoodsModel.objects.create(order=order,
                                           goods=cart.goods,
                                           goods_num=cart.c_num)
        # 删除购物车中已经下单的商品信息
        carts.delete()

        return JsonResponse({'code': 200, 'order_id': order.id})
Пример #4
0
def commit(request):
    # 提交订单
    # 判断是否登录
    user = request.user
    if not user.is_authenticated():
        return JsonResponse({'res': 0, 'errmsg': '请登录'})

    # 获取数据
    # sku_ids:  '1,2,3'
    sku_ids = request.POST.get('sku_ids')
    addr_id = request.POST.get('addr_id')
    pay_method = request.POST.get('pay_method')

    # 检验数据
    if not all([sku_ids, addr_id, pay_method]):
        return JsonResponse({'res': 1, 'errmsg': '数据不完整'})

    if pay_method not in OrderInfo.PAY_METHODS.keys():
        return JsonResponse({'res': 2, 'errmsg': '选择的支付方式错误'})

    # 检查地址
    try:
        addr = Address.objects.get(id=addr_id)
    except Exception:
        return JsonResponse({'res': 3, 'errmsg': '收货地址不正确'})

    # 创建节点
    save_id = transaction.savepoint()
    # 创建订单
    try:
        # 订单id:时间+用户id:20180620182030+id
        order_id = get_order_num()

        # 运费
        transit_price = 0

        # 总数和总金额
        total_count = 0
        total_price = 0

        # 创建一条订单记录
        order = OrderInfo.objects.create(order_id=order_id,
                                         user=user,
                                         addr=addr,
                                         pay_method=pay_method,
                                         total_count=total_count,
                                         total_price=total_price,
                                         transit_price=transit_price)

        sku_ids = sku_ids.split(',')
        for sku_id in sku_ids:
            for i in range(3):
                # 乐观锁
                # 当数据更新的的时候,采取判断此数据是否更改
                try:
                    sku = GoodsSKU.objects.get(id=sku_id)
                except GoodsSKU.DoesNotExist:
                    # 回滚到节点
                    transaction.savepoint_rollback(save_id)
                    return JsonResponse({'res': 4, 'errmsg': '商品不存在'})

                # 从redis中获取用户所要购买的商品数量
                count = CartModel.objects.filter(user=user, is_select=True)

                # 想order_goods表中添加一条记录
                OrderGoods.objects.create(order=order,
                                          sku=sku,
                                          count=count,
                                          price=sku.price)

                # 更新商品库存和销量
                orgin_stock = sku.stock
                new_stock = orgin_stock - int(count)
                new_sales = sku.sales + int(count)

                # 返回受影响的行数
                res = GoodsSKU.objects.filter(id=sku_id, stock=orgin_stock).update(stock=new_stock, sales=new_sales)
                if res == 0:
                    # 如果受影响的行数为0,则说明此数据已经被修改,重新进行库存更新
                    # 防止并发
                    if i == 2:
                        # 尝试三次
                        transaction.savepoint_rollback(save_id)
                        return JsonResponse({'res': 4, 'errmsg': '商品库存不足'})
                    continue

                # 累加计算订单商品的总数量和总价格
                amount = sku.price * int(count)
                total_count += int(count)
                total_price += amount

                # 跳出循环
                break

            # 更新订单信息表中的商品的总数量和总价格
            order.total_price = total_price
            order.total_count = total_count
            order.save()

    except Exception:
        transaction.savepoint_rollback(save_id)
        return JsonResponse({'res': 7, 'errmsg': '下单失败'})

    # 提交到数据库
    transaction.savepoint_commit(save_id)

    # 删除购物车中已经下单的商品信息
    order.delete()

    return JsonResponse({'res': 5, 'errmsg': '创建成功'})