diff --git a/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/command/pay/web/PayCountryAliasResolver.java b/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/command/pay/web/PayCountryAliasResolver.java index a08ee8de..e8ac6e2f 100644 --- a/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/command/pay/web/PayCountryAliasResolver.java +++ b/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/command/pay/web/PayCountryAliasResolver.java @@ -49,6 +49,14 @@ public class PayCountryAliasResolver { return getMappedUsablePayCountryByCountryId(countryId); } + public PayCountry resolvePayCountryByCountryId(Long countryId) { + PayCountry usablePayCountry = resolveUsablePayCountryByCountryId(countryId); + if (Objects.nonNull(usablePayCountry)) { + return usablePayCountry; + } + return getShelfPayCountryByCountryId(countryId); + } + private PayCountry getMappedUsablePayCountryByCountryId(Long countryId) { SysCountryCodeDTO countryCode = getCountryCodeById(countryId); if (Objects.isNull(countryCode)) { @@ -114,6 +122,21 @@ public class PayCountryAliasResolver { .orElse(null); } + private PayCountry getShelfPayCountryByCountryId(Long countryId) { + if (Objects.isNull(countryId)) { + return null; + } + + return payCountryService.query() + .eq(PayCountry::getShelf, Boolean.TRUE) + .eq(PayCountry::getCountryId, countryId) + .orderByDesc(PayCountry::getSort) + .list() + .stream() + .findFirst() + .orElse(null); + } + private boolean isUsablePayCountry(PayCountry payCountry) { return Objects.nonNull(payCountry) && StringUtils.isNotBlank(payCountry.getCurrency()) diff --git a/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/command/pay/web/PayWebApplicationCommodityV2QueryExe.java b/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/command/pay/web/PayWebApplicationCommodityV2QueryExe.java index a3f50b40..64f31d79 100644 --- a/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/command/pay/web/PayWebApplicationCommodityV2QueryExe.java +++ b/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/command/pay/web/PayWebApplicationCommodityV2QueryExe.java @@ -120,8 +120,10 @@ public class PayWebApplicationCommodityV2QueryExe { private List getPayApplicationCommodities( PayWebApplicationCommodityCmd cmd) { - if (Objects.equals(cmd.requireReqSysOriginChildEnum(), SysOriginPlatformEnum.YOLO) - || StringUtils.isNotBlank(cmd.getRegionId())) { + // Yumi/LIKEI H5 已经先按用户资料拿到国家,商品应按国家查;regionId 只保留给旧的区域商品链路. + if (Objects.equals(cmd.requireReqSysOriginChildEnum(), SysOriginPlatformEnum.YOLO) + || (StringUtils.isNotBlank(cmd.getRegionId()) + && StringUtils.isBlank(cmd.getCountryCode()))) { ResponseAssert .isTrue(CommonErrorCode.NOT_SUPPORTED_REGION, StringUtils.isNotBlank(cmd.getRegionId())); @@ -179,7 +181,7 @@ public class PayWebApplicationCommodityV2QueryExe { sysCountryCodeClient.getByCode(normalizedCountryCode)); ResponseAssert.notNull(CommonErrorCode.NOT_SUPPORTED_REGION, countryCode); // H5 只传用户国家码;这里仅把真实国家转成商品表使用的支付国家ID,是否开放支付国家由 H5 JSON 控制. - return payCountryAliasResolver.resolveUsablePayCountryByCountryId(countryCode.getId()); + return payCountryAliasResolver.resolvePayCountryByCountryId(countryCode.getId()); } private List getPayChannels(List payChannels, diff --git a/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/command/pay/web/UserProfileAndCountryQueryExe.java b/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/command/pay/web/UserProfileAndCountryQueryExe.java index 8d6f47d7..b0804144 100644 --- a/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/command/pay/web/UserProfileAndCountryQueryExe.java +++ b/rc-service/rc-service-order/order-application/src/main/java/com/red/circle/order/app/command/pay/web/UserProfileAndCountryQueryExe.java @@ -103,7 +103,7 @@ public class UserProfileAndCountryQueryExe { ResponseAssert.notNull(CommonErrorCode.NOT_SUPPORTED_REGION, countryCode); PayCountry compatiblePayCountry = payCountryAliasResolver - .resolveUsablePayCountryByCountryId(countryCode.getId()); + .resolvePayCountryByCountryId(countryCode.getId()); // LIKEI/Yumi 的支付国家开放由 H5 JSON 控制;这里仅返回用户真实国家,商品接口再按国家码查该国商品. PayCountryCO payCountryCO = new PayCountryCO()