From 49b9adf086768b30ea3baf1a4b813910e975e374 Mon Sep 17 00:00:00 2001 From: lifulian <418601623@qq.com> Date: Sat, 8 Jun 2024 15:01:38 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BB=BB=E5=8A=A1=E5=90=AF=E5=8A=A8?= =?UTF-8?q?=E6=97=B6=E5=B0=B1=E5=8F=91=E9=80=81=E6=8C=87=E4=BB=A4=202?= =?UTF-8?q?=E3=80=81=E6=96=B0=E5=A2=9E=E5=B1=80=E7=82=B9=E5=A4=9A=E7=BA=A7?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E8=A1=A8=E6=9F=A5=E8=AF=A2=203?= =?UTF-8?q?=E3=80=81=E9=9D=99=E6=80=81=E4=BB=BB=E5=8A=A1=E4=B8=8B=E5=8F=91?= =?UTF-8?q?=E6=8C=87=E4=BB=A4=E8=A1=A5=E5=85=85=E6=8C=87=E4=BB=A4=E5=B1=95?= =?UTF-8?q?=E7=A4=BAid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../configuration/response/AuditAdvice.java | 4 +- .../server/command/CommandService.java | 15 +++- .../server/nodetree/NodeEntity.java | 40 ++++++++++ .../server/nodetree/NodeTreeController.java | 40 ++++++++++ .../server/nodetree/NodeTreeMapper.java | 15 ++++ .../server/nodetree/NodeTreeService.java | 52 +++++++++++++ .../task/status/StateChangeService.java | 23 +++++- .../server/task/status/StateHandler.java | 50 ++++++++++++- .../server/task/TaskServiceTest.java | 75 ++++++++----------- 9 files changed, 267 insertions(+), 47 deletions(-) create mode 100644 src/main/java/com/realtime/protection/server/nodetree/NodeEntity.java create mode 100644 src/main/java/com/realtime/protection/server/nodetree/NodeTreeController.java create mode 100644 src/main/java/com/realtime/protection/server/nodetree/NodeTreeMapper.java create mode 100644 src/main/java/com/realtime/protection/server/nodetree/NodeTreeService.java diff --git a/src/main/java/com/realtime/protection/configuration/response/AuditAdvice.java b/src/main/java/com/realtime/protection/configuration/response/AuditAdvice.java index 123e70e..570bede 100644 --- a/src/main/java/com/realtime/protection/configuration/response/AuditAdvice.java +++ b/src/main/java/com/realtime/protection/configuration/response/AuditAdvice.java @@ -51,8 +51,8 @@ public class AuditAdvice implements ResponseBodyAdvice { @Override public boolean supports(MethodParameter returnType, Class> converterType) { -// return false; - return true; + return false; +// return true; } @Override diff --git a/src/main/java/com/realtime/protection/server/command/CommandService.java b/src/main/java/com/realtime/protection/server/command/CommandService.java index 77d4e70..45b9362 100644 --- a/src/main/java/com/realtime/protection/server/command/CommandService.java +++ b/src/main/java/com/realtime/protection/server/command/CommandService.java @@ -66,12 +66,23 @@ public class CommandService { return commandInfo.getUUID(); } - public void createCommands(List taskCommandInfos) { + public List createCommands(List taskCommandInfos) { + + List commandUUIDs = ListUtils.newArrayListWithExpectedSize(taskCommandInfos.size()); + Function, Boolean>> function = mapper -> list -> { List taskCommandInfoBatch = ListUtils.newArrayListWithExpectedSize(BatchSize); for (TaskCommandInfo info : list) { info.setUUID(UUID.randomUUID().toString()); + commandUUIDs.add(info.getUUID()); + info.setDisplayId( + "ZL-" + + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd")) + + "-" + + String.format("%06d", counter.generateId("command")) + ); taskCommandInfoBatch.add(info); + if (taskCommandInfoBatch.size() < BatchSize) { continue; } @@ -91,6 +102,8 @@ public class CommandService { }; sqlSessionWrapper.startBatchSession(CommandMapper.class, function, taskCommandInfos); + + return commandUUIDs; } public List queryCommandInfos(Long taskId, diff --git a/src/main/java/com/realtime/protection/server/nodetree/NodeEntity.java b/src/main/java/com/realtime/protection/server/nodetree/NodeEntity.java new file mode 100644 index 0000000..7842914 --- /dev/null +++ b/src/main/java/com/realtime/protection/server/nodetree/NodeEntity.java @@ -0,0 +1,40 @@ +package com.realtime.protection.server.nodetree; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +//李福连 + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class NodeEntity { + int id; + int parent_id; + String code; + String dict_key; + String dict_value; + int sort; + String remark; + int is_deleted; + // 子节点列表 + List children = new ArrayList<>(); + + public NodeEntity(int id, int parent_id, String code, String dict_key, String dict_value, int sort, String remark, int is_deleted) { + this.id = id; + this.parent_id = parent_id; + this.code = code; + this.dict_key = dict_key; + this.dict_value = dict_value; + this.sort = sort; + this.remark = remark; + this.is_deleted = is_deleted; + } +} diff --git a/src/main/java/com/realtime/protection/server/nodetree/NodeTreeController.java b/src/main/java/com/realtime/protection/server/nodetree/NodeTreeController.java new file mode 100644 index 0000000..f864fb5 --- /dev/null +++ b/src/main/java/com/realtime/protection/server/nodetree/NodeTreeController.java @@ -0,0 +1,40 @@ +package com.realtime.protection.server.nodetree; + + +import com.realtime.protection.configuration.response.ResponseResult; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.util.List; + +//李福连 + + +@RestController +@RequestMapping("/nodeTree") +@Slf4j +public class NodeTreeController { + + @Autowired + NodeTreeService nodeTreeService; + @GetMapping("/get") + public ResponseResult tupoInfo(String business) throws IOException { + + List roots = nodeTreeService.get(); + + + if (!roots.isEmpty()) { + return ResponseResult.ok() + .setData("data", roots); + } + + return ResponseResult.error() + .setMessage("没有查到"); + } + + +} diff --git a/src/main/java/com/realtime/protection/server/nodetree/NodeTreeMapper.java b/src/main/java/com/realtime/protection/server/nodetree/NodeTreeMapper.java new file mode 100644 index 0000000..4f91af5 --- /dev/null +++ b/src/main/java/com/realtime/protection/server/nodetree/NodeTreeMapper.java @@ -0,0 +1,15 @@ +package com.realtime.protection.server.nodetree; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +//李福连 + +@Mapper +public interface NodeTreeMapper { + + @Select("select * from realtime_protection.t_judian_dict where is_deleted=0") + List get(); +} diff --git a/src/main/java/com/realtime/protection/server/nodetree/NodeTreeService.java b/src/main/java/com/realtime/protection/server/nodetree/NodeTreeService.java new file mode 100644 index 0000000..6f2b411 --- /dev/null +++ b/src/main/java/com/realtime/protection/server/nodetree/NodeTreeService.java @@ -0,0 +1,52 @@ +package com.realtime.protection.server.nodetree; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +//李福连 + +@Service +public class NodeTreeService { + @Autowired + NodeTreeMapper nodeTreeMapper; + + public List get() { + List nodes= nodeTreeMapper.get(); + + // 用于存储每个节点的id和节点对象的映射 + Map nodeMap = new HashMap<>(); + + // 用于存储所有根节点 + List roots = new ArrayList<>(); + + // 将所有节点放入map中,以便根据id快速查找 + for (NodeEntity node : nodes) { + nodeMap.put(node.id, node); + } + + // 建立树结构 + for (NodeEntity node : nodes) { + if (node.parent_id == 0) { + // 如果parent_id为0,说明这是一个根节点 + roots.add(node); + } else { + // 根据parent_id找到父节点,然后将当前节点加入父节点的children列表中 + NodeEntity parentNode = nodeMap.get(node.parent_id); + if (parentNode != null) { + parentNode.children.add(node); + } + } + } + + + return roots; + + } +} diff --git a/src/main/java/com/realtime/protection/server/task/status/StateChangeService.java b/src/main/java/com/realtime/protection/server/task/status/StateChangeService.java index f8ebefe..b806521 100644 --- a/src/main/java/com/realtime/protection/server/task/status/StateChangeService.java +++ b/src/main/java/com/realtime/protection/server/task/status/StateChangeService.java @@ -101,7 +101,7 @@ public class StateChangeService { /** * 将任务切换为结束状态 */ - @Scheduled(cron = "0 0/10 * * * ?") + @Scheduled(cron = "0/10 * * * * ?") @Async protected void finishTasks() { List finishedTaskIds = taskService.getFinishedTasks(); @@ -117,4 +117,25 @@ public class StateChangeService { } } + +// /** +// * 将任务切换为开始状态 +// */ +// @Scheduled(cron = "0/10 * * * * ?") +// @Async +// protected void startTasks() { +// List startedTaskIds = taskService.getFinishedTasks(); +// log.debug("成功扫描出所有需要变为开始状态的任务:{}", startedTaskIds); +// +// for (Long taskId : startedTaskIds) { +// try { +// changeState(StateEnum.RUNNING.getStateNum(), taskId, true); +// } catch (Exception e) { +// log.warn(String.format("任务%d从%s状态变为运行中RUNNING状态遭遇异常:%s", +// taskId, taskService.queryTaskStatus(taskId), e.getMessage())); +// } +// +// } +// } + } diff --git a/src/main/java/com/realtime/protection/server/task/status/StateHandler.java b/src/main/java/com/realtime/protection/server/task/status/StateHandler.java index 71dace0..26c9217 100644 --- a/src/main/java/com/realtime/protection/server/task/status/StateHandler.java +++ b/src/main/java/com/realtime/protection/server/task/status/StateHandler.java @@ -8,15 +8,19 @@ import com.realtime.protection.configuration.utils.enums.TaskTypeEnum; import com.realtime.protection.configuration.utils.enums.audit.AuditStatusEnum; import com.realtime.protection.server.command.CommandService; import com.realtime.protection.server.task.TaskService; +import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.web.reactive.function.client.*; import reactor.core.publisher.Mono; import org.springframework.web.reactive.function.client.WebClient; import java.time.Duration; +import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.concurrent.atomic.AtomicReference; +@Slf4j public class StateHandler { @@ -25,6 +29,12 @@ public class StateHandler { // .baseUrl("http://10.58.72.151:8088") .build(); + //http://10.26.22.123:17011/rule + private final WebClient client_commandDistribute = WebClient.builder() + .baseUrl("http://10.26.22.123:17011") +// .baseUrl("http://10.58.72.151:8088") + .build(); + protected Boolean handleStart(TaskService taskService, CommandService commandService, Long taskId) { Task task = taskService.queryTask(taskId); @@ -121,10 +131,48 @@ public class StateHandler { taskService.updateStaticRuleAuditStatusInTask(task.getTaskId(), AuditStatusEnum.USING); // taskService.changeTaskAuditStatus(task.getTaskId(), AuditStatusEnum.USING.getNum()); - commandService.createCommands(staticTaskCommandInfos); + List commandUUIDs= commandService.createCommands(staticTaskCommandInfos); + // 将command新建信号发送到c3下发程序 + sendCommandDistributeSignal(commandUUIDs); return true; } + private Boolean sendCommandDistributeSignal(List commandUUIDs) { + List> commandIDMaps = new ArrayList<>(); + for (String commandUUID : commandUUIDs) { + commandIDMaps.add(Map.of("COMMAND_ID", commandUUID)); + } + + AtomicReference success = new AtomicReference<>(false); + + + Mono mono = client_commandDistribute.post() + .uri("/rule") + .bodyValue(commandIDMaps) + .exchangeToMono(res -> { + if (res.statusCode().equals(HttpStatus.OK)) { + return res.bodyToMono(Map.class); + } + return res.createError(); + }) + .doOnError(WebClientResponseException.class, res -> success.set(false)); + + + Map response = mono.block(Duration.ofSeconds(5)); + + if (response == null) { + return false; + } + response.forEach((commandUUID, responseCode) -> { + if (!responseCode.equals("0")) { + log.error("指令首次下发失败, 指令uuid: " + commandUUID + ", responseCode: " + responseCode); + } + }); + + success.set(true); + + return success.get(); + } private Boolean sendFilters(TaskService taskService, Task task) { List dynamicTaskInfos = taskService.getDynamicTaskInfos(task.getTaskId()); diff --git a/src/test/java/com/realtime/protection/server/task/TaskServiceTest.java b/src/test/java/com/realtime/protection/server/task/TaskServiceTest.java index cea87ee..27d9ce7 100644 --- a/src/test/java/com/realtime/protection/server/task/TaskServiceTest.java +++ b/src/test/java/com/realtime/protection/server/task/TaskServiceTest.java @@ -236,58 +236,49 @@ class TaskServiceTest extends ProtectionApplicationTests { @Test void testStartStaticTask() throws DorisStartException { - for (int n = 10; n < 20; n++) { - List staticRuleIds = new ArrayList<>(); - for (int i = 10; i < 15; i++) { - StaticRuleObject staticRuleTest = new StaticRuleObject(); - staticRuleTest.setStaticRuleName(n+"test_staticrule" + i); - staticRuleTest.setStaticRuleCreateUsername("NSADD管理员"); - staticRuleTest.setStaticRuleCreateDepart("组织树"); - staticRuleTest.setStaticRuleCreateUserId(22222222); - staticRuleTest.setAuditStatus(0); - staticRuleTest.setStaticRuleSip("32.2.3." + i); - staticRuleTest.setStaticRuleDip(n + ".2.3.2"); - staticRuleService.newStaticRuleObject(staticRuleTest); - staticRuleIds.add(staticRuleTest.getStaticRuleId()); - staticRuleService.updateAuditStatus(staticRuleTest.getStaticRuleId(), 2, "xxx管理员", 1111111, "组织树"); + StaticRuleObject staticRuleTest = new StaticRuleObject(); + staticRuleTest.setStaticRuleName("test_staticrule"); + staticRuleTest.setStaticRuleCreateUsername("NSADD管理员"); + staticRuleTest.setStaticRuleCreateDepart("组织树"); + staticRuleTest.setStaticRuleCreateUserId(22222222); + staticRuleTest.setAuditStatus(0); - } + staticRuleTest.setStaticRuleSip("32.2.3.1"); + staticRuleTest.setStaticRuleDip("2.2.3.2"); + staticRuleService.newStaticRuleObject(staticRuleTest); +// staticRuleIds.add(staticRuleTest.getStaticRuleId()); + staticRuleService.updateAuditStatus(staticRuleTest.getStaticRuleId(), 2, "xxx管理员", 1111111, "组织树"); - Task task = new Task(); - task.setTaskName("静态task测试"+n); - - LocalDateTime taskStartTime = LocalDateTime.now().plusMinutes(1); - LocalDateTime taskEndTime = LocalDateTime.now().plusYears(5); - - task.setTaskStartTime(taskStartTime); - task.setTaskEndTime(taskEndTime); - task.setTaskAct("23"); - task.setTaskType(1); - task.setTaskRange("1007"); - - task.setTaskCreateUserId(111111); - task.setTaskCreateUsername("xxx管理员"); - task.setTaskCreateDepart("xxx"); - - task.setStaticRuleIds(staticRuleIds); - - List protectObject = protectObjectService.queryProtectObjects( - null, null, null, null, - null, null, null, null, - null, null, 1, 1); - Long taskId = taskService.newTask(task); + Task task = new Task(); + task.setTaskName("静态task测试s"); -// - taskService.changeTaskAuditStatus(taskId, 2); + LocalDateTime taskStartTime = LocalDateTime.now().plusMinutes(1); + LocalDateTime taskEndTime = LocalDateTime.now().plusYears(1); - stateChangeService.changeState(2, taskId, false); + task.setTaskStartTime(taskStartTime); + task.setTaskEndTime(taskEndTime); + task.setTaskAct("23"); + task.setTaskType(1); + task.setTaskRange("1007"); + + task.setTaskCreateUserId(111111); + task.setTaskCreateUsername("xxx管理员"); + task.setTaskCreateDepart("xxx"); + + task.setStaticRuleIds(List.of(staticRuleTest.getStaticRuleId())); + + Long taskId = taskService.newTask(task); + + taskService.changeTaskAuditStatus(taskId, 2); + + stateChangeService.changeState(2, taskId, false); // System.out.println(commandService.queryCommandInfos(taskId, null, null, null, null, 1, 5)); - } + } @Test