Merge remote-tracking branch 'origin/main'
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ------------------------------------------------------------------------------------------------
|
* ------------------------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
// 删除当前节点及子节点下的指标相关信息
|
// 删除当前节点及子节点下的指标相关信息
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|||||||
@@ -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));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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">
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user