Esempio n. 1
0
    def kill_order(self, order_no):
        time.sleep(ORDER_TIMEOUT * 60)
        try:
            order = Order().order.get(order_no=order_no)
            if not order:
                print('order is not exist')

            if order.trade_status in (0, 2, 3):  # 交易状态为待支付/交易成功/交易完成则
                logger.info(order.trade_status)
                print('execute celery Failure:order {} status is {}'.format(
                    order_no, order.trade_status))

            # 过期订单标记删除
            Order().order.delete(order_no=order_no)
            logger.info('kill order {} successfully'.format(order_no))

            # 修改账号状态为未出售
            goods = Goods().account.gets(order__order_no=order_no)
            for good in goods:
                good.isSale = 0
                good.save()
            print('kill order {} successful'.format(order_no))
        except Exception:
            logger.error(traceback.format_exc())
            print(traceback.format_exc())
Esempio n. 2
0
    def get(self, request):
        try:
            name = get_name(request)
            page_id = request.GET.get('page_id', '1')  # 当前页
            limit = request.GET.get('limit', '4')  # 每页显示条数
            has_previous = False  # 是否有前一页
            has_next = False  # 是否有后一页
            types = Goods().type.gets()

            if not (page_id.isdigit() and limit.isdigit()):
                return render(request, 'ac_goods/index.html')

            page_id = int(page_id)
            limit = int(limit)

            data = {}
            data['name'] = name
            data['types'] = types

            type_list = []
            for type in types:
                data_dic = {}  # 存放每个类型下的所有信息
                sum = 0  # 每个类型下的账号总数
                for i in type.price.filter():
                    # count = i.account.filter(isSale=0, sale_time__lt=current_time).count()
                    count = i.account.filter(isSale=0).count()
                    sum += count
                data_dic.setdefault('title', type.title)
                data_dic.setdefault('description', type.description)
                data_dic.setdefault('sum', sum)
                data_dic.setdefault('avatar', type.avatar)
                data_dic.setdefault('type_id', type.pk)
                type_list.append(data_dic)

            paginator = Paginator(type_list, limit)  # 分页
            goods_list = paginator.page(page_id)
            page_list = paginator.page_range
            if not (goods_list and page_list):
                return render(request, 'ac_goods/index.html', data)

            if page_id > 1:
                has_previous = True
            if page_id < page_list[-1]:
                has_next = True

            data['goods_list'] = goods_list
            data['page_list'] = page_list
            data['has_previous'] = has_previous
            data['has_next'] = has_next
            data['page_curr'] = page_id

            return render(request, 'ac_goods/index.html', data)
        except Exception as e:
            logger.error(traceback.format_exc())
            return render(request, 'error.html', {'error': 500})
Esempio n. 3
0
    def get(self, request):
        try:
            name = get_name(request)
            types = Goods().type.gets()

            data = {}
            data['types'] = types
            data['name'] = name
            return render(request, 'ac_order/ordered.html', data)
        except Exception as e:
            logger.error(traceback.format_exc())
            return render(request, 'error.html', {'error': '500'})
Esempio n. 4
0
 def modify_account_status(self, order_no):
     '''修改账号状态'''
     try:
         order = Order().order.get(order_no=order_no)
         account_list = Goods().account.gets(order=order, isSale=2)
         if account_list:
             for account in account_list:
                 account.isSale = 1
                 account.save()
             return True
     except Exception as e:
         return False
Esempio n. 5
0
    def post(self, request):
        try:
            # 获取数据
            user = request.user
            info = {'status': 100, 'msg': None}
            type_id = request.GET.get('type_id', None)
            order_data = {}

            # 校验数据
            forms = OrderForms(request.POST)
            if not forms.is_valid():
                info['status'] = 101
                error_all = forms.errors.get('__all__')
                error_price_id = forms.errors.get('price_id')
                info['msg'] = error_price_id if error_price_id else error_all
                return self.get(request, type_id, info)
            if type_id is None:
                return self.get(request, type_id, info)

            # 生成订单
            tran_id = transaction.savepoint()  # 建立事物点
            try:
                dic = forms.cleaned_data
                price_id, price = dic['price_id']
                price_obj = Goods().price.get(pk=price_id)
                count = dic['count']
                total_price = float(price) * int(count)  # 计算出总价格

                order_no = get_new_no()  # 生成一个唯一随机订单号
                order_data.setdefault('order_no', order_no)  # 订单号
                order_data.setdefault('user', user)  # 用户
                order_data.setdefault('price', price_obj)  # 单价
                order_data.setdefault('total_price', total_price)  # 总价格
                order_data.setdefault('count', count)  # 数量

                create_res = self.create_order(order_data)  # 创建订单
                dispatch_res = self.dispatch_account(order_no)
                if create_res and dispatch_res:
                    return redirect(
                        '/order/order_pay/?order_no={}'.format(order_no))
            except Exception as e:
                logger.error(traceback.format_exc())
                transaction.savepoint_rollback(tran_id)  # 期间出错,全部回滚
            info['status'] = 101
            info['msg'] = '订单生成失败'
            return self.get(request, type_id, info)
        except Exception as e:
            logger.error(traceback.format_exc())
            return render(request, 'error.html', {'error': 500})
