50 lines
1.5 KiB
Python
50 lines
1.5 KiB
Python
from fastapi import APIRouter, HTTPException
|
|
from app.core.database import get_connection
|
|
|
|
router = APIRouter(prefix="/year-locks", tags=["年度锁定"])
|
|
|
|
|
|
@router.get("", summary="年度锁定一覧")
|
|
def get_year_locks():
|
|
with get_connection() as conn, conn.cursor() as cur:
|
|
cur.execute("""
|
|
SELECT fiscal_year, is_locked, locked_at, locked_by
|
|
FROM year_locks
|
|
ORDER BY fiscal_year
|
|
""")
|
|
return cur.fetchall()
|
|
|
|
|
|
@router.post("/lock", summary="年度锁定")
|
|
def lock_year(fiscal_year: int):
|
|
with get_connection() as conn, conn.cursor() as cur:
|
|
cur.execute("""
|
|
INSERT INTO year_locks (fiscal_year, is_locked, locked_at, locked_by)
|
|
VALUES (%s, true, NOW(), %s)
|
|
ON CONFLICT (fiscal_year)
|
|
DO UPDATE
|
|
SET is_locked = true,
|
|
locked_at = NOW(),
|
|
locked_by = EXCLUDED.locked_by
|
|
""", (fiscal_year, "system"))
|
|
conn.commit()
|
|
|
|
return {"status": "locked", "fiscal_year": fiscal_year}
|
|
|
|
|
|
@router.post("/unlock", summary="年度解锁")
|
|
def unlock_year(fiscal_year: int):
|
|
with get_connection() as conn, conn.cursor() as cur:
|
|
cur.execute("""
|
|
UPDATE year_locks
|
|
SET is_locked = false
|
|
WHERE fiscal_year = %s
|
|
""", (fiscal_year,))
|
|
|
|
if cur.rowcount == 0:
|
|
raise HTTPException(status_code=404, detail="指定年度不存在")
|
|
|
|
conn.commit()
|
|
|
|
return {"status": "unlocked", "fiscal_year": fiscal_year}
|