package org.xyzh.api.bidding.vo;

import lombok.Data;
import lombok.EqualsAndHashCode;
import org.xyzh.common.vo.BaseVO;
import io.swagger.v3.oas.annotations.media.Schema;
import com.alibaba.fastjson2.annotation.JSONField;
import java.util.Date;
import java.util.List;

/**
 * 项目流程节点VO
 * 用于前端展示流程节点信息
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "项目流程节点VO")
public class ProcessNodeVO extends BaseVO {
    private static final long serialVersionUID = 1L;
    
    @Schema(description = "流程节点ID")
    private String processId;
    
    @Schema(description = "所属项目ID")
    private String projectId;
    
    @Schema(description = "项目名称")
    private String projectName;
    
    @Schema(description = "节点名称")
    private String nodeName;
    
    @Schema(description = "节点类型")
    private String nodeType;
    
    @Schema(description = "节点类型名称")
    private String nodeTypeName;
    
    @Schema(description = "节点顺序")
    private Integer nodeOrder;
    
    @Schema(description = "节点状态")
    private String nodeStatus;
    
    @Schema(description = "节点状态名称")
    private String nodeStatusName;
    
    @Schema(description = "节点状态颜色")
    private String statusColor;
    
    @Schema(description = "节点图标")
    private String nodeIcon;
    
    @Schema(description = "计划开始时间", format = "date-time")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private Date plannedStartTime;
    
    @Schema(description = "计划结束时间", format = "date-time")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private Date plannedEndTime;
    
    @Schema(description = "实际开始时间", format = "date-time")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private Date actualStartTime;
    
    @Schema(description = "实际结束时间", format = "date-time")
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private Date actualEndTime;
    
    @Schema(description = "计划耗时（天）")
    private Integer plannedDuration;
    
    @Schema(description = "实际耗时（天）")
    private Integer actualDuration;
    
    @Schema(description = "是否延期", defaultValue = "false")
    private Boolean isDelayed;
    
    @Schema(description = "延期天数")
    private Integer delayedDays;
    
    @Schema(description = "负责人ID")
    private String responsibleUser;
    
    @Schema(description = "负责人姓名")
    private String responsibleUserName;
    
    @Schema(description = "参与人员ID列表")
    private List<String> participants;
    
    @Schema(description = "参与人员姓名列表")
    private List<String> participantNames;
    
    @Schema(description = "节点备注")
    private String notes;
    
    @Schema(description = "附件ID数组")
    private List<String> attachments;
    
    @Schema(description = "附件数量")
    private Integer attachmentCount;
}
