fix (farm): 设备中心

- 添加腔型摄像机设备
This commit is contained in:
达富斌
2025-10-14 21:39:07 +08:00
parent 9b918fadee
commit 84a85c8793
9 changed files with 106 additions and 34 deletions

View File

@@ -49,6 +49,8 @@ public class DeviceInfoDetailV2RespVO {
@Schema(description = "绑定状态:1: 绑定; 0: 未绑定") @Schema(description = "绑定状态:1: 绑定; 0: 未绑定")
private Integer bindingState; private Integer bindingState;
private String bindingStateName; private String bindingStateName;
@Schema(description = "设备地址 (监控摄像)")
private String deviceUrl;
@Schema(description = "设备坐标") @Schema(description = "设备坐标")
private String point; private String point;

View File

@@ -179,11 +179,8 @@ public class DigitalCockpitController {
@GetMapping("/device-info/monitor-data") @GetMapping("/device-info/monitor-data")
@Operation(summary = "监测数据") @Operation(summary = "监测数据")
@Parameter(name = "baseId", description = "基地ID", required = true) public CommonResult<List<DeviceMonitorDataRespVO>> getMonitoringData() {
public CommonResult<DeviceMonitorDataRespVO> getMonitoringData(@RequestParam("baseId") String baseId) { List<DeviceMonitorDataRespVO> res = deviceInfoService.deviceList();
DeviceMonitorDataRespVO res = new DeviceMonitorDataRespVO();
return success(res); return success(res);
} }

View File

@@ -16,33 +16,8 @@ import java.util.List;
@NoArgsConstructor @NoArgsConstructor
public class DeviceMonitorDataRespVO { public class DeviceMonitorDataRespVO {
private Soil soilInfo;
private Wf wfInfo;
private VideoMonitor videoMonitorInfo;
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class Soil {
private String deviceTypeName; private String deviceTypeName;
private List<Row> data; private List<Row> rows;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class Wf {
private String deviceTypeName;
private List<Row> data;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class VideoMonitor {
private String deviceTypeName;
private List<Row> data;
}
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@@ -50,6 +25,7 @@ public class DeviceMonitorDataRespVO {
public static class Row { public static class Row {
private String name; private String name;
private String status; private String status;
private String url;
} }
} }

View File

@@ -69,6 +69,10 @@ public class DeviceInfoDO extends BaseDO {
* 设备状态 * 设备状态
*/ */
private Integer deviceState; private Integer deviceState;
/**
* 设备地址 (监控摄像)
*/
private String deviceUrl;
/** /**
* 绑定状态:1: 绑定; 0: 未绑定 * 绑定状态:1: 绑定; 0: 未绑定
*/ */

View File

@@ -47,6 +47,7 @@ public class CommonConstants {
public static Map<Integer,String> DEVICE_STATE_MAP = new HashMap<>(); public static Map<Integer,String> DEVICE_STATE_MAP = new HashMap<>();
public static Map<Integer,String> BINDING_STATE_MAP = new HashMap<>(); public static Map<Integer,String> BINDING_STATE_MAP = new HashMap<>();
public static Map<String,String> NEWS_TYPE_MAP = new HashMap<>(); public static Map<String,String> NEWS_TYPE_MAP = new HashMap<>();
public static Map<String,String> ONLINE_MAP = new HashMap<>();
static { static {
PLAN_MAP.put(PLAN_STATUS_1, "未开始"); 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_3,"热搜");
NEWS_TYPE_MAP.put(NEWS_TYPE_4,"重磅"); NEWS_TYPE_MAP.put(NEWS_TYPE_4,"重磅");
NEWS_TYPE_MAP.put(NEWS_TYPE_99,"其他"); NEWS_TYPE_MAP.put(NEWS_TYPE_99,"其他");
ONLINE_MAP.put("online", "在线");
ONLINE_MAP.put("offline", "离线");
} }
// 模型类型 (1:模型模板; 2:引用案例) // 模型类型 (1:模型模板; 2:引用案例)
@@ -116,4 +120,5 @@ public class CommonConstants {
public final static String DEVICE_TYPE_SOIL = "soil"; public final static String DEVICE_TYPE_SOIL = "soil";
public final static String DEVICE_TYPE_WF = "water_fertilizer"; public final static String DEVICE_TYPE_WF = "water_fertilizer";
public final static String DEVICE_TYPE_VIDEO_MONITOR = "video_monitor";
} }

View File

@@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.farm.service.devicealarm; 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.module.farm.dal.dataobject.devicealarm.DeviceAlarmDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
@@ -101,4 +102,5 @@ public interface DeviceAlarmService {
* @param alarmData 报警数据 * @param alarmData 报警数据
*/ */
void checkAndCreateAlarm(String deviceId, Integer alarmType, String alarmData); void checkAndCreateAlarm(String deviceId, Integer alarmType, String alarmData);
} }

View File

@@ -217,7 +217,8 @@ public class DeviceClassifyServiceImpl implements DeviceClassifyService {
x.eq(DeviceClassifyDO::getTenantId, getLoginUser().getTenantId()); x.eq(DeviceClassifyDO::getTenantId, getLoginUser().getTenantId());
List<DeviceClassifyDO> deviceClassifyDOS = deviceClassifyMapper.selectList(x); List<DeviceClassifyDO> deviceClassifyDOS = deviceClassifyMapper.selectList(x);
Map<String, String> typeNameMap = deviceClassifyDOS.stream().filter(device -> device.getParentId() != null && device.getParentId() == 0).collect(Collectors.toMap(e -> e.getId().toString(), DeviceClassifyDO::getName)); Map<String, String> typeNameMap = deviceClassifyDOS.stream().filter(device -> device.getParentId() != null && device.getParentId() == 0)
.collect(Collectors.toMap(e -> e.getId().toString(), DeviceClassifyDO::getName));
return typeNameMap; return typeNameMap;
} }
@@ -226,7 +227,8 @@ public class DeviceClassifyServiceImpl implements DeviceClassifyService {
x.eq(DeviceClassifyDO::getTenantId, getLoginUser().getTenantId()); x.eq(DeviceClassifyDO::getTenantId, getLoginUser().getTenantId());
List<DeviceClassifyDO> deviceClassifyDOS = deviceClassifyMapper.selectList(x); List<DeviceClassifyDO> deviceClassifyDOS = deviceClassifyMapper.selectList(x);
Map<String, String> typeCodeMap = deviceClassifyDOS.stream().filter(device -> device.getParentId() != null && device.getParentId() == 0).collect(Collectors.toMap(e -> e.getId().toString(), DeviceClassifyDO::getTypeCode)); Map<String, String> typeCodeMap = deviceClassifyDOS.stream().filter(device -> device.getParentId() != null && device.getParentId() == 0)
.collect(Collectors.toMap(e -> e.getId().toString(), DeviceClassifyDO::getTypeCode));
return typeCodeMap; return typeCodeMap;
} }

View File

@@ -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.DeviceStatisticsRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.deviceinfo.vo.v2.UpdateDevicePropertiesForWfReqVO; 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.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.module.farm.dal.dataobject.deviceinfo.DeviceInfoDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.farm.manager.equipmentproducer.dto.RealTimeDataResponse; import cn.iocoder.yudao.module.farm.manager.equipmentproducer.dto.RealTimeDataResponse;
@@ -135,4 +136,6 @@ public interface DeviceInfoService {
*/ */
DeviceInfoRespVO getDeviceInfoByDp(String baseId); DeviceInfoRespVO getDeviceInfoByDp(String baseId);
List<DeviceMonitorDataRespVO> deviceList();
} }

View File

@@ -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.DeviceStatisticsRespVO;
import cn.iocoder.yudao.module.farm.controller.admin.deviceinfo.vo.v2.UpdateDevicePropertiesForWfReqVO; 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.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.baseinfo.BaseInfoDO;
import cn.iocoder.yudao.module.farm.dal.dataobject.deviceclassify.DeviceClassifyDO; import cn.iocoder.yudao.module.farm.dal.dataobject.deviceclassify.DeviceClassifyDO;
import cn.iocoder.yudao.module.farm.dal.dataobject.plotinfo.PlotInfoDO; 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.UnifiedLoginResponse;
import cn.iocoder.yudao.module.farm.manager.equipmentproducer.dto.soil.history.HistoryDataListPageReqVO; 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.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.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.UpdateDeviceStatusReqVO;
import cn.iocoder.yudao.module.farm.manager.equipmentproducer.dto.wf.updateparams.UpdateDeviceStatusRespVO;
import cn.iocoder.yudao.module.farm.service.deviceclassify.DeviceClassifyService; import cn.iocoder.yudao.module.farm.service.deviceclassify.DeviceClassifyService;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service; 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 cn.iocoder.yudao.module.farm.dal.mysql.deviceinfo.DeviceInfoMapper;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -357,5 +362,81 @@ public class DeviceInfoServiceImpl implements DeviceInfoService {
return new DeviceInfoRespVO(totalCount, deviceInfos); return new DeviceInfoRespVO(totalCount, deviceInfos);
} }
@Override
public List<DeviceMonitorDataRespVO> deviceList() {
Long tenantId = getLoginUser().getTenantId();
LambdaQueryWrapperX<DeviceInfoDO> wrapperX = new LambdaQueryWrapperX<>();
wrapperX.eq(DeviceInfoDO::getTenantId, tenantId);
wrapperX.eq(DeviceInfoDO::getDeleted, CommonConstants.NO_CODE);
List<DeviceInfoDO> doList = deviceInfoMapper.selectList(wrapperX);
Map<String, List<DeviceInfoDO>> groupedByDeviceType = doList.stream().collect(Collectors.groupingBy(DeviceInfoDO::getDeviceType));
Map<String, String> typeCodeMap = deviceClassifyService.getTypeCodeMap();
Map<String, String> typeNameMap = deviceClassifyService.getTypeNameMap();
List<DeviceMonitorDataRespVO> res = new ArrayList<>();
for (Map.Entry<String, List<DeviceInfoDO>> d : groupedByDeviceType.entrySet()) {
String deviceType = d.getKey();
List<DeviceInfoDO> list = d.getValue();
String typeCode = typeCodeMap.getOrDefault(deviceType, "其他");
List<DeviceMonitorDataRespVO.Row> rows = this.getRealTimeList(typeCode, list);
res.add(new DeviceMonitorDataRespVO(typeNameMap.get(deviceType), rows));
}
return res;
}
private List<DeviceMonitorDataRespVO.Row> getRealTimeList(String typeCode, List<DeviceInfoDO> doList) {
List<DeviceMonitorDataRespVO.Row> rows = new ArrayList<>();
for (DeviceInfoDO d : doList) {
// 获取设备商数据
switch (typeCode) {
case DEVICE_TYPE_SOIL:
DeviceInfoDetailV2RespVO.SoilInfo soilInfo = getSoilInfo(d.getDeviceUniqueId(), d.getPlotId(), 12);
List<DeviceMonitorDataRespVO.Row> rows1 = this.getSoilData(d.getDeviceName(), soilInfo);
rows.addAll(rows1);
break;
case DEVICE_TYPE_WF:
DeviceInfoDetailV2RespVO.WfInfo wfInfo = getWfInfo(d.getDeviceUniqueId(), d.getPlotId());
List<DeviceMonitorDataRespVO.Row> 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<DeviceMonitorDataRespVO.Row> getWfData(DeviceInfoDetailV2RespVO.WfInfo wfInfo) {
List<DeviceMonitorDataRespVO.Row> rows = new ArrayList<>();
RealTimeDeviceDataRespVO realTimeDeviceDataRespVO = (RealTimeDeviceDataRespVO) wfInfo.getRealTimeData().getData();
List<RealTimeDeviceDataRespVO.DataRow> data = realTimeDeviceDataRespVO.getData();
for (RealTimeDeviceDataRespVO.DataRow d : data) {
rows.add(new DeviceMonitorDataRespVO.Row(d.getPropertyName(), d.getFormatValue(), ""));
}
return rows;
}
private List<DeviceMonitorDataRespVO.Row> getSoilData(String name, DeviceInfoDetailV2RespVO.SoilInfo soilInfo) {
List<DeviceMonitorDataRespVO.Row> rows = new ArrayList<>();
RealTimeDataRespVO realTimeDataRespVO = (RealTimeDataRespVO) soilInfo.getRealTimeData().getData();
List<RealTimeDataRespVO.DeviceInfo> data = realTimeDataRespVO.getData();
for (RealTimeDataRespVO.DeviceInfo d : data) {
rows.add(new DeviceMonitorDataRespVO.Row(name, ONLINE_MAP.get(d.getStatus()), ""));
}
return rows;
}
} }