package com.aegis.emergency.alert.domain;

import java.math.BigDecimal;
import java.util.Date;
import com.aegis.common.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

/**
 * 警情主表实体类 duty_alert
 * 
 * @author aegis
 */
@Getter
@Setter
@ToString(callSuper = true)
public class DutyAlert extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /** 警情ID */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;

    /** 警情编号（唯一） */
    private String alertNo;

    /** 来源渠道（字典：alert_source_channel，枚举：{@link com.aegis.emergency.alert.constant.AlertSourceChannel}） */
    private String sourceChannel;

    /** 来电号码（电话渠道使用：122、12345、110） */
    private String callerNumber;

    /** 来源扩展信息（JSON格式，不同渠道存储不同信息：转办渠道-转办单位/转办人/转办时间，监测渠道-设备ID/监测数据，媒体渠道-媒体来源/链接/发布时间等） */
    private String sourceExtInfo;

    /** 警情摘要 */
    private String summary;

    /** 初判等级（枚举：{@link com.aegis.emergency.alert.constant.AlertInitialLevel}）：level1-一级，level2-二级，level3-三级，level4-四级 */
    private String initialLevel;

    /** 警情状态（枚举：{@link com.aegis.emergency.alert.constant.AlertStatus}）：draft-草稿，received-已接警，transferred-已转警，converted-已转事件，closed-已关闭（审核详情见duty_alert_log，转警详情见duty_alert_transfer，转事件详情见duty_alert_convert） */
    private String status;

    /** 发生时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date occurredAt;

    /** 发生地点 */
    private String location;

    /** 经度 */
    private BigDecimal longitude;

    /** 纬度 */
    private BigDecimal latitude;

    /** 删除标志（0代表存在 2代表删除） */
    private String delFlag;

    // ========== 查询条件字段（非数据库字段） ==========
    
    /** 发生时间范围查询-开始时间（非数据库字段） */
    @TableField(exist = false)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date beginOccurredAt;

    /** 发生时间范围查询-结束时间（非数据库字段） */
    @TableField(exist = false)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date endOccurredAt;
    
    /** 转警记录（非数据库字段，用于列表查询时携带） */
    @TableField(exist = false)
    private DutyAlertTransfer transferRecord;
    
    /** 转事件记录（非数据库字段，用于列表查询时携带） */
    @TableField(exist = false)
    private DutyAlertConvert convertRecord;
}