Commit 022014ed authored by xupeng's avatar xupeng

新增财务类型

parent acd77a5f
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<excludeFolder url="file://$MODULE_DIR$/fs-env" /> <excludeFolder url="file://$MODULE_DIR$/fs-env" />
<excludeFolder url="file://$MODULE_DIR$/venv" /> <excludeFolder url="file://$MODULE_DIR$/venv" />
</content> </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" /> <orderEntry type="sourceFolder" forTests="false" />
</component> </component>
<component name="PyDocumentationSettings"> <component name="PyDocumentationSettings">
......
...@@ -91,3 +91,5 @@ class RecoveryTable(BaseModel): ...@@ -91,3 +91,5 @@ class RecoveryTable(BaseModel):
class RecoveryupdateTable(RecoveryTable): class RecoveryupdateTable(RecoveryTable):
id: int id: int
import math import math
import threading import threading
from concurrent.futures.thread import ThreadPoolExecutor from concurrent.futures.thread import ThreadPoolExecutor
from datetime import datetime
import openpyxl import openpyxl
import pandas as pd import pandas as pd
from sqlalchemy import and_, func from fastapi import Depends
from sqlalchemy import func, and_
from app import get_db
from app.api.statement import schemas
from app.api.statement.guild import query_token from app.api.statement.guild import query_token
from starlette.responses import StreamingResponse from starlette.responses import StreamingResponse
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
...@@ -15,6 +21,8 @@ from libs.db_link import LinkMysql ...@@ -15,6 +21,8 @@ from libs.db_link import LinkMysql
from libs.functions import time_str_to_timestamp, get_month_last_month from libs.functions import time_str_to_timestamp, get_month_last_month
from libs.orm import QueryAllData from libs.orm import QueryAllData
from models.recharge import Recharge, UserWC, GuildWC, FinanceFixLog from models.recharge import Recharge, UserWC, GuildWC, FinanceFixLog
from models.menuconfig import Menuconfig
from models.users import User
locka = threading.Lock() locka = threading.Lock()
...@@ -48,18 +56,21 @@ class RechargeStatement(object): ...@@ -48,18 +56,21 @@ class RechargeStatement(object):
# self.once_res=[] # self.once_res=[]
# self.moeny_data=[] # self.moeny_data=[]
def query_data(self,page,size,order_number,uuid,sid,start_time,end_time,type,reference_type,month_type): def query_data(self,db,page,size,order_number,uuid,sid,start_time,end_time,type,menu_id,month_type):
query=[] query=[]
if order_number: if order_number:
query.append(f"reference_number={order_number} ") query.append(f"reference_number={order_number} ")
if uuid: if uuid:
query.append(f"uuid={uuid} ") query.append(f"uuid='{uuid}'")
if sid: if sid:
query.append(f"sid='{sid}' ") query.append(f"sid='{sid}' ")
if type: if type:
query.append(f"type='{type}' ") query.append(f"type='{type}' ")
if reference_type: if menu_id:
query.append(f"reference_type='{reference_type}'") querydata=db.query(Menuconfig).filter(Menuconfig.id.in_(tuple(menu_id)))
reference_data = [QueryAllData.serialization(item,remove={'menu_name','remark','menu_type','create_time','id'}) for item in querydata]
reference_type=tuple([item.get("menu_label") for item in reference_data])
query.append(f"reference_type in {reference_type}")
if month_type==1: if month_type==1:
if start_time: if start_time:
query.append(f" create_time >= {time_str_to_timestamp(start_time + ' 00:00:00')} ") query.append(f" create_time >= {time_str_to_timestamp(start_time + ' 00:00:00')} ")
...@@ -88,22 +99,22 @@ class RechargeStatement(object): ...@@ -88,22 +99,22 @@ class RechargeStatement(object):
def statistics_data(self,month_type,query,page,size,now_month): def statistics_data(self,month_type,query,page,size,now_month):
'''统计''' '''统计'''
if month_type==1: if month_type==1:
count_sql = f"SELECT count(*) FROM assets_log_{now_month} where {query} and reference_type in('picture_scroll_recharge','relic_recharge','userRecharge','pay_discount')" count_sql = f"SELECT count(*) FROM assets_log_{now_month} where {query}"
count = self.linkmysql.query_mysql(count_sql)[0].get("count(*)") count = self.linkmysql.query_mysql(count_sql)[0].get("count(*)")
sql = f"SELECT id,a.uuid,a.amount,FROM_UNIXTIME(a.create_time,'%Y-%c-%d %h:%i:%s') as payment_time,a.reference_type,a.reference_number FROM assets_log_{now_month} as a where {query} and reference_type in('picture_scroll_recharge','relic_recharge','userRecharge','pay_discount') ORDER BY id desc limit {(int(page) - 1) * size},{size}" sql = f"SELECT id,a.uuid,a.amount,FROM_UNIXTIME(a.create_time,'%Y-%c-%d %h:%i:%s') as payment_time,a.reference_type,a.reference_number FROM assets_log_{now_month} as a where {query} ORDER BY id desc limit {(int(page) - 1) * size},{size}"
once_res = self.linkmysql.query_mysql(sql) once_res = self.linkmysql.query_mysql(sql)
money_sql = f"SELECT sum(amount) FROM assets_log_{now_month} where {query} and reference_type in('picture_scroll_recharge','relic_recharge','userRecharge','pay_discount')" money_sql = f"SELECT sum(amount) FROM assets_log_{now_month} where {query}"
moeny_data = self.linkmysql.query_mysql(money_sql)[0].get("sum(amount)") if \ moeny_data = self.linkmysql.query_mysql(money_sql)[0].get("sum(amount)") if \
self.linkmysql.query_mysql(money_sql)[0].get("sum(amount)") != None else 0 self.linkmysql.query_mysql(money_sql)[0].get("sum(amount)") != None else 0
else: else:
count_sql = "SELECT sum(a.b) FROM ("f"SELECT count(*) as b FROM assets_log_{int(now_month[0])} where {(' and '.join(query[0]))} and reference_type in('picture_scroll_recharge','relic_recharge','userRecharge','pay_discount') UNION ALL SELECT count(*) FROM assets_log_{int(now_month[1])} where {(' and '.join(query[1]))} and reference_type in('picture_scroll_recharge','relic_recharge','userRecharge','pay_discount')) AS a " count_sql = "SELECT sum(a.b) FROM ("f"SELECT count(*) as b FROM assets_log_{int(now_month[0])} where {(' and '.join(query[0]))} UNION ALL SELECT count(*) FROM assets_log_{int(now_month[1])} where {(' and '.join(query[1]))}) AS a "
count = self.linkmysql.query_mysql(count_sql)[0].get("sum(a.b)") count = self.linkmysql.query_mysql(count_sql)[0].get("sum(a.b)")
query1=(' and '.join(query[0])) query1=(' and '.join(query[0]))
query2=(' and '.join(query[1])) query2=(' and '.join(query[1]))
sql = f"SELECT id,uuid,amount,FROM_UNIXTIME(create_time,'%Y-%c-%d %h:%i:%s') as payment_time,reference_type,reference_number FROM assets_log_{int(now_month[0])} where {query1} and reference_type in('picture_scroll_recharge','relic_recharge','userRecharge','pay_discount') UNION ALL SELECT id,uuid,amount,FROM_UNIXTIME(create_time,'%Y-%c-%d %h:%i:%s') as payment_time,reference_type,reference_number FROM assets_log_{int(now_month[1])} where {query2} and reference_type in('picture_scroll_recharge','relic_recharge','userRecharge','pay_discount') ORDER BY id desc limit {(int(page) - 1) * size},{size}" sql = f"SELECT id,uuid,amount,FROM_UNIXTIME(create_time,'%Y-%c-%d %h:%i:%s') as payment_time,reference_type,reference_number FROM assets_log_{int(now_month[0])} where {query1} UNION ALL SELECT id,uuid,amount,FROM_UNIXTIME(create_time,'%Y-%c-%d %h:%i:%s') as payment_time,reference_type,reference_number FROM assets_log_{int(now_month[1])} where {query2} ORDER BY id desc limit {(int(page) - 1) * size},{size}"
once_res = self.linkmysql.query_mysql(sql) once_res = self.linkmysql.query_mysql(sql)
money_sql = f"SELECT sum(a.b) FROM ("f"SELECT sum(amount) as b FROM assets_log_{int(now_month[0])} where {(' and '.join(query[0]))} and reference_type in('picture_scroll_recharge','relic_recharge','userRecharge','pay_discount') UNION ALL SELECT sum(amount)FROM assets_log_{int(now_month[1])} where {(' and '.join(query[1]))} and reference_type in('picture_scroll_recharge','relic_recharge','userRecharge','pay_discount') ) AS a " money_sql = f"SELECT sum(a.b) FROM ("f"SELECT sum(amount) as b FROM assets_log_{int(now_month[0])} where {(' and '.join(query[0]))} UNION ALL SELECT sum(amount)FROM assets_log_{int(now_month[1])} where {(' and '.join(query[1]))}) AS a "
moeny_data = self.linkmysql.query_mysql(money_sql)[0].get("sum(a.b)") if \ moeny_data = self.linkmysql.query_mysql(money_sql)[0].get("sum(a.b)") if \
self.linkmysql.query_mysql(money_sql)[0].get("sum(a.b)") != None else 0 self.linkmysql.query_mysql(money_sql)[0].get("sum(a.b)") != None else 0
return count, once_res, moeny_data return count, once_res, moeny_data
...@@ -120,9 +131,10 @@ class RechargeStatement(object): ...@@ -120,9 +131,10 @@ class RechargeStatement(object):
if data.order_number: if data.order_number:
query.append(f"id={data.order_number} ") query.append(f"id={data.order_number} ")
if data.user_id: if data.user_id:
query.append(f"uuid={data.user_id} ") query.append(f"uuid='{data.user_id}' ")
if data.sid: if data.sid:
query.append(f"sid='{data.sid}' ") query.append(f"sid='{data.sid}' ")
if data.month_type==1: if data.month_type==1:
if data.start_time: if data.start_time:
query.append(f" create_time >= {time_str_to_timestamp(data.start_time + ' 00:00:00')} ") query.append(f" create_time >= {time_str_to_timestamp(data.start_time + ' 00:00:00')} ")
...@@ -139,12 +151,12 @@ class RechargeStatement(object): ...@@ -139,12 +151,12 @@ class RechargeStatement(object):
def data_delcy(self,month_type,query,now_month): def data_delcy(self,month_type,query,now_month):
if month_type==1: if month_type==1:
sql = f"SELECT a.uuid,a.amount,FROM_UNIXTIME(a.create_time,'%Y-%c-%d %h:%i:%s') as payment_time,a.reference_type,a.order_number FROM assets_log_{now_month} as a where {query} and reference_type in('picture_scroll_recharge','relic_recharge','userRecharge','pay_discount')" sql = f"SELECT a.uuid,a.amount,FROM_UNIXTIME(a.create_time,'%Y-%c-%d %h:%i:%s') as payment_time,a.reference_type,a.order_number FROM assets_log_{now_month} as a where {query}"
once_res = self.linkmysql.query_mysql(sql) once_res = self.linkmysql.query_mysql(sql)
else: else:
query1=(' and '.join(query[0])) query1=(' and '.join(query[0]))
query2=(' and '.join(query[1])) query2=(' and '.join(query[1]))
sql = f"SELECT id,uuid,amount,FROM_UNIXTIME(create_time,'%Y-%c-%d %h:%i:%s') as payment_time,reference_type,order_number FROM assets_log_{int(now_month[0])} where {query1} UNION ALL SELECT id,uuid,amount,FROM_UNIXTIME(create_time,'%Y-%c-%d %h:%i:%s') as payment_time,reference_type,order_number FROM assets_log_{int(now_month[1])} where {query2} and reference_type in('picture_scroll_recharge','relic_recharge','userRecharge','pay_discount')" sql = f"SELECT id,uuid,amount,FROM_UNIXTIME(create_time,'%Y-%c-%d %h:%i:%s') as payment_time,reference_type,order_number FROM assets_log_{int(now_month[0])} where {query1} UNION ALL SELECT id,uuid,amount,FROM_UNIXTIME(create_time,'%Y-%c-%d %h:%i:%s') as payment_time,reference_type,order_number FROM assets_log_{int(now_month[1])} where {query2} "
once_res = self.linkmysql.query_mysql(sql) once_res = self.linkmysql.query_mysql(sql)
return once_res return once_res
...@@ -179,13 +191,17 @@ class WithdrawStatement(object): ...@@ -179,13 +191,17 @@ class WithdrawStatement(object):
data.append(query) data.append(query)
data.append(query1) data.append(query1)
return data return data
def get_user_withdraw_cash(self,page, size, uuid, status,start_time,end_time,month_type): def get_user_withdraw_cash(self,db,page, size, uuid, status,start_time,end_time,month_type,menu_id):
query = [] query = []
if uuid: if uuid:
query.append(f" uuid={uuid}") query.append(f" uuid='{uuid}'")
if status: if status:
query.append(f"status={status} ") query.append(f"status={status} ")
query.append(f"reference_type='userWithdrawal' ") if menu_id:
querydata=db.query(Menuconfig).filter(Menuconfig.id.in_(tuple(menu_id)))
reference_data = [QueryAllData.serialization(item,remove={'menu_name','remark','menu_type','create_time','id'}) for item in querydata]
reference_type=tuple([item.get("menu_label") for item in reference_data])
query.append(f"reference_type in {reference_type}")
if month_type==1: if month_type==1:
if start_time: if start_time:
query.append(f" create_time >= {time_str_to_timestamp(start_time + ' 00:00:00')} ") query.append(f" create_time >= {time_str_to_timestamp(start_time + ' 00:00:00')} ")
...@@ -223,14 +239,18 @@ class WithdrawStatement(object): ...@@ -223,14 +239,18 @@ class WithdrawStatement(object):
return count, once_res,moeny_data return count, once_res,moeny_data
def get_guild_withdraw_cash(self,page, size, name, status,start_time,end_time,month_type): def get_guild_withdraw_cash(self,db,page, size, name, status,start_time,end_time,month_type,menu_id):
"""公会提现""" """公会提现"""
query = [] query = []
if name: if name:
query.append(f" nickname like '%{name}%' ") query.append(f" nickname like '%{name}%' ")
if status: if status:
query.append(f"status={status} ") query.append(f"status={status} ")
query.append(f"reference_type='guildWithdrawal' ") if menu_id:
querydata=db.query(Menuconfig).filter(Menuconfig.id.in_(tuple(menu_id)))
reference_data = [QueryAllData.serialization(item,remove={'menu_name','remark','menu_type','create_time','id'}) for item in querydata]
reference_type=tuple([item.get("menu_label") for item in reference_data])
query.append(f"reference_type in {reference_type}")
if month_type == 1: if month_type == 1:
if start_time: if start_time:
query.append(f" create_time >= {time_str_to_timestamp(start_time + ' 00:00:00')} ") query.append(f" create_time >= {time_str_to_timestamp(start_time + ' 00:00:00')} ")
...@@ -285,3 +305,68 @@ class FinanceFix(object): ...@@ -285,3 +305,68 @@ class FinanceFix(object):
result.append(i) result.append(i)
return result, total[0]['num'] return result, total[0]['num']
return [], 0 return [], 0
def create_menu(db: Session, menu: schemas.MenuAdd):
try:
db_menu = Menuconfig(menu_name=menu.menu_name, menu_label=menu.menu_label,menu_type=menu.menu_type,create_time=datetime.now(),remark=menu.remark if menu.remark!='' else '')
db.add(db_menu)
db.commit()
db.refresh(db_menu)
except Exception as e:
print(e)
return {}
return db_menu
def get_menu_name(db: Session, menu_name: str):
return db.query(Menuconfig).filter(Menuconfig.menu_name == menu_name).first()
def get_menu_id(db: Session, id: str):
return db.query(Menuconfig).filter(Menuconfig.id == id).first()
def get_menu_update(db: Session,data):
query_data=db.query(Menuconfig).filter(Menuconfig.id == data.id).update({Menuconfig.menu_name: data.menu_name,
Menuconfig.menu_label: data.menu_label,
Menuconfig.menu_type: data.menu_type,
Menuconfig.remark: data.remark,
Menuconfig.create_time:datetime.now()
})
db.commit()
return query_data
def get_menu_delete(db: Session,id):
query_data=db.query(Menuconfig).filter(Menuconfig.id == id).delete()
db.commit()
return query_data
def get_menu_list(db: Session,page,size,menu_name,menu_label,menu_type):
querys=[]
if menu_name:
querys.append(Menuconfig.menu_name.like(f'%{menu_name}%'))
if menu_label:
querys.append(Menuconfig.menu_label == menu_label)
if menu_type:
querys.append(Menuconfig.menu_type == menu_type)
if querys:
querydata = db.query(Menuconfig).filter(*querys).order_by(
Menuconfig.id.desc()).offset((int(page) - 1) * size).limit(size)
data = [QueryAllData.serialization(item) for item in querydata]
else:
querydata = db.query(Menuconfig).filter().order_by(
Menuconfig.id.desc()).offset((int(page) - 1) * size).limit(size)
data = [QueryAllData.serialization(item) for item in querydata]
count = db.query(func.count(Menuconfig.id)).filter().scalar()
return data,count
def get_menu_config(db: Session,menu_type):
querys=[]
if menu_type:
querys.append(Menuconfig.menu_type == menu_type)
querydata = db.query(Menuconfig).filter(*querys).order_by(
Menuconfig.id.desc())
data = [QueryAllData.serialization(item,remove={'create_time','remark'}) for item in querydata]
return data
...@@ -131,3 +131,19 @@ class CreateBill(BaseModel): ...@@ -131,3 +131,19 @@ class CreateBill(BaseModel):
# if not v: # if not v:
# raise ValueError('缺少必传参数remark') # raise ValueError('缺少必传参数remark')
# return v # return v
class MenuAdd(BaseModel):
menu_name: str
menu_label: str
menu_type: int
remark: Optional[str] = None
class MenuEdit(BaseModel):
id: str
menu_name: str
menu_label: str
menu_type: int
remark: Optional[str] = None
...@@ -7,12 +7,12 @@ from app.api.account import schemas as acc_schemas ...@@ -7,12 +7,12 @@ from app.api.account import schemas as acc_schemas
from app import get_db from app import get_db
from fastapi import Depends, APIRouter, File, Request from fastapi import Depends, APIRouter, File, Request
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from app.api.statement.crud import RechargeStatement, WithdrawStatement from app.api.statement.crud import RechargeStatement, WithdrawStatement, get_menu_list, get_menu_config
from app.api.statement.guild import GuildSet, paymentset_guild_data, outon_account_data, accout_list_data, \ 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, transfer_query query_uuid_or_user_number, account_money, transfer_money, transfer_query
from app.api.statement.schemas import PaymentWithdrawalList, PaymentAdd, PaymentAccountlList, UserNumber, CreateBill from app.api.statement.schemas import PaymentWithdrawalList, PaymentAdd, PaymentAccountlList, UserNumber, CreateBill
from libs.img_code import new_upload_file, random_number from libs.img_code import new_upload_file, random_number
from libs.result_format import HttpResultResponse from libs.result_format import HttpResultResponse, HttpMessage
from libs.token_verify import login_required from libs.token_verify import login_required
from models.recharge import Fitransferlog from models.recharge import Fitransferlog
from models.account import Account from models.account import Account
...@@ -21,9 +21,9 @@ router = APIRouter() ...@@ -21,9 +21,9 @@ router = APIRouter()
@router.get("/recharge/list") @router.get("/recharge/list")
def statement_recharge_list(page: Optional[int] = 0, size: Optional[int] = 10,order_number: Optional[str] = "",uuid: Optional[int] = "",sid: Optional[str]="",start_time:Optional[str]='',end_time:Optional[str]="",types:Optional[str]="",reference_type:Optional[str]="",month_type:Optional[int]="",token=Depends(login_required)): def statement_recharge_list(db: Session = Depends(get_db),page: Optional[int] = 1, size: Optional[int] = 10,order_number: Optional[str] = "",uuid: Optional[str] = "",sid: Optional[str]="",start_time:Optional[str]='',end_time:Optional[str]="",types:Optional[str]="",menu_id:Optional[str]="",month_type:Optional[int]=""):
"""充值报表列表""" """充值报表列表"""
total,statement_list,money= RechargeStatement().query_data(page,size,order_number,uuid,sid,start_time,end_time,types,reference_type,month_type) total,statement_list,money= RechargeStatement().query_data(db,page,size,order_number,uuid,sid,start_time,end_time,types,menu_id,month_type)
return HttpResultResponse(total=total,count=float(money),data=statement_list) return HttpResultResponse(total=total,count=float(money),data=statement_list)
...@@ -36,21 +36,21 @@ def statement_derive_excel(data: schemas.StatementList, request: Request, db: Se ...@@ -36,21 +36,21 @@ def statement_derive_excel(data: schemas.StatementList, request: Request, db: Se
@router.get("/userWithdrawal/list") @router.get("/userWithdrawal/list")
def user_withdrawal_list(page: Optional[int] = 0, size: Optional[int] = 10,uuid:Optional[int]='',status:Optional[int]='',start_time:Optional[str]='',end_time:Optional[str]="",month_type:Optional[int]="",token=Depends(login_required)): def user_withdrawal_list(db: Session = Depends(get_db),page: Optional[int] = 1, size: Optional[int] = 10,uuid:Optional[str]='',status:Optional[int]='',start_time:Optional[str]='',end_time:Optional[str]="",month_type:Optional[int]="",menu_id:Optional[str]="",token=Depends(login_required)):
"""用户提现列表""" """用户提现列表"""
total,statement_list,money = WithdrawStatement(). get_user_withdraw_cash(page,size,uuid,status,start_time,end_time,month_type) total,statement_list,money = WithdrawStatement(). get_user_withdraw_cash(db,page,size,uuid,status,start_time,end_time,month_type,menu_id)
return HttpResultResponse(total=total, count=float(money), data=statement_list) return HttpResultResponse(total=total, count=float(money), data=statement_list)
@router.get("/guildWithdrawal/list") @router.get("/guildWithdrawal/list")
def guild_withdrawal_list(page: Optional[int] = 0, size: Optional[int] = 10,guild_id:Optional[int]='',status:Optional[int]='',start_time:Optional[str]='',end_time:Optional[str]="", month_type:Optional[int]="",token=Depends(login_required)): def guild_withdrawal_list(db: Session = Depends(get_db),page: Optional[int] = 1, size: Optional[int] = 10,guild_id:Optional[int]='',status:Optional[int]='',start_time:Optional[str]='',end_time:Optional[str]="", month_type:Optional[int]="",menu_id:Optional[str]="",token=Depends(login_required)):
"""公会提现列表 暂无""" """公会提现列表 暂无"""
total,statement_list,money= WithdrawStatement(). get_guild_withdraw_cash(page,size,guild_id,status,start_time,end_time,month_type) total,statement_list,money= WithdrawStatement(). get_guild_withdraw_cash(db,page,size,guild_id,status,start_time,end_time,month_type,menu_id)
return HttpResultResponse(total=total, count=float(money), data=statement_list) return HttpResultResponse(total=total, count=float(money), data=statement_list)
@router.get("/guild/settlement") @router.get("/guild/settlement")
def guild_settlement_list(page: Optional[int] = 0, size: Optional[int] = 10,status:Optional[int]='',start_time:Optional[str]='',end_time:Optional[str]="",guild_id:Optional[str]="",token=Depends(login_required)): def guild_settlement_list(page: Optional[int] = 1, size: Optional[int] = 10,status:Optional[int]='',start_time:Optional[str]='',end_time:Optional[str]="",guild_id:Optional[str]="",token=Depends(login_required)):
"""公会结算""" """公会结算"""
guild_list, total = GuildSet().get_guild_data(page, size,status,start_time,end_time,guild_id) guild_list, total = GuildSet().get_guild_data(page, size,status,start_time,end_time,guild_id)
return HttpResultResponse(total=total, data=guild_list) return HttpResultResponse(total=total, data=guild_list)
...@@ -188,3 +188,48 @@ def recovery_fix(data: acc_schemas.RecoveryupdateTable, token=Depends(login_requ ...@@ -188,3 +188,48 @@ def recovery_fix(data: acc_schemas.RecoveryupdateTable, token=Depends(login_requ
if res: if res:
return HttpResultResponse(code=500, msg=res) return HttpResultResponse(code=500, msg=res)
return HttpResultResponse() return HttpResultResponse()
@router.post("/menu/add")
def menu_add(data: schemas.MenuAdd, db: Session = Depends(get_db),token=Depends(login_required)):
"""新增财务菜单配置"""
db_user = crud.get_menu_name(db,menu_name=data.menu_name)
if db_user:
return HttpResultResponse(code=400, msg=HttpMessage.TYPE_NAME)
res = crud.create_menu(db=db,menu=data)
if not res:
return HttpResultResponse(code=500, msg=HttpMessage.LOSE)
return HttpResultResponse(data=res.id)
@router.get("/menu/list")
def menu_list(db: Session = Depends(get_db),page: Optional[int] = 1, size: Optional[int] = 10,menu_name: Optional[str] = "",menu_type: Optional[int] = "",menu_label: Optional[str] = "",token=Depends(login_required)):
"""菜单配置列表"""
menu_list,total = get_menu_list(db,page,size,menu_name,menu_label,menu_type)
return HttpResultResponse(total=total, data=menu_list)
@router.post("/menu/edit")
def menu_edit(data: schemas.MenuEdit,db: Session = Depends(get_db),page: Optional[int] = 1, size: Optional[int] = 10,menu_name: Optional[str] = "",menu_type: Optional[int] = "",menu_label: Optional[str] = "",token=Depends(login_required)):
"""修改配置列表"""
db_menu = crud.get_menu_id(db, id=data.id)
if db_menu:
db_menu = crud.get_menu_update(db,data)
else:
return HttpResultResponse(code=400, msg=HttpMessage.MENU_NOT_EXIST)
return HttpResultResponse(data=db_menu)
@router.delete("/menu/delete")
def menu_delte(id: Optional[int] = '',db: Session = Depends(get_db),page: Optional[int] = 1, size: Optional[int] = 10,menu_name: Optional[str] = "",menu_type: Optional[int] = "",menu_label: Optional[str] = "",token=Depends(login_required)):
"""删除菜单配置"""
crud.get_menu_delete(db,id)
return HttpResultResponse(code=200, msg=HttpMessage.SUCCESS)
@router.get("/menu/config")
def menu_list(db: Session = Depends(get_db),menu_type: Optional[int] = ""):
"""菜单配置下拉"""
menu_list = get_menu_config(db,menu_type)
return HttpResultResponse(data=menu_list)
\ No newline at end of file
...@@ -34,7 +34,7 @@ def create_access_token(data: dict, expires_delta: Optional[timedelta] = None): ...@@ -34,7 +34,7 @@ def create_access_token(data: dict, expires_delta: Optional[timedelta] = None):
expire = datetime.utcnow() + expires_delta expire = datetime.utcnow() + expires_delta
else: else:
# 否则的话,就默认用15分钟 # 否则的话,就默认用15分钟
expire = datetime.utcnow() + timedelta(minutes=60) expire = datetime.utcnow() + timedelta(minutes=15)
to_encode.update({'exp': expire}) to_encode.update({'exp': expire})
# 编码,至此 JWT tokens诞生 # 编码,至此 JWT tokens诞生
encoded_jwt = jwt.encode(to_encode, env.SECRET_KEY, algorithm=env.ALGORITHM) encoded_jwt = jwt.encode(to_encode, env.SECRET_KEY, algorithm=env.ALGORITHM)
......
...@@ -59,6 +59,7 @@ class QueryAllData: ...@@ -59,6 +59,7 @@ class QueryAllData:
self.db.session.commit() self.db.session.commit()
return self return self
def direct_update_(self): def direct_update_(self):
"""直接更新""" """直接更新"""
self.db.session.commit() self.db.session.commit()
......
...@@ -10,6 +10,7 @@ class HttpMessage(object): ...@@ -10,6 +10,7 @@ class HttpMessage(object):
SUCCESS = "操作成功" SUCCESS = "操作成功"
USER_EXIST = "用户已存在" USER_EXIST = "用户已存在"
USER_NOT_EXIST = "用户不存在" USER_NOT_EXIST = "用户不存在"
MENU_NOT_EXIST = "菜单不存在"
LOGIN_SUCCESS = "登录成功" LOGIN_SUCCESS = "登录成功"
ROLE_EXIST = "角色已存在" ROLE_EXIST = "角色已存在"
...@@ -17,6 +18,7 @@ class HttpMessage(object): ...@@ -17,6 +18,7 @@ class HttpMessage(object):
ACCOUNT_EXIST = "账号已存在" ACCOUNT_EXIST = "账号已存在"
TYPE_EXIST = "类目标识已存在" TYPE_EXIST = "类目标识已存在"
TYPE_NAME ='类型已存在'
DELETE_LOSE = '删除失败' DELETE_LOSE = '删除失败'
LOSE = '操作失败' LOSE = '操作失败'
...@@ -39,7 +41,6 @@ class HttpResultResponse(Response): ...@@ -39,7 +41,6 @@ class HttpResultResponse(Response):
'msg': msg if msg else HttpMessage.SUCCESS, 'msg': msg if msg else HttpMessage.SUCCESS,
} }
result_dict = {**result_dict, **kwargs} result_dict = {**result_dict, **kwargs}
print(result_dict)
super().__init__( super().__init__(
content=json.dumps(result_dict, cls=DecimalEncoder), content=json.dumps(result_dict, cls=DecimalEncoder),
media_type="application/json", media_type="application/json",
......
import datetime import datetime
import json import json
import time
from asyncio.log import logger
from jose.exceptions import JWEError, ExpiredSignatureError from jose.exceptions import JWEError, ExpiredSignatureError
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from fastapi import Depends, HTTPException, status from fastapi import Depends, HTTPException, status, FastAPI
from fastapi.security import OAuth2PasswordBearer from fastapi.security import OAuth2PasswordBearer
from jose import jwt, JWTError from jose import jwt, JWTError
from werkzeug import Request
from app import get_db from app import get_db
from app.api.role.crud import get_id_to_authority from app.api.role.crud import get_id_to_authority
from app.api.users import crud from app.api.users import crud
from app.api.users.login_verification import get_user from app.api.users.login_verification import get_user, create_access_token
from core.config.env import env from core.config.env import env
from libs.functions import md5 from libs.functions import md5
...@@ -35,6 +38,8 @@ def auth_token(token: str = Depends(oauth2_scheme)): ...@@ -35,6 +38,8 @@ def auth_token(token: str = Depends(oauth2_scheme)):
return '' return ''
def get_current_user(db: Session, token: str = Depends(oauth2_scheme)): def get_current_user(db: Session, token: str = Depends(oauth2_scheme)):
""" """
获取当前用户信息,实际上是一个解密token的过程 获取当前用户信息,实际上是一个解密token的过程
...@@ -76,8 +81,6 @@ def judgeToken(token): ...@@ -76,8 +81,6 @@ def judgeToken(token):
user_data = get_user(db, username=payload.get("username")) user_data = get_user(db, username=payload.get("username"))
old_password = md5(payload["password"]) old_password = md5(payload["password"])
if old_password == user_data.hashed_password: if old_password == user_data.hashed_password:
print(md5(payload["password"]))
print(user_data.hashed_password)
return True return True
else: else:
print("token 身份错误") print("token 身份错误")
......
...@@ -28,13 +28,13 @@ app.add_middleware( ...@@ -28,13 +28,13 @@ app.add_middleware(
@app.middleware("http") @app.middleware("http")
async def add_process_time_header(request: Request, call_next): async def add_process_time_header(request: Request, call_next):
hs = request.headers hs = request.headers
token=hs.get("authorization").replace('Bearer','').replace(' ','') token=hs.get("authorization")
start_time = time.time() start_time = time.time()
response = await call_next(request) response = await call_next(request)
process_time = time.time() - start_time process_time = time.time() - start_time
response.headers["X-Process-Time"] = str(process_time) response.headers["X-Process-Time"] = str(process_time)
if token: if token:
payload = jwt.decode(token, env.SECRET_KEY, algorithms=[env.ALGORITHM]) payload = jwt.decode(token.replace('Bearer','').replace(' ',''), env.SECRET_KEY, algorithms=[env.ALGORITHM])
timestamp=payload.get("exp") timestamp=payload.get("exp")
access_token_expires = timedelta(hours=time_format(timestamp)) access_token_expires = timedelta(hours=time_format(timestamp))
create_access_token({'username':payload.get("xup"),'password':payload.get("password")},expires_delta=access_token_expires) #更新token时间 create_access_token({'username':payload.get("xup"),'password':payload.get("password")},expires_delta=access_token_expires) #更新token时间
......
from core.storage.db import engine from core.storage.db import engine
from models import users, roles, recharge, account, margin, guild, export from models import users, roles, recharge, account, margin, guild, export,menuconfig
# 映射模型表 # 映射模型表
users.Base.metadata.create_all(bind=engine) users.Base.metadata.create_all(bind=engine)
...@@ -9,3 +9,4 @@ account.Base.metadata.create_all(bind=engine) ...@@ -9,3 +9,4 @@ account.Base.metadata.create_all(bind=engine)
margin.Base.metadata.create_all(bind=engine) margin.Base.metadata.create_all(bind=engine)
guild.Base.metadata.create_all(bind=engine) guild.Base.metadata.create_all(bind=engine)
export.Base.metadata.create_all(bind=engine) export.Base.metadata.create_all(bind=engine)
menuconfig.Base.metadata.create_all(bind=engine)
from sqlalchemy import Column, Integer, String, DateTime, Text
from core.storage.db import Base
from sqlalchemy_serializer import SerializerMixin
class Menuconfig(Base, SerializerMixin):
__tablename__ = "menuconfig"
id = Column(Integer, primary_key=True, index=True)
menu_name = Column(String(100), unique=True, index=True, comment="菜单类型名")
menu_label= Column(String(100), unique=True, index=True, comment="菜单类型别名")
menu_type = Column(Integer, comment="1是充值 2是消费")
remark = Column(Text, comment="备注")
create_time = Column(DateTime, comment="创建时间")
__table_args__ = {'comment': '财务菜单配置表'}
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