Commit 7e590df3 authored by xianyang's avatar xianyang

账户列表优化,月度统计导出接口

parent 48ad50d8
from datetime import datetime from datetime import datetime
import pandas as pd import pandas as pd
from sqlalchemy import and_ from sqlalchemy import and_, func
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from app.api.account import schemas from app.api.account import schemas
from libs.functions import wrapper_out from libs.functions import wrapper_out
...@@ -24,10 +24,12 @@ def get_account_list(db: Session, param): ...@@ -24,10 +24,12 @@ def get_account_list(db: Session, param):
result_list = [] result_list = []
if param.name: if param.name:
query_res = db.query(models.Account).filter(models.Account.name.like(f'%{param.name}%')).\ count = db.query(func.count(models.Account.id)).filter(models.Account.name.like(f'%{param.name}%')).scalar()
query_res = db.query(models.Account).filter(models.Account.name.like(f'%{param.name}%')).order_by(models.Account.id.desc()).\
offset((int(param.page) - 1) * param.size).limit(param.page * param.size).all() offset((int(param.page) - 1) * param.size).limit(param.page * param.size).all()
else: else:
query_res = db.query(models.Account).offset((int(param.page) - 1) * param.size).limit(param.page * param.size).all() count = db.query(func.count(models.Account.id)).scalar()
query_res = db.query(models.Account).order_by(models.Account.id.desc()).offset((int(param.page) - 1) * param.size).limit(param.page * param.size).all()
if not query_res: if not query_res:
return [] return []
for i in query_res: for i in query_res:
...@@ -43,7 +45,7 @@ def get_account_list(db: Session, param): ...@@ -43,7 +45,7 @@ def get_account_list(db: Session, param):
else: else:
serializer_info['output'] = [] serializer_info['output'] = []
result_list.append(serializer_info) result_list.append(serializer_info)
return result_list return result_list, count
def get_gift_type(db: Session): def get_gift_type(db: Session):
...@@ -132,6 +134,8 @@ def get_finance_details(db, data, is_list=None): ...@@ -132,6 +134,8 @@ def get_finance_details(db, data, is_list=None):
return [], 0, 0 if is_list else [] return [], 0, 0 if is_list else []
# 判断是列表还是导出接口 # 判断是列表还是导出接口
if is_list: if is_list:
if not serial_info:
return [], 0, 0
df = pd.DataFrame(serial_info) df = pd.DataFrame(serial_info)
count = df['amount'].apply(lambda x: x).sum() count = df['amount'].apply(lambda x: x).sum()
return serial_info[(int(data.page) - 1) * data.size:data.size * data.page], len(serial_info), count return serial_info[(int(data.page) - 1) * data.size:data.size * data.page], len(serial_info), count
......
...@@ -23,8 +23,8 @@ def create_account(data: schemas.AccountCreate, db: Session = Depends(get_db)): ...@@ -23,8 +23,8 @@ def create_account(data: schemas.AccountCreate, db: Session = Depends(get_db)):
@router.post("/list") @router.post("/list")
def user_list(data: schemas.AccountList, db: Session = Depends(get_db)): def user_list(data: schemas.AccountList, db: Session = Depends(get_db)):
"""账户列表""" """账户列表"""
result = crud.get_account_list(db, data) result, num = crud.get_account_list(db, data)
return HttpResultResponse(total=len(result), data=result) return HttpResultResponse(total=num, data=result)
@router.get("/gift/type") @router.get("/gift/type")
......
...@@ -72,22 +72,18 @@ class CalculationMonthlyBill(object): ...@@ -72,22 +72,18 @@ class CalculationMonthlyBill(object):
self.structure_list = [] self.structure_list = []
self.structure_key = [] self.structure_key = []
@staticmethod def month_statistics_task(self, date, key_type, page, size):
def data_to_table(data):
"""数据导出"""
bk = pd.DataFrame(data)
with pd.ExcelWriter(f'static/业务类型月度汇总报表.xlsx') as writer:
bk.to_excel(writer, sheet_name='业务类型月度汇总', index=False)
file = open(writer, 'rb')
return StreamingResponse(file, media_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
def month_statistics_task(self, date, page, size):
"""主函数""" """主函数"""
db = env.MysqlDB db = env.MysqlDB
db["database"] = env.DB_HISTORY db["database"] = env.DB_HISTORY
if key_type:
sql = f"SELECT reference_type, type, SUM(cast(amount as decimal(20,6)))/1000 as money FROM {date} where reference_type='{key_type}' GROUP BY reference_type, type ORDER BY reference_type"
else:
sql = f"SELECT reference_type, type, SUM(cast(amount as decimal(20,6)))/1000 as money FROM {date} GROUP BY reference_type, type ORDER BY reference_type" sql = f"SELECT reference_type, type, SUM(cast(amount as decimal(20,6)))/1000 as money FROM {date} GROUP BY reference_type, type ORDER BY reference_type"
try:
res_data = LinkMysql(db).query_mysql(sql) res_data = LinkMysql(db).query_mysql(sql)
except Exception as e:
return [], 0
for res in res_data: for res in res_data:
if res["reference_type"] in self.structure_key: if res["reference_type"] in self.structure_key:
continue continue
...@@ -114,7 +110,7 @@ class CalculationMonthlyBill(object): ...@@ -114,7 +110,7 @@ class CalculationMonthlyBill(object):
class CalculationMonthlyDetails(object): class CalculationMonthlyDetails(object):
"""月度详情"""
@staticmethod @staticmethod
def data_query(db, date, reference_type, is_out, page, size): def data_query(db, date, reference_type, is_out, page, size):
sql = f"SELECT reference_type,order_number,type,cast(amount as decimal(20,6))/1000 as money,amount_type,create_time FROM {date} where reference_type='{reference_type}' and type={is_out} LIMIT {(page-1)*size},{size}" sql = f"SELECT reference_type,order_number,type,cast(amount as decimal(20,6))/1000 as money,amount_type,create_time FROM {date} where reference_type='{reference_type}' and type={is_out} LIMIT {(page-1)*size},{size}"
...@@ -137,3 +133,54 @@ class CalculationMonthlyDetails(object): ...@@ -137,3 +133,54 @@ class CalculationMonthlyDetails(object):
data = future1.result() data = future1.result()
num = future2.result() num = future2.result()
return data, num return data, num
class MonthDataDerive(object):
"""月度导出"""
def __init__(self):
self.derive_key = []
self.derive_list = []
@staticmethod
def data_to_table(data):
"""数据导出"""
bk = pd.DataFrame(data)
with pd.ExcelWriter(f'static/业务类型月度汇总报表.xlsx') as writer:
bk.to_excel(writer, sheet_name='业务类型月度汇总', index=False)
file = open(writer, 'rb')
return StreamingResponse(file, media_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
def derive_data(self, date, key_type):
db = env.MysqlDB
db["database"] = env.DB_HISTORY
if key_type:
sql = f"SELECT reference_type, type, SUM(cast(amount as decimal(20,6)))/1000 as money FROM {date} where reference_type='{key_type}' GROUP BY reference_type, type ORDER BY reference_type"
else:
sql = f"SELECT reference_type, type, SUM(cast(amount as decimal(20,6)))/1000 as money FROM {date} GROUP BY reference_type, type ORDER BY reference_type"
try:
res_data = LinkMysql(db).query_mysql(sql)
except Exception as e:
return [], 0
for res in res_data:
if res["reference_type"] in self.derive_key:
continue
if res["reference_type"] in TYPE_NAME:
name = TYPE_NAME[res["reference_type"]]
else:
name = res["reference_type"]
out = [i['money'] for i in res_data if i['reference_type'] == res["reference_type"] and i['type'] == 0]
income = [i['money'] for i in res_data if i['reference_type'] == res["reference_type"] and i['type'] == 1]
out_value = float(out[0]) if out else 0
income_value = float(income[0]) if income else 0
a = {
"name": name,
"type": res["reference_type"],
"expenditure": out_value,
"income": income_value,
"is_error": 0 if out_value == income_value else 1,
"error_money": float('%.2f' % (out_value - income_value))
}
self.derive_key.append(res["reference_type"])
self.derive_list.append(a)
return self.data_to_table(self.derive_list)
...@@ -18,8 +18,9 @@ class ExportUpdateData(BaseModel): ...@@ -18,8 +18,9 @@ class ExportUpdateData(BaseModel):
class MonthStatistics(BaseModel): class MonthStatistics(BaseModel):
date: str = "" date: str = ""
page: int type: str = ""
size: int page: int = None
size: int = None
class MonthDetails(MonthStatistics): class MonthDetails(MonthStatistics):
......
...@@ -47,7 +47,8 @@ def month_query_total_export(param: schemas.MonthStatistics): ...@@ -47,7 +47,8 @@ def month_query_total_export(param: schemas.MonthStatistics):
if not param.date: if not param.date:
month_date = datetime.now().date() - relativedelta(months=1) month_date = datetime.now().date() - relativedelta(months=1)
param.date = month_date.strftime("%Y%m") param.date = month_date.strftime("%Y%m")
result, num = crud.CalculationMonthlyBill().month_statistics_task('assets_log_' + param.date, param.page, param.size) result, num = crud.CalculationMonthlyBill().month_statistics_task('assets_log_' + param.date, param.type,
param.page, param.size)
return HttpResultResponse(total=num, data=result) return HttpResultResponse(total=num, data=result)
...@@ -58,3 +59,12 @@ def month_query_total_export(param: schemas.MonthDetails): ...@@ -58,3 +59,12 @@ def month_query_total_export(param: schemas.MonthDetails):
return HttpResultResponse(msg='查询月份不能为空') return HttpResultResponse(msg='查询月份不能为空')
result, num = crud.CalculationMonthlyDetails().statement_income_expenditure(param) result, num = crud.CalculationMonthlyDetails().statement_income_expenditure(param)
return HttpResultResponse(total=num, data=result) return HttpResultResponse(total=num, data=result)
@router.post("/month")
def month_to_export(param: schemas.MonthStatistics):
"""月度表导出"""
if not param.date:
return HttpResultResponse(msg='查询月份不能为空')
result = crud.MonthDataDerive().derive_data('assets_log_' + param.date, param.type)
return result
...@@ -6,10 +6,11 @@ from sqlalchemy.orm import Session ...@@ -6,10 +6,11 @@ from sqlalchemy.orm import Session
from libs.functions import get_now_timestamp, get_now_datetime from libs.functions import get_now_timestamp, get_now_datetime
from libs.orm import QueryAllData from libs.orm import QueryAllData
from libs.token_verify import get_current_user from libs.token_verify import get_current_user
from models.recharge import Settlement, Fitransferlog, FinanceFixLog, Fiaccount, Account_log from models.recharge import Settlement, Fitransferlog, FinanceFixLog, Account_log
from models.users import V2User
from models.guild import Guild from models.guild import Guild
from models.account import Account from models.account import Account
from models.users import V2User
from models.guild import Guild
locka = threading.Lock() locka = threading.Lock()
...@@ -138,16 +139,16 @@ def query_uuid_or_user_number(db: Session, param): ...@@ -138,16 +139,16 @@ def query_uuid_or_user_number(db: Session, param):
guild = db.query(Guild).filter(Guild.uuid == param.uuid).first() guild = db.query(Guild).filter(Guild.uuid == param.uuid).first()
if not guild: if not guild:
return {} return {}
return {"nick_name": "(公会)" + guild.guild_name, "user_number": guild.id, "is_guild": 1} return {"nick_name": "(公会)" + guild.guild_name, "uuid": guild.uuid, "is_guild": 1, "id": guild.id}
return {"nick_name": user.nick_name, "user_number": user.user_id, "is_guild": 0} return {"nick_name": user.nick_name, "uuid": user.uuid, "is_guild": 0, "id": user.user_id}
if param.user_number: if param.user_number:
user = db.query(V2User).filter(V2User.user_number == param.user_number).first() account = db.query(Account).filter(Account.uuid == param.user_number).first()
return {"nick_name": user.nick_name, "user_id": user.user_id, "uuid": user.uuid} return {"nick_name": account.name, "user_id": account.unique_tag, "uuid": account.uuid, "id": account.id}
def account_money(db: Session, param): def account_money(db: Session, param):
"""查询账户余额""" """查询账户余额"""
account = db.query(Account).filter(Account.id == param.id).first() account = db.query(Account).filter(Account.uuid == param.id).first()
if not account: if not account:
return 0 return 0
return account.consumable if account.consumable else 0 return account.consumable if account.consumable else 0
...@@ -170,11 +171,33 @@ def query_token(db, h_list): ...@@ -170,11 +171,33 @@ def query_token(db, h_list):
def transfer_money(db: Session, param, h_list): def transfer_money(db: Session, param, h_list):
"""转账""" """转账"""
user = query_token(db, h_list) user = query_token(db, h_list)
if param.type == 0:
out = db.query(Account).filter(Account.uuid == param.dst_id).first()
income = db.query(Account).filter(Account.uuid == param.transfer_id).first()
dst_name = out.name
transfer_name = income.name
if param.type == 1:
out = db.query(Account).filter(Account.uuid == param.dst_id).first()
income = db.query(V2User).filter(V2User.uuid == param.transfer_id).first()
transfer_name = income.nick_name if income else ""
if not income:
income = db.query(Guild).filter(Guild.uuid == param.transfer_id).first()
transfer_name = income.guild_name if income else ""
dst_name = out.name if income else ""
if param.type == 2:
out = db.query(V2User).filter(V2User.uuid == param.dst_id).first()
dst_name = out.nick_name if out else ""
if not out:
out = db.query(Guild).filter(Guild.uuid == param.dst_id).first()
dst_name = out.guild_name if out else ""
income = db.query(Account).filter(Account.uuid == param.transfer_id).first()
transfer_name = income.name if income else ""
try: try:
present = Fitransferlog(dst_id=param.dst_id, amount=param.amount, type=param.type, present = Fitransferlog(dst_id=param.dst_id, dst_name=dst_name, amount=param.amount, type=param.type,
transfer_id=param.transfer_id, nick_name=param.nick_name, remark=param.remark, transfer_id=param.transfer_id, nick_name=param.nick_name, remark=param.remark,
operator=user.get("username"), transfer_type=param.transfer_type, operator=user.get("username"), transfer_type=param.transfer_type,
create_time=get_now_timestamp()) create_time=get_now_datetime(), transfer_name=transfer_name)
db.add(present) db.add(present)
db.commit() db.commit()
db.refresh(present) db.refresh(present)
...@@ -200,7 +223,6 @@ def create_fix_table(db: Session, param, h_list): ...@@ -200,7 +223,6 @@ def create_fix_table(db: Session, param, h_list):
return present return present
def recovery_fix_data(db: Session, dbname, params): def recovery_fix_data(db: Session, dbname, params):
recovery_list = [] recovery_list = []
if params.get("uuid"): if params.get("uuid"):
...@@ -214,17 +236,15 @@ def recovery_fix_data(db: Session, dbname, params): ...@@ -214,17 +236,15 @@ def recovery_fix_data(db: Session, dbname, params):
for item in data: for item in data:
accout_filters = [] accout_filters = []
accout_filters.append(dbname.uuid == item.get("uuid")) accout_filters.append(dbname.uuid == item.get("uuid"))
names=QueryAllData(db, Fiaccount,{},accout_filters).query_filter() names = QueryAllData(db, Account, {}, accout_filters).query_filter()
if names: if names:
item['name']=names.name item['name'] = names.name
item['uuid']=names.uuid item['uuid'] = names.uuid
else: else:
item['name']='' item['name'] = ''
return data, count return data, count
def create_recovery_table(db: Session, param): def create_recovery_table(db: Session, param):
"""增加修复报表""" """增加修复报表"""
try: try:
......
...@@ -108,9 +108,11 @@ class UserNumber(BaseModel): ...@@ -108,9 +108,11 @@ class UserNumber(BaseModel):
class CreateBill(BaseModel): class CreateBill(BaseModel):
dst_id: int dst_id: str
dst_name: str = ""
amount: float amount: float
transfer_id: int transfer_id: str
transfer_name: str = ""
remark: str remark: str
type: int type: int
nick_name: Optional[str] = "" nick_name: Optional[str] = ""
......
...@@ -11,7 +11,8 @@ from app.api.statement.guild import GuildSet, paymentset_guild_data, outon_accou ...@@ -11,7 +11,8 @@ from app.api.statement.guild import GuildSet, paymentset_guild_data, outon_accou
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
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 = APIRouter()
...@@ -64,11 +65,13 @@ async def uploadFile(a_file: bytes = File(...)): ...@@ -64,11 +65,13 @@ async def uploadFile(a_file: bytes = File(...)):
a_content = a_file a_content = a_file
image_name = random_number() image_name = random_number()
cos_path = new_upload_file(a_content, image_name) cos_path = new_upload_file(a_content, image_name)
if not cos_path:
return HttpResultResponse(code=500, msg="上传失败,请检查cos是否正常")
return HttpResultResponse(data=cos_path) return HttpResultResponse(data=cos_path)
@router.post("/payment/add") @router.post("/payment/add")
def guild_payment_list(data:PaymentAdd,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()) dataPayment = Paymentlog(uuid=data.uuid, money=data.money, cont=data.cont,url=data.url,create_time=datetime.now())
db.add(dataPayment) db.add(dataPayment)
...@@ -81,7 +84,7 @@ def guild_payment_list(data:PaymentAdd,db: Session = Depends(get_db)): ...@@ -81,7 +84,7 @@ def guild_payment_list(data:PaymentAdd,db: Session = Depends(get_db)):
@router.get("/onaccount") @router.get("/onaccount")
def outon_account(db: Session = Depends(get_db)): def outon_account(db: Session = Depends(get_db)):
"""转出和转入账户人员列表""" """转出和转入账户人员列表"""
account_list, total = outon_account_data(db, Fiaccount,{}) account_list, total = outon_account_data(db, Account, {})
return HttpResultResponse(total=total, data=account_list) return HttpResultResponse(total=total, data=account_list)
...@@ -111,6 +114,8 @@ def account_transfer_money(data: CreateBill, request: Request, db: Session = Dep ...@@ -111,6 +114,8 @@ def account_transfer_money(data: CreateBill, request: Request, db: Session = Dep
"""账户转账""" """账户转账"""
header_list = request.get("headers") header_list = request.get("headers")
res_info = transfer_money(db, data, header_list) res_info = transfer_money(db, data, header_list)
if not res_info:
return HttpResultResponse(code=500, msg='创建失败')
return HttpResultResponse(data=res_info.id) return HttpResultResponse(data=res_info.id)
...@@ -136,17 +141,15 @@ def finance_fix(data: acc_schemas.FixTable, request: Request, db: Session = Depe ...@@ -136,17 +141,15 @@ def finance_fix(data: acc_schemas.FixTable, request: Request, db: Session = Depe
return HttpResultResponse(data=res.id) return HttpResultResponse(data=res.id)
@router.post("/data/recovery") @router.post("/data/recovery")
def recovery_fix(data: acc_schemas.Recovery_fix, db: Session = Depends(get_db)): def recovery_fix(data: acc_schemas.Recovery_fix, db: Session = Depends(get_db)):
"""异常数据修复""" """异常数据修复"""
recovery_list, total = guild.recovery_fix_data(db, Account_log,data.dict(exclude_none=True)) recovery_list, total = guild.recovery_fix_data(db, Account_log, data.dict(exclude_none=True))
return HttpResultResponse(total=total, data=recovery_list) return HttpResultResponse(total=total, data=recovery_list)
@router.post("/submit/recovery") @router.post("/submit/recovery")
def finance_fix(data: acc_schemas.RecoveryTable,db: Session = Depends(get_db)): def finance_fix(data: acc_schemas.RecoveryTable, db: Session = Depends(get_db)):
"""新增异常数据修复""" """新增异常数据修复"""
res = guild.create_recovery_table(db, data) res = guild.create_recovery_table(db, data)
return HttpResultResponse(data=res.id) return HttpResultResponse(data=res.id)
...@@ -155,5 +158,5 @@ def finance_fix(data: acc_schemas.RecoveryTable,db: Session = Depends(get_db)): ...@@ -155,5 +158,5 @@ def finance_fix(data: acc_schemas.RecoveryTable,db: Session = Depends(get_db)):
@router.post("/recovery/fix") @router.post("/recovery/fix")
def recovery_fix(data: acc_schemas.RecoveryupdateTable, db: Session = Depends(get_db)): def recovery_fix(data: acc_schemas.RecoveryupdateTable, db: Session = Depends(get_db)):
"""异常数据修复""" """异常数据修复"""
res = guild.update_recovery_table(db,data.dict(exclude_none=True)) res = guild.update_recovery_table(db, data.dict(exclude_none=True))
return HttpResultResponse(data=res.get("id")) return HttpResultResponse(data=res.get("id"))
...@@ -110,4 +110,5 @@ TYPE_NAME = { ...@@ -110,4 +110,5 @@ TYPE_NAME = {
"seven_country_award": "2022_七国游记活动-榜单奖励领取", "seven_country_award": "2022_七国游记活动-榜单奖励领取",
"time_detective_award": "时空侦探活动-榜单领奖", "time_detective_award": "时空侦探活动-榜单领奖",
"translate": "翻译付费", "translate": "翻译付费",
"userWithdrawal_dec": "用户提现扣除项",
} }
...@@ -65,22 +65,24 @@ class imageCode(): ...@@ -65,22 +65,24 @@ class imageCode():
return img.decode('utf-8') return img.decode('utf-8')
def new_upload_file(file_object,filename): def new_upload_file(file_object,filename):
'''图片上传cos''' '''图片上传cos'''
filename=COS_RERURN_PATH+filename+'.png' filename = COS_RERURN_PATH+filename+'.png'
try:
response = client.put_object( response = client.put_object(
Bucket=Bucket, Bucket=Bucket,
Body=file_object, Body=file_object,
Key=filename, Key=filename,
) )
except Exception as e:
print("上传失败")
return ""
if response is None: if response is None:
print("上传成功") print("上传成功")
cos_path =COS_PATH + filename cos_path = COS_PATH + filename
return cos_path return cos_path
def random_number(): def random_number():
randomId = ''.join([str(random.randint(1, 999999)).zfill(3) for _ in range(2)]) randomId = ''.join([str(random.randint(1, 999999)).zfill(3) for _ in range(2)])
return randomId return randomId
\ No newline at end of file
...@@ -97,25 +97,6 @@ class Paymentlog(Base, SerializerMixin): ...@@ -97,25 +97,6 @@ class Paymentlog(Base, SerializerMixin):
__table_args__ = {'comment': '打款记录表'} __table_args__ = {'comment': '打款记录表'}
class Fiaccount(Base, SerializerMixin):
'''
账户
'''
__tablename__ = "fi_account"
id = Column(Integer, primary_key=True, index=True)
name = Column(String(100), comment="账户名称")
unique_tag = Column(String(100), comment="唯一标记")
beneficiary = Column(String(100), comment="受益人")
description = Column(String(100), comment="描述信息")
uuid = Column(String(60), comment="用户id", index=True)
create_time = Column(DateTime, comment="创建时间")
config_key = Column(String(150), comment="配置key,和api接口约定好的标识")
income = Column(Text, comment="入账")
output = Column(Text, comment="出账")
operator = Column(String(255), comment="")
operator_id = Column(Integer, comment="操作id")
class Fitransferlog(Base, SerializerMixin): class Fitransferlog(Base, SerializerMixin):
''' '''
转账列表, 商量说存id 转账列表, 商量说存id
...@@ -123,9 +104,11 @@ class Fitransferlog(Base, SerializerMixin): ...@@ -123,9 +104,11 @@ class Fitransferlog(Base, SerializerMixin):
__tablename__ = "fi_transfer_log" __tablename__ = "fi_transfer_log"
id = Column(Integer, primary_key=True, index=True) id = Column(Integer, primary_key=True, index=True)
amount = Column(DECIMAL(20, 6), comment="转入金额") amount = Column(DECIMAL(20, 6), comment="转入金额")
dst_id = Column(Integer, comment="转出账户id") dst_id = Column(String(100), comment="转出账户id")
dst_name = Column(String(100), comment="转出账户名称")
create_time = Column(Integer, comment="创建时间") create_time = Column(Integer, comment="创建时间")
transfer_id = Column(Integer, comment="转入账户id") transfer_id = Column(String(100), comment="转入账户id")
transfer_name = Column(String(100), comment="转入账户名称")
type = Column(Integer, comment="转账类型(0:对企业,1:对个人)") type = Column(Integer, comment="转账类型(0:对企业,1:对个人)")
nick_name = Column(String(100), comment="用户昵称") nick_name = Column(String(100), comment="用户昵称")
remark = Column(String(255), comment="转账备注") remark = Column(String(255), 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