package cn.estsh.i3plus.pojo.wms.dbinterface;

import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn;
import cn.estsh.i3plus.pojo.base.bean.BaseBean;
import cn.estsh.i3plus.pojo.base.enumutil.WmsEnumUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.ColumnDefault;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;

/**
 * WMS - SAP 中间数据库接口映射关系
 *
 * @author Rock.Yu
 * @since 2019-06-09 20:08
 */
@Data
@Entity
@DynamicInsert
@DynamicUpdate
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Table(name = "WMS_INTERFACE_DATA_MAPPER")
@Api("接口数据映射")
public class WmsInterfaceDataMapper extends BaseBean {
    private static final long serialVersionUID = 4139044040492108498L;
    /**
     * 排序编号
     */
    @Column(name = "SEQ")
    public Integer seq;
    /**
     * 来源表的每次查询记录数，防止大量数据造成内存溢出
     */
    @Column(name = "SRC_GET_LIMIT")
    public Integer srcGetLimit;
    /**
     * 接口数据源编号（在动态表单中配置）
     */
    @Column(name = "SRC_DATA_SOURCE", length = 50)
    public String dataSource;
    /**
     * 来源表名
     */
    @Column(name = "SRC_TABLE_NAME", length = 50)
    public String srcTableName;
    /**
     * 来源表的排序条件
     */
    @Column(name = "SRC_ORDER_BY", length = 50)
    public String srcOrderBy;
    /**
     * 来源表的查询条件
     */
    @Column(name = "SRC_WHERE", length = 500)
    public String srcWhere;

    /**
     * 来源表的分组条件，按分组发送，多个列名用半角逗号分隔
     */
    @Column(name = "SRC_GROUP_COLUMNS", length = 255)
    public String srcGroupColumns;
    /**
     * 数据同步到业务库后需要更新的接口库标记字段，多个字段用半角逗号分隔
     * 例如：SYNFLG=Y,SYNDATE={#XX}
     * 可以使用的动态变量： #sap_date, #sap_time, #date, #time, #guid
     */
    @Column(name = "SRC_UPDATE_SYNC", length = 255)
    public String srcUpdateSync;
    /**
     * 业务表单的主键，多个主键用半角逗号分隔
     */
    @Column(name = "SRC_PK_COLUMNS", length = 255)
    public String srcPkColumns;
    /**
     * 按照组织代码(半角逗号分隔)复制多份到业务表（用于物料、供应商、客户...等集团数据）
     */
    @Column(name = "COPY_BY_ORGS", length = 50)
    public String copyByOrgs;
    /**
     * 目标实体对象的名字，多个字段用半角逗号分隔
     */
    @Column(name = "DEST_BEAN_NAME", length = 500)
    public String destBeanName;
    /**
     * 目标实体对象判断数据是否存在的一组业务属性名称，多个属性用半角逗号分隔
     */
    @Column(name = "DEST_PK_PROPERTIES", length = 500)
    public String destPkProperties;
    /**
     * 源表字段与目标对象属性的映射关系，List<MappingItem> 对象，JSON 格式存储
     *
     */
    @Column(name = "DEST_COLUMN_MAPPING", length = 5000)
    public String destColumnMapping;

    /**
     * 接口分组名称
     * 支持的分组名：SAP2WMS, WMS2SAP, MES2WMS,WMS2MES
     */
    @Column(name = "GROUP_NAME")
    public String groupName;

    /**
     * 业务的路由规则
     * 一表对多表时需要配置路由规则
     */
    @Column(name = "BUSI_ROUTE")
    public String busiRoute;

    /**
     * 同步频率
     */
    @Column(name = "SYNC_FREQUENCY")
    public Integer syncFrequency;

    /**
     * 同步时间 CRON 表达式
     */
    @Column(name = "SYNC_CRON")
    public String syncCron;
    /**
     * 下次同步时间，与 syncCron 属性同时使用
     */
    @Column(name = "NEXT_SYNC_TIME")
    public String nextSyncTime;

    /**
     * 上次同步时间
     */
    @Column(name = "LAST_SYNC_TIME")
    public String lastSyncTime;

    /**
     * 软适配编号
     */
    @Column(name = "SOFT_ADAPATOR_CODE")
    public String softAdaptorCode;

    /**
     * 扩展脚本编号，用于扩展接口功能
     */
    @Column(name = "SCRIPT_NO")
    public String scriptNo;

    /**
     * 调用脚本方法获取数据
     */
    @Column(name = "USE_SCRIPT_PULL")
    public Integer useScriptPull;

    /**
     * 调用脚本方法保存数据
     */
    @Column(name = "USE_SCRIPT_PUSH")
    public Integer useScriptPush;

    /**
     * 调用脚本方法更新同步标志
     */
    @Column(name = "USE_SCRIPT_MARK")
    public Integer useScriptMark;

    /**
     * 调用脚本方法过滤数据（查询来源数据后过滤）
     */
    @Column(name = "USE_SCRIPT_FILTER")
    public Integer useScriptFilter;


    /**
     * 数据格式类型
     */
    @Column(name = "SOFT_DATA_TYPE")
    @ApiParam(value = "数据格式类型")
    @ColumnDefault("10")
    @AnnoOutputColumn(refClass = WmsEnumUtil.SOFT_DATA_FORM.class, refForeignKey = "value", value = "description", required = false)
    public Integer softDataType;

    @ApiParam("接口名称")
    @Column(name = "INTERFACE_NAME")
    public String interfaceName;

    /**
     * 本次发送报文使用的 SID
     */
    @Transient
    public Long sid;
}
