TaskWeeklyRemindingJob.java 4.58 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.service.FoundationService;
import com.xiniunet.framework.security.Passport;
import com.xiniunet.framework.util.SpringContext;
import com.xiniunet.quartz.base.XNQuartzJob;
import com.xiniunet.task.biz.TaskManager;
import com.xiniunet.task.biz.TaskManagerImpl;
import com.xiniunet.task.dal.TaskUserMapper;
import com.xiniunet.task.domain.Task;
import com.xiniunet.task.enumeration.BusinessTypeEnum;
import com.xiniunet.task.po.TaskUserPO;
import com.xiniunet.task.request.TaskGetRequest;
import com.xiniunet.task.request.TaskUserFindRequest;
import com.xiniunet.task.response.TaskGetResponse;
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 TaskWeeklyRemindingJob extends XNQuartzJob {

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

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

    }

    @Autowired
    private TaskUserMapper taskUserMapper;

    @Autowired
    private TaskManager taskManager;
    @Autowired
    private FoundationService foundationService;

    /**
     * 每周几定时检查提醒调度器
     * @param jobExecutionContext
     * @throws JobExecutionException
     */
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {

        taskUserMapper = SpringContext.getApplicationContext().getBean(TaskUserMapper.class);
        taskManager = SpringContext.getApplicationContext().getBean(TaskManagerImpl.class);
        foundationService = SpringContext.getApplicationContext().getBean(FoundationService.class);

        //获取传递信息task
        String data = jobExecutionContext.getMergedJobDataMap().getString("data");
        Task task = JSON.toJavaObject(JSON.parseObject(data), Task.class);
        Passport passport = new Passport();
        passport.setTenantId(task.getTenantId());
        passport.setUserId(task.getDoUserId());
        TaskGetRequest taskGetRequest = new TaskGetRequest();
        taskGetRequest.setId(task.getId());
        TaskGetResponse taskGetResponse = taskManager.get(taskGetRequest,passport);
        if(taskGetResponse.hasError()){
            logger.warn("--------查询任务出错:"+JSON.toJSONString(taskGetResponse));
            return;
        }

        List<Long> receiptIds = new ArrayList<>();
        //查找执行者和抄送者
        TaskUserFindRequest taskUserFindRequest = new TaskUserFindRequest();
        taskUserFindRequest.setTaskId(task.getId());
        List<TaskUserPO> taskPOList = taskUserMapper.find(taskUserFindRequest,passport);
        if(CollectionUtils.isNotEmpty(taskPOList)){
            for(TaskUserPO taskUserPO: taskPOList){
                //只有开启时间提醒的才会推送消息提醒
                if(taskUserPO.getIsTimeAlarm() != null && taskUserPO.getIsTimeAlarm()){
                    receiptIds.add(taskUserPO.getUserId());
                }
            }
        }
        if(CollectionUtils.isNotEmpty(receiptIds)){
            String url = "xntalk://rnapp.open/tasklistRN?tenantId=" + passport.getTenantId() + "&taskId=" + task.getId() + "&name=" + task.getOwnerUserName();
            MessageBatchCreateRequest messageBatchCreateRequest = new MessageBatchCreateRequest();
            messageBatchCreateRequest.setBusinessId(task.getId());
            messageBatchCreateRequest.setBusinessType(BusinessTypeEnum.TASK.toString());
            messageBatchCreateRequest.setReceiptIds(receiptIds);
            messageBatchCreateRequest.setMessageTitle("任务到时提醒");
            messageBatchCreateRequest.setMessageContent(task.getObjectName());
            messageBatchCreateRequest.setMessageMobileUrl(url);
            messageBatchCreateRequest.setMessageTime(new Date());
            messageBatchCreateRequest.setSendTime(new Date());
            messageBatchCreateRequest.setSenderId(10000L);
            messageBatchCreateRequest.setSenderName("系统管理员");
            foundationService.batchCreateMessage(messageBatchCreateRequest, passport);
        }
        logger.warn("---------任务过期收到消息通知结束:");
        return ;

    }
}