Commit 1b8aec4e by Aeolus

转账接口开发

parent d9056de0
......@@ -92,6 +92,7 @@ class AdminOpenid(Base):
id = Column(INTEGER(11), primary_key=True)
user_id = Column(INTEGER(11), 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)
status = Column(INTEGER(1), default=1, nullable=False)
created_at = Column(DateTime, nullable=False, server_default=text("CURRENT_TIMESTAMP"))
......@@ -155,14 +156,35 @@ class Business(Base):
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):
__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)
user_id = Column(INTEGER(11), nullable=False)
user_no = Column(String(25, 'utf8mb4_unicode_ci'), nullable=False)
draw_no = Column(VARCHAR(40), nullable=False, index=True)
business_id = Column(INTEGER(10))
business_id = Column(INTEGER(11))
draw_month = Column(VARCHAR(7))
total = Column(INTEGER(11))
real_total = Column(INTEGER(11))
......@@ -171,6 +193,7 @@ class DrawRecord(Base):
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"))
check_admin_id = Column(INTEGER(11))
class Hatch(Base):
......
......@@ -268,7 +268,9 @@ def run_edit_openid():
openids = json_data['openids']
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()
if rs:
rs.status = 1
......@@ -278,6 +280,7 @@ def run_edit_openid():
ao_model.user_id = g.user.id
ao_model.user_no = g.user.user_no
ao_model.openid = openid
ao_model.real_name = real_name
ao_model.status = 1
db.session.add(ao_model)
db.session.commit()
......@@ -288,6 +291,6 @@ def run_edit_openid():
def run_openid_list():
rs = AdminOpenid.query.filter_by(user_id=g.user.id, status=1).all()
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:
return BaseResponse(data=[])
......@@ -10,6 +10,7 @@ author:Aeolus
"""
import datetime
import logging
import random
import time
from flask import Blueprint, g, request, jsonify
......@@ -18,11 +19,13 @@ from sqlalchemy.exc import SQLAlchemyError
from config.commen_config import RENT_SALE_LOCK
from config.wechat_config import platform_appid_config_list, pay_config_list
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.wechat_service import WeChatPayService
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_response import BaseResponse
......@@ -418,8 +421,9 @@ def run_draw_list():
business_id = json_data.get("business_id", 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)
select_sql = """
select draw_record.draw_no,
draw_record.business_id,
......@@ -475,16 +479,6 @@ def run_draw_list():
return_data = []
if 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 = {
"business_id": info.business_id, "draw_month": info.draw_month, "total": info.total,
"real_total": info.real_total, "rate": info.rate, "status": info.status,
......@@ -495,3 +489,68 @@ def run_draw_list():
return_data.append(tmp)
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):
logger.info(e)
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
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