瀏覽代碼

feat:http heartbeat api

lihao16 6 月之前
父節點
當前提交
0b6b49225c

+ 53 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/domain/bo/HttpHeartbeatReq.java

@@ -0,0 +1,53 @@
+package com.inspur.device.domain.bo;
+
+
+import lombok.Data;
+
+/**
+ * 前端设备心跳上报参数
+ * @author lihao16
+ */
+@Data
+public class HttpHeartbeatReq {
+
+    /** 设备标识 */
+    private String identifier;
+
+    /** 亮度 */
+    private Integer bright;
+
+    /** CUP 百分比 */
+    private String cpuUsage;
+
+    /** 外部存储 总量 */
+    private Long externalMemoryTotal;
+
+    /** 外部存储 已使用 */
+    private Long externalMemoryUsage;
+
+    /** 外部存储 使用百分比 */
+    private String externalUsage;
+
+    /** 内存 总量 */
+    private Long ramTotalOfByte;
+
+    /** 内存 已使用 */
+    private Long ramUsageOfByte;
+
+    /** 系统构建时间 */
+    private String systemBuildDate;
+
+    /** 系统构建版本 */
+    private String systemBuildVersion;
+
+    /** apk version code */
+    private String versionCode;
+
+    /** apk version name */
+    private String versionName;
+
+    /** 音量 */
+    private Integer volume;
+
+
+}

+ 6 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/domain/constants/DeviceConstants.java

@@ -38,5 +38,11 @@ public class DeviceConstants {
     /** 设备截屏 Redis key */
     public static final String REDIS_SCREENSHOT_KEY = "global:device:screenshot:";
 
+    /** 设备运行状态 */
+    public static final String REDIS_DEVICE_RUN_INFO_KEY = "global:device:run:info:";
+
+    /** 设备http最后一次心跳时间 */
+    public static final String REDIS_DEVICE_HEARTBEAT_HTTP_KEY = "global:device:heartbeat:http:";
+
 
 }

+ 14 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/domain/vo/HttpHeartbeatRspVo.java

@@ -0,0 +1,14 @@
+package com.inspur.device.domain.vo;
+
+import lombok.Data;
+
+/**
+ * 设备心跳响应
+ * @author lihao16
+ */
+@Data
+public class HttpHeartbeatRspVo {
+
+    private String message;
+
+}

+ 9 - 0
smsb-modules/smsb-device/src/main/java/com/inspur/device/service/ISmsbDeviceService.java

@@ -1,8 +1,10 @@
 package com.inspur.device.service;
 
 import com.inspur.device.domain.SmsbDevice;
+import com.inspur.device.domain.bo.HttpHeartbeatReq;
 import com.inspur.device.domain.bo.SmsbDeviceBo;
 import com.inspur.device.domain.vo.DeviceStatisticsVo;
+import com.inspur.device.domain.vo.HttpHeartbeatRspVo;
 import com.inspur.device.domain.vo.SmsbDeviceRunInfoVo;
 import com.inspur.device.domain.vo.SmsbDeviceVo;
 import org.dromara.common.core.domain.R;
@@ -131,4 +133,11 @@ public interface ISmsbDeviceService {
      * @return
      */
     R<Void> screenshotUpload(String identifier, Long timestamp, MultipartFile file);
+
+    /**
+     * 前端设备心跳接口
+     * @param requestParam
+     * @return
+     */
+    R<HttpHeartbeatRspVo> heartbeat(HttpHeartbeatReq requestParam);
 }

+ 25 - 7
smsb-modules/smsb-device/src/main/java/com/inspur/device/service/impl/SmsbDeviceServiceImpl.java

@@ -9,13 +9,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.common.hash.Hashing;
 import com.inspur.device.domain.SmsbDevice;
 import com.inspur.device.domain.SmsbDeviceRunInfo;
+import com.inspur.device.domain.bo.HttpHeartbeatReq;
 import com.inspur.device.domain.bo.SmsbDeviceBo;
 import com.inspur.device.domain.constants.DeviceConstants;
 import com.inspur.device.domain.constants.ResultCodeEnum;
