package cn.iocoder.yudao.module.property.entity;

import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
import cn.iocoder.yudao.framework.tenant.core.db.TenantBaseDO;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
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 lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;
import java.util.Date;

import static cn.iocoder.yudao.common.DictBaseConstants.*;

/**
 * 企业管理-资产管理
 * @author 小李
 * @date 16:37 2024/8/15
**/
@TableName("company_property")
@Data
@EqualsAndHashCode(callSuper = true)
@ExcelIgnoreUnannotated
public class Property extends TenantBaseDO {

    /** 主键标识 */
    @TableId(type = IdType.ASSIGN_ID)
    private String id;

    /** 企业id（base_company表中的id） */
    private String corpId;

    /** 部门id（system_dept表中的id，用来做数据权限控制） */
    private Long deptId;

    /** 存放位置id（company_property_pos） */
    private String posId;

    /** 使用人id（sys_users） */
    private String userId;

    /** 资产编号 */
    @ExcelProperty("资产编号")
    private String propNo;

    /** 资产名称 */
    @ExcelProperty("资产名称")
    private String propName;

    /** 资产分类（分类字典） */
    @ExcelProperty("资产分类")
    private String propCatg;

    /** 预计使用年限 */
    @ExcelProperty("预计使用年限")
    private Integer useYear;

    /** 价值类型 */
    @ExcelProperty(value = "价值类型", converter = DictConvert.class)
    @DictFormat(COMPANY_COST_TYPE)
    private String costType;

    /** 资产数量 */
    @ExcelProperty("资产数量")
    private Integer propNum;

    /** 资产原值（元） */
    @ExcelProperty("资产原值")
    private BigDecimal costTotal;

    /** 资产状态 */
    @ExcelProperty(value = "资产状态", converter = DictConvert.class)
    @DictFormat(COMPANY_PROP_STATUS)
    private String propStatus;

    /** 品牌 */
    @ExcelProperty("品牌")
    private String brand;

    /** 规格型号 */
    @ExcelProperty("规格型号")
    private String spec;

    /** 生产厂家 */
    @ExcelProperty("生产厂家")
    private String factory;

    /** 出场序列号/编号 */
    @ExcelProperty("出场序列号/编号")
    private String serialNo;

    /** 数量计量单位 */
    @ExcelProperty("数量计量单位")
    private String unit;

    /** 取得日期 */
    @JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ExcelProperty("取得日期")
    private Date getDate;

    /** 出厂日期 */
    @JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ExcelProperty("出厂日期")
    private Date prodDate;

    /** 供应商 */
    @ExcelProperty("供应商")
    private String supplier;

    /** 启用日期 */
    @JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ExcelProperty("启用日期")
    private Date openDate;

    /** 净值（元） */
    @ExcelProperty("净值")
    private BigDecimal netValue;

    /** 凭证号 */
    @ExcelProperty("凭证号")
    private String voucherNo;

    /** 维修/保养周期单位（年/月/天） */
    @ExcelProperty(value = "维修/保养周期单位", converter = DictConvert.class)
    @DictFormat(CYCLE_DICT)
    private String keepCycleType;

    /** 维修/保养周期（具体数字） */
    @ExcelProperty("维修/保养周期")
    private Integer keepCycle;

    /** 上次维修/保养日期 */
    @JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ExcelProperty("上次维修/保养日期")
    private Date lastKeepDate;

    /** 下次维修/保养日期 */
    @JsonFormat(pattern="yyyy-MM-dd", timezone="GMT+8")
    @DateTimeFormat(pattern="yyyy-MM-dd")
    @ExcelProperty("下次维修/保养日期")
    private Date nextKeepDate;

    /** 附件urls（infra_file表中的url，多个英文逗号拼接） */
    @ExcelProperty("附件")
    private String fileUrls;

    /** 使用人 */
    @TableField(exist = false)
    @ExcelProperty("使用人")
    private String staffName;

    /** 存放位置 */
    @TableField(exist = false)
    @ExcelProperty("存放位置")
    private String posName;

    /** 处置方式 */
    @TableField(exist = false)
    private String dealWay;

    /** 备注 */
    @TableField(exist = false)
    private String remark;
}