This commit is contained in:
@@ -0,0 +1,137 @@
|
||||
# +======================================================================
|
||||
# | 模块: 城市请求处理器层
|
||||
# | 说明: 承接城市相关的 HTTP 请求,校验权限/演示模式并记录操作日志后,
|
||||
# | 转交城市服务层处理(分页、详情、增删改、批量删除等)
|
||||
# +======================================================================
|
||||
"""城市请求处理器。"""
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# 导入依赖
|
||||
# 涵盖:权限/演示模式装饰器、操作日志装饰器、统一响应对象、
|
||||
# 请求处理基类、城市服务单例
|
||||
# ----------------------------------------------------------------------
|
||||
from common.middleware.access_decorators import check_demo, permission_required
|
||||
from common.middleware.operation_log import operation_log
|
||||
from core import response as R
|
||||
from core.base_handler import BaseHandler
|
||||
from core.database import db
|
||||
from modules.city.models import City
|
||||
from modules.city.service import city_service
|
||||
|
||||
|
||||
# ======================================================================
|
||||
# 查询城市数据
|
||||
# ======================================================================
|
||||
class CityPageHandler(BaseHandler):
|
||||
"""查询城市数据。"""
|
||||
|
||||
@permission_required("sys:city:list")
|
||||
async def get(self):
|
||||
"""GET 请求:返回城市分页列表。"""
|
||||
return await city_service.get_page(self)
|
||||
|
||||
|
||||
# ======================================================================
|
||||
# 查询城市详情
|
||||
# ======================================================================
|
||||
class CityDetailHandler(BaseHandler):
|
||||
"""查询城市详情。"""
|
||||
|
||||
@permission_required("sys:city:detail")
|
||||
async def get(self, id):
|
||||
"""GET 请求:按 ID 返回城市详情。
|
||||
|
||||
:param id: 城市 ID(路径参数)
|
||||
"""
|
||||
return R.ok(self, data=city_service.get_detail(id))
|
||||
|
||||
|
||||
# ======================================================================
|
||||
# 添加城市
|
||||
# ======================================================================
|
||||
class CityAddHandler(BaseHandler):
|
||||
"""添加城市。"""
|
||||
|
||||
@permission_required("sys:city:add")
|
||||
@check_demo
|
||||
@operation_log("城市管理", "添加")
|
||||
async def post(self):
|
||||
"""POST 请求:新增城市。"""
|
||||
return await city_service.add(self)
|
||||
|
||||
|
||||
# ======================================================================
|
||||
# 更新城市
|
||||
# ======================================================================
|
||||
class CityUpdateHandler(BaseHandler):
|
||||
"""更新城市。"""
|
||||
|
||||
@permission_required("sys:city:update")
|
||||
@check_demo
|
||||
@operation_log("城市管理", "更新")
|
||||
async def put(self):
|
||||
"""PUT 请求:更新城市信息。"""
|
||||
return await city_service.update(self)
|
||||
|
||||
|
||||
# ======================================================================
|
||||
# 删除城市
|
||||
# ======================================================================
|
||||
class CityDeleteHandler(BaseHandler):
|
||||
"""删除城市。"""
|
||||
|
||||
@permission_required("sys:city:delete")
|
||||
@check_demo
|
||||
@operation_log("城市管理", "删除")
|
||||
async def delete(self, id):
|
||||
"""DELETE 请求:按 ID 删除城市(软删除)。
|
||||
|
||||
:param id: 城市 ID(路径参数)
|
||||
"""
|
||||
return await city_service.delete(self, id)
|
||||
|
||||
|
||||
# ======================================================================
|
||||
# 批量删除城市
|
||||
# ======================================================================
|
||||
class CityBatchDeleteHandler(BaseHandler):
|
||||
"""批量删除城市。"""
|
||||
|
||||
@permission_required("sys:city:delete")
|
||||
@check_demo
|
||||
@operation_log("城市管理", "批量删除")
|
||||
async def post(self):
|
||||
"""POST 请求:批量删除城市(软删除)。"""
|
||||
return await city_service.batch_delete(self)
|
||||
|
||||
|
||||
# ======================================================================
|
||||
# 根据城市编码查询子级城市
|
||||
# ======================================================================
|
||||
class CityGetListHandler(BaseHandler):
|
||||
"""根据城市编码查询子级城市。"""
|
||||
|
||||
async def get(self, city_code):
|
||||
"""GET 请求:根据城市编码返回子级城市列表。
|
||||
|
||||
:param city_code: 城市编码(路径参数)
|
||||
"""
|
||||
try:
|
||||
from sqlalchemy import or_
|
||||
city_code = (city_code or '').strip()
|
||||
# 顶级(省级)查询:兼容旧数据 '0' 哨兵值与新数据 NULL
|
||||
if city_code in ('0', ''):
|
||||
items = db.query(City).filter(
|
||||
or_(City.parent_code == '0', City.parent_code.is_(None)),
|
||||
City.is_delete == 0,
|
||||
).all()
|
||||
else:
|
||||
# 查询子级城市
|
||||
items = db.query(City).filter(
|
||||
City.parent_code == city_code, City.is_delete == 0
|
||||
).all()
|
||||
# 返回完整结构
|
||||
result = [item.to_dict() for item in items]
|
||||
return R.ok(self, data=result)
|
||||
finally:
|
||||
db.close()
|
||||
Reference in New Issue
Block a user