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.yinlihupo.common.core.BaseResponse;
|
||||
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.mapper.SysUserMapper;
|
||||
import cn.yinlihupo.mapper.TaskMapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@@ -25,6 +29,7 @@ import java.util.Map;
|
||||
public class TaskController {
|
||||
|
||||
private final TaskMapper taskMapper;
|
||||
private final SysUserMapper sysUserMapper;
|
||||
|
||||
/**
|
||||
* 分页查询任务列表
|
||||
@@ -95,16 +100,31 @@ public class TaskController {
|
||||
*/
|
||||
@SaCheckPermission("project:task:update")
|
||||
@PutMapping
|
||||
public BaseResponse<Void> update(@RequestBody Task task) {
|
||||
if (task.getId() == null) {
|
||||
public BaseResponse<Void> update(@RequestBody TaskUpdateRequest request) {
|
||||
if (request.getId() == null) {
|
||||
return ResultUtils.error("任务ID不能为空");
|
||||
}
|
||||
|
||||
Task exist = taskMapper.selectById(task.getId());
|
||||
Task exist = taskMapper.selectById(request.getId());
|
||||
if (exist == null || exist.getDeleted() == 1) {
|
||||
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.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