From faabc4151b42db398c848d7d759d39b0b6812302 Mon Sep 17 00:00:00 2001 From: cbs <18617195505@163.com> Date: Thu, 6 Feb 2025 17:31:18 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constant/device/DeviceChcheConstant.java | 6 ++ .../DeviceInformationController.java | 7 ++ .../vo/DeviceInformationPageReqVO.java | 3 + .../vo/DeviceInformationRespVO.java | 4 ++ .../vo/DeviceInformationSaveReqVO.java | 3 + .../information/DeviceInformationDO.java | 5 ++ .../system/enums/device/DeviceStatusEnum.java | 24 +++++++ .../information/DeviceInformationService.java | 7 ++ .../DeviceInformationServiceImpl.java | 72 ++++++++++++++++++- 9 files changed, 128 insertions(+), 3 deletions(-) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/device/DeviceChcheConstant.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/device/DeviceStatusEnum.java diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/device/DeviceChcheConstant.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/device/DeviceChcheConstant.java new file mode 100644 index 000000000..5cf2db425 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/constant/device/DeviceChcheConstant.java @@ -0,0 +1,6 @@ +package cn.iocoder.yudao.module.system.constant.device; + +public class DeviceChcheConstant { + //设备最后通讯时间 + public static String DEVICE_LAST_TIME = "device:last:time"; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/DeviceInformationController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/DeviceInformationController.java index 7438b8daa..11ff2a76a 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/DeviceInformationController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/DeviceInformationController.java @@ -100,4 +100,11 @@ public class DeviceInformationController { BeanUtils.toBean(list, DeviceInformationRespVO.class)); } + @GetMapping("/classification") + @Operation(summary = "获得设备信息分类列表") + public CommonResult>> classification() { + Map> map = informationService.classification(); + return success(map); + } + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationPageReqVO.java index 1b6df9623..76a2cdd15 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationPageReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationPageReqVO.java @@ -41,6 +41,9 @@ public class DeviceInformationPageReqVO extends PageParam { @Schema(description = "设备编号") private String deviceNo; + @Schema(description = "设备位置") + private String deviceLocation; + @Schema(description = "mac地址") private String macAddress; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationRespVO.java index 98eaaac38..769730bbb 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationRespVO.java @@ -50,6 +50,10 @@ public class DeviceInformationRespVO { @ExcelProperty("设备编号") private String deviceNo; + @Schema(description = "设备位置") + @ExcelProperty("设备位置") + private String deviceLocation; + @Schema(description = "mac地址") @ExcelProperty("mac地址") private String macAddress; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationSaveReqVO.java index aa4a7fbe5..abefb1326 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/information/vo/DeviceInformationSaveReqVO.java @@ -41,6 +41,9 @@ public class DeviceInformationSaveReqVO { @Schema(description = "设备编号") private String deviceNo; + @Schema(description = "设备位置") + private String deviceLocation; + @Schema(description = "mac地址") private String macAddress; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/information/DeviceInformationDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/information/DeviceInformationDO.java index 6945bc8be..4409037f1 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/information/DeviceInformationDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/information/DeviceInformationDO.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; import java.math.BigDecimal; @@ -62,6 +63,10 @@ public class DeviceInformationDO extends BaseDO { * 设备编号 */ private String deviceNo; + /** + * 设备位置 + */ + private String deviceLocation; /** * mac地址 */ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/device/DeviceStatusEnum.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/device/DeviceStatusEnum.java new file mode 100644 index 000000000..94592c41a --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/enums/device/DeviceStatusEnum.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.module.system.enums.device; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * device_information的device_status + */ +@Getter +@AllArgsConstructor +public enum DeviceStatusEnum { + ON_LINE(1, "在线"), + OFF_LINE(2, "离线"), + EXECPTION(3, "异常"); + + /** + * 类型 + */ + private final Integer type; + /** + * 说明 + */ + private final String msg; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationService.java index a2cf194e0..42fcd2ae3 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationService.java @@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.system.dal.dataobject.information.DeviceInformati import javax.validation.Valid; import java.util.List; +import java.util.Map; /** * 设备信息 Service 接口 @@ -76,4 +77,10 @@ public interface DeviceInformationService { * @return */ List getList(@Valid DeviceInformationPageReqVO pageReqVO); + + /** + * 获得设备信息分类列表 + * @return + */ + Map> classification(); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationServiceImpl.java index e1b68369f..90ed034dc 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/information/DeviceInformationServiceImpl.java @@ -5,10 +5,13 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.grpc.api.GrpcServiceApi; +import cn.iocoder.yudao.module.system.constant.device.DeviceChcheConstant; import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.information.vo.DeviceInformationSaveReqVO; import cn.iocoder.yudao.module.system.dal.dataobject.information.DeviceInformationDO; import cn.iocoder.yudao.module.system.dal.mysql.information.DeviceInformationMapper; +import cn.iocoder.yudao.module.system.enums.device.DeviceStatusEnum; +import cn.iocoder.yudao.module.system.util.redis.RedisUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -17,7 +20,9 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.time.LocalDateTime; -import java.util.List; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; import static cn.hutool.core.collection.CollUtil.isNotEmpty; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -41,6 +46,9 @@ public class DeviceInformationServiceImpl implements DeviceInformationService { @Resource private GrpcServiceApi grpcServiceApi; + @Resource + private RedisUtil redisUtil; + @Override public Long createInformation(DeviceInformationSaveReqVO createReqVO) { DeviceInformationPageReqVO pageReqVO = new DeviceInformationPageReqVO(); @@ -52,7 +60,6 @@ public class DeviceInformationServiceImpl implements DeviceInformationService { // 插入 DeviceInformationDO information = BeanUtils.toBean(createReqVO, DeviceInformationDO.class); information.setDeviceStatus(1); - information.setDeviceLastTime(LocalDateTime.now()); informationMapper.insert(information); // 返回 return information.getId(); @@ -83,7 +90,24 @@ public class DeviceInformationServiceImpl implements DeviceInformationService { @Override public DeviceInformationDO getInformation(Long id) { - return informationMapper.selectById(id); + // 校验存在 + validateInformationExists(id); + DeviceInformationDO deviceInformationDO = informationMapper.selectById(id); + String deviceKey = DeviceChcheConstant.DEVICE_LAST_TIME +deviceInformationDO.getMacAddress(); + Object object = redisUtil.get(deviceKey); + if (ObjectUtil.isEmpty(object)) { + deviceInformationDO.setDeviceStatus(DeviceStatusEnum.OFF_LINE.getType()); + return deviceInformationDO; + } + try { + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDateTime curTimeLDT = LocalDateTime.parse((String)object, df); + deviceInformationDO.setDeviceLastTime(curTimeLDT); + deviceInformationDO.setDeviceStatus(DeviceStatusEnum.ON_LINE.getType()); + } catch (Exception e) { + log.info("查询设备最后通讯时间异常 :{}",e.getMessage()); + } + return deviceInformationDO; } @Override @@ -118,4 +142,46 @@ public class DeviceInformationServiceImpl implements DeviceInformationService { .eq(pageReqVO.getDeviceType() != null, DeviceInformationDO::getDeviceType, pageReqVO.getDeviceType())); } + /** + * 获得设备信息分类列表 + * @return + */ + @Override + public Map> classification() { + List deviceInformationDOS = informationMapper.selectList(new LambdaQueryWrapper()); + if (ObjectUtil.isEmpty(deviceInformationDOS)) { + return new HashMap<>(); + } + + // todo 需要设置设备通讯的时间 + for (DeviceInformationDO deviceInformationDO : deviceInformationDOS) { + String deviceKey = DeviceChcheConstant.DEVICE_LAST_TIME +deviceInformationDO.getMacAddress(); + Object object = redisUtil.get(deviceKey); + if (ObjectUtil.isEmpty(object)) { + deviceInformationDO.setDeviceStatus(DeviceStatusEnum.OFF_LINE.getType()); + continue; + } + try { + DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + LocalDateTime curTimeLDT = LocalDateTime.parse((String)object, df); + deviceInformationDO.setDeviceLastTime(curTimeLDT); + deviceInformationDO.setDeviceStatus(DeviceStatusEnum.ON_LINE.getType()); + } catch (Exception e) { + log.info("查询设备最后通讯时间异常 :{}",e.getMessage()); + } + } + + Map> collect = + deviceInformationDOS.stream() + .collect(Collectors.groupingBy(DeviceInformationDO::getDeviceType)); + + ArrayList>> list = new ArrayList>>(collect.entrySet()); + Collections.sort(list, new Comparator>>() { + public int compare(Map.Entry> o1, Map.Entry> o2) { + return o1.getKey().compareTo(o2.getKey()); // 按照值排序 + } + }); + + return collect; + } }