Merge remote-tracking branch 'origin/main'

This commit is contained in:
2026-02-03 21:55:01 +08:00
10 changed files with 464 additions and 7 deletions

View File

@@ -47,4 +47,10 @@ public class QueryDirReq extends BaseReq {
@Schema(description = "项目id")
String projectId;
/**
* 文件夹id
*/
@Schema(description = "文件夹id")
private Long dirId;
}

View File

@@ -54,4 +54,6 @@ public class TaskExportExcelParam {
* 需求id
*/
private String demandId;
private List<String> filterDiscipline;
}

View File

@@ -34,4 +34,6 @@ public class TaskTreeExportExcelParam {
*/
private Integer endIndex;
private List<String> filterDiscipline;
}

View File

@@ -845,6 +845,12 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
return SdmResponse.success();
}
parentId = nodeMetadataInfo.getId();
} else if (ObjectUtils.isNotEmpty(req.getDirId())) {
FileMetadataInfo nodeMetadataInfo = fileMetadataInfoService.getById(req.getDirId());
if (nodeMetadataInfo == null) {
return SdmResponse.success();
}
parentId = nodeMetadataInfo.getId();
} else {
return SdmResponse.success();
}

View File

@@ -177,4 +177,17 @@ public class SimulationDemandController {
return demandService.deleteDemandNoPermission(req);
}
/**
* 需求列表(无权限)
*
* @param req
* @return
*/
@SysLog("查询需求列表")
@GetMapping("/listNoPermission")
@Operation(summary = "需求列表(我发起的、我确认的)", description = "需求列表(我发起的、我确认的)")
public SdmResponse listNoPermission(@Validated SpdmDemandListReq req) {
return demandService.listNoPermission(req);
}
}

View File

