package com.zksy.telemetry.domain;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 平升遥测终端协议表
 * @TableName telemetry_data
 */
@TableName(value = "telemetry_data", schema = "app_user")
@Data
public class TelemetryData implements Serializable {
    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.ASSIGN_UUID)
    private String id;

    /**
     * 系统识别码
     */
    @TableField(value = "system_identifier")
    private String systemIdentifier;

    /**
     * 整帧长度（新增：协议2.2.1）
     */
    @TableField(value = "frame_length")
    private String frameLength;

    /**
     * 包序号（新增：协议2.2.1）
     */
    @TableField(value = "packet_sequence")
    private String packetSequence;

    /**
     * 数据类型（0x31=上报历史记录，0x34=结束通讯）
     */
    @TableField(value = "data_type")
    private String dataType;

    /**
     * 源地址（BCD格式，如“13812345678”）
     */
    @TableField(value = "source_addr")
    private String sourceAddr;

    /**
     * 目的地址长度
     */
    @TableField(value = "dest_addr_length")
    private String destAddrLength;

    /**
     * 目的地址（BCD格式）
     */
    @TableField(value = "dest_addr")
    private String destAddr;

    /**
     * 设备编码（帧内容开始标识）
     */
    @TableField(value = "device_code")
    private String deviceCode;

    /**
     * 功能码（上报历史记录固定0x2C）
     */
    @TableField(value = "function_code")
    private String functionCode;

    /**
     * 保留1
     */
    @TableField(value = "reserve1")
    private String reserve1;

    /**
     * 保留2
     */
    @TableField(value = "reserve2")
    private String reserve2;

    /**
     * 记录数量（协议2.2.3）
     */
    @TableField(value = "record_count")
    private String recordCount;

    /**
     * 记录格式（按位判断字段，协议2.2.3）
     */
    @TableField(value = "record_format")
    private String recordFormat;

    /**
     * 电源电压（Uint，如“11.21V”）
     */
    @TableField(value = "power_voltage")
    private String powerVoltage;

    /**
     * 现场状态（含“是否最后一包”标识）
     */
    @TableField(value = "field_status")
    private String fieldStatus;

    /**
     * 是否最后一包（新增：解析现场状态D3位）
     */
    @TableField(value = "is_last_packet")
    private Boolean isLastPacket;

    /**
     * 协议版本
     */
    @TableField(value = "protocol_version")
    private String protocolVersion;

    /**
     * 参数版本
     */
    @TableField(value = "param_version")
    private String paramVersion;

    /**
     * 信号质量（如“28”）
     */
    @TableField(value = "signal_quality")
    private String signalQuality;

    /**
     * 保留3
     */
    @TableField(value = "reserve3")
    private String reserve3;

    /**
     * 时间戳（2000-1-1 00:00:00开始）
     */
    @TableField(value = "timestamp_since")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime timestampSince;

    /**
     * 历史记录详情（多字段拼接，如“温度22.1℃,水位22.7m”）
     */
    @TableField(value = "history_records")
    private String historyRecords;

    /**
     * 表1净累计
     */
    @TableField(value = "meter1_net_total")
    private String meter1NetTotal;

    /**
     * 表1正累计
     */
    @TableField(value = "meter1_positive_total")
    private String meter1PositiveTotal;

    /**
     * 表1负累计
     */
    @TableField(value = "meter1_negative_total")
    private String meter1NegativeTotal;

    /**
     * 表1瞬时流量
     */
    @TableField(value = "meter1_instant_flow")
    private String meter1InstantFlow;
    /**
     * 流速
     */
    @TableField(value = "flow_speed")
    private String flowSpeed;

    /**
     * 压力
     */
    @TableField(value = "pressure")
    private String pressure;
    /**
     * 温度
     */
    @TableField(value = "temperature")
    private String temperature;

    /**
     * 开关量
     */
    @TableField(value = "switch_value")
    private String switchValue;

    /**
     * 数据插入时间
     */
    @TableField(value = "create_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createTime;

    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}