Browse Source

add new

master
panda 8 months ago
parent
commit
366ee4af7e
  1. 84
      routers/disbursemanage.py

84
routers/disbursemanage.py

@ -2,12 +2,11 @@ from fastapi import Depends, APIRouter, status, Query, Path, HTTPException
from internal.models import *
from internal.database import fetch_one, fetch_all, execute_query, response_success, raise_if_exists, raise_if_not_found
from dependencies import get_current_active_user
from datetime import datetime
router = APIRouter(
prefix="/disburses",
tags=['支出管理']
)
# 获取列表
@router.get("/list/specificdate")
@ -20,8 +19,6 @@ async def disburse_list(days: int):
disburse_list = fetch_all(select_query, (days-1,))
return response_success(disburse_list, "disburse get list success")
# 获取列表
@router.get("/list/classifieddata")
async def classified_list(days: int):
@ -33,15 +30,74 @@ async def classified_list(days: int):
classified_list = fetch_all(select_query, (days-1,))
return response_success(classified_list, "disburse get list success")
# 单条数据查询
@router.get("/list/consume")
async def consume_list(days: int):
current_year = datetime.now().year
target_year = current_year - days
select_query = f"""
SELECT SUM(d.disburseprice) AS data, t.typename AS name, DATE_FORMAT(d.create_at, '%Y-%m') AS date
FROM disburses d JOIN disbursetypes t ON d.typeid = t.id
WHERE YEAR(d.create_at) = {target_year}
GROUP BY t.typename, DATE_FORMAT(d.create_at, '%Y-%m')
ORDER BY DATE_FORMAT(d.create_at, '%Y-%m');
"""
consume_list = fetch_all(select_query)
result = {}
for entry in consume_list:
name = entry['name']
date = entry['date']
data = entry['data']
if name not in result:
result[name] = [0] * 12
month_index = int(date.split('-')[1]) - 1
result[name][month_index] = data
final_result = [{"name": name, "data": data}
for name, data in result.items()]
return response_success(final_result, "disburse get list success")
@router.get("/list/calendar")
async def calendar_list():
select_query = """
SELECT t.typename AS NAME, YEAR(d.create_at) AS YEAR, SUM(d.disburseprice) AS total_amount
FROM disburses d
JOIN disbursetypes t ON d.typeid = t.id
GROUP BY t.typename, YEAR(d.create_at)
ORDER BY t.typename, YEAR(d.create_at);
"""
calendar_list = fetch_all(select_query)
# Initialize dictionaries to store the transformed data
transformed_data = {}
years = set()
# Process each row from the query result
for row in calendar_list:
name = row['NAME']
year = row['YEAR']
total_amount = row['total_amount']
if name not in transformed_data:
transformed_data[name] = {}
transformed_data[name][year] = total_amount
years.add(year)
# Prepare the final result in the desired format
sorted_years = sorted(years) # Sort years in ascending order
headers = ['name'] + [str(year) for year in sorted_years] # Create headers
final_result = [headers] # Initialize with headers
for name, year_data in transformed_data.items():
row = [name]
for year in sorted_years:
row.append(year_data.get(year, 0)) # Append data or 0 if not available
final_result.append(row)
@router.get("/list/search")
async def disburse_search(header: str = Query(description="支出标题")):
select_query = "SELECT id,header,text,descr FROM disburses WHERE 1=1 "
params = []
if header:
select_query += "AND header LIKE %s"
params.append(f"%{header}%")
disburse_query = fetch_all(select_query, params=params, fetchall=True)
return response_success(data=disburse_query, message="disburse search success")
return response_success(final_result, "disburse get list success")
Loading…
Cancel
Save