order.py 7.42 KB
# -*- encoding: utf-8 -*-
# -----------------------------------------------------------------------------
# @File Name  : curriculum_order.py
# @Time       : 2020/11/18 下午3:19
# @Author     : X. Peng
# @Email      : acepengxiong@163.com
# @Software   : PyCharm
# -----------------------------------------------------------------------------
import json
from flask_restful import Resource, reqparse
from flask import request, make_response
from sqlalchemy.exc import InvalidRequestError

from app.api import app
from app.controller.errorhandler import CustomFlaskErr
from app.config.errors import Errors
from app.service import order_service
from app.api.engine import logging


class TopUpOrder(Resource):
    """充值订单."""

    def __init__(self):
        """."""
        self.parser = reqparse.RequestParser()

    def get(self):
        """."""
        self.parser.add_argument('pageNumber', type=int, required=False)
        self.parser.add_argument('pageSize', type=int, required=False)
        args = self.parser.parse_args()
        if not args.get('pageNumber', ''):
            raise CustomFlaskErr(Errors.PARAMS_ERROR)
        if not args.get('pageSize', ''):
            raise CustomFlaskErr(Errors.PARAMS_ERROR)
        args['user_id'] = request.user_id
        data = order_service.TopUpOrderService().get_order(args)
        resp = request.return_success
        resp['attributes'] = data
        return resp

    def post(self):
        """."""
        self.parser.add_argument('amount', type=float, required=True, help='订单总额不能为空')
        self.parser.add_argument('pay_method', type=int, required=True, help='支付方式不能为空')
        self.parser.add_argument('receipt_data', type=str, required=False)
        self.parser.add_argument('product_id', type=str, required=False)
        args = self.parser.parse_args()

        args['user_id'] = request.user_id
        args['remote_addr'] = request.remote_addr
        args['host_url'] = request.host_url
        data = order_service.TopUpOrderService().create_order(args)
        resp = request.return_success
        resp['attributes'] = data
        return resp

    def put(self, id):
        """."""
        pass

    def delete(self, id):
        """."""
        pass


class ConsumeOrder(Resource):
    """消费订单."""

    def __init__(self):
        """."""
        self.parser = reqparse.RequestParser()

    def get(self):
        """."""
        self.parser.add_argument('pageNumber', type=int, required=False)
        self.parser.add_argument('pageSize', type=int, required=False)
        args = self.parser.parse_args()
        if not args.get('pageNumber', ''):
            raise CustomFlaskErr(Errors.PARAMS_ERROR)
        if not args.get('pageSize', ''):
            raise CustomFlaskErr(Errors.PARAMS_ERROR)
        user_id = request.user_id
        args['user_id'] = request.user_id
        data = order_service.CurriculumOrderService().get_order(args)
        resp = request.return_success
        resp['attributes'] = data
        return resp

    def post(self):
        """."""
        self.parser.add_argument('ab_type', type=int, required=True, help='商品类型不能为空')
        self.parser.add_argument('ab_proid', type=str, required=True, help='商品ID不能为空')
        self.parser.add_argument('prod_name', type=str, required=True, help='商品名称不能为空')
        self.parser.add_argument('ab_pay_mode', type=int, required=True, help='支付方式不能为空')
        self.parser.add_argument('ab_pro_siid', type=str, required=False)
        self.parser.add_argument('openid', type=str, required=False)
        args = self.parser.parse_args()

        if request.headers.get('env') in ['ios', 'android']:
            token = request.headers.get('tampToken', '')
        elif request.headers.get('env') in ['wechat', 'xcx']:
            token = request.cookies.get('qimsession', '')
        args['env'] = request.headers.get('env')
        args['tampToken'] = token

        if 'ab_pro_siid' not in args:
            raise CustomFlaskErr(Errors.PARAMS_ERROR)
        args['user_id'] = request.user_id
        args['env'] = request.headers['env']
        args['remote_addr'] = request.remote_addr
        args['host_url'] = request.host_url
        data = order_service.CurriculumOrderService().create_order(args)
        resp = request.return_success
        resp['attributes'] = data
        return resp

    def put(self, id):
        """."""
        pass

    def delete(self, id):
        """."""
        pass


class TopUpOrderNotify(Resource):
    """充值订单支付通知."""

    def __init__(self):
        """."""
        self.parser = reqparse.RequestParser()

    def get(self):
        """."""
        resp = request.return_success
        return resp

    def post(self):
        """."""
        res_info = request.stream.read(request.content_length or 0).decode()
        logging.info('充值订单支付成功通知信息'+res_info)
        res = order_service.alipayWxPayCheck(res_info)
        if res['success']:
            order_service.topUpSuccessAction(res['order_no'], res['transaction_id'])
            resp = make_response(res['body'])
            resp.hearders = res['header']
        return resp

    def put(self, id):
        """."""
        pass

    def delete(self, id):
        """."""
        pass


class ConsumeOrderNotify(Resource):
    """消费订单支付通知."""

    def __init__(self):
        """."""
        self.parser = reqparse.RequestParser()

    def get(self):
        """."""
        resp = request.return_success
        return resp

    def post(self):
        """."""
        res_info = request.stream.read(request.content_length or 0).decode()
        logging.info('消费订单支付成功通知信息'+res_info)
        res = order_service.alipayWxPayCheck(res_info)
        if res['success']:
            order_service.consumeSucessAction(res['order_no'], res['transaction_id'])
            resp = make_response(res['body'])
            resp.hearders = res['header']
        return resp

    def put(self, id):
        """."""
        pass

    def delete(self, id):
        """."""
        pass


class AccountBalance(Resource):
    """"""
    def __init__(self):
        """."""
        self.parser = reqparse.RequestParser()

    def get(self):
        """."""
        user_id = request.user_id
        data = order_service.getAccountBalance(user_id)
        resp = request.return_success
        resp['attributes'] = data
        return resp

    def post(self):
        """."""
        pass

    def put(self, id):
        """."""
        pass

    def delete(self, id):
        """."""
        pass


class AllOrders(Resource):
    """"""
    def __init__(self):
        """."""
        self.parser = reqparse.RequestParser()

    def get(self):
        """."""
        self.parser.add_argument('pageNumber', type=int, required=False)
        self.parser.add_argument('pageSize', type=int, required=False)
        args = self.parser.parse_args()
        if not args.get('pageNumber', ''):
            raise CustomFlaskErr(Errors.PARAMS_ERROR)
        if not args.get('pageSize', ''):
            raise CustomFlaskErr(Errors.PARAMS_ERROR)
        args['user_id'] = request.user_id
        data = order_service.getAllOrders(args)
        resp = request.return_success
        resp['attributes'] = data
        return resp

    def post(self):
        """."""
        pass

    def put(self, id):
        """."""
        pass

    def delete(self, id):
        """."""
        pass