zhanghaijun лет назад: 2
Родитель
Сommit
305e95e5fc

+ 2 - 0
src/main/java/com/cec/plugins/config/properties/ProjectProperties.java

@@ -32,6 +32,8 @@ public class ProjectProperties {
         private int retries = 3;
         /** 间隔时间(毫秒) */
         private long delayMillis = 1000L;
+        /** 设备定时上报状态间隔 */
+        private long fixedDelay = 5000L;
 
 
         public String getHttpUtl(String url) {

+ 3 - 1
src/main/java/com/cec/plugins/controller/CollectController.java

@@ -6,6 +6,7 @@ import com.cec.plugins.domain.DtoPolicy;
 import com.cec.plugins.domain.ResultData;
 import com.cec.plugins.domain.reported.ReportedData;
 import com.cec.plugins.service.TaskService;
+import com.cec.plugins.service.task.ReportService;
 import com.cec.plugins.service.task.TaskCollectService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -31,6 +32,7 @@ import java.util.Optional;
 public class CollectController {
 
     private final TaskService taskService;
+    private final ReportService reportService;
     private final TaskCollectService taskCollectService;
 
     /** 数据采集配置下发接口 */
@@ -76,6 +78,6 @@ public class CollectController {
         data.setInstanceId(policy.getInstanceId());
         data.setStatus(0);
         data.setReason("执行成功");
-        taskService.reportPlatform("/config/api/v1/receivetaskstatus", data);
+        reportService.reportPlatform("/config/api/v1/receivetaskstatus", data);
     }
 }

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

@@ -3,10 +3,7 @@ package com.cec.plugins.controller;
 import cn.hutool.json.JSONUtil;
 import com.cec.plugins.domain.DtoPolicy;
 import com.cec.plugins.domain.ResultData;
-import com.cec.plugins.domain.reported.EvaluateDto;
-import com.cec.plugins.domain.reported.RegistrationDto;
-import com.cec.plugins.domain.reported.ReportedData;
-import com.cec.plugins.domain.reported.ServiceDto;
+import com.cec.plugins.domain.reported.*;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -58,4 +55,11 @@ public class DemoController {
         log.info("模拟上报接口,上报接口成功,评分数据:{}", JSONUtil.toJsonStr(dto));
         return ResultData.success();
     }
+
+    /** 模拟设备状态上报 */
+    @PostMapping("/data/api/v1/deviceState")
+    public ResultData evaluateData(@RequestBody @Validated DeviceDto dto) {
+        log.info("模拟设备状态上报,上报接口成功,设备状态数据:{}", JSONUtil.toJsonStr(dto));
+        return ResultData.success();
+    }
 }

+ 3 - 0
src/main/java/com/cec/plugins/domain/DtoTaskStatus.java

@@ -23,6 +23,9 @@ public class DtoTaskStatus extends BaseData {
     @Range(min = 0, max = 1, message = "任务标识错误,只能是0(开始)或者1(结束)")
     private Integer status;
 
+    // 任务类型(1 装备性能鉴定,2新技术研究,3安全性测试 4攻防训练 5其他训练任务)
+    private String applyTaskType;
+
     public Map<TaskEnum, Object> getRedisMapping() {
         Map<TaskEnum, Object> map = new HashMap<>();
         map.put(TaskEnum.TaskId, getTaskId());

+ 37 - 0
src/main/java/com/cec/plugins/domain/reported/DeviceDto.java

@@ -0,0 +1,37 @@
+package com.cec.plugins.domain.reported;
+
+import cn.hutool.core.util.StrUtil;
+import lombok.Data;
+import lombok.Getter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author zhanghaijun
+ * @version 1.0
+ * @date 2023/11/28 22:51
+ * @description [一句话描述该类的功能]
+ */
+@Data
+public class DeviceDto {
+    private String type = "3";
+    private List<DeviceItem> data = new ArrayList<>();
+
+    public void addDevice(String deviceId, String state) {
+        data.add(new DeviceItem(deviceId, state));
+    }
+
+    @Getter
+    public static class DeviceItem {
+        // 设备uuid
+        private final String deviceId;
+        // 0离线,1在线,2 设备资源占用中
+        private final String state;
+
+        public DeviceItem(String deviceId, String state) {
+            this.deviceId = deviceId;
+            this.state = StrUtil.firstNonEmpty(state, "0");
+        }
+    }
+}

+ 27 - 0
src/main/java/com/cec/plugins/enumerate/DeviceEnum.java

@@ -0,0 +1,27 @@
+package com.cec.plugins.enumerate;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @author zhanghaijun
+ * @date 2023/11/28 22:01
+ * @description [一句话描述该类的功能]
+ */
+@Getter
+@AllArgsConstructor
+public enum DeviceEnum {
+
+    CATS_OnlineState("CATS_OnlineState", "6a0b984d4d9d478a9f3c2f40c185c86b", "中心ATS仿真网络在线状态"),
+    CISCS_OnlineState("CISCS_OnlineState", "9be5ecbba9ee4394b16c955539cc91c5", "中心ISCS网络在线状态"),
+    CCKD_OnlineState("CCKD_OnlineState", "21adaac9aa9c4b12a68ef920b1eee07a", "中心乘客调网络在线状态"),
+    LATS_OnlineState("LATS_OnlineState", "8b1bc8c7691c4324902a5c886a4cce27", "车站ATS网络在线状态"),
+    LISCS_OnlineState("LISCS_OnlineState", "9a3210611fc241bba5163d9509d37a73", "车站ISCS网络在线状态"),
+    CScreen_OnlineState("CScreen_OnlineState", "c28a79944ed645d38a0cd1b1bdc53ad9", "调度大屏幕网络在线状态"),
+    CVOBC_OnlineState("CVOBC_OnlineState", "5f1e5f0514b1457a99e8fd2646263d75", "车载驾驶仿真系统网络在线状态"),
+    CSandBox_OnlineState("CSandBox_OnlineState", "93e39d4a08c84a1ca416b5ec8ead550d", "沙盘系统网络在线状态");
+
+    private final String key;
+    private final String uuid;
+    private final String describe;
+}

+ 7 - 25
src/main/java/com/cec/plugins/service/TaskService.java

@@ -12,6 +12,7 @@ import com.cec.plugins.domain.ResultData;
 import com.cec.plugins.domain.reported.*;
 import com.cec.plugins.enumerate.EstimateEnum;
 import com.cec.plugins.enumerate.TaskEnum;
+import com.cec.plugins.service.task.ReportService;
 import com.cec.plugins.utils.HttpUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -34,6 +35,7 @@ public class TaskService {
     private final ProjectProperties properties;
     private final RedisClientSource redisClientSource;
     private final RedisClientEvaluate redisClientEvaluate;
+    private final ReportService reportService;
 
     public boolean saveTaskToRedis(Map<TaskEnum, Object> map) {
         return redisClientSource.writeRedis(map);
@@ -71,7 +73,7 @@ public class TaskService {
         body.setServiceName(properties.getPlugin().getServiceName());
         body.setPort(properties.getPlugin().getPort());
         try {
-            reportPlatform("/api/v1/serviceRegistration", body);
+            reportService.reportPlatform("/api/v1/serviceRegistration", body);
         } catch (Exception e) {
             log.info("注册服务失败,异常信息:{}", e.getMessage());
         }
@@ -92,7 +94,7 @@ public class TaskService {
     public void reported(TaskEnum instances, Class<? extends ReportedTypeFactory.ReportedType> reportedClass, BaseData dto) {
         try {
             Object data = getReportedData(reportedClass).execute();
-            reportPlatform("/config/api/v1/receivetaskstatus", data);
+            reportService.reportPlatform("/config/api/v1/receivetaskstatus", data);
             if (null != instances) {
                 // 上报完毕重置请求Id
                 redisClientSource.setCacheObject(instances.getKey(), "");
@@ -106,7 +108,7 @@ public class TaskService {
             data.setInstanceId(dto.getInstanceId());
             data.setStatus(1);
             data.setReason("执行失败");
-            reportPlatform("/config/api/v1/receivetaskstatus", data);
+            reportService.reportPlatform("/config/api/v1/receivetaskstatus", data);
             log.info("{},上报失败数据,异常信息:{}", reportedClass.getName(), e.getMessage());
         }
     }
@@ -122,27 +124,7 @@ public class TaskService {
         data.setInstanceId(dto.getInstanceId());
         data.setStatus(1);
         data.setReason("任务资源被占用");
-        reportPlatform("/config/api/v1/receivetaskstatus", data);
-    }
-
-    public void reportPlatform(String apiUrl, Object body) {
-        ProjectProperties.PlatformModel platform = properties.getPlatform();
-        String url = platform.getHttpUtl(apiUrl);
-        try {
-            Object execute = (new RetryTemplate(platform.getRetries(), platform.getDelayMillis()) {
-                @Override
-                protected Object handle() {
-                    ResultData result = HttpUtils.post(url, body);
-                    if (result.codeSucceed()) {
-                        return result;
-                    }
-                    throw new RetryException(result.getRespMsg());
-                }
-            }).execute();
-            log.info("连接平台成功,请求url:{},返回结果:{}", url, Convert.toStr(execute));
-        } catch (Exception e) {
-            log.info("连接平台失败,请求url:{},异常信息:{}", url, e.getMessage());
-        }
+        reportService.reportPlatform("/config/api/v1/receivetaskstatus", data);
     }
 
     private RetryTemplate getReportedData(Class<? extends ReportedTypeFactory.ReportedType> reportedClass) {
@@ -182,6 +164,6 @@ public class TaskService {
         for (EstimateEnum item : EstimateEnum.values()) {
             data.addDataItem(item.getKey(), item.getDescribe(), StrUtil.firstNonEmpty(redisClientEvaluate.getCacheStr(item.getKey()), "0"));
         }
-        reportPlatform("/config/api/v1/evaluateData", data);
+        reportService.reportPlatform("/config/api/v1/evaluateData", data);
     }
 }

+ 35 - 0
src/main/java/com/cec/plugins/service/task/DeviceScheduleService.java

@@ -0,0 +1,35 @@
+package com.cec.plugins.service.task;
+
+import com.cec.plugins.config.properties.ProjectProperties;
+import com.cec.plugins.domain.reported.DeviceDto;
+import com.cec.plugins.enumerate.DeviceEnum;
+import com.cec.plugins.service.RedisClientSource;
+import lombok.*;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author zhanghaijun
+ * @date 2023/11/28 22:07
+ * @description [一句话描述该类的功能]
+ */
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class DeviceScheduleService {
+
+    private final RedisClientSource redisClientSource;
+    private final ReportService reportService;
+
+    @Async
+    @Scheduled(fixedDelayString = "${project.platform.fixed-delay}")
+    public void heartbeat() {
+        DeviceDto dto = new DeviceDto();
+        for (DeviceEnum deviceEnum : DeviceEnum.values()) {
+            dto.addDevice(deviceEnum.getUuid(), redisClientSource.getCacheStr(deviceEnum.getKey()));
+        }
+        reportService.reportPlatform("/data/api/v1/deviceState", dto);
+    }
+}

+ 44 - 0
src/main/java/com/cec/plugins/service/task/ReportService.java

@@ -0,0 +1,44 @@
+package com.cec.plugins.service.task;
+
+import cn.hutool.core.convert.Convert;
+import com.cec.plugins.config.properties.ProjectProperties;
+import com.cec.plugins.core.retry.RetryException;
+import com.cec.plugins.core.retry.RetryTemplate;
+import com.cec.plugins.domain.ResultData;
+import com.cec.plugins.utils.HttpUtils;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author zhanghaijun
+ * @date 2023/11/28 22:30
+ * @description [一句话描述该类的功能]
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class ReportService {
+
+    private final ProjectProperties properties;
+
+    public void reportPlatform(String apiUrl, Object body) {
+        ProjectProperties.PlatformModel platform = properties.getPlatform();
+        String url = platform.getHttpUtl(apiUrl);
+        try {
+            Object execute = (new RetryTemplate(platform.getRetries(), platform.getDelayMillis()) {
+                @Override
+                protected Object handle() {
+                    ResultData result = HttpUtils.post(url, body);
+                    if (result.codeSucceed()) {
+                        return result;
+                    }
+                    throw new RetryException(result.getRespMsg());
+                }
+            }).execute();
+            log.info("连接平台成功,请求url:{},返回结果:{}", url, Convert.toStr(execute));
+        } catch (Exception e) {
+            log.info("连接平台失败,请求url:{},异常信息:{}", url, e.getMessage());
+        }
+    }
+}

+ 2 - 3
src/main/java/com/cec/plugins/service/task/TaskCollectService.java

@@ -9,7 +9,6 @@ import com.cec.plugins.domain.DtoPolicy;
 import com.cec.plugins.enumerate.EstimateEnum;
 import com.cec.plugins.service.RedisClientEvaluate;
 import com.cec.plugins.service.RedisClientSource;
-import com.cec.plugins.service.TaskService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,7 +41,7 @@ public class TaskCollectService {
     @Autowired
     private RedisClientEvaluate redisClientEvaluate;
     @Autowired
-    private TaskService taskService;
+    private ReportService reportService;
     @Autowired
     private ThreadPoolTaskScheduler threadPoolTaskScheduler;
     private ScheduledFuture<?> future;
@@ -97,7 +96,7 @@ public class TaskCollectService {
             configList.add(reportItem);
         }
         report.setData(configList);
-        taskService.reportPlatform("/data/api/v1/collectData", report);
+        reportService.reportPlatform("/data/api/v1/collectData", report);
     }
 
     /**

+ 1 - 0
src/main/resources/application.yml

@@ -33,6 +33,7 @@ project:
     url: ${PLATFORM_URL:http://127.0.0.1:${server.port}}
     retries: ${PLATFORM_RETRIES:3}
     delay-millis: ${PLATFORM_DELAY-MILLIS:8000}
+    fixed-delay: 1000
   plugin:
     ip-address: ${PLUGIN_HOST:127.0.0.1}
     port: ${PLUGIN_PORT:${server.port}}