Selaa lähdekoodia

提交轨迹修改

chenxiaofei 1 viikko sitten
vanhempi
commit
ec50c40b9f

+ 2 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/TransPortApplication.java

@@ -6,6 +6,7 @@ import io.seata.spring.annotation.datasource.EnableAutoDataSourceProxy;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
 /**
@@ -18,6 +19,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 @SckwCloudApplication
 @MapperScan("com.sckw.transport.dao")
 @EnableScheduling
+@EnableAsync
 public class TransPortApplication {
     public static void main(String[] args) {
         SpringApplication.run(TransPortApplication.class, args);

+ 51 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/config/AsyncConfig.java

@@ -0,0 +1,51 @@
+package com.sckw.transport.config;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.AsyncConfigurer;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.ThreadPoolExecutor;
+
+/**
+ * 异步任务配置类
+ * @author cxf
+ */
+@Slf4j
+@Configuration
+public class AsyncConfig implements AsyncConfigurer {
+
+    /**
+     * 异步任务执行器
+     * 用于执行生成轨迹等耗时任务
+     */
+    @Bean(name = "traceTaskExecutor")
+    public Executor traceTaskExecutor() {
+        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
+        // 核心线程数
+        executor.setCorePoolSize(5);
+        // 最大线程数
+        executor.setMaxPoolSize(10);
+        // 队列容量
+        executor.setQueueCapacity(100);
+        // 线程名前缀
+        executor.setThreadNamePrefix("trace-async-");
+        // 拒绝策略:调用者运行策略
+        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
+        // 等待所有任务结束后再关闭线程池
+        executor.setWaitForTasksToCompleteOnShutdown(true);
+        // 等待时间
+        executor.setAwaitTerminationSeconds(60);
+        executor.initialize();
+        log.info("异步任务线程池初始化完成,核心线程数:{},最大线程数:{}", executor.getCorePoolSize(), executor.getMaxPoolSize());
+        return executor;
+    }
+
+    @Override
+    public Executor getAsyncExecutor() {
+        return traceTaskExecutor();
+    }
+}
+

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtVehicleExceptionRepository.java

@@ -121,7 +121,7 @@ public class KwtVehicleExceptionRepository extends ServiceImpl<KwtVehicleExcepti
                 ));
     }
 
-    public List<KwtVehicleException> queryByEnt(List<Long> waybillOrderIds, Date startDate,Date endDate) {
+    public List<KwtVehicleException> queryByEnt(Set<Long> waybillOrderIds, Date startDate,Date endDate) {
         return list(Wrappers.<KwtVehicleException>lambdaQuery()
                 .eq(KwtVehicleException::getDelFlag, 0)
                 .in(KwtVehicleException::getWOrderId, waybillOrderIds)

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwfTaskService.java

@@ -140,7 +140,7 @@ public class KwfTaskService {
         }
         List<Long> waybillOrderIds = waybillOrder.stream().map(KwtWaybillOrder::getId).collect(Collectors.toList());
         //查询车辆异常车辆数
-        List<KwtVehicleException> vehicleExceptions = kwtVehicleExceptionRepository.queryByEnt(waybillOrderIds,startDate,endDate);
+        List<KwtVehicleException> vehicleExceptions = kwtVehicleExceptionRepository.queryByEnt(wayOrderIds,startDate,endDate);
         Map<Long, List<KwtVehicleException>> vehicleExceptionMap = Optional.ofNullable(vehicleExceptions)
                 .orElse(List.of())
                 .stream()

+ 19 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/kwfTruckTraceService.java

@@ -66,6 +66,7 @@ import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.jetbrains.annotations.NotNull;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.math.RoundingMode;
@@ -1502,11 +1503,27 @@ public class kwfTruckTraceService {
 
 
     /**
-     * 生成车辆轨迹数据
+     * 生成车辆轨迹数据(异步执行)
      * @param req 生成轨迹请求参数
      */
-    @Transactional(rollbackFor = Exception.class)
+    @Async("traceTaskExecutor")
     public void generateTrace(GenerateTraceReq req) {
+        log.info("开始异步生成车辆轨迹,运单号:{}", req.getWayOrderNo());
+        try {
+            generateTraceInternal(req);
+            log.info("异步生成车辆轨迹完成,运单号:{}", req.getWayOrderNo());
+        } catch (Exception e) {
+            log.error("异步生成车辆轨迹失败,运单号:{},错误信息:{}", req.getWayOrderNo(), e.getMessage(), e);
+            // 异步方法中的异常需要记录,但不抛出(避免影响调用方)
+        }
+    }
+
+    /**
+     * 生成车辆轨迹数据(内部方法,包含事务)
+     * @param req 生成轨迹请求参数
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void generateTraceInternal(GenerateTraceReq req) {
         log.info("生成车辆轨迹参数:{}", JSON.toJSONString(req));
         LocalDate date = LocalDate.parse(req.getDate(), DateTimeFormatter.ofPattern("yyyy-MM-dd"));
         LocalDateTime startDateTime = date.atStartOfDay();