Browse Source

[FEATURE] 算法任务配置表功能

Suuuuuukang 10 months ago
parent
commit
8a581aee22
17 changed files with 829 additions and 1 deletions
  1. 42 1
      script/sql/postgresql/data(postgresql).sql
  2. 109 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/controller/AlgorithmTaskConfigurationController.java
  3. 6 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/controller/DataController.java
  4. 60 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/AlgorithmTaskConfiguration.java
  5. 75 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/AlgorithmTaskConfigurationBo.java
  6. 64 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmTaskConfigurationImportVo.java
  7. 74 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmTaskConfigurationVo.java
  8. 30 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/BatchDataResult.java
  9. 119 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/listener/AlgorithmTaskConfigurationImportListener.java
  10. 16 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/mapper/AlgorithmTaskConfigurationMapper.java
  11. 3 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/mapper/DataMapper.java
  12. 66 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/service/IAlgorithmTaskConfigurationService.java
  13. 8 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/service/IDataService.java
  14. 138 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/service/impl/AlgorithmTaskConfigurationServiceImpl.java
  15. 6 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/service/impl/DataServiceImpl.java
  16. 6 0
      taais-modules/taais-biz/src/main/resources/mapper/biz/DataMapper.xml
  17. 7 0
      taais-modules/taais-biz/src/main/resources/mapper/task/AlgorithmTaskConfigurationMapper.xml

+ 42 - 1
script/sql/postgresql/data(postgresql).sql

@@ -762,11 +762,52 @@ CREATE TABLE "public"."algorithm_task_configuration" (
  test_url VARCHAR(255),
  test_params TEXT,
  remark VARCHAR(400),
+ "create_by" "pg_catalog"."int8",
+ "create_time" "pg_catalog"."timestamp" DEFAULT CURRENT_TIMESTAMP,
+ "update_by" "pg_catalog"."int8",
+ "update_time" "pg_catalog"."timestamp" DEFAULT CURRENT_TIMESTAMP,
  "tenant_id" "pg_catalog"."int8" DEFAULT 0,
  version           integer                 DEFAULT 0,
  del_flag      smallint               DEFAULT '0'::smallint         NOT NULL,
- "system" "pg_catalog"."varchar" COLLATE "pg_catalog"."default",
  CONSTRAINT "algorithm_task_configuration_pkey" PRIMARY KEY ("id")
 );
 ALTER TABLE "public"."algorithm_task_configuration"
     OWNER TO "postgres";
+
+COMMENT ON COLUMN "public"."algorithm_task_configuration" IS '训练测试任务配置表';
+COMMENT ON COLUMN "public"."algorithm_task_configuration"."id" IS '主键ID';
+COMMENT ON COLUMN "public"."algorithm_task_configuration"."name" IS '算法任务名称';
+COMMENT ON COLUMN "public"."algorithm_task_configuration"."train_url" IS '训练算法地址';
+COMMENT ON COLUMN "public"."algorithm_task_configuration"."train_params" IS '训练超参配置';
+COMMENT ON COLUMN "public"."algorithm_task_configuration"."verify_url" IS '验证算法地址';
+COMMENT ON COLUMN "public"."algorithm_task_configuration"."verify_params" IS '验证超参配置';
+COMMENT ON COLUMN "public"."algorithm_task_configuration"."test_url" IS '测试算法地址';
+COMMENT ON COLUMN "public"."algorithm_task_configuration"."test_params" IS '测试超参配置';
+COMMENT ON COLUMN "public"."algorithm_task_configuration"."remark" IS '备注';
+COMMENT ON COLUMN "public"."algorithm_task_configuration"."create_by" IS '创建人';
+COMMENT ON COLUMN "public"."algorithm_task_configuration"."create_time" IS '创建时间';
+COMMENT ON COLUMN "public"."algorithm_task_configuration"."update_by" IS '更新人';
+COMMENT ON COLUMN "public"."algorithm_task_configuration"."update_time" IS '更新时间';
+COMMENT ON COLUMN "public"."algorithm_task_configuration"."tenant_id" IS '租户编码';
+COMMENT ON COLUMN "public"."algorithm_task_configuration"."version" IS '乐观锁';
+COMMENT ON COLUMN "public"."algorithm_task_configuration"."del_flag" IS '逻辑删除标志(0代表存在 1代表删除)';
+
+-- 菜单 SQL
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024082310223600, '算法任务配置', 152584418900430848, '1', '/config/taskConfiguration', 'task/taskConfiguration/index', 1, 0, 'C', '0', '0', 'task:taskConfiguration:list', '', 1, now(), 1, null, '算法任务菜单');
+
+-- 按钮 SQL
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024082310223601, '算法任务查询', 2024082310223600, '1',  '', '', 1, 0, 'F', '0', '0', 'task:taskConfiguration:query',        '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024082310223602, '算法任务新增', 2024082310223600, '2',  '', '', 1, 0, 'F', '0', '0', 'task:taskConfiguration:add',          '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024082310223603, '算法任务修改', 2024082310223600, '3',  '', '', 1, 0, 'F', '0', '0', 'task:taskConfiguration:edit',         '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024082310223604, '算法任务删除', 2024082310223600, '4',  '', '', 1, 0, 'F', '0', '0', 'task:taskConfiguration:remove',       '', 1, now(), 1, null, '');
+
+insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
+values(2024082310223605, '算法任务导出', 2024082310223600, '5',  '', '', 1, 0, 'F', '0', '0', 'task:taskConfiguration:export',       '', 1, now(), 1, null, '');

