""" 系统定时任务 """ 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分钟执行一次)')