Jelajahi Sumber

Merge branch 'dev-lzy' into develop

WANGKANG 8 bulan lalu
induk
melakukan
cf229b5677
16 mengubah file dengan 772 tambahan dan 18 penghapusan
  1. 15 0
      taais-admin/src/main/resources/application-dev.yml
  2. 2 1
      taais-common/taais-common-json/src/main/java/com/taais/common/json/utils/JsonUtils.java
  3. 112 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/controller/DataAmplificationTaskController.java
  4. 5 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/controller/DataController.java
  5. 21 2
      taais-modules/taais-biz/src/main/java/com/taais/biz/controller/TargetIdentificationSubtaskController.java
  6. 90 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/DataAmplificationTask.java
  7. 93 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/DataAmplificationTaskBo.java
  8. 10 5
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/DataAmplifyDto.java
  9. 2 1
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/task/CreateTargetIdentificationTaskDto.java
  10. 91 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/DataAmplificationTaskVo.java
  11. 9 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/mapper/DataAmplificationTaskMapper.java
  12. 25 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/service/IDataAmplificationTaskService.java
  13. 2 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/service/IDataService.java
  14. 95 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/service/impl/DataAmplificationTaskServiceImpl.java
  15. 166 9
      taais-modules/taais-biz/src/main/java/com/taais/biz/service/impl/DataServiceImpl.java
  16. 34 0
      taais-modules/taais-biz/src/main/java/com/taais/biz/service/impl/TargetIdentificationTaskServiceImpl.java

+ 15 - 0
taais-admin/src/main/resources/application-dev.yml

@@ -9,6 +9,21 @@ server:
 spring:
   datasource:
     type: com.zaxxer.hikari.HikariDataSource
+    hikari:
+      # 最大连接池数量
+      maximum-pool-size: 4
+      # 最小空闲线程数量
+      minimum-idle: 2
+      # 配置获取连接等待超时的时间
+      connectionTimeout: 300000
+      # 校验超时时间
+      validationTimeout: 50000
+      # 空闲连接存活最大时间,默认10分钟
+      idleTimeout: 6000000
+      # 此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认30分钟
+      maxLifetime: 1800000
+      # 多久检查一次连接的活性
+      keepaliveTime: 30000
 mybatis-flex:
   # sql审计
   audit_enable: true

+ 2 - 1
taais-common/taais-common-json/src/main/java/com/taais/common/json/utils/JsonUtils.java

@@ -15,6 +15,7 @@ import lombok.NoArgsConstructor;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * JSON 工具类
@@ -99,7 +100,7 @@ public class JsonUtils {
         }
     }
 
