|
|
@ -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") |