From 3d50cb94934c7aadecfa53ba4f4f32d80fa238f2 Mon Sep 17 00:00:00 2001 From: EnderByEndera <707475564@qq.com> Date: Mon, 22 Jan 2024 15:40:03 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E4=BF=AE=E6=94=B9=E9=98=B2=E6=8A=A4?= =?UTF-8?q?=E5=AF=B9=E8=B1=A1=E3=80=81=E7=AD=96=E7=95=A5=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E5=92=8C=E4=BB=BB=E5=8A=A1=E7=9A=84Swagger=E6=96=87=E6=A1=A3?= =?UTF-8?q?=202.=20=E4=BF=AE=E6=94=B9=E4=BB=BB=E5=8A=A1=E5=92=8C=E6=8C=87?= =?UTF-8?q?=E4=BB=A4=E9=83=A8=E5=88=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exception/GlobalExceptionHandler.java | 9 +- .../configuration/response/ResponseData.java | 17 - .../response/ResponseResult.java | 11 +- .../server/command/CommandMapper.java | 5 +- .../server/command/CommandService.java | 16 +- .../object/ProtectObjectController.java | 4 +- .../object/ProtectObjectControllerApi.java | 200 ++++++++++- .../defense/object/ProtectObjectMapper.java | 4 + .../defense/object/ProtectObjectService.java | 4 + .../defense/template/TemplateController.java | 5 +- .../template/TemplateControllerApi.java | 228 +++++++++++- .../defense/template/TemplateMapper.java | 6 + .../defense/template/TemplateService.java | 4 + .../server/task/TaskController.java | 17 +- .../server/task/TaskControllerApi.java | 324 +++++++++++++++++- .../protection/server/task/TaskMapper.java | 3 + .../protection/server/task/TaskService.java | 4 + src/main/resources/mappers/CommandMapper.xml | 10 +- 18 files changed, 790 insertions(+), 81 deletions(-) delete mode 100644 src/main/java/com/realtime/protection/configuration/response/ResponseData.java diff --git a/src/main/java/com/realtime/protection/configuration/exception/GlobalExceptionHandler.java b/src/main/java/com/realtime/protection/configuration/exception/GlobalExceptionHandler.java index 835ad1a..92c7067 100644 --- a/src/main/java/com/realtime/protection/configuration/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/realtime/protection/configuration/exception/GlobalExceptionHandler.java @@ -40,7 +40,6 @@ public class GlobalExceptionHandler { @Order(2) @ExceptionHandler(value = { PersistenceException.class, - DuplicateKeyException.class, SQLException.class, SQLIntegrityConstraintViolationException.class }) @@ -50,6 +49,14 @@ public class GlobalExceptionHandler { "请检查json字段的完整性,确保json字段按照文档中要求填写。"); } + @Order(2) + @ExceptionHandler(value = DuplicateKeyException.class) + public ResponseResult handleDuplicateKeyException(DuplicateKeyException e) { + return ResponseResult.invalid().setMessage( + "插入/更新失败,请检查当前插入字段和数据库中是否存在相同数据" + ); + } + @Order(2) @ExceptionHandler(value = MethodArgumentNotValidException.class) public ResponseResult handleBindException(MethodArgumentNotValidException e) { diff --git a/src/main/java/com/realtime/protection/configuration/response/ResponseData.java b/src/main/java/com/realtime/protection/configuration/response/ResponseData.java deleted file mode 100644 index 652a0bc..0000000 --- a/src/main/java/com/realtime/protection/configuration/response/ResponseData.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.realtime.protection.configuration.response; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.util.HashMap; - -@EqualsAndHashCode(callSuper = true) -@Data -@Schema(description = "xxx") -public class ResponseData extends HashMap { - - public Object put(String key, Object value, String description) { - return super.put(key, value); - } -} diff --git a/src/main/java/com/realtime/protection/configuration/response/ResponseResult.java b/src/main/java/com/realtime/protection/configuration/response/ResponseResult.java index 0071500..9e7e508 100644 --- a/src/main/java/com/realtime/protection/configuration/response/ResponseResult.java +++ b/src/main/java/com/realtime/protection/configuration/response/ResponseResult.java @@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.io.Serializable; +import java.util.LinkedHashMap; import java.util.Map; @Data @@ -17,12 +18,12 @@ public class ResponseResult implements Serializable { private String message; @Schema(description = "封装数据") - private ResponseData data; + private Map data; @Schema(description = "返回对象链接的另外一个返回对象") private ResponseResult another; - public ResponseResult(int code, String message, ResponseData data) { + public ResponseResult(int code, String message, LinkedHashMap data) { this.code = code; this.message = message; this.data = data; @@ -30,13 +31,13 @@ public class ResponseResult implements Serializable { public ResponseResult(int code) { this.code = code; - this.data = new ResponseData(); + this.data = new LinkedHashMap<>(); } public ResponseResult(int code, String message) { this.code = code; this.message = message; - this.data = new ResponseData(); + this.data = new LinkedHashMap<>(); } public static ResponseResult ok() { @@ -83,7 +84,7 @@ public class ResponseResult implements Serializable { } public ResponseResult addDataMap(Map data) { - this.data = (ResponseData) data; + this.data = data; return this; } } diff --git a/src/main/java/com/realtime/protection/server/command/CommandMapper.java b/src/main/java/com/realtime/protection/server/command/CommandMapper.java index 9c75370..26fae9a 100644 --- a/src/main/java/com/realtime/protection/server/command/CommandMapper.java +++ b/src/main/java/com/realtime/protection/server/command/CommandMapper.java @@ -18,9 +18,8 @@ public interface CommandMapper { Boolean startCommandsByTaskId(@Param("task_id") Long taskId); - Boolean setCommandValid(@Param("command_id") String commandId); - - Boolean setCommandInvalid(@Param("command_id") String commandId); + Boolean setCommandValid(@Param("command_id") String commandId, + @Param("is_valid") Boolean isValid); List queryCommandInfoByTaskId(@Param("task_id") Long taskId); 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 74863bc..36680de 100644 --- a/src/main/java/com/realtime/protection/server/command/CommandService.java +++ b/src/main/java/com/realtime/protection/server/command/CommandService.java @@ -2,11 +2,11 @@ package com.realtime.protection.server.command; import com.alibaba.excel.util.ListUtils; import com.baomidou.dynamic.datasource.annotation.DS; +import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.realtime.protection.configuration.entity.task.TaskCommandInfo; import com.realtime.protection.configuration.utils.SqlSessionWrapper; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.UUID; @@ -26,7 +26,7 @@ public class CommandService { this.sqlSessionWrapper = sqlSessionWrapper; } - @Transactional + @DSTransactional public String createCommand(TaskCommandInfo commandInfo) { commandInfo.setUUID(UUID.randomUUID().toString()); commandMapper.createCommand(commandInfo); @@ -75,20 +75,12 @@ public class CommandService { return commandMapper.stopCommandsByTaskId(taskId); } - @DS("doris") public Boolean removeCommandsByTaskId(Long taskId) { return commandMapper.removeCommandsByTaskId(taskId); } - @DS("doris") - public Object updateCommandVaid(String commandId, Integer isValid) { - if (isValid == 0) { - return commandMapper.setCommandInvalid(commandId); - } - if (isValid == 1) { - return commandMapper.setCommandValid(commandId); - } - return new IllegalArgumentException("isValid must be 0 or 1"); + public Object setCommandValid(String commandId, Boolean isValid) { + return commandMapper.setCommandValid(commandId, isValid); } diff --git a/src/main/java/com/realtime/protection/server/defense/object/ProtectObjectController.java b/src/main/java/com/realtime/protection/server/defense/object/ProtectObjectController.java index 71b3f6a..9115354 100644 --- a/src/main/java/com/realtime/protection/server/defense/object/ProtectObjectController.java +++ b/src/main/java/com/realtime/protection/server/defense/object/ProtectObjectController.java @@ -76,8 +76,8 @@ public class ProtectObjectController implements ProtectObjectControllerApi { @RequestParam("page_size") @Min(1) Integer pageSize) { return ResponseResult.ok() .setData("proobj_list", protectObjectService.queryProtectObjects(protectObjectName, - protectObjectId, page, pageSize)); - + protectObjectId, page, pageSize)) + .setData("total_num", protectObjectService.queryProtectObjectsTotalNum()); } @Override diff --git a/src/main/java/com/realtime/protection/server/defense/object/ProtectObjectControllerApi.java b/src/main/java/com/realtime/protection/server/defense/object/ProtectObjectControllerApi.java index 2901deb..af82c5d 100644 --- a/src/main/java/com/realtime/protection/server/defense/object/ProtectObjectControllerApi.java +++ b/src/main/java/com/realtime/protection/server/defense/object/ProtectObjectControllerApi.java @@ -5,6 +5,7 @@ import com.realtime.protection.configuration.response.ResponseResult; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; @@ -29,7 +30,28 @@ public interface ProtectObjectControllerApi { description = "返回新建对象结果", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = ResponseResult.class) + schema = @Schema(implementation = ResponseResult.class), + examples = @ExampleObject( + name = "example", + value = """ + { + "code": 200, + "message": "request succeed", + "data": { + "proobj_name": "静态对象测试", + "success": true, + "proobj_id": 14542 + } + } + """, + description = """ + "proobj_name": 防护对象名称 + + "success": 新建防护对象是否成功 + + "proobj_id": 新建防护对象ID + """ + ) ) ) }, @@ -80,7 +102,56 @@ public interface ProtectObjectControllerApi { description = "返回多个防护对象", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = ResponseResult.class) + schema = @Schema(implementation = ResponseResult.class), + examples = @ExampleObject( + name = "example", + value = """ + { + "code": 200, + "message": "request succeed", + "data": { + "proobj_list": [ + { + "proobj_id": 6068, + "proobj_name": "x-2-2", + "proobj_system_name": "xxxx system", + "proobj_port": 11, + "proobj_url": "alice.bob.com", + "proobj_protocol": "UDP", + "proobj_audit_status": 1 + }, + { + "proobj_id": 6069, + "proobj_name": "x-2-2", + "proobj_system_name": "xxxx system", + "proobj_port": 11, + "proobj_url": "alice.bob.com", + "proobj_protocol": "UDP", + "proobj_audit_status": 0 + } + ], + "total_num": 8470 + } + } + """, + description = """ + "proobj_id": 防护对象ID + + "proobj_name": 防护对象名称 + + "proobj_system_name": 防护对象操作系统 + + "proobj_ip_address": 防护对象IP地址 + + "proobj_port": 防护对象端口 + + "proobj_url": 防护对象URL + + "proobj_protocol": 防护对象协议 + + "proobj_audit_status": 防护对象审核状态 + """ + ) ) ) }, @@ -107,7 +178,44 @@ public interface ProtectObjectControllerApi { description = "返回单个防护对象信息", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = ResponseResult.class) + schema = @Schema(implementation = ResponseResult.class), + examples = @ExampleObject( + name = "example", + value = """ + { + "code": 200, + "message": "request succeed", + "data": { + "protect_object": { + "proobj_id": 14544, + "proobj_name": "静态对象测试", + "proobj_system_name": "xxx操作系统", + "proobj_port": 8080, + "proobj_url": "alice.bob.com", + "proobj_protocol": "TCP", + "proobj_audit_status": 0 + } + } + } + """, + description = """ + "proobj_id": 防护对象ID + + "proobj_name": 防护对象名称 + + "proobj_system_name": 防护对象操作系统 + + "proobj_ip_address": 防护对象IP地址 + + "proobj_port": 防护对象端口 + + "proobj_url": 防护对象URL + + "proobj_protocol": 防护对象协议 + + "proobj_audit_status": 防护对象审核状态 + """ + ) ) ) }, @@ -126,7 +234,25 @@ public interface ProtectObjectControllerApi { description = "防护对象更新情况", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = ResponseResult.class) + schema = @Schema(implementation = ResponseResult.class), + examples = @ExampleObject( + name = "example", + value = """ + { + "code": 200, + "message": "request succeed", + "data": { + "success": true, + "proobj_id": 14544 + } + } + """, + description = """ + "success": 防护对象更新是否成功 + + "proobj_id": 防护对象ID + """ + ) ) ) }, @@ -148,7 +274,25 @@ public interface ProtectObjectControllerApi { description = "防护对象删除情况", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = ResponseResult.class) + schema = @Schema(implementation = ResponseResult.class), + examples = @ExampleObject( + name = "example", + value = """ + { + "code": 200, + "message": "request succeed", + "data": { + "success": true, + "proobj_id": 14544 + } + } + """, + description = """ + "success": 防护对象删除是否成功 + + "proobj_id": 删除的防护对象ID + """ + ) ) ) }, @@ -167,7 +311,28 @@ public interface ProtectObjectControllerApi { description = "防护对象删除情况", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = ResponseResult.class) + schema = @Schema(implementation = ResponseResult.class), + examples = @ExampleObject( + name = "example", + value = """ + { + "code": 200, + "message": "request succeed", + "data": { + "success": true, + "proobj_ids": [ + 14543, + 14542 + ] + } + } + """, + description = """ + "success": 防护对象删除是否成功 + + "proobj_ids": 删除的防护对象ID列表 + """ + ) ) ) }, @@ -186,7 +351,28 @@ public interface ProtectObjectControllerApi { description = "防护对象审核状态修改情况", content = @Content( mediaType = "application/json", - schema = @Schema(implementation = ResponseResult.class) + schema = @Schema(implementation = ResponseResult.class), + examples = @ExampleObject( + name = "example", + value = """ + { + "code": 200, + "message": "request succeed", + "data": { + "success": true, + "proobj_id": 14541, + "audit_status": 2 + } + } + """, + description = """ + "success": 审核状态修改是否成功 + + "proobj_id": 防护对象ID + + "audit_status": 防护对象当前审核状态 + """ + ) ) ) }, diff --git a/src/main/java/com/realtime/protection/server/defense/object/ProtectObjectMapper.java b/src/main/java/com/realtime/protection/server/defense/object/ProtectObjectMapper.java index 76dc0d1..fbffeff 100644 --- a/src/main/java/com/realtime/protection/server/defense/object/ProtectObjectMapper.java +++ b/src/main/java/com/realtime/protection/server/defense/object/ProtectObjectMapper.java @@ -3,6 +3,7 @@ package com.realtime.protection.server.defense.object; import com.realtime.protection.configuration.entity.defense.object.ProtectObject; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; import java.util.List; @@ -27,4 +28,7 @@ public interface ProtectObjectMapper { Boolean changeProtectObjectAuditStatus(@Param("proobj_id") Integer protectObjectId, @Param("proobj_audit_status") Integer protectObjectAuditStatus); + + @Select("SELECT COUNT(protect_object_id) FROM t_protect_object") + Integer queryProtectObjectsTotalNum(); } diff --git a/src/main/java/com/realtime/protection/server/defense/object/ProtectObjectService.java b/src/main/java/com/realtime/protection/server/defense/object/ProtectObjectService.java index 11ce685..ed2e790 100644 --- a/src/main/java/com/realtime/protection/server/defense/object/ProtectObjectService.java +++ b/src/main/java/com/realtime/protection/server/defense/object/ProtectObjectService.java @@ -112,4 +112,8 @@ public class ProtectObjectService { return resultMap; } + + public Integer queryProtectObjectsTotalNum() { + return protectObjectMapper.queryProtectObjectsTotalNum(); + } } diff --git a/src/main/java/com/realtime/protection/server/defense/template/TemplateController.java b/src/main/java/com/realtime/protection/server/defense/template/TemplateController.java index 1a459ad..7eb4553 100644 --- a/src/main/java/com/realtime/protection/server/defense/template/TemplateController.java +++ b/src/main/java/com/realtime/protection/server/defense/template/TemplateController.java @@ -43,12 +43,13 @@ public class TemplateController implements TemplateControllerApi { List