TaskWeeklyRemindingJob.java 5.09 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.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.enumeration.UserRoleEnum;
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 TaskWeeklyRemindingJob extends XNQuartzJob {

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

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

    }

    @Autowired
    private TaskUserMapper taskUserMapper;

    @Autowired
    private TaskMapper taskMapper;

    @Autowired
    private FoundationService foundationService;

    /**
     * 每周几定时检查提醒调度器(任务进度到时提醒/不推送给抄送人)
     * @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()*/){
            List<Long> receiptIds = new ArrayList<>();
            //查找执行者和抄送者
            TaskUserFindRequest taskUserFindRequest = new TaskUserFindRequest();
            taskUserFindRequest.setTaskId(task.getId());
            List<TaskUserPO> taskUserPOList = taskUserMapper.find(taskUserFindRequest,passport);
            if(CollectionUtils.isNotEmpty(taskUserPOList)){
                for(TaskUserPO taskUserPO: taskUserPOList){
                    //不需要推送给抄送人
                    if(taskUserPO.getUserRole() != null && !UserRoleEnum.CC_USER.equals(taskUserPO.getUserRole())){
                        receiptIds.add(taskUserPO.getUserId());
                    }
                }
            }
            if(CollectionUtils.isNotEmpty(receiptIds)){
                String url = "xntalk://rnapp.open/kpiTarget?page=TargetDetail&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("【"+task.getObjectName()+"】任务进度提醒");
                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 ;

    }
}