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

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.time.LocalDate;
import java.util.List;

/**
 * 项目需求主表
 */
@TableName(value = "rdms_project_requirement", autoResultMap = true)
@Data
@EqualsAndHashCode(callSuper = true)
public class ProjectRequirementDO extends BaseDO {

    /**
     * 主键 ID
     */
    @TableId
    private Long id;
    /**
     * 父需求 ID，0 表示顶级需求
     */
    private Long parentId;
    /**
     * 所属项目 ID
     */
    private Long projectId;
    /**
     * 所属模块 ID
     */
    private Long moduleId;
    /**
     * 产品需求id
     */
    private Long productRequirementId;
    /**
     * 是否需要评审，0 不需要，1 需要
     */
    private Integer reviewRequired;
    /**
     * 需求标题
     */
    private String title;
    /**
     * 需求描述，支持富文本
     */
    private String description;
    /**
     * 需求分类字典值
     */
    private String category;
    /**
     * 来源类型
     */
    private String sourceType;
    /**
     * 来源业务编号
     */
    private String sourceBizCode;
    /**
     * 优先级
     */
    private Integer priority;
    /**
     * 当前状态编码
     */
    private String statusCode;
    /**
     * 最近一次状态动作原因
     */
    private String lastStatusReason;
    /**
     * 提出人用户 ID
     */
    private Long proposerId;
    /**
     * 提出人昵称快照
     */
    private String proposerNickname;
    /**
     * 当前处理人用户 ID
     */
    private Long currentHandlerUserId;
    /**
     * 当前处理人昵称快照
     */
    private String currentHandlerUserNickname;
    /**
     * 预期完成时间
     */
    private LocalDate expectedTime;
    /**
     * 排序值
     */
    private Integer sort;
    /**
     * 附件项列表
     */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private List<AttachmentItem> attachments;

}