@@ -28,6 +28,8 @@ public interface SimulationDemandMapper extends BaseMapper<SimulationDemand> {
List<SpdmDemandVo> getDemandList(@Param("tenantId") Long tenantId,@Param("req") SpdmDemandListReq req);
List<SpdmDemandVo> getDemandListNoPermission(@Param("req") SpdmDemandListReq req);
List<SpdmDemandMemberVo> getMemberList(@Param("demandIdList") List<String> demandIdList, @Param("memberType") Integer memberType);
SpdmDemandVo getDemandByName(@Param("tenantId") Long tenantId,@Param("demandName") String demandName);

View File

@@ -53,4 +53,5 @@ public interface IDemandService {
SdmResponse editDemandNoPermission(SpdmEditDemandReq req);
SdmResponse listNoPermission(SpdmDemandListReq req);
}

View File

@@ -15,6 +15,7 @@ import com.sdm.common.entity.req.system.UserQueryReq;
import com.sdm.common.entity.req.task.DemandExportExcelFormat;
import com.sdm.common.entity.req.task.DemandExportExcelParam;
import com.sdm.common.entity.resp.PageDataResp;
import com.sdm.common.entity.resp.data.BatchCreateNormalDirResp;
import com.sdm.common.entity.resp.data.FileMetadataInfoResp;
import com.sdm.common.entity.resp.project.SpdmTaskVo;
import com.sdm.common.entity.resp.system.CIDUserResp;
@@ -214,11 +215,47 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
}
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.error("未查询到需求附件文件夹,当前项目下的子文件夹为:{}",childrenMetadataInfoList);
return SdmResponse.failed("新增需求失败!");
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));
demandAttachFolderItemReqList.add(demandAttachFolderItemReq);
demandAttachBatchCreateNormalDirReq.setFolderItems(demandAttachFolderItemReqList);
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();
}
Long demandAttachFileMetadataInfoId = demandAttachFileMetadataInfoResp.getId();
batchCreateNormalDirReq.setParentId(demandAttachFileMetadataInfoId);
FolderItemReq folderItemReq = new FolderItemReq();
folderItemReq.setFolderName(req.getDemandName());
@@ -1234,8 +1271,66 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
}
}
// 项目层级文件夹和需求文件夹中,新增一层【需求附件】文件夹
String projectNodeId = req.getProjectId();
BatchCreateNormalDirReq batchCreateNormalDirReq = new BatchCreateNormalDirReq();
batchCreateNormalDirReq.setParentUUId(req.getProjectId());
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));
demandAttachFolderItemReqList.add(demandAttachFolderItemReq);
demandAttachBatchCreateNormalDirReq.setFolderItems(demandAttachFolderItemReqList);
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());
@@ -1605,4 +1700,269 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
return SdmResponse.success();
}
@Override
public SdmResponse listNoPermission(SpdmDemandListReq req) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("data", new ArrayList<>());
List<SpdmDemandVo> demandList = mapper.getDemandListNoPermission(req);
if (CollectionUtils.isEmpty(demandList)) {
log.error("未查询到需求");
return SdmResponse.success(jsonObject);
}
// 0我发起的 1我确认的
Integer type = req.getType();
if (type != 0 && type != 1) {
log.error("type必须为0或1");
return SdmResponse.success(jsonObject);
}
List<SpdmDemandMemberVo> demandMemberVoList = mapper.getMemberList(demandList.stream().map(SpdmDemandVo::getUuid).toList(), null);
List<SpdmTaskVo> taskList = taskMapper.getTaskListByDemandIdList(demandList.stream().map(SpdmDemandVo::getUuid).toList());
Map<String, List<SpdmTaskVo>> taskMap = Map.of();
if (CollectionUtils.isNotEmpty(taskList)) {
taskMap = taskList.stream().collect(Collectors.groupingBy(SpdmTaskVo::getDemandId));
}
// 需求的状态和进度需要根据任务来确定
if (StringUtils.isNotBlank(req.getAchieveStatus()) || StringUtils.isNotBlank(req.getDemandStatus())) {
if (StringUtils.isNotBlank(req.getAchieveStatus())) {
String achieveStatus = req.getAchieveStatus();
List<String> achieveStatusList = Arrays.stream(achieveStatus.split(",")).toList();
if (CollectionUtils.isEmpty(taskList)) {
demandList = demandList.stream().filter(firstDemand -> achieveStatusList.contains(firstDemand.getAchieveStatus())).toList();
} else {
List<SpdmTaskVo> eachTaskList;
String eachStatus;
List<SpdmDemandVo> newDemandList = new ArrayList<>();
for (SpdmDemandVo demand : demandList) {
eachTaskList = taskMap.get(demand.getUuid());
if (CollectionUtils.isEmpty(eachTaskList)) {
log.info("当前需求:{}没有关联的任务", demand.getId());
if (achieveStatusList.contains(demand.getAchieveStatus())) {
newDemandList.add(demand);
}
} else {
if (eachTaskList.stream().map(SpdmTaskVo::getAchieveStatus).toList().contains(TaskAchieveStatusEnum.UNQUALIFIED.getCode())) {
eachStatus = TaskAchieveStatusEnum.UNQUALIFIED.getCode();
} else if (eachTaskList.stream().map(SpdmTaskVo::getAchieveStatus).toList().contains(TaskAchieveStatusEnum.NO_CALCULATE.getCode())) {
eachStatus = TaskAchieveStatusEnum.NO_CALCULATE.getCode();
} else {
eachStatus = TaskAchieveStatusEnum.QUALIFIED.getCode();
}
log.info("当前需求:{}的风险状态为:{}", demand.getId(), eachStatus);
if (!achieveStatusList.contains(eachStatus)) {
continue;
}
newDemandList.add(demand);
}
}
demandList = newDemandList;
}
}
if (CollectionUtils.isEmpty(demandList)) {
log.error("demandList2为空");
return SdmResponse.success(jsonObject);
}
if (StringUtils.isNotBlank(req.getDemandStatus())) {
String demandStatus = req.getDemandStatus();
List<String> demandStatusList = Arrays.stream(demandStatus.split(",")).toList();
if (CollectionUtils.isEmpty(taskList)) {
demandList = demandList.stream().filter(firstDemand -> demandStatusList.contains(firstDemand.getDemandStatus())).toList();
} else {
List<SpdmTaskVo> eachTaskList;
String eachStatus = "";
List<SpdmDemandVo> newDemandList = new ArrayList<>();
for (SpdmDemandVo demand : demandList) {
eachTaskList = taskMap.get(demand.getUuid());
if (CollectionUtils.isEmpty(eachTaskList)) {
log.info("当前需求:{}没有关联的任务", demand.getId());
if (demandStatusList.contains(demand.getDemandStatus())) {
newDemandList.add(demand);
}
} else {
// 有进行中就是进行中,
// 没有进行中,有暂停就是暂停
// 没有进行中和暂停,有延期就是延期
// 全部已完成就已完成
// 全部关闭就已关闭
// 全部未开始就未开始
// 全部驳回就驳回
// 其他 进行中
List<String> statusList = eachTaskList.stream().map(SpdmTaskVo::getExeStatus).toList();
if (statusList.contains(TaskExeStatusEnum.IN_PROGRESS.getCode())) {
eachStatus = TaskExeStatusEnum.IN_PROGRESS.getCode();
} else if (statusList.contains(TaskExeStatusEnum.PAUSED.getCode())) {
eachStatus = TaskExeStatusEnum.PAUSED.getCode();
} else if (statusList.contains(TaskExeStatusEnum.POSTPONED.getCode())) {
eachStatus = TaskExeStatusEnum.POSTPONED.getCode();
} else if (statusList.stream().allMatch(status -> TaskExeStatusEnum.COMPLETED.getCode().equals(status))) {
eachStatus = TaskExeStatusEnum.COMPLETED.getCode();
} else if (statusList.stream().allMatch(status -> TaskExeStatusEnum.CLOSED.getCode().equals(status))) {
eachStatus = TaskExeStatusEnum.CLOSED.getCode();
} else if (statusList.stream().allMatch(status -> TaskExeStatusEnum.NO_STARTED.getCode().equals(status))) {
eachStatus = TaskExeStatusEnum.NO_STARTED.getCode();
} else if (statusList.stream().allMatch(status -> TaskExeStatusEnum.REJECTED.getCode().equals(status))) {
eachStatus = TaskExeStatusEnum.REJECTED.getCode();
} else {
eachStatus = TaskExeStatusEnum.IN_PROGRESS.getCode();
}
log.info("当前需求:{}的需求状态为:{}", demand.getId(), eachStatus);
if (!demandStatusList.contains(eachStatus)) {
continue;
}
newDemandList.add(demand);
}
}
demandList = newDemandList;
}
}
}
if (CollectionUtils.isEmpty(demandList)) {
log.error("demandList3为空");
return SdmResponse.success(jsonObject);
}
jsonObject.put("currentPage", req.getCurrent());
jsonObject.put("pageSize", req.getSize());
jsonObject.put("total", demandList.size());
demandList = demandList.stream().skip((long) (req.getCurrent() - 1) * req.getSize()).limit(req.getSize()).toList();
if (CollectionUtils.isEmpty(demandList)) {
log.error("demandList4为空");
return SdmResponse.success(jsonObject);
}
List<SpdmTaskVo> eachTaskList;
String eachAchieveStatus;
String eachExeStatus;
for (SpdmDemandVo demand : demandList) {
eachTaskList = taskMap.get(demand.getUuid());
if (CollectionUtils.isEmpty(eachTaskList)) {
demand.setAchieveStatus("0");
continue;
}
if (eachTaskList.stream().map(SpdmTaskVo::getAchieveStatus).toList().contains(TaskAchieveStatusEnum.UNQUALIFIED.getCode())) {
eachAchieveStatus = TaskAchieveStatusEnum.UNQUALIFIED.getCode();
} else if (eachTaskList.stream().map(SpdmTaskVo::getAchieveStatus).toList().contains(TaskAchieveStatusEnum.NO_CALCULATE.getCode())) {
eachAchieveStatus = TaskAchieveStatusEnum.NO_CALCULATE.getCode();
} else {
eachAchieveStatus = TaskAchieveStatusEnum.QUALIFIED.getCode();
}
demand.setAchieveStatus(eachAchieveStatus);
List<String> statusList = eachTaskList.stream().map(SpdmTaskVo::getExeStatus).toList();
if (statusList.contains(TaskExeStatusEnum.IN_PROGRESS.getCode())) {
eachExeStatus = TaskExeStatusEnum.IN_PROGRESS.getCode();
} else if (statusList.contains(TaskExeStatusEnum.PAUSED.getCode())) {
eachExeStatus = TaskExeStatusEnum.PAUSED.getCode();
} else if (statusList.contains(TaskExeStatusEnum.POSTPONED.getCode())) {
eachExeStatus = TaskExeStatusEnum.POSTPONED.getCode();
} else if (statusList.stream().allMatch(status -> TaskExeStatusEnum.COMPLETED.getCode().equals(status))) {
eachExeStatus = TaskExeStatusEnum.COMPLETED.getCode();
} else if (statusList.stream().allMatch(status -> TaskExeStatusEnum.CLOSED.getCode().equals(status))) {
eachExeStatus = TaskExeStatusEnum.CLOSED.getCode();
} else if (statusList.stream().allMatch(status -> TaskExeStatusEnum.NO_STARTED.getCode().equals(status))) {
eachExeStatus = TaskExeStatusEnum.NO_STARTED.getCode();
} else if (statusList.stream().allMatch(status -> TaskExeStatusEnum.REJECTED.getCode().equals(status))) {
eachExeStatus = TaskExeStatusEnum.REJECTED.getCode();
} else {
eachExeStatus = TaskExeStatusEnum.IN_PROGRESS.getCode();
}
demand.setDemandStatus(eachExeStatus);
}
Map<String, List<SpdmDemandMemberVo>> demandMemberMap = Map.of();
if (CollectionUtils.isNotEmpty(demandMemberVoList)) {
demandMemberMap = demandMemberVoList.stream().collect(Collectors.groupingBy(SpdmDemandMemberVo::getDemandId));
}
List<SpdmDemandMemberVo> eachDemandMemberList;
List<String> nodeIdList = new ArrayList<>();
List<String> projectIdList = demandList.stream().map(SpdmDemandVo::getProjectId).toList();
if (CollectionUtils.isNotEmpty(projectIdList)) {
nodeIdList.addAll(projectIdList);
}
List<String> phaseIdList = demandList.stream().map(SpdmDemandVo::getPhaseId).toList();
if (CollectionUtils.isNotEmpty(phaseIdList)) {
nodeIdList.addAll(phaseIdList);
}
Map<String, List<SpdmNodeVo>> nodeMap = Map.of();
if (CollectionUtils.isNotEmpty(nodeIdList)) {
List<SpdmNodeVo> nodeList = nodeMapper.getNodeListByIds(nodeIdList);
if (CollectionUtils.isNotEmpty(nodeList)) {
nodeMap = nodeList.stream().collect(Collectors.groupingBy(SpdmNodeVo::getUuid));
}
}
List<Long> userIdList = new ArrayList<>();
if (CollectionUtils.isNotEmpty(demandMemberVoList)) {
userIdList = demandMemberVoList.stream().map(SpdmDemandMemberVo::getUserId).toList();
}
Map<Long, List<CIDUserResp>> userMap = Map.of();
if (CollectionUtils.isNotEmpty(userIdList)) {
SdmResponse<List<CIDUserResp>> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(userIdList).build());
List<CIDUserResp> userList = cidUserResp.getData();
if (CollectionUtils.isNotEmpty(userList)) {
userMap = userList.stream().collect(Collectors.groupingBy(CIDUserResp::getUserId));
}
}
List<String> demandIdList = demandList.stream().map(SpdmDemandVo::getUuid).toList();
List<SpdmDemandExtraVo> demandExtraList = mapper.getDemandExtraList(demandIdList);
Map<String, List<SpdmDemandExtraVo>> demandExtraMap = Map.of();
if (CollectionUtils.isNotEmpty(demandExtraList)) {
demandExtraMap = demandExtraList.stream().collect(Collectors.groupingBy(SpdmDemandExtraVo::getDemandId));
}
for (SpdmDemandVo spdmDemandVo : demandList) {
spdmDemandVo.setExtras(demandExtraMap.get(spdmDemandVo.getUuid()));
eachTaskList = taskMap.get(spdmDemandVo.getUuid());
spdmDemandVo.setProgress(CollectionUtils.isEmpty(eachTaskList) ? 0 : eachTaskList.stream().mapToInt(SpdmTaskVo::getProgress).sum() / eachTaskList.size());
if (StringUtils.isNotBlank(spdmDemandVo.getProjectId())) {
spdmDemandVo.setProjectName(CollectionUtils.isNotEmpty(nodeMap.get(spdmDemandVo.getProjectId())) ? nodeMap.get(spdmDemandVo.getProjectId()).get(0).getNodeName() : "");
}
if (StringUtils.isNotBlank(spdmDemandVo.getPhaseId())) {
spdmDemandVo.setPhaseName(CollectionUtils.isNotEmpty(nodeMap.get(spdmDemandVo.getPhaseId())) ? nodeMap.get(spdmDemandVo.getPhaseId()).get(0).getNodeName() : "");
}
if (StringUtils.isNotBlank(spdmDemandVo.getMachineId())) {
spdmDemandVo.setMachineName(CollectionUtils.isNotEmpty(nodeMap.get(spdmDemandVo.getMachineId())) ? nodeMap.get(spdmDemandVo.getMachineId()).get(0).getNodeName() : "");
}
if (StringUtils.isNotBlank(spdmDemandVo.getWorkspaceId())) {
spdmDemandVo.setWorkspaceName(CollectionUtils.isNotEmpty(nodeMap.get(spdmDemandVo.getWorkspaceId())) ? nodeMap.get(spdmDemandVo.getWorkspaceId()).get(0).getNodeName() : "");
}
eachDemandMemberList = demandMemberMap.get(spdmDemandVo.getUuid());
if (CollectionUtils.isEmpty(eachDemandMemberList)) {
continue;
}
List<CIDUserResp> spdmPUserVoList = new ArrayList<>();
for (Long userId : eachDemandMemberList.stream().filter(member -> MemberTypeEnum.PRINCIPAL.getCode().equals(member.getType())).map(SpdmDemandMemberVo::getUserId).toList()) {
if (ObjectUtils.isNotEmpty(userId) && CollectionUtils.isNotEmpty(userMap.get(userId))) {
spdmPUserVoList.addAll(userMap.get(userId));
}
}
spdmDemandVo.setPMemberList(spdmPUserVoList);
List<CIDUserResp> spdmEUserVoList = new ArrayList<>();
for (Long userId : eachDemandMemberList.stream().filter(member -> MemberTypeEnum.EXECUTOR.getCode().equals(member.getType())).map(SpdmDemandMemberVo::getUserId).toList()) {
if (ObjectUtils.isNotEmpty(userId) && CollectionUtils.isNotEmpty(userMap.get(userId))) {
spdmEUserVoList.addAll(userMap.get(userId));
}
}
spdmDemandVo.setEMemberList(spdmEUserVoList);
List<CIDUserResp> spdmTUserVoList = new ArrayList<>();
for (Long userId : eachDemandMemberList.stream().filter(member -> MemberTypeEnum.THREED.getCode().equals(member.getType())).map(SpdmDemandMemberVo::getUserId).toList()) {
if (ObjectUtils.isNotEmpty(userId) && CollectionUtils.isNotEmpty(userMap.get(userId))) {
spdmTUserVoList.addAll(userMap.get(userId));
}
}
spdmDemandVo.setTMemberList(spdmTUserVoList);
List<CIDUserResp> spdmAUserVoList = new ArrayList<>();
for (Long userId : eachDemandMemberList.stream().filter(member -> MemberTypeEnum.ATTENTION.getCode().equals(member.getType())).map(SpdmDemandMemberVo::getUserId).toList()) {
if (ObjectUtils.isNotEmpty(userId) && CollectionUtils.isNotEmpty(userMap.get(userId))) {
spdmAUserVoList.addAll(userMap.get(userId));
}
}
spdmDemandVo.setAMemberList(spdmAUserVoList);
}
jsonObject.put("data", demandList);
return SdmResponse.success(jsonObject);
}
}

