8 changed files with 71 additions and 197 deletions
-
22internal/models.py
-
4main.py
-
47routers/disbursemanage.py
-
0routers/disbursetypes.py
-
134routers/expensemanage.py
-
61routers/expensetype.py
-
0routers/revenuemanage.py
-
0routers/revenuetypes.py
@ -0,0 +1,47 @@ |
|||||
|
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 |
||||
|
|
||||
|
router = APIRouter( |
||||
|
prefix="/disburses", |
||||
|
tags=['支出管理'] |
||||
|
) |
||||
|
# 获取列表 |
||||
|
|
||||
|
|
||||
|
@router.get("/list/specificdate") |
||||
|
async def disburse_list(days: int): |
||||
|
select_query = """SELECT DATE(create_at) AS create_date, SUM(disburseprice) AS total_disburseprice |
||||
|
FROM disburses |
||||
|
WHERE DATE(create_at) >= DATE_SUB(CURDATE(), INTERVAL %s DAY) -- 一周前的日期 |
||||
|
GROUP BY DATE(create_at) |
||||
|
ORDER BY create_date ASC;""" |
||||
|
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): |
||||
|
select_query = """SELECT SUM(d.disburseprice) AS value,t.typename AS name FROM disburses d |
||||
|
JOIN disbursetypes t ON d.typeid = t.id |
||||
|
WHERE d.create_at >= DATE_SUB(CURDATE(), INTERVAL %s DAY) |
||||
|
GROUP BY t.typename |
||||
|
;""" |
||||
|
classified_list = fetch_all(select_query, (days-1,)) |
||||
|
return response_success(classified_list, "disburse get list success") |
||||
|
|
||||
|
# 单条数据查询 |
||||
|
|
||||
|
|
||||
|
@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") |
@ -1,134 +0,0 @@ |
|||||
from fastapi import Depends, APIRouter, Query, Path |
|
||||
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 |
|
||||
import json |
|
||||
router = APIRouter(prefix="/expenses", tags=["收支管理"]) |
|
||||
|
|
||||
# 获取列表 |
|
||||
|
|
||||
|
|
||||
@router.get("/list") |
|
||||
async def expense_list(page: int = Query(None), page_size: int = Query(None)): |
|
||||
limit_clause = "" |
|
||||
if page is not None and page_size is not None: |
|
||||
offset = (page - 1) * page_size |
|
||||
limit_clause = f"LIMIT {page_size} OFFSET {offset}" |
|
||||
select_query = f""" |
|
||||
SELECT expenses.id,expenses.pay_price, expenses.live_price, expenses.create_at, expensetypes.typename,expenses.descr FROM expenses |
|
||||
LEFT JOIN `expensetypes` ON expenses.typeid = expensetypes.id |
|
||||
ORDER BY create_at DESC |
|
||||
{limit_clause}; |
|
||||
""" |
|
||||
expense_list = fetch_all(select_query) |
|
||||
return response_success(expense_list, "expense get list success") |
|
||||
|
|
||||
|
|
||||
@router.get("/list/{id}") |
|
||||
async def expense_one(id: int): |
|
||||
# 列表参数:收支名称、收支内容、创建时间、收支图片、收支查看时间、收支阅读次数、收支字数、类型名称、标签名列表 |
|
||||
select_query = """ |
|
||||
SELECT expenses.id,expenses.pay_price, expenses.live_price, expenses.create_at, expensetypes.typename,expenses.descr FROM expenses |
|
||||
LEFT JOIN `expensetypes` ON expenses.typeid = expensetypes.id |
|
||||
WHERE id = %s |
|
||||
ORDER BY create_at DESC; |
|
||||
""" |
|
||||
expense_one = fetch_one(select_query, (id,)) |
|
||||
return response_success(expense_one, "expense get expense_one success") |
|
||||
|
|
||||
|
|
||||
# 收支新增 |
|
||||
@router.post("/add") |
|
||||
async def expense_add(expense: expense, _: User = Depends(get_current_active_user)): |
|
||||
select_query = "SELECT * FROM expenses WHERE expensetitle = %s" |
|
||||
existing_expense = fetch_one(select_query, (expense.expensetitle,)) |
|
||||
raise_if_exists(existing_expense, "expense already exists") |
|
||||
insert_query = ( |
|
||||
"INSERT INTO expenses (expensetitle, expensecontent,imglink, typeid, descr) VALUES (%s, %s, %s, %s,%s)" |
|
||||
) |
|
||||
insert_value=(expense.expensetitle,expense.expensecontent,expense.imglink,expense.typeid,expense.descr) |
|
||||
execute_query(insert_query,insert_value) |
|
||||
|
|
||||
return {"message": "expense created successfully"} |
|
||||
|
|
||||
|
|
||||
# 收支删除 |
|
||||
@router.delete("/delete/{id}") |
|
||||
async def expense_delete(id: str = Path(description="收支id")): |
|
||||
select_query = "SELECT * FROM expenses WHERE id = %s" |
|
||||
existing_expense = fetch_one(select_query, (id,)) |
|
||||
raise_if_not_found(existing_expense, "expense not found") |
|
||||
delete_query = "DELETE FROM expenses WHERE id = %s" |
|
||||
execute_query(delete_query, (id,)) |
|
||||
return response_success(message="expense delete success") |
|
||||
|
|
||||
|
|
||||
@router.put("/update/{id}") |
|
||||
async def expense_update(id: int, expense: expense, _: User = Depends(get_current_active_user)): |
|
||||
# 检查要编辑的收支是否存在 |
|
||||
select_query = "SELECT * FROM expenses WHERE id = %s" |
|
||||
existing_expense = fetch_one(select_query, (id,)) |
|
||||
raise_if_not_found(existing_expense, "expense not found") |
|
||||
|
|
||||
# 更新收支信息 |
|
||||
update_query = ( |
|
||||
"UPDATE expenses SET expensetitle = %s, expensecontent = %s, imglink = %s, typeid = %s, descr = %s WHERE id = %s" |
|
||||
) |
|
||||
update_data = (expense.expensetitle, expense.expensecontent, |
|
||||
expense.imglink, expense.typeid, expense.descr, id) |
|
||||
execute_query(update_query, update_data) |
|
||||
return response_success("expense update sucess") |
|
||||
|
|
||||
|
|
||||
# 收支模糊查询 |
|
||||
@router.get("/list/search") |
|
||||
async def expense_list_search( |
|
||||
expensetitle: str = Query(None, description="收支标题"), |
|
||||
typename: str = Query(None, description="收支类型"), |
|
||||
start_date: str = Query(None, description="开始时间"), |
|
||||
end_date: str = Query(None, description="结束时间"), |
|
||||
): |
|
||||
select_query = """ |
|
||||
SELECT expenses.id, expensetitle, expensecontent,wordcount, typename, create_at, update_at, expenses.descr |
|
||||
FROM expenses |
|
||||
LEFT JOIN `expensetypes` ON expenses.typeid = expensetypes.id |
|
||||
WHERE 1=1 |
|
||||
""" |
|
||||
params = [] |
|
||||
if expensetitle: |
|
||||
select_query += " AND expensetitle LIKE %s" |
|
||||
params.append(f"%{expensetitle}%") |
|
||||
if typename: |
|
||||
select_query += " AND typename LIKE %s" |
|
||||
params.append(f"%{typename}%") |
|
||||
if start_date: |
|
||||
select_query += " AND create_at >= %s" |
|
||||
params.append(start_date) |
|
||||
if end_date: |
|
||||
select_query += " AND create_at <= %s" |
|
||||
params.append(end_date) |
|
||||
select_query += "ORDER BY create_at DESC" |
|
||||
expense_list = fetch_all(select_query, params=params, fetchall=True) |
|
||||
return response_success(data=expense_list, message="expense serach succuessfully!") |
|
||||
|
|
||||
|
|
||||
# 根据id查询收支 |
|
||||
@router.get("/list/search/{id}") |
|
||||
async def get_id_expense(id: str = Path(description="收支id")): |
|
||||
select_query = """SELECT expenses.id, expensetitle, expensecontent,wordcount, expenses.typeid, expenses.descr,imglink FROM expenses |
|
||||
LEFT JOIN `expensetypes` ON expenses.typeid = expensetypes.id |
|
||||
WHERE expenses.id = %s |
|
||||
|
|
||||
""" |
|
||||
expense_list = execute_query(select_query, (id,)) |
|
||||
return response_success(data=expense_list, message="expense search success") |
|
||||
|
|
||||
|
|
||||
# 我就测试一下 |
|
@ -1,61 +0,0 @@ |
|||||
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 |
|
||||
|
|
||||
router = APIRouter( |
|
||||
prefix="/expensetypes", |
|
||||
tags=['收支分类'] |
|
||||
) |
|
||||
# 获取列表 |
|
||||
@router.get("/list") |
|
||||
async def type_list(): |
|
||||
select_query = "SELECT id,typename,descr FROM expensetypes;" |
|
||||
type_list = fetch_all(select_query) |
|
||||
return response_success(type_list, "type get list success") |
|
||||
|
|
||||
# 新增 |
|
||||
@router.post("/add") |
|
||||
async def type_add(type:Type): |
|
||||
insert_query="""INSERT INTO expensetypes (typename,descr) VALUES(%s,%s)""" |
|
||||
insert_value=(type.typename,type.descr) |
|
||||
execute_query(insert_query,insert_value) |
|
||||
return response_success(data=type,message="type create success") |
|
||||
|
|
||||
# 单条数据查询 |
|
||||
@router.get("/list/search") |
|
||||
async def type_search(typename:str=Query(description="类型名称")): |
|
||||
select_query="SELECT id,typename,descr FROM expensetypes WHERE 1=1 " |
|
||||
params=[] |
|
||||
if typename: |
|
||||
select_query+="AND typename LIKE %s" |
|
||||
params.append(f"%{typename}%") |
|
||||
type_query=fetch_all(select_query,params=params,fetchall=True) |
|
||||
return response_success(data=type_query,message="type search success") |
|
||||
|
|
||||
# 语录修改 |
|
||||
@router.put("/update/{id}") |
|
||||
async def type_put(type:Type,id: str = Path(description="类型id")): |
|
||||
update_query = ( |
|
||||
"UPDATE expensetypes SET typename=%s,descr=%s WHERE id=%s;" |
|
||||
) |
|
||||
update_data = (type.typename,type.descr,id) |
|
||||
execute_query(update_query, update_data) |
|
||||
return response_success("type update sucess") |
|
||||
|
|
||||
# 语录删除 |
|
||||
@router.delete("/delete/{id}") |
|
||||
async def type_del(id: str = Path(description="类型id")): |
|
||||
update_query = ( |
|
||||
"DELETE FROM expensetypes WHERE id=%s;" |
|
||||
) |
|
||||
update_data = (id) |
|
||||
execute_query(update_query, update_data) |
|
||||
return response_success() |
|
||||
|
|
||||
# 根据id查询语录 |
|
||||
@router.get("/list/search/{id}") |
|
||||
async def type_search_id(id:str=Path(description="类型id")): |
|
||||
select_query="SELECT * FROM expensetypes WHERE id=%s" |
|
||||
type_query=fetch_one(select_query,(id,)) |
|
||||
return response_success(data=type_query,message="type search success") |
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue