From 5cf796ac835e152b49ac5da019b7e5634373186a Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Mon, 12 Aug 2024 13:57:41 +0800 Subject: [PATCH 1/2] =?UTF-8?q?sql=20skuId=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ysk/cashier/repository/order/TbOrderDetailRepository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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..318e5807 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 @@ -113,7 +113,7 @@ public interface TbOrderDetailRepository extends JpaRepository :startTime \n" + "AND od.createTime < :endTime \n" + "AND (:productId is null or od.productId = :productId)\n" + - "AND (:productId is null or od.productSkuId = :productSkuId)") + "AND (:productSkuId 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(" + From 3d9e4ee511f671e975d45579dbb2b18968f63ad0 Mon Sep 17 00:00:00 2001 From: GYJ <1157756119@qq.com> Date: Thu, 15 Aug 2024 17:25:36 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=94=80=E9=87=8F?= =?UTF-8?q?=E5=92=8C=E5=8F=B0=E6=A1=8C=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shop/SummaryByDayController.java | 1 + .../controller/shop/SummaryController.java | 1 + .../order/TbOrderDetailRepository.java | 23 ++++ .../order/TbOrderInfoRepository.java | 1 + .../service/impl/SummaryServiceImpl.java | 120 +++++++++++------- .../ysk/cashier/vo/ShopTableSaleInfoVo.java | 5 +- .../cashier/vo/TbOrderSalesCountByTable.java | 64 ++++++++++ 7 files changed, 169 insertions(+), 46 deletions(-) create mode 100644 eladmin-system/src/main/java/cn/ysk/cashier/vo/TbOrderSalesCountByTable.java diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/SummaryByDayController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/SummaryByDayController.java index 1ec74bb4..efa23af2 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/SummaryByDayController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/SummaryByDayController.java @@ -1,5 +1,6 @@ package cn.ysk.cashier.controller.shop; +import cn.ysk.cashier.annotation.rest.AnonymousPostMapping; import cn.ysk.cashier.dto.ShopSummaryDto; import cn.ysk.cashier.service.SummaryService; import cn.ysk.cashier.vo.TbOrderPayCountVo; diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/SummaryController.java b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/SummaryController.java index 3c98a5eb..b260c37e 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/SummaryController.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/controller/shop/SummaryController.java @@ -67,6 +67,7 @@ public class SummaryController { } @PostMapping("/table/download") + @AnonymousPostMapping private void downloadShopSummaryTable(HttpServletResponse response, @RequestBody ShopTableSeleInfoDto exportRequest) throws IOException { summaryService.downloadTableSeleInfo(exportRequest, response); } 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 318e5807..b258dfe1 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 @@ -5,6 +5,7 @@ import cn.ysk.cashier.pojo.order.TbOrderDetail; import cn.ysk.cashier.vo.TbOrderPayCountVo; import cn.ysk.cashier.vo.TbOrderSaleVO; import cn.ysk.cashier.vo.TbOrderSalesCountByDayVo; +import cn.ysk.cashier.vo.TbOrderSalesCountByTable; import org.apache.ibatis.annotations.Param; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -165,4 +166,26 @@ public interface TbOrderDetailRepository extends JpaRepository :startTime AND info.createTime < :endTime " + + "AND (info.status = 'closed' OR info.status = 'refund') " + + "GROUP BY info.productId, info.productSkuId, orders.tableId " + + "ORDER BY salesNum DESC") + List queryTbOrderSalesCountByTable(@Param("shopId") Integer shopId, @Param("startTime") Date startTime, @Param("endTime") Date endTime); + } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderInfoRepository.java b/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderInfoRepository.java index aa889297..8988b82d 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderInfoRepository.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/repository/order/TbOrderInfoRepository.java @@ -189,6 +189,7 @@ public interface TbOrderInfoRepository extends JpaRepository Page selectSummaryByDay(ShopSummaryDto summaryDto, Integer page, Integer size) { Pageable pageable = PageRequest.of(page, size); - if(StringUtils.isBlank(summaryDto.getCateId())){ + if (StringUtils.isBlank(summaryDto.getCateId())) { summaryDto.setCateId(null); } if (summaryDto.getType() != null && summaryDto.getType() == 1) {//金额 @@ -400,7 +404,7 @@ public class SummaryServiceImpl implements SummaryService { summaryDto.setStartTime(DateUtil.toDate(DateUtil.fromTimeStamp(1704038400L))); summaryDto.setEndTime(new Date()); } - return (Page) detailRepository.queryTbOrderSalesCountByDay(Integer.valueOf(summaryDto.getShopId()),summaryDto.getCateId(),summaryDto.getProName(), summaryDto.getStartTime(), summaryDto.getEndTime(), pageable); + return (Page) detailRepository.queryTbOrderSalesCountByDay(Integer.valueOf(summaryDto.getShopId()), summaryDto.getCateId(), summaryDto.getProName(), summaryDto.getStartTime(), summaryDto.getEndTime(), pageable); } } @@ -408,12 +412,10 @@ public class SummaryServiceImpl implements SummaryService { @Override public void download(ShopSummaryDto summaryDto, HttpServletResponse response) throws IOException { List> list = new ArrayList<>(); -// ConcurrentLinkedQueue> list = new ConcurrentLinkedQueue(); - if(StringUtils.isBlank(summaryDto.getCateId())){ + if (StringUtils.isBlank(summaryDto.getCateId())) { summaryDto.setCateId(null); } - ArrayList mergeRowIndex = new ArrayList<>(); if (summaryDto.getType() != null && summaryDto.getType() == 1) {//金额 Long start = 1704038400000L; Long end = Instant.now().toEpochMilli(); @@ -438,38 +440,24 @@ public class SummaryServiceImpl implements SummaryService { summaryDto.setEndTime(new Date()); } List tbOrderSalesCountByDayVos = detailRepository - .queryTbOrderSalesCountByDay(Integer.valueOf(summaryDto.getShopId()),summaryDto.getCateId(),summaryDto.getProName(), summaryDto.getStartTime(), summaryDto.getEndTime()); + .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())); - for (TbOrderSaleVO tbOrderSaleVO : tbOrderSaleVOS) { - Map map = new LinkedHashMap<>(); - map.put("商品分类", all.getCateName()); - map.put("商品名称", all.getProductName()); - map.put("单 位", all.getUnitName()); - map.put("商品规格", StringUtils.isBlank(all.getProductSkuName()) ? "" : all.getProductSkuName()); - map.put("销 售 额", all.getSalesAmount()); - map.put("销 量", all.getSalesNum()); - map.put("单 价", all.getPrice()); - map.put("退 单 量", all.getRefNum()); - map.put("退 单 额", all.getRefAmount().compareTo(BigDecimal.ZERO)==0?all.getRefAmount():"-"+all.getRefAmount()); - map.put("总 量", all.getNum()-all.getRefNum()); - map.put("订单编号", tbOrderSaleVO.getOrderNo()); - map.put("售出数量", tbOrderSaleVO.getNum()); - list.add(map); - } - if (!tbOrderSaleVOS.isEmpty()) { - if (mergeRowIndex.isEmpty()) { - mergeRowIndex.add(tbOrderSaleVOS.size()); - }else { - mergeRowIndex.add(mergeRowIndex.get(mergeRowIndex.size() - 1) + tbOrderSaleVOS.size()); - } - } - + Map map = new LinkedHashMap<>(); + map.put("商品分类", all.getCateName()); + map.put("商品名称", all.getProductName()); + map.put("单 位", all.getUnitName()); + map.put("商品规格", StringUtils.isBlank(all.getProductSkuName()) ? "" : all.getProductSkuName()); + map.put("单 价", all.getPrice()); + map.put("销 售 额", all.getSalesAmount()); + map.put("退 单 额", all.getRefAmount().compareTo(BigDecimal.ZERO) == 0 ? all.getRefAmount() : "-" + all.getRefAmount()); + map.put("总 销 量", all.getNum() - all.getRefNum()); + map.put("实际销量", all.getSalesNum()); + map.put("退 单 量", all.getRefNum()); + list.add(map); }); } - FileUtil.downloadExcelAndMerge(list, 10, response, mergeRowIndex); + FileUtil.downloadExcel(list, response); } @Override @@ -485,7 +473,7 @@ public class SummaryServiceImpl implements SummaryService { endTime = new Date(); } TbOrderPayCountVo payCount = tbOrderInfoRepository.queryOrderPayCount(shopId, start, end); - TbOrderPayCountVo refCount = tbOrderInfoRepository.queryTbOrderRefund(shopId, null,start, end); + TbOrderPayCountVo refCount = tbOrderInfoRepository.queryTbOrderRefund(shopId, null, start, end); payCount.setPayAmount(new BigDecimal(payCount.getPayAmount().toString()).subtract(new BigDecimal(refCount.getPayAmount().toString()))); payCount.setIcon("el-icon-coin"); list.add(payCount); @@ -497,8 +485,8 @@ public class SummaryServiceImpl implements SummaryService { list.add(refCount); TbOrderSalesCountByDayVo numCount = detailRepository.queryTbOrderSalesCount(Integer.valueOf(shopId), startTime, endTime); - TbOrderPayCountVo salesNum =new TbOrderPayCountVo("el-icon-goods","销售量","0",numCount.getSalesNum()-numCount.getRefNum()); - TbOrderPayCountVo refNum =new TbOrderPayCountVo("el-icon-goods","退单量","0",numCount.getRefNum()); + TbOrderPayCountVo salesNum = new TbOrderPayCountVo("el-icon-goods", "销售量", "0", numCount.getSalesNum() - numCount.getRefNum()); + TbOrderPayCountVo refNum = new TbOrderPayCountVo("el-icon-goods", "退单量", "0", numCount.getRefNum()); list.add(salesNum); list.add(refNum); return list; @@ -563,20 +551,62 @@ public class SummaryServiceImpl implements SummaryService { List infoVos = selectSummaryTable(shopTableSeleInfoDto.getShopId(), shopTableSeleInfoDto.getStartTime(), shopTableSeleInfoDto.getEndTime()); + List countByTables = tbOrderDetailRepository.queryTbOrderSalesCountByTable(shopTableSeleInfoDto.getShopId(), shopTableSeleInfoDto.getStartTime(), shopTableSeleInfoDto.getEndTime()); + + Map> countByTableMap = countByTables.stream() + .collect(Collectors.groupingBy(TbOrderSalesCountByTable::getTableId)); + List> list = new ArrayList<>(); + ArrayList mergeRowIndex = new ArrayList<>(); for (ShopTableSaleInfoVo all : infoVos) { - Map map = new LinkedHashMap<>(); + List tables = countByTableMap.get(all.getTableCode()); + if (tables == null) { + continue; + } - map.put("开始时间", shopTableSeleInfoDto.getStartTime()); - map.put("结束时间", shopTableSeleInfoDto.getEndTime()); - map.put("区域名称", all.getAreaName()); - map.put("桌台名称", all.getTableName()); - map.put("订单数量", all.getOrderCount()); - map.put("销售额", all.getOrderAmount()); + for (TbOrderSalesCountByTable table : tables) { + Map map = new LinkedHashMap<>(); + map.put("开始时间", shopTableSeleInfoDto.getStartTime()); + map.put("结束时间", shopTableSeleInfoDto.getEndTime()); + map.put("区域名称", all.getAreaName()); + map.put("桌台名称", all.getTableName()); + map.put("商品分类", table.getCateName()); + map.put("商品名称", table.getProductName()); + map.put("单位", table.getUnitName()); + map.put("商品规格", table.getProductSkuName()); + map.put("销量", table.getSalesNum()); + map.put("销售额", table.getSalesAmount()); +// map.put("订单数量", all.getOrderCount()); +// map.put("销售额", all.getOrderAmount()); +// map.put("商品名称", table.getProductName()); +// map.put("销售数量", table.getSalesNum()); + list.add(map); + } - list.add(map); + + +// Map map = new LinkedHashMap<>(); +// +// map.put("开始时间", shopTableSeleInfoDto.getStartTime()); +// map.put("结束时间", shopTableSeleInfoDto.getEndTime()); +// map.put("区域名称", all.getAreaName()); +// map.put("桌台名称", all.getTableName()); +// map.put("订单数量", all.getOrderCount()); +// map.put("销售额", all.getOrderAmount()); +// +// list.add(map); + + + if (!tables.isEmpty()) { + if (mergeRowIndex.isEmpty()) { + mergeRowIndex.add(tables.size()); + }else { + mergeRowIndex.add(mergeRowIndex.get(mergeRowIndex.size() - 1) + tables.size()); + } + } } - FileUtil.downloadExcel(list, response); +// FileUtil.downloadExcel(list, response); + FileUtil.downloadExcelAndMerge(list, 4, response, mergeRowIndex); } } diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/vo/ShopTableSaleInfoVo.java b/eladmin-system/src/main/java/cn/ysk/cashier/vo/ShopTableSaleInfoVo.java index b36e8168..156c46c1 100644 --- a/eladmin-system/src/main/java/cn/ysk/cashier/vo/ShopTableSaleInfoVo.java +++ b/eladmin-system/src/main/java/cn/ysk/cashier/vo/ShopTableSaleInfoVo.java @@ -13,6 +13,8 @@ public class ShopTableSaleInfoVo { private Object tableId; + private String tableCode; + private Object tableName; private Object areaId; @@ -24,11 +26,12 @@ public class ShopTableSaleInfoVo { private Object orderAmount; - public ShopTableSaleInfoVo(Integer id, Object shopId, Object tableId, Object tableName, + public ShopTableSaleInfoVo(Integer id, Object shopId, Object tableId, String tableCode, Object tableName, Object areaId, Object areaName, Object orderCount, Object orderAmount) { this.id = id; this.shopId = shopId; this.tableId = tableId; + this.tableCode = tableCode; this.tableName = tableName; this.areaId = areaId; this.areaName = areaName; diff --git a/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbOrderSalesCountByTable.java b/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbOrderSalesCountByTable.java new file mode 100644 index 00000000..c8875f73 --- /dev/null +++ b/eladmin-system/src/main/java/cn/ysk/cashier/vo/TbOrderSalesCountByTable.java @@ -0,0 +1,64 @@ +package cn.ysk.cashier.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author GYJ + */ +@Data +public class TbOrderSalesCountByTable { + private String productName; + private String productSkuName; + private String cateName; + private String unitName; + private BigDecimal price; + private Long salesNum; + private Long refNum; + private BigDecimal salesAmount; + private BigDecimal refAmount; + private Long num; + private Integer productId; + private Integer productSkuId; + private String tableId; + + public TbOrderSalesCountByTable(String productName, String productSkuName, String cateName,String unitName,BigDecimal price, + Long salesNum, Long refNum, Long num, BigDecimal salesAmount, BigDecimal refAmount) { + this.productName = productName; + this.productSkuName = productSkuName; + this.cateName = cateName; + this.unitName = unitName; + this.price = price; + this.salesNum = salesNum; + this.refNum = refNum; + this.salesAmount = salesAmount; + this.refAmount = refAmount; + this.num = num; + count(); + } + + public TbOrderSalesCountByTable(String productName, String productSkuName, String cateName,String unitName,BigDecimal price, + Long salesNum, Long refNum, Long num, BigDecimal salesAmount, BigDecimal refAmount, + Integer productId, Integer productSkuId, String tableId) { + this.productName = productName; + this.productSkuName = productSkuName; + this.cateName = cateName; + this.unitName = unitName; + this.price = price; + this.salesNum = salesNum; + this.refNum = refNum; + this.salesAmount = salesAmount; + this.refAmount = refAmount; + this.num = num; + this.productId = productId; + this.productSkuId = productSkuId; + this.tableId = tableId; + count(); + } + + public void count(){ + salesNum=salesNum-refNum; + salesAmount=salesAmount.subtract(refAmount); + } +}