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


import com.alibaba.fastjson.JSON;
import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import com.xiniunet.framework.security.Identity;
import com.xiniunet.framework.security.Passport;
import com.xiniunet.framework.util.SpringContext;
import com.xiniunet.master.request.system.UserGetRequest;
import com.xiniunet.master.response.system.UserGetResponse;
import com.xiniunet.master.service.MasterService;
import com.xiniunet.quartz.base.XNQuartzJob;
import com.xiniunet.task.biz.TaskManager;
import com.xiniunet.task.biz.TaskManagerImpl;
import com.xiniunet.task.domain.Task;
import com.xiniunet.task.message.TaskAutoOverdueMessage;
import com.xiniunet.task.request.TaskGetRequest;
import com.xiniunet.task.request.TaskOverdueRequest;
import com.xiniunet.task.response.TaskGetResponse;
import com.xiniunet.task.response.TaskOverdueResponse;
import com.xiniunet.xntalk.request.AttachMessagePushRequest;
import com.xiniunet.xntalk.request.IdentityExchangeRequest;
import com.xiniunet.xntalk.request.NotificationUnionGetRequest;
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.Date;

/**
 * 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 UnionService unionService;

    @Autowired
    private MasterService masterService;

    @Autowired
    private TaskManager taskManager;

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        jobExecutionContext.getMergedJobDataMap().getString("data");

        unionService = SpringContext.getApplicationContext().getBean(UnionService.class);
        masterService = SpringContext.getApplicationContext().getBean(MasterService.class);
        taskManager = SpringContext.getApplicationContext().getBean(TaskManagerImpl.class);


        String data = jobExecutionContext.getMergedJobDataMap().getString("data");
        Task task = JSON.toJavaObject(JSON.parseObject(data), Task.class);
        Passport passport = new Passport();
        passport.setTenantId(task.getTenantId());
        TaskGetRequest taskGetRequest = new TaskGetRequest();
        taskGetRequest.setId(task.getId());
        TaskGetResponse taskGetResponse = taskManager.get(taskGetRequest,passport);
        if(taskGetResponse.hasError()){
            logger.warn("---------任务过期出错:"+JSON.toJSONString(taskGetResponse));
            return;
        }

        task = taskGetResponse.getTask();
        //任务没有完成没有终止时进行是否逾期判断
        Date now = new Date();
        if(task.getIsDone() != null && !task.getIsDone() && task.getIsAbort() !=null && !task.getIsAbort()){
            //当前时间大于等于任务结束时间进行逾期操作
            if(now.getTime() >= task.getEndTime().getTime()){
                TaskOverdueRequest taskOverdueRequest = new TaskOverdueRequest();
                taskOverdueRequest.setIsOverdue(true);
                taskOverdueRequest.setId(task.getId());
                //设置任务状态为已逾期
                TaskOverdueResponse taskOverdueResponse = taskManager.setOverdue(taskOverdueRequest,passport);
                if(taskOverdueResponse.hasError()){
                    logger.warn("---------任务过期出错:"+JSON.toJSONString(taskOverdueResponse));
                    return;
                }
                //推送逾期消息告知app
                //获取推送这个unionId
                Long sendUnionId = null;
                Long receiveUnionId = null;
                NotificationUnionGetRequest notificationUnionGetRequest = new NotificationUnionGetRequest();
                notificationUnionGetRequest.setPassport(passport);
                NotificationUnionGetResponse notificationUnionGetResponse = unionService.getNotificationUnionId(notificationUnionGetRequest);
                if(!notificationUnionGetResponse.hasError()){
                    sendUnionId = notificationUnionGetResponse.getUnionId();
                }
                //获取推送对象的ReceiveUnionId
                UserGetRequest userGetRequest = new UserGetRequest();
                userGetRequest.setTenantId(passport.getTenantId());
                userGetRequest.setId(task.getOwnerUserId());
                UserGetResponse userGetResponse = masterService.getUser(userGetRequest,passport);
                if(!userGetResponse.hasError() && userGetResponse.getUser()!= null && userGetResponse.getUser().getUnionId() != null){
                    receiveUnionId =userGetResponse.getUser().getUnionId();
                }
                //获取Identity
                Identity identity = new Identity();
                IdentityExchangeRequest identityExchangeRequest = new IdentityExchangeRequest();
                IdentityExchangeResponse identityExchangeResponse = unionService.exchangeIdentityByPassport(identityExchangeRequest,passport);
                if(!identityExchangeResponse.hasError()){
                    identity = identityExchangeResponse.getIdentity();
                }
                //开始推送逾期消息给app
                if(sendUnionId != null && receiveUnionId != null){

                    AttachMessagePushRequest attachMessagePushRequest = new AttachMessagePushRequest();
                    attachMessagePushRequest.setSendUnionId(sendUnionId);
                    attachMessagePushRequest.setBadge(false);
                    attachMessagePushRequest.setSave(false);
                    attachMessagePushRequest.setNeedPushNick(false);
                    attachMessagePushRequest.setReceiveUnionId(receiveUnionId);
                    attachMessagePushRequest.setMessageType("UNION_EVENT_MESSAGE");
                    attachMessagePushRequest.setMessageData("{\n" +
                            "type:30\n" +
                            "data:{\n" +
                            "tenantId:\""+passport.getTenantId()+
                            "businessType:\"DELAY_TASK_UPDATE\"" +
                            "\t}\n" +
                            "}");
                    attachMessagePushRequest.setRoute(true);
                    AttachMessagePushResponse attachMessagePushResponse = unionService.pushAttachMessage(attachMessagePushRequest,identity);
                    if(attachMessagePushResponse.hasError()){
                        logger.warn("---------任务过期出错:"+JSON.toJSONString(attachMessagePushResponse));
                        return ;
                    }
                }
            }
        }
        logger.warn("---------任务过期收到消息通知结束:");
        return ;

    }
}