+ 109 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/controller/AlgorithmTaskConfigurationController.java

@@ -0,0 +1,109 @@
+package com.taais.biz.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.taais.common.core.core.domain.CommonResult;
+import com.taais.common.excel.utils.ExcelUtil;
+import com.taais.common.log.annotation.Log;
+import com.taais.common.log.enums.BusinessType;
+import com.taais.common.web.annotation.RepeatSubmit;
+import com.taais.common.web.core.BaseController;
+import jakarta.annotation.Resource;
+import com.taais.biz.domain.vo.AlgorithmTaskConfigurationVo;
+import com.taais.biz.domain.bo.AlgorithmTaskConfigurationBo;
+import com.taais.biz.service.IAlgorithmTaskConfigurationService;
+
+import com.taais.common.core.core.page.PageResult;
+
+/**
+ * 算法任务Controller
+ *
+ * @author 0
+ * 2024-08-23
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/task/taskConfiguration")
+public class AlgorithmTaskConfigurationController extends BaseController {
+    @Resource
+    private IAlgorithmTaskConfigurationService algorithmTaskConfigurationService;
+
+    /**
+     * 查询算法任务列表
+     */
+    @SaCheckPermission("task:taskConfiguration:list")
+    @GetMapping("/list")
+    public CommonResult<PageResult<AlgorithmTaskConfigurationVo>> list(AlgorithmTaskConfigurationBo algorithmTaskConfigurationBo) {
+        return CommonResult.success(algorithmTaskConfigurationService.selectPage(algorithmTaskConfigurationBo));
+    }
+
+    /**
+     * 导出算法任务列表
+     */
+    @SaCheckPermission("task:taskConfiguration:export")
+    @Log(title = "算法任务", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, AlgorithmTaskConfigurationBo algorithmTaskConfigurationBo) {
+        List<AlgorithmTaskConfigurationVo> list = algorithmTaskConfigurationService.selectList(algorithmTaskConfigurationBo);
+        ExcelUtil.exportExcel(list, "算法任务", AlgorithmTaskConfigurationVo.class, response);
+    }
+
+    /**
+     * 获取算法任务详细信息
+     */
+    @SaCheckPermission("task:taskConfiguration:query")
+    @GetMapping(value = "/{id}")
+    public CommonResult<AlgorithmTaskConfigurationVo> getInfo(@PathVariable Long id) {
+        return CommonResult.success(algorithmTaskConfigurationService.selectById(id));
+    }
+
+    /**
+     * 新增算法任务
+     */
+    @SaCheckPermission("task:taskConfiguration:add")
+    @Log(title = "算法任务", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping
+    public CommonResult<Void> add(@Validated @RequestBody AlgorithmTaskConfigurationBo algorithmTaskConfigurationBo) {
+        boolean inserted = algorithmTaskConfigurationService.insert(algorithmTaskConfigurationBo);
+        if (!inserted) {
+            return CommonResult.fail("新增算法任务记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 修改算法任务
+     */
+    @SaCheckPermission("task:taskConfiguration:edit")
+    @Log(title = "算法任务", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping
+    public CommonResult<Void> edit(@Validated @RequestBody AlgorithmTaskConfigurationBo algorithmTaskConfigurationBo) {
+        Boolean updated = algorithmTaskConfigurationService.update(algorithmTaskConfigurationBo);
+        if (!updated) {
+            return CommonResult.fail("修改算法任务记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 删除算法任务
+     */
+    @SaCheckPermission("task:taskConfiguration:remove")
+    @Log(title = "算法任务", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public CommonResult<Void> remove(@PathVariable Long[] ids) {
+        boolean deleted = algorithmTaskConfigurationService.deleteByIds(ids);
+        if (!deleted) {
+            return CommonResult.fail("删除算法任务记录失败!");
+        }
+        return CommonResult.success();
+    }
+}

+ 6 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/controller/DataController.java

@@ -1,6 +1,7 @@
 package com.taais.biz.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.taais.biz.domain.vo.BatchDataResult;
 import com.taais.common.core.core.domain.CommonResult;
 import com.taais.common.core.core.page.PageResult;
 import com.taais.common.excel.utils.ExcelUtil;
@@ -54,6 +55,11 @@ public class DataController extends BaseController {
 
     }
 
+    @GetMapping("/batchList")
+    public CommonResult<List<BatchDataResult>> list() {
+        return CommonResult.success(dataService.batchSelect());
+    }
+
     /**
      * 导出数据管理列表
      */

+ 60 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/AlgorithmTaskConfiguration.java

@@ -0,0 +1,60 @@
+package com.taais.biz.domain;
+
+import com.mybatisflex.annotation.Column;
+import com.mybatisflex.annotation.Id;
+import com.mybatisflex.annotation.KeyType;
+import com.mybatisflex.annotation.Table;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法任务对象 algorithm_task_configuration
+ *
+ * @author 0
+ * 2024-08-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Table(value = "algorithm_task_configuration")
+public class AlgorithmTaskConfiguration extends BaseEntity
+    {
+@Serial
+private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @Id(keyType = KeyType.None)
+    private Long id;
+
+    /** 算法任务名称 */
+    private String name;
+
+    /** 训练算法地址 */
+    private String trainUrl;
+
+    /** 训练超参配置 */
+    private String trainParams;
+
+    /** 验证算法地址 */
+    private String verifyUrl;
+
+    /** 验证超参配置 */
+    private String verifyParams;
+
+    /** 测试算法地址 */
+    private String testUrl;
+
+    /** 测试超参配置 */
+    private String testParams;
+
+    /** 备注 */
+    private String remark;
+
+    /** 逻辑删除标志(0代表存在 1代表删除) */
+    @Column(isLogicDelete = true)
+    private Integer delFlag;
+
+
+}

+ 75 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/AlgorithmTaskConfigurationBo.java

@@ -0,0 +1,75 @@
+package com.taais.biz.domain.bo;
+
+import com.taais.biz.domain.AlgorithmTaskConfiguration;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法任务业务对象 algorithm_task_configuration
+ *
+ * @author 0
+ * @date 2024-08-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = AlgorithmTaskConfiguration.class, reverseConvertGenerate = false)
+public class AlgorithmTaskConfigurationBo extends BaseEntity{
+    /**
+     * 主键ID
+     */
+    //@NotNull(message = "主键ID不能为空")
+    private Long id;
+
+    /**
+     * 算法任务名称
+     */
+    @NotBlank(message = "算法任务名称不能为空")
+    private String name;
+
+    /**
+     * 训练算法地址
+     */
+    @NotBlank(message = "训练算法地址不能为空")
+    private String trainUrl;
+
+    /**
+     * 训练超参配置
+     */
+    @NotBlank(message = "训练超参配置不能为空")
+    private String trainParams;
+
+    /**
+     * 验证算法地址
+     */
+    @NotBlank(message = "验证算法地址不能为空")
+    private String verifyUrl;
+
+    /**
+     * 验证超参配置
+     */
+    @NotBlank(message = "验证超参配置不能为空")
+    private String verifyParams;
+
+    /**
+     * 测试算法地址
+     */
+    @NotBlank(message = "测试算法地址不能为空")
+    private String testUrl;
+
+    /**
+     * 测试超参配置
+     */
+    @NotBlank(message = "测试超参配置不能为空")
+    private String testParams;
+
+    /**
+     * 备注
+     */
+    @NotBlank(message = "备注不能为空")
+    private String remark;
+
+
+}

+ 64 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmTaskConfigurationImportVo.java

@@ -0,0 +1,64 @@
+package com.taais.biz.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.taais.common.excel.annotation.ExcelDictFormat;
+import com.taais.common.excel.convert.ExcelDictConvert;
+import lombok.Data;
+import java.io.Serial;
+import java.io.Serializable;
+import lombok.NoArgsConstructor;
+
+/**
+ * 算法任务导入视图对象 algorithm_task_configuration
+ *
+ * @author 0
+ * @date 2024-08-23
+ */
+
+@Data
+@NoArgsConstructor
+public class AlgorithmTaskConfigurationImportVo implements Serializable
+{
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+
+     /** 算法任务名称 */
+    @ExcelProperty(value = "算法任务名称")
+    private String name;
+
+     /** 训练算法地址 */
+    @ExcelProperty(value = "训练算法地址")
+    private String trainUrl;
+
+     /** 训练超参配置 */
+    @ExcelProperty(value = "训练超参配置")
+    private String trainParams;
+
+     /** 验证算法地址 */
+    @ExcelProperty(value = "验证算法地址")
+    private String verifyUrl;
+
+     /** 验证超参配置 */
+    @ExcelProperty(value = "验证超参配置")
+    private String verifyParams;
+
+     /** 测试算法地址 */
+    @ExcelProperty(value = "测试算法地址")
+    private String testUrl;
+
+     /** 测试超参配置 */
+    @ExcelProperty(value = "测试超参配置")
+    private String testParams;
+
+     /** 备注 */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+     /** 逻辑删除标志(0代表存在 1代表删除) */
+    @ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
+    private Integer delFlag;
+
+
+}

+ 74 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/AlgorithmTaskConfigurationVo.java

@@ -0,0 +1,74 @@
+package com.taais.biz.domain.vo;
+
+import com.mybatisflex.annotation.Id;
+import com.mybatisflex.annotation.KeyType;
+import com.taais.biz.domain.AlgorithmTaskConfiguration;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.taais.common.excel.annotation.ExcelDictFormat;
+import com.taais.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.io.Serial;
+import java.io.Serializable;
+import com.taais.common.orm.core.domain.BaseEntity;
+
+/**
+ * 算法任务视图对象 algorithm_task_configuration
+ *
+ * @author 0
+ * @date 2024-08-23
+ */
+@Data
+@ExcelIgnoreUnannotated
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = AlgorithmTaskConfiguration.class)
+public class AlgorithmTaskConfigurationVo extends BaseEntity implements Serializable {
+
+@Serial
+private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /** 算法任务名称 */
+    @ExcelProperty(value = "算法任务名称")
+    private String name;
+
+    /** 训练算法地址 */
+    @ExcelProperty(value = "训练算法地址")
+    private String trainUrl;
+
+    /** 训练超参配置 */
+    @ExcelProperty(value = "训练超参配置")
+    private String trainParams;
+
+    /** 验证算法地址 */
+    @ExcelProperty(value = "验证算法地址")
+    private String verifyUrl;
+
+    /** 验证超参配置 */
+    @ExcelProperty(value = "验证超参配置")
+    private String verifyParams;
+
+    /** 测试算法地址 */
+    @ExcelProperty(value = "测试算法地址")
+    private String testUrl;
+
+    /** 测试超参配置 */
+    @ExcelProperty(value = "测试超参配置")
+    private String testParams;
+
+    /** 备注 */
+    @ExcelProperty(value = "备注")
+    private String remark;
+
+    /** 逻辑删除标志(0代表存在 1代表删除) */
+    @ExcelProperty(value = "逻辑删除标志(0代表存在 1代表删除)")
+    private Integer delFlag;
+
+
+
+}

+ 30 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/BatchDataResult.java

@@ -0,0 +1,30 @@
+package com.taais.biz.domain.vo;
+
+/**
+ * @author SukangLee
+ * @version 1.0
+ * @date 2024/8/23 14:41
+ * @description
+ */
+public class BatchDataResult {
+    // 批次号
+    private String batchNum;
+    // 批次数量
+    private Long batchSize;
+
+    public String getBatchNum() {
+        return batchNum;
+    }
+
+    public void setBatchNum(String batchNum) {
+        this.batchNum = batchNum;
+    }
+
+    public Long getBatchSize() {
+        return batchSize;
+    }
+
+    public void setBatchSize(Long batchSize) {
+        this.batchSize = batchSize;
+    }
+}

+ 119 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/listener/AlgorithmTaskConfigurationImportListener.java

@@ -0,0 +1,119 @@
+package com.taais.biz.listener;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.taais.common.core.exception.ServiceException;
+import com.taais.common.core.utils.SpringUtils;
+import com.taais.common.core.utils.ValidatorUtils;
+import com.taais.common.excel.core.ExcelListener;
+import com.taais.common.excel.core.ExcelResult;
+import com.taais.biz.domain.bo.AlgorithmTaskConfigurationBo;
+import com.taais.biz.domain.vo.AlgorithmTaskConfigurationImportVo;
+import com.taais.biz.domain.vo.AlgorithmTaskConfigurationVo;
+import com.taais.biz.service.IAlgorithmTaskConfigurationService;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+
+/**
+ * 算法任务自定义导入
+ *
+ * @author 0
+ */
+@Slf4j
+public class AlgorithmTaskConfigurationImportListener extends AnalysisEventListener<AlgorithmTaskConfigurationImportVo> implements ExcelListener<AlgorithmTaskConfigurationImportVo> {
+    private final IAlgorithmTaskConfigurationService algorithmTaskConfigurationService;
+
+    private final Boolean isUpdateSupport;
+    private int successNum = 0;
+    private int failureNum = 0;
+    private final StringBuilder successMsg = new StringBuilder();
+    private final StringBuilder failureMsg = new StringBuilder();
+
+    public AlgorithmTaskConfigurationImportListener(Boolean isUpdateSupport) {
+        this.algorithmTaskConfigurationService = SpringUtils.getBean(IAlgorithmTaskConfigurationService.class);
+        this.isUpdateSupport = isUpdateSupport;
+    }
+
+    @Override
+    public void invoke(AlgorithmTaskConfigurationImportVo algorithmTaskConfigurationVo, AnalysisContext context) {
+        try {
+
+            AlgorithmTaskConfigurationBo algorithmTaskConfigurationBo = BeanUtil.toBean(algorithmTaskConfigurationVo, AlgorithmTaskConfigurationBo.class);
+
+            //TODO:根据某个字段,查询数据库表中是否存在记录,不存在就新增,存在就更新
+            AlgorithmTaskConfigurationVo algorithmTaskConfigurationVo1 = null;
+
+            //algorithmTaskConfigurationVo1 = algorithmTaskConfigurationService.selectBySomefield(algorithmTaskConfigurationVo.getSomefield());
+            if (ObjectUtil.isNull(algorithmTaskConfigurationVo1)) {
+                //不存在就新增
+                algorithmTaskConfigurationBo.setVersion(0);
+                ValidatorUtils.validate(algorithmTaskConfigurationBo);
+                boolean inserted = algorithmTaskConfigurationService.insert(algorithmTaskConfigurationBo);
+
+                if (inserted) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、算法任务 记录导入成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、算法任务 记录导入失败");
+                    return;
+                }
+            } else if (isUpdateSupport) {
+                //存在就更新
+                algorithmTaskConfigurationBo.setId(algorithmTaskConfigurationVo1.getId());//主键
+                algorithmTaskConfigurationBo.setVersion(algorithmTaskConfigurationVo1.getVersion());
+                boolean updated = algorithmTaskConfigurationService.update(algorithmTaskConfigurationBo);
+                if (updated) {
+                    successNum++;
+                    successMsg.append("<br/>").append(successNum).append("、算法任务 记录更新成功");
+                    return;
+                } else {
+                    failureNum++;
+                    failureMsg.append("<br/>").append(failureNum).append("、算法任务 记录更新失败");
+                    return;
+                }
+            }
+        } catch (Exception e) {
+            failureNum++;
+            String msg = "<br/>" + failureNum + "、算法任务 记录导入失败:";
+            failureMsg.append(msg).append(e.getMessage());
+            log.error(msg, e);
+        }
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+
+    }
+
+    @Override
+    public ExcelResult<AlgorithmTaskConfigurationImportVo> getExcelResult() {
+        return new ExcelResult<>() {
+
+            @Override
+            public String getAnalysis() {
+                if (failureNum > 0) {
+                    failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据没有成功导入,错误如下:");
+                    throw new ServiceException(failureMsg.toString());
+                } else {
+                    successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+                }
+                return successMsg.toString();
+            }
+
+            @Override
+            public List<AlgorithmTaskConfigurationImportVo> getList() {
+                return null;
+            }
+
+            @Override
+            public List<String> getErrorList() {
+                return null;
+            }
+        };
+    }
+}

+ 16 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/mapper/AlgorithmTaskConfigurationMapper.java

@@ -0,0 +1,16 @@
+package com.taais.biz.mapper;
+
+import com.mybatisflex.core.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import com.taais.biz.domain.AlgorithmTaskConfiguration;
+
+/**
+ * 算法任务Mapper接口
+ *
+ * @author 0
+ * 2024-08-23
+ */
+@Mapper
+public interface AlgorithmTaskConfigurationMapper extends BaseMapper<AlgorithmTaskConfiguration> {
+
+}

+ 3 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/mapper/DataMapper.java

@@ -1,6 +1,7 @@
 package com.taais.biz.mapper;
 
 import com.mybatisflex.core.BaseMapper;
+import com.taais.biz.domain.vo.BatchDataResult;
 import org.apache.ibatis.annotations.Mapper;
 import com.taais.biz.domain.Data;
 import org.apache.ibatis.annotations.Param;
@@ -17,4 +18,6 @@ import java.util.List;
 public interface DataMapper extends BaseMapper<Data> {
 
     List<Long> getIds(@Param("size") Integer size);
+
+    List<BatchDataResult> getBatchData();
 }

+ 66 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/service/IAlgorithmTaskConfigurationService.java

@@ -0,0 +1,66 @@
+package com.taais.biz.service;
+
+import java.util.List;
+
+import com.taais.biz.domain.AlgorithmTaskConfiguration;
+import com.taais.biz.domain.vo.AlgorithmTaskConfigurationVo;
+import com.taais.biz.domain.bo.AlgorithmTaskConfigurationBo;
+import com.taais.common.orm.core.service.IBaseService;
+import com.taais.common.core.core.page.PageResult;
+
+/**
+ * 算法任务Service接口
+ *
+ * @author 0
+ * 2024-08-23
+ */
+public interface IAlgorithmTaskConfigurationService extends IBaseService<AlgorithmTaskConfiguration> {
+    /**
+     * 查询算法任务
+     *
+     * @param id 算法任务主键
+     * @return 算法任务
+     */
+        AlgorithmTaskConfigurationVo selectById(Long id);
+
+    /**
+     * 查询算法任务列表
+     *
+     * @param algorithmTaskConfigurationBo 算法任务Bo
+     * @return 算法任务集合
+     */
+    List<AlgorithmTaskConfigurationVo> selectList(AlgorithmTaskConfigurationBo algorithmTaskConfigurationBo);
+
+    /**
+     * 分页查询算法任务列表
+     *
+     * @param algorithmTaskConfigurationBo 算法任务Bo
+     * @return 分页算法任务集合
+     */
+    PageResult<AlgorithmTaskConfigurationVo> selectPage(AlgorithmTaskConfigurationBo algorithmTaskConfigurationBo);
+
+    /**
+     * 新增算法任务
+     *
+     * @param algorithmTaskConfigurationBo 算法任务Bo
+     * @return 结果:true 操作成功,false 操作失败
+     */
+    boolean insert(AlgorithmTaskConfigurationBo algorithmTaskConfigurationBo);
+
+    /**
+     * 修改算法任务
+     *
+     * @param algorithmTaskConfigurationBo 算法任务Bo
+     * @return 结果:true 更新成功,false 更新失败
+     */
+    boolean update(AlgorithmTaskConfigurationBo algorithmTaskConfigurationBo);
+
+    /**
+     * 批量删除算法任务
+     *
+     * @param ids 需要删除的算法任务主键集合
+     * @return 结果:true 删除成功,false 删除失败
+     */
+    boolean deleteByIds(Long[] ids);
+
+}

+ 8 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/service/IDataService.java

@@ -3,6 +3,7 @@ package com.taais.biz.service;
 import java.util.List;
 
 import com.taais.biz.domain.Data;
+import com.taais.biz.domain.vo.BatchDataResult;
 import com.taais.biz.domain.vo.DataVo;
 import com.taais.biz.domain.bo.DataBo;
 import com.taais.common.core.core.domain.CommonResult;
@@ -17,6 +18,13 @@ import org.springframework.web.multipart.MultipartFile;
  * 2024-06-14
  */
 public interface IDataService extends IBaseService<Data> {
+    /**
+     * 查询批次情况
+     *
+     * @return 数据批次信息
+     */
+    List<BatchDataResult> batchSelect();
+
     /**
      * 查询数据管理
      *

+ 138 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/service/impl/AlgorithmTaskConfigurationServiceImpl.java

@@ -0,0 +1,138 @@
+package com.taais.biz.service.impl;
+
+import java.util.Arrays;
+import java.util.List;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.mybatisflex.core.paginate.Page;
+import com.mybatisflex.core.query.QueryWrapper;
+import com.taais.common.core.utils.MapstructUtils;
+import com.taais.common.core.utils.StringUtils;
+import com.taais.common.orm.core.page.PageQuery;
+import com.taais.common.core.core.page.PageResult;
+import com.taais.common.orm.core.service.impl.BaseServiceImpl;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.taais.biz.mapper.AlgorithmTaskConfigurationMapper;
+import com.taais.biz.domain.AlgorithmTaskConfiguration;
+import com.taais.biz.domain.bo.AlgorithmTaskConfigurationBo;
+import com.taais.biz.domain.vo.AlgorithmTaskConfigurationVo;
+import com.taais.biz.service.IAlgorithmTaskConfigurationService;
+import static com.taais.biz.domain.table.AlgorithmTaskConfigurationTableDef.ALGORITHM_TASK_CONFIGURATION;
+
+/**
+ * 算法任务Service业务层处理
+ *
+ * @author 0
+ * 2024-08-23
+ */
+@Service
+public class AlgorithmTaskConfigurationServiceImpl extends BaseServiceImpl<AlgorithmTaskConfigurationMapper, AlgorithmTaskConfiguration> implements IAlgorithmTaskConfigurationService {
+    @Resource
+    private AlgorithmTaskConfigurationMapper algorithmTaskConfigurationMapper;
+
+    @Override
+    public QueryWrapper query() {
+        return super.query().from(ALGORITHM_TASK_CONFIGURATION);
+    }
+
+    private QueryWrapper buildQueryWrapper(AlgorithmTaskConfigurationBo algorithmTaskConfigurationBo) {
+        QueryWrapper queryWrapper = super.buildBaseQueryWrapper();
+        queryWrapper.and(ALGORITHM_TASK_CONFIGURATION.NAME.like
+        (algorithmTaskConfigurationBo.getName()));
+        queryWrapper.and(ALGORITHM_TASK_CONFIGURATION.TRAIN_URL.eq
+        (algorithmTaskConfigurationBo.getTrainUrl()));
+        queryWrapper.and(ALGORITHM_TASK_CONFIGURATION.TRAIN_PARAMS.eq
+        (algorithmTaskConfigurationBo.getTrainParams()));
+        queryWrapper.and(ALGORITHM_TASK_CONFIGURATION.VERIFY_URL.eq
+        (algorithmTaskConfigurationBo.getVerifyUrl()));
+        queryWrapper.and(ALGORITHM_TASK_CONFIGURATION.VERIFY_PARAMS.eq
+        (algorithmTaskConfigurationBo.getVerifyParams()));
+        queryWrapper.and(ALGORITHM_TASK_CONFIGURATION.TEST_URL.eq
+        (algorithmTaskConfigurationBo.getTestUrl()));
+        queryWrapper.and(ALGORITHM_TASK_CONFIGURATION.TEST_PARAMS.eq
+        (algorithmTaskConfigurationBo.getTestParams()));
+
+        return queryWrapper;
+    }
+
+    /**
+     * 查询算法任务
+     *
+     * @param id 算法任务主键
+     * @return 算法任务
+     */
+    @Override
+    public AlgorithmTaskConfigurationVo selectById(Long id) {
+            return this.getOneAs(query().where(ALGORITHM_TASK_CONFIGURATION.ID.eq(id)), AlgorithmTaskConfigurationVo.class);
+
+    }
+
+    /**
+     * 查询算法任务列表
+     *
+     * @param algorithmTaskConfigurationBo 算法任务Bo
+     * @return 算法任务集合
+     */
+    @Override
+    public List<AlgorithmTaskConfigurationVo> selectList(AlgorithmTaskConfigurationBo algorithmTaskConfigurationBo) {
+        QueryWrapper queryWrapper = buildQueryWrapper(algorithmTaskConfigurationBo);
+            return this.listAs(queryWrapper, AlgorithmTaskConfigurationVo.class);
+    }
+
+    /**
+     * 分页查询算法任务列表
+     *
+     * @param algorithmTaskConfigurationBo 算法任务Bo
+     * @return 分页算法任务集合
+     */
+    @Override
+    public PageResult<AlgorithmTaskConfigurationVo> selectPage(AlgorithmTaskConfigurationBo algorithmTaskConfigurationBo) {
+        QueryWrapper queryWrapper = buildQueryWrapper(algorithmTaskConfigurationBo);
+            Page<AlgorithmTaskConfigurationVo> page = this.pageAs(PageQuery.build(), queryWrapper, AlgorithmTaskConfigurationVo.class);
+        return PageResult.build(page);
+    }
+
+    /**
+     * 新增算法任务
+     *
+     * @param algorithmTaskConfigurationBo 算法任务Bo
+     * @return 结果:true 操作成功,false 操作失败
+     */
+    @Override
+    public boolean insert(AlgorithmTaskConfigurationBo algorithmTaskConfigurationBo) {
+    AlgorithmTaskConfiguration algorithmTaskConfiguration =MapstructUtils.convert(algorithmTaskConfigurationBo, AlgorithmTaskConfiguration. class);
+
+        return this.save(algorithmTaskConfiguration);//使用全局配置的雪花算法主键生成器生成ID值
+    }
+
+    /**
+     * 修改算法任务
+     *
+     * @param algorithmTaskConfigurationBo 算法任务Bo
+     * @return 结果:true 更新成功,false 更新失败
+     */
+    @Override
+    public boolean update(AlgorithmTaskConfigurationBo algorithmTaskConfigurationBo) {
+        AlgorithmTaskConfiguration algorithmTaskConfiguration =MapstructUtils.convert(algorithmTaskConfigurationBo, AlgorithmTaskConfiguration. class);
+        if (ObjectUtil.isNotNull(algorithmTaskConfiguration) && ObjectUtil.isNotNull(algorithmTaskConfiguration.getId())){
+            boolean updated = this.updateById(algorithmTaskConfiguration);
+                return updated;
+        }
+        return false;
+    }
+
+    /**
+     * 批量删除算法任务
+     *
+     * @param ids 需要删除的算法任务主键集合
+     * @return 结果:true 删除成功,false 删除失败
+     */
+    @Transactional
+    @Override
+    public boolean deleteByIds(Long[] ids) {
+        return this.removeByIds(Arrays.asList(ids));
+    }
+
+}

+ 6 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/service/impl/DataServiceImpl.java

@@ -5,6 +5,7 @@ import com.mybatisflex.core.paginate.Page;
 import com.mybatisflex.core.query.QueryWrapper;
 import com.taais.biz.domain.Data;
 import com.taais.biz.domain.bo.DataBo;
+import com.taais.biz.domain.vo.BatchDataResult;
 import com.taais.biz.domain.vo.DataVo;
 import com.taais.biz.mapper.DataMapper;
 import com.taais.biz.service.IDataService;
@@ -93,6 +94,11 @@ public class DataServiceImpl extends BaseServiceImpl<DataMapper, Data> implement
         return queryWrapper;
     }
 
+    @Override
+    public List<BatchDataResult> batchSelect() {
+        return dataMapper.getBatchData();
+    }
+
     /**
      * 查询数据管理
      *

+ 6 - 0
taais-modules/taais-biz/src/main/resources/mapper/biz/DataMapper.xml

@@ -9,4 +9,10 @@
         FROM
             generate_series(1, #{size})
     </select>
+    <select id="getBatchData" resultType="com.taais.biz.domain.vo.BatchDataResult">
+        select batch_num, count(1) as batch_size
+        from public.data
+        group by batch_num
+        order by batch_num
+    </select>
 </mapper>

+ 7 - 0
taais-modules/taais-biz/src/main/resources/mapper/task/AlgorithmTaskConfigurationMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.taais.biz.mapper.AlgorithmTaskConfigurationMapper">
+
+</mapper>