Commit d49f00dc authored by xupeng's avatar xupeng

代码提交

parent f3e40046
......@@ -6,7 +6,7 @@
<excludeFolder url="file://$MODULE_DIR$/fs-env" />
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="jdk" jdkName="Python 3.8 (financial-system)" jdkType="Python SDK" />
<orderEntry type="jdk" jdkName="Python 3.8 (financial_system)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="PyDocumentationSettings">
......
......@@ -12,3 +12,4 @@ def get_db():
db.close()
This diff is collapsed.
import datetime
import math
import threading
import requests
from sqlalchemy import and_, func
from sqlalchemy.orm import Session
from libs.functions import get_now_timestamp, get_now_datetime
from core.config.env import env
from libs.db_link import LinkMysql
from libs.functions import get_now_timestamp, get_now_datetime, search, get_ip, get_order
from libs.orm import QueryAllData
from libs.token_verify import get_current_user
from models.recharge import Settlement, Fitransferlog, FinanceFixLog, Account_log
from models.recharge import Settlement, Fitransferlog, FinanceFixLog, Account_log, Paymentlog
from models.guild import Guild
from models.account import Account
from models.users import V2User
......@@ -18,7 +24,7 @@ locka = threading.Lock()
class GuildSet(object):
def __init__(self):
self.settlement_list = []
self.linkmysql = LinkMysql(env.MysqlDB)
def dispose_guild_data(self, db, num):
guild_list = []
locka.acquire()
......@@ -29,18 +35,18 @@ class GuildSet(object):
guild_list.append(info_dict)
self.settlement_list += guild_list
def query_guild_data(self, db):
msg_count = db.query(func.count(Settlement.id)).scalar()
num = math.ceil(msg_count / 10)
# 创建线程
ths = []
for x in range(num):
ths.append(threading.Thread(target=self.dispose_guild_data, args=[db, x]))
for y in range(num):
ths[y].start()
for z in range(num):
ths[z].join()
return self.settlement_list
# def query_guild_data(self, db):
# msg_count = db.query(func.count(Settlement.id)).scalar()
# num = math.ceil(msg_count / 10)
# # 创建线程
# ths = []
# for x in range(num):
# ths.append(threading.Thread(target=self.dispose_guild_data, args=[db, x]))
# for y in range(num):
# ths[y].start()
# for z in range(num):
# ths[z].join()
# return self.settlement_list
def get_guild_data(self, db: Session, param):
"""公会结算"""
......@@ -68,33 +74,60 @@ class GuildSet(object):
if guild_info:
return guild_info[(int(param.page) - 1) * param.size:param.size * param.page], len(guild_info)
return [], 0
# def get_guild_data(self,page,size):
# count_sql = f'SELECT count(*) FROM `guild_settlement_log` as t inner join guild as g on g.id=t.guild_id'
# count = self.linkmysql.query_mysql(count_sql)[0].get("count(*)") # 总条数
# sql = f'SELECT t.guild_id,b.card_no as account,t.guild_name,IFNULL(t.balance,0) +IFNULL(t.pearl,0) as all_money,FROM_UNIXTIME(t.create_time,"%Y-%c-%d %h:%i:%s") as create_time,t.`status`,b.bank_of_deposit_name as bank_name FROM `guild_settlement_log` as t inner join guild as g on g.id=t.guild_id LEFT JOIN bind_bank as b on b.guild_id=t.guild_id ORDER BY t.id limit {page},{(size)}'
# statement_list = self.linkmysql.query_mysql(sql) # 提现总数
# return statement_list, count
def update_guild_info(self, db: Session, data):
def update_guild_info(self,data):
"""公会结算修改"""
if (data.status or data.status == 0) and data.status < 2:
db.query(Settlement).filter(Settlement.id == data.id).update({Settlement.status: data.status + 1})
db.commit()
def paymentset_guild_data(db: Session, dbname, params):
paymentset_filters = []
if params.get("id"):
paymentset_filters.append(dbname.guild_id == params.get("guild_id"))
if params.get("cont"):
paymentset_filters.append(dbname.cont == params.get("cont"))
if params.get("money"):
paymentset_filters.append(dbname.money == params.get("money"))
if params.get("url"):
paymentset_filters.append(dbname.url == params.get("url"))
if params.get("uuid"):
paymentset_filters.append(dbname.uuid == params.get("uuid"))
if params.get("start_time"):
paymentset_filters.append(dbname.create_time >= params.get("start_time"))
if params.get("end_time"):
paymentset_filters.append(dbname.create_time <= params.get("end_time"))
querydata, count = QueryAllData(db, dbname, params, paymentset_filters).query_data()
data = [QueryAllData.serialization(item) for item in querydata]
return data, count
id =data.get("id")
guild_sql =f"SELECT count(*) FROM `guild_settlement_log` where id={id})"
guild_data = self.linkmysql.query_mysql(guild_sql)
if guild_data:
status=1 if data.get("status")==0 else 2
guild_sql=f"UPDATE guild_settlement_log set status={status} where id={id}"
self.linkmysql.excete_mysql(guild_sql)
# def paymentset_guild_data(db: Session, dbname, params):
# paymentset_filters = []
# if params.get("id"):
# paymentset_filters.append(dbname.guild_id == params.get("guild_id"))
# if params.get("cont"):
# paymentset_filters.append(dbname.cont == params.get("cont"))
# if params.get("money"):
# paymentset_filters.append(dbname.money == params.get("money"))
# if params.get("url"):
# paymentset_filters.append(dbname.url == params.get("url"))
# if params.get("uuid"):
# paymentset_filters.append(dbname.uuid == params.get("uuid"))
# if params.get("start_time"):
# paymentset_filters.append(dbname.create_time >= params.get("start_time"))
# if params.get("end_time"):
# paymentset_filters.append(dbname.create_time <= params.get("end_time"))
# querydata, count = QueryAllData(db, dbname, params, paymentset_filters).query_data()
# data = [QueryAllData.serialization(item) for item in querydata]
# return data, count
def paymentset_guild_data(page,size):
count_sql = f"SELECT count(*) FROM `payment_log`"
paymentset_sql = LinkMysql(env.MysqlDB).query_mysql(count_sql)
total=paymentset_sql[0].get("count(*)")
list_sql=f"SELECT money,cont,url,FROM_UNIXTIME(create_time,'%Y-%c-%d %h:%i:%s') as create_time FROM `payment_log` ORDER BY id desc limit {page},{(size)} "
payment_list = LinkMysql(env.MysqlDB).query_mysql(list_sql)
list=[]
for item in range(len(payment_list)):
payment_list[item]['url'] = env.oss_url + payment_list[item].get("url")
items = payment_list[item]
list.append(items)
return list, total
def outon_account_data(db: Session, dbname, params):
......@@ -259,4 +292,31 @@ def update_recovery_table(db: Session,data):
except Exception as e:
print(e)
return {}
return data
\ No newline at end of file
return data
def transfer_query(data):
'''
调用
'''
print(data)
print(data.cont)
payment_sql=f"insert into payment_log(cont,money,url,uuid) values({data.cont},{data.money},{data.url},{data.uuid})"
print(payment_sql)
LinkMysql(env.MysqlDB).excete_mysql(payment_sql)
params={}
if data.money>0:
method='Server.BaseExecute.Increase'
params['dst_uuid']=data.uuid
params['ip']=get_ip()
params['dst_amount_type']='Payment'
params['amount']='consumable'
params['fee']=data.money*-1
params['reference_number']=get_order()
params['reference_type']='finance_admin_fix'
params['reference_info']=[]
params['timestamp']=0
else:
method='Server.BaseExecute.Reduce'
response =search(params=data,method=method)
print(response.text)
\ No newline at end of file
......@@ -87,7 +87,7 @@ class PaymentAdd(BaseModel):
url: str
def __str__(self):
return "uuid:%s, money:%s" % (str(self.uuid), self.money)
return "uuid:%s, money:%s ,cont:%s ,url:%s" % (str(self.uuid), self.money,self.cont,self.url)
class PaymentAccountlList(PaymentWithdrawalList):
......
import json
from datetime import datetime
from charset_normalizer.md import Optional
from app.api.statement import crud, schemas, guild
from app.api.account import schemas as acc_schemas
from app import get_db
......@@ -7,57 +10,67 @@ from fastapi import Depends, APIRouter, File, Request
from sqlalchemy.orm import Session
from app.api.statement.crud import RechargeStatement, WithdrawStatement
from app.api.statement.guild import GuildSet, paymentset_guild_data, outon_account_data, accout_list_data, \
query_uuid_or_user_number, account_money, transfer_money
query_uuid_or_user_number, account_money, transfer_money, transfer_query
from app.api.statement.schemas import PaymentWithdrawalList, PaymentAdd, PaymentAccountlList, UserNumber, CreateBill
from core.config.env import env
from libs.functions import search
from libs.img_code import new_upload_file, random_number
from libs.result_format import HttpResultResponse
from libs.token_verify import login_required
from models.recharge import Paymentlog, Fiaccount, Fitransferlog, Account_log
from models.recharge import Paymentlog, Fitransferlog, Account_log
from models.account import Account
router = APIRouter()
@router.post("/recharge/list")
def statement_recharge_list(data: schemas.StatementList,token=Depends(login_required), db: Session = Depends(get_db)):
@router.get("/recharge/list")
def statement_recharge_list(page: Optional[int] = 1, size: Optional[int] = 10,token=Depends(login_required)):
"""充值报表列表"""
statement_list, total, money = RechargeStatement().get_statements(db, data, 1)
return HttpResultResponse(total=total, count=float(money), data=statement_list)
# page: Optional[int] = None
# size: Optional[int] = None
# start_time: Optional[str] = ""
# end_time: Optional[str] = ""
# order_number: Optional[str] = ""
# user_id: Optional[str] = ""
# sid: Optional[str] = ""
# pay_channel: Optional[str] = ""
total,statement_list,money= RechargeStatement().query_data(page,size)
return HttpResultResponse(total=total,count=float(money),data=statement_list)
@router.post("/derive/excel")
def statement_derive_excel(data: schemas.StatementList, request: Request, db: Session = Depends(get_db)):
"""充值报表导出"""
"""充值报表导出 需要修改"""
header_list = request.get("headers")
statement_list = RechargeStatement().get_statements(db, data)
return crud.data_to_file(db, statement_list, "充值报表", header_list)
@router.post("/userWithdrawal/list")
def user_withdrawal_list(data: schemas.UserWithdrawalList,token=Depends(login_required), db: Session = Depends(get_db)):
@router.get("/userWithdrawal/list")
def user_withdrawal_list(page: Optional[int] = 0, size: Optional[int] = 10,token=Depends(login_required)):
"""用户提现列表"""
statement_list, total, money, final_money = WithdrawStatement().get_user_withdraw_cash(db, data)
statement_list, total, money, final_money = WithdrawStatement().get_user_withdraw_cash(page,size)
return HttpResultResponse(total=total, count=float(money), actual_count=final_money, data=statement_list)
@router.post("/guildWithdrawal/list")
def guild_withdrawal_list(data: schemas.GuildWithdrawalList,token=Depends(login_required), db: Session = Depends(get_db)):
#http://fiance-rys.3yakj.com/Guild/settlement
@router.get("/guildWithdrawal/list")
def guild_withdrawal_list(page: Optional[int] = 1, size: Optional[int] = 10,token=Depends(login_required)):
"""公会提现列表"""
guild_list, total, money, final_money = WithdrawStatement().get_guild_withdraw_cash(db, data)
guild_list, total, money, final_money = WithdrawStatement().get_guild_withdraw_cash(page,size)
return HttpResultResponse(total=total, count=float(money), actual_count=final_money, data=guild_list)
@router.post("/guild/settlement")
def guild_settlement_list(data: schemas.GuildWithdrawalList,token=Depends(login_required), db: Session = Depends(get_db)):
@router.get("/guild/settlement")
def guild_settlement_list(page: Optional[int] = 1, size: Optional[int] = 10,token=Depends(login_required)):
"""公会结算"""
guild_list, total = GuildSet().get_guild_data(db, data)
guild_list, total = GuildSet().get_guild_data(page,size)
return HttpResultResponse(total=total, data=guild_list)
@router.post("/guild/payment")
def guild_payment_list(data:PaymentWithdrawalList,token=Depends(login_required),db: Session = Depends(get_db)):
@router.get("/guild/payment")
def guild_payment_list(page: Optional[int] = 1, size: Optional[int] = 10,token=Depends(login_required)):
"""打款记录"""
payment_list, total = paymentset_guild_data(db,Paymentlog,data.dict(exclude_none=True))
payment_list, total = paymentset_guild_data(page,size)
return HttpResultResponse(total=total, data=payment_list)
......@@ -72,13 +85,9 @@ async def uploadFile(a_file: bytes = File(...),token=Depends(login_required),):
@router.post("/payment/add")
def guild_payment_list(data:PaymentAdd,token=Depends(login_required),db: Session = Depends(get_db)):
def guild_payment_list(data:PaymentAdd,db: Session = Depends(get_db)):
"""提交打款"""
dataPayment = Paymentlog(uuid=data.uuid, money=data.money, cont=data.cont,url=data.url,create_time=datetime.now())
db.add(dataPayment)
db.commit()
db.refresh(dataPayment)
db.close()
transfer_query(data)
return HttpResultResponse(data='')
......@@ -121,9 +130,9 @@ def account_transfer_money(data: CreateBill, request: Request, db: Session = Dep
@router.post("/guild/update")
def guild_update_list(data: schemas.GuildUpdate, db: Session = Depends(get_db)):
def guild_update_list(data: schemas.GuildUpdate,token=Depends(login_required)):
"""公会结算"""
GuildSet().update_guild_info(db, data)
GuildSet().update_guild_info(data)
return HttpResultResponse()
......
......@@ -65,7 +65,6 @@ def token_user(token=Depends(auth_token), db: Session = Depends(get_db)):
@router.post("/create")
def create_user(data: schemas.UserCreate,token=Depends(login_required), db: Session = Depends(get_db)):
"""添加用户"""
print(data)
db_user = crud.get_user_by_name(db, username=data.username)
if db_user:
return HttpResultResponse(code=400, msg=HttpMessage.USER_EXIST)
......
......@@ -47,7 +47,10 @@ class Env(BaseSettings):
SECRET_KEY: str = "09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7"
ALGORITHM: str = "HS256"
PASSWORD: str = "fj123456"
DB_HISTORY = "3y_history"
DB_HISTORY = "3yakj_v2"
# guild_url=""
oss_url='http://oss.3yakj.com/application_static_data'
clear_url="http://192.168.4.124:8002"
class TestingEnv(Env):
......
......@@ -20,11 +20,15 @@ SQLALCHEMY_DATABASE_URL = f'sqlite:///{modul_path}/sql_app.db'
# engine = create_engine(
# SQLALCHEMY_DATABASE_URL, encoding='utf-8', echo=True, connect_args={'check_same_thread': False}
# )
#数据中心测试服
engine = create_engine('mysql+mysqldb://data_center:KCMBfAjeJhbJXsSe@43.138.132.9:3398/finance')
#财务原数据数据库
engine_3yakj = create_engine('mysql+mysqldb://root:c1ea602311a369f6@106.55.103.148:3398/3yakj_v2')
# 数据库 session 类,用于创建 session 实例
# autoflush 是指发送数据库语句到数据库,但数据库不一定执行写入到磁盘
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Session3ya = sessionmaker(autocommit=False, autoflush=False, bind=engine_3yakj)
# 创建 Base 类,用于 ORM 模型的继承
Base = declarative_base()
......@@ -40,3 +40,9 @@ class LinkMysql(object):
cursor.close()
conn.close()
return last_id
#执行
def excete_mysql(self, sql):
conn = self.POOLMYSQL.connection()
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute(sql)
import hashlib
import json
import socket
import time
import random
import uuid as u
from datetime import datetime
from datetime import datetime, timedelta
import requests
from core.config.env import env
def get_now_timestamp():
......@@ -17,11 +24,33 @@ def get_now_timestamp():
def get_now_datetime():
"""
获取现在时间
return int eg:1667664000
"""
return datetime.now().strftime('%Y-%m-%d %H:%M:%S')
def get_before_timestamp(n):
"""获取n天前时间"""
data_str = datetime.now() - timedelta(days=int(n))
before_n_days = data_str.strftime("%Y-%m-%d")
return before_n_days
def get_yesterday_timestamp():
"""获取昨天时间戳"""
data_str = datetime.now() - timedelta(days=1)
before_n_days = data_str.strftime("%Y-%m-%d")
time_array = time.strptime(f"{before_n_days} 00:00:00", "%Y-%m-%d %H:%M:%S")
today_str = datetime.now().strftime('%Y-%m-%d')
today_array = time.strptime(f"{today_str} 00:00:00", "%Y-%m-%d %H:%M:%S")
return int(time.mktime(time_array)), int(time.mktime(today_array))
def time_str_to_timestamp(time_str):
"""时间字符串类型 转为int"""
time_array = time.strptime(time_str, "%Y-%m-%d %H:%M:%S")
return int(time.mktime(time_array))
def md5(s):
"""md5加密"""
sign_str = hashlib.md5()
......@@ -34,6 +63,13 @@ def uuid():
return str(u.uuid4())
def get_order():
"""生成订单号"""
number = random.randint(10000000, 99999999)
timestamp = get_now_timestamp()
return datetime.now().strftime('%Y%m%d%H%M%S') + str(timestamp) + number
# 页数页码校验
def wrapper_out():
def wrapper(func):
......@@ -44,3 +80,28 @@ def wrapper_out():
return ret
return inner
return wrapper
def search(params, method):
"""
调用清算接口
:param params: 传入参数
:param method: 传入方法
"""
url = env.clear_url
header = {
"RPC-METHOD": method,
"RPC-ID": '159',
"RPC-PROTOCOL": "jsonrpc",
"RPC-VERSION": "2.0"
}
response = requests.post(url=url, headers=header, json=params)
if response.status_code != 200:
return {"status": 0}
text = json.loads(response.text)
return {"status": 1, 'data': text.get('result')}
def get_ip():
res = socket.gethostbyname(socket.gethostname())
return res
\ No newline at end of file
import decimal
import json
from datetime import datetime
from fastapi import status
from fastapi.responses import Response
......@@ -24,17 +26,20 @@ class DecimalEncoder(json.JSONEncoder):
def default(self, res):
if isinstance(res, decimal.Decimal):
return float(res)
if isinstance(res, datetime):
print(res.strftime("%Y-%m-%d %H:%M:%S"))
return res.strftime("%Y-%m-%d %H:%M:%S")
super(DecimalEncoder, self).default(res)
class HttpResultResponse(Response):
def __init__(self, code=None, msg=None, **kwargs):
def __init__(self, code=None, msg=None,**kwargs):
result_dict = {
'code': code if code else status.HTTP_200_OK,
'msg': msg if msg else HttpMessage.SUCCESS
'msg': msg if msg else HttpMessage.SUCCESS,
}
result_dict = {**result_dict, **kwargs}
print(result_dict)
super().__init__(
content=json.dumps(result_dict, cls=DecimalEncoder),
media_type="application/json",
......
import datetime
import json
from jose.exceptions import JWEError
from sqlalchemy.orm import Session
from fastapi import Depends, HTTPException, status
from fastapi.security import OAuth2PasswordBearer
from jose import jwt, JWTError
from jose import jwt, JWTError, ExpiredSignatureError
from app import get_db
from app.api.role.crud import get_id_to_authority
from app.api.users import crud
from app.api.users.login_verification import get_user
from core.config.env import env
from libs.functions import md5
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
......@@ -49,10 +52,11 @@ def get_current_user(db: Session, token: str = Depends(oauth2_scheme)):
user_info = crud.get_user_by_name(db, user_data.username)
role_info = get_id_to_authority(db, user_info.role_id)
auth_list = role_info.authority.split(',')
auth_list = [int(i) for i in auth_list] if len(auth_list) > 1 else []
json_data = {
"user_id": user_data.id,
"username": user_data.username,
"authority": [int(i) for i in auth_list],
"authority": auth_list,
"type": 0 if '0' in auth_list else 1
}
return json_data
......
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