diff --git a/blade-service/logpm-report/src/main/java/com/logpm/report/reader/DeliveryTrainReader.java b/blade-service/logpm-report/src/main/java/com/logpm/report/reader/DeliveryTrainReader.java index 19c422b18..e6317b664 100644 --- a/blade-service/logpm-report/src/main/java/com/logpm/report/reader/DeliveryTrainReader.java +++ b/blade-service/logpm-report/src/main/java/com/logpm/report/reader/DeliveryTrainReader.java @@ -4,7 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.logpm.report.mapper.ReportDeliverMapeer; import com.logpm.report.service.ExportReader; -import com.logpm.report.service.ReportDeliverService; +import com.logpm.report.service.ReportDataService; import org.apache.poi.ss.formula.functions.T; import org.springframework.stereotype.Component; @@ -22,7 +22,7 @@ public class DeliveryTrainReader implements ExportReader { private ReportDeliverMapeer reportDeliverMapeer; @Resource - private ReportDeliverService reportDeliverService; + private ReportDataService reportDataService; @Override public Long getCount(Wrapper query) { @@ -33,7 +33,7 @@ public class DeliveryTrainReader implements ExportReader { @Override public List findList(Page page, Wrapper query) { - return reportDeliverService.getDeliveryTrainPageReader(page, query); + return reportDataService.getReportDevilerVOList(page, query); } } diff --git a/blade-service/logpm-report/src/main/java/com/logpm/report/service/ReportDataService.java b/blade-service/logpm-report/src/main/java/com/logpm/report/service/ReportDataService.java new file mode 100644 index 000000000..43e319e08 --- /dev/null +++ b/blade-service/logpm-report/src/main/java/com/logpm/report/service/ReportDataService.java @@ -0,0 +1,17 @@ +package com.logpm.report.service; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.logpm.report.vo.ReportDevilerVO; + +import java.util.List; + +/** + * @Author: zqb + * @Date: 2024/6/21 + */ +public interface ReportDataService { + + List getReportDevilerVOList(IPage page, Wrapper queryWrapper); + +} diff --git a/blade-service/logpm-report/src/main/java/com/logpm/report/service/impl/ReportDataServiceImpl.java b/blade-service/logpm-report/src/main/java/com/logpm/report/service/impl/ReportDataServiceImpl.java new file mode 100644 index 000000000..159a8d0c2 --- /dev/null +++ b/blade-service/logpm-report/src/main/java/com/logpm/report/service/impl/ReportDataServiceImpl.java @@ -0,0 +1,115 @@ +package com.logpm.report.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.logpm.report.dto.DeliveryTrainLoadedScanDTO; +import com.logpm.report.mapper.ReportDeliverMapeer; +import com.logpm.report.service.ReportDataService; +import com.logpm.report.vo.ReportDevilerVO; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; + +/** + * @Author: zqb + * @Date: 2024/6/21 + */ +@Service +@AllArgsConstructor +@Slf4j +public class ReportDataServiceImpl implements ReportDataService { + + private final ReportDeliverMapeer reportDeliverMapeer; + + @Override + public List getReportDevilerVOList(IPage page, Wrapper queryWrapper) { + // 查询数据 + List deliveryTrainPage = reportDeliverMapeer.getDeliveryTrainPage(page, queryWrapper); + // 异步组装统计数据 + asyncBuildDeliveryTrainPage(deliveryTrainPage); + return deliveryTrainPage; + } + + private void asyncBuildDeliveryTrainPage(List deliveryTrainPage) { + List ids = deliveryTrainPage.stream().map(ReportDevilerVO::getId).collect(Collectors.toList()); + // 异步查询扫描装车和异常扫描装车数据 + if (CollUtil.isNotEmpty(ids)) { + // 每5000个提交一次查询 + List> partitionedIds = CollUtil.split(ids, 5000); + List>> futures = new ArrayList<>(); + for (List idBatch : partitionedIds) { + futures.add(getTrainLoadedScanFuture(idBatch, deliveryTrainPage)); + futures.add(getTrainLoadedScanInvnFuture(idBatch, deliveryTrainPage)); + } + try { + CompletableFuture allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])); + allFutures.join(); + } catch (Exception e) { + log.error("系统异常:{}", e); + } + } + } + + private @NotNull CompletableFuture> getTrainLoadedScanInvnFuture(List idBatch, List deliveryTrainPage) { + CompletableFuture> future = CompletableFuture.supplyAsync(() -> + reportDeliverMapeer.getDeliveryTrainLoadSacnInvnByIds(idBatch)); + future.thenAccept(list -> { + if (CollUtil.isNotEmpty(list)) { + // list 封装为map deliveryId为key + Map loadedScanDTOMap = new HashMap<>(); + list.forEach(dto -> loadedScanDTOMap.put(dto.getDeliveryId(), dto)); + List collect = deliveryTrainPage.stream().filter(reportDevilerVO -> idBatch.contains(reportDevilerVO.getId())).collect(Collectors.toList()); + for (ReportDevilerVO reportDevilerVO : collect) { + if (loadedScanDTOMap.containsKey(reportDevilerVO.getId())) { + DeliveryTrainLoadedScanDTO dto = loadedScanDTOMap.get(reportDevilerVO.getId()); + reportDevilerVO.setInvnLoadedNum(StrUtil.isNotEmpty(dto.getLoadedNum()) ? dto.getLoadedNum() : "0"); + reportDevilerVO.setInvnReNum(StrUtil.isNotEmpty(dto.getReNum()) ? dto.getReNum() : "0"); + } else { + reportDevilerVO.setInvnLoadedNum("0"); + reportDevilerVO.setInvnReNum("0"); + } + } + } + }); + return future; + } + + private @NotNull CompletableFuture> getTrainLoadedScanFuture(List idBatch, List deliveryTrainPage) { + CompletableFuture> future = CompletableFuture.supplyAsync(() -> + reportDeliverMapeer.getDeliveryTrainLoadSacnByIds(idBatch)); + future.thenAccept(list -> { + if (CollUtil.isNotEmpty(list)) { + // list 封装为map deliveryId为key + Map loadedScanDTOMap = new HashMap<>(); + list.forEach(dto -> loadedScanDTOMap.put(dto.getDeliveryId(), dto)); + List collect = deliveryTrainPage.stream().filter(reportDevilerVO -> idBatch.contains(reportDevilerVO.getId())).collect(Collectors.toList()); + for (ReportDevilerVO reportDevilerVO : collect) { + if (loadedScanDTOMap.containsKey(reportDevilerVO.getId())) { + DeliveryTrainLoadedScanDTO dto = loadedScanDTOMap.get(reportDevilerVO.getId()); + reportDevilerVO.setLoadedNum(StrUtil.isNotEmpty(dto.getLoadedNum()) ? dto.getLoadedNum() : "0"); + reportDevilerVO.setReNum(StrUtil.isNotEmpty(dto.getReNum()) ? dto.getReNum() : "0"); + reportDevilerVO.setExLoadedNum(StrUtil.isNotEmpty(dto.getExLoadedNum()) ? dto.getExLoadedNum() : "0"); + reportDevilerVO.setExReNum(StrUtil.isNotEmpty(dto.getExReNum()) ? dto.getExReNum() : "0"); + } else { + reportDevilerVO.setLoadedNum("0"); + reportDevilerVO.setReNum("0"); + reportDevilerVO.setExLoadedNum("0"); + reportDevilerVO.setExReNum("0"); + } + } + } + }); + return future; + } + +} diff --git a/blade-service/logpm-report/src/main/java/com/logpm/report/service/impl/ReportDeliverServiceImpl.java b/blade-service/logpm-report/src/main/java/com/logpm/report/service/impl/ReportDeliverServiceImpl.java index f3ff449b1..3a8cd3025 100644 --- a/blade-service/logpm-report/src/main/java/com/logpm/report/service/impl/ReportDeliverServiceImpl.java +++ b/blade-service/logpm-report/src/main/java/com/logpm/report/service/impl/ReportDeliverServiceImpl.java @@ -1,15 +1,12 @@ package com.logpm.report.service.impl; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.logpm.basicdata.feign.IBasicdataWarehouseClient; -import com.logpm.report.dto.DeliveryTrainLoadedScanDTO; import com.logpm.report.mapper.ReportDeliverMapeer; import com.logpm.report.query.DevilerDetailsQuery; import com.logpm.report.query.ReportCustomerQuery; @@ -19,6 +16,7 @@ import com.logpm.report.reader.DeliveryCustomerReader; import com.logpm.report.reader.DeliveryDetailReader; import com.logpm.report.reader.DeliveryTrainReader; import com.logpm.report.reader.StockOrderReader; +import com.logpm.report.service.ReportDataService; import com.logpm.report.service.ReportDeliverService; import com.logpm.report.util.QueryUtil; import com.logpm.report.util.ReportExcelUtil; @@ -29,7 +27,6 @@ import com.logpm.report.vo.ReportDevilerVO; import com.logpm.report.vo.StockOrderVO; import lombok.AllArgsConstructor; import org.apache.poi.ss.formula.functions.T; -import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springblade.core.log.exception.ServiceException; @@ -37,12 +34,7 @@ import org.springblade.core.mp.support.Condition; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; -import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.concurrent.CompletableFuture; -import java.util.stream.Collectors; /** * @author zhaoqiaobo @@ -59,6 +51,7 @@ public class ReportDeliverServiceImpl implements ReportDeliverService { private final DeliveryDetailReader deliveryDetailReader; private final StockOrderReader stockOrderReader; private final IBasicdataWarehouseClient warehouseClient; + private final ReportDataService reportDataService; @Override public IPage deliveryTrainPage(ReportDevilerVO vo, ReportDevilerQuery query) { @@ -73,91 +66,10 @@ public class ReportDeliverServiceImpl implements ReportDeliverService { // 2 用户页面没有选择仓库,但是切换了仓库,按切换的仓库查 // 3 用户没有选择仓库,也没有切换仓库,按用户当前所有仓查询 ReportUtil.buildReportWarehouseAuth(vo.getWarehouseName(), query.getWarehouseNameRange(), queryWrapper, warehouseClient); - List deliveryTrainPage = getReportDevilerVOList(page, queryWrapper); + List deliveryTrainPage = reportDataService.getReportDevilerVOList(page, queryWrapper); return page.setRecords(deliveryTrainPage); } - private @NotNull List getReportDevilerVOList(IPage page, Wrapper queryWrapper) { - // 查询数据 - List deliveryTrainPage = reportDeliverMapeer.getDeliveryTrainPage(page, queryWrapper); - // 异步组装统计数据 - asyncBuildDeliveryTrainPage(deliveryTrainPage); - return deliveryTrainPage; - } - - private void asyncBuildDeliveryTrainPage(List deliveryTrainPage) { - List ids = deliveryTrainPage.stream().map(ReportDevilerVO::getId).collect(Collectors.toList()); - // 异步查询扫描装车和异常扫描装车数据 - if (CollUtil.isNotEmpty(ids)) { - // 每5000个提交一次查询 - List> partitionedIds = CollUtil.split(ids, 5000); - List>> futures = new ArrayList<>(); - for (List idBatch : partitionedIds) { - futures.add(getTrainLoadedScanFuture(idBatch, deliveryTrainPage)); - futures.add(getTrainLoadedScanInvnFuture(idBatch, deliveryTrainPage)); - } - try { - CompletableFuture allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])); - allFutures.join(); - } catch (Exception e) { - log.error("系统异常:{}", e); - } - } - } - - - private @NotNull CompletableFuture> getTrainLoadedScanInvnFuture(List idBatch, List deliveryTrainPage) { - CompletableFuture> future = CompletableFuture.supplyAsync(() -> - reportDeliverMapeer.getDeliveryTrainLoadSacnInvnByIds(idBatch)); - future.thenAccept(list -> { - if (CollUtil.isNotEmpty(list)) { - // list 封装为map deliveryId为key - Map loadedScanDTOMap = new HashMap<>(); - list.forEach(dto -> loadedScanDTOMap.put(dto.getDeliveryId(), dto)); - List collect = deliveryTrainPage.stream().filter(reportDevilerVO -> idBatch.contains(reportDevilerVO.getId())).collect(Collectors.toList()); - for (ReportDevilerVO reportDevilerVO : collect) { - if (loadedScanDTOMap.containsKey(reportDevilerVO.getId())) { - DeliveryTrainLoadedScanDTO dto = loadedScanDTOMap.get(reportDevilerVO.getId()); - reportDevilerVO.setInvnLoadedNum(StrUtil.isNotEmpty(dto.getLoadedNum()) ? dto.getLoadedNum() : "0"); - reportDevilerVO.setInvnReNum(StrUtil.isNotEmpty(dto.getReNum()) ? dto.getReNum() : "0"); - } else { - reportDevilerVO.setInvnLoadedNum("0"); - reportDevilerVO.setInvnReNum("0"); - } - } - } - }); - return future; - } - - private @NotNull CompletableFuture> getTrainLoadedScanFuture(List idBatch, List deliveryTrainPage) { - CompletableFuture> future = CompletableFuture.supplyAsync(() -> - reportDeliverMapeer.getDeliveryTrainLoadSacnByIds(idBatch)); - future.thenAccept(list -> { - if (CollUtil.isNotEmpty(list)) { - // list 封装为map deliveryId为key - Map loadedScanDTOMap = new HashMap<>(); - list.forEach(dto -> loadedScanDTOMap.put(dto.getDeliveryId(), dto)); - List collect = deliveryTrainPage.stream().filter(reportDevilerVO -> idBatch.contains(reportDevilerVO.getId())).collect(Collectors.toList()); - for (ReportDevilerVO reportDevilerVO : collect) { - if (loadedScanDTOMap.containsKey(reportDevilerVO.getId())) { - DeliveryTrainLoadedScanDTO dto = loadedScanDTOMap.get(reportDevilerVO.getId()); - reportDevilerVO.setLoadedNum(StrUtil.isNotEmpty(dto.getLoadedNum()) ? dto.getLoadedNum() : "0"); - reportDevilerVO.setReNum(StrUtil.isNotEmpty(dto.getReNum()) ? dto.getReNum() : "0"); - reportDevilerVO.setExLoadedNum(StrUtil.isNotEmpty(dto.getExLoadedNum()) ? dto.getExLoadedNum() : "0"); - reportDevilerVO.setExReNum(StrUtil.isNotEmpty(dto.getExReNum()) ? dto.getExReNum() : "0"); - } else { - reportDevilerVO.setLoadedNum("0"); - reportDevilerVO.setReNum("0"); - reportDevilerVO.setExLoadedNum("0"); - reportDevilerVO.setExReNum("0"); - } - } - } - }); - return future; - } - private void trainCustomQuery(ReportDevilerQuery query, QueryWrapper queryWrapper) { // 配送时间开始 QueryUtil.timeGe("task_time", query.getStartTaskTime(), queryWrapper); @@ -346,7 +258,7 @@ public class ReportDeliverServiceImpl implements ReportDeliverService { @Override public List getDeliveryTrainPageReader(Page page, Wrapper query) { - return this.getReportDevilerVOList(page, query); + return reportDataService.getReportDevilerVOList(page, query); } }