schedules.py 1.52 KB

import time
import schedule
import threading
from api import models
from django.utils import timezone
from django.db.models import F, Func
from django.db.models.functions import Now

def project_confirmation_times():
    projects = models.Projects.objects.filter(status=1,deleted_at=None)
    for project in projects:
        #匹配的活动均值
        l1 = list()
        days_diff = Func(F('match_at') - F('publish_at'), function='ABS')
        results = models.Activitys.objects.filter(status__in=[3,5],project_id=project.id).annotate(days_diff=days_diff)
        for result in results:
            try:l1.append(result.days_diff.days)
            except:l1.append(0)
        # 未匹配的活动均值
        days_diff = Func(Now() - F('publish_at'),function='ABS')
        deltas =  models.Activitys.objects.filter(status=1,project_id=project.id).annotate(days_diff=days_diff)
        for delta in deltas:
            try:l1.append(delta.days_diff.days)
            except:pass
        try:mean = sum(l1) / len(l1)
        except: mean = 0
        models.ProjectConfirmationTime.objects.update_or_create(
            project_id=project.id,
            defaults={'average_day': mean,'created_at':timezone.now().strftime("%Y-%m-%d %H:%M:%S"),'updated_at':timezone.now().strftime("%Y-%m-%d %H:%M:%S")}
        )

def job1():
    threading.Thread(target=project_confirmation_times).start()

schedule.every().day.at("02:00").do(job1)
# schedule.every(1).minutes.do(job1)

def run():
    while True:
        schedule.run_pending()
        time.sleep(1)