Esempio n. 6
0
 def dispatch_account(self, order_no):
     '''分配账号信息'''
     order = Order().order.get(order_no=order_no)
     count = int(order.count)
     try:
         # account_list = Goods().account.gets(price=order.price, isSale=0, allow_sale_time__lt=current_time).order_by(
         account_list = Goods().account.gets(
             price=order.price, isSale=0).order_by('add_time')[:count]
         for i in account_list:
             i.order = order
             i.isSale = 2
             i.sale_time = current_time
             i.save()
         return True
     except Exception as e:
         logger.error(traceback.format_exc())
         return False
Esempio n. 7
0
    def get(self, request, type_id=None, *args):
        try:
            # 获取数据
            name = get_name(request)
            types = Goods().type.gets()
            if not type_id:
                type_id = request.GET.get('type_id', None)
            error = {}
            if args:
                error['status'] = args[0]['status']
                error['msg'] = args[0]['msg']
            type = Goods().type.get(pk=type_id)

            data = {}
            data['name'] = name

            if not type or not types:
                return render(request, 'ac_goods/detail.html', data)

            title = type.title
            avatar = type.avatar
            levels = Goods().level.gets()
            level_list = []

            for level in levels:
                price = Goods().price.get(type__pk=type_id,
                                          level__name=level.name)
                if price:
                    level_dic = {}
                    level_dic.setdefault('level', level.name)
                    unit = price.unit

                    units = price.get_currency_display(
                    ) + '/' + unit  # 构造单位:人民币/个
                    level_dic.setdefault('price', price.price)
                    # level_dic.setdefault('count', price.account.filter(isSale=0, sale_time__lt=current_time).count())
                    level_dic.setdefault(
                        'count',
                        price.account.filter(isSale=0).count())
                    level_dic.setdefault('units', units)
                    level_dic.setdefault('price_id', price.pk)
                    level_list.append(level_dic)

            data['types'] = types
            data['level_list'] = level_list
            data['title'] = title
            data['avatar'] = avatar
            data['type_id'] = type_id
            data['error'] = error
            return render(request, 'ac_goods/detail.html', data)
        except Exception as e:
            logger.error(traceback.format_exc())
            return render(request, 'error.html', {'error': 500})
Esempio n. 8
0
    def get(self, request):
        try:
            # 获取参数
            page_id = request.GET.get('page', 1)
            order_no = request.GET.get('order_no', None)
            limit = request.GET.get('limit', 5)

            # 条件:用户、订单、交易状态
            accounts = Goods().account.gets(Q(order__trade_status=2)
                                            | Q(order__trade_status=3),
                                            order__order_no=order_no)
            if not accounts:
                return response_utils.wrapper_400('无商品信息')

            goods_list = []
            for index, account in enumerate(accounts):
                account_dic = {}
                info = str(account.price).split(':')
                account_dic.setdefault('id', index + 1)
                account_dic.setdefault('order_no', order_no)
                account_dic.setdefault('type', info[0])
                account_dic.setdefault('account_str', account.account_str)
                account_dic.setdefault('price', info[1])
                account_dic.setdefault(
                    'sale_time',
                    account.sale_time.strftime('%Y-%m-%d %H:%M:%S'))
                goods_list.append(account_dic)

            try:
                paginator = Paginator(goods_list, limit)  # 分页,每页显示limit个
                good_list = paginator.page(int(page_id))
                good_list = [i for i in good_list]  # 将数据从Page对象中遍历出来
                page_count = paginator.count  # 页码总数
            except Exception as e:
                logger.error(traceback.format_exc())
                return response_utils.wrapper_400('分页失败')

            return response_utils.wrapper_200(data=good_list,
                                              args=('count', page_count))
        except Exception as e:
            logger.error(traceback.format_exc())
            return response_utils.wrapper_500('获取订单详情信息失败,系统内部错误')
