package com.ruoyi.oa.domain.vo;

import java.time.LocalDateTime;
import java.util.Base64;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.ruoyi.common.annotation.ExcelDictFormat;
import com.ruoyi.common.convert.ExcelDictConvert;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.oa.domain.SysOaProject;
import com.ruoyi.oa.domain.bo.OaProjectScheduleStepBo;
import com.ruoyi.system.domain.SysOss;
import lombok.Data;
import java.util.Date;
import java.util.List;


/**
 * 项目进度步骤跟踪视图对象 oa_project_schedule_step
 *
 * @author hdka
 * @date 2025-05-08
 */
@Data
@ExcelIgnoreUnannotated
public class OaProjectScheduleStepVo extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /**
     * 跟踪记录主键
     */
    @ExcelProperty(value = "跟踪记录主键")
    private Long trackId;

    /**
     * 文件列表
     */
    @ExcelProperty(value = "文件列表")
    private String accessory;

    /**
     * 所属项目进度ID
     */
    @ExcelProperty(value = "所属项目进度ID")
    private Long scheduleId;

    /**
     * 步骤序号
     */
    @ExcelProperty(value = "步骤序号")
    private Long stepOrder;

    /**
     * 步骤名称(冗余存储模板名称)
     */
    @ExcelProperty(value = "步骤名称(冗余存储模板名称)")
    private String stepName;

    /**
     * 计划开始
     */
    @ExcelProperty(value = "计划开始")
    private Date planStart;

    /**
     * 计划完成
     */
    @ExcelProperty(value = "计划完成")
    private Date planEnd;

    /**
     *
     */
    @ExcelProperty(value = "")
    private Date actualStart;

    /**
     *
     */
    @ExcelProperty(value = "")
    private Date actualEnd;

    /**
     * 0未开始 1进行中 2完成 3暂停
     */
    @ExcelProperty(value = "0未开始 1进行中 2完成 3暂停")
    private Long status;

    /**
     * 进度负责人
     */
    private String header;


    private String description;

    private Long expectedDays;

    /** 附件列表（1 步骤可多附件） */
    private List<SysOss> fileList;   // 建议用 List

    /**
     * 使用标志
     */
    private Long useFlag;

    /**
     * 批次号
     */
    private Long batchId;

    /**
     * tab节点
     */
    private String tabNode;

    /**
     * 一级节点（阶段节点）
     */
    private String firstLevelNode;

    /**
     * 二级节点（关键节点）
     */
    private String secondLevelNode;

    /**
     * 开始时间
     */
    private LocalDateTime startTime;

    /**
     * 原定结束时间
     */
    private LocalDateTime originalEndTime;

    /**
     * 结束时间
     */
    private LocalDateTime endTime;

    /**
     * 节点负责人
     */
    private String nodeHeader;

    /**
     * 相关资料
     */
    private String relatedDocs;

    /**
     * 相关图片
     */
    private String relatedImages;

    /**
     * 规范说明
     */
    private String specification;


    //排序字段
    private Integer sortNum;

    /** 新增：用户基本信息 */
    private SysUser userInfo;

    /** 新增：用户负责的项目列表 */
    private List<SysOaProject> responsibleProjects;

    /** 新增：进度统计信息 */
    private ProgressStats progressStats;

    //供应商id
    private Long supplierId;
    //供应商名称
    private String supplierName;

    //需求文件
    private String requirementFile;

    //其他
    private String other;

    private Long projectId;

    private String projectName;

    /** 进度统计内部类（封装total、completed等字段） */
    @Data
    public static class ProgressStats {
        private Long total;
        private Long completed;
        private Long pendingAcceptance;
        private Long delayed;
    }
}
