This commit is contained in:
2025-11-13 14:34:13 +08:00
179 changed files with 4220 additions and 1095 deletions

View File

@@ -71,7 +71,7 @@ public class SimulationNodeController implements ISimulationNodeFeignClient {
*/
@PostMapping("/list")
@Operation(summary = "项目列表", description = "项目列表")
public SdmResponse list(SpdmNodeListReq req) {
public SdmResponse list(@RequestBody SpdmNodeListReq req) {
return nodeService.list(req);
}

View File

@@ -12,6 +12,7 @@ import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Set;
@Mapper
public interface SimulationNodeMapper extends BaseMapper<SimulationNode> {
@@ -73,7 +74,7 @@ public interface SimulationNodeMapper extends BaseMapper<SimulationNode> {
List<SpdmNodeVo> getNodeListByIds(@Param("nodeIdList") List<String> nodeIdList);
List<UserGroupProjectVo> getUserGroupProjectStatistics(@Param("userGroupId") Long userGroupId, @Param("userId") Long userId);
List<UserGroupProjectVo> getUserGroupProjectStatistics(@Param("userIds")Set<Long> userIds );
List<UserGroupTaskCompleteVo> getUserGroupTaskCompleteStatistics(@Param("req") GetUserGroupTaskCompleteStatisticsReq req);

View File

@@ -4,16 +4,17 @@ import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.common.ThreadLocalContext;
import com.sdm.common.entity.constants.SystemConstants;
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.project.DelNodeReq;
import com.sdm.common.entity.req.project.RenameNodeReq;
import com.sdm.common.entity.req.project.SpdmNodeListReq;
import com.sdm.common.entity.req.system.QueryGroupDetailReq;
import com.sdm.common.entity.req.system.UserQueryReq;
import com.sdm.common.entity.resp.AllNodeByProjectIdAndTypeResp;
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.utils.RandomUtil;
@@ -96,9 +97,9 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
for (SpdmProjectNodeEditReq addNode : addNodeList) {
// 项目/阶段名称重名校验
if (CollectionUtils.isNotEmpty(this.lambdaQuery().eq(SimulationNode::getNodeName, addNode.getNodeName()).list())) {
if (SystemConstants.PROJECT_TAG.equals(addNode.getNodeType())) {
if (NodeTypeEnum.PROJECT.getValue().equals(addNode.getNodeType())) {
return SdmResponse.failed("同名项目已存在,请检查");
} else if (SystemConstants.PHASE_TAG.equals(addNode.getNodeType())) {
} else if (NodeTypeEnum.PHASE.getValue().equals(addNode.getNodeType())) {
return SdmResponse.failed("同名阶段已存在,请检查");
}
}
@@ -205,7 +206,7 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
List<SpdmNodeMemberVo> spdmNodeMemberVoList = nodeMapper.getNodeMemberListByNodeIdList(nodeIdList);
if (CollectionUtils.isNotEmpty(spdmNodeMemberVoList)) {
List<Long> usewrIdList = spdmNodeMemberVoList.stream().map(SpdmNodeMemberVo::getUserId).distinct().toList();
SdmResponse<List<CIDUserResp>> cidUserResp= sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(usewrIdList).build());
SdmResponse<List<CIDUserResp>> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(usewrIdList).build());
List<CIDUserResp> userList = cidUserResp.getData();
Map<Long, List<CIDUserResp>> userMap = Map.of();
@@ -320,7 +321,7 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
// 之前的tag
// preTag = entry.getKey() = "tag1"
String preTag = entry.getKey();
log.info("preTag为{}",preTag);
log.info("preTag为{}", preTag);
try {
// entry.getValue() = "uuid1,uuid2"
setTagProperty(addNode, preTag, entry.getValue());
@@ -333,7 +334,7 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
// 设置 当前节点所属项目根节点uuid
// addNode.getPid()为空时在创建项目ownRootNodeUuid就是addNode本身uuid
// addNode.getPid()不为空时在创建阶段ownRootNodeUuid就是入参的pid父节点
addNode.setOwnRootNodeUuid(ObjectUtils.isEmpty(addNode.getPid())?addNode.getUuid():addNode.getPid());
addNode.setOwnRootNodeUuid(ObjectUtils.isEmpty(addNode.getPid()) ? addNode.getUuid() : addNode.getPid());
addNode.setCreateTime(curDateStr);
addNode.setCreator(jobNumber);
addNode.setTenantId(tenantId);
@@ -373,12 +374,11 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
if (nodeMapper.addNodeBatch(addNodeList) <= 0) {
return null;
}
Optional<SpdmProjectNodeEditReq> projectOptional = addNodeList.stream().filter(node -> SystemConstants.PROJECT_TAG.equals(node.getNodeType())).findFirst();
Optional<SpdmProjectNodeEditReq> projectOptional = addNodeList.stream().filter(node -> NodeTypeEnum.PROJECT.getValue().equals(node.getNodeType())).findFirst();
if (projectOptional.isPresent()) {
SpdmProjectNodeEditReq projectNode = projectOptional.get();
String uuid = projectNode.getUuid();
// 创建项目节点的文件夹
createDir(uuid, NodeTypeEnum.NODE.getValue() , null, projectNode.getNodeName());
createDir(projectNode.getUuid(), projectNode.getNodeType(), null, projectNode.getNodeName());
} else {
List<ProjectNodePo> projectNodePoList = mapper.queryNodeListByNodeId(addNodeList.get(0).getPid());
if (CollectionUtils.isEmpty(projectNodePoList)) {
@@ -388,7 +388,7 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
ProjectNodePo projectNodePo = projectNodePoList.get(0);
String projectUuid = projectNodePo.getUuid();
for (SpdmProjectNodeEditReq node : addNodeList) {
createDir(node.getUuid(),NodeTypeEnum.NODE.getValue() , projectUuid, node.getNodeName());
createDir(node.getUuid(), node.getNodeType(), projectUuid, node.getNodeName());
}
}
if (CollectionUtils.isNotEmpty(allNodeManagerList) && nodeMapper.addNodeMemberBatch(allNodeManagerList) <= 0) {
@@ -477,7 +477,7 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
List<SpdmNodeMemberVo> spdmNodeMemberVoList = nodeMapper.getNodeMemberListByNodeIdList(Collections.singletonList(projectNode.getUuid()));
if (CollectionUtils.isNotEmpty(spdmNodeMemberVoList)) {
List<Long> usewrIdList = spdmNodeMemberVoList.stream().map(SpdmNodeMemberVo::getUserId).distinct().toList();
SdmResponse<List<CIDUserResp>> cidUserResp= sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(usewrIdList).build());
SdmResponse<List<CIDUserResp>> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(usewrIdList).build());
List<CIDUserResp> userList = cidUserResp.getData();
Map<Long, List<CIDUserResp>> userMap = Map.of();
@@ -564,7 +564,8 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
log.error("allNodeIdList{},未查询到团队成员", allNodeIdList);
return SdmResponse.success(new ArrayList<>());
}
List<Long> userIdList = spdmNodeMemberVoList.stream().map(SpdmNodeMemberVo::getUserId).distinct().collect(Collectors.toList());;
List<Long> userIdList = spdmNodeMemberVoList.stream().map(SpdmNodeMemberVo::getUserId).distinct().collect(Collectors.toList());
;
// 查询node节点下的task的成员仿真负责人和执行人
List<SimulationTask> taskList = simulationTaskService.lambdaQuery().in(SimulationTask::getNodeId, allNodeIdList).list();
@@ -574,7 +575,7 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
userIdList.addAll(taskMemberList.stream().map(SimulationTaskMember::getUserId).distinct().toList());
}
}
SdmResponse<List<CIDUserResp>> cidUserResp= sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(userIdList).build());
SdmResponse<List<CIDUserResp>> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(userIdList).build());
List<CIDUserResp> userList = cidUserResp.getData();
if (CollectionUtils.isEmpty(userList)) {
@@ -615,10 +616,10 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
/**
* 创建文件夹
*
* @param uuid 待创建节点uuid
* @param uuid 待创建节点uuid
* @param uuidOwnType 待创建节点类型node,task,run,performance
* @param parentUuid 父节点uuid
* @param dirName 待长江文件夹名称
* @param parentUuid 父节点uuid
* @param dirName 待长江文件夹名称
*/
private void createDir(String uuid, String uuidOwnType, String parentUuid, String dirName) {
CreateDirReq createDirReq = new CreateDirReq();
@@ -639,7 +640,7 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
List<AllNodeByProjectIdAndTypeResp> allNodeByProjectIdAndTypeRespList = new ArrayList<>();
List<SimulationNode> nodeList = this.lambdaQuery()
.eq(ObjectUtils.isNotEmpty(nodeId), SimulationNode::getId, nodeId)
.eq(ObjectUtils.isNotEmpty(nodeType),SimulationNode::getNodeType, nodeType)
.eq(ObjectUtils.isNotEmpty(nodeType), SimulationNode::getNodeType, nodeType)
.list();
if (CollectionUtils.isEmpty(nodeList)) {
return SdmResponse.failed("未找到节点");
@@ -703,23 +704,40 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
@Override
public SdmResponse getUserGroupProjectStatistics(Long userGroupId, Long userId) {
List<UserGroupProjectVo> userGroupProjectStatistics = this.baseMapper.getUserGroupProjectStatistics(userGroupId, userId);
if(CollectionUtils.isEmpty(userGroupProjectStatistics)) {
QueryGroupDetailReq req = new QueryGroupDetailReq();
req.setCurrent(1);
req.setSize(1000);
req.setId(userGroupId);
req.setTenantId(ThreadLocalContext.getTenantId());
SdmResponse<SysUserGroupDetailResp> sysUserGroupDetailRespSdmResponse = sysUserFeignClient.queryGroupDetail(req);
if (!sysUserGroupDetailRespSdmResponse.isSuccess()
|| ObjectUtils.isEmpty(sysUserGroupDetailRespSdmResponse.getData())
|| ObjectUtils.isEmpty(sysUserGroupDetailRespSdmResponse.getData().getUsers())
|| ObjectUtils.isEmpty(sysUserGroupDetailRespSdmResponse.getData().getUsers().getData())) {
return SdmResponse.success();
}
Map<Long, String> userId2Nickname = sysUserGroupDetailRespSdmResponse.getData().getUsers().getData().stream().collect(Collectors.toMap(CIDUserResp::getUserId, CIDUserResp::getNickname));
Set<Long> userIds = new HashSet<>();
if (ObjectUtils.isEmpty(userId)) {
userIds = userId2Nickname.keySet();
}else {
userIds.add(userId);
}
List<UserGroupProjectVo> userGroupProjectStatistics = this.baseMapper.getUserGroupProjectStatistics(userIds);
if (CollectionUtils.isEmpty(userGroupProjectStatistics)) {
return SdmResponse.success(new ArrayList<>());
}
// 按用户ID统计项目数量
Map<Long, Integer> userProjectCountMap = new HashMap<>();
// 存储每个用户的详细信息使用LinkedHashMap保持插入顺序
Map<Long, UserGroupProjectVo> userId2UserGroupProjectVo = new LinkedHashMap<>();
for (UserGroupProjectVo vo : userGroupProjectStatistics) {
Long userIdKey = vo.getUserId();
userProjectCountMap.put(userIdKey, userProjectCountMap.getOrDefault(userIdKey, 0) + 1);
// 只保存第一个遇到的用户信息,或者可以考虑保存最新的
if (!userId2UserGroupProjectVo.containsKey(userIdKey)) {
userId2UserGroupProjectVo.put(userIdKey, vo);
}
}
// 转换为List<Map<String, Object>>格式,便于前端展示
@@ -728,7 +746,7 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
for (Map.Entry<Long, Integer> entry : userProjectCountMap.entrySet()) {
Map<String, Object> item = new HashMap<>();
item.put("userId", entry.getKey());
item.put("userName", userId2UserGroupProjectVo.get(entry.getKey()).getNickname());
item.put("userName", userId2Nickname.get(entry.getKey()));
item.put("projectCount", entry.getValue());
userResult.add(item);
}
@@ -795,7 +813,7 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
userStat.setUserId(userId);
userStat.setUserName(item.getNickname());
Map<Float, Integer> statusCount = userStat.getDifficultyCount();
Map<Float, Integer> statusCount = userStat.getDifficultyCount();
if (statusCount == null) {
statusCount = new HashMap<>();
userStat.setDifficultyCount(statusCount);
@@ -823,7 +841,7 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
if ("task".equals(req.getQueryType())) {
// 处理任务完成情况统计
List<CommonGetCompleteFromTaskVo> commonCompleteStatisticsFromTask = this.baseMapper.getCommonCompleteStatisticsFromTask(req);
// 按tag分组统计任务状态
Map<String, CommonStatisticsVo> taskStatisticsMap = new HashMap<>();
@@ -855,7 +873,7 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
} else if ("performance".equals(req.getQueryType())) {
// 处理指标完成情况统计
List<CommonGetCompleteFromPerformanceVo> commonCompleteStatisticsFromPerformance = this.baseMapper.getCommonCompleteStatisticsFromPerformance(req);
// 按tag分组统计指标状态
Map<String, CommonStatisticsVo> performanceStatisticsMap = new HashMap<>();
@@ -892,32 +910,32 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
@Override
public SdmResponse getWorkstationReviewStatistics(GetWorkstationApproveStatusReq req) {
List<WorkstationApproveStatusVo> workstationApproveStatus = this.baseMapper.getWorkstationApproveStatus(req);
// 按tag分组统计审批状态
Map<String, CommonStatisticsVo> reviewStatisticsMap = new HashMap<>();
// 所有审批状态
Set<String> allApprovalStatus = new HashSet<>();
// 统计每个tag的各种审批状态数量
for (WorkstationApproveStatusVo item : workstationApproveStatus) {
String nodeName = item.getNodeName();
CommonStatisticsVo stat = reviewStatisticsMap.getOrDefault(nodeName, new CommonStatisticsVo());
stat.setName(nodeName);
Map<String, Integer> statusCount = stat.getStatusCount();
if (statusCount == null) {
statusCount = new HashMap<>();
stat.setStatusCount(statusCount);
}
String approvalStatus = item.getApprovalStatus();
allApprovalStatus.add(approvalStatus);
statusCount.put(approvalStatus, statusCount.getOrDefault(approvalStatus, 0) + 1);
reviewStatisticsMap.put(nodeName, stat);
}
// 转换为列表返回
List<CommonStatisticsVo> result = new ArrayList<>(reviewStatisticsMap.values());
JSONObject resultResponse = new JSONObject();
@@ -928,12 +946,12 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
@Override
public SdmResponse renameNode(RenameNodeReq req) {
if(NodeTypeEnum.TASK.getValue().equals(req.getUuidOwnType())){
if (NodeTypeEnum.TASK.getValue().equals(req.getUuidOwnType())) {
simulationTaskService.lambdaUpdate()
.set(SimulationTask::getTaskName, req.getNewName())
.eq(SimulationTask::getUuid, req.getUuid())
.update();
} else if(NodeTypeEnum.RUN.getValue().equals(req.getUuidOwnType())){
} else if (NodeTypeEnum.RUN.getValue().equals(req.getUuidOwnType())) {
simulationRunService.lambdaUpdate()
.set(SimulationRun::getRunName, req.getNewName())
.eq(SimulationRun::getUuid, req.getUuid())

View File

@@ -6,7 +6,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.sdm.common.common.ResultCode;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.common.ThreadLocalContext;
import com.sdm.common.entity.constants.SystemConstants;
import com.sdm.common.entity.enums.DirTypeEnum;
import com.sdm.common.entity.enums.NodeTypeEnum;
import com.sdm.common.entity.req.data.CreateDirReq;
@@ -119,9 +118,9 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
for (Map.Entry<String, List<TaskEditNodeReq>> taskEntry : editNodeListMap.entrySet()) {
nodeType = taskEntry.getKey();
log.info("nodeType为{}", nodeType);
if (SystemConstants.TASK_TAG.equals(nodeType)) {
if (NodeTypeEnum.TASK.getValue().equals(nodeType)) {
editTaskList(taskEntry.getValue());
}else if (SystemConstants.PERFORMANCE_TAG.equals(nodeType)) {
}else if (NodeTypeEnum.PERFORMANCE.getValue().equals(nodeType)) {
editPerformanceList(taskEntry.getValue());
}else {
SpdmEditNodeReq spdmEditNodeReq = new SpdmEditNodeReq();
@@ -620,9 +619,9 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
log.error("参数不能为空");
return SdmResponse.failed("参数不能为空");
}
List<SpdmDeleteProjectDetailReq> nodeList = deleteNodeList.stream().filter(node -> !SystemConstants.TASK_TAG.equals(node.getNodeType()) && !SystemConstants.PERFORMANCE_TAG.equals(node.getNodeType())).toList();
List<SpdmDeleteProjectDetailReq> taskList = deleteNodeList.stream().filter(node -> SystemConstants.TASK_TAG.equals(node.getNodeType())).toList();
List<SpdmDeleteProjectDetailReq> performanceList = deleteNodeList.stream().filter(node -> SystemConstants.PERFORMANCE_TAG.equals(node.getNodeType())).toList();
List<SpdmDeleteProjectDetailReq> nodeList = deleteNodeList.stream().filter(node -> !NodeTypeEnum.TASK.getValue().equals(node.getNodeType()) && !NodeTypeEnum.PERFORMANCE.getValue().equals(node.getNodeType())).toList();
List<SpdmDeleteProjectDetailReq> taskList = deleteNodeList.stream().filter(node -> NodeTypeEnum.TASK.getValue().equals(node.getNodeType())).toList();
List<SpdmDeleteProjectDetailReq> performanceList = deleteNodeList.stream().filter(node -> NodeTypeEnum.PERFORMANCE.getValue().equals(node.getNodeType())).toList();
if (CollectionUtils.isNotEmpty(performanceList)) {
List<String> performanceNodeIdList = performanceList.stream().map(SpdmDeleteProjectDetailReq::getUuid).toList();
log.info("删除指标:{}",performanceNodeIdList);
@@ -996,7 +995,7 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
taskNode.setExtras(projectNodeExtraPos);
taskNode.setNodeName(taskNode.getTaskName());
taskNode.setNodeCode(taskNode.getTaskCode());
taskNode.setNodeType(SystemConstants.TASK_TAG);
taskNode.setNodeType(NodeTypeEnum.TASK.getValue());
taskNode.setPid(nodeId);
taskNode.setGroup(taskNodePo.getGroupName());
if (StringUtils.isNotBlank(taskNode.getAnalyseSoftware())) {
@@ -1026,7 +1025,7 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
}
}
performanceNode.setExtras(eachTaskNodeExtraPoList);
performanceNode.setNodeType(SystemConstants.PERFORMANCE_TAG);
performanceNode.setNodeType(NodeTypeEnum.PERFORMANCE.getValue());
performanceNode.setPid(taskNodePo.getUuid());
performanceNodeChildren.add(performanceNode);
}
@@ -1572,13 +1571,13 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
}
for (TaskNode taskNode : projectNodeList) {
if (ObjectUtils.isEmpty(projectNodeMap.get(taskNode.getParentId()))
&& ObjectUtils.isEmpty(projectNodePoMap.get(taskNode.getParentId())) && !SystemConstants.PROJECT_TAG.equals(taskNode.getNodeType())) {
&& ObjectUtils.isEmpty(projectNodePoMap.get(taskNode.getParentId())) && !NodeTypeEnum.PROJECT.getValue().equals(taskNode.getNodeType())) {
log.error("新增节点时根据parentId{},未查询到节点", taskNode.getParentId());
response = SdmResponse.failed("新增节点时,创建文件失败");
return response;
}
createDir(taskNode.getUuid(),NodeTypeEnum.NODE.getValue(),
SystemConstants.PROJECT_TAG.equals(taskNode.getNodeType()) ? null : (ObjectUtils.isNotEmpty(projectNodePoMap.get(taskNode.getParentId()))
createDir(taskNode.getUuid(),taskNode.getNodeType(),
NodeTypeEnum.PROJECT.getValue().equals(taskNode.getNodeType()) ? null : (ObjectUtils.isNotEmpty(projectNodePoMap.get(taskNode.getParentId()))
? projectNodePoMap.get(taskNode.getParentId()).getUuid()
: projectNodeMap.get(taskNode.getParentId()).getUuid()),
taskNode.getNodeName());
@@ -1633,7 +1632,7 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
response = SdmResponse.failed("新增分析项时,创建文件失败");
return response;
}
createDir(taskNode.getUuid(),NodeTypeEnum.TASK.getValue(), projectNodePoMap.get(taskNode.getParentId()).getUuid(), taskNode.getNodeName());
createDir(taskNode.getUuid(),taskNode.getNodeType(), projectNodePoMap.get(taskNode.getParentId()).getUuid(), taskNode.getNodeName());
}
} else {
@@ -1643,7 +1642,7 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
response = SdmResponse.failed("新增分析项时,创建文件失败");
return response;
}
createDir(taskNode.getUuid(),NodeTypeEnum.TASK.getValue(),
createDir(taskNode.getUuid(),taskNode.getNodeType(),
ObjectUtils.isNotEmpty(projectNodePoMap.get(taskNode.getParentId())) ? projectNodePoMap.get(taskNode.getParentId()).getUuid() : projectNodeMap.get(taskNode.getParentId()).getUuid(),
taskNode.getNodeName());
}
@@ -1688,7 +1687,7 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
response = SdmResponse.failed("新增指标时,创建文件失败");
return response;
}
createDir(taskNode.getUuid(), NodeTypeEnum.PERFORMANCE.getValue(), taskNodePoMap.get(taskNode.getTaskId()).getUuid(), taskNode.getNodeName());
createDir(taskNode.getUuid(), taskNode.getNodeType(), taskNodePoMap.get(taskNode.getTaskId()).getUuid(), taskNode.getNodeName());
}
} else {
for (TaskNode taskNode : projectNodePerformanceList) {
@@ -1697,7 +1696,7 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
response = SdmResponse.failed("新增指标时,创建文件失败");
return response;
}
createDir(taskNode.getUuid(),NodeTypeEnum.PERFORMANCE.getValue(),
createDir(taskNode.getUuid(),taskNode.getNodeType(),
ObjectUtils.isNotEmpty(taskNodePoMap.get(taskNode.getTaskId())) ? taskNodePoMap.get(taskNode.getTaskId()).getUuid() : taskNodeMap.get(taskNode.getTaskId()).getUuid(),
taskNode.getNodeName());
}
@@ -1761,13 +1760,13 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
}
for (TaskNode taskNode : projectNodeList) {
if (ObjectUtils.isEmpty(projectNodeMap.get(taskNode.getParentId()))
&& ObjectUtils.isEmpty(projectNodePoMap.get(taskNode.getParentId())) && !SystemConstants.PROJECT_TAG.equals(taskNode.getNodeType())) {
&& ObjectUtils.isEmpty(projectNodePoMap.get(taskNode.getParentId())) && !NodeTypeEnum.PROJECT.getValue().equals(taskNode.getNodeType())) {
log.error("新增节点时根据parentId{},未查询到节点", taskNode.getParentId());
response = SdmResponse.failed("新增节点时,创建文件失败");
return response;
}
createDir(taskNode.getUuid(),
SystemConstants.PROJECT_TAG.equals(taskNode.getNodeType()) ? null : (ObjectUtils.isNotEmpty(projectNodePoMap.get(taskNode.getParentId()))
NodeTypeEnum.PROJECT.getValue().equals(taskNode.getNodeType()) ? null : (ObjectUtils.isNotEmpty(projectNodePoMap.get(taskNode.getParentId()))
? projectNodePoMap.get(taskNode.getParentId()).getUuid()
: projectNodeMap.get(taskNode.getParentId()).getUuid()),
taskNode.getNodeName());
@@ -1964,9 +1963,9 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
eachProjectNode.setTenantId(tenantId);
String nodeType = eachProjectNode.getNodeType();
List<TaskNode> childrenNodeList = eachProjectNode.getChildren();
if (SystemConstants.TASK_TAG.equals(nodeType)) {
if (NodeTypeEnum.TASK.getValue().equals(nodeType)) {
handleTaskExtraAndMember(eachProjectNode, taskNodeList, taskNodeMemberList, taskNodeExtraList, tagList,taskIdMap);
} else if (SystemConstants.PERFORMANCE_TAG.equals(nodeType)) {
} else if (NodeTypeEnum.PERFORMANCE.getValue().equals(nodeType)) {
eachProjectNode.setTaskId(parentId);
handlePerformanceExtra(eachProjectNode, taskPerformanceList, performanceExtraList);
} else {

View File

@@ -4,7 +4,7 @@ import com.alibaba.fastjson2.JSONObject;
import com.sdm.common.common.SdmResponse;
import com.sdm.common.common.ThreadLocalContext;
import com.sdm.common.entity.constants.ProjectConstants;
import com.sdm.common.entity.constants.SystemConstants;
import com.sdm.common.entity.enums.NodeTypeEnum;
import com.sdm.common.entity.req.system.UserQueryReq;
import com.sdm.common.entity.resp.system.CIDUserResp;
import com.sdm.common.feign.impl.system.SysUserFeignClientImpl;
@@ -741,11 +741,11 @@ public class TaskServiceImpl implements ITaskService {
for (SpdmAnalysisTaskVo task : taskVoList) {
eachProjectNodePo = nodeMap.get(task.getNodeId());
if (ObjectUtils.isNotEmpty(eachProjectNodePo)) {
if (SystemConstants.PROJECT_TAG.equals(eachProjectNodePo.getNodeType())) {
if (NodeTypeEnum.PROJECT.getValue().equals(eachProjectNodePo.getNodeType())) {
task.setProjectName(eachProjectNodePo.getNodeName());
} else if (SystemConstants.PHASE_TAG.equals(eachProjectNodePo.getNodeType())) {
} else if (NodeTypeEnum.PHASE.getValue().equals(eachProjectNodePo.getNodeType())) {
task.setPhaseName(eachProjectNodePo.getNodeName());
} else if (SystemConstants.DISCIPLINE_TAG.equals(eachProjectNodePo.getNodeType())) {
} else if (NodeTypeEnum.DISCIPLINE.getValue().equals(eachProjectNodePo.getNodeType())) {
task.setDisciplineName(eachProjectNodePo.getNodeName());
}
}

View File

@@ -112,4 +112,9 @@ management:
redis:
enabled: false
db:
enabled: false
enabled: false
# 0单机处理可以指向本地1负载均衡轮询
serverType: 0
#serverIp: 192.168.65.161
serverIp: 192.168.65.73

View File

@@ -1,3 +1,3 @@
spring:
profiles:
active: dev
active: local

View File

@@ -42,4 +42,4 @@ fi
echo "正在启动项目... "
# 启动项目并保留控制台输出
nohup java ${JVM_OPTS} -jar "${FULL_JAR_PATH}" > "${LOG_FILE}" 2>&1 &
nohup java ${JVM_OPTS} -Dspring.profiles.active=dev -jar "${FULL_JAR_PATH}" > "${LOG_FILE}" 2>&1 &

View File

@@ -6,7 +6,10 @@
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr([%15.15t]){faint} %clr(%logger){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr([%X{traceId}] %d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr([%15.15t]){faint} %clr(%logger){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}" />
<!-- 普通日志格式(无颜色) -->
<property name="FILE_LOG_PATTERN" value="[%X{traceId}] %d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } [%15.15t] %logger : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}" />
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="/home/app/project/logs" />
<!-- 控制台输出 -->
@@ -29,7 +32,7 @@
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期%thread表示线程名%-5level级别从左显示5个字符宽度%msg日志消息%n是换行符-->
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<pattern>${FILE_LOG_PATTERN}</pattern>
<charset>UTF-8</charset>
</encoder>
<!--日志文件最大的大小-->
@@ -38,6 +41,30 @@
<!-- </triggeringPolicy>-->
</appender>
<!-- 4. core.log 专用输出器(保留 callerInfo 格式) -->
<appender name="CORE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/core.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/core.log.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
<TotalSizeCap>500MB</TotalSizeCap>
<maxFileSize>10MB</maxFileSize>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 仅 core.log 显示真实调用位置(类名.方法名(行号) -->
<pattern>[%X{traceId}] %d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } [%15.15t] %X{callerInfo} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<!-- 绑定 coreLogger → 输出到 core.log + 控制台 -->
<logger name="coreLogger" level="INFO" additivity="false">
<appender-ref ref="CORE_FILE" /> <!-- 核心日志写入 core.log -->
<appender-ref ref="STDOUT" /> <!-- 同时输出到控制台(显示 CoreLogger -->
</logger>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="STDOUT" />

View File

@@ -331,20 +331,12 @@
select
nm.nodeId,
nm.user_id as userId,
su.nickname,
sur.groupId
from simulation_node_member nm
LEFT JOIN sys_user su on nm.user_id = su.id
left join sys_user_group_relation sur on sur.userId = su.id
<where>
nm.user_id is not null and sur.groupId is not null
<if test="userGroupId != null">
and sur.groupId = #{userGroupId}
</if>
<if test="userId != null">
and nm.user_id = #{userId}
</if>
</where>
from simulation_node_member
where user_id in (
<foreach collection='userIds' item='userId' index='index' separator=','>
#{userId}
</foreach>
)
</select>
<select id="getUserGroupTaskCompleteStatistics"