From fa43e36a0b89270011df6e83c58a2fb438da6957 Mon Sep 17 00:00:00 2001
From: lidongyang <506508008@qq.com>
Date: Tue, 10 Feb 2026 08:41:37 +0800
Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=90=8C=E6=AD=A5=E5=BE=85=E5=8A=9E?=
=?UTF-8?q?=E6=97=B6=EF=BC=8C=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/compiler.xml | 8 +-
.../SimulationLyricNodeController.java | 11 +-
.../sdm/project/dao/SimulationTaskMapper.java | 10 ++
.../model/entity/SimulationTaskAttention.java | 3 +
.../model/req/SpdmDemandRelateMemberReq.java | 1 +
.../schedule/lyric/LyricTodoListSchedule.java | 2 +-
.../service/ILyricInternalService.java | 2 +-
.../impl/LyricInternalServiceImpl.java | 151 ++++++++++++------
.../project/service/impl/NodeServiceImpl.java | 37 ++++-
.../impl/SimulationTaskServiceImpl.java | 17 +-
.../project/service/impl/TaskServiceImpl.java | 40 +++++
.../main/resources/application-dev-190.yml | 6 +-
.../src/main/resources/application-dev-65.yml | 5 +-
.../src/main/resources/application-local.yml | 2 +-
.../src/main/resources/application-lyric.yml | 5 +-
.../src/main/resources/application-prod.yml | 5 +-
.../src/main/resources/application-test.yml | 5 +-
.../src/main/resources/application-yian.yml | 5 +-
.../resources/mapper/SimulationTaskMapper.xml | 37 +++++
19 files changed, 280 insertions(+), 72 deletions(-)
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 097422c2..21f512b4 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -24,10 +24,10 @@
-
-
-
-
+
+
+
+
diff --git a/project/src/main/java/com/sdm/project/controller/SimulationLyricNodeController.java b/project/src/main/java/com/sdm/project/controller/SimulationLyricNodeController.java
index f2c0af47..afe558e0 100644
--- a/project/src/main/java/com/sdm/project/controller/SimulationLyricNodeController.java
+++ b/project/src/main/java/com/sdm/project/controller/SimulationLyricNodeController.java
@@ -12,6 +12,8 @@ import com.sdm.project.model.req.ep.EpSyncPhaseReq;
import com.sdm.project.service.IDemandService;
import com.sdm.project.service.ILyricInternalService;
import com.sdm.project.service.ISimulationLyricNodeService;
+import com.sdm.project.service.ISimulationTaskService;
+import com.sdm.project.service.impl.TaskServiceImpl;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
@@ -36,6 +38,11 @@ public class SimulationLyricNodeController {
@Resource
private IDemandService demandService;
+ @Autowired
+ private TaskServiceImpl taskServiceImpl;
+
+ @Autowired
+ private ISimulationTaskService simulationTaskService;
@GetMapping("/updateApprovalStatus")
@Operation(summary = "仿真节点审批状态更新", description = "仿真节点审批状态更新")
@@ -51,8 +58,8 @@ public class SimulationLyricNodeController {
@GetMapping("/optimisedGetTodoList")
@Operation(summary = "获取待办列表(优化版)", description = "获取待办列表(优化版)")
- public SdmResponse optimisedGetTodoList(@RequestParam(value = "startTime") @Validated String startTime,@RequestParam(value = "endTime") @Validated String endTime) {
- return lyricInternalService.optimisedGetTodoList("http",startTime,endTime);
+ public SdmResponse optimisedGetTodoList() {
+ return lyricInternalService.optimisedGetTodoList("http");
}
@GetMapping("/getProjectList")
diff --git a/project/src/main/java/com/sdm/project/dao/SimulationTaskMapper.java b/project/src/main/java/com/sdm/project/dao/SimulationTaskMapper.java
index e0ae26ac..3e6c4b71 100644
--- a/project/src/main/java/com/sdm/project/dao/SimulationTaskMapper.java
+++ b/project/src/main/java/com/sdm/project/dao/SimulationTaskMapper.java
@@ -6,6 +6,9 @@ import com.sdm.common.entity.resp.project.SpdmTaskVo;
import com.sdm.outbridge.mode.SimulationTaskSyncExBo;
import com.sdm.project.model.entity.SimulationTask;
import com.sdm.common.entity.resp.project.TaskNodeExtraPo;
+import com.sdm.project.model.entity.SimulationTaskAttention;
+import com.sdm.project.model.entity.SimulationTaskExtra;
+import com.sdm.project.model.entity.SimulationTaskMember;
import com.sdm.project.model.req.SpdmAnalysisTaskListReq;
import com.sdm.project.model.req.*;
import com.sdm.project.model.vo.*;
@@ -72,4 +75,11 @@ public interface SimulationTaskMapper extends BaseMapper {
List queryLyricAllTasksDatas(@Param("offset")int offset, @Param("pageSize")int pageSize);
+ void saveBatchTask(@Param("list") List tasksToCreate);
+
+ void saveBatchTaskExtra(@Param("list") List taskExtrasToCreate);
+
+ void saveBatchTaskMember(@Param("list") List taskMembersToCreate);
+
+ void saveBatchTaskAttention(@Param("list") List taskAttentionsToCreate);
}
diff --git a/project/src/main/java/com/sdm/project/model/entity/SimulationTaskAttention.java b/project/src/main/java/com/sdm/project/model/entity/SimulationTaskAttention.java
index 4bc189ae..9dd4bbb9 100644
--- a/project/src/main/java/com/sdm/project/model/entity/SimulationTaskAttention.java
+++ b/project/src/main/java/com/sdm/project/model/entity/SimulationTaskAttention.java
@@ -57,4 +57,7 @@ public class SimulationTaskAttention implements Serializable {
@TableField("update_time")
private String updateTime;
+ @TableField(exist = false)
+ private Long creatorValue;
+
}
diff --git a/project/src/main/java/com/sdm/project/model/req/SpdmDemandRelateMemberReq.java b/project/src/main/java/com/sdm/project/model/req/SpdmDemandRelateMemberReq.java
index b67aa311..9f23d2f0 100644
--- a/project/src/main/java/com/sdm/project/model/req/SpdmDemandRelateMemberReq.java
+++ b/project/src/main/java/com/sdm/project/model/req/SpdmDemandRelateMemberReq.java
@@ -27,5 +27,6 @@ public class SpdmDemandRelateMemberReq extends BaseEntity {
private String name;
private Long userId;
+ private String userIdStr;
}
diff --git a/project/src/main/java/com/sdm/project/schedule/lyric/LyricTodoListSchedule.java b/project/src/main/java/com/sdm/project/schedule/lyric/LyricTodoListSchedule.java
index 1afc2472..6a690ca4 100644
--- a/project/src/main/java/com/sdm/project/schedule/lyric/LyricTodoListSchedule.java
+++ b/project/src/main/java/com/sdm/project/schedule/lyric/LyricTodoListSchedule.java
@@ -36,7 +36,7 @@ public class LyricTodoListSchedule {
ThreadLocalContext.setTenantId(paramJson.getLong("tenantId"));
ThreadLocalContext.setUserId(paramJson.getLong("userId"));
long startTime = System.currentTimeMillis();
- SdmResponse response = lyricInternalService.getTodoList("schedule");
+ SdmResponse response = lyricInternalService.optimisedGetTodoList("schedule");
long endTime = System.currentTimeMillis();
long second = (endTime - startTime) / 1000;
log.info("{} lyricTodoListHandler cost [{}] s", traceId,second);
diff --git a/project/src/main/java/com/sdm/project/service/ILyricInternalService.java b/project/src/main/java/com/sdm/project/service/ILyricInternalService.java
index 82d84721..d05fe595 100644
--- a/project/src/main/java/com/sdm/project/service/ILyricInternalService.java
+++ b/project/src/main/java/com/sdm/project/service/ILyricInternalService.java
@@ -52,5 +52,5 @@ public interface ILyricInternalService {
SdmResponse listNoPermission(SpdmNodeListReq req);
- SdmResponse optimisedGetTodoList(String http,String startTime,String endTime);
+ SdmResponse optimisedGetTodoList(String http);
}
diff --git a/project/src/main/java/com/sdm/project/service/impl/LyricInternalServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/LyricInternalServiceImpl.java
index 569eb217..2a9fb31a 100644
--- a/project/src/main/java/com/sdm/project/service/impl/LyricInternalServiceImpl.java
+++ b/project/src/main/java/com/sdm/project/service/impl/LyricInternalServiceImpl.java
@@ -99,9 +99,10 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
private static final String CACHE_NAME_SYNC_TODO = "syncTodo";
private static final String CACHE_KEY_TODO = "todo";
- private static final long SYNC_INTERVAL_MS = 30 * 1000L;
+ private static final long SYNC_INTERVAL_MS = 60 * 1000L;
private static final String DATE_FORMAT_PATTERN = "yyyy-MM-dd HH:mm:ss";
private static final int UUID_LENGTH = 32;
+ private static final String PROJECT_STAGE = "PROJECT_STAGE";
// 同步待办锁
private final ReentrantLock syncTodoInfoLock = new ReentrantLock();
@@ -185,8 +186,8 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
// 同步待办时,查询待办的最大时间间隔,单位:天
-// @Value("${lyricTodoInterval:7}")
-// private int lyricTodoInterval;
+ @Value("${lyricTodoInterval:90}")
+ private int lyricTodoInterval;
/**
* 判断字符串是否可以安全转换为Long类型
@@ -389,12 +390,13 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
// 1. 构建需求基础参数 + 成员 + 权限
SpdmAddDemandReq demandReq = buildDemandReq(todo, demandUuid, curDateStr);
List memberList = buildDemandMemberList(todo, demandUuid, jobNumber, curDateStr);
+ List demandExtraList = buildDemandExtraList(todo, demandUuid, jobNumber, curDateStr);
// 2. 构建权限更新参数
buildPermissionReqList(demandUuid, jobNumber, todo, updatePermissionList, usernameToUserIdMap);
// 3. 构建需求文件夹节点
demandDirNodeList.add(buildDemandDirNode(demandUuid, projectNode, demandReq.getDemandName()));
// 4. 异步保存需求数据
- asyncSaveDemandData(demandReq, memberList, tenantId, jobNumber, usernameToUserIdMap);
+ asyncSaveDemandData(demandReq, memberList, tenantId, jobNumber, usernameToUserIdMap,demandExtraList);
SimulationDemand demand = new SimulationDemand();
BeanUtils.copyProperties(demandReq, demand);
@@ -429,6 +431,17 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
}
}
+ private List buildDemandExtraList(LyricVTodoEmulationInfoDM todo, String demandUuid, Long jobNumber, String curDateStr) {
+ List demandExtraReqList = new ArrayList<>();
+ SpdmDemandExtraReq spdmDemandExtraReq = new SpdmDemandExtraReq();
+ spdmDemandExtraReq.setDemandId(demandUuid);
+ spdmDemandExtraReq.setPropertyName(PROJECT_STAGE);
+ spdmDemandExtraReq.setPropertyValue(todo.getProjectStage());
+ spdmDemandExtraReq.setCreateTime(curDateStr);
+ demandExtraReqList.add(spdmDemandExtraReq);
+ return demandExtraReqList;
+ }
+
/**
* 构建项目级文件夹创建参数
*/
@@ -462,6 +475,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
req.setEndTime(todo.getClosedTime());
req.setCreateTime(curDateStr);
req.setDemandSource(SYNC_PROJECT_SOURCE);
+ req.setCreator(Long.valueOf(todo.getIntroduceBy()));
// 补充项目/阶段/工位ID
fillProjectPhaseWorkspaceId(req, todo);
@@ -526,11 +540,11 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
List memberList = new ArrayList<>();
// 仿真负责人
- addDemandMember(todo.getEmulationPerformer(), 0, demandUuid, jobNumber, curDateStr, memberList);
+ addDemandMember(todo.getVerifierNo(), MemberTypeEnum.PRINCIPAL.getCode(), demandUuid, jobNumber, curDateStr, memberList);
// 仿真执行人
- addDemandMember(todo.getEmulationExecutor(), 1, demandUuid, jobNumber, curDateStr, memberList);
+ addDemandMember(todo.getFollowBy(), MemberTypeEnum.EXECUTOR.getCode(), demandUuid, jobNumber, curDateStr, memberList);
// 3D负责人
- addDemandMember(todo.getThreeDimensionalPerformer(), 2, demandUuid, jobNumber, curDateStr, memberList);
+// addDemandMember(todo.getThreeDimensionalPerformer(), MemberTypeEnum.THREED.getCode(), demandUuid, jobNumber, curDateStr, memberList);
return memberList;
}
@@ -548,18 +562,25 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
return;
}
- SpdmDemandRelateMemberReq memberReq = new SpdmDemandRelateMemberReq();
- memberReq.setDemandId(demandUuid);
- memberReq.setType(type);
- memberReq.setCreateTime(curDateStr);
- memberReq.setCreator(jobNumber);
- String userIdStr = memberStr.split("-")[0];
- if (isConvertibleToLong(userIdStr)) {
- memberReq.setUserId(Long.valueOf(userIdStr));
+ String[] userIdStr;
+ if (MemberTypeEnum.PRINCIPAL.getCode().equals(type) || MemberTypeEnum.EXECUTOR.getCode().equals(type)) {
+ userIdStr = memberStr.split(",");
+ } {
+ userIdStr = memberStr.split("-");
+ }
+ if (ObjectUtils.isEmpty(userIdStr)) {
+ return;
+ }
+ for (String userId : userIdStr) {
+ SpdmDemandRelateMemberReq memberReq = new SpdmDemandRelateMemberReq();
+ memberReq.setDemandId(demandUuid);
+ memberReq.setType(type);
+ memberReq.setCreateTime(curDateStr);
+ memberReq.setCreator(jobNumber);
+ memberReq.setUserIdStr(userId);
+ memberList.add(memberReq);
}
-
- memberList.add(memberReq);
}
/**
@@ -574,9 +595,32 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
// permissionList.add(buildUpdatePermissionReq(demandUuid, currentUserId, null));
// 仿真负责人权限
- addPermissionReq(usernameToUserIdMap.get(todo.getVerifier()), demandUuid, permissionList, MemberTypeEnum.PRINCIPAL.getCode());
+ String verifier = todo.getVerifier();
+ if (StringUtils.isNotBlank(verifier)) {
+ String[] pArray = verifier.split(",");
+ for (String pUserId : pArray) {
+ addPermissionReq(usernameToUserIdMap.get(pUserId), demandUuid, permissionList, MemberTypeEnum.PRINCIPAL.getCode());
+ }
+ }
+
// 需求创建人权限
- addPermissionReq(usernameToUserIdMap.get(todo.getIntroduceBy()), demandUuid, permissionList, MemberTypeEnum.CREATOR.getCode());
+ String introduceBy = todo.getIntroduceBy();
+ if (StringUtils.isNotBlank(introduceBy)) {
+ String[] iArray = introduceBy.split(",");
+ for (String iUserId : iArray) {
+ addPermissionReq(usernameToUserIdMap.get(iUserId), demandUuid, permissionList, MemberTypeEnum.CREATOR.getCode());
+ }
+ }
+
+ // 需求执行人权限
+ String followBy = todo.getFollowBy();
+ if (StringUtils.isNotBlank(followBy)) {
+ String[] fArray = followBy.split(",");
+ for (String fUserId : fArray) {
+ addPermissionReq(usernameToUserIdMap.get(fUserId), demandUuid, permissionList, MemberTypeEnum.EXECUTOR.getCode());
+ }
+ }
+
}
/**
@@ -627,10 +671,11 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
List memberList,
Long tenantId,
Long jobNumber,
- Map usernameToUserIdMap) {
+ Map usernameToUserIdMap,
+ List demandExtraList) {
CompletableFuture.runAsync(() -> {
try {
- demandMapper.addDemand(demandReq, tenantId, jobNumber);
+ demandMapper.addDemand(demandReq, tenantId, demandReq.getCreator());
if (CollectionUtils.isNotEmpty(memberList)) {
for (SpdmDemandRelateMemberReq member : memberList) {
Long cidUserId = usernameToUserIdMap.get(String.valueOf(member.getUserId()));
@@ -640,6 +685,9 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
}
demandMapper.addDemandMember(memberList);
}
+ if (CollectionUtils.isNotEmpty(demandExtraList)) {
+ demandMapper.addDemandExtra(demandExtraList);
+ }
} catch (Exception e) {
log.error("异步保存需求[{}]数据异常: ", demandReq.getDemandCode(), e);
}
@@ -2118,7 +2166,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
}
@Override
- public SdmResponse optimisedGetTodoList(String http, String startTime, String endTime) {
+ public SdmResponse optimisedGetTodoList(String http) {
Long tenantId = ThreadLocalContext.getTenantId();
Long jobNumber = ThreadLocalContext.getUserId();
@@ -2129,19 +2177,19 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
}
// TODO 现场手动同步完成后,根据配置文件动态计算拉取待办的开始、结束时间
-// String[] timeArray = calculateTimeRange(lyricTodoInterval);
-// String startTime = timeArray[0];
-// String endTime = timeArray[1];
+ String[] timeArray = calculateTimeRange(lyricTodoInterval);
+ String startTime = timeArray[0];
+ String endTime = timeArray[1];
// 先查询系统内所有待办(90天内仿真类型),同步历史待办时,先取startTime和endTime,同步固定某段时间内的待办
List lyricVTodoEmulationInfoDMList = queryTodoListWithFixedTime(startTime, endTime);
-
+ log.info("{}天内,共有{}个待办",lyricTodoInterval,lyricVTodoEmulationInfoDMList.size());
// 待办信息在系统中是否都已经存在
if (CollectionUtils.isEmpty(lyricVTodoEmulationInfoDMList)) {
log.info("lyricVTodoEmulationInfoDMList为空");
return SdmResponse.success();
}
- log.info("本次共同步待办:{}个",lyricVTodoEmulationInfoDMList.stream());
+ log.info("本次共同步待办:{}个",lyricVTodoEmulationInfoDMList.size());
// 根据待办关联的项目情况,分为关联的项目已在系统和关联的项目未在系统两部分数据
List noRelatedProjectVTodoEmulationInfoDMList;
@@ -2480,6 +2528,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
folderItemReq.setFolderUuid(RandomUtil.generateString(32));
folderItemReqList.add(folderItemReq);
batchCreateNormalDirReq.setFolderItems(folderItemReqList);
+ batchCreateNormalDirReq.setSkipPermissionCheck(true);
log.info("创建【项目文件】文件夹请求参数:{}", batchCreateNormalDirReq);
try {
SdmResponse response = dataFeignClient.batchCreateNormalDirs(batchCreateNormalDirReq);
@@ -2513,12 +2562,14 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
spdmProjectNodeEditReq.setCreator(jobNumber);
spdmProjectNodeEditReq.setTenantId(tenantId);
spdmProjectNodeEditReq.setProjectSource(SYNC_PROJECT_SOURCE);
-
+ spdmProjectNodeEditReq.setProjectId(Math.toIntExact(lyricVProjectToDM.getId()));
+ spdmProjectNodeEditReq.setNodeSubType("self_develop");
+ addNodeList.add(spdmProjectNodeEditReq);
// 根据projectId查询项目机台工位信息的视图
List projectStationList = new ArrayList<>();
try {
projectStationList = lyricVProjectStationToDmService.lambdaQuery()
- .eq(LyricVProjectStationToDM::getProjectId, spdmProjectNodeEditReq.getProjectId())
+ .eq(LyricVProjectStationToDM::getProjectId, lyricVProjectToDM.getId())
.list();
} catch (MyBatisSystemException ex) {
// 查询发生异常,记录异常日志(可能是测试环境预期异常)
@@ -2666,27 +2717,27 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
// 批量创建文件夹
batchCreateNodeDir(addNodeList);
- // 批量更新权限
- List filePermissions = new ArrayList<>();
- for (SpdmProjectNodeEditReq addNode : addNodeList) {
- BatchUpdatePermissionReq.FilePermissionItem item = new BatchUpdatePermissionReq.FilePermissionItem();
- item.setUuid(addNode.getUuid());
- Map userPermissions = new HashMap<>();
- // 2026-02-09 因为项目视图中没有项目经理,这里将项目创建人当成项目经理
- userPermissions.put(jobNumber, FilePermissionEnum.ALL.getValue());
- item.setUserPermissions(userPermissions);
- filePermissions.add(item);
- }
- if (CollectionUtils.isNotEmpty(filePermissions)) {
- BatchUpdatePermissionReq batchReq = new BatchUpdatePermissionReq();
- batchReq.setFilePermissions(filePermissions);
- log.info("创建项目阶段时,批量更新权限,任务数量:{}", filePermissions.size());
- SdmResponse response = dataFeignClient.batchUpdatePermission(batchReq);
- log.info("创建项目阶段时,批量更新权限结果:{}", response);
- if (!response.isSuccess()) {
- log.error("批量更新权限失败:{}", response.getMessage());
- }
- }
+ // 批量更新权限 2026-02-09 先不授予权限,待后面设置项目经理时授予权限 (设置项目经理的权限需要控制好)
+// List filePermissions = new ArrayList<>();
+// for (SpdmProjectNodeEditReq addNode : addNodeList) {
+// BatchUpdatePermissionReq.FilePermissionItem item = new BatchUpdatePermissionReq.FilePermissionItem();
+// item.setUuid(addNode.getUuid());
+// Map userPermissions = new HashMap<>();
+// // 2026-02-09 因为项目视图中没有项目经理,这里将项目创建人当成项目经理
+// userPermissions.put(jobNumber, FilePermissionEnum.ALL.getValue());
+// item.setUserPermissions(userPermissions);
+// filePermissions.add(item);
+// }
+// if (CollectionUtils.isNotEmpty(filePermissions)) {
+// BatchUpdatePermissionReq batchReq = new BatchUpdatePermissionReq();
+// batchReq.setFilePermissions(filePermissions);
+// log.info("创建项目阶段时,批量更新权限,任务数量:{}", filePermissions.size());
+// SdmResponse response = dataFeignClient.batchUpdatePermission(batchReq);
+// log.info("创建项目阶段时,批量更新权限结果:{}", response);
+// if (!response.isSuccess()) {
+// log.error("批量更新权限失败:{}", response.getMessage());
+// }
+// }
}
diff --git a/project/src/main/java/com/sdm/project/service/impl/NodeServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/NodeServiceImpl.java
index 0dc99a76..52440cf9 100644
--- a/project/src/main/java/com/sdm/project/service/impl/NodeServiceImpl.java
+++ b/project/src/main/java/com/sdm/project/service/impl/NodeServiceImpl.java
@@ -1171,6 +1171,25 @@ public class NodeServiceImpl extends ServiceImpl userPermissions = new HashMap<>();
+ userPermissions.put(userId, FilePermissionEnum.ZERO.getValue());
+ updatePermissionReq.setUserPermissions(userPermissions);
+ log.info("编辑节点时,删除用户权限的参数为:{}", updatePermissionReq);
+ SdmResponse updatePermissionResponse = dataClientFeignClient.updatePermission(updatePermissionReq);
+ log.info("编辑节点时,删除用户权限的返回值为:{}", updatePermissionResponse);
+ }
+
private boolean editNode(List editNodeList, Long tenantId, Long jobNumber) {
log.info("editNode参数为:{}", editNodeList);
String curDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
@@ -1210,10 +1229,18 @@ public class NodeServiceImpl extends ServiceImpl nodeMemberList = nodeMapper.getNodeMemberListByNodeIdList(nodeIdList);
+ if (CollectionUtils.isNotEmpty(nodeMemberList)) {
+ // 先删除所有成员
+ nodeMapper.deleteNodeMemberBatch(editNodeList.stream().map(SpdmNodeDetailReq::getUuid).toList());
+ // 删除权限
+ for (SpdmNodeMemberVo spdmNodeMemberVo : nodeMemberList) {
+ deletePermission(spdmNodeMemberVo.getUserId(),spdmNodeMemberVo.getNodeId());
+ }
+ }
+
allNodeManagerList.forEach(node -> {
node.setCreateTime(curDateStr);
node.setCreator(jobNumber);
@@ -1221,6 +1248,12 @@ public class NodeServiceImpl extends ServiceImpl createTaskMembers(SimulationDemand demand, String taskUuid) {
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SimulationDemandMember::getDemandId, demand.getUuid());
- queryWrapper.in(SimulationDemandMember::getType, DemandMemberTypeEnum.SIMULATION_LEADER.getCode(), DemandMemberTypeEnum.FOLLOWER.getCode());
+ queryWrapper.in(SimulationDemandMember::getType, DemandMemberTypeEnum.SIMULATION_LEADER.getCode(), DemandMemberTypeEnum.SIMULATION_EXECUTOR.getCode());
List demandMembers = simulationDemandMemberService.list(queryWrapper);
diff --git a/project/src/main/java/com/sdm/project/service/impl/TaskServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/TaskServiceImpl.java
index 404eac50..7ff6f1db 100644
--- a/project/src/main/java/com/sdm/project/service/impl/TaskServiceImpl.java
+++ b/project/src/main/java/com/sdm/project/service/impl/TaskServiceImpl.java
@@ -3911,6 +3911,10 @@ public class TaskServiceImpl implements ITaskService {
SpdmBatchTaskOprTagReq spdmBatchTaskOprTagReq = new SpdmBatchTaskOprTagReq();
SpringBeanCopyUtil.copyPropertiesIgnoreNull(task, spdmBatchTaskOprTagReq);
SpringBeanCopyUtil.copyPropertiesIgnoreNull(req, task);
+ // task设置nodeId
+ String maxNonEmptyTaskTag = getMaxNonEmptyTagForTask(task);
+ log.info("maxNonEmptyTaskTag为:{}",maxNonEmptyTaskTag);
+ task.setNodeId(maxNonEmptyTaskTag);
if (!simulationTaskService.updateById(task)) {
throw new RuntimeException("编辑任务:" + task.getTaskName() + "失败");
}
@@ -4070,6 +4074,42 @@ public class TaskServiceImpl implements ITaskService {
return SdmResponse.success();
}
+ public static String getMaxNonEmptyTagForTask(SimulationTask req) {
+ // 空对象校验
+ if (req == null) {
+ return null;
+ }
+
+ // 按编号从大到小检查,找到第一个非空值立即返回
+ if (StringUtils.isNotBlank(req.getTag8())) {
+ return req.getTag8();
+ }
+ if (StringUtils.isNotBlank(req.getTag7())) {
+ return req.getTag7();
+ }
+ if (StringUtils.isNotBlank(req.getTag6())) {
+ return req.getTag6();
+ }
+ if (StringUtils.isNotBlank(req.getTag5())) {
+ return req.getTag5();
+ }
+ if (StringUtils.isNotBlank(req.getTag4())) {
+ return req.getTag4();
+ }
+ if (StringUtils.isNotBlank(req.getTag3())) {
+ return req.getTag3();
+ }
+ if (StringUtils.isNotBlank(req.getTag2())) {
+ return req.getTag2();
+ }
+ if (StringUtils.isNotBlank(req.getTag1())) {
+ return req.getTag1();
+ }
+
+ // 所有 tag 都为空
+ return null;
+ }
+
/**
* 返回 tag 数字最大的不为空的值
* @param req SpdmBatchTaskOprTagReq 对象
diff --git a/project/src/main/resources/application-dev-190.yml b/project/src/main/resources/application-dev-190.yml
index 3f35d92e..38f12b99 100644
--- a/project/src/main/resources/application-dev-190.yml
+++ b/project/src/main/resources/application-dev-190.yml
@@ -183,4 +183,8 @@ xxl:
# 通过标识判断是否走查询现场视图逻辑(0不查询,1查询)
-lyricFlag : 0
\ No newline at end of file
+lyricFlag : 0
+
+
+# 同步待办时,查询待办的最大时间间隔,单位:天
+lyricTodoInterval : 7
\ No newline at end of file
diff --git a/project/src/main/resources/application-dev-65.yml b/project/src/main/resources/application-dev-65.yml
index b222c077..d920de1c 100644
--- a/project/src/main/resources/application-dev-65.yml
+++ b/project/src/main/resources/application-dev-65.yml
@@ -182,4 +182,7 @@ xxl:
# xxljob 配置结束
# 通过标识判断是否走查询现场视图逻辑(0不查询,1查询)
-lyricFlag : 0
\ No newline at end of file
+lyricFlag : 0
+
+# 同步待办时,查询待办的最大时间间隔,单位:天
+lyricTodoInterval : 7
\ No newline at end of file
diff --git a/project/src/main/resources/application-local.yml b/project/src/main/resources/application-local.yml
index abbca104..3f33270d 100644
--- a/project/src/main/resources/application-local.yml
+++ b/project/src/main/resources/application-local.yml
@@ -191,4 +191,4 @@ xxl:
lyricFlag : 0
# 同步待办时,查询待办的最大时间间隔,单位:天
-#lyricTodoInterval : 7
\ No newline at end of file
+lyricTodoInterval : 7
\ No newline at end of file
diff --git a/project/src/main/resources/application-lyric.yml b/project/src/main/resources/application-lyric.yml
index e96615bc..d43e10b5 100644
--- a/project/src/main/resources/application-lyric.yml
+++ b/project/src/main/resources/application-lyric.yml
@@ -184,4 +184,7 @@ xxl:
# 通过标识判断是否走查询现场视图逻辑(0不查询,1查询)
-lyricFlag : 1
\ No newline at end of file
+lyricFlag : 1
+
+# 同步待办时,查询待办的最大时间间隔,单位:天
+lyricTodoInterval : 90
\ No newline at end of file
diff --git a/project/src/main/resources/application-prod.yml b/project/src/main/resources/application-prod.yml
index 712f2ca1..099b5265 100644
--- a/project/src/main/resources/application-prod.yml
+++ b/project/src/main/resources/application-prod.yml
@@ -144,4 +144,7 @@ scheduler:
project: 10.11.00
# 通过标识判断是否走查询现场视图逻辑(0不查询,1查询)
-lyricFlag : 1
\ No newline at end of file
+lyricFlag : 1
+
+# 同步待办时,查询待办的最大时间间隔,单位:天
+lyricTodoInterval : 7
\ No newline at end of file
diff --git a/project/src/main/resources/application-test.yml b/project/src/main/resources/application-test.yml
index 3cef6a89..e2e5a390 100644
--- a/project/src/main/resources/application-test.yml
+++ b/project/src/main/resources/application-test.yml
@@ -137,4 +137,7 @@ scheduler:
project: 10.11.00
# 通过标识判断是否走查询现场视图逻辑(0不查询,1查询)
-lyricFlag : 0
\ No newline at end of file
+lyricFlag : 0
+
+# 同步待办时,查询待办的最大时间间隔,单位:天
+lyricTodoInterval : 7
\ No newline at end of file
diff --git a/project/src/main/resources/application-yian.yml b/project/src/main/resources/application-yian.yml
index f3ca10f2..934c27c3 100644
--- a/project/src/main/resources/application-yian.yml
+++ b/project/src/main/resources/application-yian.yml
@@ -153,4 +153,7 @@ project:
# 通过标识判断是否走查询现场视图逻辑(0不查询,1查询)
-lyricFlag : 0
\ No newline at end of file
+lyricFlag : 0
+
+# 同步待办时,查询待办的最大时间间隔,单位:天
+lyricTodoInterval : 7
\ No newline at end of file
diff --git a/project/src/main/resources/mapper/SimulationTaskMapper.xml b/project/src/main/resources/mapper/SimulationTaskMapper.xml
index 48f99c67..8e4cdbc3 100644
--- a/project/src/main/resources/mapper/SimulationTaskMapper.xml
+++ b/project/src/main/resources/mapper/SimulationTaskMapper.xml
@@ -10,6 +10,43 @@
+
+ insert into simulation_task (uuid,task_name,task_code,task_pool_name,task_pool_version,node_id,days,standard,fold_id,status,achieve_status,begin_time,end_time,progress,exe_status,confidence,analyse_target,analyse_software,approval_status,description,difficult,tenant_id
+ ,creator,create_time,department,sectionName,groupName,bCapacity,flowTemplate,englishName,demand_id,tag1,tag2,tag3,tag4,tag5,tag6,tag7,tag8,tag9,tag10,imageFileId,discipline) values
+
+ (#{it.uuid},#{it.taskName},#{it.taskCode},'','',#{it.nodeId},#{it.days},#{it.standard},'',1,0,
+ #{it.beginTime},#{it.endTime},0,1,#{it.confidence},#{it.analyseTarget},#{it.analyseSoftware},'0',#{it.description},#{it.difficult},#{it.tenantId},
+ #{it.creator},#{it.createTime},#{it.department},#{it.sectionName},#{it.groupName},#{it.bCapacity},#{it.flowTemplate},#{it.englishName},#{it.demandId},#{it.tag1},#{it.tag2},
+ #{it.tag3},#{it.tag4},
+ #{it.tag5},#{it.tag6},
+ #{it.tag7},#{it.tag8},
+ #{it.tag9},#{it.tag10},
+ #{it.imageFileId},#{it.discipline})
+
+
+
+
+
+ insert into simulation_task_member (task_id,identity,name,user_id,creator,create_time,type) values
+
+ (#{addNodeMember.taskId},#{addNodeMember.identity},#{addNodeMember.name},#{addNodeMember.userId},#{addNodeMember.creator},#{addNodeMember.createTime},#{addNodeMember.type})
+
+
+
+
+
+
+ insert into simulation_task_attention (task_id,identity,name,user_id,creator,create_time) values
+
+ (#{attention.taskId},null,null,#{attention.userId},#{attention.creatorValue},#{attention.createTime})
+
+
+
update simulation_task