|
@@ -262,12 +262,7 @@ public class OrderInvoiceService {
|
|
|
new LambdaQueryWrapper<InfoUser>().eq(InfoUser::getUserId, order.getUserId()));
|
|
new LambdaQueryWrapper<InfoUser>().eq(InfoUser::getUserId, order.getUserId()));
|
|
|
String phone = u != null && StrUtil.isNotBlank(u.getPhone()) ? u.getPhone() : "會員";
|
|
String phone = u != null && StrUtil.isNotBlank(u.getPhone()) ? u.getPhone() : "會員";
|
|
|
dto.setBuyerName(phone);
|
|
dto.setBuyerName(phone);
|
|
|
- if ("MEMBER".equals(row.getInvoiceChoice())) {
|
|
|
|
|
- // 会员载具:载具号=会员手机号;同步落库保持发票行载具信息完整
|
|
|
|
|
- dto.setCarrierNum(phone);
|
|
|
|
|
- row.setCarrierType("2");
|
|
|
|
|
- row.setCarrierNum(phone);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ // 【决定 2026-08-05】MEMBER 不再设 carrierType=2 电子载具(见 buildAutoIssueDto 决策备注),走 PrintFlag=Y 纸本;会员手机号已写入 BuyerName。
|
|
|
}
|
|
}
|
|
|
// 出餐触发开票:在意图行上落结果,并标记已触发(与 invoiceStatus 独立)
|
|
// 出餐触发开票:在意图行上落结果,并标记已触发(与 invoiceStatus 独立)
|
|
|
row.setInvoiceCategory(dto.getCategory());
|
|
row.setInvoiceCategory(dto.getCategory());
|
|
@@ -291,9 +286,11 @@ public class OrderInvoiceService {
|
|
|
dto.setCarrierNum(intent.getCarrierNum());
|
|
dto.setCarrierNum(intent.getCarrierNum());
|
|
|
break;
|
|
break;
|
|
|
case "MEMBER":
|
|
case "MEMBER":
|
|
|
- // 会员载具 ezPay 类型 2;载具号(会员手机号)与买方名由 autoIssue 取 InfoUser.phone 回填
|
|
|
|
|
|
|
+ // 【决定 2026-08-05】会员载具(MEMBER) 走 PrintFlag=Y 索取纸本,不传 ezPay CarrierType=2 电子载具。
|
|
|
|
|
+ // 原因:ezPay 电子载具(type2+PrintFlag=N)强制要 BuyerEmail,缺失回 INV10013;且「载具+PrintFlag=Y」
|
|
|
|
|
+ // 法定互斥(一票两份)。故不设 carrierType,buildIssueData 走「无载具→PrintFlag=Y」分支,ezPay 不校验邮箱。
|
|
|
|
|
+ // 会员身份由 BuyerName=手机号 + invoice_choice=MEMBER 体现,供会员发票夹归集。
|
|
|
dto.setCategory("B2C");
|
|
dto.setCategory("B2C");
|
|
|
- dto.setCarrierType("2");
|
|
|
|
|
break;
|
|
break;
|
|
|
case "LOVE_CODE":
|
|
case "LOVE_CODE":
|
|
|
dto.setCategory("DONATION");
|
|
dto.setCategory("DONATION");
|
|
@@ -611,7 +608,7 @@ public class OrderInvoiceService {
|
|
|
}
|
|
}
|
|
|
break;
|
|
break;
|
|
|
case "MEMBER":
|
|
case "MEMBER":
|
|
|
- // 会员载具:载具号=会员手机号(出餐 autoIssue 时取 InfoUser.phone),免联网验真、免格式校验
|
|
|
|
|
|
|
+ // 会员载具走 PrintFlag=Y 纸本(不传 ezPay 载具,见 buildAutoIssueDto 决策备注),免联网验真、免格式校验、免邮箱
|
|
|
break;
|
|
break;
|
|
|
case "LOVE_CODE":
|
|
case "LOVE_CODE":
|
|
|
if (StrUtil.isBlank(loveCode) || !loveCode.matches("^\\d{3,7}$")) {
|
|
if (StrUtil.isBlank(loveCode) || !loveCode.matches("^\\d{3,7}$")) {
|
|
@@ -668,7 +665,7 @@ public class OrderInvoiceService {
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 场景入参校验(service 内强校验,拦截非法请求不调 ezPay)。对齐 ezPay 开票模型:
|
|
* 场景入参校验(service 内强校验,拦截非法请求不调 ezPay)。对齐 ezPay 开票模型:
|
|
|
- * B2B:统编(8位)+邮箱必填、无载具;B2C:载具(0/1/2)+号码必填;会员载具(2)载具号=会员手机号、不收邮箱。
|
|
|
|
|
|
|
+ * B2B:统编(8位)+邮箱必填、无载具;B2C:载具(0/1/2)+号码必填;会员载具(MEMBER)走 PrintFlag=Y 纸本、不传载具不收邮箱(见 buildAutoIssueDto 2026-08-05 决策)。
|
|
|
*/
|
|
*/
|
|
|
private void validateInvoiceInput(ApplyInvoiceDto dto) {
|
|
private void validateInvoiceInput(ApplyInvoiceDto dto) {
|
|
|
if ("B2B".equals(dto.getCategory())) {
|
|
if ("B2B".equals(dto.getCategory())) {
|