TaskUserRemindingJob.java 4.93 KB
package com.xiniunet.quartz;


import com.alibaba.dubbo.common.utils.CollectionUtils;
import com.alibaba.fastjson.JSON;
import com.xiniunet.foundation.request.MessageBatchCreateRequest;
import com.xiniunet.foundation.request.MessageCreateRequest;
import com.xiniunet.foundation.service.FoundationService;
import com.xiniunet.framework.security.Passport;
import com.xiniunet.framework.util.SpringContext;
import com.xiniunet.quartz.base.XNQuartzJob;
import com.xiniunet.quartz.base.XNQuartzJobData;
import com.xiniunet.task.dal.TaskMapper;
import com.xiniunet.task.dal.TaskUserMapper;
import com.xiniunet.task.enumeration.BusinessTypeEnum;
import com.xiniunet.task.po.TaskPO;
import com.xiniunet.task.po.TaskUserPO;
import com.xiniunet.task.request.TaskGetRequest;
import com.xiniunet.task.request.TaskUserFindRequest;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
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 TaskUserRemindingJob extends XNQuartzJob {

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

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

    }

    @Autowired
    private TaskUserMapper taskUserMapper;

    @Autowired
    private FoundationService foundationService;
    @Autowired
    private TaskMapper taskMapper;
    /**
     * 用户任务提醒时间调度器
     * @param jobExecutionContext
     * @throws JobExecutionException
     */
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {

        if(taskUserMapper==null){
            taskUserMapper = SpringContext.getApplicationContext().getBean(TaskUserMapper.class);
        }
        if(taskMapper == null){
            taskMapper = SpringContext.getApplicationContext().getBean(TaskMapper.class);
        }
        if(foundationService == null){
            foundationService = SpringContext.getApplicationContext().getBean(FoundationService.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;
        }
        if(task.getIsDone() != null && !task.getIsDone() && task.getIsAbort() !=null && !task.getIsAbort()
                && task.getIsOverdue() != null && !task.getIsOverdue()){
            //查找用户任务
            TaskUserPO taskUserPO = taskUserMapper.getById(xnQuartzJobData.getUserTaskId(),passport);
            if(taskUserPO != null && taskUserPO.getUserId() != null &&
                    taskUserPO.getIsTimeAlarm() != null && taskUserPO.getIsTimeAlarm()){
                String url = "xntalk://rnapp.open/kpiTarget?tenantId=" + passport.getTenantId() + "&taskId=" + task.getId() + "&name=" + task.getOwnerUserName();
                MessageCreateRequest messageCreateRequest = new MessageCreateRequest();
                messageCreateRequest.setBusinessId(task.getId());
                messageCreateRequest.setBusinessType(BusinessTypeEnum.TASK.toString());
                messageCreateRequest.setReceiptId(taskUserPO.getUserId());
                messageCreateRequest.setMessageTitle("【"+task.getObjectName()+"】任务即将到期");
                String aheadTime = "";
                if(taskUserPO.getAheadTimeCount() >= 1440){
                    aheadTime = "1天";
                }else if(taskUserPO.getAheadTimeCount() >=120 ){
                    aheadTime = "2小时";
                }
                else if(taskUserPO.getAheadTimeCount() >=60 ){
                    aheadTime = "1小时";
                }else{
                    aheadTime =taskUserPO.getAheadTimeCount()+"分钟";
                }
                messageCreateRequest.setMessageContent("【"+task.getObjectName()+"】任务还有"+aheadTime+"到期!");
                messageCreateRequest.setMessageMobileUrl(url);
                messageCreateRequest.setMessageTime(new Date());
                messageCreateRequest.setSendTime(new Date());
                messageCreateRequest.setSenderId(10000L);
                messageCreateRequest.setSenderName("系统管理员");
                foundationService.createMessage(messageCreateRequest, passport);
            }
        }

        logger.warn("---------用户任务提醒时间调度器结束:");
        return ;

    }
}