fix:工作负载优化

This commit is contained in:
2026-02-02 20:35:06 +08:00
parent b8444475a3
commit e229e84399
6 changed files with 45 additions and 25 deletions

View File

@@ -219,4 +219,9 @@ public class SpdmTaskVo extends BaseEntity {
@JsonProperty(value = "payAttentionMemberList")
private List<CIDUserResp> payAttentionMemberList;
/**
* 仿真执行人userId
*/
private String eUserId;
}

View File

@@ -38,7 +38,7 @@ public interface SimulationTaskMapper extends BaseMapper<SimulationTask> {
int updateTask(@Param("task") SpdmTaskVo task);
List<SimulationTask> getUserExecTaskWithinTimeFrame(@Param("req") UserWorkloadReq req);
List<SpdmTaskVo> getUserExecTaskWithinTimeFrame(@Param("req") UserWorkloadReq req);
SpdmTaskVo getTaskById(@Param("id") Long id);

View File

@@ -28,6 +28,8 @@ public class UserWorkloadReq {
private Long userId;
private List<Long> userIdList;
/*
* 用户组id
*/

View File

@@ -1,5 +1,6 @@
package com.sdm.project.model.resp;
import com.sdm.common.entity.resp.project.SpdmTaskVo;
import com.sdm.project.model.entity.SimulationTask;
import lombok.Data;
@@ -31,6 +32,6 @@ public class UserWorkloadResp {
/**
* 任务列表
*/
private List<SimulationTask> taskList;
private List<SpdmTaskVo> taskList;
}

View File

@@ -1908,6 +1908,8 @@ public class TaskServiceImpl implements ITaskService {
@Override
public SdmResponse<List<UserWorkloadResp>> listUserWorkloadsWithinTimeFrame(UserWorkloadReq req) {
List<UserWorkloadResp> userWorkloadRespList = new ArrayList<>();
List<CIDUserResp> userList = new ArrayList<>();
if (CollectionUtils.isEmpty(req.getUserIds()) && StringUtils.isEmpty(req.getUserGroupId())) {
UserListReq userListReq = new UserListReq();
userListReq.setTenantId(ThreadLocalContext.getTenantId());
@@ -1917,8 +1919,7 @@ public class TaskServiceImpl implements ITaskService {
if (!pageDataRespSdmResponse.isSuccess()) {
return SdmResponse.success();
}
List<Long> userIds = pageDataRespSdmResponse.getData().getData().stream().map(CIDUserResp::getUserId).toList();
req.setUserIds(userIds.stream().map(String::valueOf).toList());
userList.addAll(pageDataRespSdmResponse.getData().getData());
} else if (CollectionUtils.isEmpty(req.getUserIds()) && StringUtils.isNotEmpty(req.getUserGroupId())) {
// 查询用户组下所有成员
QueryGroupDetailReq groupDetailReq = new QueryGroupDetailReq();
@@ -1930,26 +1931,31 @@ public class TaskServiceImpl implements ITaskService {
if (response.isSuccess() && ObjectUtils.isNotEmpty(response.getData())
&& ObjectUtils.isNotEmpty(response.getData().getUsers())
&& ObjectUtils.isNotEmpty(response.getData().getUsers().getData())) {
List<String> userIds = response.getData().getUsers().getData().stream()
.map(u -> u.getUserId() == null ? null : String.valueOf(u.getUserId()))
.toList();
req.setUserIds(userIds);
userList.addAll(response.getData().getUsers().getData());
}
}
if (CollectionUtils.isNotEmpty(req.getUserIds())) {
SdmResponse<List<CIDUserResp>> cidUserResp = sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(req.getUserIds().stream().map(Long::valueOf).toList()).build());
List<CIDUserResp> userList = cidUserResp.getData();
for (CIDUserResp userResp : userList) {
UserWorkloadResp workloadResp = new UserWorkloadResp();
workloadResp.setUserId(String.valueOf(userResp.getUserId()));
workloadResp.setUserName(userResp.getNickname());
req.setUserId(userResp.getUserId());
List<SimulationTask> taskList = mapper.getUserExecTaskWithinTimeFrame(req);
workloadResp.setTaskNum(taskList.size());
workloadResp.setWorkNum(taskList.stream().filter(i -> Arrays.asList(TaskExeStatusEnum.NO_STARTED.getCode(), TaskExeStatusEnum.IN_PROGRESS.getCode()).contains(i.getExeStatus())).toList().size());
workloadResp.setWorkload(taskList.stream().filter(i -> i.getDays() != null).mapToDouble(SimulationTask::getDays).sum());
workloadResp.setTaskList(taskList);
userWorkloadRespList.add(workloadResp);
if (CollectionUtils.isNotEmpty(userList)) {
List<Long> userIds = userList.stream().map(CIDUserResp::getUserId).toList();
Map<Long, String> userNameMap = userList.stream().collect(Collectors.toMap(
CIDUserResp::getUserId,
CIDUserResp::getNickname
));
req.setUserIdList(userIds);
List<SpdmTaskVo> taskList = mapper.getUserExecTaskWithinTimeFrame(req);
if (CollectionUtils.isNotEmpty(taskList)) {
Map<String, List<SpdmTaskVo>> userTaskMap = taskList.stream().collect(Collectors.groupingBy(SpdmTaskVo::getEUserId));
for(String eUserId : userTaskMap.keySet()){
List<SpdmTaskVo> userTaskList = userTaskMap.get(eUserId);
UserWorkloadResp workloadResp = new UserWorkloadResp();
workloadResp.setUserId(eUserId);
workloadResp.setUserName(userNameMap.get(Long.valueOf(eUserId)));
workloadResp.setTaskNum(userTaskList.size());
workloadResp.setWorkNum(userTaskList.stream().filter(i -> Arrays.asList(TaskExeStatusEnum.NO_STARTED.getCode(), TaskExeStatusEnum.IN_PROGRESS.getCode()).contains(i.getExeStatus())).toList().size());
workloadResp.setWorkload(userTaskList.stream().filter(i -> i.getDays() != null).mapToDouble(SpdmTaskVo::getDays).sum());
workloadResp.setTaskList(userTaskList);
userWorkloadRespList.add(workloadResp);
}
}
}
userWorkloadRespList = userWorkloadRespList.stream()

View File

@@ -216,15 +216,21 @@
</select>
<select id="getUserExecTaskWithinTimeFrame" resultType="com.sdm.project.model.entity.SimulationTask">
<select id="getUserExecTaskWithinTimeFrame" resultType="com.sdm.common.entity.resp.project.SpdmTaskVo">
select
distinct st.*
distinct st.*,
stm.user_id as eUserId
from
simulation_task st
inner join simulation_task_member stm on st.uuid = stm.task_id
where
stm.type = 1
and stm.user_id = #{req.userId}
and stm.user_id in (
<foreach collection='req.userIdList' item='userId' index='index' separator=','>
#{userId}
</foreach>
)
<if test="req.beginTime != null and req.beginTime != ''">
<![CDATA[
and STR_TO_DATE(st.begin_time,'%Y-%m-%d') >= #{req.beginTime}