Merge remote-tracking branch 'origin/main'

This commit is contained in:
2025-12-05 17:34:45 +08:00
22 changed files with 84 additions and 17 deletions

View File

@@ -137,7 +137,7 @@ public class DataClientFeignClientImpl implements IDataFeignClient {
}
@Override
public SdmResponse<FileMetadataInfoResp> queryFileMetadataInfo(String uuid, String uuidOwnType, Integer dirId) {
public SdmResponse<FileMetadataInfoResp> queryFileMetadataInfo(String uuid, String uuidOwnType, Long dirId) {
SdmResponse<FileMetadataInfoResp> response;
try {
response = dataClient.queryFileMetadataInfo(uuid, uuidOwnType, dirId);

View File

@@ -56,7 +56,7 @@ public interface IDataFeignClient {
SdmResponse uploadFiles(UploadFilesReq req);
@GetMapping("/data/queryFileMetadataInfo")
SdmResponse<FileMetadataInfoResp> queryFileMetadataInfo(@RequestParam(value = "uuid") String uuid, @RequestParam(value = "uuidOwnType") String uuidOwnType, @RequestParam(value = "dirId") Integer dirId);
SdmResponse<FileMetadataInfoResp> queryFileMetadataInfo(@RequestParam(value = "uuid") String uuid, @RequestParam(value = "uuidOwnType") String uuidOwnType, @RequestParam(value = "dirId") Long dirId);
@PostMapping("/data/downloadFileToLocal")
void downloadFileToLocal(@RequestParam(value = "fileId") @Validated Long fileId, @RequestParam(value = "path") @Validated String path);

View File

@@ -1,7 +1,11 @@
package com.sdm.data.aop;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.common.ThreadLocalContext;
import com.sdm.common.entity.enums.DirTypeEnum;
import com.sdm.common.entity.enums.FilePermissionEnum;
import com.sdm.common.entity.resp.data.FileMetadataInfoResp;
import com.sdm.data.service.IDataFileService;
import com.sdm.data.service.IFileUserPermissionService;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
@@ -19,6 +23,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.nio.file.AccessDeniedException;
import java.util.Arrays;
@Aspect
@Component
@@ -26,6 +31,8 @@ public class PermissionCheckAspect {
@Autowired
private IFileUserPermissionService fileUserPermissionService;
@Autowired
private IDataFileService dataFileService;
private final ExpressionParser parser = new SpelExpressionParser();
private final EvaluationContext context = SimpleEvaluationContext.forReadOnlyDataBinding().build();
@@ -42,10 +49,17 @@ public class PermissionCheckAspect {
if (fileId == null) {
throw new RuntimeException("无法解析 fileId请检查 @FilePermissionCheck.fileIdExpression()");
}
// 检查权限
if (!fileUserPermissionService.hasFilePermission(fileId, userId, filePermissionCheck.value())) {
throw new RuntimeException("用户无操作文件和文件夹权限");
// 知识库和项目文件需要验证权限
SdmResponse<FileMetadataInfoResp> sdmResponse = dataFileService.queryFileMetadataInfo(null, null, fileId);
if (sdmResponse.getData() != null) {
String objectKey = sdmResponse.getData().getObjectKey();
String dirName = objectKey.substring(0, objectKey.indexOf("/"));
if (Arrays.asList(DirTypeEnum.KNOWLEDGE_BASE_DIR.getDirName(), DirTypeEnum.PROJECT_NODE_DIR.getDirName()).contains(dirName)) {
// 检查权限
if (!fileUserPermissionService.hasFilePermission(fileId, userId, filePermissionCheck.value())) {
throw new RuntimeException("用户无操作文件和文件夹权限");
}
}
}
}

View File

@@ -396,7 +396,7 @@ public class DataFileController implements IDataFeignClient {
@GetMapping("/queryFileMetadataInfo")
@Operation(summary = "根据节点uuid获取节点文件夹信息", description = "获取节点文件夹信息")
public SdmResponse<FileMetadataInfoResp> queryFileMetadataInfo(@RequestParam(value = "uuid") String uuid, @RequestParam(value = "uuidOwnType") String uuidOwnType, @RequestParam(value = "dirId") Integer dirId) {
public SdmResponse<FileMetadataInfoResp> queryFileMetadataInfo(@RequestParam(value = "uuid") String uuid, @RequestParam(value = "uuidOwnType") String uuidOwnType, @RequestParam(value = "dirId") Long dirId) {
return IDataFileService.queryFileMetadataInfo(uuid, uuidOwnType, dirId);
}

View File

@@ -311,7 +311,7 @@ public interface IDataFileService {
default SdmResponse approveDataFile(LaunchApproveReq req){return null;};
SdmResponse<FileMetadataInfoResp> queryFileMetadataInfo(String uuid, String uuidOwnType, Integer dirId);
SdmResponse<FileMetadataInfoResp> queryFileMetadataInfo(String uuid, String uuidOwnType, Long dirId);
SdmResponse<ChunkUploadMinioFileResp> chunkUploadToMinio(ChunkUploadMinioFileReq req);

View File

@@ -227,7 +227,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
}
@Override
public SdmResponse<FileMetadataInfoResp> queryFileMetadataInfo(String uuid, String uuidOwnType, Integer dirId) {
public SdmResponse<FileMetadataInfoResp> queryFileMetadataInfo(String uuid, String uuidOwnType, Long dirId) {
LambdaQueryWrapper<FileMetadataInfo> queryWrapper = new LambdaQueryWrapper<>();
if (dirId != 0) {
queryWrapper.eq(FileMetadataInfo::getId,dirId);

View File

@@ -1281,7 +1281,7 @@ public class SystemFileIDataFileServiceImpl implements IDataFileService {
}
@Override
public SdmResponse<FileMetadataInfoResp> queryFileMetadataInfo(String uuid, String uuidOwnType, Integer dirId) {
public SdmResponse<FileMetadataInfoResp> queryFileMetadataInfo(String uuid, String uuidOwnType, Long dirId) {
return null;
}

View File

@@ -1,8 +1,8 @@
package com.sdm.project.controller;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.ExportExcelFormat;
import com.sdm.common.entity.req.task.TaskExportExcelFormat;
import com.sdm.common.log.annotation.SysLog;
import com.sdm.project.model.bo.ModifyTaskNode;
import com.sdm.project.model.req.*;
import com.sdm.project.model.resp.TaskCountResp;
@@ -12,7 +12,6 @@ import com.sdm.project.service.ITaskService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.catalina.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -37,6 +36,7 @@ public class SimulationTaskController {
* @param req
* @return
*/
@SysLog("修改任务")
@PostMapping("/edit")
@Operation(summary = "修改任务", description = "修改任务")
public SdmResponse edit(@RequestBody ModifyTaskNode req) {
@@ -46,12 +46,14 @@ public class SimulationTaskController {
/**
* 驳回、启动、暂停、工时、关闭、关注、取消关注、编辑
*/
@SysLog("操作任务")
@PostMapping("/operation")
@Operation(summary = "操作任务", description = "操作任务")
public SdmResponse operation(@RequestBody SpdmTaskOpr taskOpr) {
return taskService.operation(taskOpr);
}
@SysLog("关注或取消关注任务")
@PostMapping("/attention")
@Operation(summary = "关注或取消关注任务", description = "关注或取消关注任务")
public SdmResponse attention(@RequestBody SpdmTaskAttentionReq req) {
@@ -82,6 +84,7 @@ public class SimulationTaskController {
return taskService.countByStatus(req);
}
@SysLog("批量删除任务")
@PostMapping("/batchDelete")
@Operation(summary = "批量删除任务", description = "批量删除任务")
public SdmResponse batchDeleteTask(@RequestBody SpdmTaskOpr taskOpr) {

View File

@@ -163,7 +163,7 @@ public class YAModelController {
{
KeyResultReq addTaskRunReq = new KeyResultReq();
addTaskRunReq.setFile(req.getFile());
SdmResponse<FileMetadataInfoResp> fileMetadataInfoResp = dataFeignClient.queryFileMetadataInfo(req.getScenario(), NodeTypeEnum.TASK.getValue(), 0);
SdmResponse<FileMetadataInfoResp> fileMetadataInfoResp = dataFeignClient.queryFileMetadataInfo(req.getScenario(), NodeTypeEnum.TASK.getValue(), 0L);
if (fileMetadataInfoResp.getData() != null) {
addTaskRunReq.setDirId(fileMetadataInfoResp.getData().getId());
}

View File

@@ -3,6 +3,7 @@ package com.sdm.project.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sdm.common.common.SdmResponse;
import com.sdm.project.model.entity.SimulationTask;
import com.sdm.project.model.po.TaskNodeExtraPo;
import com.sdm.project.model.req.SpdmAnalysisTaskListReq;
import com.sdm.project.model.req.*;
import com.sdm.project.model.vo.*;
@@ -47,4 +48,6 @@ public interface SimulationTaskMapper extends BaseMapper<SimulationTask> {
List<UserGroupDifficultyVo> getUserDifficultyStatistics(@Param("req") UserDifficultCompleteStatisticsReq req);
List<TaskNodeExtraPo> getTaskExtraList(@Param("taskIdList") List<String> taskIdList);
}

View File

@@ -87,6 +87,8 @@ public class SpdmDemandVo extends BaseEntity {
*/
private List<SpdmDemandExtraVo> extraList;
private List<SpdmDemandExtraVo> extras;
/**
* 项目名称
*/

View File

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.sdm.common.entity.pojo.BaseEntity;
import com.sdm.common.entity.resp.system.CIDUserResp;
import com.sdm.project.model.po.TaskNodeExtraPo;
import lombok.Data;
import java.util.List;
@@ -147,4 +148,6 @@ public class SpdmNewTaskVo extends BaseEntity {
@JsonProperty(value = "tag10")
private String tag10;
private List<TaskNodeExtraPo> extras;
}

View File

@@ -80,6 +80,8 @@ public class SpdmNodeVo extends BaseEntity {
*/
private List<SpdmNodeExtraVo> extraList;
private List<SpdmNodeExtraVo> extras;
/**
* 项目详情图片
*/

View File

@@ -452,6 +452,7 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
demandExtraMap = demandExtraList.stream().collect(Collectors.groupingBy(SpdmDemandExtraVo::getDemandId));
}
for (SpdmDemandVo spdmDemandVo : demandList) {
spdmDemandVo.setExtras(demandExtraMap.get(spdmDemandVo.getUuid()));
eachTaskList = taskMap.get(spdmDemandVo.getUuid());
spdmDemandVo.setProgress(CollectionUtils.isEmpty(eachTaskList) ? 0 : eachTaskList.stream().mapToInt(SpdmTaskVo::getProgress).sum() / eachTaskList.size());
if (StringUtils.isNotBlank(spdmDemandVo.getProjectId())) {
@@ -478,7 +479,6 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
}
}
spdmDemandVo.setEMemberList(spdmEUserVoList);
spdmDemandVo.setExtraList(demandExtraMap.get(spdmDemandVo.getUuid()));
}
jsonObject.put("data", demandList);
return SdmResponse.success(jsonObject);

View File

@@ -312,7 +312,7 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
nodeId = nodeExtraEntry.getKey();
for (SpdmNodeVo spdmNodeVo : nodeList) {
if (nodeId.equals(spdmNodeVo.getUuid())) {
spdmNodeVo.setExtraList(nodeExtraEntry.getValue());
spdmNodeVo.setExtras(nodeExtraEntry.getValue());
}
}
}

View File

@@ -533,7 +533,7 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
} else {
SimulationRun simulationRun = new SimulationRun();
// 设置算例的文件夹路径 挂在所属任务下面
SdmResponse<FileMetadataInfoResp> fileMetadataInfoResp = dataFeignClient.queryFileMetadataInfo(simulationTask.getUuid(), NodeTypeEnum.TASK.getValue(), 0);
SdmResponse<FileMetadataInfoResp> fileMetadataInfoResp = dataFeignClient.queryFileMetadataInfo(simulationTask.getUuid(), NodeTypeEnum.TASK.getValue(), 0L);
if (fileMetadataInfoResp.getData() != null) {
simulationRun.setFolderId(fileMetadataInfoResp.getData().getId());
}
@@ -671,7 +671,7 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
public SdmResponse createRunDir(CreateDirReq req) {
CreateDirReq createDirReq = new CreateDirReq();
// 获取算例文件夹id
SdmResponse<FileMetadataInfoResp> fileMetadataInfoResp = dataFeignClient.queryFileMetadataInfo(req.getUuId(), NodeTypeEnum.RUN.getValue(), 0);
SdmResponse<FileMetadataInfoResp> fileMetadataInfoResp = dataFeignClient.queryFileMetadataInfo(req.getUuId(), NodeTypeEnum.RUN.getValue(), 0L);
if (fileMetadataInfoResp.getData() != null) {
createDirReq.setParDirId(fileMetadataInfoResp.getData().getId());
}

View File

@@ -450,6 +450,11 @@ public class TaskServiceImpl implements ITaskService {
setPMemberList(task, copyTaskMemberList);
setEMemberList(task, copyTaskMemberList);
}
List<TaskNodeExtraPo> taskExtraList = mapper.getTaskExtraList(taskIdList);
Map<String, List<TaskNodeExtraPo>> taskExtraMap = Map.of();
if (CollectionUtils.isNotEmpty(taskExtraList)) {
taskExtraMap = taskExtraList.stream().collect(Collectors.groupingBy(TaskNodeExtraPo::getTaskId));
}
List<SpdmNewTaskVo> newTaskList = new ArrayList<>();
for (SpdmTaskVo taskVo : taskList) {
SpdmNewTaskVo spdmNewTaskVo = new SpdmNewTaskVo();
@@ -466,6 +471,7 @@ public class TaskServiceImpl implements ITaskService {
spdmNewTaskVo.setTag10(taskVo.getTag10());
spdmNewTaskVo.setPMemberList(taskVo.getPMemberList());
spdmNewTaskVo.setEMemberList(taskVo.getEMemberList());
spdmNewTaskVo.setExtras(taskExtraMap.get(taskVo.getUuid()));
newTaskList.add(spdmNewTaskVo);
}
jsonObject.put("data", newTaskList);

View File

@@ -309,5 +309,14 @@
</where>
</select>
<select id="getTaskExtraList" resultType="com.sdm.project.model.po.TaskNodeExtraPo">
select * from simulation_task_extra where task_id in
(
<foreach collection='taskIdList' item='taskId' index='index' separator=','>
#{taskId}
</foreach>
)
</select>
</mapper>

View File

@@ -4,6 +4,7 @@ package com.sdm.task.controller;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.req.performance.PerformanceExportExcelFormat;
import com.sdm.common.entity.req.task.DemandExportExcelFormat;
import com.sdm.task.model.dto.TaskPerformanceDto;
import com.sdm.task.model.entity.SimulationPerformance;
import com.sdm.task.model.req.BatchAddTaskPerformanceReq;
import com.sdm.task.service.ISimulationPerformanceService;
@@ -81,6 +82,16 @@ public class SimulationPerformanceController {
return simulationPerformanceService.batchDeleteTaskPerformance(performanceIds);
}
/**
* 编辑性能指标(适用任务和算例的)
*
*/
@PostMapping("/editPerformance")
@Operation(summary = "编辑性能指标")
public SdmResponse editPerformance(@RequestBody TaskPerformanceDto performanceDto) {
return simulationPerformanceService.editPerformance(performanceDto);
}
/**
* 导出指标列表
* @param performanceExportExcelFormat

View File

@@ -11,6 +11,8 @@ import java.time.LocalDateTime;
@Data
@Schema(description = "任务性能DTO")
public class TaskPerformanceDto {
@Schema(description = "id")
private Integer id;
@Schema(description = "UUID")
private String uuid;

View File

@@ -2,6 +2,7 @@ package com.sdm.task.service;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.req.performance.PerformanceExportExcelFormat;
import com.sdm.task.model.dto.TaskPerformanceDto;
import com.sdm.task.model.entity.SimulationPerformance;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sdm.task.model.req.BatchAddTaskPerformanceReq;
@@ -36,6 +37,8 @@ public interface ISimulationPerformanceService extends IService<SimulationPerfor
*/
SdmResponse batchDeleteTaskPerformance(List<Integer> performanceIds);
SdmResponse editPerformance(TaskPerformanceDto performanceDto);
/**
* 导出指标列表
* @param performanceExportExcelFormat

View File

@@ -26,6 +26,7 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
@@ -111,6 +112,14 @@ public class SimulationPerformanceServiceImpl extends ServiceImpl<SimulationPerf
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public SdmResponse editPerformance(TaskPerformanceDto performanceDto) {
SimulationPerformance simulationPerformance = new SimulationPerformance();
BeanUtils.copyProperties(performanceDto, simulationPerformance);
return SdmResponse.success(this.updateById(simulationPerformance));
}
@Override
public SdmResponse exportPerformance(PerformanceExportExcelFormat performanceExportExcelFormat, HttpServletResponse httpServletResponse) {
SdmResponse response = new SdmResponse();