Bladeren bron

feat:新增根据设备对象状态统计数据方法
feat:新增更新最后一次心跳时间方法
feat:新增更新最后一次登录时间方法
feat:新增根据deviceId获取targetId列表方法

黄渊昊 6 maanden geleden
bovenliggende
commit
1e41fe57cc

+ 12 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/entity/MonitorTarget.java

@@ -118,4 +118,16 @@ public class MonitorTarget {
      */
     @TableField(exist = false)
     private List<MonitorTargetRegion> monitorTargetRegionList;
+
+    /**
+     * 最后心跳时间
+     */
+    @Schema(description = "最后心跳时间")
+    private Date lastHeartbeatTime;
+
+    /**
+     * 最近登录时间
+     */
+    @Schema(description = "最近登录时间")
+    private Date lastLoginTime;
 }

+ 13 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/MonitorTargetEditParam.java

@@ -17,6 +17,8 @@ import jakarta.validation.constraints.NotBlank;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.Date;
+
 /**
  * 监控对象管理编辑参数
  *
@@ -82,4 +84,15 @@ public class MonitorTargetEditParam {
     @Schema(description = "报警下限")
     private String limitDown;
 
+    /**
+     * 最后心跳时间
+     */
+    @Schema(description = "最后心跳时间")
+    private Date lastHeartbeatTime;
+
+    /**
+     * 最近登录时间
+     */
+    @Schema(description = "最近登录时间")
+    private Date lastLoginTime;
 }

+ 29 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/param/TargetStatus.java

@@ -0,0 +1,29 @@
+package vip.xiaonuo.coldchain.modular.monitortarget.param;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author jackzhou
+ * @version 1.0
+ * @project jfcloud-coldchain
+ * @description
+ * @date 2024/11/21 16:29:37
+ */
+@Data
+public class TargetStatus {
+    @Schema(description = "设备总数")
+    private int total = 0;
+    @Schema(description = "在线设备总数")
+    private int online = 0;
+    @Schema(description = "离线设备总数")
+    private int offline = 0;
+
+    // 构造函数
+    public TargetStatus(int totalDevices, int onlineDevices, int offlineDevices) {
+        this.total = totalDevices;
+        this.online = onlineDevices;
+        this.offline = offlineDevices;
+    }
+
+}

+ 17 - 4
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/MonitorTargetService.java

@@ -15,11 +15,9 @@ package vip.xiaonuo.coldchain.modular.monitortarget.service;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import vip.xiaonuo.coldchain.modular.monitortarget.entity.MonitorTarget;
-import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetAddParam;
-import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetEditParam;
-import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetIdParam;
-import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetPageParam;
+import vip.xiaonuo.coldchain.modular.monitortarget.param.*;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -87,4 +85,19 @@ public interface MonitorTargetService extends IService<MonitorTarget> {
      * 根据用户获取监控对象管理分页
      */
     Page<MonitorTarget> getPageByUser(MonitorTargetPageParam monitorTargetPageParam);
+
+    /**
+     * 根据设备对象状态统计数据
+     */
+    TargetStatus getTargetCount();
+
+    /**
+     * 更新最后一次心跳时间
+     */
+    boolean updateLastHeartbeatTimeByDeviceId(Integer deviceId, Date timestamp);
+
+    /**
+     * 更新最后一次登录时间
+     */
+    boolean updateLastLoginTimeByDeviceId(Integer deviceId, Date timestamp);
 }

+ 47 - 6
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortarget/service/impl/MonitorTargetServiceImpl.java

@@ -27,10 +27,7 @@ import vip.xiaonuo.coldchain.modular.monitordevice.entity.MonitorDevice;
 import vip.xiaonuo.coldchain.modular.monitordevice.service.MonitorDeviceService;
 import vip.xiaonuo.coldchain.modular.monitortarget.entity.MonitorTarget;
 import vip.xiaonuo.coldchain.modular.monitortarget.mapper.MonitorTargetMapper;
-import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetAddParam;
-import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetEditParam;
-import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetIdParam;
-import vip.xiaonuo.coldchain.modular.monitortarget.param.MonitorTargetPageParam;
+import vip.xiaonuo.coldchain.modular.monitortarget.param.*;
 import vip.xiaonuo.coldchain.modular.monitortarget.service.MonitorTargetService;
 import vip.xiaonuo.coldchain.modular.monitortargetregion.entity.MonitorTargetRegion;
 import vip.xiaonuo.coldchain.modular.monitortargetregion.service.MonitorTargetRegionService;
@@ -38,6 +35,8 @@ import vip.xiaonuo.common.enums.CommonSortOrderEnum;
 import vip.xiaonuo.common.exception.CommonException;
 import vip.xiaonuo.common.page.CommonPageRequest;
 
