Merge remote-tracking branch 'origin/main'

This commit is contained in:
2026-02-12 13:51:42 +08:00
9 changed files with 172 additions and 64 deletions

View File

@@ -143,10 +143,22 @@ public class DataAnalysisServiceImpl implements IDataAnalysisService {
.eq(FileMetadataInfo::getTenantId, ThreadLocalContext.getTenantId()) .eq(FileMetadataInfo::getTenantId, ThreadLocalContext.getTenantId())
.isNull(FileMetadataInfo::getDeletedAt) .isNull(FileMetadataInfo::getDeletedAt)
.list(); .list();
PageInfo<FileMetadataInfo> page = new PageInfo<>(fileMetadataInfoList); List<FileMetadataInfo> sortedList = fileMetadataInfoList.stream()
.sorted(Comparator.comparing(FileMetadataInfo::getTag1,
Comparator.nullsLast((tag1, tag2) -> {
try {
int num1 = Integer.parseInt(tag1.trim());
int num2 = Integer.parseInt(tag2.trim());
return Integer.compare(num1, num2);
} catch (NumberFormatException e) {
return tag1.compareTo(tag2);
}
})))
.collect(Collectors.toList());
PageInfo<FileMetadataInfo> page = new PageInfo<>(sortedList);
long total = page.getTotal(); long total = page.getTotal();
List<Long> fileIdList = fileMetadataInfoList.stream().map(FileMetadataInfo::getId).toList(); List<Long> fileIdList = sortedList.stream().map(FileMetadataInfo::getId).toList();
List<SimulationTaskResultCurveResp> finalResultList = hierarchyHelper.processFileHierarchy( List<SimulationTaskResultCurveResp> finalResultList = hierarchyHelper.processFileHierarchy(
fileIdList, fileIdList,
SimulationTaskResultCurveResp.class, SimulationTaskResultCurveResp.class,

View File

@@ -51,6 +51,20 @@ public class ExperimentResultReq extends BaseReq {
@Schema(description = "文件") @Schema(description = "文件")
private MultipartFile file; private MultipartFile file;
@Schema(description = "字典标签查询列表,格式:['fileTypeDictClass','fileTypeDictValue','disciplineTypeDictClass','disciplineDictValue']")
private List<String> dictTags;
@Schema(description = "文件类型字典类")
private String fileTypeDictClass;
@Schema(description = "文件类型字典值")
private String fileTypeDictValue;
@Schema(description = "学科类型字典类")
private String disciplineTypeDictClass;
@Schema(description = "学科类型字典值")
private String disciplineDictValue;
/** /**
* ------------------------------------------------------------------------------------------------ * ------------------------------------------------------------------------------------------------
*/ */

View File

@@ -101,7 +101,12 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
public SdmResponse addDemand(SpdmAddDemandReq req) { public SdmResponse addDemand(SpdmAddDemandReq req) {
Long tenantId = ThreadLocalContext.getTenantId(); Long tenantId = ThreadLocalContext.getTenantId();
Long jobNumber = ThreadLocalContext.getUserId(); Long jobNumber = ThreadLocalContext.getUserId();
req.setCreator(jobNumber); String workNo = ThreadLocalContext.getJobNumber();
if (isConvertibleToLong(workNo)) {
req.setCreator(Long.valueOf(workNo));
}else {
req.setCreator(jobNumber);
}
log.info("新增需求时当前租户id为{},工号为:{}", tenantId, jobNumber); log.info("新增需求时当前租户id为{},工号为:{}", tenantId, jobNumber);
// 获取仿真负责人 // 获取仿真负责人
String pMemberList = req.getPMemberList(); String pMemberList = req.getPMemberList();
@@ -433,10 +438,19 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
return SdmResponse.success(); return SdmResponse.success();
} }
public static String removeLeadingZeros(String jobNumber) {
if (StringUtils.isNotBlank(jobNumber)) {
return "";
}
String trimmed = jobNumber.replaceAll("^0+","");
return trimmed.isEmpty() ? "0" : trimmed;
}
@Override @Override
public SdmResponse list(SpdmDemandListReq req) { public SdmResponse list(SpdmDemandListReq req) {
Long tenantId = ThreadLocalContext.getTenantId(); Long tenantId = ThreadLocalContext.getTenantId();
Long jobNumber = ThreadLocalContext.getUserId(); String jobNumber = removeLeadingZeros(ThreadLocalContext.getJobNumber());
Long currentUserId = ThreadLocalContext.getUserId();
if (ObjectUtils.isEmpty(tenantId) || ObjectUtils.isEmpty(jobNumber)) { if (ObjectUtils.isEmpty(tenantId) || ObjectUtils.isEmpty(jobNumber)) {
log.error("公司和工号都不能为空"); log.error("公司和工号都不能为空");
return SdmResponse.failed("公司和工号都不能为空"); return SdmResponse.failed("公司和工号都不能为空");
@@ -461,10 +475,10 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
} }
if (type == 0) { if (type == 0) {
// 创建人是当前用户 // 创建人是当前用户
demandList = demandList.stream().filter(demand -> jobNumber.equals(demand.getCreator())).toList(); demandList = demandList.stream().filter(demand -> jobNumber.equals(String.valueOf(demand.getCreator()))).toList();
} else { } else {
// 仿真负责人是当前用户 // 仿真负责人是当前用户
List<SpdmDemandMemberVo> pDemandMemberVoList = demandMemberVoList.stream().filter(member -> MemberTypeEnum.PRINCIPAL.getCode().equals(member.getType()) && Long.valueOf(jobNumber).equals(member.getUserId())).toList(); List<SpdmDemandMemberVo> pDemandMemberVoList = demandMemberVoList.stream().filter(member -> MemberTypeEnum.PRINCIPAL.getCode().equals(member.getType()) && currentUserId.equals(member.getUserId())).toList();
if (CollectionUtils.isNotEmpty(pDemandMemberVoList)) { if (CollectionUtils.isNotEmpty(pDemandMemberVoList)) {
List<String> myDemandIdList = pDemandMemberVoList.stream().map(SpdmDemandMemberVo::getDemandId).toList(); List<String> myDemandIdList = pDemandMemberVoList.stream().map(SpdmDemandMemberVo::getDemandId).toList();
demandList = demandList.stream().filter(demand -> myDemandIdList.contains(demand.getUuid())).toList(); demandList = demandList.stream().filter(demand -> myDemandIdList.contains(demand.getUuid())).toList();
@@ -1208,12 +1222,46 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
return SdmResponse.success(demandVoList); return SdmResponse.success(demandVoList);
} }
/**
* 判断字符串是否可以安全转换为Long类型
* @param str 待校验的字符串
* @return true-可以转换false-不可以转换
*/
public static boolean isConvertibleToLong(String str) {
// 1. 处理null、空字符串、全空格字符串
if (str == null || str.trim().isEmpty()) {
return false;
}
String trimmedStr = str.trim();
// 2. 正则校验数字格式(支持正负号,纯数字)
// 正则说明:^-? 匹配开头的负号(可选);\\d+ 匹配1个及以上数字$ 匹配结尾
if (!trimmedStr.matches("^-?\\d+$")) {
return false;
}
// 3. 校验数值范围,避免溢出
try {
// 直接调用Long.parseLong利用其自带的范围校验
Long.parseLong(trimmedStr);
return true;
} catch (NumberFormatException e) {
// 捕获数值超出Long范围的异常
return false;
}
}
@Transactional @Transactional
@Override @Override
public SdmResponse addDemandNoPermission(SpdmAddDemandReq req) { public SdmResponse addDemandNoPermission(SpdmAddDemandReq req) {
Long tenantId = ThreadLocalContext.getTenantId(); Long tenantId = ThreadLocalContext.getTenantId();
Long jobNumber = ThreadLocalContext.getUserId(); Long jobNumber = ThreadLocalContext.getUserId();
req.setCreator(jobNumber); String workNo = ThreadLocalContext.getJobNumber();
if (isConvertibleToLong(workNo)) {
req.setCreator(Long.valueOf(workNo));
}else {
req.setCreator(jobNumber);
}
log.info("新增需求时无权限校验当前租户id为{},工号为:{}", tenantId, jobNumber); log.info("新增需求时无权限校验当前租户id为{},工号为:{}", tenantId, jobNumber);
// 获取仿真负责人 // 获取仿真负责人
String pMemberList = req.getPMemberList(); String pMemberList = req.getPMemberList();

View File

@@ -405,7 +405,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
try { try {
String demandUuid = RandomUtil.generateString(UUID_LENGTH); String demandUuid = RandomUtil.generateString(UUID_LENGTH);
// 1. 构建需求基础参数 + 成员 + 权限 // 1. 构建需求基础参数 + 成员 + 权限
SpdmAddDemandReq demandReq = buildDemandReq(todo, demandUuid, curDateStr); SpdmAddDemandReq demandReq = buildDemandReq(todo, demandUuid, curDateStr,tenantId,usernameToUserIdMap);
List<SpdmDemandRelateMemberReq> memberList = buildDemandMemberList(todo, demandUuid, jobNumber, curDateStr); List<SpdmDemandRelateMemberReq> memberList = buildDemandMemberList(todo, demandUuid, jobNumber, curDateStr);
List<SpdmDemandExtraReq> demandExtraList = buildDemandExtraList(todo, demandUuid, jobNumber, curDateStr); List<SpdmDemandExtraReq> demandExtraList = buildDemandExtraList(todo, demandUuid, jobNumber, curDateStr);
// 2. 构建权限更新参数 // 2. 构建权限更新参数
@@ -478,7 +478,9 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
*/ */
private SpdmAddDemandReq buildDemandReq(LyricVTodoEmulationInfoDM todo, private SpdmAddDemandReq buildDemandReq(LyricVTodoEmulationInfoDM todo,
String demandUuid, String demandUuid,
String curDateStr) { String curDateStr,
Long tenantId,
Map<String, Long> usernameToUserIdMap) {
SpdmAddDemandReq req = new SpdmAddDemandReq(); SpdmAddDemandReq req = new SpdmAddDemandReq();
req.setUuid(demandUuid); req.setUuid(demandUuid);
req.setDemandName(todo.getSubject()); req.setDemandName(todo.getSubject());
@@ -492,7 +494,13 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
req.setEndTime(todo.getClosedTime()); req.setEndTime(todo.getClosedTime());
req.setCreateTime(curDateStr); req.setCreateTime(curDateStr);
req.setDemandSource(SYNC_PROJECT_SOURCE); req.setDemandSource(SYNC_PROJECT_SOURCE);
req.setCreator(Long.valueOf(todo.getIntroduceBy())); if (isConvertibleToInt(todo.getIntroduceBy())) {
req.setCreator(Long.valueOf(todo.getIntroduceBy()));
}else {
req.setCreator(usernameToUserIdMap.get(todo.getIntroduceBy()));
}
req.setTenantId(tenantId);
// 补充项目/阶段/工位ID // 补充项目/阶段/工位ID
fillProjectPhaseWorkspaceId(req, todo); fillProjectPhaseWorkspaceId(req, todo);
@@ -503,20 +511,18 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
* 填充需求的项目/阶段/工位ID * 填充需求的项目/阶段/工位ID
*/ */
private void fillProjectPhaseWorkspaceId(SpdmAddDemandReq req, LyricVTodoEmulationInfoDM todo) { private void fillProjectPhaseWorkspaceId(SpdmAddDemandReq req, LyricVTodoEmulationInfoDM todo) {
List<SimulationNode> allNodeList = nodeService.lambdaQuery() SimulationNode projectNode = nodeService.lambdaQuery()
.in(SimulationNode::getNodeCode, Arrays.asList(todo.getProject(), todo.getProjectStage(), todo.getStationNum())) .in(SimulationNode::getNodeCode, Arrays.asList(todo.getProject(), todo.getProjectStage(), todo.getStationNum()))
.list(); .one();
if (CollectionUtils.isEmpty(allNodeList)) { if (ObjectUtils.isEmpty(projectNode)) {
return; return;
} }
// 填充需求的项目ID // 填充需求的项目ID
allNodeList.stream() req.setProjectId(projectNode.getUuid());
.filter(node -> NodeTypeEnum.PROJECT.getValue().equals(node.getNodeType())
&& node.getNodeCode().equals(todo.getProject())) List<SimulationNode> allNodeList = nodeService.lambdaQuery().eq(SimulationNode::getTag1, projectNode.getUuid()).list();
.findFirst()
.ifPresent(node -> req.setProjectId(node.getUuid()));
// 填充需求的阶段ID // 填充需求的阶段ID
allNodeList.stream() allNodeList.stream()
@@ -694,13 +700,17 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
try { try {
demandMapper.addDemand(demandReq, tenantId, demandReq.getCreator()); demandMapper.addDemand(demandReq, tenantId, demandReq.getCreator());
if (CollectionUtils.isNotEmpty(memberList)) { if (CollectionUtils.isNotEmpty(memberList)) {
List<SpdmDemandRelateMemberReq> normalMemberList = new ArrayList<>();
for (SpdmDemandRelateMemberReq member : memberList) { for (SpdmDemandRelateMemberReq member : memberList) {
Long cidUserId = usernameToUserIdMap.get(String.valueOf(member.getUserId())); Long cidUserId = usernameToUserIdMap.get(member.getUserIdStr());
if (cidUserId != null) { if (cidUserId == null) {
member.setUserId(cidUserId); log.info("工号为:{}的用户未查询到用户id", member.getUserIdStr());
continue;
} }
member.setUserId(cidUserId);
normalMemberList.add(member);
} }
demandMapper.addDemandMember(memberList); demandMapper.addDemandMember(normalMemberList);
} }
if (CollectionUtils.isNotEmpty(demandExtraList)) { if (CollectionUtils.isNotEmpty(demandExtraList)) {
demandMapper.addDemandExtra(demandExtraList); demandMapper.addDemandExtra(demandExtraList);
@@ -2238,10 +2248,12 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
// 关联的项目未在系统 // 关联的项目未在系统
// 取项目视图、工位相关视图构建项目树信息(只同步当前阶段)创建任务(不创建任务文件夹,等下发时进行创建) // 取项目视图、工位相关视图构建项目树信息(只同步当前阶段)创建任务(不创建任务文件夹,等下发时进行创建)
if (CollectionUtils.isNotEmpty(noRelatedProjectVTodoEmulationInfoDMList)) { if (CollectionUtils.isNotEmpty(noRelatedProjectVTodoEmulationInfoDMList)) {
SdmResponse response = httpSyncHandleNoRelatedProjectTodo(noRelatedProjectVTodoEmulationInfoDMList, tenantId, jobNumber); List<SpdmProjectNodeEditReq> spdmProjectNodeEditReqList = httpSyncHandleNoRelatedProjectTodo(noRelatedProjectVTodoEmulationInfoDMList, tenantId, jobNumber);
log.info("httpSyncHandleNoRelatedProjectTodo响应值为{}",response); log.info("httpSyncHandleNoRelatedProjectTodo响应值为{}",spdmProjectNodeEditReqList);
if (!response.isSuccess()) { for (SpdmProjectNodeEditReq spdmProjectNodeEditReq : spdmProjectNodeEditReqList) {
return response; SimulationNode simulationNode = new SimulationNode();
BeanUtils.copyProperties(spdmProjectNodeEditReq,simulationNode);
projectNodeList.add(simulationNode);
} }
} }
@@ -2252,57 +2264,61 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
return response; return response;
} }
private SdmResponse httpSyncHandleNoRelatedProjectTodo(List<LyricVTodoEmulationInfoDM> noRelatedProjectVTodoEmulationInfoDMList, Long tenantId, Long jobNumber) { private List<SpdmProjectNodeEditReq> httpSyncHandleNoRelatedProjectTodo(List<LyricVTodoEmulationInfoDM> noRelatedProjectVTodoEmulationInfoDMList, Long tenantId, Long jobNumber) {
CompletableFuture<SdmResponse> syncHandleNoRelatedProjectTodoFeature = CompletableFuture.supplyAsync(() -> CompletableFuture<List<SpdmProjectNodeEditReq>> syncHandleNoRelatedProjectTodoFeature = CompletableFuture.supplyAsync(() ->
handleNoRelatedProjectTodo(noRelatedProjectVTodoEmulationInfoDMList, tenantId, jobNumber)); handleNoRelatedProjectTodo(noRelatedProjectVTodoEmulationInfoDMList, tenantId, jobNumber));
try { try {
SdmResponse sdmResponse = syncHandleNoRelatedProjectTodoFeature.get(syncProjectDataWaitSeconds, TimeUnit.SECONDS); List<SpdmProjectNodeEditReq> spdmProjectNodeEditReqList = syncHandleNoRelatedProjectTodoFeature.get(syncProjectDataWaitSeconds, TimeUnit.SECONDS);
return sdmResponse; return spdmProjectNodeEditReqList;
} catch (InterruptedException e) { } catch (InterruptedException e) {
log.error("同步项目信息异常终止:{}", e.getMessage()); log.error("同步项目信息异常终止:{}", e.getMessage());
return SdmResponse.failed("同步项目信息异常终止"); return new ArrayList<>();
} catch (ExecutionException e) { } catch (ExecutionException e) {
log.error("同步项目信息执行错误:{}", e.getMessage()); log.error("同步项目信息执行错误:{}", e.getMessage());
return SdmResponse.failed("同步项目信息执行出错误"); return new ArrayList<>();
} catch (TimeoutException e) { } catch (TimeoutException e) {
log.warn("同步项目信息执行超时:{}", e.getMessage()); log.warn("同步项目信息执行超时:{}", e.getMessage());
return SdmResponse.success("同步项目信息执行中,请稍后"); return new ArrayList<>();
} catch (Exception e) { } catch (Exception e) {
log.error("同步项目信息未知错误:{}", e.getMessage()); log.error("同步项目信息未知错误:{}", e.getMessage());
return SdmResponse.failed("同步项目信息未知错误"); return new ArrayList<>();
} }
} }
private SdmResponse handleNoRelatedProjectTodo(List<LyricVTodoEmulationInfoDM> noRelatedProjectVTodoEmulationInfoDMList, Long tenantId, Long jobNumber) { private List<SpdmProjectNodeEditReq> handleNoRelatedProjectTodo(List<LyricVTodoEmulationInfoDM> noRelatedProjectVTodoEmulationInfoDMList, Long tenantId, Long jobNumber) {
// 尝试获取锁(立即返回,不等待) // 尝试获取锁(立即返回,不等待)
if (!syncTodoInfoProjectLock.tryLock()) { if (!syncTodoInfoProjectLock.tryLock()) {
return SdmResponse.success("有数据同步任务(同步项目信息)正在执行中,请稍后再试"); return new ArrayList<>();
} }
// 取项目视图、工位相关视图构建项目树信息(只同步当前阶段) // 取项目视图、工位相关视图构建项目树信息(只同步当前阶段)
// 根据待办获取所有项目编号 // 根据待办获取所有项目编号
List<SpdmProjectNodeEditReq> spdmProjectNodeEditReqList = new ArrayList<>();
try { try {
List<String> projectNumList = noRelatedProjectVTodoEmulationInfoDMList.stream().map(LyricVTodoEmulationInfoDM::getProject) List<String> projectNumList = noRelatedProjectVTodoEmulationInfoDMList.stream().map(LyricVTodoEmulationInfoDM::getProject)
.filter(StringUtils::isNotBlank).distinct().toList(); .filter(StringUtils::isNotBlank).distinct().toList();
if (CollectionUtils.isEmpty(projectNumList)) { if (CollectionUtils.isEmpty(projectNumList)) {
log.info("projectNumList为空"); log.info("projectNumList为空");
return SdmResponse.success("projectNumList为空"); return new ArrayList<>();
} }
// 根据项目编号查询项目视图获取项目信息 // 根据项目编号查询项目视图获取项目信息
List<LyricVProjectToDM> lyricVProjectToDMList = lyricVProjectToDmService.lambdaQuery().in(LyricVProjectToDM::getProjectNum, projectNumList).list(); List<LyricVProjectToDM> lyricVProjectToDMList = lyricVProjectToDmService.lambdaQuery().in(LyricVProjectToDM::getProjectNum, projectNumList).list();
if (CollectionUtils.isEmpty(lyricVProjectToDMList)) { if (CollectionUtils.isEmpty(lyricVProjectToDMList)) {
log.info("lyricVProjectToDMList为空"); log.info("lyricVProjectToDMList为空");
return SdmResponse.success("lyricVProjectToDMList为空"); return new ArrayList<>();
} }
for (LyricVProjectToDM lyricVProjectToDM : lyricVProjectToDMList) { for (LyricVProjectToDM lyricVProjectToDM : lyricVProjectToDMList) {
buildProjectForTodoInfo(lyricVProjectToDM, tenantId, jobNumber); SpdmProjectNodeEditReq spdmProjectNodeEditReq = buildProjectForTodoInfo(lyricVProjectToDM, tenantId, jobNumber);
if (spdmProjectNodeEditReq != null) {
spdmProjectNodeEditReqList.add(spdmProjectNodeEditReq);
}
} }
}catch (Exception e) { }catch (Exception e) {
log.error("handleNoRelatedProjectTodo 未知 error: {}", e.getMessage()); log.error("handleNoRelatedProjectTodo 未知 error: {}", e.getMessage());
return SdmResponse.failed(); return new ArrayList<>();
} finally { } finally {
syncTodoInfoProjectLock.unlock(); syncTodoInfoProjectLock.unlock();
} }
return SdmResponse.success(); return spdmProjectNodeEditReqList;
} }
public static String getTagProperty(Object obj, String propertyName) throws Exception { public static String getTagProperty(Object obj, String propertyName) throws Exception {
@@ -2570,7 +2586,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
log.info("创建节点时,调用批量创建文件夹的返回值为:{}", response); log.info("创建节点时,调用批量创建文件夹的返回值为:{}", response);
} }
private void buildProjectForTodoInfo(LyricVProjectToDM lyricVProjectToDM, Long tenantId, Long jobNumber) { private SpdmProjectNodeEditReq buildProjectForTodoInfo(LyricVProjectToDM lyricVProjectToDM, Long tenantId, Long jobNumber) {
String curDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); String curDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
List<SpdmProjectNodeEditReq> currentNodeList; List<SpdmProjectNodeEditReq> currentNodeList;
List<SpdmProjectNodeEditReq> addNodeList = new ArrayList<>(); List<SpdmProjectNodeEditReq> addNodeList = new ArrayList<>();
@@ -2734,7 +2750,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
} }
if (nodeMapper.addNodeBatch(addNodeList) <= 0) { if (nodeMapper.addNodeBatch(addNodeList) <= 0) {
return ; return null;
} }
// 保存拓展字段 // 保存拓展字段
@@ -2874,6 +2890,8 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
SdmResponse response = dataFeignClient.batchUpdatePermission(batchReq); SdmResponse response = dataFeignClient.batchUpdatePermission(batchReq);
log.info("同步待办拉取项目时,批量更新权限结果为:{}",response); log.info("同步待办拉取项目时,批量更新权限结果为:{}",response);
} }
return spdmProjectNodeEditReq;
} }

View File

@@ -393,8 +393,8 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
taskNodePoList = taskService.lambdaQuery().eq(SimulationTask::getTag2,nodeId).list(); taskNodePoList = taskService.lambdaQuery().eq(SimulationTask::getTag2,nodeId).list();
} }
if (CollectionUtils.isNotEmpty(taskNodePoList)) { if (CollectionUtils.isNotEmpty(taskNodePoList)) {
nodeMapper.deleteTaskBatch(deleteNodeIdList);
List<String> taskIdList = taskNodePoList.stream().map(SimulationTask::getUuid).toList(); List<String> taskIdList = taskNodePoList.stream().map(SimulationTask::getUuid).toList();
taskService.lambdaUpdate().in(SimulationTask::getUuid,taskIdList).remove();
nodeMapper.deleteTaskExtraBatch(taskIdList); nodeMapper.deleteTaskExtraBatch(taskIdList);
nodeMapper.deleteTaskMemberBatch(taskIdList); nodeMapper.deleteTaskMemberBatch(taskIdList);
// 删除当前节点及子节点下的指标相关信息 // 删除当前节点及子节点下的指标相关信息

View File

@@ -253,13 +253,7 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
} }
String realTag = realTagObj.getKey(); String realTag = realTagObj.getKey();
String realTagId = realTagObj.getValue(); String realTagId = realTagObj.getValue();
Long userId = ThreadLocalContext.getUserId(); Long curUserId = ThreadLocalContext.getUserId();
SdmResponse<CIDUserResp> currentCidUserResp = sysUserFeignClient.queryUserDetail(UserQueryReq.builder().userId(userId).build());
if (ObjectUtils.isEmpty(currentCidUserResp.getData())) {
log.error("根据userId{},未查询到用户", userId);
return ;
}
Long curUserId = currentCidUserResp.getData().getUserId();
// 查询当前节点下任务 // 查询当前节点下任务
List<TaskNodePo> currentNodeAssociatedTaskList = new ArrayList<>(); List<TaskNodePo> currentNodeAssociatedTaskList = new ArrayList<>();
int currentNodeDepth = getCurrentNodeDepth(projectNodePo); int currentNodeDepth = getCurrentNodeDepth(projectNodePo);
@@ -313,19 +307,41 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
} }
} }
} }
SdmResponse<List<CIDUserResp>> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(memberList.stream().map(SimulationTaskMember::getUserId).toList()).build());
if (ObjectUtils.isEmpty(cidUserResp)) {
return;
}
List<CIDUserResp> cidUserRespList = cidUserResp.getData();
if (CollectionUtils.isEmpty(cidUserRespList)) {
return;
}
Map<Long, CIDUserResp> cidUserMap = cidUserRespList.stream().collect(Collectors.toMap(CIDUserResp::getUserId, Function.identity()));
// 查询当前任务的负责人和执行人 // 查询当前任务的负责人和执行人
for (TaskNodePo taskNodePo : currentNodeAssociatedTaskList) { for (TaskNodePo taskNodePo : currentNodeAssociatedTaskList) {
if (CollectionUtils.isNotEmpty(memberList)) { List<Long> eUserIdList = memberList.stream().filter(member -> MemberTypeEnum.EXECUTOR.getCode().equals(member.getType()) && taskNodePo.getUuid().equals(member.getTaskId())).map(SimulationTaskMember::getUserId).distinct().toList();
List<Long> eUserIdList = memberList.stream().filter(member -> MemberTypeEnum.EXECUTOR.getCode().equals(member.getType())).map(SimulationTaskMember::getUserId).distinct().toList(); List<Long> pUserIdList = memberList.stream().filter(member -> MemberTypeEnum.PRINCIPAL.getCode().equals(member.getType()) && taskNodePo.getUuid().equals(member.getTaskId())).map(SimulationTaskMember::getUserId).distinct().toList();
List<Long> pUserIdList = memberList.stream().filter(member -> MemberTypeEnum.PRINCIPAL.getCode().equals(member.getType())).map(SimulationTaskMember::getUserId).distinct().toList(); if (CollectionUtils.isNotEmpty(eUserIdList)) {
if (CollectionUtils.isNotEmpty(eUserIdList)) { List<CIDUserResp> eUserList = new ArrayList<>();
SdmResponse<List<CIDUserResp>> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(eUserIdList).build()); for (Long eUserId : eUserIdList) {
taskNodePo.setEMemberList(cidUserResp.getData()); CIDUserResp eCidUser = cidUserMap.get(eUserId);
if (ObjectUtils.isEmpty(eCidUser)) {
continue;
}
eUserList.add(eCidUser);
} }
if (CollectionUtils.isNotEmpty(pUserIdList)) { taskNodePo.setEMemberList(eUserList);
SdmResponse<List<CIDUserResp>> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(pUserIdList).build()); }
taskNodePo.setPMemberList(cidUserResp.getData());
if (CollectionUtils.isNotEmpty(pUserIdList)) {
List<CIDUserResp> pUserList = new ArrayList<>();
for (Long eUserId : pUserIdList) {
CIDUserResp pCidUser = cidUserMap.get(eUserId);
if (ObjectUtils.isEmpty(pCidUser)) {
continue;
}
pUserList.add(pCidUser);
} }
taskNodePo.setPMemberList(pUserList);
} }
} }
} }
@@ -1737,7 +1753,7 @@ public class SimulationRunServiceImpl extends ServiceImpl<SimulationRunMapper, S
archiveReportAndImage(req.getTaskId(), req.getRunId(), randomId, FileBizTypeEnum.CLOUD_FILE, imageName, String.valueOf(sortOrder++)); archiveReportAndImage(req.getTaskId(), req.getRunId(), randomId, FileBizTypeEnum.CLOUD_FILE, imageName, String.valueOf(sortOrder++));
} }
} }
return SdmResponse.success();
// 删除临时路径 // 删除临时路径
// log.info("删除临时路径:{},中。。。。。。", randomId); // log.info("删除临时路径:{},中。。。。。。", randomId);
// deleteFolder(new File(TEMP_REPORT_PATH + randomId)); // deleteFolder(new File(TEMP_REPORT_PATH + randomId));

