diff --git a/common/src/main/java/com/sdm/common/enums/DemandMemberTypeEnum.java b/common/src/main/java/com/sdm/common/enums/DemandMemberTypeEnum.java new file mode 100644 index 00000000..bc19b491 --- /dev/null +++ b/common/src/main/java/com/sdm/common/enums/DemandMemberTypeEnum.java @@ -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; + } +} diff --git a/project/src/main/java/com/sdm/project/dao/SimulationDemandExtraMapper.java b/project/src/main/java/com/sdm/project/dao/SimulationDemandExtraMapper.java new file mode 100644 index 00000000..cdd942c0 --- /dev/null +++ b/project/src/main/java/com/sdm/project/dao/SimulationDemandExtraMapper.java @@ -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 { +} diff --git a/project/src/main/java/com/sdm/project/dao/SimulationDemandMemberMapper.java b/project/src/main/java/com/sdm/project/dao/SimulationDemandMemberMapper.java new file mode 100644 index 00000000..058ea15d --- /dev/null +++ b/project/src/main/java/com/sdm/project/dao/SimulationDemandMemberMapper.java @@ -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 { +} diff --git a/project/src/main/java/com/sdm/project/model/entity/SimulationDemandExtra.java b/project/src/main/java/com/sdm/project/model/entity/SimulationDemandExtra.java new file mode 100644 index 00000000..717b02f1 --- /dev/null +++ b/project/src/main/java/com/sdm/project/model/entity/SimulationDemandExtra.java @@ -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; +} diff --git a/project/src/main/java/com/sdm/project/model/entity/SimulationDemandMember.java b/project/src/main/java/com/sdm/project/model/entity/SimulationDemandMember.java new file mode 100644 index 00000000..d5cf08f0 --- /dev/null +++ b/project/src/main/java/com/sdm/project/model/entity/SimulationDemandMember.java @@ -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; +} diff --git a/project/src/main/java/com/sdm/project/service/ISimulationDemandExtraService.java b/project/src/main/java/com/sdm/project/service/ISimulationDemandExtraService.java new file mode 100644 index 00000000..12b65ced --- /dev/null +++ b/project/src/main/java/com/sdm/project/service/ISimulationDemandExtraService.java @@ -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 { +} diff --git a/project/src/main/java/com/sdm/project/service/ISimulationDemandMemberService.java b/project/src/main/java/com/sdm/project/service/ISimulationDemandMemberService.java new file mode 100644 index 00000000..29b11314 --- /dev/null +++ b/project/src/main/java/com/sdm/project/service/ISimulationDemandMemberService.java @@ -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 { +} diff --git a/project/src/main/java/com/sdm/project/service/ISimulationTaskService.java b/project/src/main/java/com/sdm/project/service/ISimulationTaskService.java index 49b1a970..37191c85 100644 --- a/project/src/main/java/com/sdm/project/service/ISimulationTaskService.java +++ b/project/src/main/java/com/sdm/project/service/ISimulationTaskService.java @@ -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; + /** *

* 服务类 @@ -20,4 +23,6 @@ public interface ISimulationTaskService extends IService { SdmResponse editTaskForData(SpdmEditTaskForDataReq req); + void batchCreateTaskFromDemand(List demandList); + } 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 03f1e118..506e7676 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 @@ -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()); } diff --git a/project/src/main/java/com/sdm/project/service/impl/LyricInternalServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/LyricInternalServiceImpl.java index 469eba58..bad41ba3 100644 --- a/project/src/main/java/com/sdm/project/service/impl/LyricInternalServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/LyricInternalServiceImpl.java @@ -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 createDirItemList = new ArrayList<>(); List updatePermissionList = new ArrayList<>(); + List demandToCreateTaskList = new ArrayList<>(); // 按项目分组处理待办 Map> 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(); } diff --git a/project/src/main/java/com/sdm/project/service/impl/SimulationDemandExtraServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/SimulationDemandExtraServiceImpl.java new file mode 100644 index 00000000..32c23ea5 --- /dev/null +++ b/project/src/main/java/com/sdm/project/service/impl/SimulationDemandExtraServiceImpl.java @@ -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 implements ISimulationDemandExtraService { +} diff --git a/project/src/main/java/com/sdm/project/service/impl/SimulationDemandMemberServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/SimulationDemandMemberServiceImpl.java new file mode 100644 index 00000000..675b08ae --- /dev/null +++ b/project/src/main/java/com/sdm/project/service/impl/SimulationDemandMemberServiceImpl.java @@ -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 implements ISimulationDemandMemberService { +} diff --git a/project/src/main/java/com/sdm/project/service/impl/SimulationTaskServiceImpl.java b/project/src/main/java/com/sdm/project/service/impl/SimulationTaskServiceImpl.java index 5dada045..efdd571c 100644 --- a/project/src/main/java/com/sdm/project/service/impl/SimulationTaskServiceImpl.java +++ b/project/src/main/java/com/sdm/project/service/impl/SimulationTaskServiceImpl.java @@ -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 wrapper = new LambdaUpdateWrapper<>(); @@ -106,4 +129,123 @@ public class SimulationTaskServiceImpl extends ServiceImpl demandList) { + if (CollectionUtils.isEmpty(demandList)) { + return; + } + + List tasksToCreate = new ArrayList<>(); + List taskExtrasToCreate = new ArrayList<>(); + List taskMembersToCreate = new ArrayList<>(); + + Map 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 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 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 createTaskExtras(SimulationDemand demand, String taskUuid) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SimulationDemandExtra::getDemandId, demand.getUuid()); + queryWrapper.in(SimulationDemandExtra::getPropertyName, "isMoldMaking", "materialNo"); + + List 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 createTaskMembers(SimulationDemand demand, String taskUuid) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SimulationDemandMember::getDemandId, demand.getUuid()); + queryWrapper.in(SimulationDemandMember::getType, DemandMemberTypeEnum.SIMULATION_LEADER.getCode(), DemandMemberTypeEnum.FOLLOWER.getCode()); + + List 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()); + } + + + + + + + }