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 85270a3e..c4731859 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 @@ -54,15 +54,15 @@ public interface TbOrderInfoRepository extends JpaRepository'return' GROUP BY pay_type" ,nativeQuery = true) + " created_at BETWEEN :startTime AND :endTime AND status='closed'AND order_type <>'return' GROUP BY pay_type", nativeQuery = true) List countByShopId(@Param("shopId") String shopId, @Param("startTime") Long startTime, @Param("endTime") Long endTime); @Query("SELECT info FROM TbOrderInfo info WHERE info.source = :source AND info.shopId=:shopId") - List selTbOrdersBysource(@Param("source")Integer source,@Param("shopId") String shopId); + List selTbOrdersBysource(@Param("source") Integer source, @Param("shopId") String shopId); @Query("SELECT count(1) FROM TbOrderInfo WHERE source = :source AND shopId=:shopId") - int isRefund(@Param("source")Integer source,@Param("shopId") String shopId); + int isRefund(@Param("source") Integer source, @Param("shopId") String shopId); /** * 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 72eff9eb..0f9000e1 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 @@ -5,11 +5,14 @@ import cn.ysk.cashier.dto.shop.ShopTableSeleInfoDto; import cn.ysk.cashier.enums.PayTypeEnum; import cn.ysk.cashier.exception.BadRequestException; import cn.ysk.cashier.mybatis.service.TbShopUserFlowService; +import cn.ysk.cashier.pojo.shop.TbShopTable; import cn.ysk.cashier.repository.ShopUserDutyDetailRepository; import cn.ysk.cashier.repository.ShopUserDutyRepository; import cn.ysk.cashier.repository.TbTokenRepository; import cn.ysk.cashier.repository.order.TbOrderDetailRepository; import cn.ysk.cashier.repository.order.TbOrderInfoRepository; +import cn.ysk.cashier.repository.shop.TbShopAreaRepository; +import cn.ysk.cashier.repository.shop.TbShopTableRepository; import cn.ysk.cashier.repository.shop.TbShopUserRepository; import cn.ysk.cashier.service.SummaryService; import cn.ysk.cashier.utils.DateUtil; @@ -56,6 +59,12 @@ public class SummaryServiceImpl implements SummaryService { @Resource private TbShopUserFlowService tbShopUserFlowService; + @Resource + private TbShopTableRepository shopTableRepository; + + @Resource + TbShopAreaRepository tbShopAreaRepository; + @Override public SummaryVO selectSummary(Integer shopId) { @@ -475,13 +484,50 @@ public class SummaryServiceImpl implements SummaryService { @Override public List selectSummaryTable(Integer shopId, Date startTime, Date endTime) { + List shopTableCodes = tbOrderInfoRepository.queryShopTableIds(shopId); + long start = 1704038400000L; long end = Instant.now().toEpochMilli(); if (startTime != null && endTime != null) { start = startTime.getTime(); end = endTime.getTime(); } - return tbOrderInfoRepository.queryShopTableSaleInfo(shopId.toString(), start, end); + + List list = new ArrayList<>(); + for (String shopTableCode : shopTableCodes) { + ShopTableSaleInfoVo shopTableSaleInfoVo = tbOrderInfoRepository.queryShopTableSaleInfo(shopId.toString(), shopTableCode, start, end); + if (shopTableSaleInfoVo.getTableId() == null) { + TbShopTable table = shopTableRepository.findByQrcode(shopTableCode); + if (table != null) { + shopTableSaleInfoVo.setShopId(shopId); + shopTableSaleInfoVo.setTableId(table.getId()); + shopTableSaleInfoVo.setTableName(table.getName()); + shopTableSaleInfoVo.setAreaId(table.getAreaId()); + shopTableSaleInfoVo.setAreaName(tbShopAreaRepository.findById(table.getAreaId()).get().getName()); + } + } + list.add(shopTableSaleInfoVo); + } + + if (!list.isEmpty()) { + list.sort((a, b) -> { + // 先比较 orderAmount + BigDecimal aAmount = a.getOrderAmount() == null ? BigDecimal.ZERO : new BigDecimal(a.getOrderAmount().toString()); + BigDecimal bAmount = b.getOrderAmount() == null ? BigDecimal.ZERO : new BigDecimal(b.getOrderAmount().toString()); + int compareAmount = bAmount.compareTo(aAmount); + if (compareAmount != 0) { + return compareAmount; + } + + // 如果 orderAmount 相等,再比较 orderCount + Integer aCount = a.getOrderCount() == null ? 0 : Integer.parseInt(a.getOrderCount().toString()); + Integer bCount = b.getOrderCount() == null ? 0 : Integer.parseInt(b.getOrderCount().toString()); + + return bCount - aCount; + }); + } + + return list; } @Override 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 5fef58a8..b36e8168 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 @@ -32,7 +32,7 @@ public class ShopTableSaleInfoVo { this.tableName = tableName; this.areaId = areaId; this.areaName = areaName; - this.orderCount = orderCount; - this.orderAmount = orderAmount; + this.orderCount = orderCount == null ? 0 : orderCount; + this.orderAmount = orderAmount == null ? 0 : orderAmount; } }