Browse Source

fix merge

allen 8 months ago
parent
commit
c9213e4054

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

@@ -1,14 +1,18 @@
 package com.taais.biz.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.http.HttpRequest;
 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.dto.DataAmplifyDto;
 import com.taais.biz.domain.vo.BatchDataResult;
+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;
@@ -22,6 +26,7 @@ import com.taais.common.core.utils.StringUtils;
 import com.taais.common.core.utils.file.FileUploadUtils;
 import com.taais.common.core.utils.file.FileUtils;
 import com.taais.common.core.utils.file.UnPackedUtil;
+import com.taais.common.json.utils.JsonUtils;
 import com.taais.common.orm.core.page.PageQuery;
 import com.taais.common.orm.core.service.impl.BaseServiceImpl;
 import com.taais.common.redis.utils.RedisUtils;
@@ -46,6 +51,7 @@ import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
 
 import static com.taais.biz.domain.table.DataTableDef.DATA;
 
@@ -442,6 +448,139 @@ 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);
+    }
+
+    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 = TaaisConfig.getProfile() + "/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 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);
+    }
+
+    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);
+    }
 
     /**
      * 解析目标目录所有文件,进行文件更名并入库