From 5cb8fa26b237a328239de828c997f0d2e780d847 Mon Sep 17 00:00:00 2001 From: lxd <1004405501@qq.com> Date: Fri, 20 Jun 2025 16:47:13 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=A6=96=E9=A1=B5=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../alertmessage/AlertMessageController.java | 7 +++ .../alertmessage/vo/AlertStatisticsVO.java | 14 ++++++ .../admin/device/DeviceController.java | 14 +++++- .../admin/device/vo/AlertStatistics.java | 9 ++++ .../admin/device/vo/DeviceMapVO.java | 30 ++++++++++++ .../admin/device/vo/DeviceStatistics.java | 16 +++++++ .../admin/device/vo/MapDataItem.java | 13 +++++ .../admin/device/vo/ProvinceCoords.java | 10 ++++ .../admin/device/vo/ProvinceDeviceCount.java | 9 ++++ .../admin/device/vo/ScatterDataItem.java | 16 +++++++ .../admin/person/PersonController.java | 8 +++- .../admin/person/vo/MemberGrowthVO.java | 13 +++++ .../alertmessage/AlertMessageMapper.java | 10 ++++ .../system/dal/mysql/device/DeviceMapper.java | 33 +++++++++++++ .../system/dal/mysql/person/PersonMapper.java | 4 ++ .../alertmessage/AlertMessageService.java | 4 ++ .../alertmessage/AlertMessageServiceImpl.java | 14 ++++++ .../system/service/device/DeviceService.java | 11 ++++- .../service/device/DeviceServiceImpl.java | 48 ++++++++++++++++++- .../system/service/person/PersonService.java | 5 ++ .../service/person/PersonServiceImpl.java | 4 ++ .../resources/mapper/device/DeviceMapper.xml | 9 +++- .../resources/mapper/person/PersonMapper.xml | 37 +++++++++++++- 23 files changed, 331 insertions(+), 7 deletions(-) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/alertmessage/vo/AlertStatisticsVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/AlertStatistics.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/DeviceMapVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/DeviceStatistics.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/MapDataItem.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/ProvinceCoords.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/ProvinceDeviceCount.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/ScatterDataItem.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/person/vo/MemberGrowthVO.java diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/alertmessage/AlertMessageController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/alertmessage/AlertMessageController.java index 04bcbf787b..e4b9daa060 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/alertmessage/AlertMessageController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/alertmessage/AlertMessageController.java @@ -80,6 +80,13 @@ public class AlertMessageController { return success(BeanUtils.toBean(pageResult, AlertMessageRespVO.class)); } + @GetMapping("/statistics-summary") + @Operation(summary = "获取预警统计数据") + public CommonResult getAlertStatistics(@RequestParam Integer orgid) { + AlertStatisticsVO data = alertMessageService.getAlertStatistics(orgid); + return success(data); + } + @GetMapping("/statistics") @Operation(summary = "统计预警信息") public CommonResult getAlertMessageStatistics(@Valid AlertMessageStatisticsReqVO statisticsReqVO) { diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/alertmessage/vo/AlertStatisticsVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/alertmessage/vo/AlertStatisticsVO.java new file mode 100644 index 0000000000..29739838fd --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/alertmessage/vo/AlertStatisticsVO.java @@ -0,0 +1,14 @@ +package cn.iocoder.yudao.module.system.controller.admin.alertmessage.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class AlertStatisticsVO { + + @Schema(description = "预警总数", required = true, example = "8") + private Integer alertTotal; + + @Schema(description = "未处理预警数", required = true, example = "3") + private Integer alertUnhandled; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/DeviceController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/DeviceController.java index 82106cf11c..4244fdbef0 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/DeviceController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/DeviceController.java @@ -77,7 +77,12 @@ public class DeviceController { DeviceDO device = deviceService.getDeviceId(devicecode); return success(BeanUtils.toBean(device, DeviceRespVO.class)); } - + @GetMapping("/getDeviceidCount") + @Operation(summary = "统计设备数量和在线离线 首页") + public CommonResult getDeviceStatistics(@RequestParam Integer orgid) { + DeviceStatistics statistics = deviceService.getDeviceStatistics(orgid); + return success(statistics); + } @GetMapping("/page") @Operation(summary = "获得设备分页") public CommonResult> getDevicePage(@Valid DevicePageReqVO pageReqVO) { @@ -114,4 +119,11 @@ public class DeviceController { return success(BeanUtils.toBean(pageResult, DeviceRespVO.class)); } + @GetMapping("/map-data") + @Operation(summary = "获取设备分布地图数据") + public CommonResult getDeviceMapData(@RequestParam Integer orgid) { + DeviceMapVO data = deviceService.getDeviceMapData(orgid); + return success(data); + } + } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/AlertStatistics.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/AlertStatistics.java new file mode 100644 index 0000000000..7eda9a82c8 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/AlertStatistics.java @@ -0,0 +1,9 @@ +package cn.iocoder.yudao.module.system.controller.admin.device.vo; + +import lombok.Data; + +@Data +public class AlertStatistics { + private Integer total; + private Integer unhandled; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/DeviceMapVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/DeviceMapVO.java new file mode 100644 index 0000000000..6ae46a4718 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/DeviceMapVO.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.system.controller.admin.device.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Data +public class DeviceMapVO { + @Schema(description = "总设备数", required = true, example = "156") + private Integer totalCount; + + @Schema(description = "在线设备数", required = true, example = "142") + private Integer onlineCount; + + @Schema(description = "离线设备数", required = true, example = "14") + private Integer offlineCount; + + @Schema(description = "预警总数", required = true, example = "8") + private Integer alertTotal; + + @Schema(description = "未处理预警数", required = true, example = "3") + private Integer alertUnhandled; + + @Schema(description = "地图数据", required = true) + private List mapData; + + @Schema(description = "散点图数据", required = true) + private List scatterData; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/DeviceStatistics.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/DeviceStatistics.java new file mode 100644 index 0000000000..09eaf3d22b --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/DeviceStatistics.java @@ -0,0 +1,16 @@ +package cn.iocoder.yudao.module.system.controller.admin.device.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +@Data +public class DeviceStatistics { + @Schema(description = "设备总数", required = true, example = "8") + private Integer totalCount; + + @Schema(description = "在线设备数", required = true, example = "5") + private Integer onlineCount; + + @Schema(description = "离线设备数", required = true, example = "3") + private Integer offlineCount; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/MapDataItem.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/MapDataItem.java new file mode 100644 index 0000000000..0631e7e831 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/MapDataItem.java @@ -0,0 +1,13 @@ +package cn.iocoder.yudao.module.system.controller.admin.device.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class MapDataItem { + @Schema(description = "省份名称", required = true, example = "辽宁省") + private String name; + + @Schema(description = "设备数量", required = true, example = "45") + private Integer value; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/ProvinceCoords.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/ProvinceCoords.java new file mode 100644 index 0000000000..c339cdfab5 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/ProvinceCoords.java @@ -0,0 +1,10 @@ +package cn.iocoder.yudao.module.system.controller.admin.device.vo; + +import lombok.Data; + +@Data +public class ProvinceCoords { + private String provinceName; + private Double longitude; + private Double latitude; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/ProvinceDeviceCount.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/ProvinceDeviceCount.java new file mode 100644 index 0000000000..8f1beed7f2 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/ProvinceDeviceCount.java @@ -0,0 +1,9 @@ +package cn.iocoder.yudao.module.system.controller.admin.device.vo; + +import lombok.Data; + +@Data +public class ProvinceDeviceCount { + private String province; + private Integer count; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/ScatterDataItem.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/ScatterDataItem.java new file mode 100644 index 0000000000..c228d5cab4 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/device/vo/ScatterDataItem.java @@ -0,0 +1,16 @@ +package cn.iocoder.yudao.module.system.controller.admin.device.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class ScatterDataItem { + @Schema(description = "省份名称", required = true, example = "辽宁省") + private String name; + + @Schema(description = "坐标和数量 [经度, 纬度, 数量]", required = true, example = "[123.4315, 41.8057, 45]") + private double[] value; + + @Schema(description = "设备数量", required = true, example = "45") + private Integer count; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/person/PersonController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/person/PersonController.java index 082b17a4a5..a04b490598 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/person/PersonController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/person/PersonController.java @@ -72,12 +72,16 @@ public class PersonController { } @GetMapping("/get") @Operation(summary = "获得用户基本信息") - @Parameter(name = "id", description = "编号", required = true, example = "1024") public CommonResult getPerson(@RequestParam("id") Integer id) { PersonDO person = personService.getPerson(id); return success(BeanUtils.toBean(person, PersonRespVO.class)); } - + @GetMapping("/member-growth-data") + @Operation(summary = "首页统计会员增长趋势") + public CommonResult> getMemberGrowthData(@RequestParam Integer orgid) { + List growthData = personService.getMemberGrowthData(orgid); + return success(growthData); + } @GetMapping("/page") @Operation(summary = "获得用户基本信息分页") public CommonResult> getPersonPage(@Valid PersonPageReqVO pageReqVO) { diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/person/vo/MemberGrowthVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/person/vo/MemberGrowthVO.java new file mode 100644 index 0000000000..402e61aae5 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/person/vo/MemberGrowthVO.java @@ -0,0 +1,13 @@ +package cn.iocoder.yudao.module.system.controller.admin.person.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class MemberGrowthVO { + + @Schema(description = "日期") + private String date; + @Schema(description = "数量") + private Integer count; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/alertmessage/AlertMessageMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/alertmessage/AlertMessageMapper.java index c0333579d6..58749dcfa0 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/alertmessage/AlertMessageMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/alertmessage/AlertMessageMapper.java @@ -92,4 +92,14 @@ public interface AlertMessageMapper extends BaseMapperX { @Param("startTime") String startTime, @Param("endTime") String endTime); + + /** + * 获取预警统计数据 首页 + */ + @Select("SELECT " + + "COUNT(*) as alertTotal, " + + "SUM(CASE WHEN status = 0 THEN 1 ELSE 0 END) as alertUnhandled " + + "FROM tb_alert_message WHERE orgid = #{orgid}") + AlertStatisticsVO getAlertStatistics(@Param("orgid") Integer orgid); + } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/device/DeviceMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/device/DeviceMapper.java index b8fb54a18e..9be7cd733f 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/device/DeviceMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/device/DeviceMapper.java @@ -9,6 +9,8 @@ import cn.iocoder.yudao.module.system.dal.dataobject.device.DeviceDO; import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import org.apache.ibatis.annotations.Mapper; import cn.iocoder.yudao.module.system.controller.admin.device.vo.*; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; /** * 设备 Mapper @@ -54,5 +56,36 @@ public interface DeviceMapper extends BaseMapperX { wrapper.orderByDesc(DeviceDO::getId); return selectPage(reqVO, wrapper); } + /** + * 获取设备基础统计 + */ + @Select("SELECT " + + "COUNT(*) as totalCount, " + + "SUM(CASE WHEN devicestatus = 1 THEN 1 ELSE 0 END) as onlineCount, " + + "SUM(CASE WHEN devicestatus = 2 THEN 1 ELSE 0 END) as offlineCount " + + "FROM tb_device WHERE orgid = #{orgid}") + DeviceStatistics getDeviceStatistics(@Param("orgid") Integer orgid); + /** + * 获取省份设备数量统计 + */ + @Select("SELECT " + + "SUBSTRING_INDEX(location, '/', 1) as province, " + + "COUNT(*) as count " + + "FROM tb_device " + + "WHERE orgid = #{orgid} " + + "GROUP BY SUBSTRING_INDEX(location, '/', 1)") + List getProvinceDeviceCount(@Param("orgid") Integer orgid); + + /** + * 根据省份名称获取经纬度 + */ + @Select("SELECT province_name, longitude, latitude " + + "FROM province_coords " + + "WHERE province_name = #{provinceName}") + ProvinceCoords getByProvince(@Param("provinceName") String provinceName); + /* + * 首页查询设备数量统计 + * */ + DeviceStatistics getDevice_Statistics(@Param("orgid") Integer orgid); } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/person/PersonMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/person/PersonMapper.java index ddd2a4f685..32bbdc97de 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/person/PersonMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/person/PersonMapper.java @@ -48,5 +48,9 @@ public interface PersonMapper extends BaseMapperX { * 按天统计开通会员的人数 */ List> countVipByDay(@Param("startDate") String startDate, @Param("endDate") String endDate); + /* + * 首页统计 会员增长趋势 一周 + * */ + List getMemberGrowthData(@Param("orgid") Integer orgid); } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/alertmessage/AlertMessageService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/alertmessage/AlertMessageService.java index 53f4ff9192..ce573df8d4 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/alertmessage/AlertMessageService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/alertmessage/AlertMessageService.java @@ -33,6 +33,10 @@ public interface AlertMessageService { * 根据机构ID查询所有未读预警信息 * */ List getAlertMessageList(Integer deptid); + /* + * 预警信息统计 首页 + * */ + AlertStatisticsVO getAlertStatistics(Integer orgid); /** * 删除预警信息 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/alertmessage/AlertMessageServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/alertmessage/AlertMessageServiceImpl.java index 6bb1fb7ee9..1ae15e3ce3 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/alertmessage/AlertMessageServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/alertmessage/AlertMessageServiceImpl.java @@ -59,6 +59,20 @@ public class AlertMessageServiceImpl implements AlertMessageService { // 执行查询 return alertMessageMapper.selectList(queryWrapper); } + @Override + public AlertStatisticsVO getAlertStatistics(Integer orgid) { + // 直接调用Mapper,一次查询获取所有数据 + AlertStatisticsVO result = alertMessageMapper.getAlertStatistics(orgid); + + // 处理null值,确保返回的数据不为null + if (result == null) { + result = new AlertStatisticsVO(); + result.setAlertTotal(0); + result.setAlertUnhandled(0); + } + + return result; + } @Override public void deleteAlertMessage(Integer id) { diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/device/DeviceService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/device/DeviceService.java index c4c79a057f..dcd27f48fb 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/device/DeviceService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/device/DeviceService.java @@ -59,6 +59,11 @@ public interface DeviceService { * @return 设备分页 */ PageResult getDevicePage(DevicePageReqVO pageReqVO); + /* + * + * 首页 获取设备数量统计 + * */ + DeviceStatistics getDeviceStatistics(Integer orgid); /** * 根据设备ID更新设备状态 @@ -75,5 +80,9 @@ public interface DeviceService { * @return 设备分页 */ PageResult getDeviceNotBind(DevicePageReqVO pageReqVO); - + /* + * + * 首页查询设备地图分布接口 + * */ + DeviceMapVO getDeviceMapData(Integer orgid); } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/device/DeviceServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/device/DeviceServiceImpl.java index 28354c4bea..7c8337e511 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/device/DeviceServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/device/DeviceServiceImpl.java @@ -12,6 +12,9 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.system.dal.mysql.device.DeviceMapper; +import java.util.ArrayList; +import java.util.List; + import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; @@ -80,7 +83,10 @@ public class DeviceServiceImpl implements DeviceService { public PageResult getDevicePage(DevicePageReqVO pageReqVO) { return deviceMapper.selectPage(pageReqVO); } - + @Override + public DeviceStatistics getDeviceStatistics(Integer orgid) { + return deviceMapper.getDevice_Statistics(orgid); + } @Override public void updateDeviceStatus(Integer devicecode, Integer devicestatus) { // 校验设备是否存在 @@ -101,5 +107,45 @@ public class DeviceServiceImpl implements DeviceService { public PageResult getDeviceNotBind(DevicePageReqVO pageReqVO) { return deviceMapper.selectNotBindPage(pageReqVO); } + @Override + public DeviceMapVO getDeviceMapData(Integer orgid) { + DeviceMapVO result = new DeviceMapVO(); + + // 1. 获取设备基础统计 + DeviceStatistics stats = deviceMapper.getDeviceStatistics(orgid); + result.setTotalCount(stats.getTotalCount()); + result.setOnlineCount(stats.getOnlineCount()); + result.setOfflineCount(stats.getOfflineCount()); + + + + // 3. 获取省份分布数据 + List provinceData = deviceMapper.getProvinceDeviceCount(orgid); + List mapData = new ArrayList<>(); + List scatterData = new ArrayList<>(); + + for (ProvinceDeviceCount item : provinceData) { + // 地图数据 + MapDataItem mapItem = new MapDataItem(); + mapItem.setName(item.getProvince()); + mapItem.setValue(item.getCount()); + mapData.add(mapItem); + + // 散点图数据 + ProvinceCoords coords = deviceMapper.getByProvince(item.getProvince()); + if (coords != null) { + ScatterDataItem scatterItem = new ScatterDataItem(); + scatterItem.setName(item.getProvince()); + scatterItem.setValue(new double[]{coords.getLongitude(), coords.getLatitude(), item.getCount()}); + scatterItem.setCount(item.getCount()); + scatterData.add(scatterItem); + } + } + + result.setMapData(mapData); + result.setScatterData(scatterData); + + return result; + } } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/person/PersonService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/person/PersonService.java index 8088408c8d..1b5cc28f82 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/person/PersonService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/person/PersonService.java @@ -28,6 +28,11 @@ public interface PersonService { * @param updateReqVO 更新信息 */ void updatePerson(@Valid PersonSaveReqVO updateReqVO); + /* + * 首页统计会员增长趋势 一周 + * */ + List getMemberGrowthData(Integer orgid); + /* * 根据主键ID 更新家庭成员 信息 * */ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/person/PersonServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/person/PersonServiceImpl.java index 334cb36a60..53c39ac903 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/person/PersonServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/person/PersonServiceImpl.java @@ -48,6 +48,10 @@ public class PersonServiceImpl implements PersonService { personMapper.updateById(updateObj); } @Override + public List getMemberGrowthData(Integer orgid) { + return personMapper.getMemberGrowthData(orgid); + } + @Override public Integer updatefamilyinfo(PersonUpfamilyInfoVO updateReqVO) { Integer maxfamilyid = generateNextFamilyId(); diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/device/DeviceMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/device/DeviceMapper.xml index 8d57277074..ab0ca09abe 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/device/DeviceMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/device/DeviceMapper.xml @@ -8,5 +8,12 @@ 代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> - + \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/person/PersonMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/person/PersonMapper.xml index 101cb09ca1..f6478ac0b4 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/person/PersonMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/person/PersonMapper.xml @@ -20,5 +20,40 @@ GROUP BY DATE_FORMAT(vipStartTime, '%Y-%m-%d') ORDER BY date - + \ No newline at end of file