package com.propertyManagement.business.domain.bo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.propertyManagement.common.core.validate.AddGroup;
import com.propertyManagement.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;

import java.util.Date;

import java.math.BigDecimal;
import com.propertyManagement.common.core.domain.BaseEntity;
import org.springframework.format.annotation.DateTimeFormat;

/**
 * 缴费记录业务对象 wx_pay_record
 *
 * @author liushuai
 * @date 2025-05-14
 */

@Data
@EqualsAndHashCode(callSuper = true)
public class WxPayRecordBo extends BaseEntity {

    /**
     * 记录主键
     */
    @NotNull(message = "记录主键不能为空", groups = { EditGroup.class })
    private Long recordId;

    /**
     * 用户主键
     */
    @NotNull(message = "用户主键不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long userId;

    /**
     * 用户名称
     */
    @NotBlank(message = "用户名称不能为空", groups = { AddGroup.class, EditGroup.class })
    private String userName;

    /**
     * 小区名称
     */
    @NotNull(message = "小区名称不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long communityId;

    /**
     * 小区名称
     */
    private String communityName;

    /**
     * 业主ID
     */
    @NotBlank(message = "业主ID不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long proprietorId;

    /**
     * 业主名称
     */
    @NotBlank(message = "业主名称不能为空", groups = { AddGroup.class, EditGroup.class })
    private String proprietorName;

    /**
     * 业主房间
     */
    @NotBlank(message = "业主房间不能为空", groups = { AddGroup.class, EditGroup.class })
    private String room;

    /**
     * 登记车牌
     */
    @NotBlank(message = "登记车牌不能为空", groups = { AddGroup.class, EditGroup.class })
    private String plateNumber;

    /**
     * 账单主键
     */
    @NotNull(message = "账单主键不能为空", groups = { AddGroup.class, EditGroup.class })
    private Long orderId;

    /**
     * 订单类型
     */
    @NotBlank(message = "订单类型不能为空", groups = { AddGroup.class, EditGroup.class })
    private Integer orderType;

    /**
     * 支付渠道
     */
    @NotBlank(message = "支付渠道不能为空", groups = { AddGroup.class, EditGroup.class })
    private String payChannelCode;

    /**
     * 支付商户code
     */
    @NotBlank(message = "支付商户code不能为空", groups = { AddGroup.class, EditGroup.class })
    private String payMchCode;

    /**
     * 支付类型
     */
    @NotBlank(message = "支付类型不能为空", groups = { AddGroup.class, EditGroup.class })
    private String payTradeType;

    /**
     * 支付应用
     */
    @NotBlank(message = "支付应用不能为空", groups = { AddGroup.class, EditGroup.class })
    private String payAppCode;

    /**
     * 支付业务
     */
    @NotBlank(message = "支付业务不能为空", groups = { AddGroup.class, EditGroup.class })
    private String payBizCode;

    /**
     * 订单金额
     */
    @NotNull(message = "订单金额不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal payAmount;

    /**
     * 支付状态
     */
    private Integer payState;

    /**
     * 平台支付流水号
     */
    private String outTradeNo;

    /**
     * 创建开始时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createStartTime;

    /**
     * 创建结束时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createEndTime;

    /**
     * 缴费开始日期
     */
    private Date startTime;

    /**
     * 缴费结束日期
     */
    private Date endTime;

}