-import com.inspur.device.domain.vo.DeviceStatisticsVo;
-import com.inspur.device.domain.vo.SmsbDeviceManufacturerVo;
-import com.inspur.device.domain.vo.SmsbDeviceRunInfoVo;
-import com.inspur.device.domain.vo.SmsbDeviceVo;
+import com.inspur.device.domain.vo.*;
 import com.inspur.device.mapper.SmsbDeviceMapper;
 import com.inspur.device.mapper.SmsbDeviceRunInfoMapper;
 import com.inspur.device.service.ISmsbDeviceManufacturerService;
@@ -24,6 +22,7 @@ import com.inspur.device.service.ISmsbProductService;
 import lombok.RequiredArgsConstructor;
 import org.dromara.common.core.domain.R;
 import org.dromara.common.core.exception.ServiceException;
+import org.dromara.common.core.utils.DateUtils;
 import org.dromara.common.core.utils.MapstructUtils;
 import org.dromara.common.core.utils.StringUtils;
 import org.dromara.common.mybatis.core.page.PageQuery;
@@ -117,6 +116,7 @@ public class SmsbDeviceServiceImpl implements ISmsbDeviceService {
 
     /**
      * 根据租户ID查询设备列表
+     *
      * @param bo
      * @param pageQuery
      * @return
@@ -124,7 +124,7 @@ public class SmsbDeviceServiceImpl implements ISmsbDeviceService {
     @Override
     public TableDataInfo<SmsbDeviceVo> queryPageListByTenantId(SmsbDeviceBo bo, PageQuery pageQuery) {
         LambdaQueryWrapper<SmsbDevice> lqw = buildQueryWrapper(bo);
-        Page<SmsbDeviceVo> result = baseMapper.queryPageListByTenantId(pageQuery.build(),lqw,bo.getTenantId());
+        Page<SmsbDeviceVo> result = baseMapper.queryPageListByTenantId(pageQuery.build(), lqw, bo.getTenantId());
         return TableDataInfo.build(result);
     }
 
@@ -209,7 +209,7 @@ public class SmsbDeviceServiceImpl implements ISmsbDeviceService {
     /**
      * 保存前的数据校验
      */
-    private void validEntityBeforeSave(SmsbDevice entity){
+    private void validEntityBeforeSave(SmsbDevice entity) {
         // 做一些数据校验,如唯一约束
         boolean flag = this.checkExist(entity.getSerialNumber(), entity.getMac());
         if (flag) {
@@ -248,7 +248,7 @@ public class SmsbDeviceServiceImpl implements ISmsbDeviceService {
     @Cacheable(cacheNames = "global:msr:device:identifier", key = "#identifier")
     public SmsbDeviceVo getDeviceByIdentifier(String identifier) {
         return baseMapper.selectVoOne(new LambdaQueryWrapper<SmsbDevice>()
-                .eq(SmsbDevice::getIdentifier, identifier));
+            .eq(SmsbDevice::getIdentifier, identifier));
     }
 
     @Override
@@ -330,4 +330,22 @@ public class SmsbDeviceServiceImpl implements ISmsbDeviceService {
         messageDto.setUserIds(List.of(userId));
         SseMessageUtils.publishMessage(messageDto);
     }
+
+    @Override
+    public R<HttpHeartbeatRspVo> heartbeat(HttpHeartbeatReq requestParam) {
+        SmsbDeviceVo smsbDeviceVo = getDeviceByIdentifier(requestParam.getIdentifier());
+        if (smsbDeviceVo == null) {
+            return R.fail("设备不存在");
+        }
+        Long currentTime = System.currentTimeMillis();
+        // 1 缓存设备最后一次http 心跳时间
+        RedisUtils.setCacheObject(DeviceConstants.REDIS_DEVICE_HEARTBEAT_HTTP_KEY + requestParam.getIdentifier(), currentTime);
+        // 2 更新设备状态 若设备未在线 更新为在线
+        if (smsbDeviceVo.getOnlineStatus().equals(DeviceConstants.DEVICE_STATUS_ONLINE.longValue())) {
+            smsbDeviceVo.setOnlineStatus(DeviceConstants.DEVICE_STATUS_ONLINE.longValue());
+            smsbDeviceVo.setLastOnline(DateUtils.getNowDate());
+            updateDeviceStatus(smsbDeviceVo);
+        }
+        return R.ok();
+    }
 }

+ 1 - 1
smsb-modules/smsb-job/src/main/java/org/dromara/job/snailjob/DeviceStatusReviewExecutor.java

@@ -31,7 +31,7 @@ public class DeviceStatusReviewExecutor {
     /**
      * redis netty client last heartbeat key
      */
-    public static final String DEVICE_LAST_HEART_PREFIX = "device:heart:last:";
+    public static final String DEVICE_LAST_HEART_PREFIX = "global:device:heartbeat:netty:";
 
 
     @Autowired

+ 1 - 1
smsb-modules/smsb-netty/src/main/java/com/inspur/netty/util/NettyConstants.java

@@ -44,6 +44,6 @@ public class NettyConstants {
     /**
      * redis netty client last heartbeat key
      */
-    public static final String DEVICE_LAST_HEART_PREFIX = "device:heart:last:";
+    public static final String DEVICE_LAST_HEART_PREFIX = "global:device:heartbeat:netty:";
 
 }

+ 13 - 0
smsb-modules/smsb-source/src/main/java/com/inspur/source/controller/SmsbFrontController.java

@@ -1,6 +1,8 @@
 package com.inspur.source.controller;
 
 import cn.dev33.satoken.annotation.SaIgnore;
+import com.inspur.device.domain.bo.HttpHeartbeatReq;
+import com.inspur.device.domain.vo.HttpHeartbeatRspVo;
 import com.inspur.device.domain.vo.SmsbOtaRecordVo;
 import com.inspur.device.service.ISmsbDeviceService;
 import com.inspur.device.service.ISmsbOtaRecordService;
@@ -82,4 +84,15 @@ public class SmsbFrontController {
         return smsbDeviceService.screenshotUpload(identifier,timestamp, file);
     }
 
+    /**
+     * 前端设备心跳接口
+     *
+     * @param requestParam 主键
+     */
+    @SaIgnore
+    @PostMapping("/heartbeat")
+    public R<HttpHeartbeatRspVo> heartbeat(@RequestBody HttpHeartbeatReq requestParam) {
+        return smsbDeviceService.heartbeat(requestParam);
+    }
+
 }

+ 3 - 2
smsb-modules/smsb-source/src/main/java/com/inspur/source/controller/SmsbMinioDataController.java

@@ -82,7 +82,7 @@ public class SmsbMinioDataController extends BaseController {
     }
 
     /**
-     * 上传OSS对象存储
+     * 上传OSS对象存储 (舍弃)
      *
      * @param file 文件
      */
@@ -92,7 +92,8 @@ public class SmsbMinioDataController extends BaseController {
         if (ObjectUtil.isNull(file)) {
             return R.fail("上传文件不能为空");
         }
-        SysOssVo oss = smsbMinioDataService.uploadSmsb(file);
+        // SysOssVo oss = smsbMinioDataService.uploadSmsb(file);
+        SysOssVo oss = new SysOssVo();
         if (null == oss) {
             return R.fail("上传失败,已存在相同文件");
         }

+ 2 - 1
smsb-modules/smsb-source/src/main/java/com/inspur/source/service/impl/SmsbMinioDataServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.idrsolutions.image.png.PngCompressor;
+import com.inspur.device.domain.constants.ResultCodeEnum;
 import com.inspur.source.domain.*;
 import com.inspur.source.domain.bo.SmsbMinioDataBo;
 import com.inspur.source.domain.vo.*;
@@ -828,7 +829,7 @@ public class SmsbMinioDataServiceImpl implements ISmsbMinioDataService {
         // 根据Md5查询当前租户下是否存在相同文件
         SysOssVo sysOss = sysOssMapper.selectVoOne(new LambdaQueryWrapper<SysOss>().eq(SysOss::getFileMd5, md5));
         if (sysOss != null) {
-            return null;
+            throw new ServiceException(ResultCodeEnum.UPLOAD_REPEAT.getMessage(), Integer.parseInt(ResultCodeEnum.UPLOAD_REPEAT.getValue()));
         }
         String originalfileName = file.getOriginalFilename();
         String suffix = StringUtils.substring(originalfileName,

+ 3 - 3
smsb-plus-ui/src/api/smsb/device/device_run_type.ts

@@ -15,17 +15,17 @@ export interface DeviceRunInfoVO {
   /**
    * CPU
    */
-  cpuInfo: string;
+  cpuInfo: number;
 
   /**
    * 内存
    */
-  memoryInfo: string;
+  memoryInfo: number;
 
   /**
    * 硬盘
    */
-  diskInfo: string;
+  diskInfo: number;
 
   /**
    * rom版本