package org.dromara.payment.bill.domain.bo;

import org.dromara.payment.bill.domain.MerBillDetail;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.payment.common.domain.BusId;

/**
 * 账单明细业务对象 mer_bill_detail
 *
 * @author LionLi
 * @date 2024-04-08
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = MerBillDetail.class, reverseConvertGenerate = false)
public class MerBillDetailBo extends BusId {

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

    /**
     * 项目子编号
     */
    private String cno;

    /**
     * 流水号(系统内部编号)
     */
    private String busNo;

    /**
     * 账单批次号
     */
    private String billNo;

    /**
     * 账单id
     */
    private Long billId;

    /**
     * 代发批次id(多个逗号分隔)
     */
    private String billIds;

    /**
     * 自雇者id
     */
    private Long workerId;

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

    /**
     * 手机号
     */
    private String workerPhone;

    /**
     * 自雇者报名id
     */
    private Long workerEnrollId;

    /**
     * 身份证号
     */
    @NotBlank(message = "身份证号不能为空", groups = { AddGroup.class, EditGroup.class })
    private String cardId;

    /**
     * 银行类型（字典）
     */
    private String bankType;

    /**
     * 银行账号
     */
    private String bankCard;

    /**
     * 银行账户id
     */
    private Integer bankAccId;

    /**
     * 开户行
     */
    private String bankCheque;

    /**
     * 账单金额(个人应得)
     */
    @NotNull(message = "账单金额(个人应得)不能为空", groups = { AddGroup.class, EditGroup.class })
    private BigDecimal moneyDecimal;

    private Long money;

    /**
     * 个税
     */
    private Long raise;

    /**
     * 实收金额(账单金额-个人承担的服务费)（到手金额）
     */
    private Long amount;

    /**
     * 支付结果（0:待支付 1:成功 2:失败 3:支付中 4:已取消）
     */
    private Integer payStatus;

    /**
     * 支付时间
     */
    private Date payTime;

    /**
     * 支付结果备注
     */
    private String payRemark;

    /**
     * B2C回执单地址
     */
    private String payReceipt;

    /**
     * 服务费(分)
     */
    private Long serviceChargeMoney;


    /***
     * 企业支付(分)
     */
    private Long qyzf;


    /**
     * 添加时间
     */
    private Date addTime;

    /**
     * 交易号(银行流水号)
     */
    private String bankNo;

    /**
     * 计算代理费金额（公司开票金额C/个人应得金额P）
     */
    private Long agentMoney;

    /**
     * 是否退款（0:否 1:是）
     */
    private Integer isRefund;

    /**
     * 退款时间
     */
    private Date refundTime;

    /**
     * 三方订单号
     */
    private String outNo;

    /**
     * 是否三方订单（0:否 1:是）
     */
    private Long isOut;

    /**
     * 结算通道
     */
    @NotBlank(message = "结算通道不能为空", groups = { AddGroup.class, EditGroup.class })
    private String passage;

    /**
     * 项目id
     */
    private Long taskId;

    /**
     * 项目编号
     */
    private String taskNo;

    /**
     * 业务类型(1:委托代征，2:自然人代开，3:个体户注册 4:临时税务登记 5：资金代发 6：派遣&外包
     */
    private Integer busType;

    /**
     * B2B回执单地址
     */
    private String payReceiptB2b;

    /**
     * 产品编号
     */
    private String proNo;

    /**
     * 计费模式(1:个人应得计费、2:开票金额计费)
     */
    private Integer chargeMode;

    /**
     * 运营商服务费率
     */
    private BigDecimal opServiceChargeRate;

    /**
     * 运营商分润(分)
     */
    private Long opServiceChargeMoney;

    /**
     * 孵化中心服务费率
     */
    private BigDecimal fhzxServiceChargeRate;

    /**
     * 孵化中心收益(分)
     */
    private Long fhzxServiceChargeMoney;

    /**
     * 孵化中心id
     */
    private Long fhzxChannelId;

    /**
     * 总监服务费率
     */
    private BigDecimal zjServiceChargeRate;

    /**
     * 总监收益(分)
     */
    private Long zjServiceChargeMoney;

    /**
     * 总监id
     */
    private Long zjChannelId;

    /**
     * 业务员服务费率
     */
    private BigDecimal ywyServiceChargeRate;

    /**
     * 业务员收益(分)
     */
    private Long ywyServiceChargeMoney;

    /**
     * 业务员id
     */
    private Long ywyChannelId;

    /**
     * 分润状态(1:冻结中 2:待解冻 3:分润成功 4:分润撤消 5:分润异常)
     */
    private Integer channelHalveStatus;

    /**
     * 转账附言
     */
    private String billRemark;


    private String errorMsg;

    private String password;

    private String payStatuStrs;

}
