From ca858ba62bbc29e3a5e921ce119271e7e2e488f4 Mon Sep 17 00:00:00 2001 From: dzq Date: Tue, 20 May 2025 11:00:08 +0800 Subject: [PATCH] =?UTF-8?q?feat(shop):=20=E6=B7=BB=E5=8A=A0=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E5=8A=9F=E8=83=BD=E4=BB=A5=E8=8E=B7=E5=8F=96=E5=95=86?= =?UTF-8?q?=E5=BA=97=E3=80=81=E5=95=86=E5=93=81=E3=80=81=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E7=AD=89=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增统计功能,用于获取商店数量、商品数量、订单数量、柜子数量、格口数量、已关联格口数量、未管理格口数量、网关数量等数据,并支持获取热门商品和今日最新订单商品信息。 --- .../admin/controller/shop/ShopController.java | 35 +++++++++++ .../cell/CabinetCellApplicationService.java | 8 +++ .../cabinet/cell/db/CabinetCellMapper.java | 5 ++ .../cabinet/cell/db/CabinetCellService.java | 5 ++ .../cell/db/CabinetCellServiceImpl.java | 10 +++ .../SmartCabinetApplicationService.java | 4 ++ .../smartCabinet/db/SmartCabinetMapper.java | 3 + .../smartCabinet/db/SmartCabinetService.java | 1 + .../db/SmartCabinetServiceImpl.java | 5 ++ .../agileboot/domain/mqtt/MqttService.java | 4 ++ .../shop/goods/GoodsApplicationService.java | 4 ++ .../domain/shop/goods/db/ShopGoodsMapper.java | 3 + .../shop/goods/db/ShopGoodsService.java | 2 + .../shop/goods/db/ShopGoodsServiceImpl.java | 5 ++ .../shop/order/OrderApplicationService.java | 18 ++++-- .../shop/order/db/ShopOrderGoodsMapper.java | 19 ++++++ .../shop/order/db/ShopOrderGoodsService.java | 6 ++ .../order/db/ShopOrderGoodsServiceImpl.java | 11 ++++ .../domain/shop/order/db/ShopOrderMapper.java | 3 + .../shop/order/db/ShopOrderService.java | 1 + .../shop/order/db/ShopOrderServiceImpl.java | 5 ++ .../order/db/TodayLatestOrderGoodsDTO.java | 63 +++++++++++++++++++ .../domain/shop/order/dto/TopGoodsDTO.java | 22 +++++++ .../shop/shop/ShopApplicationService.java | 4 ++ .../domain/shop/shop/db/ShopMapper.java | 3 + .../domain/shop/shop/db/ShopService.java | 2 + .../domain/shop/shop/db/ShopServiceImpl.java | 5 ++ .../domain/shop/shop/dto/StatsDTO.java | 42 +++++++++++++ 28 files changed, 294 insertions(+), 4 deletions(-) create mode 100644 agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/TodayLatestOrderGoodsDTO.java create mode 100644 agileboot-domain/src/main/java/com/agileboot/domain/shop/order/dto/TopGoodsDTO.java create mode 100644 agileboot-domain/src/main/java/com/agileboot/domain/shop/shop/dto/StatsDTO.java diff --git a/agileboot-admin/src/main/java/com/agileboot/admin/controller/shop/ShopController.java b/agileboot-admin/src/main/java/com/agileboot/admin/controller/shop/ShopController.java index 736e02d..09c3f5f 100644 --- a/agileboot-admin/src/main/java/com/agileboot/admin/controller/shop/ShopController.java +++ b/agileboot-admin/src/main/java/com/agileboot/admin/controller/shop/ShopController.java @@ -5,12 +5,19 @@ import com.agileboot.common.core.base.BaseController; import com.agileboot.common.core.dto.ResponseDTO; import com.agileboot.common.core.page.PageDTO; import com.agileboot.common.enums.common.BusinessTypeEnum; +import com.agileboot.domain.cabinet.cell.CabinetCellApplicationService; +import com.agileboot.domain.cabinet.smartCabinet.SmartCabinetApplicationService; import com.agileboot.domain.common.command.BulkOperationCommand; +import com.agileboot.domain.mqtt.MqttService; +import com.agileboot.domain.shop.goods.GoodsApplicationService; +import com.agileboot.domain.shop.order.OrderApplicationService; +import com.agileboot.domain.shop.order.db.TodayLatestOrderGoodsDTO; import com.agileboot.domain.shop.shop.ShopApplicationService; import com.agileboot.domain.shop.shop.command.AddShopCommand; import com.agileboot.domain.shop.shop.command.UpdateShopCommand; import com.agileboot.domain.shop.shop.db.ShopEntity; import com.agileboot.domain.shop.shop.dto.ShopDTO; +import com.agileboot.domain.shop.shop.dto.StatsDTO; import com.agileboot.domain.shop.shop.query.SearchShopQuery; import io.swagger.v3.oas.annotations.Operation; import java.util.List; @@ -33,6 +40,34 @@ import org.springframework.web.bind.annotation.RestController; public class ShopController extends BaseController { private final ShopApplicationService shopApplicationService; + private final GoodsApplicationService goodsApplicationService; + private final OrderApplicationService orderApplicationService; + private final SmartCabinetApplicationService smartCabinetApplicationService; + private final CabinetCellApplicationService cabinetCellApplicationService; + private final MqttService mqttService; + + @Operation(summary = "首页数据") + @GetMapping("/Stats") + public ResponseDTO stats() { + StatsDTO statsDTO = new StatsDTO(); + statsDTO.setShopCount(shopApplicationService.countAllRecord()); + statsDTO.setGoodsCount(goodsApplicationService.countAllRecord()); + statsDTO.setOrderCount(orderApplicationService.countAllRecord()); + statsDTO.setCabinetCount(smartCabinetApplicationService.countAllRecord()); + statsDTO.setCellCount(cabinetCellApplicationService.countAllRecord()); + statsDTO.setLinkedCellCount(cabinetCellApplicationService.countLinkedRecord()); + statsDTO.setUnmanagedCellCount(statsDTO.getCellCount() - statsDTO.getLinkedCellCount()); + statsDTO.setGatewayCount(mqttService.getGatewayCount()); + statsDTO.setTopGoods(orderApplicationService.selectTopGoodsByOccurrence()); + List todayLatestOrderGoodsDTOS = orderApplicationService.selectTodayLatestOrderGoods(); + todayLatestOrderGoodsDTOS.forEach(dto -> { + if (dto.getCreateTime() != null) { + dto.setCreateTimeStr(cn.hutool.core.date.DateUtil.format(dto.getCreateTime(), "HH:mm:ss")); + } + }); + statsDTO.setTodayLatestOrderGoods(todayLatestOrderGoodsDTOS); + return ResponseDTO.ok(statsDTO); + } @Operation(summary = "商店列表") @GetMapping diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/CabinetCellApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/CabinetCellApplicationService.java index abb1f21..34a9640 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/CabinetCellApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/CabinetCellApplicationService.java @@ -104,4 +104,12 @@ public class CabinetCellApplicationService { public void clearGoodsCells(Long cellId) { cabinetCellService.clearGoodsIdAndFreeCell(cellId); } + + public Long countAllRecord() { + return cabinetCellService.countAllRecord(); + } + + public Long countLinkedRecord() { + return cabinetCellService.countLinkedRecord(); + } } \ No newline at end of file diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellMapper.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellMapper.java index edf7ce0..c2e78f3 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellMapper.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellMapper.java @@ -61,4 +61,9 @@ public interface CabinetCellMapper extends BaseMapper { @Param(Constants.WRAPPER) Wrapper queryWrapper ); + @Select("SELECT COUNT(1) FROM cabinet_cell WHERE deleted = 0") + Long countAllRecord(); + + @Select("SELECT COUNT(1) FROM cabinet_cell WHERE deleted = 0 AND goods_id IS NOT NULL") + Long countLinkedRecord(); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellService.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellService.java index 07c1f7f..b15958e 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellService.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.util.List; @@ -30,4 +31,8 @@ public interface CabinetCellService extends IService { void clearGoodsIdAndFreeCell(Long cellId); Page getCellListWithOrders(AbstractPageQuery query); + + Long countAllRecord(); + + Long countLinkedRecord(); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellServiceImpl.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellServiceImpl.java index bf23f61..8a59715 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellServiceImpl.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/cell/db/CabinetCellServiceImpl.java @@ -46,4 +46,14 @@ public class CabinetCellServiceImpl extends ServiceImpl getCellListWithOrders(AbstractPageQuery query) { return baseMapper.getCellListWithOrders(query.toPage(), query.toQueryWrapper()); } + + @Override + public Long countAllRecord() { + return baseMapper.countAllRecord(); + } + + @Override + public Long countLinkedRecord() { + return baseMapper.countLinkedRecord(); + } } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/SmartCabinetApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/SmartCabinetApplicationService.java index 490a206..ba8667e 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/SmartCabinetApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/SmartCabinetApplicationService.java @@ -218,4 +218,8 @@ public class SmartCabinetApplicationService { } return result; } + + public Long countAllRecord() { + return smartCabinetService.countAllRecord(); + } } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/db/SmartCabinetMapper.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/db/SmartCabinetMapper.java index d7dda6a..8d1054c 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/db/SmartCabinetMapper.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/db/SmartCabinetMapper.java @@ -48,4 +48,7 @@ public interface SmartCabinetMapper extends BaseMapper { // 新增根据柜体ID查询的方法 @Select("SELECT * FROM smart_cabinet WHERE cabinet_id = #{cabinetId} LIMIT 1") SmartCabinetEntity selectByCabinetId(Long cabinetId); + + @Select("SELECT COUNT(1) FROM smart_cabinet WHERE deleted = 0") + Long countAllRecord(); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/db/SmartCabinetService.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/db/SmartCabinetService.java index e9a9df6..4f51cc2 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/db/SmartCabinetService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/db/SmartCabinetService.java @@ -23,4 +23,5 @@ public interface SmartCabinetService extends IService { SmartCabinetEntity getByCabinetId(Long cabinetId); + Long countAllRecord(); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/db/SmartCabinetServiceImpl.java b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/db/SmartCabinetServiceImpl.java index 1a1db1b..e9ec0ff 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/db/SmartCabinetServiceImpl.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/cabinet/smartCabinet/db/SmartCabinetServiceImpl.java @@ -40,4 +40,9 @@ public class SmartCabinetServiceImpl extends ServiceImpl { "LEFT JOIN smart_cabinet sc ON cc.cabinet_id = sc.cabinet_id AND sc.deleted = 0 " + "WHERE g.goods_id = #{goodsId} ") SearchGoodsDO getGoodsInfo(@Param("goodsId") Long goodsId); + + @Select("SELECT COUNT(1) FROM shop_goods WHERE deleted = 0") + Long countAllRecord(); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsService.java index 8087b17..fb55b90 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsService.java @@ -22,4 +22,6 @@ public interface ShopGoodsService extends IService { List getGoodsWithCabinetList(Long shopId); SearchGoodsDO getGoodsInfo(Long goodsId); + + Long countAllRecord(); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsServiceImpl.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsServiceImpl.java index b1496aa..7edad8d 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsServiceImpl.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/goods/db/ShopGoodsServiceImpl.java @@ -45,4 +45,9 @@ public class ShopGoodsServiceImpl extends ServiceImpl selectTopGoodsByOccurrence(){ + return orderGoodsService.selectTopGoodsByOccurrence(); + } + + public List selectTodayLatestOrderGoods(){ + return orderGoodsService.selectTodayLatestOrderGoods(); + } } \ No newline at end of file diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsMapper.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsMapper.java index aeed0b4..3c9e584 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsMapper.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsMapper.java @@ -1,5 +1,6 @@ package com.agileboot.domain.shop.order.db; +import com.agileboot.domain.shop.order.dto.TopGoodsDTO; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -22,4 +23,22 @@ public interface ShopOrderGoodsMapper extends BaseMapper { @Select("SELECT * FROM shop_order_goods WHERE order_id = #{orderId} AND deleted = 0") List selectByOrderId(@Param("orderId") Long orderId); + + @Select("SELECT sog.goods_id, sg.goods_name, sg.cover_img, COUNT(*) AS occurrence_count " + + "FROM shop_order_goods sog " + + "JOIN shop_goods sg ON sog.goods_id = sg.goods_id " + + "WHERE sog.deleted = 0 AND sg.deleted = 0 AND sog.goods_id != 6 " + + "GROUP BY sog.goods_id, sg.goods_name, sg.cover_img " + + "ORDER BY occurrence_count DESC " + + "LIMIT 10") + List selectTopGoodsByOccurrence(); + + @Select("SELECT sog.*, so.name AS buyer_name " + + "FROM shop_order_goods sog " + + "JOIN shop_order so ON sog.order_id = so.order_id " + + "WHERE sog.deleted = 0 AND so.deleted = 0 " + + "AND DATE(sog.create_time) = CURRENT_DATE " + + "ORDER BY sog.create_time DESC " + + "LIMIT 10") + List selectTodayLatestOrderGoods(); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsService.java index 78180f6..819c019 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsService.java @@ -1,6 +1,8 @@ package com.agileboot.domain.shop.order.db; +import com.agileboot.domain.shop.order.dto.TopGoodsDTO; import com.baomidou.mybatisplus.extension.service.IService; +import org.apache.ibatis.annotations.Select; import java.util.List; @@ -16,4 +18,8 @@ public interface ShopOrderGoodsService extends IService { ShopOrderGoodsEntity getByOrderIdAndGoodsId(Long orderId, Long goodsId); List selectByOrderId(Long orderId); + + List selectTopGoodsByOccurrence(); + + List selectTodayLatestOrderGoods(); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsServiceImpl.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsServiceImpl.java index ee37df4..746c9c1 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsServiceImpl.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderGoodsServiceImpl.java @@ -1,5 +1,6 @@ package com.agileboot.domain.shop.order.db; +import com.agileboot.domain.shop.order.dto.TopGoodsDTO; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @@ -26,4 +27,14 @@ public class ShopOrderGoodsServiceImpl extends ServiceImpl selectTopGoodsByOccurrence() { + return baseMapper.selectTopGoodsByOccurrence(); + } + + @Override + public List selectTodayLatestOrderGoods() { + return baseMapper.selectTodayLatestOrderGoods(); + } + } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderMapper.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderMapper.java index ffd5693..b921be3 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderMapper.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderMapper.java @@ -29,4 +29,7 @@ public interface ShopOrderMapper extends BaseMapper { Page page, @Param(Constants.WRAPPER) Wrapper queryWrapper ); + + @Select("SELECT COUNT(1) FROM shop_order WHERE deleted = 0") + Long countAllRecord(); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderService.java index 8e16ca3..4c97e6d 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderService.java @@ -16,4 +16,5 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface ShopOrderService extends IService { Page getOrderList(SearchShopOrderQuery query); + Long countAllRecord(); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderServiceImpl.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderServiceImpl.java index 7ca53f4..1422c95 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderServiceImpl.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/ShopOrderServiceImpl.java @@ -23,4 +23,9 @@ public class ShopOrderServiceImpl extends ServiceImpl getOrderList(SearchShopOrderQuery query) { return baseMapper.getOrderList(query.toPage(), query.toQueryWrapper()); } + + @Override + public Long countAllRecord() { + return baseMapper.countAllRecord(); + } } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/TodayLatestOrderGoodsDTO.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/TodayLatestOrderGoodsDTO.java new file mode 100644 index 0000000..9480d80 --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/db/TodayLatestOrderGoodsDTO.java @@ -0,0 +1,63 @@ +package com.agileboot.domain.shop.order.db; + +import com.agileboot.common.core.base.BaseEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; +import java.util.Date; + +/** + *

+ * 今日最新订单商品DTO + *

+ * + * @author valarchie + * @since 2025-03-10 + */ +@Getter +@Setter +@ApiModel(value = "TodayLatestOrderGoodsDTO对象", description = "今日最新订单商品DTO") +public class TodayLatestOrderGoodsDTO extends BaseEntity { + + @ApiModelProperty("订单商品唯一ID") + private Long orderGoodsId; + + @ApiModelProperty("关联订单ID") + private Long orderId; + + @ApiModelProperty("关联商品ID") + private Long goodsId; + + @ApiModelProperty("关联格口ID") + private Long cellId; + + @ApiModelProperty("购买数量") + private Integer quantity; + + @ApiModelProperty("购买时单价") + private BigDecimal price; + + @ApiModelProperty("商品总金额") + private BigDecimal totalAmount; + + @ApiModelProperty("商品名称") + private String goodsName; + + @ApiModelProperty("封面图URL") + private String coverImg; + + @ApiModelProperty("商品状态(1正常 2已退货 3已换货 4已完成 5审核中 6退货未通过)") + private Integer status; + + @ApiModelProperty("买家姓名") + private String buyerName; + + @ApiModelProperty("创建时间") + private Date createTime; + + @ApiModelProperty("创建时间") + private String createTimeStr; +} \ No newline at end of file diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/dto/TopGoodsDTO.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/dto/TopGoodsDTO.java new file mode 100644 index 0000000..e330439 --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/order/dto/TopGoodsDTO.java @@ -0,0 +1,22 @@ +package com.agileboot.domain.shop.order.dto; + +import com.agileboot.common.annotation.ExcelColumn; +import com.agileboot.common.annotation.ExcelSheet; +import lombok.Data; + +@ExcelSheet(name = "热门商品统计") +@Data +public class TopGoodsDTO { + + @ExcelColumn(name = "商品ID") + private Long goodsId; + + @ExcelColumn(name = "商品名称") + private String goodsName; + + @ExcelColumn(name = "封面图片") + private String coverImg; + + @ExcelColumn(name = "出现次数") + private Integer occurrenceCount; +} \ No newline at end of file diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/shop/ShopApplicationService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/shop/ShopApplicationService.java index 640db99..859a0e2 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/shop/ShopApplicationService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/shop/ShopApplicationService.java @@ -50,4 +50,8 @@ public class ShopApplicationService { model.deleteById(); } } + + public Long countAllRecord() { + return shopService.countAllRecord(); + } } \ No newline at end of file diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/shop/db/ShopMapper.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/shop/db/ShopMapper.java index df12d1c..eb7ab48 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/shop/db/ShopMapper.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/shop/db/ShopMapper.java @@ -40,4 +40,7 @@ public interface ShopMapper extends BaseMapper { @Select("SELECT * FROM shop WHERE shop_name = #{shopName} LIMIT 1") ShopEntity selectByShopName(String shopName); + + @Select("SELECT COUNT(1) FROM shop WHERE deleted = 0") + Long countAllRecord(); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/shop/db/ShopService.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/shop/db/ShopService.java index ca450e1..8ea9073 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/shop/db/ShopService.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/shop/db/ShopService.java @@ -25,4 +25,6 @@ public interface ShopService extends IService { ShopEntity selectByShopId(Long shopId); ShopEntity selectByShopName(String shopName); + + Long countAllRecord(); } diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/shop/db/ShopServiceImpl.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/shop/db/ShopServiceImpl.java index b1665f4..12c8a4c 100644 --- a/agileboot-domain/src/main/java/com/agileboot/domain/shop/shop/db/ShopServiceImpl.java +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/shop/db/ShopServiceImpl.java @@ -42,4 +42,9 @@ public class ShopServiceImpl extends ServiceImpl impleme public ShopEntity selectByShopName(String shopName) { return baseMapper.selectByShopName(shopName); } + + @Override + public Long countAllRecord() { + return baseMapper.countAllRecord(); + } } \ No newline at end of file diff --git a/agileboot-domain/src/main/java/com/agileboot/domain/shop/shop/dto/StatsDTO.java b/agileboot-domain/src/main/java/com/agileboot/domain/shop/shop/dto/StatsDTO.java new file mode 100644 index 0000000..72317e6 --- /dev/null +++ b/agileboot-domain/src/main/java/com/agileboot/domain/shop/shop/dto/StatsDTO.java @@ -0,0 +1,42 @@ +package com.agileboot.domain.shop.shop.dto; + +import com.agileboot.common.annotation.ExcelColumn; +import com.agileboot.common.annotation.ExcelSheet; +import com.agileboot.domain.shop.order.db.TodayLatestOrderGoodsDTO; +import com.agileboot.domain.shop.order.dto.TopGoodsDTO; +import lombok.Data; + +import java.util.List; + +@ExcelSheet(name = "统计数据") +@Data +public class StatsDTO { + + @ExcelColumn(name = "商店数量") + private Long shopCount; + + @ExcelColumn(name = "商品数量") + private Long goodsCount; + + @ExcelColumn(name = "订单数量") + private Long orderCount; + + @ExcelColumn(name = "总柜子数量") + private Long cabinetCount; + + @ExcelColumn(name = "总格口数量") + private Long cellCount; + + @ExcelColumn(name = "已关联格口数量") + private Long linkedCellCount; + + @ExcelColumn(name = "未管理格口数量") + private Long unmanagedCellCount; + + @ExcelColumn(name = "网关数量") + private Long gatewayCount; + + private List topGoods; + + private List todayLatestOrderGoods; +}