feat:工作负载/项目上传文件

This commit is contained in:
2025-11-13 17:47:07 +08:00
parent 951719c023
commit 994e97337e
29 changed files with 294 additions and 7 deletions

View File

@@ -1,4 +1,4 @@
package com.sdm.data.model.req;
package com.sdm.common.entity.req.data;
import com.alibaba.fastjson2.annotation.JSONField;
import com.sdm.common.entity.enums.FileBizTypeEnum;

View File

@@ -4,6 +4,7 @@ import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.req.data.CreateDirReq;
import com.sdm.common.entity.req.data.DelDirReq;
import com.sdm.common.entity.req.data.RenameDirReq;
import com.sdm.common.entity.req.data.UploadFilesReq;
import com.sdm.common.entity.req.system.LaunchApproveReq;
import com.sdm.common.entity.resp.data.FileMetadataInfoResp;
import com.sdm.common.feign.inter.data.IDataFeignClient;
@@ -84,4 +85,17 @@ public class DataClientFeignClientImpl implements IDataFeignClient {
}
}
@Override
public SdmResponse uploadFiles(UploadFilesReq req) {
SdmResponse response;
try {
response = dataClient.uploadFiles(req);
log.info("上传文件响应:"+ response);
return response;
} catch (Exception e) {
log.error("上传文件失败", e);
return SdmResponse.failed("上传文件失败");
}
}
}

View File

