diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/model/ModelsController.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/model/ModelsController.java index 01a77555..2424b234 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/model/ModelsController.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/model/ModelsController.java @@ -120,7 +120,7 @@ public class ModelsController { } /** - * 模型下载 + * 模型单个文件下载 * *@param models_version_id 模型版本表主键 * @return 单条数据 @@ -131,5 +131,18 @@ public class ModelsController { return AjaxResult.success(modelsService.downloadModels(models_version_id)); } + /** + * 模型打包下载 + * + *@param models_version_id 模型版本表主键 + * @return 单条数据 + */ + @GetMapping("/downloadAllFiles/{models_version_id}") + @ApiOperation(value = "下载模型", notes = "根据模型版本表id下载模型文件。") + public AjaxResult downloadAllModelFiles(@PathVariable("models_version_id") Integer models_version_id) { + return AjaxResult.success(modelsService.downloadAllModelFiles(models_version_id)); + } + + } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ExperimentDao.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ExperimentDao.java index fe7a750e..b36ef9cf 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ExperimentDao.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/mapper/ExperimentDao.java @@ -45,7 +45,7 @@ public interface ExperimentDao { * @param experiment 实例对象 * @return 影响行数 */ - int insert(Experiment experiment); + int insert(@Param("experiment") Experiment experiment); /** * 批量新增数据(MyBatis原生foreach方法) @@ -70,7 +70,7 @@ public interface ExperimentDao { * @param experiment 实例对象 * @return 影响行数 */ - int update(Experiment experiment); + int update(@Param("experiment") Experiment experiment); /** * 通过主键删除数据 diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ModelsService.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ModelsService.java index d0883c35..3461c596 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ModelsService.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ModelsService.java @@ -66,7 +66,11 @@ public interface ModelsService { ResponseEntity downloadModels(Integer id); + + Map uploadModels(MultipartFile file, Integer id) throws Exception; Map uploadModelsPipeline(ModelsVersion modelsVersion) throws Exception; + + ResponseEntity downloadAllModelFiles(Integer modelsVersionId); } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DatasetServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DatasetServiceImpl.java index 0b14f0e7..d2b190d7 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DatasetServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DatasetServiceImpl.java @@ -255,8 +255,8 @@ public class DatasetServiceImpl implements DatasetService { String version = datasetVersionToUse.getVersion(); Date createTime = datasetVersionToUse.getCreateTime(); String fileName = file.getOriginalFilename(); - String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(createTime); - String objectName = "datasets/" + username + "/" + dataset.getName() + "-" + timestamp + "/" + version + "/" + fileName; + // String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(createTime); + String objectName = "datasets/" + username + "/" + dataset.getName() + "/" + version + "/" + fileName; // 上传文件到MinIO try (InputStream inputStream = file.getInputStream()) { diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentInsServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentInsServiceImpl.java index 3aeb7e40..738f41a4 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentInsServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentInsServiceImpl.java @@ -56,12 +56,12 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { * @return 实例对象 */ @Override - public ExperimentIns queryById(Integer id) throws IOException { + public ExperimentIns queryById(Integer id) { ExperimentIns experimentIns = this.experimentInsDao.queryById(id); - if (experimentIns != null && (StringUtils.isEmpty(experimentIns.getStatus())) || !isTerminatedState(experimentIns)) { + if (experimentIns != null && (StringUtils.isEmpty(experimentIns.getStatus())) || !isTerminatedState(experimentIns.getStatus())) { experimentIns = this.queryStatusFromArgo(experimentIns); //只有当新状态是终止态时才更新数据库 - if (isTerminatedState(experimentIns)) { + if (isTerminatedState(experimentIns.getStatus())) { //同时更新各个节点 this.update(experimentIns); } @@ -78,17 +78,17 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { * @return 实验列表 */ @Override - public List getByExperimentId(Integer experimentId) throws IOException { + public List getByExperimentId(Integer experimentId) { List experimentInsList = experimentInsDao.getByExperimentId(experimentId); List result = new ArrayList(); if (experimentInsList!=null&&experimentInsList.size()>0) { for (ExperimentIns experimentIns : experimentInsList) { //当原本状态为null或非终止态时才调用argo接口 - if (experimentIns != null && (StringUtils.isEmpty(experimentIns.getStatus())) || !isTerminatedState(experimentIns)) { + if (experimentIns != null && (StringUtils.isEmpty(experimentIns.getStatus())) || !isTerminatedState(experimentIns.getStatus())) { experimentIns = this.queryStatusFromArgo(experimentIns); //只有当新状态是终止态时才更新数据库 - if (isTerminatedState(experimentIns)) { + if (isTerminatedState(experimentIns.getStatus())) { //同时更新各个节点 this.update(experimentIns); } @@ -109,7 +109,7 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { * @return 查询结果 */ @Override - public Page queryByPage(ExperimentIns experimentIns, PageRequest pageRequest) throws IOException { + public Page queryByPage(ExperimentIns experimentIns, PageRequest pageRequest) { long total = this.experimentInsDao.count(experimentIns); List experimentInsList = this.experimentInsDao.queryAllByLimit(experimentIns, pageRequest); if (experimentInsList!=null && experimentInsList.size()>0) { @@ -152,7 +152,7 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { * @return 实例对象 */ @Override - public ExperimentIns update(ExperimentIns experimentIns) throws IOException { + public ExperimentIns update(ExperimentIns experimentIns) { LoginUser loginUser = SecurityUtils.getLoginUser(); experimentIns.setUpdateBy(loginUser.getUsername()); experimentIns.setUpdateTime(new Date()); @@ -212,8 +212,8 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { String namespace = ins.getArgoInsNs(); String name = ins.getArgoInsName(); Integer id = ins.getId(); - // 创建请求数据map ExperimentIns experimentIns = this.experimentInsDao.queryById(id); + // 创建请求数据map Map requestData = new HashMap<>(); requestData.put("namespace", namespace); requestData.put("name", name); @@ -241,6 +241,10 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { if (status == null || status.isEmpty()) { throw new RuntimeException("工作流状态为空。"); } + //解析流水线开始时间,开始时间一定存在,所以不需要判断 + Date startTime = DateUtils.convertUTCtoShanghaiDate((String) status.get("startedAt")); + experimentIns.setStartTime(startTime); + //解析流水线结束时间 String finishedAtString = (String) status.get("finishedAt"); @@ -251,23 +255,21 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { // 解析nodes字段,提取节点状态并转换为JSON字符串 Map nodes = (Map) status.get("nodes"); - Map modifiedNodes = new LinkedHashMap<>(); - if (nodes != null ) { - for (Map.Entry nodeEntry : nodes.entrySet()) { - Map nodeDetails = (Map) nodeEntry.getValue(); - String templateName = (String) nodeDetails.get("displayName"); - modifiedNodes.put(templateName, nodeDetails); - } + if (nodes == null || nodes.isEmpty()) { + throw new RuntimeException("工作流的节点数据为空。"); } - String nodeStatusJson = JsonUtils.mapToJson(modifiedNodes); - experimentIns.setNodesStatus(nodeStatusJson); + Map modifiedNodes = new LinkedHashMap<>(); - //终止态为终止不改 - if (!StringUtils.equals(experimentIns.getStatus(),"Terminated")) { - experimentIns.setStatus(StringUtils.isNotEmpty((String) status.get("phase"))?(String) status.get("phase"):"Pending"); + for (Map.Entry nodeEntry : nodes.entrySet()) { + Map nodeDetails = (Map) nodeEntry.getValue(); + String templateName = (String) nodeDetails.get("displayName"); + modifiedNodes.put(templateName, nodeDetails); } + String nodeStatusJson = JsonUtils.mapToJson(modifiedNodes); + experimentIns.setNodesStatus(nodeStatusJson); + experimentIns.setStatus((String) status.get("phase")); return experimentIns; @@ -276,6 +278,7 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { } + } /** @@ -326,11 +329,9 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { // 从响应Map中直接获取"errCode"的值 Integer errCode = (Integer) runResMap.get("errCode"); if (errCode != null && errCode == 0) { + experimentIns.setStatus("Terminated"); //更新experimentIns,确保状态更新被保存到数据库 - ExperimentIns ins = queryStatusFromArgo(experimentIns); - ins.setStatus("Terminated"); - ins.setFinishTime(new Date()); - this.experimentInsDao.update(ins); + this.experimentInsDao.update(experimentIns); return true; } else { return false; @@ -394,27 +395,10 @@ public class ExperimentInsServiceImpl implements ExperimentInsService { } } - private boolean isTerminatedState(ExperimentIns ins) throws IOException { + private boolean isTerminatedState(String state) { // 定义终止态的列表,例如 "Succeeded", "Failed" 等 - String status = ins.getStatus(); - boolean flag = true; - List terminatedStates = Arrays.asList("Succeeded", "Failed"); - flag = terminatedStates.contains(status); - if (StringUtils.equals(status, "Terminated")){ - //如果跟node_status里面不一样,就要去更新node_status的信息 - String nodesStatus = ins.getNodesStatus(); - Map nodeMap = JsonUtils.jsonToMap(nodesStatus); - String keyStartsWithWorkflow = nodeMap.keySet().stream() - .filter(key -> key.startsWith("workflow-")) - .findFirst() - .orElse(null); - Map workflowMap = (Map) nodeMap.get(keyStartsWithWorkflow); - if (workflowMap != null){ - flag = StringUtils.equals("Terminated", (String) workflowMap.get("phase")); - } - } - - return flag; + List terminatedStates = Arrays.asList("Succeeded", "Failed", "Terminated"); + return terminatedStates.contains(state); } } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java index b0a8e637..36b6fc1c 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java @@ -103,6 +103,8 @@ public class ExperimentServiceImpl implements ExperimentService { /** * 分页查询实验状态 * + * + * * @param experiment 筛选条件 * @param pageRequest 分页对象 * @return 查询结果 diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsServiceImpl.java index f42282f8..14087f71 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsServiceImpl.java @@ -153,6 +153,8 @@ public class ModelsServiceImpl implements ModelsService { //判断权限,只有admin和创建者本身可以删除该数据集 LoginUser loginUser = SecurityUtils.getLoginUser(); String username = loginUser.getUsername(); + + String createdBy = models.getCreateBy(); if (!(StringUtils.equals(username,"admin") || StringUtils.equals(username,createdBy))){ return "无权限删除该模型"; @@ -246,8 +248,8 @@ public class ModelsServiceImpl implements ModelsService { String version = modelsVersionToUse.getVersion(); Date createTime = modelsVersionToUse.getCreateTime(); String fileName = file.getOriginalFilename(); - String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(createTime); - String objectName = "models/" + username + "/" + models.getName() + "-" + timestamp + "/" + version + "/" + fileName; + // String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(createTime); + String objectName = "models/" + username + "/" + models.getName() + "/" + version + "/" + fileName; // 上传文件到MinIO try (InputStream inputStream = file.getInputStream()) { @@ -270,6 +272,7 @@ public class ModelsServiceImpl implements ModelsService { String username = SecurityUtils.getLoginUser().getUsername(); // 检查是否存在 Models models = this.queryById(modelsVersion.getModelsId()); + if (models == null) { throw new Exception("模型不存在,请检查模型id"); } @@ -279,8 +282,8 @@ public class ModelsServiceImpl implements ModelsService { if (version == null) { //插表,因为这里是一次直接插表所以这里定掉date,然后用DAO插入 Date date = new Date(); - String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(date); - url = "models/" + username + "/" + models.getName() + "-" + timestamp + "/" + modelsVersion.getVersion() + "/" + modelsVersion.getFileName(); + //String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(date); + url = "models/" + username + "/" + models.getName() + "-" + "/" + modelsVersion.getVersion() + "/" + modelsVersion.getFileName(); modelsVersion.setUrl(url); modelsVersion.setCreateBy(username); modelsVersion.setUpdateBy(username); @@ -292,8 +295,8 @@ public class ModelsServiceImpl implements ModelsService { //改表 BeansUtils.copyPropertiesIgnoreNull(modelsVersion, version); Date createTime = version.getCreateTime(); - String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(createTime); - url = "models/" + username + "/" + models.getName() + "-" + timestamp + "/" + modelsVersion.getVersion() + "/" + modelsVersion.getFileName(); + // String timestamp = new SimpleDateFormat("yyyyMMdd-HHmmss").format(createTime); + url = "models/" + username + "/" + models.getName() + "-" + "/" + modelsVersion.getVersion() + "/" + modelsVersion.getFileName(); version.setUrl(url); modelsVersionService.update(version); } @@ -302,6 +305,17 @@ public class ModelsServiceImpl implements ModelsService { return result; } + /** + * 下载所有模型文件,用压缩包的方式返回 + * + * @param modelsVersionId models_version表的主键 + * @return 文件内容 + */ + @Override + public ResponseEntity downloadAllModelFiles(Integer modelsVersionId) { + return null; + } + private String extractFileName(String urlStr) { return urlStr.substring(urlStr.lastIndexOf('/') + 1); } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsVersionServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsVersionServiceImpl.java index d8ed146f..8732275d 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsVersionServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsVersionServiceImpl.java @@ -146,6 +146,7 @@ public class ModelsVersionServiceImpl implements ModelsVersionService { } public ModelsVersion queryByModelsVersion(ModelsVersion modelsVersion){ + return this.modelsVersionDao.queryByModelsVersion(modelsVersion); }