From 8f6c08a248925965be061144f7c03550c2823e2f Mon Sep 17 00:00:00 2001 From: lidongyang <506508008@qq.com> Date: Sat, 14 Mar 2026 11:46:05 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E9=9C=80=E6=B1=82=E5=BE=85=E5=8A=9E?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B1=9E=E6=80=A7=E6=97=B6=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E5=88=B0=E5=85=B3=E8=81=94=E7=9A=84=E4=BB=BB=E5=8A=A1=E4=B8=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../project/dao/SimulationProjectMapper.java | 2 + .../service/impl/DemandServiceImpl.java | 185 ++++++++++++++++++ .../project/service/impl/NodeServiceImpl.java | 2 +- .../mapper/SimulationProjectMapper.xml | 13 ++ 4 files changed, 201 insertions(+), 1 deletion(-) diff --git a/project/src/main/java/com/sdm/project/dao/SimulationProjectMapper.java b/project/src/main/java/com/sdm/project/dao/SimulationProjectMapper.java index 97ce6df1..55ae61c2 100644 --- a/project/src/main/java/com/sdm/project/dao/SimulationProjectMapper.java +++ b/project/src/main/java/com/sdm/project/dao/SimulationProjectMapper.java @@ -164,6 +164,8 @@ public interface SimulationProjectMapper { void deleteTaskMemberList(@Param("taskIdList") List taskIdList); + void deleteTaskMemberListByType(@Param("taskIdList") List taskIdList,@Param("typeList") List typeList); + List queryPerformanceNodeByNodeIdList(@Param("taskIdList") List taskIdList, @Param("req")SpdmAnalysisPerformanceListReq req); diff --git a/project/src/main/java/com/sdm/project/service/impl/DemandServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/DemandServiceImpl.java index 4c3c0ac8..c091d543 100644 --- a/project/src/main/java/com/sdm/project/service/impl/DemandServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/DemandServiceImpl.java @@ -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 taskList = taskMapper.getTaskListByDemandId(req.getUuid()); + if (CollectionUtils.isEmpty(taskList)) { + log.info("需求:{}下没有关联任务,不同步属性", req.getUuid()); + return; + } + // 查询任务相关成员 + List taskIdList = taskList.stream().map(SpdmTaskVo::getUuid).toList(); + // 处理成员信息 + projectMapper.deleteTaskMemberListByType(taskIdList,Arrays.asList(MemberTypeEnum.PRINCIPAL.getCode(),MemberTypeEnum.ATTENTION.getCode())); + List 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 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) { 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 199f5507..c79156a2 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 @@ -172,7 +172,7 @@ public class NodeServiceImpl extends ServiceImpl + + delete from simulation_task_member + where task_id in ( + + #{taskId} + + ) and type in ( + + #{type} + + ) + +