+import java.util.ArrayList;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -121,7 +120,7 @@ public class MonitorTargetServiceImpl extends ServiceImpl<MonitorTargetMapper, M
     public List<MonitorTarget> getListByUser(String userId) {
         LambdaQueryWrapper<MonitorTarget> queryWrapper = new LambdaQueryWrapper<MonitorTarget>();
         if (ObjectUtil.isNotNull(userId)) {
-            queryWrapper.eq(MonitorTarget::getCreateBy,userId).orderByDesc(MonitorTarget::getCreateTime);
+            queryWrapper.eq(MonitorTarget::getCreateBy, userId).orderByDesc(MonitorTarget::getCreateTime);
         }
         queryWrapper.orderByDesc(MonitorTarget::getCreateTime);
         List<MonitorTarget> monitorTargetList = list(queryWrapper);
@@ -144,7 +143,7 @@ public class MonitorTargetServiceImpl extends ServiceImpl<MonitorTargetMapper, M
         } else {
             queryWrapper.lambda().orderByAsc(MonitorTarget::getId);
         }
-        queryWrapper.lambda().eq(MonitorTarget::getCreateBy,monitorTargetPageParam.getUserId());
+        queryWrapper.lambda().eq(MonitorTarget::getCreateBy, monitorTargetPageParam.getUserId());
         Page<MonitorTarget> page = this.page(CommonPageRequest.defaultPage(), queryWrapper);
         //获取设备区域列表并赋值返回
         page.getRecords().forEach(monitorTarget -> {
@@ -153,4 +152,46 @@ public class MonitorTargetServiceImpl extends ServiceImpl<MonitorTargetMapper, M
         return page;
     }
 
+    @Override
+    public TargetStatus getTargetCount() {
+        List<MonitorTarget> monitorTargetList = list();
+        LambdaQueryWrapper<MonitorTarget> onlineQueryWrapper = new LambdaQueryWrapper<>();
+        onlineQueryWrapper.eq(MonitorTarget::getStatus, "1");
+        List<MonitorTarget> monitorTargetListOnline = list(onlineQueryWrapper);
+        LambdaQueryWrapper<MonitorTarget> offlineQueryWrapper = new LambdaQueryWrapper<>();
+        offlineQueryWrapper.eq(MonitorTarget::getStatus, "2");
+        List<MonitorTarget> monitorTargetListOffline = list(offlineQueryWrapper);
+        return new TargetStatus(monitorTargetList.size(), monitorTargetListOnline.size(), monitorTargetListOffline.size());
+    }
+
+    @Override
+    public boolean updateLastHeartbeatTimeByDeviceId(Integer deviceId, Date timestamp) {
+        List<String> targetIdList = monitorTargetRegionService.getTargetIdListByDeviceId(deviceId.toString());
+        if (ObjectUtil.isEmpty(targetIdList)) {
+            return false;
+        }
+        List<MonitorTarget> monitorTargetList = new ArrayList<>();
+        for (String targetId : targetIdList) {
+            MonitorTarget monitorTarget = queryEntity(targetId);
+            monitorTarget.setLastHeartbeatTime(timestamp);
+            monitorTargetList.add(monitorTarget);
+        }
+        return updateBatchById(monitorTargetList);
+    }
+
+    @Override
+    public boolean updateLastLoginTimeByDeviceId(Integer deviceId, Date timestamp) {
+        List<String> targetIdList = monitorTargetRegionService.getTargetIdListByDeviceId(deviceId.toString());
+        if (ObjectUtil.isEmpty(targetIdList)) {
+            return false;
+        }
+        List<MonitorTarget> monitorTargetList = new ArrayList<>();
+        for (String targetId : targetIdList) {
+            MonitorTarget monitorTarget = queryEntity(targetId);
+            monitorTarget.setLastLoginTime(timestamp);
+            monitorTargetList.add(monitorTarget);
+        }
+        return updateBatchById(monitorTargetList);
+    }
+
 }

+ 5 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/service/MonitorTargetRegionService.java

@@ -88,4 +88,9 @@ public interface MonitorTargetRegionService extends IService<MonitorTargetRegion
      * 获取区域树
      */
     List<Tree<String>> tree();
+
+    /**
+     * 根据deviceId获取targetId列表
+     */
+    List<String> getTargetIdListByDeviceId(String deviceId);
 }

+ 12 - 0
snowy-plugin/snowy-plugin-coldchain/src/main/java/vip/xiaonuo/coldchain/modular/monitortargetregion/service/impl/MonitorTargetRegionServiceImpl.java

@@ -45,6 +45,7 @@ import vip.xiaonuo.common.enums.CommonSortOrderEnum;
 import vip.xiaonuo.common.exception.CommonException;
 import vip.xiaonuo.common.page.CommonPageRequest;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -168,6 +169,17 @@ public class MonitorTargetRegionServiceImpl extends ServiceImpl<MonitorTargetReg
         return build;
     }
 
+    @Override
+    public List<String> getTargetIdListByDeviceId(String deviceId) {
+        LambdaQueryWrapper<MonitorTargetRegion> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(MonitorTargetRegion::getMonitorDeviceId,deviceId);
+        List<String> targetIdList = new ArrayList<>();
+        for (MonitorTargetRegion monitorTargetRegion : list(queryWrapper)) {
+            targetIdList.add(monitorTargetRegion.getMonitorTargetId());
+        }
+        return targetIdList;
+    }
+
     private void fillParentLocationInfo(List<MonitorTargetRegion> resourceList) {
         if (CollUtil.isNotEmpty(resourceList)) {
             List<MonitorTargetRegion> locationTypes = resourceList.stream().filter(distinctByKey(MonitorTargetRegion::getParentId)).collect(Collectors.toList());