v2.5更新

This commit is contained in:
2026-05-29 17:35:29 +08:00
parent 6c0d8f0e94
commit fe58ee1d23
12 changed files with 258 additions and 24 deletions

View File

@@ -319,7 +319,8 @@ async def get_conduct_history(
end_date: Optional[str] = None,
grouped: bool = Query(False),
related_type: Optional[str] = None,
reason_prefix: Optional[str] = None
reason_prefix: Optional[str] = None,
is_revoked: Optional[int] = None
):
"""获取操行分历史记录"""
try:
@@ -335,7 +336,8 @@ async def get_conduct_history(
end_date=end_date,
grouped=grouped,
related_type=related_type,
reason_prefix=reason_prefix
reason_prefix=reason_prefix,
is_revoked=is_revoked
)
return success_response(data=result)
except Exception as e:
@@ -343,6 +345,86 @@ async def get_conduct_history(
return error_response(message=f"获取历史记录失败: {str(e)}")
@router.post("/conduct/batch-revoke")
async def batch_revoke_conduct_records(request: Request):
"""批量撤销操行分记录"""
try:
user = await get_current_user(request)
if user["user_type"] != "admin":
return error_response(message="无权进行此操作", code=403)
body = await request.json()
record_ids = body.get("record_ids", [])
if not record_ids or not isinstance(record_ids, list):
return error_response(message="请提供要撤销的记录ID列表", code=400)
if len(record_ids) > 100:
return error_response(message="单次最多撤销100条记录", code=400)
success_count = 0
fail_count = 0
errors = []
for record_id in record_ids:
result = await ConductService.revoke_record(
record_id=record_id,
revoker_id=user["user_id"]
)
if result["success"]:
success_count += 1
else:
fail_count += 1
errors.append({"record_id": record_id, "error": result["message"]})
return success_response(data={
"success_count": success_count,
"fail_count": fail_count,
"errors": errors
}, message=f"批量撤销完成: {success_count}条成功, {fail_count}条失败")
except Exception as e:
logger.error(f"批量撤销失败: {e}", exc_info=True)
return error_response(message=f"批量撤销失败: {str(e)}")
@router.post("/conduct/batch-restore")
async def batch_restore_conduct_records(request: Request):
"""批量反撤销操行分记录"""
try:
user = await get_current_user(request)
if user["user_type"] != "admin":
return error_response(message="无权进行此操作", code=403)
body = await request.json()
record_ids = body.get("record_ids", [])
if not record_ids or not isinstance(record_ids, list):
return error_response(message="请提供要反撤销的记录ID列表", code=400)
if len(record_ids) > 100:
return error_response(message="单次最多反撤销100条记录", code=400)
success_count = 0
fail_count = 0
errors = []
for record_id in record_ids:
result = await ConductService.restore_record(
record_id=record_id,
restorer_id=user["user_id"]
)
if result["success"]:
success_count += 1
else:
fail_count += 1
errors.append({"record_id": record_id, "error": result["message"]})
return success_response(data={
"success_count": success_count,
"fail_count": fail_count,
"errors": errors
}, message=f"批量反撤销完成: {success_count}条成功, {fail_count}条失败")
except Exception as e:
logger.error(f"批量反撤销失败: {e}", exc_info=True)
return error_response(message=f"批量反撤销失败: {str(e)}")
# ========== 考勤管理 ==========