@Scheduled 和Quartz

一、Quartz
1配置

<bean autowire="no"
          class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="startupDelay" value="0"/>
        <property name="triggers">
            <list>
                <!-- 定时任务列表 -->
                 <!-- 更新广告状态 -->
                <ref bean="advertisementStatus"/>
            </list>
        </property>
</bean>

<!-- 调度功能描述:广告状态更新开始 -->
    <bean id="advertisementStatus"
          class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
        <property name="jobDetail" ref="advertisementStatusJobTask"/>
        <!-- cron表达式 -->
        <property name="cronExpression" value="${advertisementStatus.batch.time}"></property>
        <!--<property name="cronExpression" value="0 */1 * * * ?"></property>-->
    </bean>
    <bean id="advertisementStatusJobTask"
          class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
        <property name="targetObject" ref="advertisementStatusTask"></property>
        <property name="targetMethod" value="executeTask"></property>
        <property name="concurrent" value="false"></property>
    </bean>
    <bean id="advertisementStatusTask" class="com.qujie.batch.quartz.QuartzTask">
        <property name="batchTaskName" value="更新广告管理状态"/>
        <!-- 定时任务列表 -->
        <property name="taskList">
            <list>
                <ref bean="advertisementStatusJob"/><!--更新广告管理状态-->
            </list>
        </property>
        <property name="executeMap">
            <map>
                <entry key="advertisementStatusJob" value="execute"/>
            </map>
        </property>
        <!--成功代码 -->
        <property name="codeSuccessVal" value="0000"/>
    </bean>
    <bean id="advertisementStatusJob" class="com.qujie.batch.job.AdvertisementStatusJob">
    </bean>
    <!-- 调度功能描述:广告状态更新结束 -->

2 代码

public class AdvertisementStatusJob {
    private final static Logger log = LoggerFactory.getLogger(AdvertisementStatusJob.class);

    @Autowired
    private AdvertisementStatusService advertisementStatusService;

    /**
     * 定时任务执行
     *
     * @return
     * @throws Exception
     */
    public BatchResp execute() {
        BatchResp resp = new BatchResp();
        log.info("--------- 广告管理更新状态任务-----开始--------");
        resp = advertisementStatusService.changStatus();
        log.info("--------- 广告管理更新状态任务-----结束--------");
        if (!StringUtils.equals("0000", resp.getReturnCode())) {
            log.error("{},广告管理更新状态失败",DateUtil.today());
        } else {
            log.info("{},广告管理更新状态成功!", DateUtil.today());
        }
        return resp;
    }

}

@Component
public class AdvertisementStatusService {
    private Logger log = LoggerFactory.getLogger(AdvertisementStatusService.class);
    @Autowired
    private AdvertisementStatusDao advertisementStatusDao;
    /**
     * 广告管理更新状态
     * 
     * @return
     */
    public BatchResp changStatus() {
        BatchResp resp = new BatchResp();
        try {
           //具体业务实现
           //.....
            resp.setReturnCode("0000");
            resp.setReturnMsg("广告管理更新状态定时任务执行成功");
        } catch (Exception e) {
            log.error("广告管理更新状态定时任务执行失败{}", e);
            resp.setReturnCode("0001");
            resp.setReturnMsg("广告管理更新状态定时任务执行失败");
        }
        return resp;
    }

}

Spring Task


@Configuration      //1.主要用于标记配置类,兼备Component的效果。
@EnableScheduling   // 2.开启定时任务
public class ScheduleTask {

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

    private String masterSecret = "c8fc9e276e1b50f691b3ff08";

    private String appKey = "b7f4a42f6611dbb5e47747e5";

    @Autowired
    private BMarketMarketingTaskService marketMarketingTaskService;
    @Autowired
    private Config config;
    @Autowired
    private ShopDAO shopDAO;
    @Autowired
    private RedisUtil redisUtil;

