ソースを参照

对账单订单统计优化

24282 1 年間 前
コミット
39cf678c57

+ 28 - 3
sd-business/src/main/java/com/sd/business/service/statement/impl/StatementOfAccountServiceImpl.java

@@ -13,6 +13,7 @@ import com.fjhx.file.utils.ObsFileUtil;
 import com.ruoyi.common.core.domain.BaseIdPo;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.wrapper.IWrapper;
+import com.ruoyi.framework.config.ThreadPoolConfig;
 import com.sd.business.entity.department.po.Department;
 import com.sd.business.entity.order.po.OrderInfo;
 import com.sd.business.entity.order.po.OrderSku;
@@ -34,11 +35,16 @@ import com.sd.business.service.statement.StatementOfAccountService;
 import com.sd.business.util.CodeEnum;
 import com.sd.framework.util.Assert;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.security.core.context.SecurityContext;
+import org.springframework.security.core.context.SecurityContextHolder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ThreadPoolExecutor;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -75,6 +81,10 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
     @Autowired
     private StatementOfAccountExportService statementOfAccountExportService;
 
+    @Qualifier(ThreadPoolConfig.threadPoolTaskExecutor)
+    @Autowired
+    private ThreadPoolExecutor threadPoolExecutor;
+
     @Override
     public Page<StatementOfAccountVo> getPage(StatementOfAccountSelectDto dto) {
 
@@ -400,15 +410,30 @@ public class StatementOfAccountServiceImpl extends ServiceImpl<StatementOfAccoun
         List<Long> orderIdList = orderList.stream().map(BaseIdPo::getId).collect(Collectors.toList());
         List<OrderSku> orderSkuList = orderSkuService.list(q -> q.in(OrderSku::getOrderId, orderIdList));
 
-        // 获取订单sku
-        List<DocumentByOrderVo.SkuSpec> skuSpecList = getSkuSpecList(orderSkuList);
+        SecurityContext context = SecurityContextHolder.getContext();
+
+        CompletableFuture<List<DocumentByOrderVo.SkuSpec>> skuSpecListCompletableFuture = CompletableFuture.supplyAsync(
+                () -> {
+                    SecurityContextHolder.setContext(context);
+                    return getSkuSpecList(orderSkuList);
+                }, threadPoolExecutor);
+
+        CompletableFuture<List<DocumentByOrderVo.BomSpec>> bomSpecListCompletableFuture = CompletableFuture.supplyAsync(
+                () -> {
+                    SecurityContextHolder.setContext(context);
+                    return getBomSpecList(orderIdList, orderSkuList);
+                }, threadPoolExecutor);
 
         // 获取订单bom
-        List<DocumentByOrderVo.BomSpec> bomSpecList = getBomSpecList(orderIdList, orderSkuList);
+        List<DocumentByOrderVo.BomSpec> bomSpecList = bomSpecListCompletableFuture.join();
 
         // sku赋值bom
         Map<Long, List<DocumentByOrderVo.BomSpec>> bomSpecMap = bomSpecList.stream()
                 .collect(Collectors.groupingBy(DocumentByOrderVo.BomSpec::getOrderSkuId));
+
+        // 获取订单sku
+        List<DocumentByOrderVo.SkuSpec> skuSpecList = skuSpecListCompletableFuture.join();
+
         for (DocumentByOrderVo.SkuSpec skuSpec : skuSpecList) {
             skuSpec.setBomSpecList(bomSpecMap.getOrDefault(skuSpec.getOrderSkuId(), Collections.emptyList()));
         }