package com.cpop.jambox.business.entity;

import com.cpop.core.base.entity.BaseEntity;
import com.cpop.core.base.entity.BaseInsertListener;
import com.cpop.core.base.entity.BaseUpdateListener;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Date;
import java.time.LocalDateTime;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import lombok.experimental.Accessors;

/**
 * 果酱-放心学-订单拓展 实体类。
 *
 * @author DB
 * @since 2023-12-14
 */
@Data
@EqualsAndHashCode(callSuper=false)
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
@Table(value = "cp_j_easy_learn_order_extend", onInsert = BaseInsertListener.class, onUpdate = BaseUpdateListener.class, mapperGenerateEnable = false)
public class EasyLearnOrderExtend extends BaseEntity implements Serializable {

    /**
     * 放心学订单id
     */
    @Id
    private String orderId;

    /**
     * 【目前用户进行到的计划详情序号】 序号从1开始，顺序按照创建计划时传入的计划详情顺序，0代表无任何详情开始使用
     */
    private Integer goingDetailNo;

    /**
     * 计划id(系统内部计划id)
     */
    private String planId;

    /**
     * 签约计划id
     */
    private String signPlanId;

    /**
     * 下期还款日
     */
    private Date nextRepaymentDate;

    /**
     * 下期还款金额
     */
    private BigDecimal nextRepaymentAmount;

    /**
     * 子商户id
     */
    private String subMchId;

    /**
     * 【计划签约状态】 计划签约状态
     * 可选取值：
     * UNSIGNED: 用户未签约
     * SIGNED: 用户已签约
     * SIGN_PLAN_CANCEL: 签约计划已取消
     * COMPLETE: 签约计划的所有计划详情已经全部完成
     * EXPIRE: 签约计划已过期
     */
    private Integer extendStatus;

    /**
     * 【签约计划取消类型】 签约计划取消类型
     * 可选取值：
     * NOT_CANCEL: 用户已签约协议未取消
     * USER: 用户取消已签约的协议
     * MERCHANT: 商户取消已签约的协议
     * REVOKE_SERVICE: 用户解除服务授权时取消服务下的已签约协议
     */
    private Integer extendCancelType;

    /**
     * 取消时间
     */
    private LocalDateTime cancelTime;

    /**
     * 取消原因
     */
    private String cancelReason;

    /**
     * 逻辑删除（0否1是）
     */
    @Column(isLogicDelete = true)
    private Boolean isDelete;

}
