Eureka 8 hónapja
szülő
commit
624f272e64

+ 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();
+    }
+}

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

@@ -28,6 +28,20 @@ public class DataAmplificationTask extends BaseEntity {
     @Id
     private Long id;
 
+    /**
+     * 子任务id
+     */
+    private Long subTaskId;
+
+    /**
+     * 参数类型
+     */
+    private String augmentationType;
+
+    private String inputImagePath;
+
+    private String outputImagePath;
+
     /** 任务名称 */
     private String name;
 

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

@@ -31,6 +31,16 @@ public class DataAmplificationTaskBo extends BaseEntity{
     @Id
     private Long id;
 
+    /**
+     * 子任务id
+     */
+    private Long subTaskId;
+
+    /**
+     * 参数类型
+     */
+    private String augmentationType;
+
     /** 任务名称 */
     private String name;
 
@@ -76,4 +86,8 @@ public class DataAmplificationTaskBo extends BaseEntity{
     @Column(isLogicDelete = true)
     private Integer delFlag;
 
+    private String inputImagePath;
+
+    private String outputImagePath;
+
 }

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

@@ -20,6 +20,18 @@ 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;
@@ -70,4 +82,10 @@ public class DataAmplificationTaskVo extends BaseEntity implements Serializable
     @ExcelProperty(value = "备注")
     private String remarks;
 
+    @ExcelProperty(value = "输入路径")
+    private String inputImagePath;
+
+    @ExcelProperty(value = "输出路径")
+    private String outputImagePath;
+
 }

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

@@ -39,6 +39,7 @@ public class DataAmplificationTaskServiceImpl extends BaseServiceImpl<DataAmplif
 
     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()));

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

@@ -12,6 +12,7 @@ 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;
@@ -35,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;
@@ -453,6 +455,137 @@ 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;
+            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", dataAmplifyDto.getOtherParams().get(0));
+                    String logPath = profile + "/task/" + 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);
+    }
+
 
     /**
      * 解析目标目录所有文件,进行文件更名并入库

+ 19 - 20
taais-modules/taais-biz/src/main/java/com/taais/biz/service/impl/TargetIdentificationTaskServiceImpl.java

@@ -513,27 +513,26 @@ public class TargetIdentificationTaskServiceImpl extends BaseServiceImpl<TargetI
     }
 
     private void createDataAmplifyTask(Long taskId, CreateTargetIdentificationTaskDto taskDto) {
-
-        DataAmplifyDto dataAmplifyDto = taskDto.getTrainAugmentationParams();
-        if (StringUtils.isBlank(dataAmplifyDto.getBatchNum())) {
-            return;
+        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");
+            subtaskService.insertSubtask(subtask);
+
+            // todo 创建数据扩增数据
+            DataAmplifyDto amplifyDto = taskDto.getTrainAugmentationParams();
+            DataAmplificationTaskBo dataAmplificationTaskBo = new DataAmplificationTaskBo();
+            dataAmplificationTaskBo.setSubTaskId(subtask.getId());
+            dataAmplificationTaskBo.setName(amplifyDto.getTaskName());
+            dataAmplificationTaskBo.setStatus(BizConstant.TASK_STATUS_PENDING);
+            dataAmplificationTaskBo.setDataBatchNums(batchNumber);
+            dataAmplificationTaskBo.setParameters(JsonUtils.toJsonString(amplifyDto.getOtherParams()));
+            dataAmplificationTaskBo.setDelFlag(0);
+            dataAmplificationTaskService.insert(dataAmplificationTaskBo);
         }
-        TargetIdentificationSubtaskBo subtask = new TargetIdentificationSubtaskBo();
-        subtask.setName("数据扩增");
-        subtask.setStatus(BizConstant.TASK_STATUS_PENDING);
-        subtask.setTaskId(taskId);
-        subtask.setRemarks("DEFAULT_REMARK");
-        subtaskService.insertSubtask(subtask);
-
-        // todo 创建数据扩增数据
-        DataAmplifyDto amplifyDto = taskDto.getTrainAugmentationParams();
-        DataAmplificationTaskBo dataAmplificationTaskBo = new DataAmplificationTaskBo();
-        dataAmplificationTaskBo.setName(amplifyDto.getTaskName());
-        dataAmplificationTaskBo.setStatus(BizConstant.TASK_STATUS_PENDING);
-        dataAmplificationTaskBo.setDataBatchNums(amplifyDto.getBatchNum());
-        dataAmplificationTaskBo.setParameters(JsonUtils.toJsonString(amplifyDto.getOtherParams()));
-        dataAmplificationTaskBo.setDelFlag(0);
-        dataAmplificationTaskService.insert(dataAmplificationTaskBo);
     }