This commit is contained in:
2026-01-27 20:21:15 +08:00
14 changed files with 365 additions and 1 deletions

View File

@@ -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;
}
}

View File

@@ -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());

View File

@@ -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> {
}

View File

@@ -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> {
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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> {
}

View File

@@ -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> {
}

View File

@@ -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);
}

View File

@@ -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());
}

View File

@@ -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();
}

View File

@@ -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 {
}

View File

@@ -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 {
}

View File

@@ -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());
}
}