Merge branch 'main' of http://192.168.65.198:3000/toolchaintechnologycenter/spdm-backend
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
package com.sdm.common.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum DemandMemberTypeEnum {
|
||||
|
||||
SIMULATION_LEADER(0, "仿真负责人"),
|
||||
SIMULATION_EXECUTOR(1, "仿真执行人"),
|
||||
THREE_D_LEADER(2, "3D负责人"),
|
||||
FOLLOWER(3, "关注人");
|
||||
|
||||
private final Integer code;
|
||||
private final String description;
|
||||
|
||||
public static DemandMemberTypeEnum fromCode(Integer code) {
|
||||
for (DemandMemberTypeEnum value : DemandMemberTypeEnum.values()) {
|
||||
if (value.getCode().equals(code)) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -1245,7 +1245,7 @@ public class MinioFileIDataFileServiceImpl implements IDataFileService {
|
||||
// 要挪到的task文件夹
|
||||
FileMetadataInfo targetParentMetadataInfo = fileMetadataInfoService.lambdaQuery().eq(FileMetadataInfo::getRelatedResourceUuid, req.getParentUuid()).one();
|
||||
// 新的路径名
|
||||
String newDirMinioObjectKey = getDirMinioObjectKey(targetParentMetadataInfo.getObjectKey() + sourceMetadataInfo.getOriginalName());
|
||||
String newDirMinioObjectKey = getFileMinioObjectKey(targetParentMetadataInfo.getObjectKey() + sourceMetadataInfo.getOriginalName());
|
||||
|
||||
try {
|
||||
minioService.copyFile(oldDirMinioObjectKey, newDirMinioObjectKey,sourceMetadataInfo.getBucketName());
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.sdm.project.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.sdm.project.model.entity.SimulationDemandExtra;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface SimulationDemandExtraMapper extends BaseMapper<SimulationDemandExtra> {
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.sdm.project.dao;
|
||||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.sdm.project.model.entity.SimulationDemandMember;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
@Mapper
|
||||
public interface SimulationDemandMemberMapper extends BaseMapper<SimulationDemandMember> {
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
package com.sdm.project.model.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Accessors(chain = true)
|
||||
@TableName("simulation_demand_extra")
|
||||
@ApiModel(value="SimulationDemandExtra对象", description="")
|
||||
public class SimulationDemandExtra implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Integer id;
|
||||
|
||||
@TableField("uuid")
|
||||
private String uuid;
|
||||
|
||||
@TableField("demand_id")
|
||||
private String demandId;
|
||||
|
||||
@TableField("nodeId")
|
||||
private String nodeId;
|
||||
|
||||
@TableField("property_name")
|
||||
private String propertyName;
|
||||
|
||||
@TableField("property_value")
|
||||
private String propertyValue;
|
||||
|
||||
@TableField("value_type")
|
||||
private String valueType;
|
||||
|
||||
@TableField("property_class")
|
||||
private String propertyClass;
|
||||
|
||||
@TableField("creator")
|
||||
private Long creator;
|
||||
|
||||
@TableField("create_time")
|
||||
private String createTime;
|
||||
|
||||
@TableField("updater")
|
||||
private Long updater;
|
||||
|
||||
@TableField("update_time")
|
||||
private String updateTime;
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.sdm.project.model.entity;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.IdType;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = false)
|
||||
@Accessors(chain = true)
|
||||
@TableName("simulation_demand_member")
|
||||
@ApiModel(value="SimulationDemandMember对象", description="")
|
||||
public class SimulationDemandMember implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@TableId(value = "id", type = IdType.AUTO)
|
||||
private Integer id;
|
||||
|
||||
@TableField("demand_id")
|
||||
private String demandId;
|
||||
|
||||
@TableField("type")
|
||||
private Integer type;
|
||||
|
||||
@TableField("identity")
|
||||
private String identity;
|
||||
|
||||
@TableField("name")
|
||||
private String name;
|
||||
|
||||
@TableField("user_id")
|
||||
private Long userId;
|
||||
|
||||
@TableField("creator")
|
||||
private Long creator;
|
||||
|
||||
@TableField("create_time")
|
||||
private String createTime;
|
||||
|
||||
@TableField("updater")
|
||||
private Long updater;
|
||||
|
||||
@TableField("update_time")
|
||||
private String updateTime;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.sdm.project.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.sdm.project.model.entity.SimulationDemandExtra;
|
||||
|
||||
public interface ISimulationDemandExtraService extends IService<SimulationDemandExtra> {
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package com.sdm.project.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.sdm.project.model.entity.SimulationDemandMember;
|
||||
|
||||
public interface ISimulationDemandMemberService extends IService<SimulationDemandMember> {
|
||||
}
|
||||
@@ -1,11 +1,14 @@
|
||||
package com.sdm.project.service;
|
||||
|
||||
import com.sdm.common.common.SdmResponse;
|
||||
import com.sdm.project.model.entity.SimulationDemand;
|
||||
import com.sdm.project.model.entity.SimulationTask;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.sdm.project.model.req.SpdmEditTaskForDataReq;
|
||||
import com.sdm.project.model.req.SpdmTaskOprReq;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 服务类
|
||||
@@ -20,4 +23,6 @@ public interface ISimulationTaskService extends IService<SimulationTask> {
|
||||
|
||||
SdmResponse editTaskForData(SpdmEditTaskForDataReq req);
|
||||
|
||||
void batchCreateTaskFromDemand(List<SimulationDemand> demandList);
|
||||
|
||||
}
|
||||
|
||||
@@ -40,7 +40,9 @@ import com.sdm.project.model.po.ProjectNodePo;
|
||||
import com.sdm.project.model.po.TaskNodePo;
|
||||
import com.sdm.project.model.req.*;
|
||||
import com.sdm.project.model.vo.*;
|
||||
import com.sdm.project.model.entity.SimulationDemand;
|
||||
import com.sdm.project.service.IDemandService;
|
||||
import com.sdm.project.service.ISimulationTaskService;
|
||||
import com.sdm.project.service.handle.IQueryDemandFileHandler;
|
||||
import com.sdm.project.service.handle.QueryDemandFileSelector;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
@@ -91,6 +93,9 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
|
||||
@Autowired
|
||||
private QueryDemandFileSelector queryDemandFileSelector;
|
||||
|
||||
@Autowired
|
||||
private ISimulationTaskService simulationTaskService;
|
||||
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
@@ -214,6 +219,12 @@ public class DemandServiceImpl extends BaseService implements IDemandService {
|
||||
log.info("创建需求时,更新用户权限的参数为:{}",updatePermissionReq);
|
||||
SdmResponse updatePermissionResponse = dataFeignClient.updatePermission(updatePermissionReq);
|
||||
log.info("创建需求时,更新用户权限的返回值为:{}",updatePermissionResponse);
|
||||
|
||||
// 同步创建任务
|
||||
SimulationDemand demand = new SimulationDemand();
|
||||
BeanUtils.copyProperties(req, demand);
|
||||
simulationTaskService.batchCreateTaskFromDemand(Collections.singletonList(demand));
|
||||
|
||||
return SdmResponse.success(req.getUuid());
|
||||
}
|
||||
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.sdm.project.dao.SimulationNodeMapper;
|
||||
import com.sdm.project.dao.SimulationProjectMapper;
|
||||
import com.sdm.project.model.bo.TaskNodeTag;
|
||||
import com.sdm.project.model.entity.SimulationNode;
|
||||
import com.sdm.project.model.entity.SimulationDemand;
|
||||
import com.sdm.project.model.po.ProjectNodePo;
|
||||
import com.sdm.project.model.req.*;
|
||||
import com.sdm.project.model.req.ep.EpProjectQueryReq;
|
||||
@@ -33,11 +34,13 @@ import com.sdm.project.model.req.ep.EpSyncPhaseReq;
|
||||
import com.sdm.project.model.vo.SpdmDemandVo;
|
||||
import com.sdm.project.service.ILyricInternalService;
|
||||
import com.sdm.project.service.INodeService;
|
||||
import com.sdm.project.service.ISimulationTaskService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.collections4.MapUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.cache.Cache;
|
||||
@@ -124,6 +127,9 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
|
||||
@Qualifier("projectTaskThreadPoolExecutor")
|
||||
private Executor projectTaskThreadPoolExecutor;
|
||||
|
||||
@Autowired
|
||||
private ISimulationTaskService simulationTaskService;
|
||||
|
||||
/**
|
||||
* 判断字符串是否可以安全转换为Long类型
|
||||
*
|
||||
@@ -282,6 +288,7 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
|
||||
// 构建批量创建文件夹参数 + 权限更新参数
|
||||
List<BatchCreateDirItem> createDirItemList = new ArrayList<>();
|
||||
List<UpdatePermissionReq> updatePermissionList = new ArrayList<>();
|
||||
List<SimulationDemand> demandToCreateTaskList = new ArrayList<>();
|
||||
|
||||
// 按项目分组处理待办
|
||||
Map<String, List<LyricVTodoEmulationInfoDM>> projectTodoMap = todoInfoList.stream()
|
||||
@@ -312,6 +319,10 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
|
||||
// 4. 异步保存需求数据
|
||||
asyncSaveDemandData(demandReq, memberList, tenantId, jobNumber);
|
||||
|
||||
SimulationDemand demand = new SimulationDemand();
|
||||
BeanUtils.copyProperties(demandReq, demand);
|
||||
demandToCreateTaskList.add(demand);
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("处理项目[{}]下待办[{}]异常: ", projectCode, todo.getTodoId(), e);
|
||||
}
|
||||
@@ -324,6 +335,11 @@ public class LyricInternalServiceImpl implements ILyricInternalService {
|
||||
|
||||
// 执行批量操作
|
||||
executeBatchOperations(createDirItemList, updatePermissionList);
|
||||
|
||||
if(CollectionUtils.isNotEmpty(demandToCreateTaskList)){
|
||||
simulationTaskService.batchCreateTaskFromDemand(demandToCreateTaskList);
|
||||
}
|
||||
|
||||
return SdmResponse.success();
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.sdm.project.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.sdm.project.dao.SimulationDemandExtraMapper;
|
||||
import com.sdm.project.model.entity.SimulationDemandExtra;
|
||||
import com.sdm.project.service.ISimulationDemandExtraService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class SimulationDemandExtraServiceImpl extends ServiceImpl<SimulationDemandExtraMapper, SimulationDemandExtra> implements ISimulationDemandExtraService {
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.sdm.project.service.impl;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.sdm.project.dao.SimulationDemandMemberMapper;
|
||||
import com.sdm.project.model.entity.SimulationDemandMember;
|
||||
import com.sdm.project.service.ISimulationDemandMemberService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class SimulationDemandMemberServiceImpl extends ServiceImpl<SimulationDemandMemberMapper, SimulationDemandMember> implements ISimulationDemandMemberService {
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.sdm.common.common.SdmResponse;
|
||||
import com.sdm.common.common.ThreadLocalContext;
|
||||
import com.sdm.common.entity.enums.NodeTypeEnum;
|
||||
import com.sdm.common.utils.RandomUtil;
|
||||
import com.sdm.project.common.MemberTypeEnum;
|
||||
import com.sdm.project.model.bo.TaskExtraNode;
|
||||
@@ -18,6 +19,16 @@ import com.sdm.project.model.req.SpdmEditTaskForDataReq;
|
||||
import com.sdm.project.model.req.SpdmTaskOprReq;
|
||||
import com.sdm.project.service.ISimulationTaskMemberService;
|
||||
import com.sdm.project.service.ISimulationTaskService;
|
||||
import com.sdm.project.service.ISimulationDemandExtraService;
|
||||
import com.sdm.project.service.ISimulationDemandMemberService;
|
||||
import com.sdm.project.service.ISimulationTaskExtraService;
|
||||
import com.sdm.common.service.TagMapService;
|
||||
import com.sdm.project.model.entity.SimulationDemand;
|
||||
import com.sdm.project.model.entity.SimulationDemandExtra;
|
||||
import com.sdm.project.model.entity.SimulationDemandMember;
|
||||
import com.sdm.project.model.entity.SimulationTaskExtra;
|
||||
import com.sdm.common.enums.DemandMemberTypeEnum;
|
||||
import java.util.stream.Collectors;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
@@ -44,6 +55,18 @@ public class SimulationTaskServiceImpl extends ServiceImpl<SimulationTaskMapper,
|
||||
@Autowired
|
||||
private ISimulationTaskMemberService simulationTaskMemberService;
|
||||
|
||||
@Autowired
|
||||
private ISimulationDemandExtraService simulationDemandExtraService;
|
||||
|
||||
@Autowired
|
||||
private ISimulationDemandMemberService simulationDemandMemberService;
|
||||
|
||||
@Autowired
|
||||
private ISimulationTaskExtraService simulationTaskExtraService;
|
||||
|
||||
@Autowired
|
||||
private TagMapService tagMapService;
|
||||
|
||||
@Override
|
||||
public boolean updateSimulationTask(SpdmTaskOprReq req) {
|
||||
LambdaUpdateWrapper<SimulationTask> wrapper = new LambdaUpdateWrapper<>();
|
||||
@@ -106,4 +129,123 @@ public class SimulationTaskServiceImpl extends ServiceImpl<SimulationTaskMapper,
|
||||
return SdmResponse.success();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void batchCreateTaskFromDemand(List<SimulationDemand> demandList) {
|
||||
if (CollectionUtils.isEmpty(demandList)) {
|
||||
return;
|
||||
}
|
||||
|
||||
List<SimulationTask> tasksToCreate = new ArrayList<>();
|
||||
List<SimulationTaskExtra> taskExtrasToCreate = new ArrayList<>();
|
||||
List<SimulationTaskMember> taskMembersToCreate = new ArrayList<>();
|
||||
|
||||
Map<String, String> tagMap = tagMapService.getTagMapName();
|
||||
|
||||
for (SimulationDemand demand : demandList) {
|
||||
SimulationTask task = convertDemandToTask(demand, tagMap);
|
||||
tasksToCreate.add(task);
|
||||
|
||||
taskExtrasToCreate.addAll(createTaskExtras(demand, task.getUuid()));
|
||||
taskMembersToCreate.addAll(createTaskMembers(demand, task.getUuid()));
|
||||
}
|
||||
|
||||
this.saveBatch(tasksToCreate);
|
||||
simulationTaskExtraService.saveBatch(taskExtrasToCreate);
|
||||
simulationTaskMemberService.saveBatch(taskMembersToCreate);
|
||||
}
|
||||
|
||||
private SimulationTask convertDemandToTask(SimulationDemand demand, Map<String, String> tagMap) {
|
||||
SimulationTask task = new SimulationTask();
|
||||
task.setUuid(RandomUtil.generateString(32));
|
||||
task.setDemandId(demand.getUuid());
|
||||
task.setTaskName(demand.getDemandName());
|
||||
task.setDescription(demand.getDescription());
|
||||
task.setBeginTime(demand.getBeginTime());
|
||||
task.setEndTime(demand.getEndTime());
|
||||
task.setCreator(ThreadLocalContext.getUserId());
|
||||
task.setCreateTime(DateUtil.now());
|
||||
|
||||
// 需求名称 -> tag10, 需求创建标识 -> tag9
|
||||
task.setTag10(demand.getDemandName());
|
||||
task.setTag9("FROM_DEMAND");
|
||||
|
||||
// 动态设置 tag
|
||||
setTaskTags(task, demand, tagMap);
|
||||
|
||||
return task;
|
||||
}
|
||||
|
||||
private void setTaskTags(SimulationTask task, SimulationDemand demand, Map<String, String> tagMap) {
|
||||
if (tagMap.containsKey(NodeTypeEnum.PROJECT.getValue())) {
|
||||
setTagField(task, tagMap.get(NodeTypeEnum.PROJECT.getValue()), demand.getProjectId());
|
||||
}
|
||||
if (tagMap.containsKey(NodeTypeEnum.PHASE.getValue())) {
|
||||
setTagField(task, tagMap.get(NodeTypeEnum.PHASE.getValue()), demand.getPhaseId());
|
||||
}
|
||||
if (tagMap.containsKey(NodeTypeEnum.MACHINE.getValue())) {
|
||||
setTagField(task, tagMap.get(NodeTypeEnum.MACHINE.getValue()), demand.getMachineId());
|
||||
}
|
||||
if (tagMap.containsKey(NodeTypeEnum.WORKSPACE.getValue())) {
|
||||
setTagField(task, tagMap.get(NodeTypeEnum.WORKSPACE.getValue()), demand.getWorkspaceId());
|
||||
}
|
||||
}
|
||||
|
||||
private void setTagField(SimulationTask task, String tagName, String value) {
|
||||
try {
|
||||
task.getClass().getMethod("set" + StringUtils.capitalize(tagName), String.class).invoke(task, value);
|
||||
} catch (Exception e) {
|
||||
log.error("Failed to set tag field: {}", e);
|
||||
}
|
||||
}
|
||||
|
||||
private List<SimulationTaskExtra> createTaskExtras(SimulationDemand demand, String taskUuid) {
|
||||
LambdaQueryWrapper<SimulationDemandExtra> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(SimulationDemandExtra::getDemandId, demand.getUuid());
|
||||
queryWrapper.in(SimulationDemandExtra::getPropertyName, "isMoldMaking", "materialNo");
|
||||
|
||||
List<SimulationDemandExtra> demandExtras = simulationDemandExtraService.list(queryWrapper);
|
||||
|
||||
if (CollectionUtils.isEmpty(demandExtras)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
return demandExtras.stream().map(demandExtra -> {
|
||||
SimulationTaskExtra taskExtra = new SimulationTaskExtra();
|
||||
taskExtra.setTaskId(taskUuid);
|
||||
taskExtra.setPropertyName(demandExtra.getPropertyName());
|
||||
taskExtra.setPropertyValue(demandExtra.getPropertyValue());
|
||||
taskExtra.setCreator(ThreadLocalContext.getUserId());
|
||||
taskExtra.setCreateTime(DateUtil.now());
|
||||
return taskExtra;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private List<SimulationTaskMember> createTaskMembers(SimulationDemand demand, String taskUuid) {
|
||||
LambdaQueryWrapper<SimulationDemandMember> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(SimulationDemandMember::getDemandId, demand.getUuid());
|
||||
queryWrapper.in(SimulationDemandMember::getType, DemandMemberTypeEnum.SIMULATION_LEADER.getCode(), DemandMemberTypeEnum.FOLLOWER.getCode());
|
||||
|
||||
List<SimulationDemandMember> demandMembers = simulationDemandMemberService.list(queryWrapper);
|
||||
|
||||
if (CollectionUtils.isEmpty(demandMembers)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
return demandMembers.stream().map(demandMember -> {
|
||||
SimulationTaskMember taskMember = new SimulationTaskMember();
|
||||
taskMember.setTaskId(taskUuid);
|
||||
taskMember.setUserId(demandMember.getUserId());
|
||||
taskMember.setType(demandMember.getType());
|
||||
taskMember.setCreator(ThreadLocalContext.getUserId());
|
||||
taskMember.setCreateTime(DateUtil.now());
|
||||
return taskMember;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user