Esempio n. 9
0
def kill_order(order_no):
    try:
        order = Order().order.get(order_no=order_no)
        if not order:
            return 'order is not exist'

        if order.trade_status in (2, 3):
            logger.info(order.trade_status)
            return 'order:{} status is {}'.format(order_no, order.trade_status)

        # 过期订单标记删除
        Order().order.delete(order_no=order_no)
        logger.info('kill order {} successfully'.format(order_no))

        # 修改账号状态为未出售
        goods = Goods().account.gets(order__order_no=order_no)
        for good in goods:
            good.isSale = 0
            good.save()
        return 'kill order {} successful'.format(order_no)
    except Exception:
        logger.error(traceback.format_exc())
        return traceback.format_exc()
Esempio n. 10
0
    def get(self, request):
        try:
            user = request.user
            types = Goods().type.gets()
            order_no = request.GET.get('order_no')

            if not user:
                return render(request, 'ac_order/order_detail.html',
                              {'msg': '获取用户对象失败'})

            order = Order().order.get(user=user,
                                      order_no=order_no)  # 条件:用户,订单号
            if not order:
                return render(request, 'ac_order/order_detail.html',
                              {'msg': '获取订单信息失败'})

            order_dic = {}
            order_dic.setdefault('order_no', order.order_no)
            order_dic.setdefault('price', str(order.price))
            order_dic.setdefault('total_price', order.total_price)
            order_dic.setdefault('count', order.count)
            order_dic.setdefault('add_time',
                                 order.add_time.strftime('%Y-%m-%d %H:%M:%S'))
            order_dic.setdefault('trade_status',
                                 order.get_trade_status_display())
            order_dic.setdefault('trade_no', order.trade_no)
            order_dic.setdefault('trade_type', order.get_pay_mode_display())

            data = {}
            data['types'] = types
            data['name'] = user.name
            data['order_dic'] = order_dic
            return render(request, 'ac_order/order_detail.html', data)
        except Exception as e:
            logger.error(traceback.format_exc())
            return render(request, 'error.html', {'error': '500'})
Esempio n. 11
0
    def get(self, request, order_no=None):
        try:
            name = get_name(request)
            types = Goods().type.gets()
            if not order_no:
                order_no = request.GET.get('order_no')

            data = {}
            order = Order().order.get(order_no=order_no)
            if not order:
                data['msg'] = '获取订单信息失败'
                return render(request, 'ac_order/order.html', data)

            order_data = {}
            order_data.setdefault('order_no', order_no)
            order_data.setdefault('user', order.user)
            order_data.setdefault('price', order.price.price)
            order_data.setdefault('total_price', order.total_price)
            order_data.setdefault('count', order.count)

            delta = datetime.timedelta(minutes=ORDER_TIMEOUT)  # 设置延时时间
            end_time = (order.add_time + delta).strftime('%Y/%m/%d,%H:%M:%S')
            order_data.setdefault('end_time', str(end_time))

            type = order.price.type.title
            level = order.price.level.name
            order_data.setdefault('type', type + ':' + level)

            data['types'] = types
            data['name'] = name
            data['order_data'] = order_data

            return render(request, 'ac_order/order.html', data)
        except Exception as e:
            logger.error(traceback.format_exc())
            return render(request, 'error.html', {'error': 500})
Esempio n. 12
0
# models.OrderInfo.objects(pk=1)

from ac_goods.models import Account
from ac_order.models import OrderInfo
# accounts = Account.objects.filter(order__order_no='c68b9751866b4b00aaed3e9f1b7cad19')
# for account in accounts:
#     print(account)

# order = OrderInfo.objects.filter(order_no='23132').first()
# print(order)

# if hasattr(locals(),'Account'):
#     a = getattr(locals(),'Account')
# import datetime
# time_now = datetime.datetime.now()
#
# order = Order().order.get(order_no='27c5339c64c248928674e4699aff3b34')
# goods = Goods().account.gets(price=order.price, allow_sale_time__lt=time_now).order_by(
#                 'add_time')[:order.count]
# print(goods)

from django.db.models import Q

order_no = '27df9c84fe7f4453925177298525b0d0'
accounts = Goods().account.gets(Q(order__trade_status=2 or 3),
                                order__order_no=order_no)
print(accounts)

orders = Order().order.gets(Q(trade_status=3) | Q(trade_status=2),
                            order_no=order_no)
print(orders)