package com.cf.imes.module.plan.dal.dataobject.order;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.cf.imes.framework.mybatis.core.dataobject.BaseDO;
import com.cf.imes.framework.mybatis.core.type.CompressStringTypeHandler;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.time.LocalDateTime;

/**
 * 订单表 order_{N} DO
 *
 * @author 晨丰科技
 */
@TableName(value = "`orders`", autoResultMap = true)
@KeySequence("order_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OrderDO extends BaseDO {

    /**
     * 订单号，主键
     */
    @TableId
    private Long id;
    // 组织 ID
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Long organId;

    /**
     * 父单号
     */
    private Long parentId;

    /**
     * 根单号
     */
    private Long rootId;

    /**
     * 源订单号
     */
    private String apiOrderId;
    /**
     * 订单日期
     */
    private LocalDateTime orderDate;
    /**
     * 交付日期
     */
    private LocalDateTime deliveryDate;
    /**
     * 订单的完成时间
     */
    private LocalDateTime finishTime;
    /**
     * 订单类型，1主单 2子单
     */
    private Integer orderType;
    /**
     * 订单排序号
     */
    private Integer orderSort;
    /**
     * 数据类型，0文件导入 1API 2数据源
     */
    private Integer dataType;
    /**
     * 订单状态，0空订单1新单2已排单3生产中4生产完成
     */
    private Integer status;
    /**
     * 打包状态：0未打包1打包中2已打包
     */
    private Integer packaged;
    /**
     * 自定义单号
     */
    private String customOrderNo;
    /**
     * 客户
     */
    private String customer;
    /**
     * 客户地址
     */
    private String address;
    /**
     * 客户电话
     */
    private String phoneNumber;
    /**
     * 经销商
     */
    private String dealer;
    /**
     * 经销商电话
     */
    private String dealerPhoneNumber;
    /**
     * 业务员
     */
    private String salesman;
    /**
     * 拆单员
     */
    private String splitter;
    /**
     * 备注
     */
    private String remark;
    /**
     * 是否删除
     */
    private Boolean deleted;

    /**
     * 自定义板编号配置id
     */
    @TableField(value = "custom_plateno_config_id")
    private Long customPlatenoConfigId;

    /**
     * 自定义板编号序号
     */
    @TableField(value = "custom_plateno_seq", typeHandler = CompressStringTypeHandler.class)
    private String customPlatenoSeq;

    /**
     * 板件数量
     */
    private Integer plateNum;

    /**
     * 已排单小板数量
     */
    private Integer plannedPlateNum;

    /**
     * 板件总面积
     */
    private Double area;

    /**
     * 已排单面积
     */
    private Double plannedPlateArea;

    /**
     * 版本号：乐观锁用
     */
    private int version;
}
