1、需求待办修改属性时同步到关联的任务上

This commit is contained in:
2026-03-14 11:46:05 +08:00
parent 37c1924e84
commit 8f6c08a248
4 changed files with 201 additions and 1 deletions

View File

@@ -164,6 +164,8 @@ public interface SimulationProjectMapper {
void deleteTaskMemberList(@Param("taskIdList") List<String> taskIdList);
void deleteTaskMemberListByType(@Param("taskIdList") List<String> taskIdList,@Param("typeList") List<Integer> typeList);
List<PerformanceNodePo> queryPerformanceNodeByNodeIdList(@Param("taskIdList") List<String> taskIdList, @Param("req")SpdmAnalysisPerformanceListReq req);

View File

@@ -35,6 +35,7 @@ import com.sdm.project.dao.SimulationTaskMapper;
import com.sdm.project.model.bo.TaskExtraNode;
import com.sdm.project.model.bo.TaskMemberNode;
import com.sdm.project.model.bo.TaskNode;
import com.sdm.project.model.entity.SimulationTaskMember;
import com.sdm.project.model.po.ProjectNodePo;
import com.sdm.project.model.po.TaskNodePo;
import com.sdm.project.model.req.*;
@@ -60,6 +61,7 @@ import java.util.*;
import java.util.stream.Collectors;
import static com.sdm.project.service.impl.LyricInternalServiceImpl.PRODUCE_LINE;
import static com.sdm.project.service.impl.NodeServiceImpl.FIELD_NAMES;
import static com.sdm.project.service.impl.NodeServiceImpl.getTagListProperty;
@Slf4j
@@ -435,9 +437,192 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
}
}
renameDirNew(req.getUuid(),req.getDemandName(),false);
// 需求待办修改属性时,需要同步到任务上,(项目、阶段、机台、工位、关注人、仿真类型、确认人、描述)
syncUpdateTask(req);
return SdmResponse.success();
}
private String nullToEmpty(String str) {
return str == null ? "" : str;
}
// 判断tag是否有改变
public boolean isCombinedStringEqual(String projectId, String phaseId, String machineId, String workspaceId,
String tag1, String tag2, String tag4, String tag5) {
// 处理空值后拼接第一组字符串projectId+phaseId+machineId+workspaceId
String combinedReq = nullToEmpty(projectId)
+ nullToEmpty(phaseId)
+ nullToEmpty(machineId)
+ nullToEmpty(workspaceId);
// 处理空值后拼接第二组字符串tag1+tag2+tag4+tag5
String combinedTag = nullToEmpty(tag1)
+ nullToEmpty(tag2)
+ nullToEmpty(tag4)
+ nullToEmpty(tag5);
// 比较两个拼接后的字符串是否完全一致
return combinedReq.equals(combinedTag);
}
public SdmResponse deleteDirById(String uuid) {
DelDirReq req = new DelDirReq();
req.setDelUuid(uuid);
log.info("调用删除任务文件夹的参数为:{}", req);
SdmResponse response = dataClientFeignClient.delDir(req);
log.info("调用删除任务文件夹的返回值为:{}", response);
return response;
}
private SdmResponse createDirNew(String uuid, String uuidOwnType, String parentUuid, String dirName, SpdmTaskVo task) {
CreateDirReq createDirReq = new CreateDirReq();
createDirReq.setUuId(uuid);
createDirReq.setUuIdOwnType(uuidOwnType);
createDirReq.setParentUuId(parentUuid);
createDirReq.setDirName(dirName);
createDirReq.setDirType(DirTypeEnum.PROJECT_NODE_DIR.getValue());
TagReq tagReq = new TagReq();
BeanUtils.copyProperties(task,tagReq);
if (NodeTypeEnum.TASK.getValue().equals(uuidOwnType)) {
tagReq.setTaskId(uuid);
}
createDirReq.setTagReq(tagReq);
log.info("修改需求同步修改任务时调用创建文件夹的参数为:{}", createDirReq);
SdmResponse response = dataClientFeignClient.createDir(createDirReq);
log.info("修改需求同步修改任务时调用创建文件夹的返回值为:{}", response);
return response;
}
/**
* 查找最后一个不为空的字段名称
* @param fields 按顺序传入的字段值需与FIELD_NAMES顺序一致
* @return 最后一个不为空的字段名称无则返回null
*/
public static String findLastNonNullField(String... fields) {
// 校验传入的字段值数量是否匹配
if (fields == null || fields.length != FIELD_NAMES.length) {
throw new IllegalArgumentException("传入的字段值数量必须与预定义字段数量一致4个");
}
// 遍历字段,找到第一个为空的位置,返回前一个字段
for (int i = 0; i < fields.length; i++) {
String fieldValue = fields[i];
// 判断字段值是否为空包括null和空字符串
if (fieldValue == null || fieldValue.trim().isEmpty()) {
// 如果第一个字段就为空返回null
if (i == 0) {
return null;
}
// 返回前一个不为空的字段名称
return fields[i-1];
}
}
// 所有字段都不为空,返回最后一个字段名称
return fields[fields.length-1];
}
/**
* 根据待办的属性,同步修改任务属性
* @param req
*/
private void syncUpdateTask(SpdmEditDemandReq req) {
Long userId = ThreadLocalContext.getUserId();
String curDataStr = DateUtil.now();
String projectId = req.getProjectId();
String phaseId = req.getPhaseId();
String machineId = req.getMachineId();
String workspaceId = req.getWorkspaceId();
String demandName = req.getDemandName();
String aMemberList = req.getAMemberList();
String pMemberList = req.getPMemberList();
String description = req.getDescription();
// 查询需求下关联的任务
List<SpdmTaskVo> taskList = taskMapper.getTaskListByDemandId(req.getUuid());
if (CollectionUtils.isEmpty(taskList)) {
log.info("需求:{}下没有关联任务,不同步属性", req.getUuid());
return;
}
// 查询任务相关成员
List<String> taskIdList = taskList.stream().map(SpdmTaskVo::getUuid).toList();
// 处理成员信息
projectMapper.deleteTaskMemberListByType(taskIdList,Arrays.asList(MemberTypeEnum.PRINCIPAL.getCode(),MemberTypeEnum.ATTENTION.getCode()));
List<SimulationTaskMember> taskMembersToCreate = new ArrayList<>();
for (SpdmTaskVo spdmTaskVo : taskList) {
if (StringUtils.isNotBlank(aMemberList)) {
for (String aMemberId : Arrays.stream(aMemberList.split(",")).toList()) {
SimulationTaskMember taskMember = new SimulationTaskMember();
taskMember.setTaskId(spdmTaskVo.getUuid());
taskMember.setUserId(Long.valueOf(aMemberId));
taskMember.setType(MemberTypeEnum.ATTENTION.getCode());
taskMember.setCreator(userId);
taskMember.setCreateTime(curDataStr);
taskMembersToCreate.add(taskMember);
}
}
if (StringUtils.isNotBlank(pMemberList)) {
for (String pMemberId : Arrays.stream(pMemberList.split(",")).toList()) {
SimulationTaskMember taskMember = new SimulationTaskMember();
taskMember.setTaskId(spdmTaskVo.getUuid());
taskMember.setUserId(Long.valueOf(pMemberId));
taskMember.setType(MemberTypeEnum.PRINCIPAL.getCode());
taskMember.setCreator(userId);
taskMember.setCreateTime(curDataStr);
taskMembersToCreate.add(taskMember);
}
}
}
if (CollectionUtils.isNotEmpty(taskMembersToCreate)) {
taskMapper.saveBatchTaskMember(taskMembersToCreate);
}
// 处理基础信息
for (SpdmTaskVo spdmTaskVo : taskList) {
spdmTaskVo.setTag10(demandName);
spdmTaskVo.setDescription(description);
taskMapper.updateTask(spdmTaskVo);
}
// 处理文件信息
for (SpdmTaskVo spdmTaskVo : taskList) {
String tag1 = spdmTaskVo.getTag1();
String tag2 = spdmTaskVo.getTag2();
String tag4 = spdmTaskVo.getTag4();
String tag5 = spdmTaskVo.getTag5();
if (!isCombinedStringEqual(projectId,phaseId,machineId,workspaceId,tag1,tag2,tag4,tag5)) {
// 节点有变化,需要去处理任务的文件夹(删除原来的,在新的路径新增)
// 查询原来的任务是否有文件夹
GetFileBaseInfoReq getFileBaseInfoReq = new GetFileBaseInfoReq();
String taskId = spdmTaskVo.getUuid();
getFileBaseInfoReq.setUuid(taskId);
log.info("调用获取文件的基本信息的参数为:{}",getFileBaseInfoReq);
SdmResponse<FileMetadataInfoResp> fileBaseInfo = dataClientFeignClient.getFileBaseInfo(getFileBaseInfoReq);
log.info("调用获取文件的基本信息的返回值为:{}",fileBaseInfo);
if (fileBaseInfo.isSuccess() && ObjectUtils.isNotEmpty(fileBaseInfo.getData())) {
log.info("当前任务:{},已创建过文件夹",taskId);
// 删除原来的任务文件夹
SdmResponse taskDelDirResponse = deleteDirById(taskId);
if (ObjectUtils.isEmpty(taskDelDirResponse) || taskDelDirResponse.getCode() != ResultCode.SUCCESS.getCode()) {
log.error("删除任务:{}的文件夹失败,原因为:{}", spdmTaskVo.getTaskName(), taskDelDirResponse.getMessage());
return;
}
}else {
log.info("当前任务:{},没有创建过文件夹",taskId);
}
// 并新建任务文件夹
SdmResponse taskCreateDirResponse = createDirNew(spdmTaskVo.getUuid(), NodeTypeEnum.TASK.getValue(), findLastNonNullField(projectId,phaseId,machineId,workspaceId), spdmTaskVo.getTaskName(),spdmTaskVo);
if (ObjectUtils.isEmpty(taskCreateDirResponse) || taskCreateDirResponse.getCode() != ResultCode.SUCCESS.getCode()) {
log.error("新建任务:{}的文件夹失败,原因为:{}", spdmTaskVo.getTaskName(), taskCreateDirResponse.getMessage());
return;
}
}
}
}
@Transactional
@Override
public SdmResponse deleteDemand(SpdmDeleteDemandReq req) {

View File

@@ -172,7 +172,7 @@ public class NodeServiceImpl extends ServiceImpl<SimulationNodeMapper, Simulatio
@Autowired
private ExportOperate exportOperate;
private static final String[] FIELD_NAMES = {
public static final String[] FIELD_NAMES = {
"projectNodeId",
"phaseNodeId",
"machineNodeId",

View File

@@ -521,6 +521,19 @@
)
</delete>
<delete id="deleteTaskMemberListByType">
delete from simulation_task_member
where task_id in (
<foreach collection='taskIdList' item='taskId' index='index' separator=','>
#{taskId}
</foreach>
) and type in (
<foreach collection='typeList' item='type' index='index' separator=','>
#{type}
</foreach>
)
</delete>
<select id="queryProjectNodeExtrasByNodeIdList" resultType="com.sdm.project.model.po.ProjectNodeExtraPo">
select * from simulation_node_extra where nodeId in (