Преглед на файлове

refactor: 系统日志订阅上报

zhanghaijun преди 2 години
родител
ревизия
d1578ebd2d

+ 8 - 1
src/main/java/com/cec/plugins/controller/DemoController.java

@@ -58,8 +58,15 @@ public class DemoController {
 
     /** 模拟设备状态上报 */
     @PostMapping("/data/api/v1/deviceState")
-    public ResultData evaluateData(@RequestBody @Validated DeviceDto dto) {
+    public ResultData deviceState(@RequestBody @Validated DeviceDto dto) {
         log.info("模拟设备状态上报,上报接口成功,设备状态数据:{}", JSONUtil.toJsonStr(dto));
         return ResultData.success();
     }
+
+    /** 模拟系统日志上报 */
+    @PostMapping("/data/api/v1/systemLog")
+    public ResultData systemLog(@RequestBody @Validated SystemLogDto dto) {
+        log.info("模拟系统日志上报,上报接口成功,系统日志数据:{}", JSONUtil.toJsonStr(dto));
+        return ResultData.success();
+    }
 }

+ 35 - 0
src/main/java/com/cec/plugins/domain/reported/SystemLogDto.java

@@ -0,0 +1,35 @@
+package com.cec.plugins.domain.reported;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author zhanghaijun
+ * @date 2023/11/28 23:03
+ * @description [一句话描述该类的功能]
+ */
+@Data
+public class SystemLogDto {
+
+    private String taskId;
+    private String type = "3";
+    private List<LogItem> data = new ArrayList<>();
+
+    public void addLog(LogItem item) {
+        this.data.add(item);
+    }
+
+    @Data
+    public static class LogItem {
+        // 日志id
+        private String recordId;
+        // 日志时间
+        private String recordTime;
+        // 日志类别
+        private String sysLogType;
+        // 日志内容
+        private String sysLog;
+    }
+}

+ 48 - 0
src/main/java/com/cec/plugins/service/task/LogService.java

@@ -0,0 +1,48 @@
+package com.cec.plugins.service.task;
+
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import com.cec.plugins.domain.reported.SystemLogDto;
+import com.cec.plugins.enumerate.TaskEnum;
+import com.cec.plugins.service.RedisClientSource;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.ApplicationArguments;
+import org.springframework.boot.ApplicationRunner;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author zhanghaijun
+ * @date 2023/11/28 23:00
+ * @description [一句话描述该类的功能]
+ */
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class LogService implements ApplicationRunner {
+
+    private final RedisClientSource redisClientSource;
+    private final ReportService reportService;
+
+    @Override
+    public void run(ApplicationArguments args) throws Exception {
+        log.info("订阅redis, key: {}", "LOGINFO");
+        redisClientSource.subscribe("LOGINFO", SystemLogDto.LogItem.class, logItem -> {
+            SystemLogDto dto = new SystemLogDto();
+            String taskId = redisClientSource.getCacheStr(TaskEnum.TaskId.getKey());
+            if (StrUtil.isBlank(taskId)) {
+                log.error("------系统日志上报,任务Id为空");
+            }
+            dto.setTaskId(StrUtil.firstNonBlank(taskId, ""));
+            if (StrUtil.isBlank(logItem.getRecordId())) {
+                logItem.setRecordId(IdUtil.fastSimpleUUID());
+            }
+            if (StrUtil.isBlank(logItem.getRecordTime())) {
+                logItem.setRecordTime(DateUtil.now());
+            }
+            dto.addLog(logItem);
+            reportService.reportPlatform("/data/api/v1/systemLog", dto);
+        });
+    }
+}