From b227536328dd9d244ca334cc02aae9524db513a1 Mon Sep 17 00:00:00 2001 From: PushM <584406942@qq.com> Date: Tue, 11 Jun 2024 00:05:53 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=A2=9E=E5=8A=A0=E6=8C=87=E4=BB=A4?= =?UTF-8?q?=E9=A6=96=E6=AC=A1=E4=B8=8B=E5=8F=91=E7=9A=84=E6=97=B6=E5=80=99?= =?UTF-8?q?=EF=BC=8C=E5=8F=91=E9=80=81RCP=E6=9F=A5=E8=AF=A2=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E5=88=B0RCP=E6=9F=A5=E8=AF=A2=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E3=80=82=202=E3=80=81=E5=8A=A8=E6=80=81=E8=A7=84=E5=88=99updat?= =?UTF-8?q?e=20bugfix=203=E3=80=81=E9=9D=99=E6=80=81=E8=A7=84=E5=88=99?= =?UTF-8?q?=E5=8D=8F=E8=AE=AE=E4=B8=BA=E7=A9=BA=EF=BC=8C=E7=94=9F=E6=88=90?= =?UTF-8?q?=E6=8C=87=E4=BB=A4=E6=97=B6=E5=80=99=E6=8A=A5=E9=94=99NULLPOINT?= =?UTF-8?q?=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../alertmessage/AlertMessageService.java | 11 ++- .../server/command/CommandService.java | 28 +++++--- .../protection/server/task/TaskService.java | 4 +- .../server/task/status/StateHandler.java | 72 ++++++++++++++++--- .../resources/mappers/DynamicRuleMapper.xml | 2 +- 5 files changed, 97 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/realtime/protection/server/alertmessage/AlertMessageService.java b/src/main/java/com/realtime/protection/server/alertmessage/AlertMessageService.java index d058a24..8016cf6 100644 --- a/src/main/java/com/realtime/protection/server/alertmessage/AlertMessageService.java +++ b/src/main/java/com/realtime/protection/server/alertmessage/AlertMessageService.java @@ -155,7 +155,16 @@ public class AlertMessageService { dynamicTaskCommandInfoList.get(0).getTaskId(), commandUUIDs)); } - + //发送RCP查询信号 + try { + if (isJudged){ + stateHandler.sendCommandRcpQuerySignal(commandUUIDs); + } + }catch (Exception e) { + log.info(String.format("动态任务首次指令查询RCP出错,任务id: %d,commandUUIDs: %s", + dynamicTaskCommandInfoList.get(0).getTaskId(), + commandUUIDs)); + } } private String insertAlertMessageOnly(AlertMessage alertMessage){ //alertmessage入库 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 850ef75..0d73a91 100644 --- a/src/main/java/com/realtime/protection/server/command/CommandService.java +++ b/src/main/java/com/realtime/protection/server/command/CommandService.java @@ -140,18 +140,30 @@ public class CommandService { //设置指令是否已经研判 Boolean success = commandMapper.setCommandJudged(commandId, isJudged); - //isJudged为true时,发送指令首次 下发信号 try { List commandUUIDs = Collections.singletonList(commandId); - if (isJudged){ - stateHandler.sendCommandDistributeSignal(commandUUIDs); + if (!isJudged) { + return success; } - }catch (Exception e) { - log.info(String.format("动态任务研判后任务首次指令下发c3出错,任务id: %d,commandUUIDs: %s", - queryCommandInfoByUUID(commandId).getTaskId(), - commandId)); + //指令首次下发 + try { + stateHandler.sendCommandDistributeSignal(commandUUIDs); + } catch (Exception e) { + log.info(String.format("动态任务研判后任务首次指令下发c3出错,任务id: %d,commandUUIDs: %s", + queryCommandInfoByUUID(commandId).getTaskId(), + commandId)); + } + //指令首次查询RCP + try { + stateHandler.sendCommandRcpQuerySignal(commandUUIDs); + } catch (Exception e) { + log.info(String.format("动态任务研判后任务首次查询RCP出错,任务id: %d,commandUUIDs: %s", + queryCommandInfoByUUID(commandId).getTaskId(), + commandId)); + } + }catch (Exception e){ + throw new IllegalArgumentException("指令研判状态修改失败,无效的指令"); } - return success; } diff --git a/src/main/java/com/realtime/protection/server/task/TaskService.java b/src/main/java/com/realtime/protection/server/task/TaskService.java index f432fba..68b930a 100644 --- a/src/main/java/com/realtime/protection/server/task/TaskService.java +++ b/src/main/java/com/realtime/protection/server/task/TaskService.java @@ -370,7 +370,9 @@ public class TaskService { staticCommandInfos.forEach(taskCommandInfo -> { // taskCommandInfo.setProtocolNum(); - taskCommandInfo.getFiveTupleWithMask().setProtocolNum(Integer.valueOf(taskCommandInfo.getFiveTupleWithMask().getProtocol())); + if (taskCommandInfo.getFiveTupleWithMask().getProtocol() != null) { + taskCommandInfo.getFiveTupleWithMask().setProtocolNum(Integer.valueOf(taskCommandInfo.getFiveTupleWithMask().getProtocol())); + } // taskCommandInfo.setMask(); }); 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 b9faa9a..42a76c2 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 @@ -30,14 +30,18 @@ public class StateHandler { private final WebClient client = WebClient.builder() - .baseUrl("http://192.168.107.49:8088") -// .baseUrl("http://10.58.72.151:8088") +// .baseUrl("http://192.168.107.49:8088") + .baseUrl("http://10.58.72.146: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") +// .baseUrl("http://10.26.22.123:17011") + .baseUrl("http://10.58.72.151:17011") + .build(); + + private final WebClient client_RCPquery = WebClient.builder() + .baseUrl("http://10.58.72.140:8088") .build(); protected Boolean handleStart(TaskService taskService, CommandService commandService, Long taskId) { @@ -125,15 +129,16 @@ public class StateHandler { // 如果是实时任务或者研判后处置任务,那么就需要在任务启动之后,立刻向动态规则中指定的系统发送日志筛选请求。 // 筛选完成后,系统返回日志,需要由接收端点提取字段,并且合成一条静态规则,再按照任务开始时间、结束时间和任务类型进行指令创建 private Boolean handleJudgedTaskStart(TaskService taskService, Task task) { - return sendFilters(taskService, task); +// return sendFilters(taskService, task); + return true; } private Boolean handleDynamicTaskStart(TaskService taskService, Task task) { // 将所有关联的动态规则审批状态修改为“已使用” taskService.updateDynamicRuleAuditStatusInTask(task.getTaskId(), AuditStatusEnum.USING); - return sendFilters(taskService, task); +// return sendFilters(taskService, task); -// return true; + return true; } private Boolean handleStaticTaskStart(CommandService commandService, TaskService taskService, Task task) { @@ -151,12 +156,18 @@ public class StateHandler { // 将command新建信号发送到c3下发程序 try { sendCommandDistributeSignal(commandUUIDs); - return true; } catch (Exception e) { log.error(String.format("静态任务%d 首次指令下发c3出错",task.getTaskId())); return true; } - + // 将command查询RCP信号发送到RCP查询程序 + try { + sendCommandRcpQuerySignal(commandUUIDs); + } catch (Exception e) { + log.error(String.format("静态任务%d 首次指令查询RCP出错",task.getTaskId())); + return true; + } + return true; } public Boolean sendCommandDistributeSignal(List commandUUIDs) { @@ -197,6 +208,49 @@ public class StateHandler { return success.get(); } + + + public Boolean sendCommandRcpQuerySignal(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_RCPquery.post() + .uri("/command") + .bodyValue(commandIDMaps) + .accept(MediaType.APPLICATION_JSON) + .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) { + log.info("指令首次查询RCP返回为null"); + return false; + } + response.forEach((commandUUID, responseCode) -> { + log.info("指令首次查询RCP成功, 指令uuid: " + commandUUID + ", responseCode: " + responseCode); + if (responseCode != 0) { + log.warn("指令首次查询RCP失败, 指令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/main/resources/mappers/DynamicRuleMapper.xml b/src/main/resources/mappers/DynamicRuleMapper.xml index 7a6b0cf..5545dd4 100644 --- a/src/main/resources/mappers/DynamicRuleMapper.xml +++ b/src/main/resources/mappers/DynamicRuleMapper.xml @@ -165,7 +165,7 @@ description = #{object.description}, source_system = #{object.dynamicRuleSourceSystem}, bw_sql = #{object.bwSql}, - modify_time = NOW() + modify_time = NOW(), audit_status = #{object.auditStatus} where dynamic_rule_id = #{dynamicRuleId}