1、任务列表调整计数接口

This commit is contained in:
2026-02-04 10:52:24 +08:00
parent e9739b0add
commit 2d8f64ef44
5 changed files with 143 additions and 56 deletions

View File

@@ -87,7 +87,7 @@ public class SimulationTaskController implements ISimulationTaskFeignClient {
*/
@PostMapping("/count")
@Operation(summary = "任务列表计数(我执行的、我关注的、所有)", description = "任务列表计数(我执行的、我关注的、所有)")
public SdmResponse<TaskCountResp> countByStatus(@Validated @RequestBody SpdmTaskCountReq req) {
public SdmResponse<TaskCountResp> countByStatus(@Validated @RequestBody SpdmTaskListReq req) {
return taskService.countByStatus(req);
}

View File

@@ -15,10 +15,8 @@ import java.util.List;
@Data
public class SpdmTaskListReq {
@NotNull(message = "current不能为空")
private Integer current;
@NotNull(message = "size不能为空")
private Integer size;
/**

View File

@@ -27,7 +27,7 @@ public interface ITaskService {
SdmResponse list(SpdmTaskListReq req);
SdmResponse<TaskCountResp> countByStatus(SpdmTaskCountReq req);
SdmResponse<TaskCountResp> countByStatus(SpdmTaskListReq req);
SdmResponse operation(SpdmTaskOpr req);

View File

@@ -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(SpdmTaskCountReq req) {
public SdmResponse<TaskCountResp> countByStatus(SpdmTaskListReq 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.getTaskList(tenantId, qry);
// 今明任务
qry.setTodayTmrTasks(ProjectConstants.TODAY_TMR_TASKS);
List<SpdmTaskVo> todayTmrTaskList = mapper.getTaskList(tenantId, qry);
// 2. 基础任务列表查询
req.setUserId(userId);
List<SpdmTaskVo> allTaskList = mapper.optimisedGtTaskList(tenantId, req);
req.setTodayTmrTasks(ProjectConstants.TODAY_TMR_TASKS);
List<SpdmTaskVo> todayTmrTaskList = mapper.optimisedGtTaskList(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(spdmTaskVo);
// 4. 批量查询关联数据
BatchAssociatedData batchData = batchQueryAssociatedData(taskList, req);
if (CollectionUtils.isNotEmpty(todayTmrTaskList)) {
BatchAssociatedData todayTmrBatchData = batchQueryAssociatedData(todayTmrTaskList, req);
if (req.getType() == 2) {
// 过滤今明任务
Set<SpdmTaskVo> todayReturnTaskSet = getSpdmTaskVos(todayTmrTaskList, userId, todayTmrBatchData.getTaskMemberVoList());
// 去重后的Set转List赋值回任务列表
todayTmrTaskList = new ArrayList<>(todayReturnTaskSet);
}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> 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);
// 5. 按类型过滤任务(我执行的/我关注的/我分发的/所有)
taskList = filterTaskByType(taskList, req.getType(), userId, batchData.getTaskMemberVoList(), batchData.getAttentionMemberList());
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<>();

View File

@@ -144,6 +144,16 @@
and STR_TO_DATE(finish_time,'%Y-%m-%d %H:%i:%s') <= #{req.finishETime}
]]>
</if>
<if test="req.filterDiscipline != null and req.filterDiscipline.size > 0">
and discipline in (
<foreach collection='req.filterDiscipline' item='disciplineId' index='index' separator=','>
#{disciplineId}
</foreach>
)
or discipline = '' or discipline = null
</if>
<if test='req.sortOrder != null and req.sortOrder == "0"'>
order by create_time
</if>