bug修复

parent 231172c7
...@@ -22,6 +22,39 @@ CFG_FILEPATH = work_dir + '/app/config/config.yaml' ...@@ -22,6 +22,39 @@ CFG_FILEPATH = work_dir + '/app/config/config.yaml'
config = yaml.load(open(CFG_FILEPATH, 'r'), Loader=yaml.FullLoader) config = yaml.load(open(CFG_FILEPATH, 'r'), Loader=yaml.FullLoader)
class TAMP_SQL(object):
"""[sqlalchemy 封装]
Args:
object ([type]): [description]
Returns:
[type]: [description]
"""
def __init__(self, db_engine):
# db = "mysql+mysqlconnector://root:password@localhost:3306/test"
# engine = create_engine(db)
# 创建DBSession类型:
self.DBSession = scoped_session(sessionmaker(bind=db_engine))
def __enter__(self):
self.session = self.DBSession()
return self.session
def __exit__(self, ext_type, exc_val, exc_tb):
print(ext_type)
self.session.commit()
self.session.close()
def add(self, model):
# model = User(id='5', name='Bob')
# 添加到session:
self.session.add(model)
# 提交即保存到数据库:
self.session.commit()
tamp_user_engine = create_engine( tamp_user_engine = create_engine(
'mysql+pymysql://{user}:{password}@{host}:{port}/{db}?charset={charset}'.format( 'mysql+pymysql://{user}:{password}@{host}:{port}/{db}?charset={charset}'.format(
db=config[env]['MySQL']['tamp_user_db'], db=config[env]['MySQL']['tamp_user_db'],
......
...@@ -17,6 +17,7 @@ class Errors: ...@@ -17,6 +17,7 @@ class Errors:
APPLE_VOCHER_USED = '9005' APPLE_VOCHER_USED = '9005'
INPUT_PARAMS_ERROR = '9006' INPUT_PARAMS_ERROR = '9006'
REPEAT_BUY = '9007' REPEAT_BUY = '9007'
PROD_NOPRICE = '9008'
MSG = { MSG = {
TOKEN_INVALID: 'TOKEN失效', TOKEN_INVALID: 'TOKEN失效',
...@@ -25,5 +26,6 @@ class Errors: ...@@ -25,5 +26,6 @@ class Errors:
TANGPU_BALANCE_NOT_ENOUGH: '探普币余额不足', TANGPU_BALANCE_NOT_ENOUGH: '探普币余额不足',
APPLE_VOCHER_USED: '该支付凭证已使用', APPLE_VOCHER_USED: '该支付凭证已使用',
INPUT_PARAMS_ERROR: '入参错误', INPUT_PARAMS_ERROR: '入参错误',
REPEAT_BUY: '请勿重复购买商品' REPEAT_BUY: '请勿重复购买商品',
PROD_NOPRICE: '商品未定价'
} }
...@@ -9,12 +9,13 @@ ...@@ -9,12 +9,13 @@
import json import json
from flask_restful import Resource, reqparse from flask_restful import Resource, reqparse
from flask import request, make_response from flask import request, make_response
from sqlalchemy.exc import InvalidRequestError
from app.api import app from app.api import app
from app.controller.errorhandler import CustomFlaskErr from app.controller.errorhandler import CustomFlaskErr
from app.config.errors import Errors from app.config.errors import Errors
from app.service import order_service from app.service import order_service
from app.api.engine import logging from app.api.engine import logging, tamp_user_session
class TopUpOrder(Resource): class TopUpOrder(Resource):
...@@ -207,8 +208,8 @@ class AllOrders(Resource): ...@@ -207,8 +208,8 @@ class AllOrders(Resource):
args['user_id'] = request.user_id args['user_id'] = request.user_id
try: try:
data = order_service.getAllOrders(args) data = order_service.getAllOrders(args)
except Exception as e: except InvalidRequestError:
logging.error(e) tamp_user_session.rollback()
resp = request.return_success resp = request.return_success
resp['attributes'] = data resp['attributes'] = data
return resp return resp
......
...@@ -9,9 +9,10 @@ ...@@ -9,9 +9,10 @@
import datetime import datetime
import time import time
from sqlalchemy.sql.elements import and_ from sqlalchemy import and_
from sqlalchemy.testing import in_
from app.api.engine import tamp_pay_session, tamp_user_session from app.api.engine import tamp_pay_session, tamp_user_session, TAMP_SQL, tamp_pay_engine, tamp_user_engine
from app.config.errors import Errors from app.config.errors import Errors
from app.controller.errorhandler import CustomFlaskErr from app.controller.errorhandler import CustomFlaskErr
from app.model.account_balance import AccountBalance from app.model.account_balance import AccountBalance
...@@ -36,10 +37,10 @@ class TopUpOrderService: ...@@ -36,10 +37,10 @@ class TopUpOrderService:
user_id = args['user_id'] user_id = args['user_id']
offset = (pageNumber - 1)*pageSize offset = (pageNumber - 1)*pageSize
totalSize = len(tamp_user_session.query(OrderFlow.id).filter(and_(OrderFlow.createby == user_id, OrderFlow.ab_type == '6', OrderFlow.ab_status == 'SUCCESS')).all()) totalSize = len(tamp_user_session.query(OrderFlow.id).filter(and_(OrderFlow.createby == user_id, OrderFlow.ab_type == '6', OrderFlow.ab_status == 'SUCCESS')).all())
res = tamp_user_session.query(OrderFlow).filter(OrderFlow.createby == user_id).order_by( res = tamp_user_session.query(OrderFlow).filter(and_(OrderFlow.createby == user_id, OrderFlow.ab_type == '6', OrderFlow.ab_status == 'SUCCESS')).order_by(
OrderFlow.createtime.desc()).offset(offset).limit(pageSize).all() OrderFlow.createtime.desc()).offset(offset).limit(pageSize).all()
res = [r.to_dict() for r in res] res = [r.to_dict() for r in res]
allowed = {'id', 'ab_ordernum', 'transaction_serial_no', 'ab_payment', 'ab_pay_mode', 'createtime', 'pay_time', 'complete_time', 'order_status'} allowed = {'id', 'ab_ordernum', 'transaction_serial_no', 'ab_payment', 'ab_pay_mode', 'createtime', 'pay_time', 'complete_time', 'ab_type'}
for r in res: for r in res:
keys = set(r.keys()) - allowed keys = set(r.keys()) - allowed
for key in keys: for key in keys:
...@@ -125,7 +126,9 @@ class CurriculumOrderService: ...@@ -125,7 +126,9 @@ class CurriculumOrderService:
offset = (pageNumber - 1) * pageSize offset = (pageNumber - 1) * pageSize
curriculum_column = tamp_user_session.query(CurriculumColumn.id, CurriculumColumn.title, CurriculumColumn.cover, CurriculumColumn.info).all() curriculum_column = tamp_user_session.query(CurriculumColumn.id, CurriculumColumn.title, CurriculumColumn.cover, CurriculumColumn.info).all()
curriculum_res = tamp_user_session.query(CurriculumRes.id, CurriculumRes.title, CurriculumRes.cover, CurriculumRes.teacher_name).all() curriculum_res = tamp_user_session.query(CurriculumRes.id, CurriculumRes.title, CurriculumRes.cover, CurriculumRes.teacher_name).all()
res = tamp_user_session.query(OrderFlow).filter(OrderFlow.createby == user_id).order_by(OrderFlow.createtime.desc()).all() res = tamp_user_session.query(OrderFlow).filter(
and_(OrderFlow.createby == user_id, OrderFlow.ab_type.in_(['1', '2', '3', '4', '5']))).order_by(
OrderFlow.createtime.desc()).all()
curriculum_column = {r[0]: {'title': r[1], 'cover': r[2], 'info': r[3]} for r in curriculum_column} curriculum_column = {r[0]: {'title': r[1], 'cover': r[2], 'info': r[3]} for r in curriculum_column}
curriculum_res = {r[0]: {'title': r[1], 'cover': r[2], 'info': r[3]} for r in curriculum_res} curriculum_res = {r[0]: {'title': r[1], 'cover': r[2], 'info': r[3]} for r in curriculum_res}
orders = [r.to_dict() for r in res if r.to_dict()['ab_status'] == 'SUCCESS'] orders = [r.to_dict() for r in res if r.to_dict()['ab_status'] == 'SUCCESS']
...@@ -147,8 +150,6 @@ class CurriculumOrderService: ...@@ -147,8 +150,6 @@ class CurriculumOrderService:
keys = set(r.keys()) - allowed keys = set(r.keys()) - allowed
for key in keys: for key in keys:
del r[key] del r[key]
tamp_user_session.commit()
tamp_user_session.close()
return { return {
'content': temp_orders, 'content': temp_orders,
'pageNum': pageNumber, 'pageNum': pageNumber,
...@@ -159,9 +160,12 @@ class CurriculumOrderService: ...@@ -159,9 +160,12 @@ class CurriculumOrderService:
def create_order(self, args): def create_order(self, args):
"""。""" """。"""
with TAMP_SQL(tamp_user_engine) as tamp_user_session, TAMP_SQL(tamp_pay_engine) as tamp_pay_session:
args['ab_ordernum'] = time.strftime('%Y%m%d', time.localtime(time.time())) + str(int(time.time() * 100000)) args['ab_ordernum'] = time.strftime('%Y%m%d', time.localtime(time.time())) + str(int(time.time() * 100000))
amount = tamp_user_session.query(CurriculumPrice.price).filter(CurriculumPrice.rel_id == args['ab_proid']).first()[0] amount = tamp_user_session.query(CurriculumPrice.price).filter(CurriculumPrice.rel_id == args['ab_proid']).first()[0]
args['id'] = OrderFlow.__tablename__ + str(int(time.time()*100000)) if not amount:
raise CustomFlaskErr(Errors.PROD_NOPRICE)
args['id'] = OrderFlow.__tablename__ + str(int(time.time() * 100000))
args['ab_payment'] = amount args['ab_payment'] = amount
args['ab_status'] = 'WAIT' args['ab_status'] = 'WAIT'
subject = args.get('prod_name', '') subject = args.get('prod_name', '')
...@@ -169,19 +173,23 @@ class CurriculumOrderService: ...@@ -169,19 +173,23 @@ class CurriculumOrderService:
notify_path = '/tamp_order/micro_shop/topUpOrderNotify' notify_path = '/tamp_order/micro_shop/topUpOrderNotify'
pay_params = None pay_params = None
# 该用户是否重复购买同一商品 # 该用户是否重复购买同一商品
repeat_buy = tamp_user_session.query(OrderFlow.id).filter(and_(OrderFlow.createby == args['user_id']), OrderFlow.ab_proid == args['ab_proid'], OrderFlow.ab_status == 'SUCCESS').all() repeat_buy = tamp_user_session.query(OrderFlow.id).filter(and_(OrderFlow.createby == args['user_id']),
OrderFlow.ab_proid == args['ab_proid'],
OrderFlow.ab_status == 'SUCCESS').all()
if repeat_buy: if repeat_buy:
raise CustomFlaskErr(Errors.REPEAT_BUY) raise CustomFlaskErr(Errors.REPEAT_BUY)
if args['ab_pay_mode'] == 4: if args['ab_pay_mode'] == 4:
# 探普币支付 # 探普币支付
if args['env'] == 'ios': if args['env'] == 'ios':
res = tamp_pay_session.query(AccountBalance.apple_balance).filter(AccountBalance.user_id == args['user_id']).first() res = tamp_pay_session.query(AccountBalance.apple_balance).filter(
AccountBalance.user_id == args['user_id']).first()
if not res: if not res:
raise CustomFlaskErr(Errors.TANGPU_BALANCE_NOT_ENOUGH) raise CustomFlaskErr(Errors.TANGPU_BALANCE_NOT_ENOUGH)
elif res[0] < args['ab_payment']: elif res[0] < args['ab_payment']:
raise CustomFlaskErr(Errors.TANGPU_BALANCE_NOT_ENOUGH) raise CustomFlaskErr(Errors.TANGPU_BALANCE_NOT_ENOUGH)
else: else:
tamp_pay_session.query(AccountBalance.apple_balance).filter(AccountBalance.user_id == args['user_id']).update({ tamp_pay_session.query(AccountBalance.apple_balance).filter(
AccountBalance.user_id == args['user_id']).update({
'apple_balance': AccountBalance.apple_balance - args['ab_payment'] 'apple_balance': AccountBalance.apple_balance - args['ab_payment']
}) })
args['ab_status'] = 'SUCCESS' args['ab_status'] = 'SUCCESS'
...@@ -214,10 +222,6 @@ class CurriculumOrderService: ...@@ -214,10 +222,6 @@ class CurriculumOrderService:
args.pop('remote_addr', '') args.pop('remote_addr', '')
order_info = OrderFlow(**args) order_info = OrderFlow(**args)
tamp_user_session.add(order_info) tamp_user_session.add(order_info)
tamp_pay_session.commit()
tamp_pay_session.close()
tamp_user_session.commit()
tamp_user_session.close()
return pay_params return pay_params
...@@ -266,8 +270,6 @@ def consumeSucessAction(order_no): ...@@ -266,8 +270,6 @@ def consumeSucessAction(order_no):
def getAccountBalance(user_id): def getAccountBalance(user_id):
"""查询探普币余额""" """查询探普币余额"""
account_balance = tamp_pay_session.query(AccountBalance).filter(AccountBalance.user_id == user_id).first() account_balance = tamp_pay_session.query(AccountBalance).filter(AccountBalance.user_id == user_id).first()
tamp_pay_session.commit()
tamp_pay_session.close()
if not account_balance: if not account_balance:
return {'user_id': user_id, 'android_balance': 0, 'apple_balance': 0} return {'user_id': user_id, 'android_balance': 0, 'apple_balance': 0}
else: else:
...@@ -325,9 +327,12 @@ def getAllOrders(args): ...@@ -325,9 +327,12 @@ def getAllOrders(args):
offset = (pageNumber - 1) * pageSize offset = (pageNumber - 1) * pageSize
if not user_id: if not user_id:
raise CustomFlaskErr(Errors.TOKEN_INVALID) raise CustomFlaskErr(Errors.TOKEN_INVALID)
totalSize = len(tamp_user_session.query(OrderFlow.id).filter(and_(OrderFlow.createby == user_id, OrderFlow.ab_type == '6', OrderFlow.ab_status == 'SUCCESS')).all()) with TAMP_SQL(tamp_user_engine) as tamp_user_session:
res = tamp_user_session.query(OrderFlow).filter(OrderFlow.createby == user_id).order_by( totalSize = len(tamp_user_session.query(OrderFlow.id).filter(
OrderFlow.createtime.desc()).all() and_(OrderFlow.createby == user_id, OrderFlow.ab_type == '6', OrderFlow.ab_status == 'SUCCESS')).all())
res = tamp_user_session.query(OrderFlow).filter(
and_(OrderFlow.createby == user_id, OrderFlow.ab_type == '6', OrderFlow.ab_status == 'SUCCESS')).order_by(
OrderFlow.createtime.desc()).offset(offset).limit(pageSize).all()
topup_res = [r.to_dict() for r in res] topup_res = [r.to_dict() for r in res]
allowed = {'id', 'ab_ordernum', 'transaction_serial_no', 'ab_payment', 'ab_pay_mode', 'createtime', 'pay_time', allowed = {'id', 'ab_ordernum', 'transaction_serial_no', 'ab_payment', 'ab_pay_mode', 'createtime', 'pay_time',
'complete_time', 'order_status', 'ab_type'} 'complete_time', 'order_status', 'ab_type'}
...@@ -340,7 +345,7 @@ def getAllOrders(args): ...@@ -340,7 +345,7 @@ def getAllOrders(args):
CurriculumColumn.info).all() CurriculumColumn.info).all()
curriculum_res = tamp_user_session.query(CurriculumRes.id, CurriculumRes.title, CurriculumRes.cover, curriculum_res = tamp_user_session.query(CurriculumRes.id, CurriculumRes.title, CurriculumRes.cover,
CurriculumRes.teacher_name).all() CurriculumRes.teacher_name).all()
res = tamp_user_session.query(OrderFlow).filter(OrderFlow.createby == user_id).order_by( res = tamp_user_session.query(OrderFlow).filter(and_(OrderFlow.createby == user_id, OrderFlow.ab_type.in_(['1', '2', '3', '4', '5']))).order_by(
OrderFlow.createtime.desc()).all() OrderFlow.createtime.desc()).all()
curriculum_column = {r[0]: {'title': r[1], 'cover': r[2], 'info': r[3]} for r in curriculum_column} curriculum_column = {r[0]: {'title': r[1], 'cover': r[2], 'info': r[3]} for r in curriculum_column}
curriculum_res = {r[0]: {'title': r[1], 'cover': r[2], 'info': r[3]} for r in curriculum_res} curriculum_res = {r[0]: {'title': r[1], 'cover': r[2], 'info': r[3]} for r in curriculum_res}
...@@ -365,12 +370,10 @@ def getAllOrders(args): ...@@ -365,12 +370,10 @@ def getAllOrders(args):
del r[key] del r[key]
orders = [*topup_res, *temp_orders] orders = [*topup_res, *temp_orders]
totalSize = len(orders) totalSize = len(orders)
tamp_user_session.commit() # tamp_user_session.commit()
tamp_user_session.close() # tamp_user_session.close()
tamp_pay_session.commit()
tamp_pay_session.close()
return { return {
'content': orders[offset: offset+pageSize], 'content': orders[offset: offset + pageSize],
'pageNum': pageNumber, 'pageNum': pageNumber,
'pageSize': pageSize, 'pageSize': pageSize,
'totalSize': totalSize 'totalSize': totalSize
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment