Merge remote-tracking branch 'origin/main'
This commit is contained in:
@@ -87,7 +87,7 @@ public class SimulationTaskController implements ISimulationTaskFeignClient {
|
|||||||
*/
|
*/
|
||||||
@PostMapping("/count")
|
@PostMapping("/count")
|
||||||
@Operation(summary = "任务列表计数(我执行的、我关注的、所有)", description = "任务列表计数(我执行的、我关注的、所有)")
|
@Operation(summary = "任务列表计数(我执行的、我关注的、所有)", description = "任务列表计数(我执行的、我关注的、所有)")
|
||||||
public SdmResponse<TaskCountResp> countByStatus(@Validated @RequestBody SpdmTaskCountReq req) {
|
public SdmResponse<TaskCountResp> countByStatus(@Validated @RequestBody SpdmTaskListReq req) {
|
||||||
return taskService.countByStatus(req);
|
return taskService.countByStatus(req);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -15,10 +15,8 @@ import java.util.List;
|
|||||||
@Data
|
@Data
|
||||||
public class SpdmTaskListReq {
|
public class SpdmTaskListReq {
|
||||||
|
|
||||||
@NotNull(message = "current不能为空")
|
|
||||||
private Integer current;
|
private Integer current;
|
||||||
|
|
||||||
@NotNull(message = "size不能为空")
|
|
||||||
private Integer size;
|
private Integer size;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ public interface ITaskService {
|
|||||||
|
|
||||||
SdmResponse list(SpdmTaskListReq req);
|
SdmResponse list(SpdmTaskListReq req);
|
||||||
|
|
||||||
SdmResponse<TaskCountResp> countByStatus(SpdmTaskCountReq req);
|
SdmResponse<TaskCountResp> countByStatus(SpdmTaskListReq req);
|
||||||
|
|
||||||
SdmResponse operation(SpdmTaskOpr req);
|
SdmResponse operation(SpdmTaskOpr req);
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
@Override
|
||||||
public SdmResponse<TaskCountResp> countByStatus(SpdmTaskCountReq req) {
|
public SdmResponse<TaskCountResp> countByStatus(SpdmTaskListReq req) {
|
||||||
Long tenantId = ThreadLocalContext.getTenantId();
|
Long tenantId = ThreadLocalContext.getTenantId();
|
||||||
Long userId = ThreadLocalContext.getUserId();
|
Long userId = ThreadLocalContext.getUserId();
|
||||||
if (Objects.isNull(tenantId) || Objects.isNull(userId)) {
|
if (Objects.isNull(tenantId) || Objects.isNull(userId)) {
|
||||||
log.error("公司和工号都不能为空");
|
log.error("公司和工号都不能为空,tenantId:{}, userId:{}", tenantId, userId);
|
||||||
return SdmResponse.failed("公司和工号都不能为空");
|
return SdmResponse.failed("公司和工号都不能为空");
|
||||||
}
|
}
|
||||||
// 0:我执行的 1:我关注的 2:所有 3:我分发的
|
TaskCountResp taskCountResp = new TaskCountResp();
|
||||||
Integer type = req.getType();
|
// 1. 请求参数预处理
|
||||||
|
preProcessReq(req);
|
||||||
|
|
||||||
SpdmTaskListReq qry = new SpdmTaskListReq();
|
// 2. 基础任务列表查询
|
||||||
List<SpdmTaskVo> allTaskList = mapper.getTaskList(tenantId, qry);
|
req.setUserId(userId);
|
||||||
// 今明任务
|
List<SpdmTaskVo> allTaskList = mapper.optimisedGtTaskList(tenantId, req);
|
||||||
qry.setTodayTmrTasks(ProjectConstants.TODAY_TMR_TASKS);
|
req.setTodayTmrTasks(ProjectConstants.TODAY_TMR_TASKS);
|
||||||
List<SpdmTaskVo> todayTmrTaskList = mapper.getTaskList(tenantId, qry);
|
List<SpdmTaskVo> todayTmrTaskList = mapper.optimisedGtTaskList(tenantId, req);
|
||||||
if (CollectionUtils.isEmpty(allTaskList)) {
|
if (CollectionUtils.isEmpty(allTaskList)) {
|
||||||
log.error("根据tenantId:{},未查询到任务", tenantId);
|
log.info("根据tenantId:{},未查询到任务", tenantId);
|
||||||
return SdmResponse.success();
|
return SdmResponse.success(taskCountResp);
|
||||||
}
|
}
|
||||||
List<SpdmTaskVo> taskList = new ArrayList<>();
|
|
||||||
List<TaskNodeTag> idMapList = req.getIdMap();
|
// 3. 节点标签过滤
|
||||||
if (CollectionUtils.isEmpty(idMapList)) {
|
List<SpdmTaskVo> taskList = filterTaskByNodeTag(allTaskList, req);
|
||||||
log.error("任务列表中的idMap不能为空");
|
todayTmrTaskList = filterTaskByNodeTag(todayTmrTaskList, req);
|
||||||
return SdmResponse.failed("任务列表中的idMap不能为空");
|
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();
|
// 4. 批量查询关联数据
|
||||||
TaskNodeTag realTaskNodeTag = realIdMapList.get(realIdMapList.size() - 1);
|
BatchAssociatedData batchData = batchQueryAssociatedData(taskList, req);
|
||||||
log.info("实际查询节点类型为:{}", realTaskNodeTag);
|
if (CollectionUtils.isNotEmpty(todayTmrTaskList)) {
|
||||||
String currentNodeTagId = "";
|
BatchAssociatedData todayTmrBatchData = batchQueryAssociatedData(todayTmrTaskList, req);
|
||||||
for (SpdmTaskVo spdmTaskVo : allTaskList) {
|
if (req.getType() == 2) {
|
||||||
try {
|
// 过滤今明任务
|
||||||
currentNodeTagId = getTagProperty(spdmTaskVo, realTaskNodeTag.getValue());
|
Set<SpdmTaskVo> todayReturnTaskSet = getSpdmTaskVos(todayTmrTaskList, userId, todayTmrBatchData.getTaskMemberVoList());
|
||||||
if (StringUtils.isNotBlank(currentNodeTagId) && currentNodeTagId.contains(realTaskNodeTag.getKey())) {
|
// 去重后的Set转List,赋值回任务列表
|
||||||
taskList.add(spdmTaskVo);
|
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();
|
// 5. 按类型过滤任务(我执行的/我关注的/我分发的/所有)
|
||||||
List<String> taskIdList = taskList.stream().map(SpdmTaskVo::getUuid).toList();
|
taskList = filterTaskByType(taskList, req.getType(), userId, batchData.getTaskMemberVoList(), batchData.getAttentionMemberList());
|
||||||
List<SpdmTaskMemberVo> taskMemberVoList = mapper.getMemberList(taskIdList, null);
|
if (CollectionUtils.isEmpty(taskList)) {
|
||||||
List<SpdmTaskAttentionMemberVo> taskAttentionMemberVoList = mapper.getAttentionMemberList(taskIdList);
|
log.info("按类型过滤后无任务数据");
|
||||||
if (type == 2) {
|
return SdmResponse.success(taskCountResp);
|
||||||
// 过滤所有任务
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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);
|
return SdmResponse.success(taskCountResp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private Set<SpdmTaskVo> getSpdmTaskVos(List<SpdmTaskVo> taskList, Long userId, List<SpdmTaskMemberVo> taskMemberVoList) {
|
private Set<SpdmTaskVo> getSpdmTaskVos(List<SpdmTaskVo> taskList, Long userId, List<SpdmTaskMemberVo> taskMemberVoList) {
|
||||||
// 最终返回的有权限任务列表(用LinkedHashSet保证有序+去重,避免同一任务多次添加)
|
// 最终返回的有权限任务列表(用LinkedHashSet保证有序+去重,避免同一任务多次添加)
|
||||||
Set<SpdmTaskVo> returnTaskSet = new LinkedHashSet<>();
|
Set<SpdmTaskVo> returnTaskSet = new LinkedHashSet<>();
|
||||||
|
|||||||
@@ -144,6 +144,16 @@
|
|||||||
and STR_TO_DATE(finish_time,'%Y-%m-%d %H:%i:%s') <= #{req.finishETime}
|
and STR_TO_DATE(finish_time,'%Y-%m-%d %H:%i:%s') <= #{req.finishETime}
|
||||||
]]>
|
]]>
|
||||||
</if>
|
</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"'>
|
<if test='req.sortOrder != null and req.sortOrder == "0"'>
|
||||||
order by create_time
|
order by create_time
|
||||||
</if>
|
</if>
|
||||||
@@ -483,8 +493,8 @@
|
|||||||
and demand_id = #{req.demandId}
|
and demand_id = #{req.demandId}
|
||||||
</if>
|
</if>
|
||||||
<if test="req.taskName != null and req.taskName != ''">
|
<if test="req.taskName != null and req.taskName != ''">
|
||||||
<bind name="searchKey" value="'%' + req.taskName + '%'"/>
|
<bind name="searchKey1" value="'%' + req.taskName + '%'"/>
|
||||||
and task_name like #{searchKey}
|
and task_name like #{searchKey1}
|
||||||
</if>
|
</if>
|
||||||
<if test="req.progress != null and req.progress != ''">
|
<if test="req.progress != null and req.progress != ''">
|
||||||
and progress = #{req.progress}
|
and progress = #{req.progress}
|
||||||
@@ -600,8 +610,8 @@
|
|||||||
and demand_id = #{req.demandId}
|
and demand_id = #{req.demandId}
|
||||||
</if>
|
</if>
|
||||||
<if test="req.taskName != null and req.taskName != ''">
|
<if test="req.taskName != null and req.taskName != ''">
|
||||||
<bind name="searchKey" value="'%' + req.taskName + '%'"/>
|
<bind name="searchKey2" value="'%' + req.taskName + '%'"/>
|
||||||
and task_name like #{searchKey}
|
and task_name like #{searchKey2}
|
||||||
</if>
|
</if>
|
||||||
<if test="req.progress != null and req.progress != ''">
|
<if test="req.progress != null and req.progress != ''">
|
||||||
and progress = #{req.progress}
|
and progress = #{req.progress}
|
||||||
|
|||||||
Reference in New Issue
Block a user