Browse Source

Merge branch 'dev' into pre-production

master
zhaoqiaobo 9 months ago
parent
commit
a74143231c
  1. 6
      blade-service/logpm-report/src/main/java/com/logpm/report/reader/DeliveryTrainReader.java
  2. 17
      blade-service/logpm-report/src/main/java/com/logpm/report/service/ReportDataService.java
  3. 115
      blade-service/logpm-report/src/main/java/com/logpm/report/service/impl/ReportDataServiceImpl.java
  4. 96
      blade-service/logpm-report/src/main/java/com/logpm/report/service/impl/ReportDeliverServiceImpl.java

6
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<T> findList(Page page, Wrapper query) {
return reportDeliverService.getDeliveryTrainPageReader(page, query);
return reportDataService.getReportDevilerVOList(page, query);
}
}

17
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<ReportDevilerVO> getReportDevilerVOList(IPage<ReportDevilerVO> page, Wrapper queryWrapper);
}

115
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<ReportDevilerVO> getReportDevilerVOList(IPage<ReportDevilerVO> page, Wrapper queryWrapper) {
// 查询数据
List<ReportDevilerVO> deliveryTrainPage = reportDeliverMapeer.getDeliveryTrainPage(page, queryWrapper);
// 异步组装统计数据
asyncBuildDeliveryTrainPage(deliveryTrainPage);
return deliveryTrainPage;
}
private void asyncBuildDeliveryTrainPage(List<ReportDevilerVO> deliveryTrainPage) {
List<Long> ids = deliveryTrainPage.stream().map(ReportDevilerVO::getId).collect(Collectors.toList());
// 异步查询扫描装车和异常扫描装车数据
if (CollUtil.isNotEmpty(ids)) {
// 每5000个提交一次查询
List<List<Long>> partitionedIds = CollUtil.split(ids, 5000);
List<CompletableFuture<List<DeliveryTrainLoadedScanDTO>>> futures = new ArrayList<>();
for (List<Long> idBatch : partitionedIds) {
futures.add(getTrainLoadedScanFuture(idBatch, deliveryTrainPage));
futures.add(getTrainLoadedScanInvnFuture(idBatch, deliveryTrainPage));
}
try {
CompletableFuture<Void> allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
allFutures.join();
} catch (Exception e) {
log.error("系统异常:{}", e);
}
}
}
private @NotNull CompletableFuture<List<DeliveryTrainLoadedScanDTO>> getTrainLoadedScanInvnFuture(List<Long> idBatch, List<ReportDevilerVO> deliveryTrainPage) {
CompletableFuture<List<DeliveryTrainLoadedScanDTO>> future = CompletableFuture.supplyAsync(() ->
reportDeliverMapeer.getDeliveryTrainLoadSacnInvnByIds(idBatch));
future.thenAccept(list -> {
if (CollUtil.isNotEmpty(list)) {
// list 封装为map deliveryId为key
Map<Long, DeliveryTrainLoadedScanDTO> loadedScanDTOMap = new HashMap<>();
list.forEach(dto -> loadedScanDTOMap.put(dto.getDeliveryId(), dto));
List<ReportDevilerVO> 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<List<DeliveryTrainLoadedScanDTO>> getTrainLoadedScanFuture(List<Long> idBatch, List<ReportDevilerVO> deliveryTrainPage) {
CompletableFuture<List<DeliveryTrainLoadedScanDTO>> future = CompletableFuture.supplyAsync(() ->
reportDeliverMapeer.getDeliveryTrainLoadSacnByIds(idBatch));
future.thenAccept(list -> {
if (CollUtil.isNotEmpty(list)) {
// list 封装为map deliveryId为key
Map<Long, DeliveryTrainLoadedScanDTO> loadedScanDTOMap = new HashMap<>();
list.forEach(dto -> loadedScanDTOMap.put(dto.getDeliveryId(), dto));
List<ReportDevilerVO> 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;
}
}

96
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<ReportDevilerVO> 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<ReportDevilerVO> deliveryTrainPage = getReportDevilerVOList(page, queryWrapper);
List<ReportDevilerVO> deliveryTrainPage = reportDataService.getReportDevilerVOList(page, queryWrapper);
return page.setRecords(deliveryTrainPage);
}
private @NotNull List<ReportDevilerVO> getReportDevilerVOList(IPage<ReportDevilerVO> page, Wrapper queryWrapper) {
// 查询数据
List<ReportDevilerVO> deliveryTrainPage = reportDeliverMapeer.getDeliveryTrainPage(page, queryWrapper);
// 异步组装统计数据
asyncBuildDeliveryTrainPage(deliveryTrainPage);
return deliveryTrainPage;
}
private void asyncBuildDeliveryTrainPage(List<ReportDevilerVO> deliveryTrainPage) {
List<Long> ids = deliveryTrainPage.stream().map(ReportDevilerVO::getId).collect(Collectors.toList());
// 异步查询扫描装车和异常扫描装车数据
if (CollUtil.isNotEmpty(ids)) {
// 每5000个提交一次查询
List<List<Long>> partitionedIds = CollUtil.split(ids, 5000);
List<CompletableFuture<List<DeliveryTrainLoadedScanDTO>>> futures = new ArrayList<>();
for (List<Long> idBatch : partitionedIds) {
futures.add(getTrainLoadedScanFuture(idBatch, deliveryTrainPage));
futures.add(getTrainLoadedScanInvnFuture(idBatch, deliveryTrainPage));
}
try {
CompletableFuture<Void> allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
allFutures.join();
} catch (Exception e) {
log.error("系统异常:{}", e);
}
}
}
private @NotNull CompletableFuture<List<DeliveryTrainLoadedScanDTO>> getTrainLoadedScanInvnFuture(List<Long> idBatch, List<ReportDevilerVO> deliveryTrainPage) {
CompletableFuture<List<DeliveryTrainLoadedScanDTO>> future = CompletableFuture.supplyAsync(() ->
reportDeliverMapeer.getDeliveryTrainLoadSacnInvnByIds(idBatch));
future.thenAccept(list -> {
if (CollUtil.isNotEmpty(list)) {
// list 封装为map deliveryId为key
Map<Long, DeliveryTrainLoadedScanDTO> loadedScanDTOMap = new HashMap<>();
list.forEach(dto -> loadedScanDTOMap.put(dto.getDeliveryId(), dto));
List<ReportDevilerVO> 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<List<DeliveryTrainLoadedScanDTO>> getTrainLoadedScanFuture(List<Long> idBatch, List<ReportDevilerVO> deliveryTrainPage) {
CompletableFuture<List<DeliveryTrainLoadedScanDTO>> future = CompletableFuture.supplyAsync(() ->
reportDeliverMapeer.getDeliveryTrainLoadSacnByIds(idBatch));
future.thenAccept(list -> {
if (CollUtil.isNotEmpty(list)) {
// list 封装为map deliveryId为key
Map<Long, DeliveryTrainLoadedScanDTO> loadedScanDTOMap = new HashMap<>();
list.forEach(dto -> loadedScanDTOMap.put(dto.getDeliveryId(), dto));
List<ReportDevilerVO> 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<ReportDevilerVO> queryWrapper) {
// 配送时间开始
QueryUtil.timeGe("task_time", query.getStartTaskTime(), queryWrapper);
@ -346,7 +258,7 @@ public class ReportDeliverServiceImpl implements ReportDeliverService {
@Override
public List<T> getDeliveryTrainPageReader(Page page, Wrapper query) {
return this.getReportDevilerVOList(page, query);
return reportDataService.getReportDevilerVOList(page, query);
}
}

Loading…
Cancel
Save