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