修正
This commit is contained in:
93
backend/app/routers/month_locks.py
Normal file
93
backend/app/routers/month_locks.py
Normal file
@@ -0,0 +1,93 @@
|
||||
from fastapi import APIRouter, HTTPException
|
||||
from app.core.database import get_connection
|
||||
|
||||
router = APIRouter(prefix="/month-locks", tags=["月次锁定"])
|
||||
|
||||
|
||||
# ---------- GET:月次锁定一覧 ----------
|
||||
|
||||
@router.get("", summary="月次锁定一覧取得")
|
||||
def get_month_locks():
|
||||
with get_connection() as conn, conn.cursor() as cur:
|
||||
cur.execute("""
|
||||
SELECT
|
||||
fiscal_year,
|
||||
month,
|
||||
is_locked,
|
||||
locked_at,
|
||||
locked_by
|
||||
FROM month_locks
|
||||
ORDER BY fiscal_year, month
|
||||
""")
|
||||
return cur.fetchall()
|
||||
|
||||
|
||||
# ---------- POST:锁定月份 ----------
|
||||
|
||||
@router.post("/lock", summary="锁定月份")
|
||||
def lock_month(fiscal_year: int, month: int):
|
||||
# 参数校验
|
||||
if not (1 <= month <= 12):
|
||||
raise HTTPException(status_code=400, detail="month 必须是 1~12")
|
||||
|
||||
with get_connection() as conn, conn.cursor() as cur:
|
||||
cur.execute("""
|
||||
INSERT INTO month_locks (
|
||||
fiscal_year,
|
||||
month,
|
||||
is_locked,
|
||||
locked_at,
|
||||
locked_by
|
||||
)
|
||||
VALUES (%s, %s, true, NOW(), %s)
|
||||
ON CONFLICT (fiscal_year, month)
|
||||
DO UPDATE
|
||||
SET is_locked = true,
|
||||
locked_at = NOW(),
|
||||
locked_by = EXCLUDED.locked_by
|
||||
""", (
|
||||
fiscal_year,
|
||||
month,
|
||||
"system" # 将来可替换为登录用户
|
||||
))
|
||||
conn.commit()
|
||||
|
||||
return {
|
||||
"status": "locked",
|
||||
"fiscal_year": fiscal_year,
|
||||
"month": month
|
||||
}
|
||||
|
||||
|
||||
# ---------- POST:解锁月份 ----------
|
||||
|
||||
@router.post("/unlock", summary="解锁月份")
|
||||
def unlock_month(fiscal_year: int, month: int):
|
||||
# 参数校验
|
||||
if not (1 <= month <= 12):
|
||||
raise HTTPException(status_code=400, detail="month 必须是 1~12")
|
||||
|
||||
with get_connection() as conn, conn.cursor() as cur:
|
||||
cur.execute("""
|
||||
UPDATE month_locks
|
||||
SET is_locked = false
|
||||
WHERE fiscal_year = %s
|
||||
AND month = %s
|
||||
""", (
|
||||
fiscal_year,
|
||||
month
|
||||
))
|
||||
|
||||
if cur.rowcount == 0:
|
||||
raise HTTPException(
|
||||
status_code=404,
|
||||
detail="指定月份不存在"
|
||||
)
|
||||
|
||||
conn.commit()
|
||||
|
||||
return {
|
||||
"status": "unlocked",
|
||||
"fiscal_year": fiscal_year,
|
||||
"month": month
|
||||
}
|
||||
Reference in New Issue
Block a user