Esempio n. 1
0
    def post(self, request):
        # 接收数据
        data = json.loads(request.body)
        token = data['token']

        # 参数校验
        if not all([token]):
            return Response({'msg': '数据不完整'})

        # 获取用户open_id
        open_id = PublicFunction().getOpenIdByToken(token)
        # 校验用户
        if open_id:
            try:
                wx_user = WxUser.objects.get(open_id=open_id)
            except:
                return Response({'msg': '用户不存在'})
            try:
                # 查询未支付状态的订单
                order_info = OrderInfo.objects.filter(wx_user=wx_user,
                                                      state=0,
                                                      is_delete=False)
                if order_info:
                    for order in order_info:
                        # 判断是否超时
                        if PublicFunction.timeout(order.create_time):
                            order.state = 6
                            order.cancel_time = time.time
                            order.save()

            except:
                return Response({'msg': '无订单信息'})
Esempio n. 2
0
    def post(self, request):
        # 接收数据
        data = json.loads(request.body)
        order_id = data['order_id']
        token = data['token']

        # 参数校验
        if not all([order_id, token]):
            return Response({'msg': '数据不完整'})

        # 获取用户open_id
        open_id = PublicFunction().getOpenIdByToken(token)

        data = {}

        # 校验用户
        if open_id:
            try:
                wx_user = WxUser.objects.get(open_id=open_id)
            except:
                return Response({'msg': '用户不存在'})
            try:
                order_info = OrderInfo.objects.get(order_id=order_id)
            except:
                return Response({'msg': '订单不存在'})
            try:
                order_list = OrderList.objects.filter(
                    wx_user=wx_user, order_info=order_info,
                    is_delete=False).values()
                data['order_list'] = order_list
            except:
                return Response({'msg': '获取订单清单失败'})
        return Response(data)
Esempio n. 3
0
    def post(self, request):
        # 接收数据
        data = json.loads(request.body)
        order_info_id = data['order_info_id']
        token = data['token']

        # 参数校验
        if not all([order_info_id, token]):
            return Response({'msg': '数据不完整'})

        # 获取用户open_id
        open_id = PublicFunction().getOpenIdByToken(token)

        # 校验用户
        if open_id:
            try:
                wx_user = WxUser.objects.get(open_id=open_id)
            except:
                return Response({'msg': '用户不存在'})
            try:
                order_info = OrderInfo.objects.get(id=order_info_id)
                order_info.is_delete = True
                order_info.save()
            except:
                return Response({'msg': '订单不存在'})
        return Response({'msg': '删除订单成功'})
Esempio n. 4
0
    def post(self, request):
        data = json.loads(request.body)
        token = data['token']
        order_info_id = data['order_info_id']
        returns_num = data['returns_num']

        # 参数校验
        if not all([token, order_info_id, returns_num]):
            return Response({'msg': '数据不完整'})

        # 获取用户open_id
        open_id = PublicFunction().getOpenIdByToken(token)
        # 校验用户
        if open_id:
            try:
                wx_user = WxUser.objects.get(open_id=open_id)
            except:
                return Response({'msg': '用户不存在'})
            try:
                order_info = OrderInfo.objects.get(id=order_info_id)
                order_info.returns_number = returns_num
                order_info.state = 5
                order_info.save()
            except:
                return Response({'msg': '订单不存在'})
        return Response({'msg': '申请退款成功'})
Esempio n. 5
0
    def post(self, request):
        data = json.loads(request.body)
        token = data['token']
        order_info_id = data['order_info_id']

        # 参数校验
        if not all([token, order_info_id]):
            return Response({'msg': '数据不完整'})

        # 获取用户open_id
        open_id = PublicFunction().getOpenIdByToken(token)
        # 校验用户
        if open_id:
            try:
                wx_user = WxUser.objects.get(open_id=open_id)
            except:
                return Response({'msg': '用户不存在'})
            try:
                order_info = OrderInfo.objects.get(id=order_info_id)
                order_info.state = 4
                order_info.complete_time = time.strftime('%Y-%m-%d- %H:%M:%S')
                order_info.save()
            except:
                return Response({'msg': '订单不存在'})
        return Response({'msg': '订单已确认'})
