From 68787704901356f44e23863b1d656277e532181b Mon Sep 17 00:00:00 2001 From: "zangch@mesnac.com" Date: Thu, 27 Nov 2025 14:43:36 +0800 Subject: [PATCH] =?UTF-8?q?feat(statistics):=20=E6=96=B0=E5=A2=9E=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E7=BB=9F=E8=AE=A1=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 HomeStatsVO 作为首页统计数据传输对象,包含位置统计和位置列表 - 新增 IStatisticsService 接口及其实现类 StatisticsServiceImpl,提供首页统计数据获取方法 - 新增 StatisticsMapper 接口及对应 XML 实现位置统计和顶级位置列表的数据库查询 - 新增 StatisticsController 提供首页统计接口,支持前端获取统计数据 - 所有新增代码均为轻量级查询,避免跨分表查询带来的性能问题 --- .../rfid/controller/StatisticsController.java | 29 ++++++++++ .../dromara/rfid/domain/vo/HomeStatsVO.java | 54 +++++++++++++++++++ .../dromara/rfid/mapper/StatisticsMapper.java | 22 ++++++++ .../rfid/service/IStatisticsService.java | 14 +++++ .../service/impl/StatisticsServiceImpl.java | 26 +++++++++ .../mapper/rfid/StatisticsMapper.xml | 30 +++++++++++ 6 files changed, 175 insertions(+) create mode 100644 ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/controller/StatisticsController.java create mode 100644 ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/domain/vo/HomeStatsVO.java create mode 100644 ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/mapper/StatisticsMapper.java create mode 100644 ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/service/IStatisticsService.java create mode 100644 ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/service/impl/StatisticsServiceImpl.java create mode 100644 ruoyi-modules/hw-rfid/src/main/resources/mapper/rfid/StatisticsMapper.xml diff --git a/ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/controller/StatisticsController.java b/ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/controller/StatisticsController.java new file mode 100644 index 0000000..a026536 --- /dev/null +++ b/ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/controller/StatisticsController.java @@ -0,0 +1,29 @@ +package org.dromara.rfid.controller; + +import lombok.RequiredArgsConstructor; +import org.dromara.common.core.domain.R; +import org.dromara.common.web.core.BaseController; +import org.dromara.rfid.domain.vo.HomeStatsVO; +import org.dromara.rfid.service.IStatisticsService; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 首页统计接口 + */ +@RequiredArgsConstructor +@RestController +@RequestMapping("/rfid/statistics") +public class StatisticsController extends BaseController { + + private final IStatisticsService statisticsService; + + /** + * 获取首页统计数据 + */ + @GetMapping("/home") + public R getHomeStats() { + return R.ok(statisticsService.getHomeStats()); + } +} diff --git a/ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/domain/vo/HomeStatsVO.java b/ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/domain/vo/HomeStatsVO.java new file mode 100644 index 0000000..a13f26b --- /dev/null +++ b/ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/domain/vo/HomeStatsVO.java @@ -0,0 +1,54 @@ +package org.dromara.rfid.domain.vo; + +import lombok.Data; +import java.io.Serial; +import java.io.Serializable; +import java.util.List; + +/** + * 首页统计 VO(轻量级,不查询分表数据) + */ +@Data +public class HomeStatsVO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 位置统计 + */ + private LocationStats locationStats; + + /** + * 位置列表(仅展示顶级) + */ + private List locations; + + /** + * 位置统计 + */ + @Data + public static class LocationStats { + /** 位置总数 */ + private Long totalLocations; + /** 车间数量 */ + private Long workshopCount; + /** 工序数量 */ + private Long processCount; + /** 工位数量 */ + private Long stationCount; + } + + /** + * 位置项 + */ + @Data + public static class LocationItem { + private Long id; + private String locationCode; + private String locationAlias; + private String locationType; + /** 子位置数量 */ + private Long childCount; + } +} diff --git a/ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/mapper/StatisticsMapper.java b/ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/mapper/StatisticsMapper.java new file mode 100644 index 0000000..fcda65e --- /dev/null +++ b/ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/mapper/StatisticsMapper.java @@ -0,0 +1,22 @@ +package org.dromara.rfid.mapper; + +import org.dromara.rfid.domain.vo.HomeStatsVO; +import org.apache.ibatis.annotations.Mapper; +import java.util.List; + +/** + * 首页统计 Mapper 接口(轻量级查询,不涉及分表) + */ +@Mapper +public interface StatisticsMapper { + + /** + * 获取位置统计 + */ + HomeStatsVO.LocationStats selectLocationStats(); + + /** + * 获取顶级位置列表 + */ + List selectTopLocations(); +} diff --git a/ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/service/IStatisticsService.java b/ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/service/IStatisticsService.java new file mode 100644 index 0000000..4a708ed --- /dev/null +++ b/ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/service/IStatisticsService.java @@ -0,0 +1,14 @@ +package org.dromara.rfid.service; + +import org.dromara.rfid.domain.vo.HomeStatsVO; + +/** + * 首页统计 Service 接口 + */ +public interface IStatisticsService { + + /** + * 获取首页统计数据 + */ + HomeStatsVO getHomeStats(); +} diff --git a/ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/service/impl/StatisticsServiceImpl.java b/ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/service/impl/StatisticsServiceImpl.java new file mode 100644 index 0000000..2628670 --- /dev/null +++ b/ruoyi-modules/hw-rfid/src/main/java/org/dromara/rfid/service/impl/StatisticsServiceImpl.java @@ -0,0 +1,26 @@ +package org.dromara.rfid.service.impl; + +import lombok.RequiredArgsConstructor; +import org.dromara.rfid.domain.vo.HomeStatsVO; +import org.dromara.rfid.mapper.StatisticsMapper; +import org.dromara.rfid.service.IStatisticsService; +import org.springframework.stereotype.Service; + +/** + * 首页统计 Service 实现(轻量级,仅查询位置表) + */ +@RequiredArgsConstructor +@Service +public class StatisticsServiceImpl implements IStatisticsService { + + private final StatisticsMapper statisticsMapper; + + @Override + public HomeStatsVO getHomeStats() { + HomeStatsVO vo = new HomeStatsVO(); + // 仅查询 rfid_location 表,避免分表查询带来的性能问题 + vo.setLocationStats(statisticsMapper.selectLocationStats()); + vo.setLocations(statisticsMapper.selectTopLocations()); + return vo; + } +} diff --git a/ruoyi-modules/hw-rfid/src/main/resources/mapper/rfid/StatisticsMapper.xml b/ruoyi-modules/hw-rfid/src/main/resources/mapper/rfid/StatisticsMapper.xml new file mode 100644 index 0000000..f5669e4 --- /dev/null +++ b/ruoyi-modules/hw-rfid/src/main/resources/mapper/rfid/StatisticsMapper.xml @@ -0,0 +1,30 @@ + + + + + + + + + + +