feat(task): 支持通过姓名更新任务执行人
- 新增 TaskUpdateRequest DTO 用于任务更新请求 - 修改 update 接口,支持通过执行人姓名自动匹配用户ID - 增加对任务执行人姓名匹配失败的日志警告 - 保护敏感字段 createTime 和 deleted 不被更新 - 引入 SysUserMapper 用于根据姓名查询用户信息
This commit is contained in:
@@ -3,12 +3,16 @@ package cn.yinlihupo.controller.project;
|
|||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
import cn.yinlihupo.common.core.BaseResponse;
|
import cn.yinlihupo.common.core.BaseResponse;
|
||||||
import cn.yinlihupo.common.util.ResultUtils;
|
import cn.yinlihupo.common.util.ResultUtils;
|
||||||
|
import cn.yinlihupo.domain.dto.TaskUpdateRequest;
|
||||||
|
import cn.yinlihupo.domain.entity.SysUser;
|
||||||
import cn.yinlihupo.domain.entity.Task;
|
import cn.yinlihupo.domain.entity.Task;
|
||||||
|
import cn.yinlihupo.mapper.SysUserMapper;
|
||||||
import cn.yinlihupo.mapper.TaskMapper;
|
import cn.yinlihupo.mapper.TaskMapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.util.StringUtils;
|
import org.springframework.util.StringUtils;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
@@ -25,6 +29,7 @@ import java.util.Map;
|
|||||||
public class TaskController {
|
public class TaskController {
|
||||||
|
|
||||||
private final TaskMapper taskMapper;
|
private final TaskMapper taskMapper;
|
||||||
|
private final SysUserMapper sysUserMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页查询任务列表
|
* 分页查询任务列表
|
||||||
@@ -95,16 +100,31 @@ public class TaskController {
|
|||||||
*/
|
*/
|
||||||
@SaCheckPermission("project:task:update")
|
@SaCheckPermission("project:task:update")
|
||||||
@PutMapping
|
@PutMapping
|
||||||
public BaseResponse<Void> update(@RequestBody Task task) {
|
public BaseResponse<Void> update(@RequestBody TaskUpdateRequest request) {
|
||||||
if (task.getId() == null) {
|
if (request.getId() == null) {
|
||||||
return ResultUtils.error("任务ID不能为空");
|
return ResultUtils.error("任务ID不能为空");
|
||||||
}
|
}
|
||||||
|
|
||||||
Task exist = taskMapper.selectById(task.getId());
|
Task exist = taskMapper.selectById(request.getId());
|
||||||
if (exist == null || exist.getDeleted() == 1) {
|
if (exist == null || exist.getDeleted() == 1) {
|
||||||
return ResultUtils.error("任务不存在");
|
return ResultUtils.error("任务不存在");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 将DTO转换为实体
|
||||||
|
Task task = new Task();
|
||||||
|
BeanUtils.copyProperties(request, task);
|
||||||
|
|
||||||
|
// 如果传递了assigneeName,根据姓名查询用户ID
|
||||||
|
if (StringUtils.hasText(request.getAssigneeName())) {
|
||||||
|
SysUser user = sysUserMapper.selectByRealName(request.getAssigneeName());
|
||||||
|
if (user != null) {
|
||||||
|
task.setAssigneeId(user.getId());
|
||||||
|
log.debug("任务执行人 '{}' 匹配到用户 ID: {}", request.getAssigneeName(), user.getId());
|
||||||
|
} else {
|
||||||
|
log.warn("任务执行人 '{}' 未在系统中找到匹配的用户", request.getAssigneeName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 不更新敏感字段
|
// 不更新敏感字段
|
||||||
task.setCreateTime(null);
|
task.setCreateTime(null);
|
||||||
task.setDeleted(null);
|
task.setDeleted(null);
|
||||||
|
|||||||
109
src/main/java/cn/yinlihupo/domain/dto/TaskUpdateRequest.java
Normal file
109
src/main/java/cn/yinlihupo/domain/dto/TaskUpdateRequest.java
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
package cn.yinlihupo.domain.dto;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务更新请求DTO
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class TaskUpdateRequest {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务ID(必填)
|
||||||
|
*/
|
||||||
|
private Long id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 所属里程碑ID
|
||||||
|
*/
|
||||||
|
private Long milestoneId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务名称
|
||||||
|
*/
|
||||||
|
private String taskName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务描述
|
||||||
|
*/
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务类型
|
||||||
|
*/
|
||||||
|
private String taskType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行人ID(直接传递ID时使用)
|
||||||
|
*/
|
||||||
|
private Long assigneeId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 执行人姓名(根据姓名自动匹配用户ID)
|
||||||
|
*/
|
||||||
|
private String assigneeName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计划开始日期
|
||||||
|
*/
|
||||||
|
private LocalDate planStartDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计划结束日期
|
||||||
|
*/
|
||||||
|
private LocalDate planEndDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实际开始日期
|
||||||
|
*/
|
||||||
|
private LocalDate actualStartDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实际结束日期
|
||||||
|
*/
|
||||||
|
private LocalDate actualEndDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 计划工时(小时)
|
||||||
|
*/
|
||||||
|
private BigDecimal planHours;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 实际工时(小时)
|
||||||
|
*/
|
||||||
|
private BigDecimal actualHours;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 进度百分比
|
||||||
|
*/
|
||||||
|
private Integer progress;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 优先级: critical-关键, high-高, medium-中, low-低
|
||||||
|
*/
|
||||||
|
private String priority;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态: pending-待开始, in_progress-进行中, completed-已完成, cancelled-已取消
|
||||||
|
*/
|
||||||
|
private String status;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标签
|
||||||
|
*/
|
||||||
|
private List<String> tags;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 附件列表
|
||||||
|
*/
|
||||||
|
private List<Object> attachments;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 扩展数据
|
||||||
|
*/
|
||||||
|
private Object extraData;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user