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

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_product_requirement", autoResultMap = true)
@Data
@EqualsAndHashCode(callSuper = true)
public class ProductRequirementDO extends BaseDO {

    /**
     * 主键ID
     */
    @TableId
    private Long id;
    /**
     * 父需求ID，0 表示顶级需求
     */
    private Long parentId;
    /**
     * 所属模块ID，空表示全部需求
     */
    private Long moduleId;
    /**
     * 所属产品ID
     */
    private Long productId;
    /**
     * 是否需要评审，0不需要，1需要
     */
    private Integer reviewRequired;
    /**
     * 需求标题
     */
    private String title;
    /**
     * 需求描述，支持富文本
     */
    private String description;
    /**
     * 需求分类字典值
     */
    private String category;
    /**
     * 来源类型，manual 表示手工新增，work_order 表示工单流转
     */
    private String sourceType;
    /**
     * 来源业务编号
     */
    private String sourceBizCode;
    /**
     * 优先级，0低、1中、2高、3紧急
     */
    private Integer priority;
    /**
     * 当前状态编码
     */
    private String statusCode;
    /**
     * 最近一次状态动作原因
     */
    private String lastStatusReason;
    /**
     * 提出人用户ID
     */
    private Long proposerId;
    /**
     * 提出人姓名快照
     */
    private String proposerNickname;
    /**
     * 预期完成时间
     */
    private LocalDate expectedTime;
    /**
     * 当前处理人用户ID
     */
    private Long currentHandlerUserId;
    /**
     * 当前处理人姓名快照
     */
    private String currentHandlerUserNickname;
    /**
     * 默认实现项目ID，指派后可回填
     */
    private Long implementProjectId;
    /**
     * 排序值，越小越靠前
     */
    private Integer sort;
    /**
     * 附件列表
     */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private List<AttachmentItem> attachments;

}
