/*
 * This file is generated by jOOQ.
 */
package cn.vertxup.workflow.domain.tables.interfaces;


import io.github.jklingsporn.vertx.jooq.shared.internal.VertxPojo;

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

import static io.github.jklingsporn.vertx.jooq.shared.internal.VertxPojo.setOrThrow;
/**
 * This class is generated by jOOQ.
 */
@SuppressWarnings({ "all", "unchecked", "rawtypes" })
public interface IWTicket extends VertxPojo, Serializable {

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.KEY</code>. 「key」- 单据主键
     */
    public IWTicket setKey(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.KEY</code>. 「key」- 单据主键
     */
    public String getKey();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.SERIAL</code>. 「serial」- 单据编号，使用
     * X_NUMBER 生成
     */
    public IWTicket setSerial(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.SERIAL</code>. 「serial」- 单据编号，使用
     * X_NUMBER 生成
     */
    public String getSerial();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.NAME</code>. 「name」- 单据标题
     */
    public IWTicket setName(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.NAME</code>. 「name」- 单据标题
     */
    public String getName();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.CODE</code>. 「code」- 单据系统编号（内码）
     */
    public IWTicket setCode(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.CODE</code>. 「code」- 单据系统编号（内码）
     */
    public String getCode();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.TYPE</code>. 「type」- 主单类型类型
     */
    public IWTicket setType(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.TYPE</code>. 「type」- 主单类型类型
     */
    public String getType();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.PHASE</code>. 「phase」-
     * 主单据所属阶段（状态描述，由于挂TODO，所以不使用status）
     */
    public IWTicket setPhase(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.PHASE</code>. 「phase」-
     * 主单据所属阶段（状态描述，由于挂TODO，所以不使用status）
     */
    public String getPhase();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.MODEL_ID</code>. 「modelId」-
     * 关联的模型identifier，用于描述
     */
    public IWTicket setModelId(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.MODEL_ID</code>. 「modelId」-
     * 关联的模型identifier，用于描述
     */
    public String getModelId();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.MODEL_KEY</code>. 「modelKey」-
     * 关联的模型记录ID，用于描述哪一个Model中的记录
     */
    public IWTicket setModelKey(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.MODEL_KEY</code>. 「modelKey」-
     * 关联的模型记录ID，用于描述哪一个Model中的记录
     */
    public String getModelKey();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.MODEL_CATEGORY</code>.
     * 「modelCategory」- 关联的category记录，只包含叶节点
     */
    public IWTicket setModelCategory(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.MODEL_CATEGORY</code>.
     * 「modelCategory」- 关联的category记录，只包含叶节点
     */
    public String getModelCategory();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.MODEL_COMPONENT</code>.
     * 「modelComponent」- 关联的待办组件记录
     */
    public IWTicket setModelComponent(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.MODEL_COMPONENT</code>.
     * 「modelComponent」- 关联的待办组件记录
     */
    public String getModelComponent();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.MODEL_CHILD</code>. 「modelChild」-
     * 关联多个模型的记录ID，JsonArray格式
     */
    public IWTicket setModelChild(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.MODEL_CHILD</code>. 「modelChild」-
     * 关联多个模型的记录ID，JsonArray格式
     */
    public String getModelChild();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.QUANTITY</code>. 「quantity」-
     * 数量信息，多个模型记录时统计模型总数
     */
    public IWTicket setQuantity(Integer value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.QUANTITY</code>. 「quantity」-
     * 数量信息，多个模型记录时统计模型总数
     */
    public Integer getQuantity();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.FLOW_DEFINITION_KEY</code>.
     * 「flowDefinitionKey」- 流程定义的KEY, getProcessDefinitionKey
     */
    public IWTicket setFlowDefinitionKey(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.FLOW_DEFINITION_KEY</code>.
     * 「flowDefinitionKey」- 流程定义的KEY, getProcessDefinitionKey
     */
    public String getFlowDefinitionKey();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.FLOW_DEFINITION_ID</code>.
     * 「flowDefinitionId」- 流程定义的ID，getProcessDefinitionKey
     */
    public IWTicket setFlowDefinitionId(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.FLOW_DEFINITION_ID</code>.
     * 「flowDefinitionId」- 流程定义的ID，getProcessDefinitionKey
     */
    public String getFlowDefinitionId();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.FLOW_INSTANCE_ID</code>.
     * 「flowInstanceId」- 流程定义的ID，getProcessId
     */
    public IWTicket setFlowInstanceId(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.FLOW_INSTANCE_ID</code>.
     * 「flowInstanceId」- 流程定义的ID，getProcessId
     */
    public String getFlowInstanceId();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.FLOW_END</code>. 「flowEnd」- 主单是否执行完成
     */
    public IWTicket setFlowEnd(Boolean value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.FLOW_END</code>. 「flowEnd」- 主单是否执行完成
     */
    public Boolean getFlowEnd();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.TITLE</code>. 「title」- 主单业务标题
     */
    public IWTicket setTitle(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.TITLE</code>. 「title」- 主单业务标题
     */
    public String getTitle();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.DESCRIPTION</code>. 「description」-
     * 主单描述内容
     */
    public IWTicket setDescription(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.DESCRIPTION</code>. 「description」-
     * 主单描述内容
     */
    public String getDescription();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.CATALOG</code>. 「catalog」- 关联服务目录
     */
    public IWTicket setCatalog(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.CATALOG</code>. 「catalog」- 关联服务目录
     */
    public String getCatalog();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.CATEGORY</code>. 「category」- 业务类别
     */
    public IWTicket setCategory(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.CATEGORY</code>. 「category」- 业务类别
     */
    public String getCategory();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.CATEGORY_SUB</code>. 「categorySub」-
     * 子类别
     */
    public IWTicket setCategorySub(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.CATEGORY_SUB</code>. 「categorySub」-
     * 子类别
     */
    public String getCategorySub();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.OWNER</code>. 「owner」- 制单人/拥有者
     */
    public IWTicket setOwner(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.OWNER</code>. 「owner」- 制单人/拥有者
     */
    public String getOwner();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.SUPERVISOR</code>. 「supervisor」- 监督人
     */
    public IWTicket setSupervisor(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.SUPERVISOR</code>. 「supervisor」- 监督人
     */
    public String getSupervisor();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.OPEN_BY</code>. 「openBy」- 开单人
     */
    public IWTicket setOpenBy(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.OPEN_BY</code>. 「openBy」- 开单人
     */
    public String getOpenBy();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.OPEN_GROUP</code>. 「openGroup」- 开单组
     */
    public IWTicket setOpenGroup(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.OPEN_GROUP</code>. 「openGroup」- 开单组
     */
    public String getOpenGroup();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.OPEN_AT</code>. 「openAt」- 开单时间
     */
    public IWTicket setOpenAt(LocalDateTime value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.OPEN_AT</code>. 「openAt」- 开单时间
     */
    public LocalDateTime getOpenAt();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.CANCEL_BY</code>. 「cancelBy」- 中断人
     */
    public IWTicket setCancelBy(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.CANCEL_BY</code>. 「cancelBy」- 中断人
     */
    public String getCancelBy();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.CANCEL_AT</code>. 「cancelAt」- 中断时间
     */
    public IWTicket setCancelAt(LocalDateTime value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.CANCEL_AT</code>. 「cancelAt」- 中断时间
     */
    public LocalDateTime getCancelAt();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.CLOSE_BY</code>. 「closeBy」- 关闭人
     */
    public IWTicket setCloseBy(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.CLOSE_BY</code>. 「closeBy」- 关闭人
     */
    public String getCloseBy();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.CLOSE_AT</code>. 「closeAt」- 关闭时间
     */
    public IWTicket setCloseAt(LocalDateTime value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.CLOSE_AT</code>. 「closeAt」- 关闭时间
     */
    public LocalDateTime getCloseAt();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.CLOSE_SOLUTION</code>.
     * 「closeSolution」- 关闭解决方案
     */
    public IWTicket setCloseSolution(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.CLOSE_SOLUTION</code>.
     * 「closeSolution」- 关闭解决方案
     */
    public String getCloseSolution();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.CLOSE_CODE</code>. 「closeCode」- 关闭代码
     */
    public IWTicket setCloseCode(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.CLOSE_CODE</code>. 「closeCode」- 关闭代码
     */
    public String getCloseCode();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.CLOSE_KB</code>. 「closeKb」-
     * 关闭时KB链接地址
     */
    public IWTicket setCloseKb(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.CLOSE_KB</code>. 「closeKb」-
     * 关闭时KB链接地址
     */
    public String getCloseKb();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.ACTIVE</code>. 「active」- 是否启用
     */
    public IWTicket setActive(Boolean value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.ACTIVE</code>. 「active」- 是否启用
     */
    public Boolean getActive();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.SIGMA</code>. 「sigma」- 统一标识
     */
    public IWTicket setSigma(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.SIGMA</code>. 「sigma」- 统一标识
     */
    public String getSigma();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.METADATA</code>. 「metadata」- 附加配置
     */
    public IWTicket setMetadata(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.METADATA</code>. 「metadata」- 附加配置
     */
    public String getMetadata();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.LANGUAGE</code>. 「language」- 使用的语言
     */
    public IWTicket setLanguage(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.LANGUAGE</code>. 「language」- 使用的语言
     */
    public String getLanguage();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.CREATED_AT</code>. 「createdAt」- 创建时间
     */
    public IWTicket setCreatedAt(LocalDateTime value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.CREATED_AT</code>. 「createdAt」- 创建时间
     */
    public LocalDateTime getCreatedAt();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.CREATED_BY</code>. 「createdBy」- 创建人
     */
    public IWTicket setCreatedBy(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.CREATED_BY</code>. 「createdBy」- 创建人
     */
    public String getCreatedBy();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.UPDATED_AT</code>. 「updatedAt」- 更新时间
     */
    public IWTicket setUpdatedAt(LocalDateTime value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.UPDATED_AT</code>. 「updatedAt」- 更新时间
     */
    public LocalDateTime getUpdatedAt();

    /**
     * Setter for <code>DB_ETERNAL.W_TICKET.UPDATED_BY</code>. 「updatedBy」- 更新人
     */
    public IWTicket setUpdatedBy(String value);

    /**
     * Getter for <code>DB_ETERNAL.W_TICKET.UPDATED_BY</code>. 「updatedBy」- 更新人
     */
    public String getUpdatedBy();

    // -------------------------------------------------------------------------
    // FROM and INTO
    // -------------------------------------------------------------------------

    /**
     * Load data from another generated Record/POJO implementing the common
     * interface IWTicket
     */
    public void from(IWTicket from);

    /**
     * Copy data into another generated Record/POJO implementing the common
     * interface IWTicket
     */
    public <E extends IWTicket> E into(E into);

        @Override
        public default IWTicket fromJson(io.vertx.core.json.JsonObject json) {
                setOrThrow(this::setKey,json::getString,"KEY","java.lang.String");
                setOrThrow(this::setSerial,json::getString,"SERIAL","java.lang.String");
                setOrThrow(this::setName,json::getString,"NAME","java.lang.String");
                setOrThrow(this::setCode,json::getString,"CODE","java.lang.String");
                setOrThrow(this::setType,json::getString,"TYPE","java.lang.String");
                setOrThrow(this::setPhase,json::getString,"PHASE","java.lang.String");
                setOrThrow(this::setModelId,json::getString,"MODEL_ID","java.lang.String");
                setOrThrow(this::setModelKey,json::getString,"MODEL_KEY","java.lang.String");
                setOrThrow(this::setModelCategory,json::getString,"MODEL_CATEGORY","java.lang.String");
                setOrThrow(this::setModelComponent,json::getString,"MODEL_COMPONENT","java.lang.String");
                setOrThrow(this::setModelChild,json::getString,"MODEL_CHILD","java.lang.String");
                setOrThrow(this::setQuantity,json::getInteger,"QUANTITY","java.lang.Integer");
                setOrThrow(this::setFlowDefinitionKey,json::getString,"FLOW_DEFINITION_KEY","java.lang.String");
                setOrThrow(this::setFlowDefinitionId,json::getString,"FLOW_DEFINITION_ID","java.lang.String");
                setOrThrow(this::setFlowInstanceId,json::getString,"FLOW_INSTANCE_ID","java.lang.String");
                setOrThrow(this::setFlowEnd,json::getBoolean,"FLOW_END","java.lang.Boolean");
                setOrThrow(this::setTitle,json::getString,"TITLE","java.lang.String");
                setOrThrow(this::setDescription,json::getString,"DESCRIPTION","java.lang.String");
                setOrThrow(this::setCatalog,json::getString,"CATALOG","java.lang.String");
                setOrThrow(this::setCategory,json::getString,"CATEGORY","java.lang.String");
                setOrThrow(this::setCategorySub,json::getString,"CATEGORY_SUB","java.lang.String");
                setOrThrow(this::setOwner,json::getString,"OWNER","java.lang.String");
                setOrThrow(this::setSupervisor,json::getString,"SUPERVISOR","java.lang.String");
                setOrThrow(this::setOpenBy,json::getString,"OPEN_BY","java.lang.String");
                setOrThrow(this::setOpenGroup,json::getString,"OPEN_GROUP","java.lang.String");
                setOrThrow(this::setOpenAt,key -> {String s = json.getString(key); return s==null?null:java.time.LocalDateTime.parse(s);},"OPEN_AT","java.time.LocalDateTime");
                setOrThrow(this::setCancelBy,json::getString,"CANCEL_BY","java.lang.String");
                setOrThrow(this::setCancelAt,key -> {String s = json.getString(key); return s==null?null:java.time.LocalDateTime.parse(s);},"CANCEL_AT","java.time.LocalDateTime");
                setOrThrow(this::setCloseBy,json::getString,"CLOSE_BY","java.lang.String");
                setOrThrow(this::setCloseAt,key -> {String s = json.getString(key); return s==null?null:java.time.LocalDateTime.parse(s);},"CLOSE_AT","java.time.LocalDateTime");
                setOrThrow(this::setCloseSolution,json::getString,"CLOSE_SOLUTION","java.lang.String");
                setOrThrow(this::setCloseCode,json::getString,"CLOSE_CODE","java.lang.String");
                setOrThrow(this::setCloseKb,json::getString,"CLOSE_KB","java.lang.String");
                setOrThrow(this::setActive,json::getBoolean,"ACTIVE","java.lang.Boolean");
                setOrThrow(this::setSigma,json::getString,"SIGMA","java.lang.String");
                setOrThrow(this::setMetadata,json::getString,"METADATA","java.lang.String");
                setOrThrow(this::setLanguage,json::getString,"LANGUAGE","java.lang.String");
                setOrThrow(this::setCreatedAt,key -> {String s = json.getString(key); return s==null?null:java.time.LocalDateTime.parse(s);},"CREATED_AT","java.time.LocalDateTime");
                setOrThrow(this::setCreatedBy,json::getString,"CREATED_BY","java.lang.String");
                setOrThrow(this::setUpdatedAt,key -> {String s = json.getString(key); return s==null?null:java.time.LocalDateTime.parse(s);},"UPDATED_AT","java.time.LocalDateTime");
                setOrThrow(this::setUpdatedBy,json::getString,"UPDATED_BY","java.lang.String");
                return this;
        }


        @Override
        public default io.vertx.core.json.JsonObject toJson() {
                io.vertx.core.json.JsonObject json = new io.vertx.core.json.JsonObject();
                json.put("KEY",getKey());
                json.put("SERIAL",getSerial());
                json.put("NAME",getName());
                json.put("CODE",getCode());
                json.put("TYPE",getType());
                json.put("PHASE",getPhase());
                json.put("MODEL_ID",getModelId());
                json.put("MODEL_KEY",getModelKey());
                json.put("MODEL_CATEGORY",getModelCategory());
                json.put("MODEL_COMPONENT",getModelComponent());
                json.put("MODEL_CHILD",getModelChild());
                json.put("QUANTITY",getQuantity());
                json.put("FLOW_DEFINITION_KEY",getFlowDefinitionKey());
                json.put("FLOW_DEFINITION_ID",getFlowDefinitionId());
                json.put("FLOW_INSTANCE_ID",getFlowInstanceId());
                json.put("FLOW_END",getFlowEnd());
                json.put("TITLE",getTitle());
                json.put("DESCRIPTION",getDescription());
                json.put("CATALOG",getCatalog());
                json.put("CATEGORY",getCategory());
                json.put("CATEGORY_SUB",getCategorySub());
                json.put("OWNER",getOwner());
                json.put("SUPERVISOR",getSupervisor());
                json.put("OPEN_BY",getOpenBy());
                json.put("OPEN_GROUP",getOpenGroup());
                json.put("OPEN_AT",getOpenAt()==null?null:getOpenAt().toString());
                json.put("CANCEL_BY",getCancelBy());
                json.put("CANCEL_AT",getCancelAt()==null?null:getCancelAt().toString());
                json.put("CLOSE_BY",getCloseBy());
                json.put("CLOSE_AT",getCloseAt()==null?null:getCloseAt().toString());
                json.put("CLOSE_SOLUTION",getCloseSolution());
                json.put("CLOSE_CODE",getCloseCode());
                json.put("CLOSE_KB",getCloseKb());
                json.put("ACTIVE",getActive());
                json.put("SIGMA",getSigma());
                json.put("METADATA",getMetadata());
                json.put("LANGUAGE",getLanguage());
                json.put("CREATED_AT",getCreatedAt()==null?null:getCreatedAt().toString());
                json.put("CREATED_BY",getCreatedBy());
                json.put("UPDATED_AT",getUpdatedAt()==null?null:getUpdatedAt().toString());
                json.put("UPDATED_BY",getUpdatedBy());
                return json;
        }

}
