提交“
This commit is contained in:
1 parent
69ee0f505c
commit
9b88581450
614 files changed
+90318
-689022
No files matched your search
+35
-198
@@ -5,7 +5,7 @@ from typing import Any, List, Optional
|
||||
|
||||
from fastapi import APIRouter, Depends, Query, UploadFile, File, Form
|
||||
from pydantic import BaseModel, ConfigDict, Field
|
||||
from sqlalchemy import or_
|
||||
from sqlalchemy import and_, or_
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.core.config import settings
|
||||
@@ -20,13 +20,12 @@ from app.crud import dict_data as dict_data_svc
|
||||
from app.crud import dept as dept_svc
|
||||
from app.crud import site as site_svc
|
||||
from app.crud import post as post_svc
|
||||
from app.crud import item_unit as item_unit_svc
|
||||
from app.crud import express_company as express_company_svc
|
||||
from app.crud import menu as menu_svc
|
||||
from app.crud import role as role_svc
|
||||
from app.crud import user as user_svc
|
||||
from app.crud.collection_protocol import _lookup_attachment_by_url
|
||||
from app.models.models import BizAttachment, SysDept, SysRole, SysUser
|
||||
from app.crud import role as role_svc
|
||||
from app.crud import user as user_svc
|
||||
from app.models.models import BizAttachment, SysDept, SysDictData, SysRole, SysUser
|
||||
from app.services.web_auth_roles import _map_role_name_to_web
|
||||
|
||||
router = APIRouter(prefix="/web/admin", tags=["运营端管理"])
|
||||
@@ -216,9 +215,9 @@ async def delete_tenant(
|
||||
def _get_tenant_no(db: Session, user: dict) -> str:
|
||||
user_id = user.get("user_id")
|
||||
if not user_id:
|
||||
return "zkxw"
|
||||
return "shanxia2.0"
|
||||
sys_user = db.query(SysUser).filter(SysUser.id == user_id).first()
|
||||
return (sys_user.tenant_no if sys_user else None) or "zkxw"
|
||||
return (sys_user.tenant_no if sys_user else None) or "shanxia2.0"
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -517,6 +516,7 @@ class DictDataCreateBody(BaseModel):
|
||||
dict_label: str = Field(..., alias="dictLabel")
|
||||
dict_value: str = Field(..., alias="dictValue")
|
||||
dict_type: str = Field(..., alias="dictType")
|
||||
tag_type: Optional[str] = Field("", alias="tagType")
|
||||
order_num: Optional[int] = Field(0, alias="orderNum")
|
||||
remark: Optional[str] = None
|
||||
|
||||
@@ -526,6 +526,7 @@ class DictDataUpdateBody(BaseModel):
|
||||
|
||||
dict_label: Optional[str] = Field(None, alias="dictLabel")
|
||||
dict_value: Optional[str] = Field(None, alias="dictValue")
|
||||
tag_type: Optional[str] = Field(None, alias="tagType")
|
||||
order_num: Optional[int] = Field(None, alias="orderNum")
|
||||
remark: Optional[str] = None
|
||||
|
||||
@@ -560,6 +561,7 @@ async def create_dict_data(
|
||||
dict_label=body.dict_label,
|
||||
dict_value=body.dict_value,
|
||||
dict_type=body.dict_type,
|
||||
tag_type=body.tag_type,
|
||||
tenant_no=tenant_no,
|
||||
order_num=body.order_num,
|
||||
remark=body.remark,
|
||||
@@ -584,6 +586,7 @@ async def update_dict_data(
|
||||
data_id,
|
||||
dict_label=payload.get("dict_label"),
|
||||
dict_value=payload.get("dict_value"),
|
||||
tag_type=payload.get("tag_type"),
|
||||
order_num=payload.get("order_num"),
|
||||
remark=payload.get("remark"),
|
||||
user_id=user.get("user_id"),
|
||||
@@ -617,6 +620,28 @@ async def dict_data_options(
|
||||
return success_response(items)
|
||||
|
||||
|
||||
@router.get("/dict-data/all")
|
||||
async def dict_data_all(
|
||||
user: dict = Depends(require_admin_or_super_admin),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
tenant_no = _get_tenant_no(db, user)
|
||||
rows = db.query(SysDictData).filter(
|
||||
and_(SysDictData.tenant_no == tenant_no, SysDictData.del_flag == 0)
|
||||
).order_by(SysDictData.order_num.asc()).all()
|
||||
grouped = {}
|
||||
for r in rows:
|
||||
key = r.dict_type
|
||||
if key not in grouped:
|
||||
grouped[key] = []
|
||||
grouped[key].append({
|
||||
"label": r.dict_label,
|
||||
"value": r.dict_value,
|
||||
"tagType": r.tag_type or ""
|
||||
})
|
||||
return success_response(grouped)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 组织管理
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -981,196 +1006,6 @@ async def update_post_bound_users(
|
||||
return error_response(400, str(e))
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 物品单位管理
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
class ItemUnitCreateBody(BaseModel):
|
||||
model_config = ConfigDict(populate_by_name=True)
|
||||
|
||||
unit_code: str = Field(..., alias="unitCode")
|
||||
unit_name: str = Field(..., alias="unitName")
|
||||
order_num: Optional[int] = Field(0, alias="orderNum")
|
||||
remark: Optional[str] = None
|
||||
|
||||
|
||||
class ItemUnitUpdateBody(BaseModel):
|
||||
model_config = ConfigDict(populate_by_name=True)
|
||||
|
||||
unit_code: Optional[str] = Field(None, alias="unitCode")
|
||||
unit_name: Optional[str] = Field(None, alias="unitName")
|
||||
order_num: Optional[int] = Field(None, alias="orderNum")
|
||||
remark: Optional[str] = None
|
||||
|
||||
|
||||
@router.get("/item-units")
|
||||
async def list_item_units(
|
||||
page: int = Query(1, ge=1),
|
||||
pageSize: int = Query(10, ge=1, le=100, alias="pageSize"),
|
||||
keyword: Optional[str] = None,
|
||||
user: dict = Depends(require_menu_code("system:unit:list")),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
tenant_no = _get_tenant_no(db, user)
|
||||
items, total = item_unit_svc.list_item_units(db, page=page, page_size=pageSize, keyword=keyword, tenant_no=tenant_no, user_info=user)
|
||||
tp = item_unit_svc.total_pages(total, pageSize)
|
||||
return success_response({"list": items, "total": total, "page": page, "pageSize": pageSize, "totalPages": tp})
|
||||
|
||||
|
||||
@router.post("/item-units")
|
||||
async def create_item_unit(
|
||||
body: ItemUnitCreateBody,
|
||||
user: dict = Depends(require_admin_or_super_admin),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
try:
|
||||
tenant_no = _get_tenant_no(db, user)
|
||||
obj = item_unit_svc.create_item_unit(
|
||||
db,
|
||||
unit_code=body.unit_code,
|
||||
unit_name=body.unit_name,
|
||||
tenant_no=tenant_no,
|
||||
order_num=body.order_num,
|
||||
remark=body.remark,
|
||||
user_id=user.get("user_id"),
|
||||
)
|
||||
return success_response(item_unit_svc._row_to_dict(obj), message="创建成功")
|
||||
except ValueError as e:
|
||||
return error_response(400, str(e))
|
||||
|
||||
|
||||
@router.put("/item-units/{unit_id}")
|
||||
async def update_item_unit(
|
||||
unit_id: str,
|
||||
body: ItemUnitUpdateBody,
|
||||
user: dict = Depends(require_admin_or_super_admin),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
try:
|
||||
payload: dict[str, Any] = body.model_dump(exclude_unset=True, by_alias=False)
|
||||
obj = item_unit_svc.update_item_unit(
|
||||
db,
|
||||
unit_id,
|
||||
unit_code=payload.get("unit_code"),
|
||||
unit_name=payload.get("unit_name"),
|
||||
order_num=payload.get("order_num"),
|
||||
remark=payload.get("remark"),
|
||||
user_id=user.get("user_id"),
|
||||
)
|
||||
return success_response(item_unit_svc._row_to_dict(obj), message="更新成功")
|
||||
except ValueError as e:
|
||||
return error_response(400, str(e))
|
||||
|
||||
|
||||
@router.delete("/item-units/{unit_id}")
|
||||
async def delete_item_unit(
|
||||
unit_id: str,
|
||||
_user: dict = Depends(require_admin_or_super_admin),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
try:
|
||||
item_unit_svc.soft_delete_item_unit(db, unit_id)
|
||||
return success_response(None, message="删除成功")
|
||||
except ValueError as e:
|
||||
return error_response(400, str(e))
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 快递公司管理
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
class ExpressCompanyCreateBody(BaseModel):
|
||||
model_config = ConfigDict(populate_by_name=True)
|
||||
|
||||
express_code: str = Field(..., alias="expressCode")
|
||||
express_name: str = Field(..., alias="expressName")
|
||||
order_num: Optional[int] = Field(0, alias="orderNum")
|
||||
remark: Optional[str] = None
|
||||
|
||||
|
||||
class ExpressCompanyUpdateBody(BaseModel):
|
||||
model_config = ConfigDict(populate_by_name=True)
|
||||
|
||||
express_code: Optional[str] = Field(None, alias="expressCode")
|
||||
express_name: Optional[str] = Field(None, alias="expressName")
|
||||
order_num: Optional[int] = Field(None, alias="orderNum")
|
||||
remark: Optional[str] = None
|
||||
|
||||
|
||||
@router.get("/express-companies")
|
||||
async def list_express_companies(
|
||||
page: int = Query(1, ge=1),
|
||||
pageSize: int = Query(10, ge=1, le=100, alias="pageSize"),
|
||||
keyword: Optional[str] = None,
|
||||
user: dict = Depends(require_menu_code("system:express:list")),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
tenant_no = _get_tenant_no(db, user)
|
||||
items, total = express_company_svc.list_express_companies(db, page=page, page_size=pageSize, keyword=keyword, tenant_no=tenant_no, user_info=user)
|
||||
tp = express_company_svc.total_pages(total, pageSize)
|
||||
return success_response({"list": items, "total": total, "page": page, "pageSize": pageSize, "totalPages": tp})
|
||||
|
||||
|
||||
@router.post("/express-companies")
|
||||
async def create_express_company(
|
||||
body: ExpressCompanyCreateBody,
|
||||
user: dict = Depends(require_admin_or_super_admin),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
try:
|
||||
tenant_no = _get_tenant_no(db, user)
|
||||
obj = express_company_svc.create_express_company(
|
||||
db,
|
||||
express_code=body.express_code,
|
||||
express_name=body.express_name,
|
||||
tenant_no=tenant_no,
|
||||
order_num=body.order_num,
|
||||
remark=body.remark,
|
||||
user_id=user.get("user_id"),
|
||||
)
|
||||
return success_response(express_company_svc._row_to_dict(obj), message="创建成功")
|
||||
except ValueError as e:
|
||||
return error_response(400, str(e))
|
||||
|
||||
|
||||
@router.put("/express-companies/{company_id}")
|
||||
async def update_express_company(
|
||||
company_id: str,
|
||||
body: ExpressCompanyUpdateBody,
|
||||
user: dict = Depends(require_admin_or_super_admin),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
try:
|
||||
payload: dict[str, Any] = body.model_dump(exclude_unset=True, by_alias=False)
|
||||
obj = express_company_svc.update_express_company(
|
||||
db,
|
||||
company_id,
|
||||
express_code=payload.get("express_code"),
|
||||
express_name=payload.get("express_name"),
|
||||
order_num=payload.get("order_num"),
|
||||
remark=payload.get("remark"),
|
||||
user_id=user.get("user_id"),
|
||||
)
|
||||
return success_response(express_company_svc._row_to_dict(obj), message="更新成功")
|
||||
except ValueError as e:
|
||||
return error_response(400, str(e))
|
||||
|
||||
|
||||
@router.delete("/express-companies/{company_id}")
|
||||
async def delete_express_company(
|
||||
company_id: str,
|
||||
_user: dict = Depends(require_admin_or_super_admin),
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
try:
|
||||
express_company_svc.soft_delete_express_company(db, company_id)
|
||||
return success_response(None, message="删除成功")
|
||||
except ValueError as e:
|
||||
return error_response(400, str(e))
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 菜单管理
|
||||
# ---------------------------------------------------------------------------
|
||||
@@ -1539,7 +1374,9 @@ async def attachment_download_url(
|
||||
if not file_url:
|
||||
return error_response(400, "文件地址不能为空")
|
||||
tenant_no = _get_tenant_no(db, user)
|
||||
att = _lookup_attachment_by_url(db, file_url, tenant_no)
|
||||
att = db.query(BizAttachment).filter(
|
||||
and_(BizAttachment.file_url == file_url, BizAttachment.tenant_no == tenant_no, BizAttachment.del_flag == 0)
|
||||
).first()
|
||||
download_name = (body.file_name or "").strip()
|
||||
if not download_name and att:
|
||||
download_name = (att.original_name or "").strip()
|
||||
|
||||
Reference in new issue
Block a user