@@ -4,10 +4,12 @@ import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.req.data.CreateDirReq;
import com.sdm.common.entity.req.data.DelDirReq;
import com.sdm.common.entity.req.data.RenameDirReq;
import com.sdm.common.entity.req.data.UploadFilesReq;
import com.sdm.common.entity.req.system.LaunchApproveReq;
import com.sdm.common.entity.resp.data.FileMetadataInfoResp;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@@ -35,4 +37,7 @@ public interface IDataFeignClient {
@PostMapping("/data/approveDataFile")
SdmResponse approveDataFile(@RequestBody LaunchApproveReq req);
@PostMapping(value = "/uploadSimulationNodeFiles",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
SdmResponse uploadFiles(UploadFilesReq req);
}

View File

@@ -4,6 +4,7 @@ import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.req.data.CreateDirReq;
import com.sdm.common.entity.req.data.DelDirReq;
import com.sdm.common.entity.req.data.RenameDirReq;
import com.sdm.common.entity.req.data.UploadFilesReq;
import com.sdm.common.entity.resp.PageDataResp;
import com.sdm.data.model.req.RenameFileReq;
import com.sdm.common.entity.req.system.LaunchApproveReq;

View File

@@ -3,6 +3,7 @@ package com.sdm.data.controller;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.req.data.CreateDirReq;
import com.sdm.common.entity.req.data.UploadFilesReq;
import com.sdm.data.model.entity.FileMetadataInfo;
import com.sdm.data.model.req.*;
import com.sdm.data.service.IDimensionTemplateService;

View File

@@ -40,4 +40,11 @@ public class QueryDirReq extends BaseReq{
// 查询文件或文件夹
@Schema(description = "查询文件或文件夹: 1-文件夹2-文件 不传查询全部 DataType ")
Integer queryTarget =null;
/**
* 项目节点id
*/
@Schema(description = "项目id")
String projectId;
}

View File

@@ -1,6 +1,7 @@
package com.sdm.data.model.req;
import com.alibaba.fastjson2.annotation.JSONField;
import com.sdm.common.entity.req.data.UploadFilesReq;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;

View File

@@ -4,6 +4,7 @@ import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.req.data.CreateDirReq;
import com.sdm.common.entity.req.data.DelDirReq;
import com.sdm.common.entity.req.data.RenameDirReq;
import com.sdm.common.entity.req.data.UploadFilesReq;
import com.sdm.common.entity.resp.PageDataResp;
import com.sdm.data.model.entity.FileMetadataInfo;
import com.sdm.data.model.req.RenameFileReq;

View File

@@ -2,6 +2,7 @@ package com.sdm.data.service;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.req.data.CreateDirReq;
import com.sdm.common.entity.req.data.UploadFilesReq;
import com.sdm.data.model.entity.DimensionTemplate;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sdm.data.model.entity.FileMetadataInfo;

View File

@@ -9,6 +9,7 @@ import com.sdm.common.entity.enums.DataTypeEnum;
import com.sdm.common.entity.enums.DirTypeEnum;
import com.sdm.common.entity.req.data.CreateDirReq;
import com.sdm.common.entity.req.data.DelDirReq;
import com.sdm.common.entity.req.data.UploadFilesReq;
import com.sdm.common.entity.req.project.DelNodeReq;
import com.sdm.common.entity.resp.AllNodeByProjectIdAndTypeResp;
import com.sdm.common.feign.impl.project.SimulationNodeFeignClientImpl;

View File

@@ -12,6 +12,7 @@ import com.sdm.common.entity.enums.*;
import com.sdm.common.entity.req.data.CreateDirReq;
import com.sdm.common.entity.req.data.DelDirReq;
import com.sdm.common.entity.req.data.RenameDirReq;
import com.sdm.common.entity.req.data.UploadFilesReq;
import com.sdm.common.entity.req.system.LaunchApproveReq;
import com.sdm.common.entity.req.system.UserListReq;
import com.sdm.common.entity.req.system.UserQueryReq;

View File

@@ -12,6 +12,7 @@ import com.sdm.common.entity.pojo.system.SysCompany;
import com.sdm.common.entity.pojo.system.SysUserInfo;
import com.sdm.common.entity.req.data.CreateDirReq;
import com.sdm.common.entity.req.data.DelDirReq;
import com.sdm.common.entity.req.data.UploadFilesReq;
import com.sdm.data.model.req.RenameFileReq;
import com.sdm.common.service.CommonService;
import com.sdm.common.utils.*;

View File

@@ -1,11 +1,16 @@
package com.sdm.project.controller;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.req.data.UploadFilesReq;
import com.sdm.common.feign.inter.data.IDataFeignClient;
import com.sdm.project.model.bo.ModifyProjectNode;
import com.sdm.project.model.req.*;
import com.sdm.project.service.IDemandService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -79,4 +84,9 @@ public class SimulationDemandController {
return demandService.issueTask(req);
}
@PostMapping(value = "/uploadDemandFiles", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public SdmResponse uploadDemandFiles(UploadFilesReq req) {
return demandService.uploadDemandFiles(req);
}
}

View File

@@ -1,6 +1,7 @@
package com.sdm.project.controller;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.req.data.UploadFilesReq;
import com.sdm.common.entity.req.project.DelNodeReq;
import com.sdm.common.entity.req.project.RenameNodeReq;
import com.sdm.common.entity.req.project.SpdmNodeListReq;
@@ -12,6 +13,7 @@ import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.constraints.NotNull;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -197,4 +199,14 @@ public class SimulationNodeController implements ISimulationNodeFeignClient {
return nodeService.delteNode(req);
}
/**
* 上传项目文件
* @param req
* @return
*/
@PostMapping(value = "/uploadProjectFiles", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public SdmResponse uploadProjectFiles(UploadFilesReq req) {
return nodeService.uploadProjectFiles(req);
}
}

View File

@@ -12,7 +12,6 @@ import org.springframework.util.DigestUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;
@RestController
@RequestMapping(value = "/project")

View File

@@ -4,9 +4,11 @@ import com.sdm.common.common.SdmResponse;
import com.sdm.project.model.bo.ModifyTaskNode;
import com.sdm.project.model.req.*;
import com.sdm.project.model.resp.TaskCountResp;
import com.sdm.project.model.resp.UserWorkloadResp;
import com.sdm.project.service.ITaskService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.apache.catalina.User;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -78,4 +80,13 @@ public class SimulationTaskController {
return taskService.batchDeleteTask(taskOpr);
}
/**
* 工作负载 查询执行时间在指定时间段内,指定用户执行的任务列表
*/
@PostMapping("/listUserWorkloads")
@Operation(summary = "查询用户工作负载", description = "查询用户工作负载")
public SdmResponse<List<UserWorkloadResp>> listUserWorkloadsWithinTimeFrame(@RequestBody UserWorkloadReq req) {
return taskService.listUserWorkloadsWithinTimeFrame(req);
}
}

View File