View File

@@ -12,6 +12,7 @@ import com.sdm.common.entity.enums.NodeTypeEnum;
import com.sdm.common.entity.req.data.*;
import com.sdm.common.entity.req.project.SpdmNodeListReq;
import com.sdm.common.entity.req.system.UserQueryReq;
import com.sdm.common.entity.resp.data.BatchCreateNormalDirResp;
import com.sdm.common.entity.resp.data.FileMetadataInfoResp;
import com.sdm.common.entity.resp.system.CIDUserResp;
import com.sdm.common.feign.impl.data.DataClientFeignClientImpl;
@@ -638,11 +639,47 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
}
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.error("未查询到需求附件文件夹,当前项目下的子文件夹为:{}",childrenMetadataInfoList);
return;
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));
demandAttachFolderItemReqList.add(demandAttachFolderItemReq);
demandAttachBatchCreateNormalDirReq.setFolderItems(demandAttachFolderItemReqList);
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;
}
batchCreateNormalDirResp = response.getData();
} catch (Exception e) {
log.error("调用创建需求附件文件夹接口失败", e);
return;
}
if (ObjectUtils.isEmpty(batchCreateNormalDirResp)) {
log.error("batchCreateNormalDirResp为空");
return;
}
List<BatchCreateNormalDirResp.DirInfo> successList = batchCreateNormalDirResp.getSuccessList();
if (CollectionUtils.isEmpty(successList)) {
log.error("successList为空");
return;
}
// 需求附件文件夹的元数据主键id
demandAttachFileMetadataInfoId = successList.get(0).getId();
}else {
demandAttachFileMetadataInfoId = demandAttachFileMetadataInfoResp.getId();
}
Long demandAttachFileMetadataInfoId = demandAttachFileMetadataInfoResp.getId();
for (BatchCreateDirItem batchCreateDirItem : createDirItemList) {
BatchCreateNormalDirReq batchCreateNormalDirReq = new BatchCreateNormalDirReq();
// 2026-02-03 这里要挂在【需求附件】文件夹下了

View File

@@ -193,4 +193,32 @@
AND mold_material.property_name = 'materialNo'
</select>
<select id="getDemandListNoPermission" resultType="com.sdm.project.model.vo.SpdmDemandVo">
select * from simulation_demand
<trim prefix="WHERE" suffixOverrides ="and">
<if test="req.demandName != null and req.demandName != ''">
<bind name="searchKey1" value="'%' + req.demandName + '%'"/>
demand_name like #{searchKey1} and
</if>
<if test="req.projectId != null and req.projectId != ''">
project_id = #{req.projectId} and
</if>
<if test="req.phaseId != null and req.phaseId != ''">
phase_id = #{req.phaseId} and
</if>
<if test="req.demandType != null and req.demandType != ''">
demand_type = #{req.demandType} and
</if>
<if test="req.simType != null and req.simType != ''">
sim_type = #{req.simType} and
</if>
<if test='req.sortOrder != null and req.sortOrder == "0"'>
order by create_time
</if>
<if test='req.sortOrder != null and req.sortOrder == "1"'>
order by create_time desc
</if>
</trim>
</select>
</mapper>