-    public static <T> List<T> parseArray(String text, Class<T> clazz) {
+    public static <T> List<T> parseArray(String text, Class<Map> clazz) {
         if (StringUtils.isEmpty(text)) {
             return new ArrayList<>();
         }

+ 112 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/controller/DataAmplificationTaskController.java

@@ -0,0 +1,112 @@
+package com.taais.biz.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.taais.biz.domain.bo.DataAmplificationTaskBo;
+import com.taais.biz.domain.bo.DataAmplificationTaskBo;
+import com.taais.biz.domain.dto.task.TestResultDto;
+import com.taais.biz.domain.dto.task.TranResultDto;
+import com.taais.biz.domain.vo.AlgorithmBizProcessVo;
+import com.taais.biz.domain.vo.DataAmplificationTaskVo;
+import com.taais.biz.service.IAlgorithmBizProcessService;
+import com.taais.biz.service.IDataAmplificationTaskService;
+import com.taais.common.core.core.domain.CommonResult;
+import com.taais.common.core.core.page.PageResult;
+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 jakarta.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * 数据扩增业务处理Controller
+ *
+ * @author 0
+ * 2024-06-14
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/task/dataAmplificationTask")
+public class DataAmplificationTaskController extends BaseController {
+
+    private static final Logger log = LoggerFactory.getLogger(DataAmplificationTaskController.class);
+    @Resource
+    private IDataAmplificationTaskService dataAmplificationTaskService;
+
+    /**
+     * 查询数据扩增业务处理列表
+     */
+    @GetMapping("/list")
+    public CommonResult<PageResult<DataAmplificationTaskVo>> list(DataAmplificationTaskBo dataAmplificationTaskBo) {
+        return CommonResult.success(dataAmplificationTaskService.selectPage(dataAmplificationTaskBo));
+    }
+
+    /**
+     * 导出数据扩增业务处理列表
+     */
+    @Log(title = "数据扩增业务处理", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, DataAmplificationTaskBo dataAmplificationTaskBo) {
+        List<DataAmplificationTaskVo> list = dataAmplificationTaskService.selectList(dataAmplificationTaskBo);
+        ExcelUtil.exportExcel(list, "数据扩增业务处理", DataAmplificationTaskVo.class, response);
+    }
+
+    /**
+     * 获取数据扩增业务处理详细信息
+     */
+    @GetMapping(value = "/{id}")
+    public CommonResult<DataAmplificationTaskVo> getInfo(@PathVariable Long id) {
+        return CommonResult.success(dataAmplificationTaskService.selectById(id));
+    }
+
+    /**
+     * 新增数据扩增业务处理
+     */
+    @Log(title = "数据扩增业务处理", businessType = BusinessType.INSERT)
+    @RepeatSubmit()
+    @PostMapping
+    public CommonResult<Void> add(@Validated @RequestBody DataAmplificationTaskBo algorithmBizProcessBo) {
+        boolean inserted = dataAmplificationTaskService.insert(algorithmBizProcessBo);
+        if (!inserted) {
+            return CommonResult.fail("新增数据扩增业务处理记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 修改数据扩增业务处理
+     */
+    @Log(title = "数据扩增业务处理", businessType = BusinessType.UPDATE)
+    @RepeatSubmit()
+    @PutMapping
+    public CommonResult<Void> edit(@Validated @RequestBody DataAmplificationTaskBo dataAmplificationTaskBo) {
+        Boolean updated = dataAmplificationTaskService.update(dataAmplificationTaskBo);
+        if (!updated) {
+            return CommonResult.fail("修改数据扩增业务处理记录失败!");
+        }
+        return CommonResult.success();
+    }
+
+    /**
+     * 删除数据扩增业务处理
+     */
+    @Log(title = "数据扩增业务处理", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public CommonResult<Void> remove(@PathVariable Long[] ids) {
+        boolean deleted = dataAmplificationTaskService.deleteByIds(ids);
+        if (!deleted) {
+            return CommonResult.fail("删除数据扩增业务处理记录失败!");
+        }
+        return CommonResult.success();
+    }
+}

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

@@ -249,4 +249,9 @@ public class DataController extends BaseController {
     public CommonResult<Boolean> dataAmplify(@RequestBody DataAmplifyDto dataAmplifyDto) {
         return dataService.dataAmplify(dataAmplifyDto);
     }
+
+    @PostMapping("/amplifyForData")
+    public CommonResult<Boolean> amplifyForData(@RequestParam("id") String id) {
+        return dataService.amplifyForData(id);
+    }
 }

+ 21 - 2
taais-modules/taais-biz/src/main/java/com/taais/biz/controller/TargetIdentificationSubtaskController.java

@@ -1,6 +1,9 @@
 package com.taais.biz.controller;
 
+import java.util.Comparator;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 import lombok.RequiredArgsConstructor;
 import jakarta.servlet.http.HttpServletResponse;
@@ -39,8 +42,24 @@ public class TargetIdentificationSubtaskController extends BaseController {
      */
     @SaCheckPermission("identification:identificationSubtask:list")
     @GetMapping("/list")
-    public CommonResult<PageResult<TargetIdentificationSubtaskVo>> list(TargetIdentificationSubtaskBo targetIdentificationSubtaskBo) {
-        return CommonResult.success(targetIdentificationSubtaskService.selectPage(targetIdentificationSubtaskBo));
+    public CommonResult<PageResult<TargetIdentificationSubtaskVo>> list(TargetIdentificationSubtaskBo targetIdentificationSubtaskBo, Integer pageNum, Integer pageSize) {
+        List<TargetIdentificationSubtaskVo> list = targetIdentificationSubtaskService.selectList(targetIdentificationSubtaskBo);
+        List<TargetIdentificationSubtaskVo> collect = list.stream().sorted(((o1, o2) -> {
+                if ("数据扩增".equals(o1.getName())) {
+                    return -1;
+                }
+                if ("数据扩增".equals(o2.getName())) {
+                    return -1;
+                }
+                return 1;
+            })).skip((pageNum-1)*pageSize)
+            .limit(pageSize).toList();
+        PageResult<TargetIdentificationSubtaskVo> result = new PageResult<>();
+        result.setList(collect);
+        result.setTotal((long) list.size());
+        result.setPageNum(Long.valueOf(pageNum));
+        result.setPageSize(Long.valueOf(pageSize));
+        return CommonResult.success(result);
     }
 
     /**

+ 90 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/DataAmplificationTask.java

@@ -0,0 +1,90 @@
+package com.taais.biz.domain;
+
+import com.mybatisflex.annotation.Column;
+import com.mybatisflex.annotation.Id;
+import com.mybatisflex.annotation.Table;
+import com.taais.common.orm.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.util.Date;
+
+/**
+ * 目标识别子任务对象 target_identification_subtask
+ *
+ * @author Allen
+ * 2024-08-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Table(value = "data_amplification_task")
+public class DataAmplificationTask extends BaseEntity {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @Id
+    private Long id;
+
+    /**
+     * 子任务id
+     */
+    private Long subTaskId;
+
+    /**
+     * 参数类型
+     */
+    private String augmentationType;
+
+    private String inputImagePath;
+
+    private String outputImagePath;
+
+    /** 任务名称 */
+    private String name;
+
+    /** 任务状态 */
+    private String status;
+
+    /**
+     * 数据批次号
+     */
+    private String dataBatchNums;
+
+    /**
+     * 调用算法时所用的参数
+     */
+    private String parameters;
+
+    /**
+     * 开始时间
+     */
+    private Date startTime;
+
+    /**
+     * 结束时间
+     */
+    private Date endTime;
+
+    /**
+     * 耗时
+     */
+    private Integer costSecond;
+
+    /**
+     * 日志
+     */
+    private String log;
+
+    /**
+     * 备注
+     */
+    private String remarks;
+
+    /** 逻辑删除标志(0代表存在 1代表删除) */
+    @Column(isLogicDelete = true)
+    private Integer delFlag;
+
+}

+ 93 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/bo/DataAmplificationTaskBo.java

@@ -0,0 +1,93 @@
+package com.taais.biz.domain.bo;
+
+import com.mybatisflex.annotation.Column;
+import com.mybatisflex.annotation.Id;
+import com.taais.biz.domain.DataAmplificationTask;
+import com.taais.biz.domain.TargetIdentificationSubtask;
+import com.taais.common.orm.core.domain.BaseEntity;
+import io.github.linpeilie.annotations.AutoMapper;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.util.Date;
+
+/**
+ * 目标识别子任务业务对象 target_identification_subtask
+ *
+ * @author Allen
+ * @date 2024-08-17
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = DataAmplificationTask.class, reverseConvertGenerate = false)
+public class DataAmplificationTaskBo extends BaseEntity{
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    @Id
+    private Long id;
+
+    /**
+     * 子任务id
+     */
+    private Long subTaskId;
+
+    /**
+     * 参数类型
+     */
+    private String augmentationType;
+
+    /** 任务名称 */
+    private String name;
+
+    /** 任务状态 */
+    private String status;
+
+    /**
+     * 数据批次号
+     */
+    private String dataBatchNums;
+
+    /**
+     * 调用算法时所用的参数
+     */
+    private String parameters;
+
+    /**
+     * 开始时间
+     */
+    private Date startTime;
+
+    /**
+     * 结束时间
+     */
+    private Date endTime;
+
+    /**
+     * 耗时
+     */
+    private Integer costSecond;
+
+    /**
+     * 日志
+     */
+    private String log;
+
+    /**
+     * 备注
+     */
+    private String remarks;
+
+    /** 逻辑删除标志(0代表存在 1代表删除) */
+    @Column(isLogicDelete = true)
+    private Integer delFlag;
+
+    private String inputImagePath;
+
+    private String outputImagePath;
+
+}

+ 10 - 5
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/DataAmplifyDto.java

@@ -1,10 +1,12 @@
 package com.taais.biz.domain.dto;
 
+import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotEmpty;
 import jakarta.validation.constraints.NotNull;
 import lombok.*;
 import lombok.experimental.Accessors;
 
+import java.util.List;
 import java.util.Map;
 
 
@@ -19,19 +21,22 @@ import java.util.Map;
 @Accessors(chain = true)
 public class DataAmplifyDto {
 
-    @NotEmpty(message = "批次不能为空")
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    @NotBlank(message = "批次不能为空")
     private String batchNum;
 
-    @NotEmpty(message = "任务名称")
+    @NotBlank(message = "任务名称")
     private String taskName;
 
-    @NotEmpty(message = "扩充方式不能为空")
+    @NotBlank(message = "扩充方式不能为空")
     private String augmentationType;
 
     private String inputImagePath;
 
     private String outputImagePath;
 
-    @NotNull(message = "扩充算法配置不能为空")
-    private Map<String, String> otherParams;
+    @NotEmpty(message = "扩充算法配置不能为空")
+    private List<Map<String, String>> otherParams;
 }

+ 2 - 1
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/dto/task/CreateTargetIdentificationTaskDto.java

@@ -1,5 +1,6 @@
 package com.taais.biz.domain.dto.task;
 
+import com.taais.biz.domain.dto.DataAmplifyDto;
 import lombok.Data;
 
 import java.util.List;
@@ -36,5 +37,5 @@ public class CreateTargetIdentificationTaskDto {
     private Boolean hasTrainAugmentation;
 
     // 训练扩增的超参
-    private String trainAugmentationParams;
+    private DataAmplifyDto trainAugmentationParams;
 }

+ 91 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/domain/vo/DataAmplificationTaskVo.java

@@ -0,0 +1,91 @@
+package com.taais.biz.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.taais.biz.domain.AlgorithmTaskConfiguration;
+import com.taais.common.orm.core.domain.BaseEntity;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@ExcelIgnoreUnannotated
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = AlgorithmTaskConfiguration.class)
+public class DataAmplificationTaskVo extends BaseEntity implements Serializable {
+
+    @ExcelProperty(value = "主键ID")
+    private Long id;
+
+    /**
+     * 子任务id
+     */
+    @ExcelProperty(value = "子任务id")
+    private Long subTaskId;
+
+    /**
+     * 参数类型
+     */
+    @ExcelProperty(value = "参数类型")
+    private String augmentationType;
+
+    /** 任务名称 */
+    @ExcelProperty(value = "任务名称")
+    private String name;
+
+    /** 任务状态 */
+    @ExcelProperty(value = "任务状态")
+    private String status;
+
+    /**
+     * 数据批次号
+     */
+    @ExcelProperty(value = "数据批次号")
+    private String dataBatchNums;
+
+    /**
+     * 调用算法时所用的参数
+     */
+    @ExcelProperty(value = "调用算法时所用的参数")
+    private String parameters;
+
+    /**
+     * 开始时间
+     */
+    @ExcelProperty(value = "开始时间")
+    private Date startTime;
+
+    /**
+     * 结束时间
+     */
+    @ExcelProperty(value = "结束时间")
+    private Date endTime;
+
+    /**
+     * 耗时
+     */
+    @ExcelProperty(value = "耗时")
+    private Integer costSecond;
+
+    /**
+     * 日志
+     */
+    @ExcelProperty(value = "日志")
+    private String log;
+
+    /**
+     * 备注
+     */
+    @ExcelProperty(value = "备注")
+    private String remarks;
+
+    @ExcelProperty(value = "输入路径")
+    private String inputImagePath;
+
+    @ExcelProperty(value = "输出路径")
+    private String outputImagePath;
+
+}

+ 9 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/mapper/DataAmplificationTaskMapper.java

@@ -0,0 +1,9 @@
+package com.taais.biz.mapper;
+
+import com.mybatisflex.core.BaseMapper;
+import com.taais.biz.domain.DataAmplificationTask;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface DataAmplificationTaskMapper extends BaseMapper<DataAmplificationTask> {
+}

+ 25 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/service/IDataAmplificationTaskService.java

@@ -0,0 +1,25 @@
+package com.taais.biz.service;
+
+import com.taais.biz.domain.DataAmplificationTask;
+import com.taais.biz.domain.bo.DataAmplificationTaskBo;
+import com.taais.biz.domain.vo.DataAmplificationTaskVo;
+import com.taais.common.core.core.page.PageResult;
+
+import java.util.List;
+
+public interface IDataAmplificationTaskService {
+
+    DataAmplificationTaskVo selectById(Long id);
+
+    List<DataAmplificationTaskVo> selectList(DataAmplificationTaskBo taskBo);
+
+    PageResult<DataAmplificationTaskVo> selectPage(DataAmplificationTaskBo taskBo);
+
+    boolean insert(DataAmplificationTaskBo taskBo);
+
+    DataAmplificationTask insertTask(DataAmplificationTaskBo taskBo);
+
+    boolean update(DataAmplificationTaskBo taskBo);
+
+    boolean deleteByIds(Long[] ids);
+}

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

@@ -103,4 +103,6 @@ public interface IDataService extends IBaseService<Data> {
      * @return {@link List }<{@link String }>
      */
     List<DataSelectVo>  getFormSelects(String field);
+
+    CommonResult<Boolean> amplifyForData(String id);
 }

+ 95 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/service/impl/DataAmplificationTaskServiceImpl.java

@@ -0,0 +1,95 @@
+package com.taais.biz.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.mybatisflex.core.paginate.Page;
+import com.mybatisflex.core.query.QueryWrapper;
+import com.taais.biz.domain.DataAmplificationTask;
+import com.taais.biz.domain.bo.DataAmplificationTaskBo;
+import com.taais.biz.domain.vo.DataAmplificationTaskVo;
+import com.taais.biz.mapper.DataAmplificationTaskMapper;
+import com.taais.biz.service.IDataAmplificationTaskService;
+import com.taais.common.core.core.page.PageResult;
+import com.taais.common.core.utils.MapstructUtils;
+import com.taais.common.orm.core.page.PageQuery;
+import com.taais.common.orm.core.service.impl.BaseServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import jakarta.annotation.Resource;
+import java.util.Arrays;
+import java.util.List;
+
+import static com.taais.biz.domain.table.DataAmplificationTaskTableDef.DATA_AMPLIFICATION_TASK;
+
+/**
+ * 数据扩增任务 Service 业务层处理
+ */
+@Service
+@Slf4j
+public class DataAmplificationTaskServiceImpl extends BaseServiceImpl<DataAmplificationTaskMapper, DataAmplificationTask> implements IDataAmplificationTaskService {
+
+    @Resource
+    private DataAmplificationTaskMapper dataAmplificationTaskMapper;
+
+    @Override
+    public QueryWrapper query() {
+        return super.query().from(DATA_AMPLIFICATION_TASK);
+    }
+
+    private QueryWrapper buildQueryWrapper(DataAmplificationTaskBo taskBo) {
+        QueryWrapper queryWrapper = super.buildBaseQueryWrapper();
+        queryWrapper.and(DATA_AMPLIFICATION_TASK.SUB_TASK_ID.eq(taskBo.getSubTaskId()));
+        queryWrapper.and(DATA_AMPLIFICATION_TASK.NAME.like(taskBo.getName()));
+        queryWrapper.and(DATA_AMPLIFICATION_TASK.STATUS.eq(taskBo.getStatus()));
+        queryWrapper.and(DATA_AMPLIFICATION_TASK.REMARKS.like(taskBo.getRemarks()));
+        return queryWrapper;
+    }
+
+    @Override
+    public DataAmplificationTaskVo selectById(Long id) {
+        return this.getOneAs(query().where(DATA_AMPLIFICATION_TASK.ID.eq(id)), DataAmplificationTaskVo.class);
+    }
+
+    @Override
+    public List<DataAmplificationTaskVo> selectList(DataAmplificationTaskBo taskBo) {
+        QueryWrapper queryWrapper = buildQueryWrapper(taskBo);
+        return this.listAs(queryWrapper, DataAmplificationTaskVo.class);
+    }
+
+    @Override
+    public PageResult<DataAmplificationTaskVo> selectPage(DataAmplificationTaskBo taskBo) {
+        QueryWrapper queryWrapper = buildQueryWrapper(taskBo);
+        Page<DataAmplificationTaskVo> page = this.pageAs(PageQuery.build(), queryWrapper, DataAmplificationTaskVo.class);
+        return PageResult.build(page);
+    }
+
+    @Override
+    public boolean insert(DataAmplificationTaskBo taskBo) {
+        DataAmplificationTask task = MapstructUtils.convert(taskBo, DataAmplificationTask.class);
+        return this.save(task);
+    }
+
+    @Override
+    public DataAmplificationTask insertTask(DataAmplificationTaskBo taskBo) {
+        DataAmplificationTask task = MapstructUtils.convert(taskBo, DataAmplificationTask.class);
+        this.save(task);
+        return task;
+    }
+
+    @Override
+    public boolean update(DataAmplificationTaskBo taskBo) {
+        DataAmplificationTask task = MapstructUtils.convert(taskBo, DataAmplificationTask.class);
+        if (ObjectUtil.isNotNull(task) && ObjectUtil.isNotNull(task.getId())) {
+            return this.updateById(task);
+        }
+        return false;
+    }
+
+    @Transactional
+    @Override
+    public boolean deleteByIds(Long[] ids) {
+        return this.removeByIds(Arrays.asList(ids));
+    }
+
+}

+ 166 - 9
taais-modules/taais-biz/src/main/java/com/taais/biz/service/impl/DataServiceImpl.java

@@ -2,19 +2,21 @@ package com.taais.biz.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.http.HttpRequest;
-import cn.hutool.http.HttpUtil;
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.mybatisflex.core.paginate.Page;
 import com.mybatisflex.core.query.QueryWrapper;
+import com.taais.biz.constant.BizConstant;
 import com.taais.biz.domain.Data;
+import com.taais.biz.domain.bo.DataAmplificationTaskBo;
 import com.taais.biz.domain.bo.DataBo;
 import com.taais.biz.domain.vo.BatchDataResult;
 import com.taais.biz.domain.dto.DataAmplifyDto;
+import com.taais.biz.domain.vo.DataAmplificationTaskVo;
 import com.taais.biz.domain.vo.DataSelectVo;
 import com.taais.biz.domain.vo.DataVo;
 import com.taais.biz.mapper.DataMapper;
+import com.taais.biz.service.IDataAmplificationTaskService;
 import com.taais.biz.service.IDataService;
 import com.taais.common.core.config.TaaisConfig;
 import com.taais.common.core.core.domain.CommonResult;
@@ -34,6 +36,7 @@ import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
@@ -48,7 +51,9 @@ import java.time.Instant;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
 import static com.taais.biz.domain.table.DataTableDef.DATA;
@@ -68,13 +73,16 @@ public class DataServiceImpl extends BaseServiceImpl<DataMapper, Data> implement
     private static final String RAR = ".rar";
     private static final String TXT = ".txt";
     private static final String[] VALID_EXTENSIONS = {".jpg", ".jpeg", ".png"};
-    private static final String PYTHON_DATA_AMPLIFY_API = "http://127.0.0.1:9096/api/data/amplify";
+    private static final String PYTHON_DATA_AMPLIFY_API = "http://127.0.0.1:11001/augment";
     private static final String RESULT_CODE = "status";
     private static final String RESULT_STATUS = "200";
     private static final String AMPLIFY = "/AMPLIFY/";
     @Resource
     private DataMapper dataMapper;
 
+    @Resource
+    private IDataAmplificationTaskService dataAmplificationTaskService;
+
     @Override
     public QueryWrapper query() {
         return super.query().from(DATA);
@@ -278,7 +286,6 @@ public class DataServiceImpl extends BaseServiceImpl<DataMapper, Data> implement
         if (dataList.isEmpty()) {
             return CommonResult.fail("该批次下没有文件数据,请重新选择批次!");
         }
-        //TODO: 此处需要定义任务开始,把相关任务信息添加上(任务名称、任务开始时间、任务类型),然后再处理文件。
 
         List<Data> dataListInfo = dataList.stream().filter(data -> !StringUtils.isEmpty(data.getUrl())).toList();
         if (dataListInfo.isEmpty()) {
@@ -291,6 +298,9 @@ public class DataServiceImpl extends BaseServiceImpl<DataMapper, Data> implement
         String formattedDate = currentDate.format(formatter);
         filePath = filePath + File.separator + formattedDate;
         String finalFilePath = filePath;
+        Date startTime = new Date();
+        AtomicBoolean success = new AtomicBoolean(true);
+        AtomicReference<String> message = new AtomicReference<>("");
         dataListInfo.forEach(dataInfo -> {
             try {
                 //循环调用Python扩增接口
@@ -305,23 +315,33 @@ public class DataServiceImpl extends BaseServiceImpl<DataMapper, Data> implement
                 bodyJson.put("outputImagePath", outputImagePath);
                 bodyJson.put("otherParams", dataAmplifyDto.getOtherParams());
                 //实际请求接口,接口未提供,暂且注释
-//                String response = HttpRequest.post(PYTHON_DATA_AMPLIFY_API)
-//                        .body(JsonUtils.toJsonString(bodyJson))
-//                        .execute().body();
-                String response = "{\"status\":200,\"msg\":\"扩增成功\"}";
+                String response = HttpRequest.post(PYTHON_DATA_AMPLIFY_API)
+                    .body(JsonUtils.toJsonString(bodyJson))
+                    .execute().body();
+//                String response = "{\"status\":200,\"msg\":\"扩增成功\"}";
                 ObjectMapper objectMapper = new ObjectMapper();
                 JsonNode rootNode = objectMapper.readTree(response);
                 String resultCode = rootNode.path(RESULT_CODE).asText();
                 //判断接口是否响应成功
                 if (!RESULT_STATUS.equals(resultCode)) {
-                    throw new RuntimeException("调用Python接口返回扩增失败");
+                    success.set(true);
                 }
+                message.set(rootNode.path("msg").asText());
                 //处理当前目录文件,并进行入库
                 saveDataInfo(outputImagePath, dataInfo);
             } catch (Exception e) {
                 throw new RuntimeException(e);
             }
         });
+        Date endTime = new Date();
+        DataAmplificationTaskBo update = new DataAmplificationTaskBo();
+        update.setId(Long.valueOf(dataAmplifyDto.getId()));
+        update.setStartTime(startTime);
+        update.setEndTime(endTime);
+        update.setCostSecond((int) (endTime.getTime() - startTime.getTime()));
+        update.setStatus(success.get() ? BizConstant.TASK_STATUS_SUCCEED : BizConstant.TASK_STATUS_FAILED);
+        update.setLog(message.get());
+        dataAmplificationTaskService.update(update);
         return CommonResult.fail("该批次下没有文件数据,请重新选择批次!");
     }
 
@@ -436,6 +456,143 @@ public class DataServiceImpl extends BaseServiceImpl<DataMapper, Data> implement
         return cacheList;
     }
 
+    @Override
+    @Transactional
+    public CommonResult<Boolean> amplifyForData(String id) {
+        DataAmplificationTaskVo taskVo = dataAmplificationTaskService.selectById(Long.valueOf(id));
+        DataAmplifyDto dataAmplifyDto = new DataAmplifyDto();
+        dataAmplifyDto.setId(taskVo.getId().toString());
+        dataAmplifyDto.setAugmentationType(taskVo.getAugmentationType());
+        List<Map<String, String>> maps = JsonUtils.parseArray(taskVo.getParameters(), Map.class);
+        dataAmplifyDto.setOtherParams(maps);
+        dataAmplifyDto.setBatchNum(taskVo.getDataBatchNums());
+        return this.doAmplify(dataAmplifyDto);
+    }
+
+    @Value("${taais.profile}")
+    private String profile;
+
+    private CommonResult<Boolean> doAmplify(DataAmplifyDto dataAmplifyDto) {
+        this.updateEmp(Long.valueOf(dataAmplifyDto.getId()));
+        String[] split = dataAmplifyDto.getBatchNum().split(",");
+        for (String batchNum : split) {
+            QueryWrapper query = query();
+            query.eq(Data::getBatchNum, batchNum);
+            List<Data> dataList = dataMapper.selectListByQuery(query);
+            if (dataList.isEmpty()) {
+                this.updateFail(Long.valueOf(dataAmplifyDto.getId()));
+                continue;
+            }
+
+            List<Data> dataListInfo = dataList.stream().filter(data -> !StringUtils.isEmpty(data.getUrl())).toList();
+            if (dataListInfo.isEmpty()) {
+                this.updateFail(Long.valueOf(dataAmplifyDto.getId()));
+                continue;
+            }
+            String filePath = TaaisConfig.getUploadPath();
+            LocalDate currentDate = LocalDate.now();
+            // 定义日期格式器
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
+            String formattedDate = currentDate.format(formatter);
+            filePath = filePath + File.separator + formattedDate;
+            String finalFilePath = filePath;
+            Map<String, String> otherParams = new HashMap<>();
+            for (Map<String, String> param : dataAmplifyDto.getOtherParams()) {
+                otherParams.put(param.get("agName"), param.get("defaultValue"));
+            }
+            Map<String, String> param = dataAmplifyDto.getOtherParams()
+                .stream().collect(Collectors.toMap(item -> item.get("agName"), item -> item.get("defaultValue")));
+            dataListInfo.forEach(dataInfo -> {
+                try {
+                    boolean success = true;
+                    String message = "";
+                    Date startTime = new Date();
+
+                    //循环调用Python扩增接口
+                    Map<String, Object> bodyJson = new HashMap<>();
+                    bodyJson.put("bizType", "数据扩增");
+                    bodyJson.put("bizId", dataAmplifyDto.getId());
+                    bodyJson.put("augmentationType", dataAmplifyDto.getAugmentationType());
+                    bodyJson.put("inputImagePath", dataInfo.getUrl());
+                    String outputImagePath = finalFilePath + AMPLIFY + System.currentTimeMillis();
+                    File desc = new File(outputImagePath);
+                    if (!desc.exists()) {
+                        log.info("创建文件目录: {}", desc.mkdirs());
+                    }
+                    bodyJson.put("outputImagePath", outputImagePath);
+                    bodyJson.put("otherParams", otherParams);
+                    String logPath = profile + "/task/log/" + dataAmplifyDto.getId() + "_log.log";
+                    System.out.println("logPath===>" + logPath);
+                    bodyJson.put("logPath", logPath);
+                    //实际请求接口,接口未提供,暂且注释
+                    String response = HttpRequest.post(PYTHON_DATA_AMPLIFY_API)
+                        .body(JsonUtils.toJsonString(bodyJson))
+                        .execute().body();
+//                String response = "{\"status\":200,\"msg\":\"扩增成功\"}";
+                    ObjectMapper objectMapper = new ObjectMapper();
+                    JsonNode rootNode = objectMapper.readTree(response);
+                    String resultCode = rootNode.path(RESULT_CODE).asText();
+                    //判断接口是否响应成功
+                    if (!RESULT_STATUS.equals(resultCode)) {
+                        success = false;
+                    }
+                    message = rootNode.path("msg").asText();
+                    //处理当前目录文件,并进行入库
+                    saveDataInfo(outputImagePath, dataInfo);
+
+                    DataAmplificationTaskVo taskVo = dataAmplificationTaskService.selectById(Long.valueOf(dataAmplifyDto.getId()));
+                    Date endTime = new Date();
+                    DataAmplificationTaskBo update = new DataAmplificationTaskBo();
+                    if (taskVo.getInputImagePath() != null) {
+                        update.setInputImagePath(taskVo.getInputImagePath()+"|" + dataInfo.getUrl());
+                    } else {
+                        update.setInputImagePath(dataInfo.getUrl());
+                    }
+                    if (taskVo.getOutputImagePath() != null) {
+                        update.setOutputImagePath(taskVo.getOutputImagePath()+"|" + outputImagePath);
+                    } else {
+                        update.setOutputImagePath(outputImagePath);
+                    }
+                    update.setId(Long.valueOf(dataAmplifyDto.getId()));
+                    update.setStartTime(startTime);
+                    update.setEndTime(endTime);
+                    update.setCostSecond((int) (endTime.getTime() - startTime.getTime()));
+                    update.setStatus(success ? BizConstant.TASK_STATUS_SUCCEED : BizConstant.TASK_STATUS_FAILED);
+                    update.setLog(taskVo.getLog() + "|" + message);
+                    update.setVersion(taskVo.getVersion());
+                    update.setRemarks(taskVo.getRemarks() + "|" + (int) (endTime.getTime() - startTime.getTime()));
+                    dataAmplificationTaskService.update(update);
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            });
+        }
+        //根据批次号获取该批次的所有文件数据
+        return CommonResult.success();
+    }
+
+    private void updateEmp(Long id) {
+        DataAmplificationTaskVo taskVo = dataAmplificationTaskService.selectById(id);
+        DataAmplificationTaskBo update = new DataAmplificationTaskBo();
+        update.setOutputImagePath("");
+        update.setInputImagePath("");
+        update.setId(id);
+        update.setLog("");
+        update.setVersion(taskVo.getVersion());
+        update.setRemarks("");
+        dataAmplificationTaskService.update(update);
+    }
+
+    private void updateFail(Long id) {
+        DataAmplificationTaskVo taskVo = dataAmplificationTaskService.selectById(id);
+        DataAmplificationTaskBo update = new DataAmplificationTaskBo();
+        update.setId(taskVo.getId());
+        update.setStatus(BizConstant.TASK_STATUS_FAILED);
+        update.setLog(taskVo.getLog() + "|" + "该批次下没有文件数据,请重新选择批次!");
+        update.setVersion(taskVo.getVersion());
+        dataAmplificationTaskService.update(update);
+    }
+
 
     /**
      * 解析目标目录所有文件,进行文件更名并入库

+ 34 - 0
taais-modules/taais-biz/src/main/java/com/taais/biz/service/impl/TargetIdentificationTaskServiceImpl.java

@@ -10,8 +10,10 @@ import com.mybatisflex.core.paginate.Page;
 import com.mybatisflex.core.query.QueryWrapper;
 import com.taais.biz.constant.BizConstant;
 import com.taais.biz.domain.TargetIdentificationSubtask;
+import com.taais.biz.domain.bo.DataAmplificationTaskBo;
 import com.taais.biz.domain.bo.TargetIdentificationSubtaskBo;
 import com.taais.biz.domain.bo.TargetIdentificationSubtaskDetailsBo;
+import com.taais.biz.domain.dto.DataAmplifyDto;
 import com.taais.biz.domain.dto.task.CreateTargetIdentificationTaskDto;
 import com.taais.biz.domain.dto.task.TaskDto;
 import com.taais.biz.domain.vo.AlgorithmModelVo;
@@ -21,6 +23,7 @@ import com.taais.biz.service.*;
 import com.taais.common.core.utils.MapstructUtils;
 import com.taais.common.core.utils.StringUtils;
 import com.taais.common.core.utils.uuid.UUID;
+import com.taais.common.json.utils.JsonUtils;
 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;
@@ -61,6 +64,9 @@ public class TargetIdentificationTaskServiceImpl extends BaseServiceImpl<TargetI
     @Resource
     private DataServiceImpl dataService;
 
+    @Resource
+    private IDataAmplificationTaskService dataAmplificationTaskService;
+
     @Override
     public QueryWrapper query() {
         return super.query().from(TARGET_IDENTIFICATION_TASK);
@@ -211,6 +217,11 @@ public class TargetIdentificationTaskServiceImpl extends BaseServiceImpl<TargetI
         if (taskDto.getTaskItemList().contains("2")){
             createTestTask(taskBo.getId(),taskDto, records);
         }
+
+        // 创建扩增子任务
+        if (taskDto.getHasTrainAugmentation()) {
+            createDataAmplifyTask(taskBo.getId(), taskDto);
+        }
         return null;
     }
 
@@ -501,6 +512,29 @@ public class TargetIdentificationTaskServiceImpl extends BaseServiceImpl<TargetI
         }
     }
 
+    private void createDataAmplifyTask(Long taskId, CreateTargetIdentificationTaskDto taskDto) {
+        List<String> trainBatchNumList = taskDto.getTrainBatchNumList();
+        for (String batchNumber : trainBatchNumList) {
+            TargetIdentificationSubtaskBo subtask = new TargetIdentificationSubtaskBo();
+            subtask.setName("数据扩增");
+            subtask.setStatus(BizConstant.TASK_STATUS_PENDING);
+            subtask.setTaskId(taskId);
+            subtask.setRemarks("DEFAULT_REMARK");
+            TargetIdentificationSubtask insertSubtask = subtaskService.insertSubtask(subtask);
+
+            DataAmplifyDto amplifyDto = taskDto.getTrainAugmentationParams();
+            DataAmplificationTaskBo dataAmplificationTaskBo = new DataAmplificationTaskBo();
+            dataAmplificationTaskBo.setSubTaskId(insertSubtask.getId());
+            dataAmplificationTaskBo.setName(amplifyDto.getTaskName());
+            dataAmplificationTaskBo.setStatus(BizConstant.TASK_STATUS_PENDING);
+            dataAmplificationTaskBo.setDataBatchNums(batchNumber);
+            dataAmplificationTaskBo.setAugmentationType(amplifyDto.getAugmentationType());
+            dataAmplificationTaskBo.setParameters(JsonUtils.toJsonString(amplifyDto.getOtherParams()));
+            dataAmplificationTaskBo.setDelFlag(0);
+            dataAmplificationTaskService.insert(dataAmplificationTaskBo);
+        }
+    }
+
 
     // todo 检查数据是否有问题
     private String checkTask(CreateTargetIdentificationTaskDto taskDto) {