diff --git a/src/main/java/com/dispose/common/ConstValue.java b/src/main/java/com/dispose/common/ConstValue.java index 6bcc1506..caded90a 100644 --- a/src/main/java/com/dispose/common/ConstValue.java +++ b/src/main/java/com/dispose/common/ConstValue.java @@ -54,10 +54,6 @@ public class ConstValue { * The type Protocol. */ public static class Protocol { - /** - * The constant RESP_CMD_BASE. - */ - public static final int RESP_CMD_BASE = 10000; /** * The constant VERSION. */ @@ -74,6 +70,8 @@ public class ConstValue { * The constant CRYPTO_AES256. */ public static final int CRYPTO_AES256 = 2; + + public static final int REQUEST_TIMEOUT_MS = 10 * 1000; } /** diff --git a/src/main/java/com/dispose/common/ErrorCode.java b/src/main/java/com/dispose/common/ErrorCode.java index b68a45a1..31c23039 100644 --- a/src/main/java/com/dispose/common/ErrorCode.java +++ b/src/main/java/com/dispose/common/ErrorCode.java @@ -130,7 +130,15 @@ public enum ErrorCode { */ ERR_NOSUCHTASK(30, "没有该任务"), + /** + * Err tasknotrunning error code. + */ ERR_TASKNOTRUNNING(31, "该任务没有运行"), + + /** + * Err requesttimeout error code. + */ + ERR_REQUESTTIMEOUT(32, "请求超时"), ; /** diff --git a/src/main/java/com/dispose/common/GlobalVar.java b/src/main/java/com/dispose/common/GlobalVar.java index 66ae3a47..f69e15de 100644 --- a/src/main/java/com/dispose/common/GlobalVar.java +++ b/src/main/java/com/dispose/common/GlobalVar.java @@ -25,4 +25,9 @@ public class GlobalVar { * The constant USED_VIRTUAL_DISPOSE_MODE. */ public static volatile boolean USED_VIRTUAL_DISPOSE_MODE = false; + + /** + * The constant IS_CHECK_REQUEST_TIMEOUT. + */ + public static volatile boolean IS_CHECK_REQUEST_TIMEOUT = false; } diff --git a/src/main/java/com/dispose/config/SetupInit.java b/src/main/java/com/dispose/config/SetupInit.java index ef2f66dd..c7032e2b 100644 --- a/src/main/java/com/dispose/config/SetupInit.java +++ b/src/main/java/com/dispose/config/SetupInit.java @@ -1,5 +1,6 @@ package com.dispose.config; +import com.dispose.common.GlobalVar; import com.dispose.service.DisposeNodeManager; import com.dispose.service.TaskService; import javax.annotation.Resource; @@ -13,6 +14,12 @@ import org.springframework.stereotype.Component; @Component @Slf4j public class SetupInit implements CommandLineRunner { + /** + * The Dispose configure. + */ + @Resource + private DisposeConfigure disposeConfigure; + /** * The Dispose node manager. */ @@ -33,6 +40,7 @@ public class SetupInit implements CommandLineRunner { @Override public void run(String... args) { // TODO Auto-generated method stub + GlobalVar.IS_CHECK_REQUEST_TIMEOUT = Boolean.parseBoolean(disposeConfigure.getCheckProtocolTimeout()); log.info("System Setup................................................"); disposeNodeManager.loadDisposeNodeFromDB(); taskService.loadTaskFromDatabase(); diff --git a/src/main/java/com/dispose/controller/DisposeTaskController.java b/src/main/java/com/dispose/controller/DisposeTaskController.java index a1cf5208..5c2815f1 100644 --- a/src/main/java/com/dispose/controller/DisposeTaskController.java +++ b/src/main/java/com/dispose/controller/DisposeTaskController.java @@ -98,7 +98,7 @@ public class DisposeTaskController { StartTaskRsp rspInfo = new StartTaskRsp(); TaskInfoDetail task = TaskInfoDetail.builder() - .id(Long.valueOf(reqInfo.getId())) + .deviceId(Long.valueOf(reqInfo.getId())) .accountId(userAccountService.getUserByToken(mr.getAuthToken()).getId()) .type(reqInfo.getType()) .disposeIp(reqInfo.getDisposeIp()) diff --git a/src/main/java/com/dispose/pojo/dto/ProtocolReqDTO.java b/src/main/java/com/dispose/pojo/dto/ProtocolReqDTO.java index 1af0a38b..9f9de9d1 100644 --- a/src/main/java/com/dispose/pojo/dto/ProtocolReqDTO.java +++ b/src/main/java/com/dispose/pojo/dto/ProtocolReqDTO.java @@ -2,15 +2,17 @@ package com.dispose.pojo.dto; import com.dispose.common.ConstValue; import com.dispose.common.ErrorCode; +import com.dispose.common.GlobalVar; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import java.util.Objects; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import org.springframework.http.HttpHeaders; +import java.util.Objects; + /** * The type Protocol req dto. */ @@ -59,14 +61,20 @@ public class ProtocolReqDTO extends ProtocolDTO { */ public ErrorCode verifyRequest(HttpHeaders headers) { + ErrorCode err = verifyRequest(); + + if (err != ErrorCode.ERR_OK) { + return err; + } + if (headers == null) { return ErrorCode.ERR_MISSAUTHHEAD; } try { ProtocolReqDTO.token = Objects. - requireNonNull(headers.get("Authorization")) - .get(0).replaceFirst("Bearer ", ""); + requireNonNull(headers.get("Authorization")) + .get(0).replaceFirst("Bearer ", ""); } catch (Exception ex) { return ErrorCode.ERR_MISSAUTHHEAD; } @@ -93,6 +101,11 @@ public class ProtocolReqDTO extends ProtocolDTO { return ErrorCode.ERR_VERSION; } + if (GlobalVar.IS_CHECK_REQUEST_TIMEOUT + && System.currentTimeMillis() - this.getTimeStamp() >= ConstValue.Protocol.REQUEST_TIMEOUT_MS) { + return ErrorCode.ERR_REQUESTTIMEOUT; + } + return ErrorCode.ERR_OK; } } diff --git a/src/main/java/com/dispose/service/impl/TaskServiceImpl.java b/src/main/java/com/dispose/service/impl/TaskServiceImpl.java index 1bd570f6..d784db6b 100644 --- a/src/main/java/com/dispose/service/impl/TaskServiceImpl.java +++ b/src/main/java/com/dispose/service/impl/TaskServiceImpl.java @@ -131,12 +131,13 @@ public class TaskServiceImpl implements TaskService { @Override public MReturnType createTask(TaskInfoDetail task) { DisposeDevice disposeDevice; + Long taskId = task.getDeviceId(); // 首先查找有没有能处置这个ip的能力节点 - if (task.getId() == null || task.getId() < 0) { // 没有指定处置能力节点的情况 + if (taskId == null || taskId < 0) { // 没有指定处置能力节点的情况 disposeDevice = getDisposeNode(task.getDisposeIp(), task.getType()); } else { // 指定了处置能力节点的情况 - disposeDevice = disposeNodeManager.getDisposeDeviceById(task.getId()); + disposeDevice = disposeNodeManager.getDisposeDeviceById(taskId); } if (disposeDevice == null) { @@ -146,14 +147,14 @@ public class TaskServiceImpl implements TaskService { .build(); } else { task.setDeviceId(disposeDevice.getId()); - task.setAccountId(task.getAccountId()); } // 查询当前是否有相同能力节点,相同用户,相同处置IP的且正在执行的处置任务,如果存在则忽略该次任务(依照产品需求) List taskList = taskCacheManager.getAllTask() .parallelStream() - .filter(v -> ((v.getId() == null || v.getId() == -1L) || Objects.equals(v.getId(), task.getDeviceId())) + .filter(v -> ((taskId == null || taskId == -1L) || Objects.equals(v.getDeviceId(), task.getDeviceId())) && Objects.equals(v.getAccountId(), task.getAccountId()) + && taskIsRunning(v) && Objects.equals(v.getType(), task.getType()) && Objects.equals(v.getDisposeIp(), task.getDisposeIp())) .collect(Collectors.toList()); @@ -241,12 +242,6 @@ public class TaskServiceImpl implements TaskService { @Override public ErrorCode stopTask(Long taskId) { - ErrorCode err = taskCacheManager.upgradeTaskStatus(taskId, DisposeTaskStatus.TASK_STOP.getCode()); - - if (err != ErrorCode.ERR_OK) { - return err; - } - TaskInfoDetail task = taskCacheManager.getTaskById(taskId); if (task != null) { @@ -258,6 +253,12 @@ public class TaskServiceImpl implements TaskService { int prdStatus = task.getCurrentStatus(); + ErrorCode err = taskCacheManager.upgradeTaskStatus(taskId, DisposeTaskStatus.TASK_STOP.getCode()); + + if (err != ErrorCode.ERR_OK) { + return err; + } + // 异步启动处置任务 CompletableFuture.supplyAsync(() -> dp.stopDispose(task.getDisposeIp(), DeviceCapacity.values()[task.getType()])) .whenComplete((v, ex) -> { @@ -276,6 +277,8 @@ public class TaskServiceImpl implements TaskService { } } }); + } else { + return ErrorCode.ERR_NOSUCHTASK; } return ErrorCode.ERR_OK; diff --git a/src/test/java/com/dispose/Global/InitTestEnvironment.java b/src/test/java/com/dispose/Global/InitTestEnvironment.java index 0aad6b57..e749fdc6 100644 --- a/src/test/java/com/dispose/Global/InitTestEnvironment.java +++ b/src/test/java/com/dispose/Global/InitTestEnvironment.java @@ -4,8 +4,6 @@ import com.dispose.common.ErrorCode; import com.dispose.common.GlobalVar; import com.dispose.pojo.po.MReturnType; import com.dispose.service.UserAccountService; -import java.util.Iterator; -import javax.annotation.Resource; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.json.JSONException; @@ -15,6 +13,9 @@ import org.junit.Before; import org.junit.BeforeClass; import org.springframework.test.context.ActiveProfiles; +import javax.annotation.Resource; +import java.util.Iterator; + /** * The type Init test environment. */ @@ -50,6 +51,8 @@ public class InitTestEnvironment { @BeforeClass public static void initVirtualDevice() { GlobalVar.USED_VIRTUAL_DISPOSE_MODE = true; + GlobalVar.IS_CHECK_REQUEST_TIMEOUT = true; + log.warn("Current Used Virtual Dispose Device"); } @@ -114,7 +117,7 @@ public class InitTestEnvironment { Assert.assertEquals(err, ErrorCode.ERR_OK); if ((jsonObject.getString("code").length() == 0) || - Long.parseLong(jsonObject.getString("code")) != 200) { + Long.parseLong(jsonObject.getString("code")) != 200) { err = ErrorCode.ERR_UNKNOWNCMD; } Assert.assertEquals(err, ErrorCode.ERR_OK); diff --git a/src/test/java/com/dispose/service/TaskServiceTest.java b/src/test/java/com/dispose/service/TaskServiceTest.java index 8bdb4819..15c9d6b9 100644 --- a/src/test/java/com/dispose/service/TaskServiceTest.java +++ b/src/test/java/com/dispose/service/TaskServiceTest.java @@ -30,6 +30,6 @@ public class TaskServiceTest extends InitTestEnvironment { public void t1_stopTaskTest() { ErrorCode err = taskService.stopTask(-1L); - Assert.assertEquals(err, ErrorCode.ERR_NOSUCHDEVICE); + Assert.assertNotEquals(err, ErrorCode.ERR_OK); } }