diff --git a/src/main/java/com/dispose/common/ErrorCode.java b/src/main/java/com/dispose/common/ErrorCode.java index 4a1c24bb..7f731974 100644 --- a/src/main/java/com/dispose/common/ErrorCode.java +++ b/src/main/java/com/dispose/common/ErrorCode.java @@ -216,6 +216,10 @@ public enum ErrorCode { * The Err decrypt aes 256. */ ERR_DECRYPT_AES256(111, "AES256解密失败"), + /** + * The Err no device by areaCode. + */ + ERR_NODEVICE_AREACODE(111, "区域无该设备"), ; /** diff --git a/src/main/java/com/dispose/controller/DisposeTaskController.java b/src/main/java/com/dispose/controller/DisposeTaskController.java index b8c3086c..ca056266 100644 --- a/src/main/java/com/dispose/controller/DisposeTaskController.java +++ b/src/main/java/com/dispose/controller/DisposeTaskController.java @@ -103,9 +103,9 @@ public class DisposeTaskController { DisposeCapacityType capType = CommonEnumHandler.codeOf(DisposeCapacityType.class, req.getType()); String endTime = String.valueOf(req.getDisposeTime()); NetflowDirection netDir = CommonEnumHandler.codeOf(NetflowDirection.class, - Optional.ofNullable(req.getFlowDirection()).orElse(2)); + Optional.ofNullable(req.getFlowDirection()).orElse(2)); Long attackType = DDoSAttackType.getTypeMaskFromAttackType(Optional.ofNullable(req.getAttackType()) - .orElse(new Integer[]{DDoSAttackType.ALL_ATTACKS.getValue()})); + .orElse(new Integer[]{DDoSAttackType.ALL_ATTACKS.getValue()})); Integer flowBand = Optional.ofNullable(req.getFlowBandwidth()) .orElse(DisposeConfigValue.DEFAULT_DISPOSE_BANDWIDTH); @@ -120,6 +120,7 @@ public class DisposeTaskController { DisposeTask task = DisposeTask.builder() .deviceId(devId) .accountId(aId) + .areaCode(v.getAreaCode() == null ? -1 : v.getAreaCode()) .disposeCapacity(capType) .disposeObject(Helper.ipAddressNormalize(v.getDisposeObject())) .objectType(t) @@ -172,21 +173,22 @@ public class DisposeTaskController { // 构造处置任务参数 DisposeTask task = DisposeTask.builder() .deviceId(Long.parseLong(Optional.ofNullable(req.getId()).orElse("-1"))) + .areaCode(-1) .accountId(userAccountService.getUserIdByAuthHead(Objects.requireNonNull(headers.get("Authorization")) - .get(0))) + .get(0))) .disposeCapacity(CommonEnumHandler.codeOf(DisposeCapacityType.class, - req.getType())) + req.getType())) .disposeObject(Helper.ipAddressNormalize(req.getDisposeIp())) .objectType(DisposeObjectType.IP) .planEndTime(String.valueOf(req.getDisposeTime())) .flowDirection(CommonEnumHandler.codeOf(NetflowDirection.class, - Optional.ofNullable(req.getFlowDirection()) - .orElse(2))) + Optional.ofNullable(req.getFlowDirection()) + .orElse(2))) .attackType(DDoSAttackType.getTypeMaskFromAttackType( Optional.ofNullable(req.getAttackType()) .orElse(new Integer[]{DDoSAttackType.ALL_ATTACKS.getValue()}))) .flowBandWidth(Optional.ofNullable(req.getFlowBandwidth()) - .orElse(DisposeConfigValue.DEFAULT_DISPOSE_BANDWIDTH)) + .orElse(DisposeConfigValue.DEFAULT_DISPOSE_BANDWIDTH)) .build(); // 创建处置任务 @@ -233,9 +235,9 @@ public class DisposeTaskController { DisposeCapacityType capType = CommonEnumHandler.codeOf(DisposeCapacityType.class, req.getType()); String endTime = String.valueOf(req.getDisposeTime()); NetflowDirection netDir = CommonEnumHandler.codeOf(NetflowDirection.class, - Optional.ofNullable(req.getFlowDirection()).orElse(2)); + Optional.ofNullable(req.getFlowDirection()).orElse(2)); Long attackType = DDoSAttackType.getTypeMaskFromAttackType(Optional.ofNullable(req.getAttackType()) - .orElse(new Integer[]{DDoSAttackType.ALL_ATTACKS.getValue()})); + .orElse(new Integer[]{DDoSAttackType.ALL_ATTACKS.getValue()})); Integer flowBand = Optional.ofNullable(req.getFlowBandwidth()) .orElse(DisposeConfigValue.DEFAULT_DISPOSE_BANDWIDTH); @@ -248,6 +250,7 @@ public class DisposeTaskController { DisposeTask task = DisposeTask.builder() .deviceId(devId) .accountId(aId) + .areaCode(-1) .disposeCapacity(capType) .disposeObject(Helper.ipAddressNormalize(ip)) .objectType(DisposeObjectType.IP) @@ -308,9 +311,9 @@ public class DisposeTaskController { // 停止成功 if (ret.getFirstParam() == ErrorCode.ERR_OK) { rspInfo.setDisposeDevice(ret.getSecondParam().getDeviceTask().stream() - .map(DeviceTask::getDeviceId) - .map(String::valueOf) - .toArray(String[]::new)); + .map(DeviceTask::getDeviceId) + .map(String::valueOf) + .toArray(String[]::new)); rspInfo.setType(ret.getSecondParam().getDisposeCapacity().getValue()); rspInfo.setDisposeIp(ret.getSecondParam().getDisposeObject()); rspInfo.setLeftTime(String.valueOf(Math.abs( @@ -347,14 +350,14 @@ public class DisposeTaskController { //获取TaskId列表 List reqTaskIds = Arrays.stream(Optional.ofNullable(mr.getMsgContent().getTaskId()) - .orElse(new String[]{})) + .orElse(new String[]{})) .map(Long::parseLong) .collect(Collectors.toList()); MulReturnType, List> ret = disposeTaskService.getPageDisposeTask(reqTaskIds, - mr.getMsgContent().getStartPage(), - mr.getMsgContent().getPageSize()); + mr.getMsgContent().getStartPage(), + mr.getMsgContent().getPageSize()); // 分页信息 rspInfo.setCurPageNumber(ret.getFirstParam().getPageNum()); @@ -404,7 +407,7 @@ public class DisposeTaskController { } rspInfo.getItems().addAll(getTaskDetail.stream().sorted(Comparator.comparingLong((GetTaskDetail v) -> Long.parseLong(v.getTaskId()))) - .collect(Collectors.toList())); + .collect(Collectors.toList())); return ProtocolRespDTO.result(ErrorCode.ERR_OK, rspInfo); } diff --git a/src/main/java/com/dispose/manager/DisposeDeviceManager.java b/src/main/java/com/dispose/manager/DisposeDeviceManager.java index a79b810f..2dd64c04 100644 --- a/src/main/java/com/dispose/manager/DisposeDeviceManager.java +++ b/src/main/java/com/dispose/manager/DisposeDeviceManager.java @@ -50,9 +50,18 @@ public interface DisposeDeviceManager { Integer pageSize); /** - * Gets all dispose devices. + * Gets all normal dispose devices. * - * @return the all dispose devices + * @return the all normal dispose devices */ List getAllNormalDisposeDevices(); + + /** + * Gets dispose devices. + * + * @param devId the dev id + * @param areaCode the area code + * @return the dispose devices + */ + List getDisposeDevices(Long devId, Integer areaCode); } diff --git a/src/main/java/com/dispose/manager/DisposeTaskManager.java b/src/main/java/com/dispose/manager/DisposeTaskManager.java index a828f33b..63dd59fe 100644 --- a/src/main/java/com/dispose/manager/DisposeTaskManager.java +++ b/src/main/java/com/dispose/manager/DisposeTaskManager.java @@ -19,11 +19,12 @@ public interface DisposeTaskManager { * Gets dispose task. * * @param deviceId the device id + * @param areaCode the area code * @param disposeIp the dispose ip * @param capType the cap type * @return the dispose task */ - DisposeTask getDisposeTask(Long deviceId, String disposeIp, DisposeCapacityType capType); + DisposeTask getDisposeTask(Long deviceId, Integer areaCode, String disposeIp, DisposeCapacityType capType); /** * Add dispose task error code. @@ -65,16 +66,16 @@ public interface DisposeTaskManager { DisposeTask getDisposeTaskById(Long taskId); /** - * Gets dispose task by id. + * Gets dispose tasks. * - * @return the dispose task list + * @return the dispose tasks */ List getDisposeTasks(); /** * Gets pages of task. * - * @param taskId the task id + * @param taskId the task id * @param startPage the start page * @param pageSize the page size * @return the pages of task diff --git a/src/main/java/com/dispose/manager/impl/DisposeDeviceManagerImpl.java b/src/main/java/com/dispose/manager/impl/DisposeDeviceManagerImpl.java index e57cbbd1..3ec759b5 100644 --- a/src/main/java/com/dispose/manager/impl/DisposeDeviceManagerImpl.java +++ b/src/main/java/com/dispose/manager/impl/DisposeDeviceManagerImpl.java @@ -264,14 +264,27 @@ public class DisposeDeviceManagerImpl implements DisposeDeviceManager { } /** - * Gets all dispose devices. + * Gets all normal dispose devices. * - * @return the all dispose devices + * @return the all normal dispose devices */ @Override public List getAllNormalDisposeDevices() { return disposeDeviceMapper.selectAll().stream() - .filter(v -> v.getStatus() == ObjectStatus.NORMAL) - .collect(Collectors.toList()); + .filter(v -> v.getStatus() == ObjectStatus.NORMAL) + .collect(Collectors.toList()); + } + + + /** + * Gets dispose devices. + * + * @param devId the dev id + * @param areaCode the area code + * @return the dispose devices + */ + @Override + public List getDisposeDevices(Long devId, Integer areaCode) { + return disposeDeviceMapper.getDeviceByAreaCode(devId, areaCode); } } diff --git a/src/main/java/com/dispose/manager/impl/DisposeTaskManagerImpl.java b/src/main/java/com/dispose/manager/impl/DisposeTaskManagerImpl.java index 0759b9c2..0239af82 100644 --- a/src/main/java/com/dispose/manager/impl/DisposeTaskManagerImpl.java +++ b/src/main/java/com/dispose/manager/impl/DisposeTaskManagerImpl.java @@ -34,13 +34,14 @@ public class DisposeTaskManagerImpl implements DisposeTaskManager { * Gets dispose task. * * @param deviceId the device id + * @param areaCode the area code * @param disposeIp the dispose ip * @param capType the cap type * @return the dispose task */ @Override - public DisposeTask getDisposeTask(Long deviceId, String disposeIp, DisposeCapacityType capType) { - return disposeTaskMapper.getRunningTask(deviceId, capType, disposeIp); + public DisposeTask getDisposeTask(Long deviceId, Integer areaCode, String disposeIp, DisposeCapacityType capType) { + return disposeTaskMapper.getRunningTask(deviceId, areaCode, capType, disposeIp); } /** @@ -102,9 +103,9 @@ public class DisposeTaskManagerImpl implements DisposeTaskManager { } /** - * Gets dispose task by id. + * Gets dispose tasks. * - * @return the dispose task list + * @return the dispose tasks */ @Override public List getDisposeTasks() { @@ -114,7 +115,7 @@ public class DisposeTaskManagerImpl implements DisposeTaskManager { /** * Gets pages of task. * - * @param taskId the task id + * @param taskId the task id * @param startPage the start page * @param pageSize the page size * @return the pages of task @@ -129,7 +130,7 @@ public class DisposeTaskManagerImpl implements DisposeTaskManager { // 设置分页信息 PageHelper.startPage(startPage, pageSize); - if(taskId.size() > 0) { + if (taskId.size() > 0) { preList = disposeTaskMapper.selectPageById(taskId); } else { preList = disposeTaskMapper.selectPageAll(); @@ -138,8 +139,8 @@ public class DisposeTaskManagerImpl implements DisposeTaskManager { pageInfo = new PageInfo<>(preList); - if(taskId.size() == 0){ - return new MulReturnType<>(pageInfo, new ArrayList<>()); + if (taskId.size() == 0) { + return new MulReturnType<>(pageInfo, new ArrayList<>()); } List taskList = new ArrayList<>(disposeTaskMapper.selectByIdSet(taskId)); diff --git a/src/main/java/com/dispose/mapper/DisposeDeviceMapper.java b/src/main/java/com/dispose/mapper/DisposeDeviceMapper.java index 2effbfee..0766aa1b 100644 --- a/src/main/java/com/dispose/mapper/DisposeDeviceMapper.java +++ b/src/main/java/com/dispose/mapper/DisposeDeviceMapper.java @@ -94,4 +94,13 @@ public interface DisposeDeviceMapper { */ DisposeDevice getDeviceById(@Param("id") Long id); + + /** + * Gets deviceId by areaCode. + * + * @param areaCode the areaCode + * @return the list + */ + List getDeviceByAreaCode(@Param("id") Long id, @Param("areaCode") Integer areaCode); + } diff --git a/src/main/java/com/dispose/mapper/DisposeTaskMapper.java b/src/main/java/com/dispose/mapper/DisposeTaskMapper.java index 4c9bb3d8..3bdbdc4e 100644 --- a/src/main/java/com/dispose/mapper/DisposeTaskMapper.java +++ b/src/main/java/com/dispose/mapper/DisposeTaskMapper.java @@ -86,6 +86,7 @@ public interface DisposeTaskMapper { * @return the running task */ DisposeTask getRunningTask(@Param("deviceId") Long deviceId, + @Param("areaCode") Integer areaCode, @Param("capType") DisposeCapacityType capType, @Param("disposeObject") String disposeObject); diff --git a/src/main/java/com/dispose/pojo/dto/protocol/task/DisposeObject.java b/src/main/java/com/dispose/pojo/dto/protocol/task/DisposeObject.java index a0c6fee8..e17ac115 100644 --- a/src/main/java/com/dispose/pojo/dto/protocol/task/DisposeObject.java +++ b/src/main/java/com/dispose/pojo/dto/protocol/task/DisposeObject.java @@ -38,4 +38,9 @@ public class DisposeObject { @NotNull(message = "objectType 处置类型不能为空", groups = ValidGroups.TaskStartReqValid.class) @ValidBaseEnum(enumClass = DisposeObjectType.class, groups = ValidGroups.TaskStartReqValid.class) private Integer objectType; + + /** + * The Area code. + */ + private Integer areaCode; } diff --git a/src/main/java/com/dispose/pojo/entity/DisposeTask.java b/src/main/java/com/dispose/pojo/entity/DisposeTask.java index 679bdeb1..6d0c01b4 100644 --- a/src/main/java/com/dispose/pojo/entity/DisposeTask.java +++ b/src/main/java/com/dispose/pojo/entity/DisposeTask.java @@ -52,6 +52,10 @@ public class DisposeTask implements Serializable { * The Account id. */ private Long accountId; + /** + * The Area code. + */ + private Integer areaCode; /** * The Dispose capacity. */ diff --git a/src/main/java/com/dispose/service/DisposeDeviceManagerService.java b/src/main/java/com/dispose/service/DisposeDeviceManagerService.java index 4c532189..074a837c 100644 --- a/src/main/java/com/dispose/service/DisposeDeviceManagerService.java +++ b/src/main/java/com/dispose/service/DisposeDeviceManagerService.java @@ -55,4 +55,13 @@ public interface DisposeDeviceManagerService { * @return the all dispose device */ List getAllDisposeDevice(); + + /** + * Gets dispose device by area code. + * + * @param devId the dev id + * @param areaCode the area code + * @return the dispose device by area code + */ + List getDisposeDeviceByAreaCode(Long devId, Integer areaCode); } diff --git a/src/main/java/com/dispose/service/impl/DeviceTaskManagerServiceImpl.java b/src/main/java/com/dispose/service/impl/DeviceTaskManagerServiceImpl.java index 515bf466..e2034e2f 100644 --- a/src/main/java/com/dispose/service/impl/DeviceTaskManagerServiceImpl.java +++ b/src/main/java/com/dispose/service/impl/DeviceTaskManagerServiceImpl.java @@ -531,9 +531,12 @@ public class DeviceTaskManagerServiceImpl implements DeviceTaskManagerService { disposeAbilityRouterService.getAllAbilityDevices().stream() // 判断是否是当前设备的处置任务 .filter(f -> v.getDeviceId() == -1 || f.getDev().getId().equals(v.getDeviceId())) + // 判断是否是当前区域处置 + .filter(f -> v.getAreaCode() == -1 || f.getDev().getAreaCode().equals(v.getAreaCode())) // 当前设备是否支持该处置能力 .filter(c -> c.getDev().getDevCapacity().stream().anyMatch(m -> m.getCapacityType() == v .getDisposeCapacity())) + // 当前设备是否支持处置该IP .filter(c -> c.getDb().isCarryProtectIp(v.getDisposeObject())) .forEach(d -> { log.info("Add dispose task for device: {}", d.getDev()); diff --git a/src/main/java/com/dispose/service/impl/DisposeDeviceManagerServiceImpl.java b/src/main/java/com/dispose/service/impl/DisposeDeviceManagerServiceImpl.java index 15d9fa88..e92e62ad 100644 --- a/src/main/java/com/dispose/service/impl/DisposeDeviceManagerServiceImpl.java +++ b/src/main/java/com/dispose/service/impl/DisposeDeviceManagerServiceImpl.java @@ -89,7 +89,7 @@ public class DisposeDeviceManagerServiceImpl implements DisposeDeviceManagerServ DisposeDevice dev = new DisposeDevice(); MulReturnType ret = disposeDeviceManager.changeDisposeDeviceStatus(v, - ObjectStatus.DELETED); + ObjectStatus.DELETED); dev.setId(v); dev.setStatus(ret.getSecondParam()); @@ -128,4 +128,22 @@ public class DisposeDeviceManagerServiceImpl implements DisposeDeviceManagerServ return disposeDevices; } } + + /** + * Gets dispose device by area code. + * + * @param devId the dev id + * @param areaCode the area code + * @return the dispose device by area code + */ + @Override + public List getDisposeDeviceByAreaCode(Long devId, Integer areaCode) { + List disposeDevices = disposeDeviceManager.getDisposeDevices(devId, areaCode); + + if (disposeDevices == null) { + return new ArrayList<>(); + } else { + return disposeDevices; + } + } } diff --git a/src/main/java/com/dispose/service/impl/DisposeTaskServiceImpl.java b/src/main/java/com/dispose/service/impl/DisposeTaskServiceImpl.java index e245668e..15facbff 100644 --- a/src/main/java/com/dispose/service/impl/DisposeTaskServiceImpl.java +++ b/src/main/java/com/dispose/service/impl/DisposeTaskServiceImpl.java @@ -3,9 +3,11 @@ package com.dispose.service.impl; import com.dispose.common.DisposeTaskStatus; import com.dispose.common.ErrorCode; import com.dispose.manager.DisposeTaskManager; +import com.dispose.pojo.entity.DisposeDevice; import com.dispose.pojo.entity.DisposeTask; import com.dispose.pojo.po.MulReturnType; import com.dispose.service.DisposeAbilityRouterService; +import com.dispose.service.DisposeDeviceManagerService; import com.dispose.service.DisposeTaskService; import com.github.pagehelper.PageInfo; import org.springframework.stereotype.Service; @@ -32,6 +34,12 @@ public class DisposeTaskServiceImpl implements DisposeTaskService { @Resource DisposeAbilityRouterService disposeAbilityRouterService; + /** + * The Dispose device manager service. + */ + @Resource + DisposeDeviceManagerService disposeDeviceManagerService; + /** * Create task mul return type. * @@ -40,23 +48,31 @@ public class DisposeTaskServiceImpl implements DisposeTaskService { */ @Override public MulReturnType createTask(DisposeTask task) { - DisposeTask exitTask = disposeTaskManager.getDisposeTask(task.getDeviceId(), - task.getDisposeObject(), task.getDisposeCapacity()); + DisposeTask exitTask = disposeTaskManager.getDisposeTask(task.getDeviceId(), task.getAreaCode(), + task.getDisposeObject(), task.getDisposeCapacity()); if (exitTask != null) { return new MulReturnType<>(ErrorCode.ERR_TASKRUNNING, exitTask); } ErrorCode err = disposeAbilityRouterService.verifyDisposeCapacity( - task.getDeviceId(), task.getDisposeObject(), task.getDisposeCapacity() + task.getDeviceId(), task.getDisposeObject(), task.getDisposeCapacity() ); if (err != ErrorCode.ERR_OK) { return new MulReturnType<>(err, task); } - return new MulReturnType<>(disposeTaskManager.addDisposeTask(task), - disposeTaskManager.getDisposeTaskById(task.getId())); + //areaCode获取对应的deviceId + List devices = disposeDeviceManagerService.getDisposeDeviceByAreaCode(task.getDeviceId(), + task.getAreaCode()); + + if (devices.size() == 0) { + return new MulReturnType<>(ErrorCode.ERR_NODEVICE_AREACODE, task); + } else { + return new MulReturnType<>(disposeTaskManager.addDisposeTask(task), + disposeTaskManager.getDisposeTaskById(task.getId())); + } } /** diff --git a/src/main/resources/db/schema.sql b/src/main/resources/db/schema.sql index a3d9064c..f2cbf521 100644 --- a/src/main/resources/db/schema.sql +++ b/src/main/resources/db/schema.sql @@ -107,6 +107,7 @@ CREATE TABLE `dispose_task` `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '处置任务唯一标识符', `deviceId` int(10) NOT NULL COMMENT '处置设备唯一标识符', `accountId` int(10) UNSIGNED NOT NULL COMMENT '用户唯一标识符', + `areaCode` int(11) NOT NULL DEFAULT -1 COMMENT '设备物理位置区域码', `disposeCapacity` int(11) NOT NULL COMMENT '处置能力类型:0:清洗 1:高防 2:黑洞 3:检测', `disposeObject` varchar(4096) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '处置对象', `objectType` int(8) NOT NULL COMMENT '处置对象类型:\r\n0:IP\r\n1:域名 \r\n2:URL', diff --git a/src/main/resources/mappers/DisposeDevice.xml b/src/main/resources/mappers/DisposeDevice.xml index 73e8318d..de7b3b0f 100644 --- a/src/main/resources/mappers/DisposeDevice.xml +++ b/src/main/resources/mappers/DisposeDevice.xml @@ -35,15 +35,15 @@ + SELECT d.*, + c.id c_id, + c.deviceId deviceId, + c.capacityType capacityType, + c.objectType objectType, + c.ipType ipType, + c.protectIp protectIp, + c.reserveNetflow reserveNetflow + FROM dispose_device d + LEFT JOIN dispose_capacity c ON d.id = c.deviceId + + WHERE d.areaCode = #{areaCode} + + AND d.id = #{id} + + + + diff --git a/src/main/resources/mappers/DisposeTask.xml b/src/main/resources/mappers/DisposeTask.xml index 6970f96a..67b6375d 100644 --- a/src/main/resources/mappers/DisposeTask.xml +++ b/src/main/resources/mappers/DisposeTask.xml @@ -5,6 +5,7 @@ + @@ -121,6 +122,9 @@ AND dt.deviceId = #{deviceId} + + AND dt.areaCode = #{areaCode} +