@@ -8,15 +8,15 @@ import com.sdm.common.common.SdmResponse;
import com.sdm.common.common.ThreadLocalContext ;
import com.sdm.common.entity.ExportExcelFormat ;
import com.sdm.common.entity.constants.ProjectConstants ;
import com.sdm.common.entity.enums.DirTypeEnum ;
import com.sdm.common.entity.enums.FilePermissionEnum ;
import com.sdm.common.entity.enums.MessageTemplateEnum ;
import com.sdm.common.entity.enums.NodeTypeEnum ;
import com.sdm.common.entity.enums.* ;
import com.sdm.common.entity.req.data.CreateDirReq ;
import com.sdm.common.entity.req.data.DelDirReq ;
import com.sdm.common.entity.req.data.QueryFileReq ;
import com.sdm.common.entity.req.data.UpdatePermissionReq ;
import com.sdm.common.entity.req.export.* ;
import com.sdm.common.entity.req.export.PerformanceAnalysisExportExcelFormat ;
import com.sdm.common.entity.req.export.RunAnalysisExportExcelFormat ;
import com.sdm.common.entity.req.export.TaskAnalysisExportExcelFormat ;
import com.sdm.common.entity.req.export.TaskAnalysisExportExcelParam ;
import com.sdm.common.entity.req.project.GetAllTasksByDisciplineReq ;
import com.sdm.common.entity.req.project.GetTaskDetailReq ;
import com.sdm.common.entity.req.project.SimulationPerformance ;
@@ -43,7 +43,6 @@ import com.sdm.common.utils.SystemOperate;
import com.sdm.common.utils.excel.ExcelUtil ;
import com.sdm.project.bo.ExportOperate ;
import com.sdm.project.common.MemberTypeEnum ;
import com.sdm.common.entity.enums.PerformanceStatusEnum ;
import com.sdm.project.common.TaskExeStatusEnum ;
import com.sdm.project.dao.SimulationDemandMapper ;
import com.sdm.project.dao.SimulationNodeMapper ;
@@ -51,7 +50,10 @@ import com.sdm.project.dao.SimulationProjectMapper;
import com.sdm.project.dao.SimulationTaskMapper ;
import com.sdm.project.model.bo.* ;
import com.sdm.project.model.entity.* ;
import com.sdm.project.model.po.* ;
import com.sdm.project.model.po.PerformanceNodePo ;
import com.sdm.project.model.po.ProjectNodePo ;
import com.sdm.project.model.po.TaskNodeMemberPo ;
import com.sdm.project.model.po.TaskRunPo ;
import com.sdm.project.model.req.* ;
import com.sdm.project.model.req.YA.ProjectTaskInfo ;
import com.sdm.project.model.req.YA.SyncCidTaskReq ;
@@ -59,6 +61,7 @@ import com.sdm.project.model.resp.*;
import com.sdm.project.model.resp.YA.BosimSaveProjectTaskRsp ;
import com.sdm.project.model.vo.* ;
import com.sdm.project.service.* ;
import com.sdm.project.util.TaskNodeTagUtils ;
import jakarta.servlet.http.HttpServletResponse ;
import lombok.extern.slf4j.Slf4j ;
import org.apache.commons.collections4.CollectionUtils ;
@@ -584,6 +587,13 @@ public class TaskServiceImpl implements ITaskService {
}
List < SpdmTaskMemberVo > eachTaskMemberList ;
String newTag ;
// 处理工位号,所有的tag标签
List < TaskNodeTag > nodeTypes = req . getNodeTypeMap ( ) ;
log . info ( " 查询任务列表 nodeTypeMap:{} " , JSONObject . toJSONString ( nodeTypes ) ) ;
// 工位对应的对象, value就是哪一个标签
TaskNodeTag taskNodeTag = TaskNodeTagUtils . getTaskNodeTagByKey ( nodeTypes , " workspace " ) ;
List < String > allWorkSpaceUuid = new ArrayList < > ( ) ;
for ( SpdmTaskVo task : taskList ) {
for ( String tag : tagList ) {
newTag = " new " + tag . replace ( " t " , " T " ) ;
@@ -624,8 +634,28 @@ public class TaskServiceImpl implements ITaskService {
// 设置仿真负责人和执行人
setPMemberList ( task , copyTaskMemberList ) ;
setEMemberList ( task , copyTaskMemberList ) ;
// 汇总工位信息
if ( taskNodeTag ! = null & & StringUtils . isNotBlank ( taskNodeTag . getValue ( ) ) ) {
String workSpaceUuid = " " ;
try {
workSpaceUuid = getTagProperty ( task , taskNodeTag . getValue ( ) ) ;
} catch ( Exception e ) {
log . warn ( " get workspace uuid error:{} " , e . getMessage ( ) ) ;
}
if ( StringUtils . isNotBlank ( workSpaceUuid ) ) {
allWorkSpaceUuid . add ( workSpaceUuid ) ;
}
}
}
List < SpdmNewTaskVo > newTaskList = new ArrayList < > ( ) ;
// 查询工位信息,然后封装返回
Map < String , SimulationNode > allNodeMap = new HashMap < > ( ) ;
if ( CollectionUtils . isNotEmpty ( allWorkSpaceUuid ) ) {
List < SimulationNode > listSimulationNodes = nodeService . lambdaQuery ( ) . in ( SimulationNode : : getUuid , allWorkSpaceUuid ) . list ( ) ;
allNodeMap = convertToUuidMapByStream ( listSimulationNodes ) ;
}
for ( SpdmTaskVo taskVo : taskList ) {
SpdmNewTaskVo spdmNewTaskVo = new SpdmNewTaskVo ( ) ;
BeanUtils . copyProperties ( taskVo , spdmNewTaskVo ) ;
@@ -645,12 +675,57 @@ public class TaskServiceImpl implements ITaskService {
if ( StringUtils . isNotBlank ( spdmNewTaskVo . getDemandId ( ) ) ) {
spdmNewTaskVo . setDemandName ( demandMap . get ( spdmNewTaskVo . getDemandId ( ) ) ) ;
}
// 设置工位号
setWorkSpaceNodeCode ( spdmNewTaskVo , taskVo , allNodeMap , taskNodeTag ) ;
newTaskList . add ( spdmNewTaskVo ) ;
}
jsonObject . put ( " data " , newTaskList ) ;
return SdmResponse . success ( jsonObject ) ;
}
// 设置工位号
private void setWorkSpaceNodeCode ( SpdmNewTaskVo spdmNewTaskVo , SpdmTaskVo taskVo ,
Map < String , SimulationNode > allNodeMap , TaskNodeTag taskNodeTag ) {
// 校验Map非空
if ( MapUtils . isNotEmpty ( allNodeMap ) ) {
// 当前工位的uuid
String workSpaceUuid = " " ;
try {
// 获取工位UUID( 假设getTagProperty是当前类的方法或已导入的工具方法)
workSpaceUuid = getTagProperty ( taskVo , taskNodeTag . getValue ( ) ) ;
} catch ( Exception e ) {
log . warn ( " get taskVo uuid error:{} " , e . getMessage ( ) ) ;
}
// 设置工位号(节点编码)
if ( StringUtils . isNotBlank ( workSpaceUuid ) ) {
SimulationNode simulationNode = allNodeMap . get ( workSpaceUuid ) ;
// 新增空指针防护: 避免simulationNode为null时调用getNodeCode()
if ( simulationNode ! = null ) {
spdmNewTaskVo . setNodeCode ( simulationNode . getNodeCode ( ) ) ;
} else {
log . warn ( " simulationNode is null for workSpaceUuid:{} " , workSpaceUuid ) ;
}
}
}
}
//工位数据转换成Map<uuid,SimulationNode>
private Map < String , SimulationNode > convertToUuidMapByStream ( List < SimulationNode > simulationNodes ) {
if ( simulationNodes = = null | | simulationNodes . isEmpty ( ) ) {
return Collections . emptyMap ( ) ;
}
return simulationNodes . stream ( )
// 过滤掉null对象和uuid为空的对象
. filter ( node - > node ! = null & & node . getUuid ( ) ! = null )
// toMap(取key, 取value, 重复key时的合并规则)
. collect ( Collectors . toMap (
SimulationNode : : getUuid ,
node - > node ,
( oldValue , newValue ) - > newValue
) ) ;
}
private void setPMemberList ( SpdmTaskVo task , List < SpdmTaskMemberVo > eachMemberList ) {
// 由于我分发的、我执行的、我关注的、所有任务,都需要展示仿真负责人,故将负责人抽成方法调用
List < Long > pUserIdList = eachMemberList . stream ( ) . filter ( member - > MemberTypeEnum . PRINCIPAL . getCode ( ) . equals ( member . getType ( ) ) & & StringUtils . equals ( task . getUuid ( ) , member . getTaskId ( ) ) ) . map ( SpdmTaskMemberVo : : getUserId ) . distinct ( ) . toList ( ) ;