Просмотр исходного кода

fix: 重复开课的情况下,异常数据上报

zhanghaijun лет назад: 2
Родитель
Сommit
273d870fda

+ 8 - 1
src/main/java/com/cec/plugins/controller/TaskController.java

@@ -12,7 +12,10 @@ import com.cec.plugins.service.task.TaskCollectService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * @author zhanghaijun
@@ -37,6 +40,10 @@ public class TaskController {
     @PostMapping("/taskStatus")
     public ResultData taskStatus(@RequestBody @Validated DtoTaskStatus dto) {
         log.info("controller,任务状态下发,请求参数:{}", JSONUtil.toJsonStr(dto));
+        if (!taskService.isTaskEnd()) {
+            taskService.resourceOccupied(dto);
+            return ResultData.fail("任已开始,请勿重复提交");
+        }
         boolean result = taskService.saveTaskToRedis(dto.getRedisMapping());
         if (!result) {
             return ResultData.fail("任务状态保存失败");

+ 20 - 1
src/main/java/com/cec/plugins/service/TaskService.java

@@ -4,7 +4,6 @@ import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import com.cec.plugins.config.properties.ProjectProperties;
-import com.cec.plugins.core.JsonUtils;
 import com.cec.plugins.core.retry.RetryException;
 import com.cec.plugins.core.retry.RetryTemplate;
 import com.cec.plugins.domain.BaseData;
@@ -40,6 +39,12 @@ public class TaskService {
         return redisClientSource.writeRedis(map);
     }
 
+    /** 当前是否是结课状态 */
+    public boolean isTaskEnd() {
+        String status = redisClientSource.getCacheStr(TaskEnum.TaskStatusOrder.getKey());
+        return StrUtil.equals(StrUtil.trim(status), "2");
+    }
+
     public ResultData checkTaskStatus(BaseData dto) {
         Map<TaskEnum, String> map = new HashMap<>();
         map.put(TaskEnum.TaskId, dto.getTaskId());
@@ -106,6 +111,20 @@ public class TaskService {
         }
     }
 
+    /** 资源被占用上报数据 */
+    @Async
+    public void resourceOccupied(BaseData dto) {
+        ReportedData data = new ReportedData();
+        data.setTaskId(dto.getTaskId());
+        data.setSubtaskId(dto.getSubtaskId());
+        data.setXdschemaId(dto.getXdschemaId());
+        data.setIdent(dto.getIdent());
+        data.setInstanceId(dto.getInstanceId());
+        data.setStatus(1);
+        data.setReason("任务资源被占用");
+        reportPlatform("/config/api/v1/receivetaskstatus", data);
+    }
+
     public void reportPlatform(String apiUrl, Object body) {
         ProjectProperties.PlatformModel platform = properties.getPlatform();
         String url = platform.getHttpUtl(apiUrl);