Esempio n. 6
0
    def post(self, request):
        '''购物车记录添加'''

        # 接收数据
        data = json.loads(request.body)
        # 获取要删除的商品id列表
        commodityId_list = data['commodityId_list']
        token = data['token']

        # 数据校验
        if not all([commodityId_list, token]):
            return Response({'msg': '数据不完整'})

        # 校验商品是否存在
        try:
            for commodity_id in commodityId_list:
                commodity = Commodity.objects.get(id=commodity_id)
        except commodity.DoesNotExist:
            return Response({'msg': '商品不存在'})


        # 业务处理:删除购物车记录
        open_id = PublicFunction().getOpenIdByToken(token)
        conn = get_redis_connection('Cart')
        cart_key = 'cart_%s' % open_id
        # 删除商品
        conn.hdel(cart_key, *commodityId_list)

        # 计算用户购物车商品的条目数
        total_count = conn.hlen(cart_key)

        return Response({'msg': '删除成功', 'total_count': total_count})
Esempio n. 7
0
    def get(self, request, token):
        # 参数校验
        if not all([token]):
            return Response({'msg': '数据不完整'})

        # 获取用户open_id
        open_id = PublicFunction().getOpenIdByToken(token)
        data_list = []

        # 校验用户
        if open_id:
            try:
                wx_user = WxUser.objects.get(open_id=open_id)
            except:
                return Response({'msg': '用户不存在'})
            try:
                user_card_list = UserCard.objects.filter(wx_user=wx_user)
                for user_card in user_card_list:
                    card = Card.objects.filter(id=user_card.card.id).values()
                    data_list.append({
                        'card_token': user_card.card_token,
                        'card': card,
                        'is_use': user_card.is_use
                    })
            except Exception as e:
                print(e)
                return Response({'msg': '暂无优惠券'})

        return Response({'card_list': data_list})
Esempio n. 8
0
    def get(self, request,token):
        '''显示'''
        # 获取登录的用户
        open_id = PublicFunction().getOpenIdByToken(token)
        # 获取用户购物车的商品信息
        conn = get_redis_connection('Cart')
        cart_key = 'cart_%s' % open_id
        # {'商品id':商品数量}
        cart_dict = conn.hgetall(cart_key)
        if cart_dict:
            # 遍历获取商品的信息
            commodity_list = []

            for commodity_id, count in cart_dict.items():
                # 根据商品的id获取商品的信息
                commodity = Commodity.objects.get(id=commodity_id)
                title = Goods.objects.get(id=commodity.goods_id).title
                commodity_list.append({
                    'id':commodity.id,
                    'title':title,
                    'num':int(count),
                    'price':commodity.price,
                    'selected':False,
                    'image':commodity.image.url,
                    'color':commodity.color,
                    'code':commodity.code,
                    'stock':commodity.stock
                })

            data = {'commodity_list': commodity_list}
            return Response(data)
        return Response({'msg':'购物车无商品'})
Esempio n. 9
0
 def post(self, request):
     # 获取请求数据
     data = request.body
     data = json.loads(data)
     code = data['code']
     # 获取open_id、session_key
     data = PublicFunction().getOpenIdAndSessionKey(code)
     open_id = data[0]
     session_key = data[1]
     # 如果获取的open_id不为空
     if open_id:
         # 查找是否存在该wx用户
         try:
             # 存在用户,直接返回token
             wx_user = WxUser.objects.get(open_id=open_id)
             data = PublicFunction().createRedisToken(open_id, session_key)
         except:
             # 创建用户,返回token
             WxUser.objects.create(open_id=open_id).save()
             data = PublicFunction().createRedisToken(open_id, session_key)
     return Response(data)
