diff --git a/src/main/java/com/hxtec/polaris/PolarisApplication.java b/src/main/java/com/hxtec/polaris/PolarisApplication.java index e1b03045994956689d98ba054a6131c0d5e8b474..545b088985d244f9d5aac62bf4fc705daec21dad 100644 --- a/src/main/java/com/hxtec/polaris/PolarisApplication.java +++ b/src/main/java/com/hxtec/polaris/PolarisApplication.java @@ -4,6 +4,7 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCaching; import org.springframework.data.jpa.repository.config.EnableJpaAuditing; +import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; import springfox.documentation.swagger2.annotations.EnableSwagger2; import tk.mybatis.spring.annotation.MapperScan; @@ -14,6 +15,7 @@ import tk.mybatis.spring.annotation.MapperScan; @MapperScan(value = "com.hxtec.polaris.mapper") @EnableCaching @EnableJpaAuditing +@EnableScheduling public class PolarisApplication { public static void main(String[] args) { diff --git a/src/main/java/com/hxtec/polaris/commons/tasks/OrderCheckTask.java b/src/main/java/com/hxtec/polaris/commons/tasks/OrderCheckTask.java index d2110dbc6b0c572b6f723debb694ab258203fc78..8c7b3f1452ed9ddfe11b9ddaae1195e1bddeabc4 100644 --- a/src/main/java/com/hxtec/polaris/commons/tasks/OrderCheckTask.java +++ b/src/main/java/com/hxtec/polaris/commons/tasks/OrderCheckTask.java @@ -1,9 +1,15 @@ package com.hxtec.polaris.commons.tasks; +import com.hxtec.polaris.commons.exception.MyException; +import com.hxtec.polaris.mapper.ShopOrderMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Date; /** * @Describtion 订单相关的任务 @@ -12,14 +18,18 @@ import org.springframework.stereotype.Component; * @Version 1.0.0 **/ @Component +@Transactional public class OrderCheckTask { private static final Logger logger = LoggerFactory.getLogger(OrderCheckTask.class); + @Resource + private ShopOrderMapper shopOrderMapper; + /** * 订单自动完成 针对已确认收货的订单/待评价订单 每日0点执行 */ - @Scheduled(cron = "0 0 0 * * ? ") + @Scheduled(cron = "${mytask.day}") public void completeOrder(){ logger.info("订单自动完成start"); logger.info("订单自动完成end"); @@ -28,9 +38,31 @@ public class OrderCheckTask { /** * 订单自动确认已收货 */ - @Scheduled(cron = "0 0 0 * * ? ") + @Scheduled(cron = "${mytask.day}") public void confirmReceive(){ logger.info("订单自动确认收货start"); logger.info("订单自动确认收货end"); } + + /** + * 订单自动关闭 每小时检查一次 + */ + @Scheduled(cron = "${mytask.hour}") + public void autoCloseOrder(){ + logger.info("订单自动关闭任务开始"); + try{ + doAutoCloseOrder(); + }catch (Exception e){ + throw new MyException("自动关闭失败"); + } + logger.info("订单自动关闭任务结束"); + } + + /** + * 执行订单自动关闭 + */ + private void doAutoCloseOrder() { + int affectrows = shopOrderMapper.doAutoCloseOrder(new Date()); + logger.info("本次自动关闭订单数:"+affectrows+"条"); + } } diff --git a/src/main/java/com/hxtec/polaris/config/SchedulingConfiguration.java b/src/main/java/com/hxtec/polaris/config/SchedulingConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..d19270baddbe196fa9bca8d85798cdf8bb022795 --- /dev/null +++ b/src/main/java/com/hxtec/polaris/config/SchedulingConfiguration.java @@ -0,0 +1,68 @@ +package com.hxtec.polaris.config; + +import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; +import org.springframework.aop.interceptor.SimpleAsyncUncaughtExceptionHandler; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.TaskScheduler; +import org.springframework.scheduling.annotation.AsyncConfigurer; +import org.springframework.scheduling.annotation.SchedulingConfigurer; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.scheduling.config.ScheduledTaskRegistrar; + +import java.util.concurrent.Executor; + +/** + * @Describtion 配置定时任务以多线程态运行 + * @Author yonyong + * @Date 2019/12/17 10:15 + * @Version 1.0.0 + **/ +@Configuration +public class SchedulingConfiguration implements SchedulingConfigurer, AsyncConfigurer { + /** + * 并行任务 + * @param scheduledTaskRegistrar + */ + @Override + public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) { + TaskScheduler taskScheduler = taskScheduler(); + scheduledTaskRegistrar.setTaskScheduler(taskScheduler); + } + + /** + * 多线程配置 + * @return + */ + @Bean(destroyMethod = "shutdown") + public ThreadPoolTaskScheduler taskScheduler() { + ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); + scheduler.setPoolSize(20); + // 设置线程名前缀 + scheduler.setThreadNamePrefix("task-"); + // 线程内容执行完后60秒停在 + scheduler.setAwaitTerminationSeconds(60); + // 等待所有线程执行完 + scheduler.setWaitForTasksToCompleteOnShutdown(true); + return scheduler; + } + + /** + * 异步任务 + * @return + */ + @Override + public Executor getAsyncExecutor() { + Executor executor = taskScheduler(); + return executor; + } + + /** + * 异常处理 + * @return + */ + @Override + public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { + return new SimpleAsyncUncaughtExceptionHandler(); + } +} diff --git a/src/main/java/com/hxtec/polaris/mapper/ShopOrderMapper.java b/src/main/java/com/hxtec/polaris/mapper/ShopOrderMapper.java index 0d915c56a1cc444a5e858f646fa7ad4a25876f3a..3f7665ea3c35fe9d672dc64b894b7fcad26d8b9d 100644 --- a/src/main/java/com/hxtec/polaris/mapper/ShopOrderMapper.java +++ b/src/main/java/com/hxtec/polaris/mapper/ShopOrderMapper.java @@ -81,4 +81,11 @@ public interface ShopOrderMapper extends MyMapper { * @param date 更新时间 */ void doRateOrder(@Param("oid") int id, @Param("uid")String uid, @Param("state")int state,@Param("updatetime") Date date); + + /** + * 执行订单自动关闭 将state改为已关闭5 + * @param date + * @return + */ + Integer doAutoCloseOrder(@Param("date") Date date); } \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 94191432bb4367831659856876c0a16668a40a97..f412cc43d91ea3fc2a5f268a639e99fe3d3fb5e4 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -79,5 +79,10 @@ pay: mchId: 1514858131 key: "00000000000000000000000000000000" +# schedule task interval +mytask: + day: 0 0 0 * * ? + hour: 0 0 * * * ? + sec: 0/5 * * * * ? diff --git a/src/main/resources/mapper/ShopOrderMapper.xml b/src/main/resources/mapper/ShopOrderMapper.xml index d70c738a289d501c5cbcb8ed16d0d7fdbe84a5a4..6ddd1a2412b89b1e246c3162d3fafb56d736cf5a 100644 --- a/src/main/resources/mapper/ShopOrderMapper.xml +++ b/src/main/resources/mapper/ShopOrderMapper.xml @@ -67,6 +67,12 @@ where id=#{oid} and member_id=#{uid} and (state = 3 || state = 4 || state = 5) and (isnull(is_delete) or is_delete!='Y') + + UPDATE shop_order + set state=5,update_time=#{date} + where state=0 and now() >SUBDATE(create_time,interval -1 hour) and (isnull(is_delete) or is_delete!='Y') + +