@@ -1033,77 +1033,156 @@ public class TaskServiceImpl implements ITaskService {
}
}
// @Override
// public SdmResponse<TaskCountResp> countByStatus(SpdmTaskCountReq req) {
// Long tenantId = ThreadLocalContext.getTenantId();
// Long userId = ThreadLocalContext.getUserId();
// if (Objects.isNull(tenantId) || Objects.isNull(userId)) {
// log.error("公司和工号都不能为空");
// return SdmResponse.failed("公司和工号都不能为空");
// }
// // 0: 我执行的 1: 我关注的 2: 所有 3: 我分发的
// Integer type = req.getType();
//
// SpdmTaskListReq qry = new SpdmTaskListReq();
// qry.setFilterDiscipline(req.getFilterDiscipline());
// List<SpdmTaskVo> allTaskList = mapper.getTaskList(tenantId, qry);
// // 今明任务
// qry.setTodayTmrTasks(ProjectConstants.TODAY_TMR_TASKS);
// List<SpdmTaskVo> todayTmrTaskList = mapper.getTaskList(tenantId, qry);
// if (CollectionUtils.isEmpty(allTaskList)) {
// log.error("根据tenantId: {},未查询到任务", tenantId);
// return SdmResponse.success();
// }
// List<SpdmTaskVo> taskList = new ArrayList<>();
// List<TaskNodeTag> idMapList = req.getIdMap();
// if (CollectionUtils.isEmpty(idMapList)) {
// log.error("任务列表中的idMap不能为空");
// return SdmResponse.failed("任务列表中的idMap不能为空");
// }
// if (idMapList.stream().anyMatch(idMap -> StringUtils.isNotBlank(idMap.getKey()))) {
// List<TaskNodeTag> realIdMapList = idMapList.stream().filter(idMap -> StringUtils.isNotBlank(idMap.getKey())).toList();
// TaskNodeTag realTaskNodeTag = realIdMapList.get(realIdMapList.size() - 1);
// log.info("实际查询节点类型为:{}", realTaskNodeTag);
// String currentNodeTagId = "";
// for (SpdmTaskVo spdmTaskVo : allTaskList) {
// try {
// currentNodeTagId = getTagProperty(spdmTaskVo, realTaskNodeTag.getValue());
// if (StringUtils.isNotBlank(currentNodeTagId) && currentNodeTagId.contains(realTaskNodeTag.getKey())) {
// taskList.add(spdmTaskVo);
// }
// } catch (Exception e) {
// throw new RuntimeException(e);
// }
// }
// } else {
// taskList = allTaskList;
// }
// if (CollectionUtils.isEmpty(taskList)) {
// log.info("未查询到任务");
// return SdmResponse.success();
// }
//
// TaskCountResp taskCountResp = new TaskCountResp();
// List<String> taskIdList = taskList.stream().map(SpdmTaskVo::getUuid).toList();
// List<SpdmTaskMemberVo> taskMemberVoList = mapper.getMemberList(taskIdList, null);
// List<SpdmTaskAttentionMemberVo> taskAttentionMemberVoList = mapper.getAttentionMemberList(taskIdList);
// if (type == 2) {
// // 过滤所有任务
// Set<SpdmTaskVo> returnTaskSet = getSpdmTaskVos(taskList, userId, taskMemberVoList);
// // 过滤今明任务
// Set<SpdmTaskVo> todayReturnTaskSet = getSpdmTaskVos(todayTmrTaskList, userId, taskMemberVoList);
// // 去重后的Set转List, 赋值回任务列表
// taskList = new ArrayList<>(returnTaskSet);
// todayTmrTaskList = new ArrayList<>(todayReturnTaskSet);
// // 所有任务
// countTask(taskList, todayTmrTaskList, taskCountResp);
// } else {
// taskList = filterTaskByType(taskList, req.getType(), userId, taskMemberVoList, taskAttentionMemberVoList);
// todayTmrTaskList = filterTaskByType(todayTmrTaskList, req.getType(), userId, taskMemberVoList, taskAttentionMemberVoList);
// countTask(taskList, todayTmrTaskList, taskCountResp);
// }
// return SdmResponse.success(taskCountResp);
// }
@Override
public SdmResponse < TaskCountResp > countByStatus ( SpdmTaskCoun tReq req ) {
public SdmResponse < TaskCountResp > countByStatus ( SpdmTaskLis tReq req ) {
Long tenantId = ThreadLocalContext . getTenantId ( ) ;
Long userId = ThreadLocalContext . getUserId ( ) ;
if ( Objects . isNull ( tenantId ) | | Objects . isNull ( userId ) ) {
log . error ( " 公司和工号都不能为空" ) ;
log . error ( " 公司和工号都不能为空, tenantId:{}, userId:{}" , tenantId , userId ) ;
return SdmResponse . failed ( " 公司和工号都不能为空 " ) ;
}
// 0: 我执行的 1: 我关注的 2: 所有 3: 我分发的
Integer type = req . getType ( ) ;
TaskCountResp taskCountResp = new TaskCountResp ( ) ;
// 1. 请求参数预处理
preProcessReq ( req ) ;
SpdmTaskListReq qry = new SpdmTaskListReq ( ) ;
List < SpdmTaskVo > allTaskList = mapper . g etTaskList ( tenantId , qry ) ;
// 今明任务
qry . setTodayTmrTasks ( ProjectConstants . TODAY_TMR_TASKS ) ;
List < SpdmTaskVo > todayTmrTaskList = mapper . ge tTaskList( tenantId , qry ) ;
// 2. 基础任务列表查询
req . s etUserId ( userId ) ;
List < SpdmTaskVo > allTaskList = mapper . optimisedGtTaskList ( tenantId , req ) ;
req . setTodayTmrTasks ( ProjectConstants . TODAY_TMR_TASKS ) ;
List < SpdmTaskVo > todayTmrTaskList = mapper . optimisedG tTaskList( tenantId , req ) ;
if ( CollectionUtils . isEmpty ( allTaskList ) ) {
log . error ( " 根据tenantId: {},未查询到任务 " , tenantId ) ;
return SdmResponse . success ( ) ;
log . info ( " 根据tenantId: {},未查询到任务 " , tenantId ) ;
return SdmResponse . success ( taskCountResp ) ;
}
List < SpdmTaskVo > taskList = new ArrayList < > ( ) ;
List < TaskNodeTag > idMapList = req . getIdMap ( ) ;
if ( CollectionUtils . isEmpty ( idMapList ) ) {
log . error ( " 任务列表中的idMap不能为空 " ) ;
return SdmResponse . failed ( " 任务列表中的idMap不能为空 " ) ;
// 3. 节点标签过滤
List < SpdmTaskVo > taskList = filterTaskByNodeTag ( allTaskList , req ) ;
todayTmrTaskList = filterTaskByNodeTag ( todayTmrTaskList , req ) ;
if ( CollectionUtils . isEmpty ( taskList ) ) {
log . info ( " 节点标签过滤后无任务数据 " ) ;
return SdmResponse . success ( taskCountResp ) ;
}
if ( idMapList . stream ( ) . anyMatch ( idMap - > StringUtils . isNotBlank ( idMap . getKey ( ) ) ) ) {
List < TaskNodeTag > realIdMapList = idMapList . stream ( ) . filter ( idMap - > StringUtils . isNotBlank ( idMap . getKey ( ) ) ) . toList ( ) ;
TaskNodeTag realTaskNodeTag = realIdMapList . get ( realIdMapList . size ( ) - 1 ) ;
log . info ( " 实际查询节点类型为:{} " , realTaskNodeTag ) ;
String currentNodeTagId = " " ;
for ( SpdmTaskVo spdmTaskVo : allTaskList ) {
try {
currentNodeTagId = getTagProperty ( spdmTaskVo , realTaskNodeTag . getValue ( ) ) ;
if ( StringUtils . isNotBlank ( currentNodeTagId ) & & currentNodeTagId . contains ( realTaskNodeTag . getKey ( ) ) ) {
taskList . add ( spdm TaskVo ) ;
// 4. 批量查询关联数据
BatchAssociatedData batchData = batchQueryAssociatedData ( taskList , req ) ;
if ( CollectionUtils . isNotEmpty ( todayTmrTaskList ) ) {
BatchAssociatedData todayTmrBatchData = batchQueryAssociatedData ( todayTmrTaskList , req ) ;
i f ( req . getType ( ) = = 2 ) {
// 过滤今明任务
Set < SpdmTaskVo > todayReturnTaskSet = getSpdmTaskVos ( todayTmrTaskList , userId , todayTmrBatchData . getTaskMemberVoList ( ) ) ;
// 去重后的Set转List, 赋值回任务列表
todayTmrTaskList = new ArrayList < > ( todayReturn TaskSet ) ;
} else {
todayTmrTaskList = filterTaskByType ( todayTmrTaskList , req . getType ( ) , userId , todayTmrBatchData . getTaskMemberVoList ( ) , todayTmrBatchData . getAttentionMemberList ( ) ) ;
if ( CollectionUtils . isNotEmpty ( todayTmrTaskList ) ) {
todayTmrTaskList = filterTaskByPermission ( todayTmrTaskList , userId , todayTmrBatchData ) ;
if ( CollectionUtils . isNotEmpty ( todayTmrTaskList ) ) {
todayTmrTaskList = filterTaskByMemberParam ( todayTmrTaskList , req , todayTmrBatchData . getTaskMemberVoList ( ) ) ;
}
} catch ( Exception e ) {
throw new RuntimeException ( e ) ;
}
}
} else {
taskList = allTaskList ;
}
if ( CollectionUtils . isEmpty ( taskList ) ) {
log . info ( " 未查询到任务 " ) ;
return SdmResponse . success ( ) ;
}
TaskCountResp taskCountResp = new TaskCountResp ( ) ;
List < String > taskId List = taskList . stream ( ) . map ( SpdmTaskVo : : getUuid ) . to List( ) ;
List < SpdmTaskMemberVo > taskMemberVoList = mapper . getMemberList ( taskId List , null ) ;
List < SpdmTaskAttentionMemberVo > taskAttentionMemberVoList = mapper . getAttentionMemberList ( taskIdList ) ;
if ( type = = 2 ) {
// 过滤所有任务
Set < SpdmTaskVo > returnTaskSet = getSpdmTaskVos ( taskList , userId , taskMemberVoList ) ;
// 过滤今明任务
Set < SpdmTaskVo > todayReturnTaskSet = getSpdmTaskVos ( todayTmrTaskList , userId , taskMemberVoList ) ;
// 去重后的Set转List, 赋值回任务列表
taskList = new ArrayList < > ( returnTaskSet ) ;
todayTmrTaskList = new ArrayList < > ( todayReturnTaskSet ) ;
// 所有任务
countTask ( taskList , todayTmrTaskList , taskCountResp ) ;
} else {
taskList = filterTaskByType ( taskList , req . getType ( ) , userId , taskMemberVoList , taskAttentionMemberVoList ) ;
todayTmrTaskList = filterTaskByType ( todayTmrTaskList , req . getType ( ) , userId , taskMemberVoList , taskAttentionMemberVoList ) ;
countTask ( taskList , todayTmrTaskList , taskCountResp ) ;
// 5. 按类型过滤任务(我执行的/我关注的/我分发的/所有)
taskList = filterTaskByType ( taskList , req . getType ( ) , userId , batchData . getTaskMemberVoList ( ) , batchData . getAttentionMember List( ) ) ;
if ( CollectionUtils . isEmpty ( taskList ) ) {
log . info ( " 按类型过滤后无任务数据 " ) ;
return SdmResponse . success ( taskCountResp ) ;
}
// 6. 权限过滤(项目参与人/节点授权/任务成员)
taskList = filterTaskByPermission ( taskList , userId , batchData ) ;
if ( CollectionUtils . isEmpty ( taskList ) ) {
log . info ( " 权限过滤后无任务数据 " ) ;
return SdmResponse . success ( taskCountResp ) ;
}
// 7. 负责人/执行人参数过滤
taskList = filterTaskByMemberParam ( taskList , req , batchData . getTaskMemberVoList ( ) ) ;
if ( CollectionUtils . isEmpty ( taskList ) ) {
log . info ( " 负责人/执行人参数过滤后无任务数据 " ) ;
return SdmResponse . success ( taskCountResp ) ;
}
countTask ( taskList , todayTmrTaskList , taskCountResp ) ;
return SdmResponse . success ( taskCountResp ) ;
}
private Set < SpdmTaskVo > getSpdmTaskVos ( List < SpdmTaskVo > taskList , Long userId , List < SpdmTaskMemberVo > taskMemberVoList ) {
// 最终返回的有权限任务列表( 用LinkedHashSet保证有序+去重,避免同一任务多次添加)
Set < SpdmTaskVo > returnTaskSet = new LinkedHashSet < > ( ) ;