
package com.jeequan.jeepay.db.entity;

import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.jeequan.jeepay.core.model.BaseModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.apache.commons.lang3.StringUtils;

import java.util.Date;

/**
 * <p>
 * 直付通二级商户结算记录表
 * </p>
 *
 * @author [mybatis plus generator]
 * @since 2021-12-06
 */
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("t_pay_alizft_sett_record")
public class PayAlizftSettRecord extends BaseModel {

    public static final LambdaQueryWrapper<PayAlizftSettRecord> gw(){
        return new LambdaQueryWrapper<>();
    }

    private static final long serialVersionUID=1L;

    /** 直付通结算方式 0-自动结算 1-手动结算 **/
    public static Byte ZFT_SETT_TYPE_AUTO = 0;
    public static Byte ZFT_SETT_TYPE_MANUAL = 1;

    /** 结算状态 1-待结算 2-结算中 3-结算成功 4-结算失败 5-限流待重试 **/
    public final static byte ZFT_SETT_STATUS_NOT = 1;
    public final static byte ZFT_SETT_STATUS_ING = 2;
    public final static byte ZFT_SETT_STATUS_SUCCESS = 3;
    public final static byte ZFT_SETT_STATUS_FAIL = 4;
    public final static byte ZFT_SETT_STATUS_WAIT_RETRY = 5;

    /**
     * 结算编号
     */
    @TableId(type = IdType.INPUT)
    private String settleNo;

    /**
     * 支付订单号
     */
    private String payOrderId;

    /**
     * 应用ID
     */
    private String appId;

    /**
     * 商户号
     */
    private String mchNo;

    /**
     * 商户名称
     */
    private String mchName;

    /**
     * 服务商号
     */
    private String agentNo;

    /**
     * 服务商号
     */
    private String isvNo;

    /**
     * 支付金额,单位分
     */
    private Long payOrderAmount;

    /**
     * 商品标题
     */
    private String payOrderSubject;

    /**
     * 渠道订单号 如果为空有可能是补单任务
     */
    private String channelOrderNo;

    /**
     * 二级商户ID
     */
    private String subMchId;

    /**
     * 结算状态,1-待结算 2-结算中 3-结算成功 4-结算失败 5-限流待重试
     */
    private Byte state;

    /**
     * 结算时间
     */
    private Date settTime;

    /**
     * 重试次数
     */
    private Integer retryCount;

    /**
     * 调起接口信息
     */
    private String applyInfo;

    /**
     * 创建时间
     */
    private Date createdAt;

    /**
     * 更新时间
     */
    private Date updatedAt;

    /** 拼接申请数据  **/
    public void appendApplyInfo(String oldVal, String applyResult) {

        JSONArray array = new JSONArray();

        if(StringUtils.isNotEmpty(oldVal)){
            array = JSONArray.parseArray(oldVal);
        }

        if(applyResult == null){
            return ;
        }

        JSONObject jsonObject = new JSONObject();
        jsonObject.put("applyTime", DateUtil.now());
        jsonObject.put("applyResult", applyResult);
        array.add(jsonObject);
        this.applyInfo = array.toJSONString();
    }
}