    /**
     * 定时扫描自动生成日常营销任务
     */
	@Scheduled(cron = "0 10 0 * * ? ")
    private void addMarketDaily() {
        boolean haskey = redisUtil.zAddNx("marketDailyFlag", "1", 0); 
        // 没有新增返回true,存在返回false
        if(haskey){
            logger.info("定时扫描自动生成日常营销任务开始执行==============");
            QueryWrapper<MarketMarketingTask> marketingTaskQueryWrapper = new QueryWrapper<>();
            marketingTaskQueryWrapper.eq("if_finish", 1);//已完成
            marketingTaskQueryWrapper.eq("if_complaint", 0);//未投诉
            marketingTaskQueryWrapper.eq("if_daily", 0);//未生成日常营销任务
            marketingTaskQueryWrapper.eq("ifTransfer", 0);//现在权益人
            List<MarketMarketingTask> marketingTaskList = marketMarketingTaskService.list(marketingTaskQueryWrapper);
            List<MarketMarketingTask> dailyTaskList = new ArrayList<>();
            List<MarketMarketingTask> comTaskList = new ArrayList<>();
            marketingTaskList.stream().forEach(task -> {
                MarketMarketingTask marketingTask = new MarketMarketingTask();
                marketingTask.setShopid(task.getShopid());
                //查询任务权益人是否是当前商户对应的权益人
                Map<String, Object> map = shopDAO.queryDevelopidaftById(task.getShopid());
                if (map!=null && map.get("developidaft")!=null){
                    marketingTask.setCustManagerId(Integer.valueOf(map.get("developidaft").toString()));
                }else {
                    marketingTask.setCustManagerId(task.getCustManagerId());
                }
                marketingTask.setMarketingTaskType(2);
                marketingTask.setTaskCreateDatetime(new Date());
                DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
                LocalDate ld = LocalDate.now().plusDays(1);
                String timeStr = ld.format(df);
                SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                try {
                    marketingTask.setEffectiveStartDatetime(f.parse(timeStr + " 00:00:01"));
                    ld = LocalDate.now().plusDays(3000);
                    timeStr = ld.format(df);
                    marketingTask.setEffectiveEndDatetime(f.parse(timeStr + " 23:59:59"));
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                marketingTask.setCreateBy("system");
                marketingTask.setIfTransfer(0);
                dailyTaskList.add(marketingTask);
                MarketMarketingTask comtask = new MarketMarketingTask();
                comtask.setMarketingTaskId(task.getMarketingTaskId());
                comtask.setIfDaily(1);
                comTaskList.add(comtask);
            });
            if (!dailyTaskList.isEmpty()) {
                marketMarketingTaskService.saveBatch(dailyTaskList);
            }
            if (!comTaskList.isEmpty()) {
                marketMarketingTaskService.updateBatchById(comTaskList);
            }
            logger.info("定时扫描自动生成日常营销任务执行结束==============");
            redisUtil.del("marketDailyFlag");
            logger.info("删除redis中key:marketDailyFlag");
        }
    }
    
    @Scheduled(cron = "0 48 17 * * ? ")
    private void expiringMartingTask() {
        boolean haskey = redisUtil.zAddNx("expiringMarketFlag", "1", 0); // 没有新增返回true,存在返回false
        if(haskey){
            //距离时效30小时时预警
            logger.info("定时扫描银行客户经理营销任务距离时效30小时时预警==============");
            QueryWrapper<MarketMarketingTask> marketingTaskQueryWrapper = new QueryWrapper<>();
            marketingTaskQueryWrapper.eq("if_finish", 0);
            //获取第二天晚上截止时间的数据进行
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String df = sdf.format(DateUtil.getDateByAddDays(1));
            try {
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
                Date newDate = format.parse(df+" 23:59:59");
                marketingTaskQueryWrapper.eq("effective_end_datetime", newDate);
            } catch (Exception e) {
                logger.error("日期转换异常",e);
            }
            List<MarketMarketingTask> marketingTaskList = marketMarketingTaskService.list(marketingTaskQueryWrapper);
            marketingTaskList.stream().forEach(task -> {
                Map<String, Object> shopInfo = shopDAO.queryShopInfoById(task.getShopid());
                // 极光推送app消息
                //JPushClient jpushClient = new JPushClient(masterSecret, appKey);
                ClientConfig conf = ClientConfig.getInstance();
                conf.put("device.host.name", config.getDEVICE_HOST_NAME());

                conf.put("push.host.name", config.getPUSH_HOST_NAME());

                conf.put("report.host.name", config.getREPORT_HOST_NAME());

                conf.put("schedule.host.name", config.getSCHEDULE_HOST_NAME());
                if (config.getAPNS_PRODUCTION() != null) {
                    conf.put("apns.production", Integer.valueOf(config.getAPNS_PRODUCTION()));
                }
                JPushClient jpushClient = new JPushClient(masterSecret, appKey, null, conf);
                List<String> tagList = new ArrayList<>();
                tagList.add(task.getCustManagerId().toString());
                String message = "您负责的【" + shopInfo.get("ShopName") + "】有营销任务需要在30小时内完成,请合理安排时间,及时完成任务";
                int result = JPushUtil.sendToAliasList(jpushClient, tagList, message, "type", "", message);
                logger.info("推送结果:" + result);
            });
            redisUtil.del("expiringMarketFlag");
            logger.info("删除redis中key:expiringMarketFlag");
        }
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@淡 定

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值