From e53037232fa7b5347385f1c186c1618fc6ffa30d Mon Sep 17 00:00:00 2001 From: SongZhang <2064194730@qq.com> Date: Tue, 13 Aug 2024 10:59:27 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=95=B0=E6=8D=AE=E6=8A=A5=E8=A1=A8=E5=AF=BC?= =?UTF-8?q?=E5=87=BAcpu=E6=8B=89=E9=AB=98=E9=97=AE=E9=A2=98=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/ysk/cashier/utils/FileUtil.java | 3 +- .../mybatis/mapper/TbOrderInfoMapper.java | 37 ++++++++++++++++ .../order/TbOrderDetailRepository.java | 13 ------ .../service/impl/SummaryServiceImpl.java | 42 +++++++++++++++---- .../java/cn/ysk/cashier/vo/TbOrderSaleVO.java | 1 + .../cashier/vo/TbOrderSalesCountByDayVo.java | 4 +- 6 files changed, 78 insertions(+), 22 deletions(-) create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbOrderInfoMapper.java diff --git a/eladmin-common/src/main/java/cn/ysk/cashier/utils/FileUtil.java b/eladmin-common/src/main/java/cn/ysk/cashier/utils/FileUtil.java index ae33d9f2..37564530 100644 --- a/eladmin-common/src/main/java/cn/ysk/cashier/utils/FileUtil.java +++ b/eladmin-common/src/main/java/cn/ysk/cashier/utils/FileUtil.java @@ -41,6 +41,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentLinkedQueue; /** * File工具类,扩展 hutool 工具包 @@ -270,7 +271,7 @@ public class FileUtil extends cn.hutool.core.io.FileUtil { } } - public static void downloadExcelAndMerge(List> list, int colSize, HttpServletResponse response, ArrayList mergeRowIndex) throws IOException { + public static void downloadExcelAndMerge(ConcurrentLinkedQueue> list, int colSize, HttpServletResponse response, List mergeRowIndex) throws IOException { String tempPath = SYS_TEM_DIR + IdUtil.fastSimpleUUID() + ".xlsx"; File file = new File(tempPath); ExcelWriter writer = ExcelUtil.getWriter(file); diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbOrderInfoMapper.java b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbOrderInfoMapper.java new file mode 100644 index 00000000..88e9b588 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/mybatis/mapper/TbOrderInfoMapper.java @@ -0,0 +1,37 @@ +package cn.ysk.cashier.mybatis.mapper; + +import cn.ysk.cashier.mybatis.entity.TbMShopUser; +import cn.ysk.cashier.pojo.order.TbOrderInfo; +import cn.ysk.cashier.vo.TbOrderSaleVO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.List; + +public interface TbOrderInfoMapper extends BaseMapper { + @Select("") + List selectAllSaleInfo(@Param("startTime") Timestamp startTime, @Param("endTime") Timestamp endTime, @Param("productSkuIds") List productSkuIds, @Param("shopId") Integer shopId); +} diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderDetailRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderDetailRepository.java index dc5a9597..221b40cb 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderDetailRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderDetailRepository.java @@ -102,19 +102,6 @@ public interface TbOrderDetailRepository extends JpaRepository queryTbOrderSalesCountByDay(@Param("shopId") Integer shopId,@Param("cateId")String cateId,@Param("proName")String proName, @Param("startTime") Date startTime, @Param("endTime") Date endTime); - @Query(value = "SELECT " + - "new cn.ysk.cashier.vo.TbOrderSaleVO(oi.orderNo, od.num, od.price, od.status)\n" + - "FROM\n" + - "TbOrderInfo oi\n" + - "LEFT JOIN TbOrderDetail od ON oi.id = od.orderId \n" + - "WHERE\n" + - "od.shopId = :shopId \n" + - "AND ( od.status = 'closed' OR od.status = 'refund' ) \n" + - "AND od.createTime > :startTime \n" + - "AND od.createTime < :endTime \n" + - "AND (:productId is null or od.productId = :productId)\n" + - "AND (:productId is null or od.productSkuId = :productSkuId)") - List querySaleOrderInfo(@Param("startTime") Timestamp startTime, @Param("endTime") Timestamp endTime, @Param("productId") Integer productId, @Param("productSkuId") Integer productSkuId, @Param("shopId") Integer shopId); @Query("SELECT new cn.ysk.cashier.vo.TbOrderSalesCountByDayVo(" + "COALESCE(CAST(SUM(CASE WHEN orders.orderType!='return' THEN info.num ELSE 0 END) as long),0), " + diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/SummaryServiceImpl.java b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/SummaryServiceImpl.java index d38473e8..5586cdd5 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/SummaryServiceImpl.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/service/impl/SummaryServiceImpl.java @@ -4,6 +4,7 @@ import cn.ysk.cashier.dto.ShopSummaryDto; import cn.ysk.cashier.dto.shop.ShopTableSeleInfoDto; import cn.ysk.cashier.enums.PayTypeEnum; import cn.ysk.cashier.exception.BadRequestException; +import cn.ysk.cashier.mybatis.mapper.TbOrderInfoMapper; import cn.ysk.cashier.mybatis.service.TbShopUserFlowService; import cn.ysk.cashier.pojo.shop.TbShopTable; import cn.ysk.cashier.repository.ShopUserDutyDetailRepository; @@ -39,6 +40,7 @@ import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.CopyOnWriteArraySet; import java.util.function.Function; import java.util.stream.Collectors; @@ -68,6 +70,7 @@ public class SummaryServiceImpl implements SummaryService { @Resource TbShopAreaRepository tbShopAreaRepository; + private final TbOrderInfoMapper orderInfoMapper; @Override @@ -407,13 +410,12 @@ public class SummaryServiceImpl implements SummaryService { @Override public void download(ShopSummaryDto summaryDto, HttpServletResponse response) throws IOException { - List> list = new ArrayList<>(); -// ConcurrentLinkedQueue> list = new ConcurrentLinkedQueue(); +// List> list = new ArrayList<>(); + ConcurrentLinkedQueue> list = new ConcurrentLinkedQueue(); if(StringUtils.isBlank(summaryDto.getCateId())){ summaryDto.setCateId(null); } - - ArrayList mergeRowIndex = new ArrayList<>(); + List mergeRowIndex = Collections.synchronizedList(new ArrayList<>()); if (summaryDto.getType() != null && summaryDto.getType() == 1) {//金额 Long start = 1704038400000L; Long end = Instant.now().toEpochMilli(); @@ -439,9 +441,35 @@ public class SummaryServiceImpl implements SummaryService { } List tbOrderSalesCountByDayVos = detailRepository .queryTbOrderSalesCountByDay(Integer.valueOf(summaryDto.getShopId()),summaryDto.getCateId(),summaryDto.getProName(), summaryDto.getStartTime(), summaryDto.getEndTime()); - tbOrderSalesCountByDayVos.forEach(all -> { - List tbOrderSaleVOS = detailRepository.querySaleOrderInfo(new Timestamp(summaryDto.getStartTime().getTime()), - new Timestamp(summaryDto.getEndTime().getTime()), all.getProductId(), all.getProductSkuId(), Integer.valueOf(summaryDto.getShopId())); + + ArrayList skuIds = new ArrayList<>(); + for (TbOrderSalesCountByDayVo tbOrderSalesCountByDayVo : tbOrderSalesCountByDayVos) { + if (tbOrderSalesCountByDayVo.getProductSkuId() != null) { + skuIds.add(tbOrderSalesCountByDayVo.getProductSkuId()); + } + } + + HashMap> saleOrderMap = new HashMap<>(); + if (!skuIds.isEmpty()) { + List tbOrderSaleVOS = orderInfoMapper.selectAllSaleInfo(new Timestamp(summaryDto.getStartTime().getTime()), + new Timestamp(summaryDto.getEndTime().getTime()), skuIds, Integer.valueOf(summaryDto.getShopId())); + + for (TbOrderSaleVO tbOrderSaleVO : tbOrderSaleVOS) { + List orderSaleVOS = saleOrderMap.get(tbOrderSaleVO.getSkuId().toString()); + if (orderSaleVOS == null) { + orderSaleVOS = new ArrayList<>(); + } + orderSaleVOS.add(tbOrderSaleVO); + + saleOrderMap.put(tbOrderSaleVO.getSkuId().toString(), orderSaleVOS); + } + } + + tbOrderSalesCountByDayVos.parallelStream().forEach(all -> { + List tbOrderSaleVOS = saleOrderMap.get(all.getProductSkuId().toString()); + if (tbOrderSaleVOS == null) { + return; + } for (TbOrderSaleVO tbOrderSaleVO : tbOrderSaleVOS) { Map map = new LinkedHashMap<>(); map.put("商品分类", all.getCateName()); diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbOrderSaleVO.java b/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbOrderSaleVO.java index 667e3ebe..4b2ee0ea 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbOrderSaleVO.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbOrderSaleVO.java @@ -14,4 +14,5 @@ public class TbOrderSaleVO { private Integer num; private BigDecimal price; private String status; + private Integer skuId; } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbOrderSalesCountByDayVo.java b/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbOrderSalesCountByDayVo.java index c35b2dbe..de244a76 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbOrderSalesCountByDayVo.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbOrderSalesCountByDayVo.java @@ -134,7 +134,8 @@ public class TbOrderSalesCountByDayVo { count(); } - public TbOrderSalesCountByDayVo(String productName, String productSkuName, String cateName,String unitName,BigDecimal price, + public TbOrderSalesCountByDayVo(String productName, String productSkuName, + String cateName,String unitName,BigDecimal price, Long salesNum, Long refNum, Long num, BigDecimal salesAmount, BigDecimal refAmount, Integer productId, Integer productSkuId) { this.productName = productName; this.productSkuName = productSkuName; @@ -153,6 +154,7 @@ public class TbOrderSalesCountByDayVo { + public void count(){ salesNum=salesNum-refNum; salesAmount=salesAmount.subtract(refAmount);