kangda-robot-backend/ruoyi-fastapi-backend/module_admin/controller/scheduler_controller.py

80 lines
3.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
系统定时任务
"""
from config.get_scheduler import scheduler
from apscheduler.triggers.cron import CronTrigger
from apscheduler.triggers.interval import IntervalTrigger
from module_admin.service.haikang_service import HaiKangService
from module_admin.service.compreface_service import ComprefaceService
from utils.log_util import logger
# 定时获取访客图片并上传compreface
async def download_visitor_image_and_upload_compreface():
"""
定时任务获取海康访客图片并上传到compreface进行人脸识别
同时删除已过期的访客人脸数据
执行频率每2分钟一次
"""
try:
logger.info('开始执行定时任务获取访客图片并上传compreface')
# 获取所有有效状态的访客图片visitorStatus=1表示正常状态
visitor_name_list = await HaiKangService.get_all_visitor_pictures(visitorStatus=1)
logger.info(f'获取到 {len(visitor_name_list)} 张有效访客图片')
# 如果有新的访客图片将访客图片上传到compreface
if visitor_name_list:
result = await ComprefaceService.face_addition_batch_service(visitor_name_list)
logger.info(f'访客图片上传compreface结果: {result}')
else:
logger.info('没有新的访客图片需要处理')
# 删除过期的访客人脸数据
# 从visitor_name_list中提取所有访客的名字
active_visitor_names = [name for _, name in visitor_name_list] if visitor_name_list else []
logger.info(f'开始删除过期访客人脸,当前有效访客数量: {len(active_visitor_names)}')
delete_result = await ComprefaceService.delete_expired_visitor_faces_service(active_visitor_names)
if delete_result.get('error'):
logger.error(f'删除过期访客失败: {delete_result.get("error")}')
else:
logger.info(
f'删除过期访客完成 - 成功删除: {delete_result.get("deleted_count")} 个, '
f'失败: {delete_result.get("failed_count")}'
)
if delete_result.get('deleted_subjects'):
logger.info(f'已删除的访客: {", ".join(delete_result.get("deleted_subjects"))}')
if delete_result.get('failed_subjects'):
logger.warning(f'删除失败的访客: {delete_result.get("failed_subjects")}')
logger.info('定时任务执行完成获取访客图片并上传compreface')
except Exception as e:
logger.error(f'定时任务执行失败获取访客图片并上传compreface - {str(e)}', exc_info=True)
# 初始化定时任务
def init_scheduled_tasks():
"""
初始化所有定时任务
在应用启动时调用此方法
"""
# 添加访客图片上传任务每2分钟执行一次
scheduler.add_job(
func=download_visitor_image_and_upload_compreface,
trigger=IntervalTrigger(minutes=2),
id='download_visitor_image_task',
name='定时获取访客图片并上传compreface',
replace_existing=True,
max_instances=1, # 同一时间只允许一个实例运行
)
logger.info('定时任务已添加download_visitor_image_and_upload_compreface (每2分钟执行一次)')