Esempio n. 10
0
 def get(self, request, token):
     # 获取open_id
     open_id = PublicFunction().getOpenIdByToken(token)
     if open_id:
         try:
             wx_user = WxUser.objects.get(open_id=open_id)
         except:
             return Response({'msg': '用户不存在'})
         address_list = Address.objects.filter(
             wx_user=wx_user,
             is_delete=False).order_by('-is_default').values()
         return Response({'address_list': address_list})
     return Response({'err': 'no_user'})
Esempio n. 11
0
    def get(self, request, token):

        # 参数校验
        if not all([token]):
            return Response({'msg': '数据不完整'})

        # 获取用户open_id
        open_id = PublicFunction().getOpenIdByToken(token)

        data_list = []
        # 校验用户
        if open_id:
            try:
                wx_user = WxUser.objects.get(open_id=open_id)
            except:
                return Response({'msg': '用户不存在'})
            try:
                '''
                {
                    order_list{
                        ...
                        order_info:{
                            ...
                            
                        }
                        商品清单列表{
                                [商品,商品]
                        }
                    }
                }
                '''
                order_info = OrderInfo.objects.filter(
                    wx_user=wx_user, is_delete=False).order_by('-create_time')

                for order in order_info:
                    orders = OrderList.objects.filter(
                        order_info=order).values()
                    data = {
                        'order_info_id': order.id,
                        'order_id': order.order_id,
                        'create_time': str(order.create_time)[0:19],
                        'state': order.state,
                        'total_count': order.total_count,
                        'total_price': order.total_price,
                        'order_list': orders,
                    }
                    data_list.append(data)
            except:
                return Response({'msg': '无订单信息'})

        return Response(data_list)
Esempio n. 12
0
    def post(self, request):

        # 接收数据
        data = json.loads(request.body)
        card_id = data['card_id']
        token = data['token']

        # 参数校验
        if not all([card_id, token]):
            return Response({'msg': '数据不完整'})

        # 获取用户open_id
        open_id = PublicFunction().getOpenIdByToken(token)
        str32 = PublicFunction().randomStr()

        # 校验用户
        if open_id:
            try:
                wx_user = WxUser.objects.get(open_id=open_id)
            except:
                return Response({'msg': '用户不存在'})
            try:
                card = Card.objects.get(id=card_id)
                user_card = UserCard.objects.filter(wx_user=wx_user, card=card)
                if (len(user_card) == 0):
                    UserCard.objects.create(card_id=card_id,
                                            wx_user=wx_user,
                                            card_token=str32).save()
                else:
                    if (len(user_card) >= card.get_count):
                        return Response({'msg': '您已领取过了!'})
                    else:
                        UserCard.objects.create(card_id=card_id,
                                                wx_user=wx_user,
                                                card_token=str32).save()
            except:
                return Response({'msg': '优惠券不存在'})
        return Response({'msg': '领取成功'})
Esempio n. 13
0
    def post(self, request):
        '''购物车记录添加'''

        # 接收数据
        data = json.loads(request.body)
        commodity_id = data['commodity_id']
        count = data['commodity_count']
        token = data['token']

        # 数据校验
        if not all([commodity_id, count,token]):
            return Response({'msg': '数据不完整'})

        # 校验添加的商品数量
        try:
            count = int(count)
        except Exception as e:
            return Response({'msg': '商品数目出错'})

        # 校验商品是否存在
        try:
            commodity = Commodity.objects.get(id=commodity_id)
        except commodity.DoesNotExist:
            return Response({'msg': '商品不存在'})

        # 业务处理:添加购物车记录
        open_id = PublicFunction().getOpenIdByToken(token)
        conn = get_redis_connection('Cart')
        cart_key = 'cart_%s' % open_id
        # 先尝试获取commodity_id的值 hget cart_key 属性
        # 如果commodity_id在hash中不存在,hget返回None
        cart_count = conn.hget(cart_key, commodity_id)
        if cart_count:
            # 累加购物车中的商品数目
            count += int(cart_count)
        # 校验商品库存
        if count > commodity.stock:
            return Response({'msg': '商品库存不足'})

        # 设置hash中sku_id对应的值
        conn.hset(cart_key, commodity_id, count)

        # 计算用户购物车商品的条目数
        total_count = conn.hlen(cart_key)

        # 返回应答
        return Response({'msg': '添加成功', 'total_count': total_count})
