java MVC 定時器

(1)
try{
   Date actualBeginTime = liveWebcastTask.getActualBeginTime();
   Date endTime =  liveWebcastTask.getEndTime();
   int diffDate = DateUtils.dateTimeNums(actualBeginTime,endTime,"MINUTE");
   int repeatCount = diffDate/5;
   logger.info("添加直播監控定時任務,市級開始時間爲:"+actualBeginTime+",設置結束時間爲:"+endTime+",計算出來任務重複次數爲:"+repeatCount);
   addLiveMonitorTask(Long.parseLong(liveId),endTime,repeatCount);

}catch (Exception e){
   logger.error("添加直播監控定時任務錯誤,錯誤原因爲:"+e.getMessage());

}

(2)

/**
    * 異步添加直播監控定時任務
    * @return
    */
   public void addLiveMonitorTask(final Long liveId,final Date endTime,final  int repeatCount) {
     
      logger.info("當前活動線程數:"+ taskExecutor.getActiveCount());

      logger.info("線程處理隊列長度"+taskExecutor.getThreadPoolExecutor().getQueue().size());

      //用異步線程執行,確保快速返回
      taskExecutor.execute(new Runnable() {
         @Override
         public void run() {
            try{
               //添加定時任務
               QuartzJobDto quartz = new QuartzJobDto();
               quartz.setJobName("live-monitor-job-"+liveId);
               quartz.setJobGname("live-monitor-gJob-"+liveId);
               quartz.setTriggerName("live-monitor-trigger-"+liveId);
               quartz.setTriggerGname("live-monitor-trigger-gTrigger-"+liveId);
               quartz.setIntervalInSeconds(5*60);
               quartz.setScheduleType(QuartzJobDto.TYPE_SIMPLE);
               quartz.setRepeatCount(repeatCount);//重複多少次
               quartz.setJobClass("com.u1city.shop.service.LiveMonitorScheduleJobService");
               Map<String,Object> jobData = new HashMap<>();
               jobData.put("liveId",liveId);
               jobData.put("endTime",endTime);
               quartz.setJobData(jobData);
               quartzManagerService.addJob(quartz);
               logger.info("addLiveMonitorTask,執行直播監控定時任務線程,liveId:"+liveId);
            }catch(Exception e){
               logger.error("addLiveMonitorTask,執行直播監控定時任務線程報錯,liveId:"+liveId+",錯誤信息爲:"+e.getMessage());
               logger.error(e.getMessage(),e);
            }
         }
      });
   }

(3)

package com.u1city.shop.service;

import com.u1city.shop.commonUtils.DateUtils;
import com.u1city.shop.commonUtils.SpringContextUtil;
import com.u1city.shop.constant.TmallShopConstant;
import com.u1city.shop.domain.EasyChannelItem;
import com.u1city.shop.domain.StoreCoupon;
import com.u1city.shop.domain.StoreIntegralExchange;
import com.u1city.shop.dto.QuartzJobDto;
import com.u1city.shop.dto.StoreIntegralExchangeDto;
import org.quartz.Job;
import org.quartz.JobDataMap;
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 org.springframework.util.StringUtils;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;


import java.util.Date;
import java.util.Map;


/**
 * @category 積分兌換定時任務
 * @author chenlu
 * @data : 20190906
 */
@Component("liveMonitorScheduleJobService")
public class LiveMonitorScheduleJobService implements Job {

    public static Logger logger = LoggerFactory.getLogger(LiveMonitorScheduleJobService.class);


    private    LiveMonitorService liveMonitorService;


    private QuartzManagerService quartzManagerService;

    public LiveMonitorScheduleJobService()
    {
        liveMonitorService  = SpringContextUtil.getBeanByType(LiveMonitorService.class);

        quartzManagerService = SpringContextUtil.getBeanByType(QuartzManagerService.class);
    }

    /**
     * @category 查詢所有的兌換中的週期積分兌換任務
     * @author pxc
     * @date 20190906
     */
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        try {
            SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
            JobDataMap dataMap = context.getJobDetail().getJobDataMap();
            if(dataMap!=null && dataMap.get("jobData")!=null)
            {
               Map<String,Object> data = (Map<String,Object>)dataMap.get("jobData");
               Long liveId = (Long)data.get("liveId");
               if(!StringUtils.isEmpty(liveId))
               {
                   Date endTime = (Date)data.get("endTime");
                     if (endTime != null) {
                         Date nowDate = new Date();
                         int compareResult = nowDate.compareTo(endTime);
                         if (compareResult >= 0) {
                             logger.info("LiveMonitorScheduleJobService,移除直播監控定時任務,liveId:"+liveId);
                             QuartzJobDto quartz = new QuartzJobDto();
                             quartz.setJobName("live-monitor-job-"+liveId);
                             quartz.setJobGname("live-monitor-gJob-"+liveId);
                             quartz.setTriggerName("live-monitor-trigger-"+liveId);
                             quartz.setTriggerGname("live-monitor-trigger-gTrigger-"+liveId);
                             quartzManagerService.removeJob(quartz);
                         }
                     }
                     
                     logger.info("LiveMonitorScheduleJobService,插入直播監控數據……liveId:"+liveId);
                     liveMonitorService.insertLiveMonitor(liveId);
               }
               
               
            }
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
}

(4)

package com.u1city.shop.service;

import com.u1city.shop.commonUtils.DateUtils;
import com.u1city.shop.domain.LiveWebcastTask;
import com.u1city.shop.service.rongcloud.RongCloudService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@Service
public class LiveMonitorService {

    public static Logger logger = LoggerFactory.getLogger(LiveMonitorService.class);

    @Autowired
    LiveWebcastTaskService liveWebcastTaskService;

    @Autowired
    RongCloudService rongCloudService;


        public void insertLiveMonitor(Long liveId) throws Exception {

            logger.info("插入直播監控數據,insertLiveMonitor……"+liveId);

        LiveWebcastTask redisLiveTask = liveWebcastTaskService.getLiveWebcastTaskByLiveIdFromCache(liveId);


        if (redisLiveTask.getStatus().intValue() == 3) {//直播中,只有直播中才需要插入直播數據
            //聊天室實際在線人數,從融雲獲取
            Integer chatRoomTotal=null;
            try {
                chatRoomTotal = rongCloudService.queryChatroomInfo(redisLiveTask.getGroupId(), "1", "1");
            } catch (Exception e) {
                logger.error("LiveMonitorService獲取觀看人數失敗,liveId"+liveId);
            }
            Integer onlineUsersNum = chatRoomTotal == null ? 0 : chatRoomTotal;

            Map<String,Object> map = new HashMap<>();
            map.put("liveMonitorId", UUID.randomUUID().toString());
            map.put("liveId",liveId);
            map.put("subject",redisLiveTask.getSubject());
            map.put("virtualUsersNum",redisLiveTask.getVirtualUsersNum());
            map.put("acturalUsersNum",onlineUsersNum);
            map.put("createTime",new Date());
            liveWebcastTaskService.insertLiveMonitor(map);
        }

    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章