任务管理查询修改

This commit is contained in:
2025-11-05 15:57:28 +08:00
parent 2653c5bb73
commit 7c58bb321f
7 changed files with 148 additions and 24 deletions

View File

@@ -0,0 +1,21 @@
package com.sdm.common.validator.annotation;
import com.sdm.common.validator.validator.EnumValueValidator;
import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = EnumValueValidator.class)
public @interface EnumValue {
String message() default "无效的枚举值";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
Class<? extends Enum<?>> enumClass();
String enumMethod() default "isValid";
}

View File

@@ -0,0 +1,34 @@
package com.sdm.common.validator.validator;
import com.sdm.common.validator.annotation.EnumValue;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
import java.lang.reflect.Method;
public class EnumValueValidator implements ConstraintValidator<EnumValue, Object> {
private Class<? extends Enum<?>> enumClass;
private String enumMethod;
@Override
public void initialize(EnumValue constraintAnnotation) {
enumClass = constraintAnnotation.enumClass();
enumMethod = constraintAnnotation.enumMethod();
}
@Override
public boolean isValid(Object value, ConstraintValidatorContext context) {
if (value == null) {
return true;
}
try {
// 通过反射调用枚举的校验方法
Method method = enumClass.getMethod(enumMethod, value.getClass());
Boolean result = (Boolean) method.invoke(null, value);
return result != null && result;
} catch (Exception e) {
return false;
}
}
}

View File

@@ -0,0 +1,29 @@
package com.sdm.project.common;
public enum TaskQryTypeEnum {
EXEC(0, "我执行的"),
ATTENTION(1, "我关注的"),
ALL(2, "所有"),
ISSUE(3, "我分发的");
private final Integer code;
private final String desc;
TaskQryTypeEnum(Integer code, String desc) {
this.code = code;
this.desc = desc;
}
public Integer getCode() {
return code;
}
public static boolean isValid(Integer code) {
for (TaskQryTypeEnum type : values()) {
if (type.getCode() == code) {
return true;
}
}
return false;
}
}

View File

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

View File

