TaskCheckIsOverdueJob.java 7.89 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.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.dal.TaskMapper;
import com.xiniunet.task.dal.TaskUserMapper;
import com.xiniunet.task.domain.Task;
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 UnionService unionService;

    @Autowired
    private MasterService masterService;

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

    /**
     * 任务检查逾期时间调度器
     * @param jobExecutionContext
     * @throws JobExecutionException
     */
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {

        unionService = SpringContext.getApplicationContext().getBean(UnionService.class);
        masterService = SpringContext.getApplicationContext().getBean(MasterService.class);
        taskManager = SpringContext.getApplicationContext().getBean(TaskManagerImpl.class);
        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());
                //设置任务状态为已逾期
                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();
                }
                //获取推送对象的ReceiveUnionIdList
                UserGetRequest userGetRequest = new UserGetRequest();
                userGetRequest.setId(task.getOwnerUserId());
                UserGetResponse userGetResponse = masterService.getUser(userGetRequest, passport);
                if (!userGetResponse.hasError() && userGetResponse.getUser() != null) {
                    if ( 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");
                    UnionEventMessage unionEventMessage = new UnionEventMessage();
                    unionEventMessage.setTenantId(passport.getTenantId());
                    unionEventMessage.setType(30);
                    unionEventMessage.setBusinessType("DYNAMIC_TASK_UPDATE");
                    attachMessagePushRequest.setMessageData(JSON.toJSONString(unionEventMessage));

                    AttachMessagePushResponse messagePushResponse = unionService.pushAttachMessage(attachMessagePushRequest, identity);
                    if (messagePushResponse.hasError()) {
                        logger.warn("---------推送动态消息告知app出错:" + JSON.toJSONString(messagePushResponse));
                    }
                }
            }
        }
        logger.warn("---------任务过期收到消息通知结束:");
        return ;

    }
}