refactor(api): 统一更新接口使用路径参数传递ID

refactor(backend): 重构CRUD基类查询方法去除重复结果

feat(application): 新增应用系统模块基础结构

fix(backend): 修复多处日志记录ID变量名错误

style(backend): 清理无用代码和注释

fix(frontend): 修复用户导入功能参数错误

docs(backend): 更新环境配置示例注释

perf(backend): 优化导出功能数据处理逻辑

test(frontend): 添加任务日志功能开发中提示

chore: 更新角色菜单权限数据
This commit is contained in:
zhangtao
2025-09-05 01:00:38 +08:00
parent 9fda6f3bfc
commit 4df6241e8b
92 changed files with 2462 additions and 753 deletions
@@ -64,13 +64,14 @@ async def create_type_controller(
logger.info(f"创建字典类型成功: {result_dict}")
return SuccessResponse(data=result_dict, msg="创建字典类型成功")
@DictRouter.put("/type/update", summary="修改字典类型", description="修改字典类型")
@DictRouter.put("/type/update/{id}", summary="修改字典类型", description="修改字典类型")
async def update_type_controller(
data: DictTypeUpdateSchema,
redis: Redis = Depends(redis_getter),
id: int = Path(..., description="字典类型ID"),
auth: AuthSchema = Depends(AuthPermission(permissions=["system:dict_type:update"]))
) -> JSONResponse:
result_dict = await DictTypeService.update_obj_service(auth=auth, redis=redis, data=data)
result_dict = await DictTypeService.update_obj_service(auth=auth, redis=redis, id=id, data=data)
logger.info(f"修改字典类型成功: {result_dict}")
return SuccessResponse(data=result_dict, msg="修改字典类型成功")
@@ -81,7 +82,7 @@ async def delete_type_controller(
auth: AuthSchema = Depends(AuthPermission(permissions=["system:dict_type:delete"]))
) -> JSONResponse:
await DictTypeService.delete_obj_service(auth=auth, redis=redis, ids=ids)
logger.info(f"删除字典类型成功: {id}")
logger.info(f"删除字典类型成功: {ids}")
return SuccessResponse(msg="删除字典类型成功")
@DictRouter.patch("/type/available/setting", summary="批量修改公告状态", description="批量修改公告状态")
@@ -141,13 +142,14 @@ async def create_data_controller(
logger.info(f"创建字典数据成功: {result_dict}")
return SuccessResponse(data=result_dict, msg="创建字典数据成功")
@DictRouter.put("/data/update", summary="修改字典数据", description="修改字典数据")
@DictRouter.put("/data/update/{id}", summary="修改字典数据", description="修改字典数据")
async def update_data_controller(
data: DictDataUpdateSchema,
redis: Redis = Depends(redis_getter),
id: int = Path(..., description="字典数据ID"),
auth: AuthSchema = Depends(AuthPermission(permissions=["system:dict_data:update"]))
) -> JSONResponse:
result_dict = await DictDataService.update_obj_service(auth=auth, redis=redis, data=data)
result_dict = await DictDataService.update_obj_service(auth=auth, redis=redis, id=id, data=data)
logger.info(f"修改字典数据成功: {result_dict}")
return SuccessResponse(data=result_dict, msg="修改字典数据成功")
@@ -158,7 +160,7 @@ async def delete_data_controller(
auth: AuthSchema = Depends(AuthPermission(permissions=["system:dict_data:delete"]))
) -> JSONResponse:
await DictDataService.delete_obj_service(auth=auth, redis=redis, ids=ids)
logger.info(f"删除字典数据成功: {id}")
logger.info(f"删除字典数据成功: {ids}")
return SuccessResponse(msg="删除字典数据成功")
@DictRouter.patch("/data/available/setting", summary="批量修改字典数据状态", description="批量修改字典数据状态")
@@ -33,7 +33,7 @@ class DictTypeCreateSchema(BaseModel):
class DictTypeUpdateSchema(DictTypeCreateSchema):
"""字典类型更新模型"""
id: int = Field(..., gt=0, description="字典类型ID")
...
class DictTypeOutSchema(DictTypeCreateSchema, BaseSchema):
@@ -76,7 +76,7 @@ class DictDataCreateSchema(BaseModel):
class DictDataUpdateSchema(DictDataCreateSchema):
"""字典数据更新模型"""
id: int = Field(..., gt=0, description="字典数据ID")
...
class DictDataOutSchema(DictDataCreateSchema, BaseSchema):
@@ -62,8 +62,8 @@ class DictTypeService:
return new_obj_dict
@classmethod
async def update_obj_service(cls, auth: AuthSchema, redis: Redis, data: DictTypeUpdateSchema) -> Dict:
exist_obj = await DictTypeCRUD(auth).get_obj_by_id_crud(id=data.id)
async def update_obj_service(cls, auth: AuthSchema, redis: Redis, id:int, data: DictTypeUpdateSchema) -> Dict:
exist_obj = await DictTypeCRUD(auth).get_obj_by_id_crud(id=id)
if not exist_obj:
raise CustomException(msg='更新失败,该数据字典类型不存在')
if exist_obj.dict_name != data.dict_name:
@@ -93,7 +93,7 @@ class DictTypeService:
obj = await DictDataCRUD(auth).update_obj_crud(id=item.id, data=dict_data)
dict_data_list.append(DictDataOutSchema.model_validate(obj).model_dump())
obj = await DictTypeCRUD(auth).update_obj_crud(id=data.id, data=data)
obj = await DictTypeCRUD(auth).update_obj_crud(id=id, data=data)
new_obj_dict = DictTypeOutSchema.model_validate(obj).model_dump()
@@ -164,7 +164,7 @@ class DictTypeService:
item['status'] = '正常' if item.get('status') else '停用'
item['creator'] = item.get('creator', {}).get('name', '未知') if isinstance(item.get('creator'), dict) else '未知'
return ExcelUtil.export_list2excel(list_data=data_list, mapping_dict=mapping_dict)
return ExcelUtil.export_list2excel(list_data=data, mapping_dict=mapping_dict)
class DictDataService:
@@ -250,12 +250,12 @@ class DictDataService:
return DictDataOutSchema.model_validate(obj).model_dump()
@classmethod
async def update_obj_service(cls, auth: AuthSchema, redis: Redis, data: DictDataUpdateSchema) -> Dict:
exist_obj = await DictDataCRUD(auth).get_obj_by_id_crud(id=data.id)
async def update_obj_service(cls, auth: AuthSchema, redis: Redis, id:int, data: DictDataUpdateSchema) -> Dict:
exist_obj = await DictDataCRUD(auth).get_obj_by_id_crud(id=id)
if not exist_obj:
raise CustomException(msg='更新失败,该字典数据不存在')
exist_obj = await DictDataCRUD(auth).get(dict_label=data.dict_label)
if exist_obj and exist_obj.id != data.id:
if exist_obj and exist_obj.id != id:
raise CustomException(msg='更新失败,数据字典数据重复')
# 如果状态变更,需要同步更新字典类型状态并刷新缓存
@@ -283,7 +283,7 @@ class DictDataService:
except Exception as e:
logger.error(f"更新字典数据状态时刷新缓存失败: {e}")
obj = await DictDataCRUD(auth).update_obj_crud(id=data.id, data=data)
obj = await DictDataCRUD(auth).update_obj_crud(id=id, data=data)
redis_key = f"{RedisInitKeyConfig.SYSTEM_DICT.key}:{data.dict_type}"
try:
# 获取当前字典类型的所有字典数据
@@ -304,6 +304,8 @@ class DictDataService:
@classmethod
async def delete_obj_service(cls, auth: AuthSchema, redis: Redis, ids: list[int]) -> None:
if len(ids) < 1:
raise CustomException(msg='删除失败,删除对象不能为空')
for id in ids:
@@ -354,4 +356,4 @@ class DictDataService:
item['is_default'] = '' if item.get('is_default') else ''
item['creator'] = item.get('creator', {}).get('name', '未知') if isinstance(item.get('creator'), dict) else '未知'
return ExcelUtil.export_list2excel(list_data=data_list, mapping_dict=mapping_dict)
return ExcelUtil.export_list2excel(list_data=data, mapping_dict=mapping_dict)