package com.njcn.rdms.module.project.dal.dataobject.project.task;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.njcn.rdms.framework.mybatis.core.dataobject.BaseDO;
import com.njcn.rdms.module.project.dal.dataobject.attachment.AttachmentItem;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;

/**
 * 项目任务主表。
 */
@TableName(value = "rdms_task", autoResultMap = true)
@Data
@EqualsAndHashCode(callSuper = true)
public class ProjectTaskDO extends BaseDO {

    /**
     * 任务编号
     */
    @TableId
    private Long id;
    /**
     * 所属项目编号
     */
    private Long projectId;
    /**
     * 所属执行编号
     */
    private Long executionId;
    /**
     * 父任务编号
     */
    private Long parentTaskId;
    /**
     * 任务标题
     */
    private String taskTitle;
    /**
     * 任务类型
     */
    private String type;
    /**
     * 任务负责人用户编号
     */
    private Long ownerId;
    /**
     * 任务状态编码
     */
    private String statusCode;
    /**
     * 优先级字典 rdms_req_priority，0=P0(最高) ~ 3=P3(最低)
     */
    private String priority;
    /**
     * 任务进度
     */
    private BigDecimal progressRate;
    /**
     * 计划开始日期
     */
    private LocalDate plannedStartDate;
    /**
     * 计划结束日期
     */
    private LocalDate plannedEndDate;
    /**
     * 实际开始日期
     */
    private LocalDate actualStartDate;
    /**
     * 实际结束日期
     */
    private LocalDate actualEndDate;
    /**
     * 任务说明
     */
    private String taskDesc;
    /**
     * 最近一次状态动作原因
     */
    private String lastStatusReason;
    /**
     * 附件列表（JSON）。元素 {@link AttachmentItem}：id / url / name / size / contentType。
     * 校验由 {@code AttachmentValidator} 在 Service 入口完成。
     */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private List<AttachmentItem> attachments;

}