@@ -1,5 +1,7 @@
package com.sdm.project.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sdm.project.model.entity.SimulationDemand;
import com.sdm.project.model.req.*;
import com.sdm.project.model.vo.*;
import org.apache.ibatis.annotations.Mapper;
@@ -8,7 +10,7 @@ import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface SimulationDemandMapper {
public interface SimulationDemandMapper extends BaseMapper<SimulationDemand> {
int addDemand(@Param("req") SpdmAddDemandReq req,@Param("tenantId") Long tenantId,@Param("jobNumber") Long jobNumber);

View File

@@ -35,4 +35,6 @@ public interface SimulationTaskMapper extends BaseMapper<SimulationTask> {
int updateTask(@Param("task") SpdmTaskVo task);
List<SimulationTask> getUserExecTaskWithinTimeFrame(@Param("req") UserWorkloadReq req);
}

View File

@@ -0,0 +1,88 @@
package com.sdm.project.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("simulation_demand")
@ApiModel(value="SimulationDemand对象", description="")
public class SimulationDemand implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@TableField("uuid")
private String uuid;
@TableField("demand_name")
private String demandName;
@TableField("demand_code")
private String demandCode;
@TableField("demand_type")
private String demandType;
@TableField("sim_type")
private String simType;
@TableField("demand_status")
private String demandStatus;
@TableField("achieve_status")
private String achieveStatus;
@TableField("progress")
private Integer progress;
@TableField("approval_status")
private String approvalStatus;
@TableField("begin_time")
private String beginTime;
@TableField("end_time")
private String endTime;
@TableField("finish_time")
private String finishTime;
@TableField("project_id")
private String projectId;
@TableField("phase_id")
private String phaseId;
@TableField("node_id")
private String nodeId;
@TableField("tenant_id")
private Long tenantId;
@TableField("creator")
private Long creator;
@TableField("create_time")
private String createTime;
@TableField("updater")
private Long updater;
@TableField("update_time")
private String updateTime;
@TableField("description")
private String description;
}

View File

@@ -0,0 +1,27 @@
package com.sdm.project.model.req;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import java.util.List;
@JsonIgnoreProperties(ignoreUnknown = true)
@Data
public class UserWorkloadReq {
/**
* 用户id列表
*/
List<String> userIds;
/**
* 起始时间
*/
private String beginTime;
/**
* 结束时间
*/
private String endTime;
private Long userId;
}

View File

@@ -0,0 +1,32 @@
package com.sdm.project.model.resp;
import com.sdm.project.model.entity.SimulationTask;
import lombok.Data;
import java.util.List;
@Data
public class UserWorkloadResp {
/**
* 用户id
*/
private String userId;
/**
* 用户姓名
*/
private String userName;
/**
* 任务数量
*/
private Integer taskNum;
/**
* 工作饱和度 任务数量*工时
*/
private double workload;
/**
* 任务列表
*/
private List<SimulationTask> taskList;
}

View File

@@ -1,6 +1,7 @@
package com.sdm.project.service;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.req.data.UploadFilesReq;
import com.sdm.project.model.req.*;
import org.springframework.stereotype.Service;
@@ -19,4 +20,6 @@ public interface IDemandService {
SdmResponse issueTask(SpdmTaskIssue req);
SdmResponse uploadDemandFiles(UploadFilesReq req);
}

View File

@@ -2,6 +2,7 @@ package com.sdm.project.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.entity.req.data.UploadFilesReq;
import com.sdm.common.entity.req.project.DelNodeReq;
import com.sdm.common.entity.req.project.RenameNodeReq;
import com.sdm.common.entity.req.project.SpdmNodeListReq;
@@ -50,4 +51,6 @@ public interface INodeService extends IService<SimulationNode> {
// 删除node/task/run
SdmResponse delteNode(DelNodeReq req);
SdmResponse uploadProjectFiles(UploadFilesReq req);
}

View File

@@ -5,6 +5,7 @@ import com.sdm.project.model.bo.ModifyTaskNode;
import com.sdm.project.model.req.*;
import com.sdm.project.model.resp.GetAllRunResultByTaskIdResp;
import com.sdm.project.model.resp.TaskCountResp;
import com.sdm.project.model.resp.UserWorkloadResp;
import org.springframework.stereotype.Service;
import java.util.List;
@@ -33,4 +34,6 @@ public interface ITaskService {
SdmResponse batchDeleteTask(SpdmTaskOpr taskOpr);
SdmResponse<List<UserWorkloadResp>> listUserWorkloadsWithinTimeFrame(UserWorkloadReq req);
}

View File

@@ -7,10 +7,12 @@ import com.sdm.common.common.SdmResponse;
import com.sdm.common.common.ThreadLocalContext;
import com.sdm.common.entity.enums.DirTypeEnum;
import com.sdm.common.entity.req.data.CreateDirReq;
import com.sdm.common.entity.req.data.UploadFilesReq;
import com.sdm.common.entity.req.system.UserQueryReq;
import com.sdm.common.entity.resp.system.CIDUserResp;
import com.sdm.common.feign.impl.data.DataClientFeignClientImpl;
import com.sdm.common.feign.impl.system.SysUserFeignClientImpl;
import com.sdm.common.feign.inter.data.IDataFeignClient;
import com.sdm.common.service.BaseService;
import com.sdm.common.utils.RandomUtil;
import com.sdm.project.common.MemberTypeEnum;
@@ -64,6 +66,9 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
@Autowired
private SysUserFeignClientImpl sysUserFeignClient;
@Autowired
private IDataFeignClient dataFeignClient;
@Transactional
@Override
@@ -602,6 +607,11 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
return response;
}
@Override
public SdmResponse uploadDemandFiles(UploadFilesReq req) {
return dataFeignClient.uploadFiles(req);
}
private String getLastNodeId(TaskNode taskNode) {
// List<String> tag1 = taskNode.getTag1();
// if (CollectionUtils.isNotEmpty(tag1)) {

View File

@@ -7,6 +7,7 @@ import com.sdm.common.common.ThreadLocalContext;
import com.sdm.common.entity.enums.DirTypeEnum;
import com.sdm.common.entity.enums.NodeTypeEnum;
import com.sdm.common.entity.req.data.CreateDirReq;
import com.sdm.common.entity.req.data.UploadFilesReq;
import com.sdm.common.entity.req.project.DelNodeReq;
import com.sdm.common.entity.req.project.RenameNodeReq;
import com.sdm.common.entity.req.project.SpdmNodeListReq;
@@ -17,6 +18,7 @@ import com.sdm.common.entity.resp.system.CIDUserResp;
import com.sdm.common.entity.resp.system.SysUserGroupDetailResp;
import com.sdm.common.feign.impl.data.DataClientFeignClientImpl;
import com.sdm.common.feign.impl.system.SysUserFeignClientImpl;
import com.sdm.common.feign.inter.data.IDataFeignClient;
import com.sdm.common.utils.RandomUtil;
import com.sdm.project.dao.SimulationDemandMapper;
import com.sdm.project.dao.SimulationNodeMapper;
@@ -80,6 +82,9 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
@Autowired
IProjectService projectService;
@Autowired
private IDataFeignClient dataFeignClient;
private HashMap<String, String> idMap = new HashMap<>();
@@ -981,4 +986,9 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
projectService.delete(spdmDeleteProjectReq);
return SdmResponse.success();
}
@Override
public SdmResponse uploadProjectFiles(UploadFilesReq req) {
return dataFeignClient.uploadFiles(req);
}
}

