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

import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.njcn.rdms.framework.mybatis.core.dataobject.BaseDO;
import lombok.Data;
import lombok.EqualsAndHashCode;

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

/**
 * 项目执行主表。
 */
@TableName("rdms_project_execution")
@Data
@EqualsAndHashCode(callSuper = true)
public class ProjectExecutionDO extends BaseDO {

    /**
     * 执行编号
     */
    @TableId
    private Long id;
    /**
     * 所属项目编号
     */
    private Long projectId;
    /**
     * 关联项目需求编号。PUT 全字段语义：null=解绑（参见 CLAUDE.md 接口语义章节）。
     */
    @TableField(updateStrategy = FieldStrategy.ALWAYS)
    private Long projectRequirementId;
    /**
     * 执行名称
     */
    private String executionName;
    /**
     * 执行类型
     */
    private String executionType;
    /**
     * 执行负责人用户编号
     */
    private Long ownerId;
    /**
     * 执行状态编码
     */
    private String statusCode;
    /**
     * 优先级字典 rdms_req_priority，0=P0(最高) ~ 3=P3(最低)
     */
    private String priority;
    /**
     * 计划开始日期
     */
    private LocalDate plannedStartDate;
    /**
     * 计划结束日期
     */
    private LocalDate plannedEndDate;
    /**
     * 实际开始日期
     */
    private LocalDate actualStartDate;
    /**
     * 实际结束日期
     */
    private LocalDate actualEndDate;
    /**
     * 执行进度缓存值
     */
    private BigDecimal progressRate;
    /**
     * 执行说明
     */
    private String executionDesc;
    /**
     * 最近一次状态动作原因
     */
    private String lastStatusReason;

}
