package com.iailab.module.data.point.dto;

import com.iailab.framework.common.validation.group.AddGroup;
import com.iailab.framework.common.validation.group.UpdateGroup;
import com.iailab.framework.excel.core.annotations.DictFormat;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.Data;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * @author PanZhibao
 * @Description
 * @createTime 2024年05月11日
 */
@Data
@Tag(name = "测点")
public class DaPointDTO implements Serializable {
    private static final long serialVersionUID = 1L;

    @Schema(description = "id")
    @Null(message="{id.null}", groups = AddGroup.class)
    @NotNull(message="{id.require}", groups = UpdateGroup.class)
    private String id;

    @Schema(description = "测点编码", required = true)
    private String pointNo;

    @Schema(description = "测点名称", required = true)
    private String pointName;

    @Schema(description = "测点类型", required = true)
    private String pointType;

    @DictFormat("point_type")
    private String pointTypeName;

    @Schema(description = "数据类型", required = true)
    private String dataType;

    @DictFormat("data_type")
    private String dataTypeName;

    @Schema(description = "值类型", required = true)
    private String valueType;

    @Schema(description = "存储类型", required = true)
    private String storeType;

    @Schema(description = "测量单位", required = true)
    private String unit;

    @Schema(description = "单位转换", required = true)
    private BigDecimal unittransfactor;

    @Schema(description = "默认值", required = true)
    private BigDecimal defaultValue;

    @Schema(description = "最大值")
    private BigDecimal maxValue;

    @Schema(description = "最小值")
    private BigDecimal minValue;

    @Schema(description = "采集频率", required = true)
    private String minfreqid;

    @Schema(description = "备注")
    private String remark;

    @Schema(description = "是否启用", required = true)
    private Integer isEnable;

    @Schema(description = "创建人")
    private Long creator;

    @Schema(description = "创建时间")
    private Date createTime;

    @Schema(description = "修改人")
    private Long updater;

    @Schema(description = "修改时间")
    private Date updateTime;

    @Schema(description = "数据源类型")
    private String sourceType;

    @Schema(description = "数据源名称")
    private String sourceName;

    @Schema(description = "数据源ID")
    private String sourceId;

    @Schema(description = "测点Tag", required = true)
    private String tagNo;

    private Integer dimension;

    @Schema(description = "计算公式", required = true)
    private String expression;

    @Schema(description = "数据源选项")
    private List<String> sourceOption;

    @Schema(description = "计算点")
    private DaMathPointDTO mathPoint;

    @Schema(description = "测量点")
    private DaMeasurePointDTO measurePoint;
}