View File

@@ -295,7 +295,7 @@ public class TaskServiceImpl implements ITaskService {
List<SpdmDemandVo> demandVoList = demandMapper.getDemandListById(demandIdList); List<SpdmDemandVo> demandVoList = demandMapper.getDemandListById(demandIdList);
demandMap = demandVoList.stream() demandMap = demandVoList.stream()
.collect(Collectors.toMap(SpdmDemandVo::getUuid, Function.identity())); .collect(Collectors.toMap(SpdmDemandVo::getUuid, Function.identity()));
demandSubmitMap = demandVoList.stream() demandSubmitMap = demandVoList.stream().filter(spdmDemandVo -> ObjectUtils.isNotEmpty(spdmDemandVo.getCreator()))
.collect(Collectors.toMap(SpdmDemandVo::getUuid, SpdmDemandVo::getCreator)); .collect(Collectors.toMap(SpdmDemandVo::getUuid, SpdmDemandVo::getCreator));
} }

View File

@@ -8,7 +8,7 @@
insert into simulation_demand (uuid,demand_name,demand_code,demand_type,sim_type,demand_status,achieve_status,progress,approval_status, insert into simulation_demand (uuid,demand_name,demand_code,demand_type,sim_type,demand_status,achieve_status,progress,approval_status,
begin_time,end_time,finish_time,project_id,phase_id,workspace_id,tenant_id,creator,create_time,demandSource,description,machine_id) values begin_time,end_time,finish_time,project_id,phase_id,workspace_id,tenant_id,creator,create_time,demandSource,description,machine_id) values
(#{req.uuid},#{req.demandName},#{req.demandCode},#{req.demandType},#{req.simType},#{req.demandStatus},#{req.achieveStatus},#{req.progress},#{req.approvalStatus}, (#{req.uuid},#{req.demandName},#{req.demandCode},#{req.demandType},#{req.simType},#{req.demandStatus},#{req.achieveStatus},#{req.progress},#{req.approvalStatus},
#{req.beginTime},#{req.endTime},'',#{req.projectId},#{req.phaseId},#{req.workspaceId},#{tenantId},#{jobNumber},#{req.createTime},#{req.demandSource},#{req.description},#{req.machineId}) #{req.beginTime},#{req.endTime},'',#{req.projectId},#{req.phaseId},#{req.workspaceId},#{req.creator},#{jobNumber},#{req.createTime},#{req.demandSource},#{req.description},#{req.machineId})
</insert> </insert>
<insert id="addDemandMember"> <insert id="addDemandMember">

View File

@@ -36,7 +36,7 @@
<insert id="saveBatchTaskExtra"> <insert id="saveBatchTaskExtra">
insert into simulation_task_extra (task_id, property_name, property_value, value_type, property_class, creator, create_time) values insert into simulation_task_extra (task_id, property_name, property_value, value_type, property_class, creator, create_time) values
<foreach collection='list' item='taskExtra' index='index' separator=','> <foreach collection='list' item='taskExtra' index='index' separator=','>
(#{taskExtra.taskId}}, #{taskExtra.propertyName}, #{taskExtra.propertyValue}, #{taskExtra.valueType}, #{taskExtra.propertyClass}, #{taskExtra.creator}, #{taskExtra.createTime}) (#{taskExtra.taskId}, #{taskExtra.propertyName}, #{taskExtra.propertyValue}, #{taskExtra.valueType}, #{taskExtra.propertyClass}, #{taskExtra.creator}, #{taskExtra.createTime})
</foreach> </foreach>
</insert> </insert>