Files
zkxw/backend/app/api/insurance_company.py
T
2026-06-14 17:20:52 +08:00

888 lines
29 KiB
Python

"""保险公司及险种价格管理 API(保险公司 + 开票信息 + 险种价格)"""
import math
import uuid
from datetime import datetime
from typing import Any, List, Optional
from fastapi import APIRouter, Depends, Query
from pydantic import BaseModel, ConfigDict, Field
from sqlalchemy import or_
from sqlalchemy.orm import Session
from app.core.database import get_db
from app.core.menu_guard import require_admin_or_super_admin
from app.core.response import error_response, success_response
from app.models.models import (
BizInsuranceCompany,
BizInsuranceCompanyInvoice,
BizInsuranceProjectPrice,
SysUser,
)
router = APIRouter(prefix="/web/admin", tags=["保险公司及险种价格管理"])
# ---------------------------------------------------------------------------
# Helpers
# ---------------------------------------------------------------------------
def _get_tenant_no(db: Session, user: dict) -> str:
user_id = user.get("user_id")
if not user_id:
raise PermissionError("用户身份信息缺失,无法确定租户")
sys_user = db.query(SysUser).filter(SysUser.id == user_id).first()
if not sys_user or not sys_user.tenant_no:
raise PermissionError("用户租户信息缺失")
return sys_user.tenant_no
def _generate_uuid() -> str:
return str(uuid.uuid4()).replace("-", "")
def _fmt_dt(v) -> Optional[str]:
if v is None:
return None
if isinstance(v, datetime):
return v.strftime("%Y-%m-%d %H:%M:%S")
return str(v)
def _total_pages(total: int, page_size: int) -> int:
return math.ceil(total / page_size) if page_size > 0 else 0
# ---------------------------------------------------------------------------
# Row-to-dict helpers (camelCase JSON)
# ---------------------------------------------------------------------------
def _row_to_dict_company(row: BizInsuranceCompany, project_prices: Optional[List[dict]] = None) -> dict:
data = {
"id": row.id,
"companyName": row.company_name,
"companyAddress": row.company_address,
"contactName": row.contact_name,
"contactPhone": row.contact_phone,
"companyLogo": row.company_logo or "",
"status": row.status,
"tenantNo": row.tenant_no,
"orderNum": row.order_num,
"remark": row.remark,
"createBy": row.create_by,
"createDeptId": row.create_dept_id,
"createTime": _fmt_dt(row.create_time),
"updateBy": row.update_by,
"updateTime": _fmt_dt(row.update_time),
}
if project_prices is not None:
data["projectPrices"] = project_prices
return data
def _row_to_dict_invoice(row: BizInsuranceCompanyInvoice) -> dict:
return {
"id": row.id,
"insuranceCompanyId": row.insurance_company_id,
"companyName": row.company_name,
"taxNo": row.tax_no,
"companyAddress": row.company_address,
"companyPhone": row.company_phone,
"bankName": row.bank_name,
"bankAccount": row.bank_account,
"tenantNo": row.tenant_no,
"orderNum": row.order_num,
"remark": row.remark,
"createBy": row.create_by,
"createDeptId": row.create_dept_id,
"createTime": _fmt_dt(row.create_time),
"updateBy": row.update_by,
"updateTime": _fmt_dt(row.update_time),
}
def _row_to_dict_project_price(row: BizInsuranceProjectPrice) -> dict:
return {
"id": row.id,
"insuranceCompanyId": row.insurance_company_id,
"projectName": row.project_name,
"projectFee": float(row.project_fee) if row.project_fee is not None else None,
"status": row.status,
"tenantNo": row.tenant_no,
"orderNum": row.order_num,
"remark": row.remark,
"createBy": row.create_by,
"createDeptId": row.create_dept_id,
"createTime": _fmt_dt(row.create_time),
"updateBy": row.update_by,
"updateTime": _fmt_dt(row.update_time),
}
# ---------------------------------------------------------------------------
# Inline CRUD — 保险公司主表
# ---------------------------------------------------------------------------
def _list_insurance_companies(
db: Session,
*,
page: int,
page_size: int,
keyword: Optional[str],
status: Optional[str],
tenant_no: str,
user_info=None,
):
q = db.query(BizInsuranceCompany).filter(
BizInsuranceCompany.tenant_no == tenant_no,
BizInsuranceCompany.del_flag == 0,
)
kw = (keyword or "").strip()
if kw:
like = f"%{kw}%"
q = q.filter(
or_(
BizInsuranceCompany.company_name.like(like),
BizInsuranceCompany.contact_name.like(like),
)
)
st = (status or "").strip()
if st in ("0", "1"):
q = q.filter(BizInsuranceCompany.status == st)
if user_info:
from app.core.data_scope import apply_data_scope
q = apply_data_scope(q, BizInsuranceCompany, user_info, db, tenant_no)
total = q.count()
rows = (
q.order_by(BizInsuranceCompany.create_time.desc())
.offset((page - 1) * page_size)
.limit(page_size)
.all()
)
company_ids = [r.id for r in rows]
prices_by_company: dict[str, list] = {cid: [] for cid in company_ids}
if company_ids:
prices_q = db.query(BizInsuranceProjectPrice).filter(
BizInsuranceProjectPrice.insurance_company_id.in_(company_ids),
BizInsuranceProjectPrice.tenant_no == tenant_no,
BizInsuranceProjectPrice.del_flag == 0,
)
if user_info:
from app.core.data_scope import apply_data_scope
prices_q = apply_data_scope(prices_q, BizInsuranceProjectPrice, user_info, db, tenant_no)
for price_row in prices_q.order_by(BizInsuranceProjectPrice.create_time.desc()).all():
prices_by_company.setdefault(price_row.insurance_company_id, []).append(
_row_to_dict_project_price(price_row)
)
return [
_row_to_dict_company(r, prices_by_company.get(r.id, [])) for r in rows
], total
def _create_insurance_company(
db: Session,
*,
company_name: str,
company_address: Optional[str],
contact_name: Optional[str],
contact_phone: Optional[str],
company_logo: Optional[str],
status: Optional[str],
tenant_no: str,
order_num: Optional[int],
remark: Optional[str],
user_id: str,
) -> BizInsuranceCompany:
obj = BizInsuranceCompany(
id=_generate_uuid(),
company_name=company_name,
company_address=company_address,
contact_name=contact_name,
contact_phone=contact_phone,
company_logo=(company_logo or "").strip() or None,
status=status or "1",
tenant_no=tenant_no,
order_num=order_num or 0,
remark=remark,
create_by=user_id,
create_dept_id="",
create_time=datetime.now(),
update_by=user_id,
update_time=datetime.now(),
del_flag=0,
)
db.add(obj)
db.commit()
db.refresh(obj)
return obj
def _update_insurance_company(
db: Session,
row_id: str,
*,
company_name: Optional[str],
company_address: Optional[str],
contact_name: Optional[str],
contact_phone: Optional[str],
company_logo: Optional[str],
status: Optional[str],
order_num: Optional[int],
remark: Optional[str],
user_id: str,
tenant_no: str,
) -> BizInsuranceCompany:
obj = (
db.query(BizInsuranceCompany)
.filter(
BizInsuranceCompany.id == row_id,
BizInsuranceCompany.tenant_no == tenant_no,
BizInsuranceCompany.del_flag == 0,
)
.first()
)
if not obj:
raise ValueError("记录不存在")
if company_name is not None:
obj.company_name = company_name
if company_address is not None:
obj.company_address = company_address
if contact_name is not None:
obj.contact_name = contact_name
if contact_phone is not None:
obj.contact_phone = contact_phone
if company_logo is not None:
obj.company_logo = (company_logo or "").strip() or None
if status is not None:
obj.status = status
if order_num is not None:
obj.order_num = order_num
if remark is not None:
obj.remark = remark
obj.update_by = user_id
obj.update_time = datetime.now()
db.commit()
db.refresh(obj)
return obj
def _soft_delete_insurance_company(db: Session, row_id: str, *, tenant_no: str):
obj = (
db.query(BizInsuranceCompany)
.filter(
BizInsuranceCompany.id == row_id,
BizInsuranceCompany.tenant_no == tenant_no,
BizInsuranceCompany.del_flag == 0,
)
.first()
)
if not obj:
raise ValueError("记录不存在")
obj.del_flag = 1
db.commit()
# ---------------------------------------------------------------------------
# Inline CRUD — 险种开票信息
# ---------------------------------------------------------------------------
def _list_insurance_company_invoices(
db: Session, insurance_company_id: str, *, tenant_no: str, user_info=None
):
# Verify parent exists
parent = (
db.query(BizInsuranceCompany)
.filter(
BizInsuranceCompany.id == insurance_company_id,
BizInsuranceCompany.tenant_no == tenant_no,
BizInsuranceCompany.del_flag == 0,
)
.first()
)
if not parent:
raise ValueError("保险公司不存在")
q = db.query(BizInsuranceCompanyInvoice).filter(
BizInsuranceCompanyInvoice.insurance_company_id == insurance_company_id,
BizInsuranceCompanyInvoice.tenant_no == tenant_no,
BizInsuranceCompanyInvoice.del_flag == 0,
)
if user_info:
from app.core.data_scope import apply_data_scope
q = apply_data_scope(q, BizInsuranceCompanyInvoice, user_info, db, tenant_no)
rows = q.order_by(BizInsuranceCompanyInvoice.create_time.desc()).all()
return [_row_to_dict_invoice(r) for r in rows]
def _create_insurance_company_invoice(
db: Session,
*,
insurance_company_id: str,
company_name: str,
tax_no: Optional[str],
company_address: Optional[str],
company_phone: Optional[str],
bank_name: Optional[str],
bank_account: Optional[str],
tenant_no: str,
order_num: Optional[int],
remark: Optional[str],
user_id: str,
) -> BizInsuranceCompanyInvoice:
obj = BizInsuranceCompanyInvoice(
id=_generate_uuid(),
insurance_company_id=insurance_company_id,
company_name=company_name,
tax_no=tax_no,
company_address=company_address,
company_phone=company_phone,
bank_name=bank_name,
bank_account=bank_account,
tenant_no=tenant_no,
order_num=order_num or 0,
remark=remark,
create_by=user_id,
create_dept_id="",
create_time=datetime.now(),
update_by=user_id,
update_time=datetime.now(),
del_flag=0,
)
db.add(obj)
db.commit()
db.refresh(obj)
return obj
def _update_insurance_company_invoice(
db: Session,
row_id: str,
*,
company_name: Optional[str],
tax_no: Optional[str],
company_address: Optional[str],
company_phone: Optional[str],
bank_name: Optional[str],
bank_account: Optional[str],
order_num: Optional[int],
remark: Optional[str],
user_id: str,
tenant_no: str,
) -> BizInsuranceCompanyInvoice:
obj = (
db.query(BizInsuranceCompanyInvoice)
.filter(
BizInsuranceCompanyInvoice.id == row_id,
BizInsuranceCompanyInvoice.tenant_no == tenant_no,
BizInsuranceCompanyInvoice.del_flag == 0,
)
.first()
)
if not obj:
raise ValueError("记录不存在")
if company_name is not None:
obj.company_name = company_name
if tax_no is not None:
obj.tax_no = tax_no
if company_address is not None:
obj.company_address = company_address
if company_phone is not None:
obj.company_phone = company_phone
if bank_name is not None:
obj.bank_name = bank_name
if bank_account is not None:
obj.bank_account = bank_account
if order_num is not None:
obj.order_num = order_num
if remark is not None:
obj.remark = remark
obj.update_by = user_id
obj.update_time = datetime.now()
db.commit()
db.refresh(obj)
return obj
def _soft_delete_insurance_company_invoice(db: Session, row_id: str, *, tenant_no: str):
obj = (
db.query(BizInsuranceCompanyInvoice)
.filter(
BizInsuranceCompanyInvoice.id == row_id,
BizInsuranceCompanyInvoice.tenant_no == tenant_no,
BizInsuranceCompanyInvoice.del_flag == 0,
)
.first()
)
if not obj:
raise ValueError("记录不存在")
obj.del_flag = 1
db.commit()
# ---------------------------------------------------------------------------
# Inline CRUD — 险种价格
# ---------------------------------------------------------------------------
def _list_insurance_project_prices(
db: Session, insurance_company_id: str, *, tenant_no: str, user_info=None
):
parent = (
db.query(BizInsuranceCompany)
.filter(
BizInsuranceCompany.id == insurance_company_id,
BizInsuranceCompany.tenant_no == tenant_no,
BizInsuranceCompany.del_flag == 0,
)
.first()
)
if not parent:
raise ValueError("保险公司不存在")
q = db.query(BizInsuranceProjectPrice).filter(
BizInsuranceProjectPrice.insurance_company_id == insurance_company_id,
BizInsuranceProjectPrice.tenant_no == tenant_no,
BizInsuranceProjectPrice.del_flag == 0,
)
if user_info:
from app.core.data_scope import apply_data_scope
q = apply_data_scope(q, BizInsuranceProjectPrice, user_info, db, tenant_no)
rows = q.order_by(BizInsuranceProjectPrice.create_time.desc()).all()
return [_row_to_dict_project_price(r) for r in rows]
def _create_insurance_project_price(
db: Session,
*,
insurance_company_id: str,
project_name: str,
project_fee: Optional[float],
status: Optional[str],
tenant_no: str,
order_num: Optional[int],
remark: Optional[str],
user_id: str,
) -> BizInsuranceProjectPrice:
obj = BizInsuranceProjectPrice(
id=_generate_uuid(),
insurance_company_id=insurance_company_id,
project_name=project_name,
project_fee=project_fee,
status=status or "1",
tenant_no=tenant_no,
order_num=order_num or 0,
remark=remark,
create_by=user_id,
create_dept_id="",
create_time=datetime.now(),
update_by=user_id,
update_time=datetime.now(),
del_flag=0,
)
db.add(obj)
db.commit()
db.refresh(obj)
return obj
def _update_insurance_project_price(
db: Session,
row_id: str,
*,
project_name: Optional[str],
project_fee: Optional[float],
status: Optional[str],
order_num: Optional[int],
remark: Optional[str],
user_id: str,
tenant_no: str,
) -> BizInsuranceProjectPrice:
obj = (
db.query(BizInsuranceProjectPrice)
.filter(
BizInsuranceProjectPrice.id == row_id,
BizInsuranceProjectPrice.tenant_no == tenant_no,
BizInsuranceProjectPrice.del_flag == 0,
)
.first()
)
if not obj:
raise ValueError("记录不存在")
if project_name is not None:
obj.project_name = project_name
if project_fee is not None:
obj.project_fee = project_fee
if status is not None:
obj.status = status
if order_num is not None:
obj.order_num = order_num
if remark is not None:
obj.remark = remark
obj.update_by = user_id
obj.update_time = datetime.now()
db.commit()
db.refresh(obj)
return obj
def _soft_delete_insurance_project_price(db: Session, row_id: str, *, tenant_no: str):
obj = (
db.query(BizInsuranceProjectPrice)
.filter(
BizInsuranceProjectPrice.id == row_id,
BizInsuranceProjectPrice.tenant_no == tenant_no,
BizInsuranceProjectPrice.del_flag == 0,
)
.first()
)
if not obj:
raise ValueError("记录不存在")
obj.del_flag = 1
db.commit()
# ---------------------------------------------------------------------------
# 1. 保险公司(主表)
# ---------------------------------------------------------------------------
class InsuranceCompanyCreateBody(BaseModel):
model_config = ConfigDict(populate_by_name=True)
company_name: str = Field(..., alias="companyName")
company_address: Optional[str] = Field(None, alias="companyAddress")
contact_name: Optional[str] = Field(None, alias="contactName")
contact_phone: Optional[str] = Field(None, alias="contactPhone")
company_logo: Optional[str] = Field(None, alias="companyLogo")
status: Optional[str] = Field("1", alias="status")
order_num: Optional[int] = Field(0, alias="orderNum")
remark: Optional[str] = None
class InsuranceCompanyUpdateBody(BaseModel):
model_config = ConfigDict(populate_by_name=True)
company_name: Optional[str] = Field(None, alias="companyName")
company_address: Optional[str] = Field(None, alias="companyAddress")
contact_name: Optional[str] = Field(None, alias="contactName")
contact_phone: Optional[str] = Field(None, alias="contactPhone")
company_logo: Optional[str] = Field(None, alias="companyLogo")
status: Optional[str] = Field(None, alias="status")
order_num: Optional[int] = Field(None, alias="orderNum")
remark: Optional[str] = None
@router.get("/insurance-companies")
async def list_insurance_companies(
page: int = Query(1, ge=1),
pageSize: int = Query(10, ge=1, le=100, alias="pageSize"),
keyword: Optional[str] = None,
status: Optional[str] = None,
user: dict = Depends(require_admin_or_super_admin),
db: Session = Depends(get_db),
):
tenant_no = _get_tenant_no(db, user)
items, total = _list_insurance_companies(
db,
page=page,
page_size=pageSize,
keyword=keyword,
status=status,
tenant_no=tenant_no,
user_info=user,
)
tp = _total_pages(total, pageSize)
return success_response(
{"list": items, "total": total, "page": page, "pageSize": pageSize, "totalPages": tp}
)
@router.post("/insurance-companies")
async def create_insurance_company(
body: InsuranceCompanyCreateBody,
user: dict = Depends(require_admin_or_super_admin),
db: Session = Depends(get_db),
):
try:
tenant_no = _get_tenant_no(db, user)
obj = _create_insurance_company(
db,
company_name=body.company_name,
company_address=body.company_address,
contact_name=body.contact_name,
contact_phone=body.contact_phone,
company_logo=body.company_logo,
status=body.status,
tenant_no=tenant_no,
order_num=body.order_num,
remark=body.remark,
user_id=user.get("user_id"),
)
return success_response(_row_to_dict_company(obj), message="创建成功")
except ValueError as e:
return error_response(400, str(e))
@router.put("/insurance-companies/{row_id}")
async def update_insurance_company(
row_id: str,
body: InsuranceCompanyUpdateBody,
user: dict = Depends(require_admin_or_super_admin),
db: Session = Depends(get_db),
):
try:
tenant_no = _get_tenant_no(db, user)
payload: dict[str, Any] = body.model_dump(exclude_unset=True, by_alias=False)
obj = _update_insurance_company(
db,
row_id,
company_name=payload.get("company_name"),
company_address=payload.get("company_address"),
contact_name=payload.get("contact_name"),
contact_phone=payload.get("contact_phone"),
company_logo=payload.get("company_logo"),
status=payload.get("status"),
order_num=payload.get("order_num"),
remark=payload.get("remark"),
user_id=user.get("user_id"),
tenant_no=tenant_no,
)
return success_response(_row_to_dict_company(obj), message="更新成功")
except ValueError as e:
return error_response(400, str(e))
@router.delete("/insurance-companies/{row_id}")
async def delete_insurance_company(
row_id: str,
user: dict = Depends(require_admin_or_super_admin),
db: Session = Depends(get_db),
):
try:
tenant_no = _get_tenant_no(db, user)
_soft_delete_insurance_company(db, row_id, tenant_no=tenant_no)
return success_response(None, message="删除成功")
except ValueError as e:
return error_response(400, str(e))
# ---------------------------------------------------------------------------
# 2. 保险公司开票信息(子表)
# ---------------------------------------------------------------------------
class InsuranceCompanyInvoiceCreateBody(BaseModel):
model_config = ConfigDict(populate_by_name=True)
company_name: str = Field(..., alias="companyName")
tax_no: Optional[str] = Field(None, alias="taxNo")
company_address: Optional[str] = Field(None, alias="companyAddress")
company_phone: Optional[str] = Field(None, alias="companyPhone")
bank_name: Optional[str] = Field(None, alias="bankName")
bank_account: Optional[str] = Field(None, alias="bankAccount")
order_num: Optional[int] = Field(0, alias="orderNum")
remark: Optional[str] = None
class InsuranceCompanyInvoiceUpdateBody(BaseModel):
model_config = ConfigDict(populate_by_name=True)
company_name: Optional[str] = Field(None, alias="companyName")
tax_no: Optional[str] = Field(None, alias="taxNo")
company_address: Optional[str] = Field(None, alias="companyAddress")
company_phone: Optional[str] = Field(None, alias="companyPhone")
bank_name: Optional[str] = Field(None, alias="bankName")
bank_account: Optional[str] = Field(None, alias="bankAccount")
order_num: Optional[int] = Field(None, alias="orderNum")
remark: Optional[str] = None
@router.get("/insurance-companies/{company_id}/invoices")
async def list_insurance_company_invoices(
company_id: str,
user: dict = Depends(require_admin_or_super_admin),
db: Session = Depends(get_db),
):
try:
tenant_no = _get_tenant_no(db, user)
items = _list_insurance_company_invoices(db, company_id, tenant_no=tenant_no, user_info=user)
return success_response(items)
except ValueError as e:
return error_response(400, str(e))
@router.post("/insurance-companies/{company_id}/invoices")
async def create_insurance_company_invoice(
company_id: str,
body: InsuranceCompanyInvoiceCreateBody,
user: dict = Depends(require_admin_or_super_admin),
db: Session = Depends(get_db),
):
try:
tenant_no = _get_tenant_no(db, user)
obj = _create_insurance_company_invoice(
db,
insurance_company_id=company_id,
company_name=body.company_name,
tax_no=body.tax_no,
company_address=body.company_address,
company_phone=body.company_phone,
bank_name=body.bank_name,
bank_account=body.bank_account,
tenant_no=tenant_no,
order_num=body.order_num,
remark=body.remark,
user_id=user.get("user_id"),
)
return success_response(_row_to_dict_invoice(obj), message="创建成功")
except ValueError as e:
return error_response(400, str(e))
@router.put("/insurance-company-invoices/{invoice_id}")
async def update_insurance_company_invoice(
invoice_id: str,
body: InsuranceCompanyInvoiceUpdateBody,
user: dict = Depends(require_admin_or_super_admin),
db: Session = Depends(get_db),
):
try:
tenant_no = _get_tenant_no(db, user)
payload: dict[str, Any] = body.model_dump(exclude_unset=True, by_alias=False)
obj = _update_insurance_company_invoice(
db,
invoice_id,
company_name=payload.get("company_name"),
tax_no=payload.get("tax_no"),
company_address=payload.get("company_address"),
company_phone=payload.get("company_phone"),
bank_name=payload.get("bank_name"),
bank_account=payload.get("bank_account"),
order_num=payload.get("order_num"),
remark=payload.get("remark"),
user_id=user.get("user_id"),
tenant_no=tenant_no,
)
return success_response(_row_to_dict_invoice(obj), message="更新成功")
except ValueError as e:
return error_response(400, str(e))
@router.delete("/insurance-company-invoices/{invoice_id}")
async def delete_insurance_company_invoice(
invoice_id: str,
user: dict = Depends(require_admin_or_super_admin),
db: Session = Depends(get_db),
):
try:
tenant_no = _get_tenant_no(db, user)
_soft_delete_insurance_company_invoice(db, invoice_id, tenant_no=tenant_no)
return success_response(None, message="删除成功")
except ValueError as e:
return error_response(400, str(e))
# ---------------------------------------------------------------------------
# 3. 险种价格(子表)
# ---------------------------------------------------------------------------
class InsuranceProjectPriceCreateBody(BaseModel):
model_config = ConfigDict(populate_by_name=True)
project_name: str = Field(..., alias="projectName")
project_fee: Optional[float] = Field(None, alias="projectFee")
status: Optional[str] = Field("1", alias="status")
order_num: Optional[int] = Field(0, alias="orderNum")
remark: Optional[str] = None
class InsuranceProjectPriceUpdateBody(BaseModel):
model_config = ConfigDict(populate_by_name=True)
project_name: Optional[str] = Field(None, alias="projectName")
project_fee: Optional[float] = Field(None, alias="projectFee")
status: Optional[str] = Field(None, alias="status")
order_num: Optional[int] = Field(None, alias="orderNum")
remark: Optional[str] = None
@router.get("/insurance-companies/{company_id}/project-prices")
async def list_insurance_project_prices(
company_id: str,
user: dict = Depends(require_admin_or_super_admin),
db: Session = Depends(get_db),
):
try:
tenant_no = _get_tenant_no(db, user)
items = _list_insurance_project_prices(db, company_id, tenant_no=tenant_no, user_info=user)
return success_response(items)
except ValueError as e:
return error_response(400, str(e))
@router.post("/insurance-companies/{company_id}/project-prices")
async def create_insurance_project_price(
company_id: str,
body: InsuranceProjectPriceCreateBody,
user: dict = Depends(require_admin_or_super_admin),
db: Session = Depends(get_db),
):
try:
tenant_no = _get_tenant_no(db, user)
obj = _create_insurance_project_price(
db,
insurance_company_id=company_id,
project_name=body.project_name,
project_fee=body.project_fee,
status=body.status,
tenant_no=tenant_no,
order_num=body.order_num,
remark=body.remark,
user_id=user.get("user_id"),
)
return success_response(_row_to_dict_project_price(obj), message="创建成功")
except ValueError as e:
return error_response(400, str(e))
@router.put("/insurance-project-prices/{price_id}")
async def update_insurance_project_price(
price_id: str,
body: InsuranceProjectPriceUpdateBody,
user: dict = Depends(require_admin_or_super_admin),
db: Session = Depends(get_db),
):
try:
tenant_no = _get_tenant_no(db, user)
payload: dict[str, Any] = body.model_dump(exclude_unset=True, by_alias=False)
obj = _update_insurance_project_price(
db,
price_id,
project_name=payload.get("project_name"),
project_fee=payload.get("project_fee"),
status=payload.get("status"),
order_num=payload.get("order_num"),
remark=payload.get("remark"),
user_id=user.get("user_id"),
tenant_no=tenant_no,
)
return success_response(_row_to_dict_project_price(obj), message="更新成功")
except ValueError as e:
return error_response(400, str(e))
@router.delete("/insurance-project-prices/{price_id}")
async def delete_insurance_project_price(
price_id: str,
user: dict = Depends(require_admin_or_super_admin),
db: Session = Depends(get_db),
):
try:
tenant_no = _get_tenant_no(db, user)
_soft_delete_insurance_project_price(db, price_id, tenant_no=tenant_no)
return success_response(None, message="删除成功")
except ValueError as e:
return error_response(400, str(e))