Commit 1b8aec4e by Aeolus

转账接口开发

parent d9056de0
...@@ -92,6 +92,7 @@ class AdminOpenid(Base): ...@@ -92,6 +92,7 @@ class AdminOpenid(Base):
id = Column(INTEGER(11), primary_key=True) id = Column(INTEGER(11), primary_key=True)
user_id = Column(INTEGER(11), nullable=False) user_id = Column(INTEGER(11), nullable=False)
user_no = Column(String(25, 'utf8mb4_unicode_ci'), nullable=False) user_no = Column(String(25, 'utf8mb4_unicode_ci'), nullable=False)
real_name = Column(String(25, 'utf8mb4_unicode_ci'), nullable=False)
openid = Column(String(40, 'utf8mb4_unicode_ci'), nullable=False) openid = Column(String(40, 'utf8mb4_unicode_ci'), nullable=False)
status = Column(INTEGER(1), default=1, nullable=False) status = Column(INTEGER(1), default=1, nullable=False)
created_at = Column(DateTime, nullable=False, server_default=text("CURRENT_TIMESTAMP")) created_at = Column(DateTime, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
...@@ -155,14 +156,35 @@ class Business(Base): ...@@ -155,14 +156,35 @@ class Business(Base):
updated_at = Column(TIMESTAMP, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")) updated_at = Column(TIMESTAMP, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
class DrawDetail(Base):
__tablename__ = 'draw_detail'
id = Column(INTEGER(10), primary_key=True)
draw_id = Column(INTEGER(11), nullable=False)
open_id = Column(String(40, 'utf8mb4_unicode_ci'), nullable=False)
draw_no = Column(VARCHAR(40), nullable=False, index=True)
payment_no = Column(VARCHAR(40), nullable=False)
business_id = Column(INTEGER(11), nullable=False)
draw_month = Column(VARCHAR(7))
total = Column(INTEGER(11))
real_total = Column(INTEGER(11))
payment_time = Column(TIMESTAMP)
status = Column(TINYINT(1), nullable=False, server_default=text("'0'"))
created_at = Column(TIMESTAMP, server_default=text("CURRENT_TIMESTAMP"))
updated_at = Column(TIMESTAMP, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
class DrawRecord(Base): class DrawRecord(Base):
__tablename__ = 'draw_record' __tablename__ = 'draw_record'
__table_args__ = (
Index('unique4draw_record_user_month', 'user_id', 'draw_month', 'business_id', unique=True),
)
id = Column(INTEGER(10), primary_key=True) id = Column(INTEGER(10), primary_key=True)
user_id = Column(INTEGER(11), nullable=False) user_id = Column(INTEGER(11), nullable=False)
user_no = Column(String(25, 'utf8mb4_unicode_ci'), nullable=False) user_no = Column(String(25, 'utf8mb4_unicode_ci'), nullable=False)
draw_no = Column(VARCHAR(40), nullable=False, index=True) draw_no = Column(VARCHAR(40), nullable=False, index=True)
business_id = Column(INTEGER(10)) business_id = Column(INTEGER(11))
draw_month = Column(VARCHAR(7)) draw_month = Column(VARCHAR(7))
total = Column(INTEGER(11)) total = Column(INTEGER(11))
real_total = Column(INTEGER(11)) real_total = Column(INTEGER(11))
...@@ -171,6 +193,7 @@ class DrawRecord(Base): ...@@ -171,6 +193,7 @@ class DrawRecord(Base):
status = Column(TINYINT(1), nullable=False, server_default=text("'0'")) status = Column(TINYINT(1), nullable=False, server_default=text("'0'"))
created_at = Column(TIMESTAMP, server_default=text("CURRENT_TIMESTAMP")) created_at = Column(TIMESTAMP, server_default=text("CURRENT_TIMESTAMP"))
updated_at = Column(TIMESTAMP, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")) updated_at = Column(TIMESTAMP, server_default=text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"))
check_admin_id = Column(INTEGER(11))
class Hatch(Base): class Hatch(Base):
......
...@@ -268,7 +268,9 @@ def run_edit_openid(): ...@@ -268,7 +268,9 @@ def run_edit_openid():
openids = json_data['openids'] openids = json_data['openids']
AdminOpenid.query.filter_by(user_id=g.user.id).update({"status": -1}) AdminOpenid.query.filter_by(user_id=g.user.id).update({"status": -1})
for openid in openids: for i in openids:
openid = i["openid"]
real_name = i["real_name"]
rs = AdminOpenid.query.filter_by(user_id=g.user.id, openid=openid).first() rs = AdminOpenid.query.filter_by(user_id=g.user.id, openid=openid).first()
if rs: if rs:
rs.status = 1 rs.status = 1
...@@ -278,6 +280,7 @@ def run_edit_openid(): ...@@ -278,6 +280,7 @@ def run_edit_openid():
ao_model.user_id = g.user.id ao_model.user_id = g.user.id
ao_model.user_no = g.user.user_no ao_model.user_no = g.user.user_no
ao_model.openid = openid ao_model.openid = openid
ao_model.real_name = real_name
ao_model.status = 1 ao_model.status = 1
db.session.add(ao_model) db.session.add(ao_model)
db.session.commit() db.session.commit()
...@@ -288,6 +291,6 @@ def run_edit_openid(): ...@@ -288,6 +291,6 @@ def run_edit_openid():
def run_openid_list(): def run_openid_list():
rs = AdminOpenid.query.filter_by(user_id=g.user.id, status=1).all() rs = AdminOpenid.query.filter_by(user_id=g.user.id, status=1).all()
if rs: if rs:
return BaseResponse(data=[x.openid for x in rs]) return BaseResponse(data=[{"openid": x.openid, "real_name": x.real_name} for x in rs])
else: else:
return BaseResponse(data=[]) return BaseResponse(data=[])
...@@ -10,6 +10,7 @@ author:Aeolus ...@@ -10,6 +10,7 @@ author:Aeolus
""" """
import datetime import datetime
import logging import logging
import random
import time import time
from flask import Blueprint, g, request, jsonify from flask import Blueprint, g, request, jsonify
...@@ -18,11 +19,13 @@ from sqlalchemy.exc import SQLAlchemyError ...@@ -18,11 +19,13 @@ from sqlalchemy.exc import SQLAlchemyError
from config.commen_config import RENT_SALE_LOCK from config.commen_config import RENT_SALE_LOCK
from config.wechat_config import platform_appid_config_list, pay_config_list from config.wechat_config import platform_appid_config_list, pay_config_list
from models.base_model import db from models.base_model import db
from models.models import Rent, RentDetail, WxUser, Machine, RentRefund, DrawRecord from models.models import Rent, RentDetail, WxUser, Machine, RentRefund, DrawRecord, AdminAccount, AdminOpenid, \
DrawDetail
from service.rent_service import RentService from service.rent_service import RentService
from service.wechat_service import WeChatPayService from service.wechat_service import WeChatPayService
from utils.error_code import OPERATE_LEVEL_ERROR, ACTION_CODE_ERROR, REFUND_NOT_PRODUCTION_INFO, Param_Invalid_Error, \ from utils.error_code import OPERATE_LEVEL_ERROR, ACTION_CODE_ERROR, REFUND_NOT_PRODUCTION_INFO, Param_Invalid_Error, \
REFUND_MONEY_IS_ZERO, REFUND_MONEY_ERROR, REFUND_LOCK_ERROR REFUND_MONEY_IS_ZERO, REFUND_MONEY_ERROR, REFUND_LOCK_ERROR, NO_DRAW_RECORD_ERROR, ACCOUNT_NOT_EXISTS_ERROR, \
ADMIN_OPENID_NOT_EXIST_ERROR
from utils.my_redis_cache import redis_client from utils.my_redis_cache import redis_client
from utils.my_response import BaseResponse from utils.my_response import BaseResponse
...@@ -418,8 +421,9 @@ def run_draw_list(): ...@@ -418,8 +421,9 @@ def run_draw_list():
business_id = json_data.get("business_id", None) business_id = json_data.get("business_id", None)
status = json_data.get("status", None) status = json_data.get("status", None)
if g.user.level not in (1, 2, 4, 5): if g.user.level != 1:
return jsonify(OPERATE_LEVEL_ERROR) return jsonify(OPERATE_LEVEL_ERROR)
select_sql = """ select_sql = """
select draw_record.draw_no, select draw_record.draw_no,
draw_record.business_id, draw_record.business_id,
...@@ -475,16 +479,6 @@ def run_draw_list(): ...@@ -475,16 +479,6 @@ def run_draw_list():
return_data = [] return_data = []
if result: if result:
for info in result: for info in result:
"""
draw_record.draw_no,
draw_record.business_id,
draw_record.draw_month,
draw_record.total,
draw_record.real_total,
draw_record.rate,
draw_record.status,
business.business_name
"""
tmp = { tmp = {
"business_id": info.business_id, "draw_month": info.draw_month, "total": info.total, "business_id": info.business_id, "draw_month": info.draw_month, "total": info.total,
"real_total": info.real_total, "rate": info.rate, "status": info.status, "real_total": info.real_total, "rate": info.rate, "status": info.status,
...@@ -495,3 +489,68 @@ def run_draw_list(): ...@@ -495,3 +489,68 @@ def run_draw_list():
return_data.append(tmp) return_data.append(tmp)
return BaseResponse({"list": return_data, "page": page, "pageSize": page_size, "total_count": total_count}) return BaseResponse({"list": return_data, "page": page, "pageSize": page_size, "total_count": total_count})
@rent_route.route("approve_draw", methods=["POST"])
def run_approve_draw():
"""
:return:
"""
json_data = request.get_json()
draw_id = json_data["draw_id"]
if g.user.level != 1:
return jsonify(OPERATE_LEVEL_ERROR)
draw_record = DrawRecord.query.filter_by(id=draw_id, status=0).first()
if not draw_record:
return jsonify(NO_DRAW_RECORD_ERROR)
admin_account = AdminAccount.query.filter_by(id=draw_record.user_id, status=1).first()
if not admin_account:
return jsonify(ACCOUNT_NOT_EXISTS_ERROR)
admin_openid = AdminOpenid.query.filter_by(user_id=admin_account.id, status=1).all()
if not admin_openid:
return jsonify(ADMIN_OPENID_NOT_EXIST_ERROR)
openid_list = [x.openid for x in admin_openid]
draw_money = int(draw_record.real_total / len(openid_list))
draw_money_list = [draw_money for i in range(len(openid_list) - 1)]
draw_money_list.append(draw_record.real_total - draw_money * (len(openid_list) - 1))
random.shuffle(draw_money_list)
for i in range(len(openid_list) - 1):
draw_money = draw_money_list[i]
open_id = openid_list[i]
data = {
"user_id": open_id,
"amount": draw_money,
"out_trade_no": RentService.create_order_no(prefix="DR"),
"desc": draw_record.draw_month + "月份个人提现"
}
result = WeChatPayService(app_id=platform_appid_config_list[1],
config_name=pay_config_list[1]).do_transfer(data)
if result:
draw_record.status = 1
draw_record.check_admin_id = g.user.id
draw_record.draw_time = datetime.datetime.now()
db.session.add(draw_record)
db.session.commit()
dd = DrawDetail()
dd.draw_id = draw_record.id
dd.open_id = open_id
dd.draw_no = result["out_trade_no"]
dd.payment_no = result["payment_no"]
dd.payment_time = result["payment_time"]
dd.business_id = draw_record.business_id
dd.draw_month = draw_record.draw_month
dd.total = draw_record.real_total
dd.real_total = draw_money
dd.status = 1
db.session.add(dd)
db.session.commit()
return BaseResponse(data=draw_money_list)
...@@ -82,6 +82,30 @@ class WeChatPayService(WeChatPay): ...@@ -82,6 +82,30 @@ class WeChatPayService(WeChatPay):
logger.info(e) logger.info(e)
continue continue
def do_transfer(self, refund_data):
"""
:param
refund_data:
:return:
"""
for i in range(3):
try:
result = self.transfer.transfer(**refund_data)
print(result)
return_code = result['return_code']
result_code = result.get('result_code')
if return_code != 'SUCCESS' or result_code != 'SUCCESS':
continue
else:
if result.get("err_code", None):
continue
return result
except Exception as e:
logger.info(e)
continue
@staticmethod @staticmethod
def get_nonce_str(): def get_nonce_str():
''' '''
......
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