def singalCheck(taskResultId): # 根据任务编号查询所有任务是否已经完成 executeCount = TaskInfo.select().where( (TaskInfo.taskResultId == taskResultId) & (TaskInfo.state != 1) & (TaskInfo.state != 6)).count() subTaskResult = TaskInfo.select().where(TaskInfo.taskResultId == taskResultId).count() print 'subTaskResult', subTaskResult print 'executeCount', executeCount if executeCount == subTaskResult and executeCount != 0: #将本次任务检查结果明细生成到result目录 checkTaskResult = TaskResult.getOne(TaskResult.taskResultId == taskResultId) taskId = checkTaskResult.taskId.taskId result_taskresultid = checkTaskResult.taskResultId taskCount = TaskInfo.select().where( (TaskInfo.taskResultId == taskResultId)).count() onceCount = config.getTaskResultCount packCount = int(math.ceil(float(taskCount)/float(onceCount))) #生成检查结果明细文件 print '开始生成检查结果明细文件' print 'packCount:',packCount genTaskResultFile(taskId,result_taskresultid,packCount) print '单次任务检查完毕结束当前任务,开始发送邮件通知' # 说明该任务结果已经发送完毕,从apscheduler任务调度中删除该任务 scheduler.remove_job(str(taskResultId)) bigTaskId = checkTaskResult.taskId.taskId taskResultId = checkTaskResult.taskResultId # 更新上一次子任务的状态 oTime = format(datetime.datetime.now(), '%Y-%m-%d %H:%M:%S') q = TaskResult.update(state="2", overTime=oTime).where( TaskResult.taskResultId == taskResultId) q.execute() #修改任务结果对应的大任务状态为已完成 q = Task.update(state="2").where(Task.taskId==taskId) q.execute() # 任务执行完毕后发送邮件通知 mutil = MailUtil() # 获取当前任务绑定的邮箱账号 toEmail = TaskResult.getOne(TaskResult.taskResultId == taskResultId).taskId.userId.email if toEmail is not None: from_addr = config.SEND_EMAIL password = config.SEND_EMAIL_PASSWORD to_addr = toEmail smtp_server = config.SMTP_SERVER msg = str.format(config.MAIL_NOTICE, bigTaskId, bigTaskId, str(taskResultId)) subject = config.MAIL_SUBJECT mutil.sendMail.delay(from_addr, password, to_addr, smtp_server, msg, subject) else: print "该任务未绑定接收邮箱,任务结果编号:",taskResultId