Bladeren bron

update task controller

supeng 1 dag geleden
bovenliggende
commit
9552520530

+ 4 - 3
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/common/enums/ExceptionEnum.java

@@ -42,6 +42,8 @@ public enum ExceptionEnum {
     RESOURCE_NOT_FOUND(4004, "资源未找到"),
     DATA_CONFLICT(4005, "数据冲突"),
     DATA_INTEGRITY_VIOLATION(4006, "数据完整性异常"),
+    DATA_INSERT_ERROR(4007, "数据写入异常"),
+    DATA_UPDATE_ERROR(4008, "数据更新异常"),
 
     // ========================= 5000 外部依赖/网络类 =========================
     EXTERNAL_SERVICE_ERROR(5000, "外部服务异常"),
@@ -53,9 +55,8 @@ public enum ExceptionEnum {
     ILLEGAL_OPERATION(6000, "非法操作"),
     BUSINESS_RULE_VIOLATION(6001, "业务规则冲突"),
     FEATURE_FLAG_CONFLICT(6002, "功能开关冲突"),
-    FLOW_POOL_AUTO_ENTER_CONFLICT(6003, "只能同时一个流量池打开自动入池开关"),
-    FLOW_POOL_TAIL_POLICY_HOLD(6004, "流量池作为尾号流量池时必须保持自动入池"),
-    FLOW_POOL_AUTO_ENTER_EXCEPT_SUPPLY(6005, "供给池以外只能同时一个流量池打开自动入池开关"),
+    NOT_SUPPORT_TASK_TYPE(6003, "不支持该任务类型"),
+    NOT_SUPPORT_SUB_TASK_TYPE(6004, "不支持该子任务类型"),
 
     // ========================= 7000 并发/事务类 =========================
     CONCURRENT_MODIFICATION(7000, "并发修改冲突"),

+ 9 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/common/enums/TaskTypeEnum.java

@@ -19,4 +19,13 @@ public enum TaskTypeEnum {
         this.value = value;
         this.desc = desc;
     }
+
+    public static TaskTypeEnum getInstance(Integer value) {
+        for (TaskTypeEnum taskTypeEnum : TaskTypeEnum.values()) {
+            if (taskTypeEnum.getValue().equals(value)) {
+                return taskTypeEnum;
+            }
+        }
+        return null;
+    }
 }

+ 0 - 26
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/dto/PageDTO.java

@@ -1,26 +0,0 @@
-package com.tzld.piaoquan.supply.demand.engine.model.dto;
-
-/**
- * @author supeng
- */
-public class PageDTO {
-
-    private int pageNum;
-    private int pageSize;
-
-    public int getPageNum() {
-        return pageNum;
-    }
-
-    public void setPageNum(int pageNum) {
-        this.pageNum = pageNum;
-    }
-
-    public int getPageSize() {
-        return pageSize;
-    }
-
-    public void setPageSize(int pageSize) {
-        this.pageSize = pageSize;
-    }
-}

+ 13 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/param/PageParam.java

@@ -0,0 +1,13 @@
+package com.tzld.piaoquan.supply.demand.engine.model.param;
+
+import lombok.Data;
+
+/**
+ * @author supeng
+ */
+@Data
+public class PageParam {
+    private int pageNo = 1;
+    private int pageSize = 20;
+
+}

+ 10 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/param/TaskCreateParam.java

@@ -25,4 +25,14 @@ public class TaskCreateParam {
      */
     @NotEmpty(message = "票圈视频ID不能为空")
     private List<Long> videoIds;
+    /**
+     * 任务名称
+     */
+    private String taskName;
+    /**
+     * 策略ID
+     */
+    @NotNull(message = "策略不能为空")
+    private Long strategyId;
+
 }

+ 20 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/param/TaskGetParam.java

@@ -0,0 +1,20 @@
+package com.tzld.piaoquan.supply.demand.engine.model.param;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * 任务创建参数
+ *
+ * @author supeng
+ */
+@Data
+public class TaskGetParam {
+    /**
+     * 任务ID
+     */
+    @NotNull(message = "任务ID不能为空")
+    private Long id;
+
+}

+ 38 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/param/TaskListParam.java

@@ -0,0 +1,38 @@
+package com.tzld.piaoquan.supply.demand.engine.model.param;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * 任务创建参数
+ *
+ * @author supeng
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class TaskListParam extends PageParam {
+    /**
+     * 任务名称
+     */
+    private String taskNo;
+    /**
+     * 任务类型
+     *
+     * @see com.tzld.piaoquan.supply.demand.engine.common.enums.TaskTypeEnum
+     */
+    @NotNull(message = "任务类型不能为空")
+    private Integer taskType;
+    /**
+     * 任务名称
+     */
+    private String taskName;
+    /**
+     * 策略ID
+     */
+    @NotNull(message = "策略不能为空")
+    private Long strategyId;
+}

+ 81 - 0
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/model/vo/SdTaskVO.java

@@ -0,0 +1,81 @@
+package com.tzld.piaoquan.supply.demand.engine.model.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.util.Date;
+
+public class SdTaskVO {
+
+    /**
+     * 主键ID
+     */
+    private Long id;
+
+    /**
+     * 任务编号,对外暴露(如API、前端URL),具备业务语义
+     */
+    private String taskNo;
+
+    /**
+     * 任务名称,方便用户识别
+     */
+    private String taskName;
+
+    /**
+     * 任务类型:1 DECONSTRUCT(解构), 2 CLUSTER(聚类)
+     *
+     * @see com.tzld.piaoquan.supply.demand.engine.common.enums.TaskTypeEnum
+     */
+    private Integer taskType;
+    private String taskTypeLabel;
+    /**
+     * 任务状态:0 INIT(初始化), 1 PRE_PROCESSING(前置处理/子任务处理中),
+     * 2 READY(就绪), 3 PROCESSING(处理中), 4 SUCCESS(成功) 5 FAILED(失败) 6 TIMEOUT(超时)
+     *
+     * @see com.tzld.piaoquan.supply.demand.engine.common.enums.TaskStatusEnum
+     */
+    private Integer taskStatus;
+    private String taskStatusLabel;
+    /**
+     * 关联 sd_strategy.id
+     */
+    private Long strategyId;
+    private String strategyName;
+//    /**
+//     * 扩展配置。存储非通用参数
+//     */
+//    private String extConfig;
+//    /**
+//     * 输入参数/内容
+//     */
+//    private String inputPayload;
+    /**
+     * 子任务总数
+     */
+    private Integer subTaskCount;
+    /**
+     * 已结束的子任务数
+     */
+    private Integer finishedSubTaskCount;
+    /**
+     * 任务实际结束时间,仅在状态转为SUCCESS/FAILED/TIMEOUT时填入
+     */
+    private Date finishedTime;
+    /**
+     * 创建者标识(用户ID或系统ID)
+     */
+    private String creator;
+    /**
+     * 记录创建时间,由数据库自动生成
+     */
+    private Date createTime;
+    /**
+     * 记录最后更新时间,由数据库自动维护
+     */
+    private Date updateTime;
+    /**
+     * 执行失败时的错误详细描述
+     */
+    private String errorMsg;
+}

+ 9 - 5
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/service/TaskService.java

@@ -1,7 +1,11 @@
 package com.tzld.piaoquan.supply.demand.engine.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.tzld.piaoquan.supply.demand.engine.common.base.CommonRequest;
 import com.tzld.piaoquan.supply.demand.engine.model.param.TaskCreateParam;
+import com.tzld.piaoquan.supply.demand.engine.model.param.TaskGetParam;
+import com.tzld.piaoquan.supply.demand.engine.model.param.TaskListParam;
+import com.tzld.piaoquan.supply.demand.engine.model.po.SdTask;
 
 /**
  *
@@ -15,16 +19,16 @@ public interface TaskService {
     void create(CommonRequest<TaskCreateParam> request);
 
     /**
-     * 任务调度
-     * @param object
+     * 任务列表
+     * @param request
      */
-    void schedule(Object object);
+    Page<SdTask> list(CommonRequest<TaskListParam> request);
 
     /**
      * 获取任务信息
-     * @param object
+     * @param request
      */
-    void get(Object object);
+    SdTask get(CommonRequest<TaskGetParam> request);
 
     void subTaskSubmitHandler();
 

+ 68 - 7
supply-demand-engine-core/src/main/java/com/tzld/piaoquan/supply/demand/engine/service/impl/TaskServiceImpl.java

@@ -1,49 +1,110 @@
 package com.tzld.piaoquan.supply.demand.engine.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.tzld.piaoquan.supply.demand.engine.common.base.CommonRequest;
+import com.tzld.piaoquan.supply.demand.engine.common.base.Constant;
 import com.tzld.piaoquan.supply.demand.engine.common.enums.ExceptionEnum;
+import com.tzld.piaoquan.supply.demand.engine.common.enums.IsDeleteEnum;
+import com.tzld.piaoquan.supply.demand.engine.common.enums.TaskStatusEnum;
+import com.tzld.piaoquan.supply.demand.engine.common.enums.TaskTypeEnum;
 import com.tzld.piaoquan.supply.demand.engine.common.exception.CommonException;
+import com.tzld.piaoquan.supply.demand.engine.dao.mapper.SdStrategyMapper;
 import com.tzld.piaoquan.supply.demand.engine.dao.mapper.SdTaskMapper;
 import com.tzld.piaoquan.supply.demand.engine.model.param.TaskCreateParam;
+import com.tzld.piaoquan.supply.demand.engine.model.param.TaskGetParam;
+import com.tzld.piaoquan.supply.demand.engine.model.param.TaskListParam;
+import com.tzld.piaoquan.supply.demand.engine.model.po.SdStrategy;
 import com.tzld.piaoquan.supply.demand.engine.model.po.SdTask;
 import com.tzld.piaoquan.supply.demand.engine.service.TaskService;
+import com.tzld.piaoquan.supply.demand.engine.util.DateUtil;
 import com.tzld.piaoquan.supply.demand.engine.util.IdGeneratorUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
 import java.util.Objects;
 
 /**
- *
  * @author supeng
  */
 @Slf4j
 @Service
 public class TaskServiceImpl implements TaskService {
 
+    private static final String PREFIX_TASK_NAME = "供给需求任务";
+
+    private static final String TASK_NAME_DATETIME_PATTEN = "yyyyMMddHHmmss";
+
     @Autowired
     private SdTaskMapper sdTaskMapper;
 
+    @Autowired
+    private SdStrategyMapper sdStrategyMapper;
+
     @Override
     public void create(CommonRequest<TaskCreateParam> request) {
         TaskCreateParam params = request.getParams();
         SdTask sdTask = new SdTask();
         sdTask.setTaskNo(IdGeneratorUtil.generateTaskNo());
-        sdTaskMapper.insert(sdTask);
-
+        String taskName = params.getTaskName();
+        if (Objects.isNull(taskName) || taskName.trim().isEmpty()) {
+            taskName = PREFIX_TASK_NAME + Constant.LINE + DateUtil.formatLocalDateTime(LocalDateTime.now(), TASK_NAME_DATETIME_PATTEN);
+        }
+        sdTask.setTaskName(taskName);
+        //校验策略是否存在
+        Long strategyId = params.getStrategyId();
+        LambdaQueryWrapper<SdStrategy> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SdStrategy::getId, strategyId).eq(SdStrategy::getIsDeleted, IsDeleteEnum.NORMAL.getValue());
+        boolean strategyIdExists = sdStrategyMapper.exists(wrapper);
+        if (!strategyIdExists) {
+            throw new CommonException(ExceptionEnum.DATA_NOT_EXIST, "该策略不存在");
+        }
+        sdTask.setStrategyId(params.getStrategyId());
+        TaskTypeEnum taskTypeEnum = TaskTypeEnum.getInstance(params.getTaskType());
+        if (Objects.isNull(taskTypeEnum)) {
+            throw new CommonException(ExceptionEnum.NOT_SUPPORT_TASK_TYPE);
+        }
+        sdTask.setTaskType(params.getTaskType());
+        sdTask.setTaskStatus(TaskStatusEnum.INIT.getValue());
+        int flag = sdTaskMapper.insert(sdTask);
+        if (flag <= 0) {
+            throw new CommonException(ExceptionEnum.DATA_INSERT_ERROR);
+        }
     }
 
     @Override
-    public void schedule(Object object) {
-
+    public Page<SdTask> list(CommonRequest<TaskListParam> request) {
+        TaskListParam params = request.getParams();
+        int pageNo = params.getPageNo();
+        int pageSize = params.getPageSize();
+        String taskNo = params.getTaskNo();
+        String taskName = params.getTaskName();
+        Integer taskType = params.getTaskType();
+        Long strategyId = params.getStrategyId();
+
+        LambdaQueryWrapper<SdTask> wrapper = Wrappers.lambdaQuery(SdTask.class)
+                .eq(Objects.nonNull(taskNo), SdTask::getTaskNo, taskNo)
+                .eq(Objects.nonNull(taskType), SdTask::getTaskType, taskType)
+                .eq(Objects.nonNull(strategyId), SdTask::getStrategyId, strategyId)
+                .like(Objects.nonNull(taskName) && !taskName.isEmpty(), SdTask::getTaskName, taskName)
+                .eq(SdTask::getIsDeleted, IsDeleteEnum.NORMAL.getValue())
+                .orderByDesc(SdTask::getId)
+                .select(SdTask::getId, SdTask::getTaskNo, SdTask::getTaskName, SdTask::getTaskType);
+
+        Page<SdTask> page = new Page<>(pageNo, pageSize);
+        return sdTaskMapper.selectPage(page, wrapper);
     }
 
     @Override
-    public void get(Object object) {
-
+    public SdTask get(CommonRequest<TaskGetParam> request) {
+        Long id = request.getParams().getId();
+        return sdTaskMapper.selectById(id);
     }
 
+
     @Override
     public void subTaskSubmitHandler() {
 

+ 13 - 8
supply-demand-engine-service/src/main/java/com/tzld/piaoquan/supply/demand/engine/controller/TaskController.java

@@ -1,11 +1,15 @@
 package com.tzld.piaoquan.supply.demand.engine.controller;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.tzld.piaoquan.supply.demand.engine.common.base.CommonRequest;
 import com.tzld.piaoquan.supply.demand.engine.common.base.CommonResponse;
 import com.tzld.piaoquan.supply.demand.engine.common.enums.ExceptionEnum;
 import com.tzld.piaoquan.supply.demand.engine.common.exception.CommonException;
 import com.tzld.piaoquan.supply.demand.engine.model.dto.BaseInfoDTO;
 import com.tzld.piaoquan.supply.demand.engine.model.param.TaskCreateParam;
+import com.tzld.piaoquan.supply.demand.engine.model.param.TaskGetParam;
+import com.tzld.piaoquan.supply.demand.engine.model.param.TaskListParam;
+import com.tzld.piaoquan.supply.demand.engine.model.po.SdTask;
 import com.tzld.piaoquan.supply.demand.engine.service.TaskService;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
@@ -31,19 +35,20 @@ public class TaskController {
 
     @ApiOperation(value = "创建任务", notes = "创建任务")
     @PostMapping("/create")
-    public CommonResponse<String> create(@RequestBody CommonRequest<TaskCreateParam> request) {
+    public CommonResponse<Void> create(@RequestBody CommonRequest<TaskCreateParam> request) {
         taskService.create(request);
         return CommonResponse.create();
     }
 
+    @ApiOperation(value = "获取任务信息", notes = "获取任务信息")
+    @PostMapping("/list")
+    public CommonResponse<Page<SdTask>> list(@RequestBody CommonRequest<TaskListParam> request) {
+        return CommonResponse.create(taskService.list(request));
+    }
+
     @ApiOperation(value = "获取任务信息", notes = "获取任务信息")
     @PostMapping("/get")
-    public CommonResponse<String> get(@RequestBody CommonRequest<Map<String, String>> request) {
-        BaseInfoDTO baseInfo = request.getBaseInfo();
-        if (baseInfo == null) {
-            throw new CommonException(ExceptionEnum.PARAMS_INVALID);
-        }
-        taskService.get(baseInfo);
-        return CommonResponse.create();
+    public CommonResponse<SdTask> get(@RequestBody CommonRequest<TaskGetParam> request) {
+        return CommonResponse.create(taskService.get(request));
     }
 }