package com.hfkj.openapi.v1.model.request;

import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.*;
import java.math.BigDecimal;

/**
 * 请求交易聚合主扫模型
 * @className: TradePreorderModel
 * @author: HuRui
 * @date: 2023/5/23
 **/
@Data
public class RequestTradePreorderModel {

    /**
     * 商户号
     */
    @NotBlank(message = "商户号必填项")
    private String merchantNo;

    /**
     * 商户交易单号
     */
    @NotBlank(message = "商户交易单号必填项")
    @Length(min = 6, max = 50, message = "商户交易单号长度限制6至50位字符串长度")
    private String outTradeNo;

    /**
     * 支付方式
     */
    @NotBlank(message = "支付方式必填项")
    private String payMode;

    /**
     * 接入方式
     */
    @NotBlank(message = "接入方式必填项")
    private String transType;

    /**
     * 交易金额
     */
    @DecimalMax(value = "99999999", message = "交易最大金额99999999元")
    @DecimalMin(value = "0.01", message = "交易最小金额0.01元")
    @NotBlank(message = "交易金额必填项")
    private String totalAmount;

    /**
     * 订单标题
     */
    @Length(max = 30, message = "订单标题长度限制在30字符以内")
    private String subject;

    /**
     * 通知地址
     */
    @Length(max = 300, message = "通知地址长度限制在300字符以内")
    private String notifyUrl;

    /**
     * 用户id
     */
    private String userId;

    /**
     * 子商户公众账号ID
     */
    private String subAppid;

    /**
     * 预下单有效时间
     */
    @Range(min = 1, max = 60,message = "预下单有效期可设置在1至60分钟之内")
    private Integer timeoutExpress;

    /**
     * 附加域
     */
    @Length(max = 128, message = "附加域限制在128位字符以内")
    private String attach;

    @Length(max = 20, message = "特殊字段限制20位字符以内")
    private String specialField;

    /**
     * 分账  0：不分账   1：需分账
     */
    @Range(min = 0, max = 1,message = "分账类型错误")
    @NotBlank(message = "分账类型必填项")
    private String profitSharing;

    /**
     * 签名参数
     */
    @NotBlank(message = "签名必填项")
    private String sign;

}
