package com.yida.data.common.core.entity.system;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yida.data.common.core.converter.LocalDateTimeConverter;

import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.format.annotation.DateTimeFormat;

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

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

/**
 * @author MrBird
 */
@Data
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Document(indexName = "log_index", shards = 5)
public class Log implements Serializable {
    private static final long serialVersionUID = -2142732433623397311L;

    /**
     * 主键(唯一标识)
     */
    @ExcelIgnore
    private String id;

    /**
     * 创建人id
     */
    @TableField(fill = FieldFill.INSERT)
    @ExcelIgnore
    private Long createId;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(shape = JsonFormat.Shape.STRING, timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @ExcelProperty(value = "创建时间", converter = LocalDateTimeConverter.class)
    private LocalDateTime createDate;


    /**
     * 创建人名称
     */
    @ExcelProperty("创建人名称")
    @TableField(fill = FieldFill.INSERT)
    private String createName;

    /**
     * 操作模块
     */
    @ExcelProperty("操作模块")
    private String module;

    /**
     * 操作方法
     */
    @ExcelProperty("操作方法")
    private String method;

    /**
     * 操作接口名称
     */
    @ExcelProperty("操作接口")
    private String methodName;

    /**
     * 操作前参数
     */
    @ExcelProperty("操作前参数")
    private String beforeParams;

    /**
     * 操作后参数
     */
    @ExcelProperty("操作后参数")
    private String afterParams;

    /**
     * 操作时请求参数
     */
    @ExcelProperty("操作时请求参数")
    private String operateParams;

    /**
     * 操作开始时间
     */
    @ExcelProperty(value = "操作开始时间", converter = LocalDateTimeConverter.class)
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    //@Field(type = FieldType.Date)
    @JsonFormat(shape = JsonFormat.Shape.STRING, timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime startTime;

    /**
     * 操作结束时间
     */
    @ExcelProperty(value = "操作结束时间", converter = LocalDateTimeConverter.class)
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    //@Field(type = FieldType.Date)
    @JsonFormat(shape = JsonFormat.Shape.STRING, timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime endTime;

    /**
     * 操作时长
     */
    @ExcelProperty("操作时长（ms）")
    private Long operationTime;

    /**
     * 操作状态描述
     */
    @ExcelProperty("操作状态描述")
    private Integer resultStatus;

    /**
     * 操作结果描述
     */
    @ExcelProperty("操作结果描述")
    private String resultMsg;

    /**
     * 返回结果
     */
    @ExcelProperty("返回结果")
    private String result;

    /**
     * 操作人ip地址
     */
    @ExcelProperty("操作人ip")
    private String ip;

    /**
     * 日志类型
     *
     * @see
     */
    @ExcelProperty("日志类型")
    private String logType;
}
