package com.ruoyi.system.domain.dto; import jakarta.validation.constraints.Email; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.Pattern; import lombok.Data; /** * 客户申请开票入参。 * * @author ruoyi * @date 2026-06-16 */ @Data public class ApplyInvoiceDto { /** 订单 id(须为当前登录客户的订单、state=3、payStatus=1) */ @NotNull(message = "订单不能为空") private Long orderId; /** 发票类型 B2C/B2B */ @NotBlank(message = "发票类型不能为空") @Pattern(regexp = "B2C|B2B|DONATION", message = "发票类型只能为 B2C、B2B 或 DONATION") private String category; /** 买方名称(B2B 公司名 / B2C 客户名;捐赠发票可不填,service 内按场景校验/回填) */ private String buyerName; /** 买方统一编号(统编 8 码;B2B 必填,service 内强校验;B2C 不传) */ @Pattern(regexp = "\\d{8}", message = "统一编号必须为 8 位数字") private String buyerUbn; /** 买方邮箱(B2B 必填;B2C 选 ezPay会员载具(2)时不收、其余可空) */ @Email(message = "邮箱格式不正确") private String buyerEmail; /** 载具类型 0手机条码/1自然人凭证/2ezPay会员(B2C 必填,B2B 不传) */ private String carrierType; /** 载具号码(carrierType 非空时必填,service 内校验) */ private String carrierNum; /** 捐赠码(爱心码 3-7 位数字;category=B2C 且非空 → 捐赠分支,与载具/统编互斥,service 内校验) */ private String loveCode; }