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 @@ + + + + + + + + + + +