Esempio n. 14
0
    def get(self, request, token):
        # 参数校验
        if not all([token]):
            return Response({'msg': '数据不完整'})

        # 获取用户open_id
        open_id = PublicFunction().getOpenIdByToken(token)

        # 校验用户
        if open_id:
            try:
                wx_user = WxUser.objects.get(open_id=open_id)
                user_card = UserCard.objects.filter(wx_user=wx_user,
                                                    is_use=False).values()
            except:
                return Response({'msg': '用户不存在'})
        return Response({'data': user_card})
Esempio n. 15
0
    def post(self, request):

        # 接收数据
        data = json.loads(request.body)
        commodity_id = data['commodity_id']
        count = data['commodity_count']
        token = data['token']

        # 数据校验
        if not all([commodity_id, count, token]):
            return Response({'msg': '数据不完整'})

        # 校验添加的商品数量
        try:
            count = int(count)
        except Exception as e:
            return Response({'msg': '商品数目出错'})

        # 校验商品是否存在
        try:
            commodity = Commodity.objects.get(id=commodity_id)
        except commodity.DoesNotExist:
            return Response({'msg': '商品不存在'})



        # 业务处理:更新购物车记录
        open_id = PublicFunction().getOpenIdByToken(token)
        conn = get_redis_connection('Cart')
        cart_key = 'cart_%s' % open_id


        # 校验商品库存
        if count > commodity.stock:
            return Response({'msg': '商品库存不足'})

        # 更新
        conn.hset(cart_key, commodity_id, count)


        # 计算用户购物车商品的条目数
        total_count = conn.hlen(cart_key)

        # 返回应答
        return Response({'msg': '更新成功', 'total_count': total_count})
Esempio n. 16
0
 def post(self, request):
     # 获取请求数据
     data = request.body
     data = json.loads(data)
     token = data['token']
     address_id = data['address_id']
     # 获取open_id
     open_id = PublicFunction().getOpenIdByToken(token)
     if open_id:
         try:
             wx_user = WxUser.objects.get(open_id=open_id)
         except:
             return Response({'msg': '用户不存在'})
         Address.objects.filter(
             Q(wx_user=wx_user) & Q(is_default=True)
             & Q(is_delete=False)).update(is_default=False)
         Address.objects.filter(id=address_id).update(is_default=True)
         return Response({'msg': 'success'})
     return Response({'err': 'no_user'})
Esempio n. 17
0
    def get(self, request, token):

        # 参数校验
        if not all([token]):
            return Response({'msg': '数据不完整'})

        # 获取用户open_id
        open_id = PublicFunction().getOpenIdByToken(token)

        # 校验用户
        if open_id:
            try:
                wx_user = WxUser.objects.get(open_id=open_id)
            except:
                return Response({'msg': '用户不存在'})
            try:
                card = Card.objects.filter(is_delete=0).values()
            except:
                return Response({'msg': '暂无优惠券活动'})

        return Response({'card_list': card})
Esempio n. 18
0
    def post(self, request):
        # 接收数据
        data = json.loads(request.body)
        phone = data['phone']
        token = data['token']

        # 参数校验
        if not all([phone, token]):
            return Response({'msg': '数据不完整'})

        # 获取用户open_id
        open_id = PublicFunction().getOpenIdByToken(token)

        # 校验用户
        if open_id:
            try:
                wx_user = WxUser.objects.get(open_id=open_id)
                wx_user.phone = phone
                wx_user.save()
            except:
                return Response({'msg': '用户不存在'})
        return Response({'msg': '修改成功'})
