TaskCheckIsOverdueJob.java 5.39 KB
package com.xiniunet.quartz;


import com.alibaba.dubbo.common.utils.CollectionUtils;
import com.alibaba.fastjson.JSON;
import com.xiniunet.framework.security.Identity;
import com.xiniunet.framework.security.Passport;
import com.xiniunet.framework.util.MQUtil;
import com.xiniunet.framework.util.SpringContext;
import com.xiniunet.master.domain.system.User;
import com.xiniunet.master.request.system.UserFindRequest;
import com.xiniunet.master.request.system.UserGetRequest;
import com.xiniunet.master.response.system.UserFindResponse;
import com.xiniunet.master.response.system.UserGetResponse;
import com.xiniunet.master.service.MasterService;
import com.xiniunet.quartz.base.XNQuartzJob;
import com.xiniunet.quartz.base.XNQuartzJobData;
import com.xiniunet.task.biz.TaskManager;
import com.xiniunet.task.biz.TaskManagerImpl;
import com.xiniunet.task.constant.Constant;
import com.xiniunet.task.dal.TaskMapper;
import com.xiniunet.task.dal.TaskUserMapper;
import com.xiniunet.task.domain.Task;
import com.xiniunet.task.message.TaskPushAppMessageMessage;
import com.xiniunet.task.po.TaskPO;
import com.xiniunet.task.po.TaskUserPO;
import com.xiniunet.task.request.TaskGetRequest;
import com.xiniunet.task.request.TaskOverdueRequest;
import com.xiniunet.task.request.TaskUserFindRequest;
import com.xiniunet.task.response.TaskGetResponse;
import com.xiniunet.task.response.TaskOverdueResponse;
import com.xiniunet.xntalk.domain.UnionEventMessage;
import com.xiniunet.xntalk.request.AttachMessageBatchPushRequest;
import com.xiniunet.xntalk.request.AttachMessagePushRequest;
import com.xiniunet.xntalk.request.IdentityExchangeRequest;
import com.xiniunet.xntalk.request.NotificationUnionGetRequest;
import com.xiniunet.xntalk.response.AttachMessageBatchPushResponse;
import com.xiniunet.xntalk.response.AttachMessagePushResponse;
import com.xiniunet.xntalk.response.IdentityExchangeResponse;
import com.xiniunet.xntalk.response.NotificationUnionGetResponse;
import com.xiniunet.xntalk.service.UnionService;
import org.quartz.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * Created by YQ on 2018-05-24.
 */
@Component
public class TaskCheckIsOverdueJob extends XNQuartzJob {

    private Logger logger = LoggerFactory.getLogger(this.getClass());

    public TaskCheckIsOverdueJob()
    {
        this.setJobTag("TaskCheckIsOverdueJob");

    }


    @Autowired
    private TaskManager taskManager;
    @Autowired
    private TaskMapper taskMapper;

    /**
     * 任务检查逾期时间调度器
     * @param jobExecutionContext
     * @throws JobExecutionException
     */
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        if(taskManager==null){
            taskManager = SpringContext.getApplicationContext().getBean(TaskManagerImpl.class);
        }
        if(taskMapper == null){
            taskMapper = SpringContext.getApplicationContext().getBean(TaskMapper.class);
        }
        //获取传递信息task
        String data = jobExecutionContext.getMergedJobDataMap().getString("data");
        XNQuartzJobData xnQuartzJobData = JSON.toJavaObject(JSON.parseObject(data), XNQuartzJobData.class);
        Passport passport = xnQuartzJobData.getPassport();
        TaskGetRequest taskGetRequest = new TaskGetRequest();
        taskGetRequest.setId(xnQuartzJobData.getId());
        TaskPO task = taskMapper.getById(xnQuartzJobData.getId(), passport);
        if(task == null){
            logger.warn("---------任务信息不存在");
            return;
        }

        //任务没有完成没有终止时进行是否逾期判断
        Date now = new Date();
        if(task.getIsDone() != null && !task.getIsDone() && task.getIsAbort() !=null && !task.getIsAbort()
                && task.getIsOverdue() != null && !task.getIsOverdue()) {
            //当前时间大于等于任务结束时间进行逾期操作
            if (now.getTime() >= task.getEndTime().getTime()) {
                TaskOverdueRequest taskOverdueRequest = new TaskOverdueRequest();
                taskOverdueRequest.setIsOverdue(true);
                taskOverdueRequest.setId(task.getId());
                taskOverdueRequest.setListId(Constant.OVER_DUE_GROUP_ID);
                //设置任务状态为已逾期
                TaskOverdueResponse taskOverdueResponse = taskManager.setOverdue(taskOverdueRequest, passport);
                if (taskOverdueResponse.hasError()) {
                    logger.warn("---------任务过期出错:" + JSON.toJSONString(taskOverdueResponse));
                    return;
                }
                // 推送告知app的消息
                TaskPushAppMessageMessage taskPushAppMessageMessage = new TaskPushAppMessageMessage();
                taskPushAppMessageMessage.setBusinessType("DELAY_TASK_UPDATE");
                taskPushAppMessageMessage.setId(task.getId());
                taskPushAppMessageMessage.setPassport(passport);
                taskPushAppMessageMessage.setUserId(task.getOwnerUserId());
                if(!MQUtil.send(taskPushAppMessageMessage)){
                    logger.warn("发送推送告知app的消息失败!");
                }
            }
        }
        logger.warn("---------任务过期收到消息通知结束:");
        return ;

    }
}