@@ -2,6 +2,8 @@ package com.sdm.project.model.req;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.sdm.common.validator.annotation.EnumValue;
import com.sdm.project.common.TaskQryTypeEnum;
import com.sdm.project.model.bo.TaskNodeTag;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@@ -23,6 +25,7 @@ public class SpdmTaskListReq {
* 任务类型0我执行的 1我关注的 2所有 3-我分发的
*/
@NotNull(message = "type不能为空")
@EnumValue(enumClass = TaskQryTypeEnum.class, message = "type任务类型无效")
private Integer type;
/**

View File

@@ -86,12 +86,9 @@ public class TaskServiceImpl implements ITaskService {
log.error("公司和工号都不能为空");
return SdmResponse.failed("公司和工号都不能为空");
}
// 0我执行的 1我关注的 2所有
// 0我执行的 1我关注的 2所有 3我分发的
Integer type = req.getType();
if (type != 0 && type != 1 && type != 2) {
log.error("type必须为0或1或2");
return SdmResponse.failed("公司和工号都不能为空");
}
if (StringUtils.isNotBlank(req.getExeStatus())) {
req.setExeStatusList(Arrays.stream(req.getExeStatus().split(",")).toList());
}
@@ -246,12 +243,10 @@ public class TaskServiceImpl implements ITaskService {
}
// task.setPMemberList(eachMemberList.stream().filter(member -> MemberTypeEnum.PRINCIPAL.getCode().equals(member.getType())).toList());
// task.setEMemberList(eachMemberList.stream().filter(member -> MemberTypeEnum.EXECUTOR.getCode().equals(member.getType())).toList());
List<Long> pUserIdList = eachMemberList.stream().filter(member -> MemberTypeEnum.PRINCIPAL.getCode().equals(member.getType())).map(SpdmTaskMemberVo::getUserId).distinct().toList();
// 由于我分发的、我执行的、我关注的、所有任务,都需要展示仿真负责人,故将负责人抽成方法调用
setPMemberList(task, eachMemberList);
// 只有所有任务需要展示仿真执行人
List<Long> eUserIdList = eachMemberList.stream().filter(member -> MemberTypeEnum.EXECUTOR.getCode().equals(member.getType())).map(SpdmTaskMemberVo::getUserId).distinct().toList();
if (CollectionUtils.isNotEmpty(pUserIdList)) {
SdmResponse<List<CIDUserResp>> cidUserResp= sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(pUserIdList).build());
task.setPMemberList(cidUserResp.getData());
}
if (CollectionUtils.isNotEmpty(eUserIdList)) {
SdmResponse<List<CIDUserResp>> cidUserResp= sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(eUserIdList).build());
task.setEMemberList(cidUserResp.getData());
@@ -304,6 +299,30 @@ public class TaskServiceImpl implements ITaskService {
}
List<String> myTaskIdList = taskMemberVoList.stream().map(SpdmTaskMemberVo::getTaskId).toList();
taskList = taskList.stream().filter(task -> myTaskIdList.contains(task.getUuid())).toList();
for (SpdmTaskVo task : taskList) {
setPMemberList(task, taskMemberVoList);
}
}
} else if (type == 3) {
// 仿真负责人是当前用户
if (CollectionUtils.isNotEmpty(taskMemberVoList)) {
SdmResponse<CIDUserResp> cidUserResp = sysUserFeignClient.queryUserDetail(UserQueryReq.builder().userId(userId).build());
if (ObjectUtils.isEmpty(cidUserResp.getData())) {
log.error("根据jobNumber{},未查询到用户", userId);
return SdmResponse.success(new ArrayList<>());
}
taskMemberVoList = taskMemberVoList.stream().filter(taskMember -> MemberTypeEnum.PRINCIPAL.getCode().equals(taskMember.getType()) && userId.equals(taskMember.getUserId())).toList();
if (CollectionUtils.isEmpty(taskMemberVoList)) {
log.error("任务列表中未查询到仿真负责人");
return SdmResponse.success(new ArrayList<>());
}
List<String> myTaskIdList = taskMemberVoList.stream().map(SpdmTaskMemberVo::getTaskId).toList();
taskList = taskList.stream().filter(task -> myTaskIdList.contains(task.getUuid())).toList();
for (SpdmTaskVo task : taskList) {
setPMemberList(task, taskMemberVoList);
}
}
} else {
SdmResponse<CIDUserResp> cidUserResp = sysUserFeignClient.queryUserDetail(UserQueryReq.builder().userId(userId).build());
@@ -327,6 +346,9 @@ public class TaskServiceImpl implements ITaskService {
List<String> myTaskIdList = taskAttentionMemberVoList.stream().map(SpdmTaskAttentionMemberVo::getTaskId).toList();
taskList = taskList.stream().filter(task -> myTaskIdList.contains(task.getUuid())).toList();
for (SpdmTaskVo task : taskList) {
setPMemberList(task, taskMemberVoList);
}
}
if (CollectionUtils.isEmpty(taskList)) {
log.error("taskList为空");
@@ -442,6 +464,15 @@ public class TaskServiceImpl implements ITaskService {
return SdmResponse.success(jsonObject);
}
private void setPMemberList(SpdmTaskVo task, List<SpdmTaskMemberVo> eachMemberList) {
// 由于我分发的、我执行的、我关注的、所有任务,都需要展示仿真负责人,故将负责人抽成方法调用
List<Long> pUserIdList = eachMemberList.stream().filter(member -> MemberTypeEnum.PRINCIPAL.getCode().equals(member.getType())).map(SpdmTaskMemberVo::getUserId).distinct().toList();
if (CollectionUtils.isNotEmpty(pUserIdList)) {
SdmResponse<List<CIDUserResp>> cidUserResp= sysUserFeignClient.listUserByIds(UserQueryReq.builder().userIds(pUserIdList).build());
task.setPMemberList(cidUserResp.getData());
}
}
@Override
public SdmResponse countByStatus(SpdmTaskListReq req) {
String tenantId = ThreadLocalContext.getCompany();
@@ -451,12 +482,8 @@ public class TaskServiceImpl implements ITaskService {
log.error("公司和工号都不能为空");
return SdmResponse.failed("公司和工号都不能为空");
}
// 0我执行的 1我关注的 2所有
// 0我执行的 1我关注的 2所有 3我分发的
Integer type = req.getType();
if (type != 0 && type != 1 && type != 2) {
log.error("type必须为0或1或2");
return SdmResponse.failed("公司和工号都不能为空");
}
List<SpdmTaskVo> allTaskList = mapper.getTaskList(tenantId, req);
// 今明任务
@@ -513,16 +540,26 @@ public class TaskServiceImpl implements ITaskService {
log.error("根据jobNumber{},未查询到用户", userId);
return SdmResponse.success(new ArrayList<>());
}
CIDUserResp cidUser = cidUserResp.getData();
taskMemberVoList = taskMemberVoList.stream().filter(taskMember -> MemberTypeEnum.EXECUTOR.getCode().equals(taskMember.getType())).toList();
taskMemberVoList = taskMemberVoList.stream().filter(taskMember -> MemberTypeEnum.EXECUTOR.getCode().equals(taskMember.getType()) && userId.equals(taskMember.getUserId())).toList();
if (CollectionUtils.isEmpty(taskMemberVoList)) {
log.error("任务列表中未查询到仿真执行人1");
log.error("任务列表中未查询到仿真执行人");
return SdmResponse.success(new ArrayList<>());
}
Long curUserId = cidUser.getUserId();
taskMemberVoList = taskMemberVoList.stream().filter(member -> curUserId.equals(member.getUserId())).toList();
List<String> myTaskIdList = taskMemberVoList.stream().map(SpdmTaskMemberVo::getTaskId).toList();
taskList = taskList.stream().filter(task -> myTaskIdList.contains(task.getUuid())).toList();
countTask(taskList, todayTmrTaskList, taskCountResp);
}
} else if (type == 3) {
// 仿真负责人是当前用户
if (CollectionUtils.isNotEmpty(taskMemberVoList)) {
SdmResponse<CIDUserResp> cidUserResp = sysUserFeignClient.queryUserDetail(UserQueryReq.builder().userId(userId).build());
if (ObjectUtils.isEmpty(cidUserResp.getData())) {
log.error("根据jobNumber{},未查询到用户", userId);
return SdmResponse.success(new ArrayList<>());
}
taskMemberVoList = taskMemberVoList.stream().filter(taskMember -> MemberTypeEnum.PRINCIPAL.getCode().equals(taskMember.getType()) && userId.equals(taskMember.getUserId())).toList();
if (CollectionUtils.isEmpty(taskMemberVoList)) {
log.error("任务列表中未查询到仿真执行人2");
log.error("任务列表中未查询到仿真负责人");
return SdmResponse.success(new ArrayList<>());
}
List<String> myTaskIdList = taskMemberVoList.stream().map(SpdmTaskMemberVo::getTaskId).toList();

View File

@@ -84,7 +84,7 @@ public class SysUserController implements ISysUserFeignClient {
*/
@Operation(summary = "根据用户ids查询用户列表")
@PostMapping("/listUserByIds")
public SdmResponse<List<CIDUserResp>> listUserByIds(@Parameter(description = "用户查询请求参数") @RequestBody @Validated UserQueryReq req) {
public SdmResponse<List<CIDUserResp>> listUserByIds(@Parameter(description = "用户查询请求参数") @RequestBody UserQueryReq req) {
return ISysUserService.listUserByIds(req);
}