Esempio n. 19
0
    def post(self, request):
        # 获取请求数据
        data = request.body
        data = json.loads(data)
        token = data['token']
        address_id = data['address_id']

        # 数据校验
        if not all([token, address_id]):
            return Response({'errmsg': '数据不完整'})

        # 获取open_id
        open_id = PublicFunction().getOpenIdByToken(token)
        if open_id:
            try:
                wx_user = WxUser.objects.get(open_id=open_id)
            except:
                return Response({'msg': '用户不存在'})
            # 伪删除
            Address.objects.filter(wx_user=wx_user,
                                   id=address_id).update(is_delete=True)
            return Response({'msg': 'success'})
        return Response({'err': 'no_user'})
Esempio n. 20
0
    def get(self, request, token):
        # 参数校验
        if not all([token]):
            return Response({'msg': '数据不完整'})

        # 获取用户open_id
        open_id = PublicFunction().getOpenIdByToken(token)

        data = {}
        # 校验用户
        if open_id:
            try:
                wx_user = WxUser.objects.get(open_id=open_id)
                data = {
                    'nick_name': wx_user.nick_name,
                    'birthday': wx_user.birthday,
                    'phone': wx_user.phone,
                    'weight': wx_user.weight,
                    'height': wx_user.height
                }
            except:
                return Response({'msg': '用户不存在'})
        return Response(data)
Esempio n. 21
0
    def post(self, request):
        # 获取请求数据
        data = request.body
        data = json.loads(data)
        token = data['token']
        name = data['name']
        phone = data['phone']
        address = data['address']
        address_code = data['address_code']
        is_default = data['is_default']

        # 数据校验
        if not all([token, name, phone, address]):
            return Response({'msg': '数据不完整'})
        # 获取open_id
        open_id = PublicFunction().getOpenIdByToken(token)
        if open_id:
            try:
                wx_user = WxUser.objects.get(open_id=open_id)
            except:
                return Response({'msg': '用户不存在'})

            try:
                if (is_default):
                    Address.objects.filter(
                        Q(wx_user=wx_user) & Q(is_default=True)
                        & Q(is_delete=False)).update(is_default=False)
                Address.objects.create(wx_user=wx_user,
                                       name=name,
                                       phone=phone,
                                       address=address,
                                       address_code=address_code,
                                       is_default=is_default).save()
                return Response({'msg': 'success'})
            except:
                return Response({'msg': '新增地址失败'})
        return Response({'msg': '没有该用户,添加地址失败'})
