diff --git a/src/main/java/cn/yinlihupo/controller/project/TaskController.java b/src/main/java/cn/yinlihupo/controller/project/TaskController.java index 0f13f27..c7c0836 100644 --- a/src/main/java/cn/yinlihupo/controller/project/TaskController.java +++ b/src/main/java/cn/yinlihupo/controller/project/TaskController.java @@ -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 update(@RequestBody Task task) { - if (task.getId() == null) { + public BaseResponse 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); diff --git a/src/main/java/cn/yinlihupo/domain/dto/TaskUpdateRequest.java b/src/main/java/cn/yinlihupo/domain/dto/TaskUpdateRequest.java new file mode 100644 index 0000000..e0dd61a --- /dev/null +++ b/src/main/java/cn/yinlihupo/domain/dto/TaskUpdateRequest.java @@ -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 tags; + + /** + * 附件列表 + */ + private List attachments; + + /** + * 扩展数据 + */ + private Object extraData; +}