From 22335c8ca7dbd5e7474874ac7d6ca82857329ecb Mon Sep 17 00:00:00 2001 From: zzc <1278921369@qq.com> Date: Sun, 18 Aug 2024 00:28:24 +0800 Subject: [PATCH] =?UTF-8?q?=E6=90=9E=E5=BF=83=E6=80=81=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/AuthController.java | 1 + .../controller/app/EqDeviceController.java | 10 ++++ .../web/device/iot/DeviceClientMsgDto.java | 35 +++++++++++++ .../web/device/iot/DeviceServerMsgDto.java | 4 +- .../org/dromara/web/domain/EqUserConfig.java | 8 +++ .../dromara/web/domain/bo/EqUserConfigBo.java | 9 ++++ .../web/domain/vo/EqEquipmentDetailVo.java | 38 ++++++++++++++ .../dromara/web/domain/vo/EqUserConfigVo.java | 7 +++ .../org/dromara/web/service/IotService.java | 50 +++++++++++++++++-- .../service/impl/EqEquipmentServiceImpl.java | 19 +++++++ 10 files changed, 175 insertions(+), 6 deletions(-) create mode 100644 ruoyi-admin/src/main/java/org/dromara/web/device/iot/DeviceClientMsgDto.java diff --git a/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java b/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java index e00ffbac6..b8d953150 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java @@ -192,6 +192,7 @@ public class AuthController { bo.setUserId(sysUserVo.getUserId()); bo.setLanguageType("zh_CN"); bo.setTimezoneType("1");//默认 UTC+08:00 + bo.setZoneId("UTC+08:00"); bo.setTimeFormat("YYYY-MM-DD"); bo.setCreateBy(sysUserVo.getUserId()); bo.setUpdateBy(sysUserVo.getUserId()); diff --git a/ruoyi-admin/src/main/java/org/dromara/web/controller/app/EqDeviceController.java b/ruoyi-admin/src/main/java/org/dromara/web/controller/app/EqDeviceController.java index 8b472b12e..e9791726c 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/controller/app/EqDeviceController.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/controller/app/EqDeviceController.java @@ -12,7 +12,9 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.web.core.BaseController; +import org.dromara.system.domain.vo.SysDictDataVo; import org.dromara.system.domain.vo.SysUserVo; +import org.dromara.system.service.ISysDictTypeService; import org.dromara.system.service.ISysUserService; import org.dromara.web.device.iot.DeviceDto; import org.dromara.web.domain.bo.*; @@ -54,6 +56,8 @@ public class EqDeviceController extends BaseController { private final IEqEquipmentService eqEquipmentService; private final IEqEquipmentLogService logService; + + private final ISysDictTypeService dictTypeService; private final IotService iotService; private final IEqShareService shareService; @@ -136,6 +140,12 @@ public class EqDeviceController extends BaseController { if (bo.getEquipmentId() == null) throw new ServiceException("设备ID不能为空"); String zoneId = bo.getZoneId(); if (StringUtils.isEmpty(zoneId)) throw new ServiceException("时区zoneId(如 UTC+08:00)不能为空"); + /*if (StringUtils.isEmpty(zoneId)) throw new ServiceException("时区zoneId不能为空"); + List eqTimezoneType = dictTypeService.selectDictDataByType("eq_timezone_type"); + String finalZoneId = zoneId; + List collect = eqTimezoneType.stream().filter(dictDataVo -> dictDataVo.getDictValue().equals(finalZoneId)).collect(Collectors.toList()); + if (CollUtil.isEmpty(collect)) throw new ServiceException("zoneId不正确:"+zoneId); + zoneId = collect.get(0).getRemark();*/ if (zoneId.contains(" ")) zoneId = zoneId.replace(" ", "+"); EqEquipmentLogBo eqEquipmentLogBo = new EqEquipmentLogBo(); eqEquipmentLogBo.setEquipmentId(bo.getEquipmentId()); diff --git a/ruoyi-admin/src/main/java/org/dromara/web/device/iot/DeviceClientMsgDto.java b/ruoyi-admin/src/main/java/org/dromara/web/device/iot/DeviceClientMsgDto.java new file mode 100644 index 000000000..789522987 --- /dev/null +++ b/ruoyi-admin/src/main/java/org/dromara/web/device/iot/DeviceClientMsgDto.java @@ -0,0 +1,35 @@ +package org.dromara.web.device.iot; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @ClassName : DeviceMsgDto + * @Author : ZZC + * @Date : 2024/7/25 0:44 + * @Description : 设备信息 + **/ +@Data +public class DeviceClientMsgDto implements Serializable { + /** + * 设备类型 + */ + private String equipmentType; + + /** + * 序列号 + */ + private String serializableNum; + + /** + * 模组版本 + */ + private String modelVersion; + + /** + * MCU版本 + */ + private String mcuVersion; +} + diff --git a/ruoyi-admin/src/main/java/org/dromara/web/device/iot/DeviceServerMsgDto.java b/ruoyi-admin/src/main/java/org/dromara/web/device/iot/DeviceServerMsgDto.java index 3ef925262..95efa43f4 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/device/iot/DeviceServerMsgDto.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/device/iot/DeviceServerMsgDto.java @@ -2,6 +2,8 @@ package org.dromara.web.device.iot; import lombok.Data; +import java.io.Serializable; + /** * @ClassName : DeviceMsgDto * @Author : ZZC @@ -9,7 +11,7 @@ import lombok.Data; * @Description : 设备信息 **/ @Data -public class DeviceServerMsgDto { +public class DeviceServerMsgDto implements Serializable { private Boolean lineStatus; } diff --git a/ruoyi-admin/src/main/java/org/dromara/web/domain/EqUserConfig.java b/ruoyi-admin/src/main/java/org/dromara/web/domain/EqUserConfig.java index 5e631d3c8..19fde3758 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/domain/EqUserConfig.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/domain/EqUserConfig.java @@ -1,5 +1,8 @@ package org.dromara.web.domain; +import jakarta.validation.constraints.NotNull; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; import org.dromara.common.mybatis.core.domain.BaseEntity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; @@ -37,6 +40,11 @@ public class EqUserConfig extends BaseEntity { */ private String timezoneType; + /** + * 时区id(UTC+8:00) + */ + private String zoneId; + /** * 时间格式 */ diff --git a/ruoyi-admin/src/main/java/org/dromara/web/domain/bo/EqUserConfigBo.java b/ruoyi-admin/src/main/java/org/dromara/web/domain/bo/EqUserConfigBo.java index 517845e57..73e10534e 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/domain/bo/EqUserConfigBo.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/domain/bo/EqUserConfigBo.java @@ -1,5 +1,8 @@ package org.dromara.web.domain.bo; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; import org.dromara.web.domain.EqUserConfig; import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.core.validate.AddGroup; @@ -38,6 +41,12 @@ public class EqUserConfigBo extends BaseEntity { @NotNull(message = "时区类型不能为空", groups = { AddGroup.class, EditGroup.class }) private String timezoneType; + /** + * 时区id(UTC+8:00) + */ + @NotNull(message = "时区id(UTC+8:00)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String zoneId; + /** * 时间格式 */ diff --git a/ruoyi-admin/src/main/java/org/dromara/web/domain/vo/EqEquipmentDetailVo.java b/ruoyi-admin/src/main/java/org/dromara/web/domain/vo/EqEquipmentDetailVo.java index 3736098fa..3f2950050 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/domain/vo/EqEquipmentDetailVo.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/domain/vo/EqEquipmentDetailVo.java @@ -29,6 +29,23 @@ public class EqEquipmentDetailVo implements Serializable { @ExcelProperty(value = "主键ID") private Long equipmentId; + /** + * 设备所属用户id + */ + private Long ownerUserId; + + + /** + * 区域名称 + */ + @ExcelProperty(value = "区域id") + private Long areaId; + + /** + * 区域名称 + */ + private String areaName; + /** * 设备编码 */ @@ -122,6 +139,27 @@ public class EqEquipmentDetailVo implements Serializable { @ExcelProperty(value = "绑定时间") private Date bindTime; + /** + * 设备类型 + */ + private String equipmentType; + + /** + * 序列号 + */ + private String serializableNum; + + /** + * 模组版本 + */ + private String modelVersion; + + /** + * MCU版本 + */ + private String mcuVersion; + + /** * 设备状态 */ diff --git a/ruoyi-admin/src/main/java/org/dromara/web/domain/vo/EqUserConfigVo.java b/ruoyi-admin/src/main/java/org/dromara/web/domain/vo/EqUserConfigVo.java index 7eb40b1a9..e5a3191e4 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/domain/vo/EqUserConfigVo.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/domain/vo/EqUserConfigVo.java @@ -47,6 +47,13 @@ public class EqUserConfigVo implements Serializable { @ExcelDictFormat(dictType = "eq_timezone_type") private String timezoneType; + /** + * 时区id(UTC+8:00) + */ + @ExcelProperty(value = "时区id(UTC+8:00)", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "eq_timezone_type") + private String zoneId; + /** * 时间格式 */ diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/IotService.java b/ruoyi-admin/src/main/java/org/dromara/web/service/IotService.java index e36c0a738..a719e4666 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/service/IotService.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/service/IotService.java @@ -9,16 +9,15 @@ import com.alibaba.fastjson.JSONObject; import com.github.benmanes.caffeine.cache.Cache; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.utils.MessageUtils; +import org.dromara.common.core.utils.StringUtils; import org.dromara.web.config.CommonYmlConfig; -import org.dromara.web.device.iot.DeviceCtlDto; -import org.dromara.web.device.iot.DeviceMsgDto; -import org.dromara.web.device.iot.DeviceServerMsgDto; -import org.dromara.web.device.iot.DeviceDto; +import org.dromara.web.device.iot.*; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.HashMap; import java.util.Map; +import java.util.Objects; /** * @ClassName : IotService @@ -110,7 +109,7 @@ public class IotService { try { jsonObject = JSON.parseArray(send); } catch (Exception e) { - log.error("设备信息获取失败,请检查设备编号是否正确,设备编号:{},IOT接口返回:{}", deviceCode, send); + log.error("服务端属性获取:设备信息获取失败,请检查设备编号是否正确,设备编号:{},IOT接口返回:{}", deviceCode, send); throw new RuntimeException(MessageUtils.message("message.fault.device.notfound")); } String resultString = JSON.toJSONString(jsonObject.get(0)); @@ -120,6 +119,47 @@ public class IotService { return result; } + /** + * 获取客户端属性信息 + * @param deviceCode + * @return + */ + public DeviceClientMsgDto httpClientGetSend(String deviceCode){ + Map map = new HashMap<>(); + map.put("entityType","DEVICE"); + map.put("entityId",deviceCode); + map.put("scope","CLIENT_SCOPE"); + String send = getSend(CommonYmlConfig.URL_IOT_SCOPE_ATTRIBUTE + "?keys=equipmentType,serializableNum,modelVersion,mcuVersion", map); +// String send = getSend(CommonYmlConfig.URL_IOT_SCOPE_ATTRIBUTE + "?keys=", map); + log.info("客户端属性获取:设备信息获取成功,设备编号:{},IOT接口返回:{}", deviceCode, send); + if (send.startsWith("{")) throw new RuntimeException(MessageUtils.message("message.fault.device.notfound")); + JSONArray jsonObject = null; + try { + jsonObject = JSON.parseArray(send); + } catch (Exception e) { + log.error("设备信息获取失败,请检查设备编号是否正确,设备编号:{},IOT接口返回:{}", deviceCode, send); + throw new RuntimeException(MessageUtils.message("message.fault.device.notfound")); + } + + DeviceClientMsgDto result = new DeviceClientMsgDto(); + for (int i = 0; i < jsonObject.size(); i++) { + String resultString = JSON.toJSONString(jsonObject.get(i)); + Object value = JSON.parseObject(resultString).get("key"); + if (Objects.isNull(value)|| StringUtils.isBlank(value.toString())) continue; + String key = value.toString(); + if (key.equals("equipmentType")){ + result.setEquipmentType(JSON.parseObject(resultString).getString("value")); + }else if (key.equals("serializableNum")){ + result.setSerializableNum(JSON.parseObject(resultString).getString("value")); + }else if (key.equals("modelVersion")){ + result.setModelVersion(JSON.parseObject(resultString).getString("value")); + }else if (key.equals("mcuVersion")){ + result.setMcuVersion(JSON.parseObject(resultString).getString("value")); + } + } + return result; + } + /** * 获取设备信息 diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/EqEquipmentServiceImpl.java b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/EqEquipmentServiceImpl.java index 156a5c3f3..bd9c952f5 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/EqEquipmentServiceImpl.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/EqEquipmentServiceImpl.java @@ -14,13 +14,16 @@ import lombok.RequiredArgsConstructor; import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.service.ISysUserService; import org.dromara.web.device.*; +import org.dromara.web.device.iot.DeviceClientMsgDto; import org.dromara.web.device.iot.DeviceDto; import org.dromara.web.device.iot.DeviceMsgDto; import org.dromara.web.device.iot.DeviceServerMsgDto; +import org.dromara.web.domain.EqArea; import org.dromara.web.domain.bo.*; import org.dromara.web.domain.vo.EqEquipmentDetailVo; import org.dromara.web.domain.vo.EqEquipmentStatisticsVo; import org.dromara.web.domain.vo.EqUserEquipmentVo; +import org.dromara.web.mapper.EqAreaMapper; import org.dromara.web.service.IotService; import org.springframework.stereotype.Service; import org.dromara.web.domain.vo.EqEquipmentVo; @@ -42,6 +45,8 @@ public class EqEquipmentServiceImpl implements IEqEquipmentService { private final EqEquipmentMapper baseMapper; + private final EqAreaMapper areaMapper; + private final IotService iotService; private final ISysUserService userService; @@ -209,9 +214,23 @@ public class EqEquipmentServiceImpl implements IEqEquipmentService { result.setEquipmentCode(bo.getEquipmentCode()); //查看设备 EqEquipmentVo eqEquipmentVo = baseMapper.selectVoById(bo.getEquipmentId()); + EqArea eqArea = areaMapper.selectById(eqEquipmentVo.getAreaId()); + result.setAreaId(eqArea==null?null:eqArea.getAreaId()); + result.setAreaName(eqArea==null?null:eqArea.getAreaName()); + result.setOwnerUserId(eqEquipmentVo.getUserId()); + //获取服务属性状态 DeviceServerMsgDto serverMsg = iotService.httpServerGetSend(bo.getEquipmentCode()); result.setLineStatus(serverMsg.getLineStatus()?1:0); + + //获取客户端属性 + DeviceClientMsgDto clientMsg = iotService.httpClientGetSend(bo.getEquipmentCode()); + result.setEquipmentType(clientMsg.getEquipmentType()); + result.setSerializableNum(clientMsg.getSerializableNum()); + result.setModelVersion(clientMsg.getModelVersion()); + result.setMcuVersion(clientMsg.getMcuVersion()); + + //获取遥测数据 DeviceMsgDto telemetryMsg = iotService.httpTelemetryGetSend(bo.getEquipmentCode());