Esempio n. 22
0
    def post(self, request):
        # 接收数据
        data = json.loads(request.body)
        commodityId_list = data['commodityId_list']
        address_id = data['address_id']
        note = data['note']
        token = data['token']
        commodity_num = data['num']
        discount_price = data['card_price']
        card_token = data['card_token']
        open_id = PublicFunction().getOpenIdByToken(token)

        # 参数校验
        if not all([commodityId_list, address_id, token]):
            return Response({'msg': '数据不完整'})
        # 校验用户
        if open_id:
            try:
                wx_user = WxUser.objects.get(open_id=open_id)
            except:
                return Response({'msg': '用户不存在'})

        #  校验地址信息
        try:
            address = Address.objects.get(id=address_id)
        except Address.DoesNotExist:
            # 地址不存在
            return Response({'msg': '地址信息错误'})

        # 业务逻辑
        # 生成订单号
        order_id = PublicFunction().orderNum()

        # 运费
        transit_price = 0

        # 总数目和总价格
        total_count = 0
        total_price = 0

        # 设置事务保存点
        sid = transaction.savepoint()

        try:
            # 向gd_order_info表中添加一条记录
            order = OrderInfo.objects.create(wx_user=wx_user,
                                             address=address.address,
                                             name=address.name,
                                             phone=address.phone,
                                             order_id=order_id,
                                             commodity_total_price=total_price,
                                             total_price=total_price,
                                             total_count=total_count,
                                             transit_price=transit_price,
                                             discount_price=discount_price,
                                             note=note)

            # 遍历向gd_order_list中添加记录
            for commodity_id in commodityId_list:
                # 获取商品的信息(行锁查询)
                try:
                    commodity = Commodity.objects.select_for_update().get(
                        id=commodity_id)
                except Commodity.DoesNotExist:
                    # 商品不存在,回滚到sid事务保存点
                    transaction.savepoint_rollback(sid)
                    return Response({'msg': '商品不存在'})

                # 获取用户要购买商品的数量
                conn = get_redis_connection('Cart')
                cart_key = 'cart_' + open_id
                if commodity_num == '':
                    count = conn.hget(cart_key, commodity_id)
                else:
                    count = commodity_num
                # print(count)
                # print(commodity.stock)

                # 判断商品的库存
                if int(count) > commodity.stock:
                    # 商品库存不足,回滚到sid事务保存点
                    transaction.savepoint_rollback(sid)
                    return Response({'msg': '商品库存不足'})

                # 向gd_order_list中添加一条记录

                OrderList.objects.create(
                    order_info=order,
                    wx_user=wx_user,
                    commodity=commodity,
                    commodity_name=commodity.name,
                    commodity_specifications=commodity.code + ' ' +
                    commodity.color,
                    commodity_price=commodity.price,
                    commodity_count=int(count),
                    commodity_image=commodity.image)

                # 减少商品的库存,增加销量
                commodity.stock -= int(count)
                commodity.sales += int(count)
                commodity.save()

                # 加计算用户要购买的商品的总数目和总价格
                total_count += int(count)
                total_price += commodity.price * int(count)

            # 更新order对应记录中的total_count和total_price
            order.total_count = total_count
            order.total_price = round(
                float(total_price) + float(transit_price) -
                float(discount_price), 2)

            # print('-------------------------')
            # print(order.total_price)
            # print('-------------------------')

            order.commodity_total_price = total_price
            order.save()
        except Exception as e:
            # 数据库操作出错,回滚到sid事务保存点
            print(e)
            transaction.savepoint_rollback(sid)
            return Response({'msg': '下单失败'})

        # 删除购物车中对应的记录 sku_ids=[1,2]
        conn.hdel(cart_key, *commodityId_list)
        if (card_token != 'no'):
            user_card = UserCard.objects.get(card_token=card_token)
            user_card.is_use = True
            user_card.save()
        # 返回应答
        return Response({'msg': '订单创建成功', 'order_id': order_id})
Esempio n. 23
0
    def post(self, request):
        # 接收数据
        data = json.loads(request.body)
        order_info_id = data['order_info_id']
        token = data['token']

        # 参数校验
        if not all([token, order_info_id]):
            return Response({'msg': '数据不完整'})

        # 获取用户open_id
        open_id = PublicFunction().getOpenIdByToken(token)

        data = {}
        # 校验用户
        if open_id:
            try:
                wx_user = WxUser.objects.get(open_id=open_id)
            except:
                return Response({'msg': '用户不存在'})
            try:
                '''
                {
                    order_list{
                        ...
                        order_info:{
                            ...

                        }
                        商品清单列表{
                                [商品,商品]
                        }
                    }
                }
                '''
                order_info = OrderInfo.objects.get(wx_user=wx_user,
                                                   is_delete=False,
                                                   id=order_info_id)

                orders = OrderList.objects.filter(
                    order_info=order_info).values()

                data = {
                    'order_id': order_info.order_id,
                    'name': order_info.name,
                    'phone': order_info.phone,
                    'address': order_info.address,
                    'note': order_info.note,
                    'create_time': str(order_info.create_time)[0:19],
                    'cancel_time': order_info.cancel_time,
                    'state': order_info.status_choices[order_info.state],
                    'total_count': order_info.total_count,
                    'commodity_total_price': order_info.commodity_total_price,
                    'total_price': order_info.total_price,
                    'transit_price': order_info.transit_price,
                    'courier_number': order_info.courier_number,
                    'returns_number': order_info.returns_number,
                    'discount_pric': order_info.discount_price,
                    'order_list': orders
                }
            except:
                return Response({'msg': '无订单信息'})

        return Response(data)