View File

@@ -24,10 +24,7 @@ import com.sdm.project.model.po.ProjectNodePo;
import com.sdm.project.model.po.TaskNodeMemberPo;
import com.sdm.project.model.po.TaskRunPo;
import com.sdm.project.model.req.*;
import com.sdm.project.model.resp.GetAllRunResultByTaskIdResp;
import com.sdm.project.model.resp.RunResultResp;
import com.sdm.project.model.resp.TasKPerformanceResp;
import com.sdm.project.model.resp.TaskCountResp;
import com.sdm.project.model.resp.*;
import com.sdm.project.model.vo.*;
import com.sdm.project.service.*;
import lombok.extern.slf4j.Slf4j;
@@ -944,4 +941,25 @@ public class TaskServiceImpl implements ITaskService {
simulationTaskAttentionService.lambdaUpdate().in(SimulationTaskAttention::getTaskId, taskIds).remove();
return SdmResponse.success();
}
@Override
public SdmResponse<List<UserWorkloadResp>> listUserWorkloadsWithinTimeFrame(UserWorkloadReq req) {
List<UserWorkloadResp> userWorkloadRespList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(req.getUserIds())) {
SdmResponse<List<CIDUserResp>> cidUserResp= sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(req.getUserIds().stream().map(Long::valueOf).toList()).build());
List<CIDUserResp> userList = cidUserResp.getData();
for (CIDUserResp userResp : userList) {
UserWorkloadResp workloadResp = new UserWorkloadResp();
workloadResp.setUserId(String.valueOf(userResp.getUserId()));
workloadResp.setUserName(userResp.getNickname());
req.setUserId(userResp.getUserId());
List<SimulationTask> taskList = mapper.getUserExecTaskWithinTimeFrame(req);
workloadResp.setTaskNum(taskList.size());
workloadResp.setWorkload(taskList.stream().filter(i -> i.getDays() != null).mapToDouble(SimulationTask::getDays).sum());
workloadResp.setTaskList(taskList);
userWorkloadRespList.add(workloadResp);
}
}
return SdmResponse.success(userWorkloadRespList);
}
}

View File

@@ -157,5 +157,26 @@
</select>
<select id="getUserExecTaskWithinTimeFrame" resultType="com.sdm.project.model.entity.SimulationTask">
select
*
from
simulation_task st
inner join simulation_task_member stm on st.uuid = stm.task_id
where
stm.type = 1
and stm.user_id = #{req.userId}
<if test="req.beginTime != null and req.beginTime != ''">
<![CDATA[
and STR_TO_DATE(st.begin_time,'%Y-%m-%d') >= #{req.beginTime}
]]>
</if>
<if test="req.endTime != null and req.endTime != ''">
<![CDATA[
and STR_TO_DATE(st.end_time,'%Y-%m-%d') <= #{req.endTime}
]]>
</if>
</select>
</mapper>

View File

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@@ -49,6 +50,7 @@ public class SysFormConfigure implements Serializable {
@Schema(description = "创建时间")
@TableField("createTime")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
}