@@ -595,67 +595,144 @@ public class TaskServiceImpl implements ITaskService {
return taskList . subList ( start , end ) ;
}
/**
* 根据用户ID列表获取用户信息列表(
* @param userIdList 用户ID列表( 可为空)
* @param cidUserMap 用户ID->用户信息的映射
* @return 匹配到的用户信息列表
*/
private List < CIDUserResp > getCidUserListByUserId ( List < Long > userIdList , Map < Long , CIDUserResp > cidUserMap ) {
if ( CollectionUtils . isEmpty ( userIdList ) ) {
return new ArrayList < > ( ) ;
}
return userIdList . stream ( )
. map ( cidUserMap : : get )
. filter ( Objects : : nonNull ) // 过滤掉未匹配到的用户
. collect ( Collectors . toList ( ) ) ;
}
/**
* 设置任务成员信息(负责人/执行人/关注人)
* @param newTaskVo 目标VO
* @param taskMemberList 该任务的成员列表
* @param cidUserMap 用户ID->用户信息的映射
*/
private void setTaskMemberInfo ( SpdmNewTaskVo newTaskVo ,
List < SpdmTaskMemberVo > taskMemberList ,
Map < Long , CIDUserResp > cidUserMap ) {
// 成员列表为空或用户映射为空,直接返回
if ( CollectionUtils . isEmpty ( taskMemberList ) | | cidUserMap . isEmpty ( ) ) {
return ;
}
// 按成员类型分组,减少多次流式过滤(一次分组,多次使用)
Map < Integer , List < Long > > memberType2UserIdMap = taskMemberList . stream ( )
. collect ( Collectors . groupingBy (
SpdmTaskMemberVo : : getType ,
Collectors . mapping ( SpdmTaskMemberVo : : getUserId , Collectors . toList ( ) )
) ) ;
// 设置负责人
newTaskVo . setPMemberList ( getCidUserListByUserId ( memberType2UserIdMap . get ( MemberTypeEnum . PRINCIPAL . getCode ( ) ) , cidUserMap ) ) ;
// 设置执行人
newTaskVo . setEMemberList ( getCidUserListByUserId ( memberType2UserIdMap . get ( MemberTypeEnum . EXECUTOR . getCode ( ) ) , cidUserMap ) ) ;
// 设置关注人
newTaskVo . setPayAttentionMemberList ( getCidUserListByUserId ( memberType2UserIdMap . get ( MemberTypeEnum . ATTENTION . getCode ( ) ) , cidUserMap ) ) ;
}
/**
* 设置需求相关信息(需求名称/提出人/提出人名称)
* @param newTaskVo 目标VO
* @param demandId 需求ID
* @param demandMap 需求ID->需求VO的映射
* @param demandSubmitMap 需求ID->提出人用户ID的映射
*/
private void setDemandRelatedInfo ( SpdmNewTaskVo newTaskVo ,
String demandId ,
Map < String , SpdmDemandVo > demandMap ,
Map < String , Long > demandSubmitMap ) {
if ( StringUtils . isBlank ( demandId ) ) {
return ;
}
// 设置需求名称(没有就返回空字符串)
SpdmDemandVo demandVo = demandMap . getOrDefault ( demandId , new SpdmDemandVo ( ) ) ;
newTaskVo . setDemandName ( Optional . ofNullable ( demandVo . getDemandName ( ) ) . orElse ( " " ) ) ;
// 设置提出人ID
Long submitterId = demandSubmitMap . get ( demandId ) ;
newTaskVo . setSubmitter ( submitterId ) ;
// 设置提出人名称( 提出人ID不为空时查询)
if ( submitterId ! = null ) {
SdmResponse < CIDUserResp > userResp = sysUserFeignClient . queryUserDetail (
UserQueryReq . builder ( ) . userId ( submitterId ) . build ( )
) ;
if ( ObjectUtils . isNotEmpty ( userResp ) & & ObjectUtils . isNotEmpty ( userResp . getData ( ) ) ) {
newTaskVo . setSubmitterName ( userResp . getData ( ) . getNickname ( ) ) ;
}
}
}
/**
* 批量转换为返回VO
*/
private List < SpdmNewTaskVo > convertToNewVoBatch ( List < SpdmTaskVo > taskList , BatchAssociatedData batchData ) {
// 空值安全处理,直接返回空集合
if ( CollectionUtils . isEmpty ( taskList ) ) {
return new ArrayList < > ( ) ;
}
List < SpdmNewTaskVo > newTaskList = new ArrayList < > ( ) ;
// 从批量数据中获取各映射关系
Map < String , List < TaskNodeExtraPo > > taskExtraMap = batchData . getTaskExtraMap ( ) ;
Map < String , SpdmDemandVo > demandMap = batchData . getDemandMap ( ) ;
Map < String , Long > demandSubmitMap = batchData . getDemandSubmitMap ( ) ;
Map < String , SimulationNode > workSpaceNodeMap = batchData . getWorkSpaceNodeMap ( ) ;
TaskNodeTag taskNodeTag = batchData . getTaskNodeTag ( ) ;
List < SpdmNewTaskVo > newTaskList = new ArrayList < > ( taskList . size ( ) ) ;
// 1. 处理任务成员&用户信息
Map < String , List < SpdmTaskMemberVo > > taskMemberMap = Collections . emptyMap ( ) ;
Map < Long , CIDUserResp > cidUserMap = Collections . emptyMap ( ) ;
List < SpdmTaskMemberVo > allTaskMemberVoList = batchData . getTaskMemberVoList ( ) ;
if ( CollectionUtils . isNotEmpty ( allTaskMemberVoList ) ) {
// 过滤当前批次任务的成员
Set < String > taskIdSet = taskList . stream ( ) . map ( SpdmTaskVo : : getUuid ) . collect ( Collectors . toSet ( ) ) ;
List < SpdmTaskMemberVo > currentTaskMemberList = allTaskMemberVoList . stream ( )
. filter ( member - > taskIdSet . contains ( member . getTaskId ( ) ) )
. collect ( Collectors . toList ( ) ) ;
if ( CollectionUtils . isNotEmpty ( currentTaskMemberList ) ) {
// 任务ID -> 成员列表的映射
taskMemberMap = currentTaskMemberList . stream ( )
. collect ( Collectors . groupingBy ( SpdmTaskMemberVo : : getTaskId ) ) ;
// 获取去重的用户ID, 查询用户并转为Map( userId -> CIDUserResp)
Set < Long > userIdSet = currentTaskMemberList . stream ( )
. map ( SpdmTaskMemberVo : : getUserId )
. collect ( Collectors . toSet ( ) ) ;
cidUserMap = getCidUserList ( new ArrayList < > ( userIdSet ) ) . stream ( )
. collect ( Collectors . toMap ( CIDUserResp : : getUserId , user - > user , ( k1 , k2 ) - > k1 ) ) ; // 处理重复用户ID, 保留第一个
}
}
// 2. 批量转换每个任务VO
for ( SpdmTaskVo taskVo : taskList ) {
SpdmNewTaskVo spdmN ewTaskVo = new SpdmNewTaskVo ( ) ;
SpdmNewTaskVo n ewTaskVo = new SpdmNewTaskVo ( ) ;
try {
BeanUtils . copyProperties ( taskVo , spdmN ewTaskVo) ;
BeanUtils . copyProperties ( taskVo , n ewTaskVo) ;
String taskId = taskVo . getUuid ( ) ;
// 设置标签字段
spdmN ewTaskVo. setTag1 ( taskVo . getTag1 ( ) ) ;
spdmNewTaskVo . setTag2 ( taskVo . getTag2 ( ) ) ;
spdmNewTaskVo . setTag3 ( taskVo . getTag3 ( ) ) ;
spdmNewTaskVo . setTag4 ( taskVo . getTag4 ( ) ) ;
spdmNewTaskVo . setTag5 ( taskVo . getTag5 ( ) ) ;
spdmNewTaskVo . setTag6 ( taskVo . getTag6 ( ) ) ;
spdmNewTaskVo . setTag7 ( taskVo . getTag7 ( ) ) ;
spdmNewTaskVo . setTag8 ( taskVo . getTag8 ( ) ) ;
spdmNewTaskVo . setTag9 ( taskVo . getTag9 ( ) ) ;
spdmNewTaskVo . setTag10 ( taskVo . getTag10 ( ) ) ;
// 3. 设置任务扩展信息(没有就返回空集合)
n ewTaskVo. setExtras ( taskExtraMap . getOrDefault ( taskId , new ArrayList < > ( ) ) ) ;
// 设置成员列表
spdmNewTaskVo . setP MemberList ( t askVo. getPMemberList ( ) ) ;
spdmNewTaskVo . setEMemberList ( taskVo . getEMemberList ( ) ) ;
// 4. 设置任务成员信息(负责人/执行人/关注人)
setTask MemberInfo ( newT askVo, taskMemberMap . get ( taskId ) , cidUserMap ) ;
// 设置扩展信息
spdmNewTaskVo . setExtras ( taskExtraMap . getOrDefault ( taskVo . getUui d ( ) , new ArrayList < > ( ) ) ) ;
// 5. 设置需求相关信息(提出人/提出人名称)
setDemandRelatedInfo ( newTaskVo , taskVo . getDemandI d ( ) , demandMap , demandSubmitMap ) ;
// 设置需求 信息
if ( StringUtils . isNotBlank ( taskVo . getDemandId ( ) ) ) {
spdmNewTaskVo . setDemandName ( demandMap . getOrDefault ( taskVo . getDemandId ( ) , new SpdmDemandVo ( ) ) . getDemandName ( ) ) ;
spdmNewTaskVo . setSubmitter ( demandSubmitMap . get ( taskVo . getDemandId ( ) ) ) ;
// 6. 设置工位号 信息
setWorkSpaceNodeCode ( newTaskVo , taskVo , workSpaceNodeMap , taskNodeTag ) ;
// 查询提出人名称
if ( spdmNewTaskVo . getSubmitter ( ) ! = null ) {
SdmResponse < CIDUserResp > cidUserResp = sysUserFeignClient . queryUserDetail (
UserQueryReq . builder ( ) . userId ( spdmNewTaskVo . getSubmitter ( ) ) . build ( )
) ;
if ( ObjectUtils . isNotEmpty ( cidUserResp . getData ( ) ) ) {
spdmNewTaskVo . setSubmitterName ( cidUserResp . getData ( ) . getNickname ( ) ) ;
}
}
}
// 设置工位号
setWorkSpaceNodeCode ( spdmNewTaskVo , taskVo , workSpaceNodeMap , taskNodeTag ) ;
newTaskList . add ( spdmNewTaskVo ) ;
newTaskList . add ( newTaskVo ) ;
} catch ( Exception e ) {
log . error ( " VO转换异常, taskId:{} " , taskVo . getUuid ( ) , e ) ;
// 单个任务转换失败不影响整体查询
log . error ( " 任务VO转换异常, taskId:{} " , taskVo . getUuid ( ) , e ) ;
}
}
@@ -862,6 +939,13 @@ public class TaskServiceImpl implements ITaskService {
) ) ;
}
List < CIDUserResp > getCidUserList ( List < Long > userIdList ) {
if ( CollectionUtils . isEmpty ( userIdList ) ) return new ArrayList < > ( ) ;
SdmResponse < List < CIDUserResp > > cidUserResp = sysUserFeignClient . listUserByIds ( UserQueryReq . builder ( ) . userIds ( userIdList ) . build ( ) ) ;
if ( ! cidUserResp . isSuccess ( ) | | CollectionUtils . isEmpty ( cidUserResp . getData ( ) ) ) return new ArrayList < > ( ) ;
return cidUserResp . getData ( ) ;
}
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 ( ) ;
@@ -1614,8 +1698,12 @@ public class TaskServiceImpl implements ITaskService {
attentionList . add ( spdmTaskAttentionReq ) ;
}
mapper . saveAttentionList ( attentionList ) ;
// task_member也新增下, 兼容新逻辑
simulationTaskMemberService . saveTaskMemberList ( taskId , MemberTypeEnum . ATTENTION . getCode ( ) , addUserIdList ) ;
} else {
mapper . deleteAttentionByUserIdList ( taskId , cancelUserIdList ) ;
// task_member也删除下, 兼容新逻辑
simulationTaskMemberService . deleteTaskMemberListByIdList ( taskId , MemberTypeEnum . ATTENTION . getCode ( ) , addUserIdList ) ;
}
return SdmResponse . success ( ) ;
}