package com.usky.cdi.service.vo.alarm;

import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;

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

/**
 *
 * @author fyc
 * @email yuchuan.fu@chinausky.com
 * @date 2025/12/29
 */

@Data
@JsonInclude(JsonInclude.Include.NON_NULL)   // 值为 null 的字段不序列化，向前兼容
public class AlarmMessageVO<T extends Number> implements Serializable {

    private static final long serialVersionUID = 1L;

    /* ========== 所有告警公有字段 ========== */
    /**
     * 数据包ID 必填
     * Int 15
     **/
    private Long dataPacketID;

    /**
     * 人防工程ID 必填
     * Int 10
     **/
    private Long engineeringID;

    /**
     * 告警事件ID 必填
     * Int 15
     **/
    private Integer alarmID;

    /**
     * 事件来源 必填
     * 1	人防工程级物联平台自动发现
     * 2	人工巡查发现
     **/
    private Integer alarmSource;

    /**
     * 物联设施ID 非必填
     * Int 8
     **/
    private Integer sensorID;

    /**
     * 告警类型 必填
     * 10.1	水浸告警
     * 12.1	空气温度偏高告警
     * 13.1	空气湿度偏高告警
     * 14.1	氧气浓度偏低告警
     * 15.1	二氧化碳浓度偏高告警
     * 16.1	一氧化碳浓度偏高告警
     * 29.1	剩余电流偏大告警
     * 29.2	供电电缆温度偏高告警
     * 29.3	电流偏大
     * 33.1	人员闯入告警
     * 34.1	监测位置有倾斜告警
     * 35.1	监测位置有倾斜告警
     * 36.1	监测位置有裂缝告警
     * 37.1	监测位置有位移告警
     **/
    private String alarmType;

    /**
     * 告警状态 必填
     * 平时阶段
     * 1	未响应	新发生的告警事件的初始状态
     * 2	已忽略	特殊情况下可以忽略本次告警事件
     * 3	已派单	该事件以工单的形式派人进行处置
     * 4	已办结	经人工处置后，告警事件消除
     * 5	已消失	异常情况自动消失，系统自动消除告警事件
     * 战时阶段
     * 1	待处置	系统发现异常情况并上报告警事件
     * 2	处置中	管理人员已知晓告警事件，并派人进行处
     * 3	已处置	经过人工处置，已解决告警事件
     * 4    已消除	未经过人工处置，但告警事件已消失（此种状态下系统会自动消除告警事件）
     * 5	已忽略	特殊情况下可以忽略本次告警事件
     **/
    private Integer alarmStatus;

    /**
     * 告警时间 必填
     * 查询告警表 base_alarm 时新增告警取 alarm_type 字段，更新数据则取 handle_time 字段
     * 时间型（带毫秒），格式为 yyyy-MM-DD hh :mm :ss.SSS
     **/
    private String alarmUpdateTime;

    /**
     * 监测对象编号 非必填
     * Str 50
     **/
    private String monitorObjNo;

    /**
     * 告警描述 必填
     * Str 200
     **/
    private String alarmDesc;

    /**
     * 上报时间 必填
     * 获取当前时间
     * 时间型（带毫秒），格式为 yyyy-MM-DD hh :mm :ss.SSS
     **/
    private String publishTime;

    /** 告警数据字段 必填、通用
     * 水浸(Integer) 0:无水、1:有水
     * 倾斜/位移/裂缝(Integer) 0:无位移、1:有位移
     * 人员闯入告警 0:无闯入、1:有闯入
     * 电流(Float)
     **/
    private String sensorValue;

    /* ========== 私有字段 ========== */

    /** 倾斜才用
     * 单元名称 必填
     * Str 30
     **/
    private String unitName;

    /** 氧气、温湿度、一氧化碳、二氧化碳、剩余电流、供电电缆温度、电流偏大专用
     * 阈值 必填
     * Float
     **/
    private Float thresholding;

    /** 剩余电流、供电电缆温度、电流偏大专用
     * 线路编号 必填
     * Int 10
     **/
    private Integer lineNo;
}
