fix[project]: 仿真策划时,可以添加3D负责人

This commit is contained in:
2026-03-20 07:57:02 +08:00
parent 98ae5836b5
commit 9e840230da
2 changed files with 284 additions and 0 deletions

View File

@@ -197,6 +197,12 @@ public class TaskNode extends BaseEntity {
@JsonProperty(value = "payAttentionMemberList")
private String payAttentionMemberList;
/**
* 3D负责人
*/
@JsonProperty(value = "tMemberList")
private String tMemberList;
/**
* 任务名称
*/

View File

@@ -19,6 +19,7 @@ import com.sdm.common.entity.req.system.UserQueryReq;
import com.sdm.common.entity.req.task.TaskTreeExportExcelFormat;
import com.sdm.common.entity.req.task.TaskTreeExportExcelParam;
import com.sdm.common.entity.resp.capability.FlowTemplateResp;
import com.sdm.common.entity.resp.data.BatchCreateNormalDirResp;
import com.sdm.common.entity.resp.data.FileMetadataInfoResp;
import com.sdm.common.entity.resp.PageDataResp;
import com.sdm.common.entity.resp.data.SimulationTaskResultCurveResp;
@@ -46,6 +47,7 @@ import com.sdm.project.common.MemberTypeEnum;
import com.sdm.project.common.NodeMemberTypeEnum;
import com.sdm.project.common.TaskExeStatusEnum;
import com.sdm.project.common.VersionEnum;
import com.sdm.project.dao.SimulationDemandMapper;
import com.sdm.project.dao.SimulationNodeMapper;
import com.sdm.project.dao.SimulationProjectMapper;
import com.sdm.project.dao.SimulationTaskMapper;
@@ -54,6 +56,7 @@ import com.sdm.project.model.entity.*;
import com.sdm.project.model.po.*;
import com.sdm.project.model.req.*;
import com.sdm.project.model.resp.WorkspaceReportListResp;
import com.sdm.project.model.vo.SpdmDemandVo;
import com.sdm.project.model.vo.SpdmNodeExtraVo;
import com.sdm.project.model.vo.SpdmNodeMemberVo;
import com.sdm.project.model.vo.SpdmNodeVo;
@@ -206,6 +209,9 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
@Autowired
private CacheManager cacheManager;
@Autowired
private SimulationDemandMapper demandMapper;
// @Override
// @Transactional
@@ -1758,6 +1764,13 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
simulationTaskMemberService.saveTaskMemberList(projectNode.getUuid(), MemberTypeEnum.ATTENTION.getCode(), longUserIdList);
}
// 设置3D负责人人
if(StringUtils.isNotBlank(projectNode.getTMemberList())){
String[] userIdArr = projectNode.getTMemberList().split(",");
List<Long> longUserIdList = Arrays.stream(userIdArr).filter(s -> !s.isEmpty()).map(Long::valueOf).collect(Collectors.toList());
simulationTaskMemberService.saveTaskMemberList(projectNode.getUuid(), MemberTypeEnum.THREED.getCode(), longUserIdList);
}
List<TaskExtraNode> extraList = projectNode.getExtras();
if (CollectionUtils.isNotEmpty(extraList)) {
for (TaskExtraNode extra : extraList) {
@@ -2344,6 +2357,12 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
for (TaskNode taskNode : taskNodeList) {
updatePermission(userId,taskNode.getUuid(),FilePermissionEnum.READ.getValue());
}
// 20260320 新增任务时,同步新增一个需求
try {
addDemandByTask(taskNodeList);
}catch (Exception ex) {
log.error("新增任务时,同步新增一个需求时异常:{}",ex.getMessage());
}
}
if (CollectionUtils.isNotEmpty(taskNodeExtraList)) {
taskNodeExtraList.forEach(projectNode -> projectNode.setCreateTime(createTime));
@@ -2420,6 +2439,265 @@ public class ProjectServiceImpl extends BaseService implements IProjectService {
return response;
}
public void addDemandByTask(List<TaskNode> taskNodeList) {
log.info("策划任务时,新增需求");
// Long tenantId = ThreadLocalContext.getTenantId();
// Long jobNumber = ThreadLocalContext.getUserId();
// for (TaskNode taskNode : taskNodeList) {
// SpdmDemandVo demandByName = demandMapper.getDemandByNameNoPermission(tenantId,String.join(",", taskNode.getTag10()));
// if (ObjectUtils.isNotEmpty(demandByName)) {
// log.error("需求名称:{},已存在",demandByName.getDemandName());
// continue;
// }
// SpdmAddDemandReq req = new SpdmAddDemandReq();
// req.setCreator(jobNumber);
// // 获取仿真负责人
// String pMemberList = taskNode.getPMemberList();
// // 获取仿真执行人
// String eMemberList = taskNode.getEMemberList();
// // 3D负责人
// String threeDMemberList = taskNode.getTMemberList();
// // 关注人
// String attentionMemberList = taskNode.getAMemberList();
//
//
//
//// if (demandMapper.addDemand(req, tenantId, jobNumber) <= 0) {
//// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//// return SdmResponse.failed("新增需求失败!");
//// }
// }
//
//
//
//
// // 获取需求额外属性
// List<SpdmDemandExtraReq> demandExtraList = req.getExtras();
// String curDateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
// req.setCreateTime(curDateStr);
// req.setUuid(RandomUtil.generateString(32));
//
//
// if (mapper.addDemand(req, tenantId, jobNumber) <= 0) {
// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
// return SdmResponse.failed("新增需求失败!");
// }
// long demandId = req.getId();
// log.info("需求主键id为无权限校验{}", demandId);
// List<SpdmDemandRelateMemberReq> allMemberList = new ArrayList<>();
// String uuid = req.getUuid();
// if (StringUtils.isNotBlank(pMemberList)) {
// String[] pMemberArray = pMemberList.split(",");
// for (String userId : pMemberArray) {
// SpdmDemandRelateMemberReq spdmDemandRelateMemberReq = new SpdmDemandRelateMemberReq();
// spdmDemandRelateMemberReq.setDemandId(uuid);
// spdmDemandRelateMemberReq.setType(0);
// spdmDemandRelateMemberReq.setUserId(Long.valueOf(userId));
// spdmDemandRelateMemberReq.setCreateTime(curDateStr);
// spdmDemandRelateMemberReq.setCreator(jobNumber);
// allMemberList.add(spdmDemandRelateMemberReq);
// }
// }
//
// if (StringUtils.isNotBlank(eMemberList)) {
// String[] eMemberArray = eMemberList.split(",");
// for (String userId : eMemberArray) {
// SpdmDemandRelateMemberReq spdmDemandRelateMemberReq = new SpdmDemandRelateMemberReq();
// spdmDemandRelateMemberReq.setDemandId(uuid);
// spdmDemandRelateMemberReq.setType(1);
// spdmDemandRelateMemberReq.setUserId(Long.valueOf(userId));
// spdmDemandRelateMemberReq.setCreateTime(curDateStr);
// spdmDemandRelateMemberReq.setCreator(jobNumber);
// allMemberList.add(spdmDemandRelateMemberReq);
// }
// }
//
// if (StringUtils.isNotBlank(threeDMemberList)) {
// String[] threeDMemberArray = threeDMemberList.split(",");
// for (String userId : threeDMemberArray) {
// SpdmDemandRelateMemberReq spdmDemandRelateMemberReq = new SpdmDemandRelateMemberReq();
// spdmDemandRelateMemberReq.setDemandId(uuid);
// spdmDemandRelateMemberReq.setType(2);
// spdmDemandRelateMemberReq.setUserId(Long.valueOf(userId));
// spdmDemandRelateMemberReq.setCreateTime(curDateStr);
// spdmDemandRelateMemberReq.setCreator(jobNumber);
// allMemberList.add(spdmDemandRelateMemberReq);
// }
// }
//
// if (StringUtils.isNotBlank(attentionMemberList)) {
// String[] attentionMemberArray = attentionMemberList.split(",");
// for (String userId : attentionMemberArray) {
// SpdmDemandRelateMemberReq spdmDemandRelateMemberReq = new SpdmDemandRelateMemberReq();
// spdmDemandRelateMemberReq.setDemandId(uuid);
// spdmDemandRelateMemberReq.setType(3);
// spdmDemandRelateMemberReq.setUserId(Long.valueOf(userId));
// spdmDemandRelateMemberReq.setCreateTime(curDateStr);
// spdmDemandRelateMemberReq.setCreator(jobNumber);
// allMemberList.add(spdmDemandRelateMemberReq);
// }
// }
//
// if (CollectionUtils.isNotEmpty(allMemberList)) {
// if (mapper.addDemandMember(allMemberList) <= 0) {
// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
// return SdmResponse.failed("新增需求关联成员失败!");
// }
// }
// if (CollectionUtils.isNotEmpty(demandExtraList)) {
// demandExtraList.forEach(demandExtra -> {
// demandExtra.setDemandId(req.getUuid());
// demandExtra.setCreateTime(curDateStr);
// demandExtra.setCreator(jobNumber);
// });
// if (mapper.addDemandExtra(demandExtraList) <= 0) {
// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
// return SdmResponse.failed("新增需求额外属性失败!");
// }
// }
//
//
// // 项目层级文件夹和需求文件夹中,新增一层【需求附件】文件夹
// String projectNodeId = req.getProjectId();
// BatchCreateNormalDirReq batchCreateNormalDirReq = new BatchCreateNormalDirReq();
// SdmResponse<FileMetadataInfoResp> fileMetadataInfoResp = dataFeignClient.queryFileMetadataInfo(projectNodeId, NodeTypeEnum.PROJECT.getValue(), 0L);
// if (fileMetadataInfoResp.getData() == null) {
// log.error("fileMetadataInfoResp为空,projectNodeId为{}",projectNodeId);
// return SdmResponse.failed("新增需求失败!");
// }
// // 查询需求附件的uuid元数据表中【parentId是project的元数据主键id且originalName为需求附件】
// FileMetadataInfoResp projectMetadataInfo = fileMetadataInfoResp.getData();
// SdmResponse<List<FileMetadataInfoResp>> listSdmResponse = dataFeignClient.listDir(DirTypeEnum.PROJECT_NODE_DIR.getValue(), projectMetadataInfo.getId());
// if (!listSdmResponse.isSuccess() || CollectionUtils.isEmpty(listSdmResponse.getData())) {
// log.error("listSdmResponse为空,project的元数据主键id为{}",projectMetadataInfo.getId());
// return SdmResponse.failed("新增需求失败!");
// }
// List<FileMetadataInfoResp> childrenMetadataInfoList = listSdmResponse.getData();
// FileMetadataInfoResp demandAttachFileMetadataInfoResp = childrenMetadataInfoList.stream().filter(metadataInfo -> AttachFileTypeEnum.DEMAND_FILE.getValue().equals(metadataInfo.getOriginalName())).findFirst().orElse(null);
// Long demandAttachFileMetadataInfoId;
// if (ObjectUtils.isEmpty(demandAttachFileMetadataInfoResp)) {
// log.info("未查询到需求附件文件夹,当前项目下的子文件夹为:{}",childrenMetadataInfoList);
// // 项目层级文件夹和需求文件夹中,新增一层【需求附件】文件夹
// List<FolderItemReq> demandAttachFolderItemReqList = new ArrayList<>();
// BatchCreateNormalDirReq demandAttachBatchCreateNormalDirReq = new BatchCreateNormalDirReq();
// demandAttachBatchCreateNormalDirReq.setParentUUId(projectNodeId);
// FolderItemReq demandAttachFolderItemReq = new FolderItemReq();
// demandAttachFolderItemReq.setFolderName(AttachFileTypeEnum.DEMAND_FILE.getValue());
// demandAttachFolderItemReq.setFolderUuid(RandomUtil.generateString(32));
// // 利元亨定制
// TagReq tagReq = new TagReq();
// String projectId = req.getProjectId();
// String phaseId = req.getPhaseId();
// String machineId = req.getMachineId();
// String workspaceId = req.getWorkspaceId();
// tagReq.setTag1(projectId);
// tagReq.setTag2(phaseId);
// tagReq.setTag4(machineId);
// tagReq.setTag5(workspaceId);
// demandAttachFolderItemReq.setTagReq(tagReq);
// demandAttachFolderItemReqList.add(demandAttachFolderItemReq);
// demandAttachBatchCreateNormalDirReq.setFolderItems(demandAttachFolderItemReqList);
// demandAttachBatchCreateNormalDirReq.setSkipPermissionCheck(true);
// log.info("创建需求附件文件夹请求参数:{}", demandAttachBatchCreateNormalDirReq);
// BatchCreateNormalDirResp batchCreateNormalDirResp;
// try {
// SdmResponse<BatchCreateNormalDirResp> response = dataFeignClient.batchCreateNormalDirs(demandAttachBatchCreateNormalDirReq);
// log.info("创建需求附件文件夹响应:{}", response);
// if (!response.isSuccess() || ObjectUtils.isEmpty(response.getData())) {
// log.error("调用创建需求附件文件夹接口失败,原因为:{}", response.getMessage());
// return SdmResponse.failed("创建需求附件文件夹失败:,原因为:" + response.getMessage());
// }
// batchCreateNormalDirResp = response.getData();
// } catch (Exception e) {
// log.error("调用创建需求附件文件夹接口失败", e);
// return SdmResponse.failed("创建需求附件文件夹失败:" + e.getMessage());
// }
//
// if (ObjectUtils.isEmpty(batchCreateNormalDirResp)) {
// log.error("batchCreateNormalDirResp为空");
// return SdmResponse.failed("创建需求附件文件夹失败");
// }
// List<BatchCreateNormalDirResp.DirInfo> successList = batchCreateNormalDirResp.getSuccessList();
// if (CollectionUtils.isEmpty(successList)) {
// log.error("successList为空");
// return SdmResponse.failed("创建需求附件文件夹失败");
// }
// // 需求附件文件夹的元数据主键id
// demandAttachFileMetadataInfoId = successList.get(0).getId();
// }else {
// demandAttachFileMetadataInfoId = demandAttachFileMetadataInfoResp.getId();
// }
// batchCreateNormalDirReq.setParentId(demandAttachFileMetadataInfoId);
// FolderItemReq folderItemReq = new FolderItemReq();
// folderItemReq.setFolderName(req.getDemandName());
// folderItemReq.setFolderUuid(req.getUuid());
// // 利元亨定制
// TagReq tagReq = new TagReq();
// String projectId = req.getProjectId();
// String phaseId = req.getPhaseId();
// String machineId = req.getMachineId();
// String workspaceId = req.getWorkspaceId();
// tagReq.setTag1(projectId);
// tagReq.setTag2(phaseId);
// tagReq.setTag4(machineId);
// tagReq.setTag5(workspaceId);
// folderItemReq.setTagReq(tagReq);
// batchCreateNormalDirReq.setFolderItems(Collections.singletonList(folderItemReq));
// batchCreateNormalDirReq.setSkipPermissionCheck(true);
// log.info("创建需求文件夹参数(无权限校验): {}", batchCreateNormalDirReq);
// SdmResponse dirCreateResp = dataFeignClient.batchCreateNormalDirs(batchCreateNormalDirReq);
// if (ObjectUtils.isEmpty(dirCreateResp) || dirCreateResp.getCode() != ResultCode.SUCCESS.getCode()) {
// log.error("创建项目:{}下的{}需求文件夹(无权限校验)时,创建文件夹失败,原因为:{}", req.getProjectId(),req.getDemandName(), dirCreateResp.getMessage());
// TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
// return SdmResponse.failed("您没有选择项目的相应权限,请更换其他项目进行创建");
// }
// log.info("创建需求文件夹响应(无权限校验): {}", dirCreateResp);
//
// // 更新需求创建人对需求文件夹的权限 & 更新需求仿真负责人(确认人)对需求文件夹的权限(预览、下载)
// Long userId = ThreadLocalContext.getUserId();
// UpdatePermissionReq updatePermissionReq = new UpdatePermissionReq();
// updatePermissionReq.setUuid(uuid);
// Map<Long, Byte> userPermissions = new HashMap<>();
// // 创建人
// userPermissions.put(userId, FilePermissionEnum.ALL.getValue());
// // 仿真负责人
// if (CollectionUtils.isNotEmpty(allMemberList)) {
// // 兼容创建人和负责人是同一个人的情况
// allMemberList.stream().filter(member -> MemberTypeEnum.PRINCIPAL.getCode().equals(member.getType()) && !Objects.equals(userId, member.getUserId())).forEach(member -> {
// userPermissions.put(member.getUserId(), FilePermissionEnum.BASE.getValue());
// });
// }
//
// // 仿真负责人还需要对选择的节点有创建和预览权限
// UpdatePermissionReq updateNodePermissionReq = new UpdatePermissionReq();
// updateNodePermissionReq.setUuid(req.getWorkspaceId());
// Map<Long, Byte> userForNodePermissions = new HashMap<>();
// if (StringUtils.isNotBlank(pMemberList)) {
// String[] pMemberArray = pMemberList.split(",");
// for (String pUserId : pMemberArray) {
// userForNodePermissions.put(Long.valueOf(pUserId), FilePermissionEnum.ALL_EXCLUDE_DELETE.getValue());
// }
// updateNodePermissionReq.setUserPermissions(userForNodePermissions);
// log.info("创建需求时,更新需求仿真负责人(确认人)工位节点权限的参数为:{}",updateNodePermissionReq);
// SdmResponse updateNodePermissionResponse = dataFeignClient.updatePermission(updateNodePermissionReq);
// log.info("创建需求时,更新需求仿真负责人(确认人)工位节点权限的返回值为:{}",updateNodePermissionResponse);
// }
//
// updatePermissionReq.setUserPermissions(userPermissions);
// log.info("创建需求时(无权限校验),更新需求创建人和需求仿真负责人(确认人)权限的参数为:{}",updatePermissionReq);
// SdmResponse updatePermissionResponse = dataFeignClient.updatePermission(updatePermissionReq);
// log.info("创建需求时(无权限校验),更新需求创建人和需求仿真负责人(确认人)权限的返回值为:{}",updatePermissionResponse);
//
// // 只有利元亨需要在创建需求的同时创建任务
// if (req.getIsLyric()) {
// SimulationDemand demand = new SimulationDemand();
// BeanUtils.copyProperties(req, demand);
// simulationTaskService.batchCreateTaskFromDemand(Collections.singletonList(demand));
// }
//
// return SdmResponse.success(req.getUuid());
}
// private SdmResponse realAddSimulationTaskItems(TaskNodeTree taskNodeTree, String parentId, Long tenantId,HashMap<String, List<String>> idMap,HashMap<String, List<String>> taskIdMap) {
// Long jobNumber = ThreadLocalContext.getUserId();
// SdmResponse response = SdmResponse.success();