From 84a85c87939f1f0f3e4788497c9c54c7531ecc05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BE=BE=E5=AF=8C=E6=96=8C?= Date: Tue, 14 Oct 2025 21:39:07 +0800 Subject: [PATCH] =?UTF-8?q?fix=20(farm):=20=E8=AE=BE=E5=A4=87=E4=B8=AD?= =?UTF-8?q?=E5=BF=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加腔型摄像机设备 --- .../vo/v2/DeviceInfoDetailV2RespVO.java | 2 + .../DigitalCockpitController.java | 7 +- .../vo/DeviceMonitorDataRespVO.java | 30 +------ .../dataobject/deviceinfo/DeviceInfoDO.java | 4 + .../module/farm/enums/CommonConstants.java | 5 ++ .../devicealarm/DeviceAlarmService.java | 2 + .../DeviceClassifyServiceImpl.java | 6 +- .../service/deviceinfo/DeviceInfoService.java | 3 + .../deviceinfo/DeviceInfoServiceImpl.java | 81 +++++++++++++++++++ 9 files changed, 106 insertions(+), 34 deletions(-) diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/deviceinfo/vo/v2/DeviceInfoDetailV2RespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/deviceinfo/vo/v2/DeviceInfoDetailV2RespVO.java index 93b9051e..8bc202a1 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/deviceinfo/vo/v2/DeviceInfoDetailV2RespVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/deviceinfo/vo/v2/DeviceInfoDetailV2RespVO.java @@ -49,6 +49,8 @@ public class DeviceInfoDetailV2RespVO { @Schema(description = "绑定状态:1: 绑定; 0: 未绑定") private Integer bindingState; private String bindingStateName; + @Schema(description = "设备地址 (监控摄像)") + private String deviceUrl; @Schema(description = "设备坐标") private String point; diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/digitalcockpit/DigitalCockpitController.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/digitalcockpit/DigitalCockpitController.java index af3be54c..9af2a9db 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/digitalcockpit/DigitalCockpitController.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/digitalcockpit/DigitalCockpitController.java @@ -179,11 +179,8 @@ public class DigitalCockpitController { @GetMapping("/device-info/monitor-data") @Operation(summary = "监测数据") - @Parameter(name = "baseId", description = "基地ID", required = true) - public CommonResult getMonitoringData(@RequestParam("baseId") String baseId) { - - - DeviceMonitorDataRespVO res = new DeviceMonitorDataRespVO(); + public CommonResult> getMonitoringData() { + List res = deviceInfoService.deviceList(); return success(res); } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/digitalcockpit/vo/DeviceMonitorDataRespVO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/digitalcockpit/vo/DeviceMonitorDataRespVO.java index cd1033ed..704ee26d 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/digitalcockpit/vo/DeviceMonitorDataRespVO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/controller/admin/digitalcockpit/vo/DeviceMonitorDataRespVO.java @@ -16,33 +16,8 @@ import java.util.List; @NoArgsConstructor public class DeviceMonitorDataRespVO { - private Soil soilInfo; - private Wf wfInfo; - private VideoMonitor videoMonitorInfo; - - @Data - @AllArgsConstructor - @NoArgsConstructor - public static class Soil { - private String deviceTypeName; - private List data; - } - - @Data - @AllArgsConstructor - @NoArgsConstructor - public static class Wf { - private String deviceTypeName; - private List data; - } - - @Data - @AllArgsConstructor - @NoArgsConstructor - public static class VideoMonitor { - private String deviceTypeName; - private List data; - } + private String deviceTypeName; + private List rows; @Data @AllArgsConstructor @@ -50,6 +25,7 @@ public class DeviceMonitorDataRespVO { public static class Row { private String name; private String status; + private String url; } } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/deviceinfo/DeviceInfoDO.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/deviceinfo/DeviceInfoDO.java index cf8e7216..ed9a8d71 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/deviceinfo/DeviceInfoDO.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/dal/dataobject/deviceinfo/DeviceInfoDO.java @@ -69,6 +69,10 @@ public class DeviceInfoDO extends BaseDO { * 设备状态 */ private Integer deviceState; + /** + * 设备地址 (监控摄像) + */ + private String deviceUrl; /** * 绑定状态:1: 绑定; 0: 未绑定 */ diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/enums/CommonConstants.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/enums/CommonConstants.java index 64498af9..d8cbc507 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/enums/CommonConstants.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/enums/CommonConstants.java @@ -47,6 +47,7 @@ public class CommonConstants { public static Map DEVICE_STATE_MAP = new HashMap<>(); public static Map BINDING_STATE_MAP = new HashMap<>(); public static Map NEWS_TYPE_MAP = new HashMap<>(); + public static Map ONLINE_MAP = new HashMap<>(); static { PLAN_MAP.put(PLAN_STATUS_1, "未开始"); @@ -78,6 +79,9 @@ public class CommonConstants { NEWS_TYPE_MAP.put(NEWS_TYPE_3,"热搜"); NEWS_TYPE_MAP.put(NEWS_TYPE_4,"重磅"); NEWS_TYPE_MAP.put(NEWS_TYPE_99,"其他"); + + ONLINE_MAP.put("online", "在线"); + ONLINE_MAP.put("offline", "离线"); } // 模型类型 (1:模型模板; 2:引用案例) @@ -116,4 +120,5 @@ public class CommonConstants { public final static String DEVICE_TYPE_SOIL = "soil"; public final static String DEVICE_TYPE_WF = "water_fertilizer"; + public final static String DEVICE_TYPE_VIDEO_MONITOR = "video_monitor"; } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/devicealarm/DeviceAlarmService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/devicealarm/DeviceAlarmService.java index 25820baf..87bca6b2 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/devicealarm/DeviceAlarmService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/devicealarm/DeviceAlarmService.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.farm.service.devicealarm; +import cn.iocoder.yudao.module.farm.controller.admin.digitalcockpit.vo.DeviceMonitorDataRespVO; import cn.iocoder.yudao.module.farm.dal.dataobject.devicealarm.DeviceAlarmDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -101,4 +102,5 @@ public interface DeviceAlarmService { * @param alarmData 报警数据 */ void checkAndCreateAlarm(String deviceId, Integer alarmType, String alarmData); + } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/deviceclassify/DeviceClassifyServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/deviceclassify/DeviceClassifyServiceImpl.java index 29e96589..6f3fd5d0 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/deviceclassify/DeviceClassifyServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/deviceclassify/DeviceClassifyServiceImpl.java @@ -217,7 +217,8 @@ public class DeviceClassifyServiceImpl implements DeviceClassifyService { x.eq(DeviceClassifyDO::getTenantId, getLoginUser().getTenantId()); List deviceClassifyDOS = deviceClassifyMapper.selectList(x); - Map typeNameMap = deviceClassifyDOS.stream().filter(device -> device.getParentId() != null && device.getParentId() == 0).collect(Collectors.toMap(e -> e.getId().toString(), DeviceClassifyDO::getName)); + Map typeNameMap = deviceClassifyDOS.stream().filter(device -> device.getParentId() != null && device.getParentId() == 0) + .collect(Collectors.toMap(e -> e.getId().toString(), DeviceClassifyDO::getName)); return typeNameMap; } @@ -226,7 +227,8 @@ public class DeviceClassifyServiceImpl implements DeviceClassifyService { x.eq(DeviceClassifyDO::getTenantId, getLoginUser().getTenantId()); List deviceClassifyDOS = deviceClassifyMapper.selectList(x); - Map typeCodeMap = deviceClassifyDOS.stream().filter(device -> device.getParentId() != null && device.getParentId() == 0).collect(Collectors.toMap(e -> e.getId().toString(), DeviceClassifyDO::getTypeCode)); + Map typeCodeMap = deviceClassifyDOS.stream().filter(device -> device.getParentId() != null && device.getParentId() == 0) + .collect(Collectors.toMap(e -> e.getId().toString(), DeviceClassifyDO::getTypeCode)); return typeCodeMap; } diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/deviceinfo/DeviceInfoService.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/deviceinfo/DeviceInfoService.java index 66c3bb9f..058d4274 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/deviceinfo/DeviceInfoService.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/deviceinfo/DeviceInfoService.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.farm.controller.admin.deviceinfo.vo.v2.DeviceInfo import cn.iocoder.yudao.module.farm.controller.admin.deviceinfo.vo.v2.DeviceStatisticsRespVO; import cn.iocoder.yudao.module.farm.controller.admin.deviceinfo.vo.v2.UpdateDevicePropertiesForWfReqVO; import cn.iocoder.yudao.module.farm.controller.admin.digitalcockpit.vo.DeviceInfoRespVO; +import cn.iocoder.yudao.module.farm.controller.admin.digitalcockpit.vo.DeviceMonitorDataRespVO; import cn.iocoder.yudao.module.farm.dal.dataobject.deviceinfo.DeviceInfoDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.farm.manager.equipmentproducer.dto.RealTimeDataResponse; @@ -135,4 +136,6 @@ public interface DeviceInfoService { */ DeviceInfoRespVO getDeviceInfoByDp(String baseId); + List deviceList(); + } \ No newline at end of file diff --git a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/deviceinfo/DeviceInfoServiceImpl.java b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/deviceinfo/DeviceInfoServiceImpl.java index d5306a13..d23278e0 100644 --- a/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/deviceinfo/DeviceInfoServiceImpl.java +++ b/yudao-module-farm/src/main/java/cn/iocoder/yudao/module/farm/service/deviceinfo/DeviceInfoServiceImpl.java @@ -10,6 +10,7 @@ import cn.iocoder.yudao.module.farm.controller.admin.deviceinfo.vo.v2.DeviceInfo import cn.iocoder.yudao.module.farm.controller.admin.deviceinfo.vo.v2.DeviceStatisticsRespVO; import cn.iocoder.yudao.module.farm.controller.admin.deviceinfo.vo.v2.UpdateDevicePropertiesForWfReqVO; import cn.iocoder.yudao.module.farm.controller.admin.digitalcockpit.vo.DeviceInfoRespVO; +import cn.iocoder.yudao.module.farm.controller.admin.digitalcockpit.vo.DeviceMonitorDataRespVO; import cn.iocoder.yudao.module.farm.dal.dataobject.baseinfo.BaseInfoDO; import cn.iocoder.yudao.module.farm.dal.dataobject.deviceclassify.DeviceClassifyDO; import cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo.PlotInfoDO; @@ -24,8 +25,11 @@ import cn.iocoder.yudao.module.farm.manager.equipmentproducer.dto.RealTimeDataRe import cn.iocoder.yudao.module.farm.manager.equipmentproducer.dto.UnifiedLoginResponse; import cn.iocoder.yudao.module.farm.manager.equipmentproducer.dto.soil.history.HistoryDataListPageReqVO; import cn.iocoder.yudao.module.farm.manager.equipmentproducer.dto.soil.realtime.RealTimeDataReqVO; +import cn.iocoder.yudao.module.farm.manager.equipmentproducer.dto.soil.realtime.RealTimeDataRespVO; import cn.iocoder.yudao.module.farm.manager.equipmentproducer.dto.wf.realtime.RealTimeDeviceDataReqVO; +import cn.iocoder.yudao.module.farm.manager.equipmentproducer.dto.wf.realtime.RealTimeDeviceDataRespVO; import cn.iocoder.yudao.module.farm.manager.equipmentproducer.dto.wf.updateparams.UpdateDeviceStatusReqVO; +import cn.iocoder.yudao.module.farm.manager.equipmentproducer.dto.wf.updateparams.UpdateDeviceStatusRespVO; import cn.iocoder.yudao.module.farm.service.deviceclassify.DeviceClassifyService; import org.apache.commons.lang3.ObjectUtils; import org.springframework.stereotype.Service; @@ -40,6 +44,7 @@ import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.module.farm.dal.mysql.deviceinfo.DeviceInfoMapper; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -357,5 +362,81 @@ public class DeviceInfoServiceImpl implements DeviceInfoService { return new DeviceInfoRespVO(totalCount, deviceInfos); } + @Override + public List deviceList() { + Long tenantId = getLoginUser().getTenantId(); + LambdaQueryWrapperX wrapperX = new LambdaQueryWrapperX<>(); + wrapperX.eq(DeviceInfoDO::getTenantId, tenantId); + wrapperX.eq(DeviceInfoDO::getDeleted, CommonConstants.NO_CODE); + + List doList = deviceInfoMapper.selectList(wrapperX); + Map> groupedByDeviceType = doList.stream().collect(Collectors.groupingBy(DeviceInfoDO::getDeviceType)); + + Map typeCodeMap = deviceClassifyService.getTypeCodeMap(); + Map typeNameMap = deviceClassifyService.getTypeNameMap(); + + + List res = new ArrayList<>(); + for (Map.Entry> d : groupedByDeviceType.entrySet()) { + String deviceType = d.getKey(); + List list = d.getValue(); + + String typeCode = typeCodeMap.getOrDefault(deviceType, "其他"); + List rows = this.getRealTimeList(typeCode, list); + res.add(new DeviceMonitorDataRespVO(typeNameMap.get(deviceType), rows)); + } + + return res; + } + + private List getRealTimeList(String typeCode, List doList) { + List rows = new ArrayList<>(); + + for (DeviceInfoDO d : doList) { + // 获取设备商数据 + switch (typeCode) { + case DEVICE_TYPE_SOIL: + DeviceInfoDetailV2RespVO.SoilInfo soilInfo = getSoilInfo(d.getDeviceUniqueId(), d.getPlotId(), 12); + List rows1 = this.getSoilData(d.getDeviceName(), soilInfo); + rows.addAll(rows1); + break; + case DEVICE_TYPE_WF: + DeviceInfoDetailV2RespVO.WfInfo wfInfo = getWfInfo(d.getDeviceUniqueId(), d.getPlotId()); + List rows2 = this.getWfData( wfInfo); + rows.addAll(rows2); + break; + case DEVICE_TYPE_VIDEO_MONITOR: + rows.add(new DeviceMonitorDataRespVO.Row(d.getDeviceName(),DEVICE_STATE_MAP.get(d.getDeviceState()),d.getDeviceUrl())); + break; + } + } + + return rows; + } + + private List getWfData(DeviceInfoDetailV2RespVO.WfInfo wfInfo) { + List rows = new ArrayList<>(); + + RealTimeDeviceDataRespVO realTimeDeviceDataRespVO = (RealTimeDeviceDataRespVO) wfInfo.getRealTimeData().getData(); + List data = realTimeDeviceDataRespVO.getData(); + for (RealTimeDeviceDataRespVO.DataRow d : data) { + rows.add(new DeviceMonitorDataRespVO.Row(d.getPropertyName(), d.getFormatValue(), "")); + } + + return rows; + } + + private List getSoilData(String name, DeviceInfoDetailV2RespVO.SoilInfo soilInfo) { + List rows = new ArrayList<>(); + + RealTimeDataRespVO realTimeDataRespVO = (RealTimeDataRespVO) soilInfo.getRealTimeData().getData(); + List data = realTimeDataRespVO.getData(); + for (RealTimeDataRespVO.DeviceInfo d : data) { + rows.add(new DeviceMonitorDataRespVO.Row(name, ONLINE_MAP.get(d.getStatus()), "")); + } + + return rows; + } + } \ No newline at end of file