banner 新增 countryCode 字段

This commit is contained in:
tianfeng 2026-01-28 16:51:59 +08:00
parent cdeb90f4a3
commit eccdd57045
11 changed files with 62 additions and 19 deletions

View File

@ -25,6 +25,10 @@ public class SysBannerConfigQryCmd extends PageCommand {
*/ */
private String sysOrigin; private String sysOrigin;
private String platform;
private String countryCode;
/** /**
* 区域. * 区域.
*/ */

View File

@ -37,6 +37,10 @@ public class SysBannerConfigDTO extends DTO {
*/ */
private String sysOrigin; private String sysOrigin;
private String platform;
private String countryCode;
/** /**
* 封面. * 封面.
*/ */

View File

@ -45,6 +45,12 @@ public class SysBannerConfigCO implements Serializable {
*/ */
private String sysOrigin; private String sysOrigin;
private String platform;
private String countryId;
private String countryCode;
/** /**
* 小封面图. * 小封面图.
*/ */

View File

@ -7,7 +7,9 @@ import com.red.circle.framework.core.response.CommonErrorCode;
import com.red.circle.order.inner.endpoint.OrderPurchaseHistoryClient; import com.red.circle.order.inner.endpoint.OrderPurchaseHistoryClient;
import com.red.circle.other.app.convertor.sys.SysConfigAppConvertor; import com.red.circle.other.app.convertor.sys.SysConfigAppConvertor;
import com.red.circle.other.app.dto.clientobject.sys.BannerCO; import com.red.circle.other.app.dto.clientobject.sys.BannerCO;
import com.red.circle.other.domain.gateway.user.UserProfileGateway;
import com.red.circle.other.domain.gateway.user.ability.UserRegionGateway; import com.red.circle.other.domain.gateway.user.ability.UserRegionGateway;
import com.red.circle.other.domain.model.user.UserProfile;
import com.red.circle.other.infra.database.cache.entity.sys.BannerCache; import com.red.circle.other.infra.database.cache.entity.sys.BannerCache;
import com.red.circle.other.infra.database.cache.service.other.BannerCacheService; import com.red.circle.other.infra.database.cache.service.other.BannerCacheService;
import com.red.circle.other.infra.database.rds.entity.sys.BannerConfig; import com.red.circle.other.infra.database.rds.entity.sys.BannerConfig;
@ -34,27 +36,32 @@ public class BannerQryExe {
private final BannerConfigService bannerConfigService; private final BannerConfigService bannerConfigService;
private final SysConfigAppConvertor sysConfigAppConvertor; private final SysConfigAppConvertor sysConfigAppConvertor;
private final OrderPurchaseHistoryClient orderPurchaseHistoryClient; private final OrderPurchaseHistoryClient orderPurchaseHistoryClient;
private final UserProfileGateway userProfileGateway;
public List<BannerCO> execute(AppExtCommand cmd) { public List<BannerCO> execute(AppExtCommand cmd) {
UserProfile userProfile = userProfileGateway.getByUserId(cmd.requiredReqUserId());
String regionId = userRegionGateway.getRegionId(cmd.requiredReqUserId()); String regionId = userRegionGateway.getRegionId(cmd.requiredReqUserId());
ResponseAssert.notBlank(CommonErrorCode.REGION_NOT_SUPPORTED_ERROR, regionId); ResponseAssert.notBlank(CommonErrorCode.REGION_NOT_SUPPORTED_ERROR, regionId);
List<BannerCache> list = bannerCacheService.listBannerCacheBySysOrigin(cmd.requireReqSysOrigin(), () -> { String reqClient = cmd.getReqClient().getClientName();
List<BannerConfig> configs = listEffectiveCache(cmd.requireReqSysOrigin(), cmd.getReqClient().getClientName()); String sysOrigin = cmd.requireReqSysOrigin();
String countryCode = userProfile.getCountryCode();
List<BannerCache> list = bannerCacheService.listBannerCacheBySysOrigin(sysOrigin, reqClient, countryCode, () -> {
List<BannerConfig> configs = listEffectiveCache(sysOrigin, reqClient, countryCode);
if (CollectionUtils.isEmpty(configs)) { if (CollectionUtils.isEmpty(configs)) {
return Lists.newArrayList(); return Lists.newArrayList();
} }
return sysConfigAppConvertor.toListBannerCache(configs); return sysConfigAppConvertor.toListBannerCache(configs);
}).stream().filter( }).stream()
bannerCache -> StringUtils.isBlank(bannerCache.getRegions()) || bannerCache.getRegions() .filter(bannerCache -> StringUtils.isBlank(bannerCache.getRegions()) || bannerCache.getRegions().contains(regionId))
.contains(regionId)) .filter(bannerCache -> StringUtils.isBlank(bannerCache.getCountryCode()) || bannerCache.getCountryCode().contains(countryCode))
.toList(); .toList();
return sysConfigAppConvertor.toListBannerCO(list); return sysConfigAppConvertor.toListBannerCO(list);
} }
private List<BannerConfig> listEffectiveCache(String sysOrigin, String platform) { private List<BannerConfig> listEffectiveCache(String sysOrigin, String platform, String countryCode) {
return bannerConfigService.listEffective(sysOrigin, platform); return bannerConfigService.listEffective(sysOrigin, platform, countryCode);
} }
} }

View File

@ -33,6 +33,10 @@ public class BannerCache implements Serializable {
*/ */
private String sysOrigin; private String sysOrigin;
private String platform;
private String countryCode;
/** /**
* 封面. * 封面.
*/ */

View File

@ -18,7 +18,8 @@ public interface BannerCacheService {
* @param orElsePut 否则put * @param orElsePut 否则put
* @return banner * @return banner
*/ */
List<BannerCache> listBannerCacheBySysOrigin(String sysOrigin, VoidCallable<List<BannerCache>> orElsePut); List<BannerCache> listBannerCacheBySysOrigin(String sysOrigin, String reqClient, String countryCode,
VoidCallable<List<BannerCache>> orElsePut);
/** /**
* 移除banner. * 移除banner.

View File

@ -27,15 +27,15 @@ public class BannerCacheServiceImpl implements BannerCacheService {
private final RedisService redisService; private final RedisService redisService;
private String getBannerKey(String sysOrigin) { private String getBannerKey(String sysOrigin, String reqClient, String countryCode) {
return sysOrigin + "_" + BannerKeys.BANNER.name(); return String.join("_", BannerKeys.BANNER.name(), sysOrigin, reqClient, countryCode);
} }
@Override @Override
public List<BannerCache> listBannerCacheBySysOrigin(String sysOrigin, VoidCallable<List<BannerCache>> orElsePut) { public List<BannerCache> listBannerCacheBySysOrigin(String sysOrigin, String reqClient, String countryCode, VoidCallable<List<BannerCache>> orElsePut) {
return Optional return Optional
.ofNullable(redisService.hashGet(BannerKeys.BANNER.getKey(), getBannerKey(sysOrigin + "22"), .ofNullable(redisService.hashGet(BannerKeys.BANNER.getKey(), getBannerKey(sysOrigin, reqClient, countryCode),
new TypeReference<List<BannerCache>>() { new TypeReference<List<BannerCache>>() {
})) }))
.map(bannerCaches -> bannerCaches.stream() .map(bannerCaches -> bannerCaches.stream()
@ -49,7 +49,7 @@ public class BannerCacheServiceImpl implements BannerCacheService {
.orElseGet(() -> { .orElseGet(() -> {
List<BannerCache> bannerCaches = orElsePut.apply(); List<BannerCache> bannerCaches = orElsePut.apply();
if (CollectionUtils.isNotEmpty(bannerCaches)) { if (CollectionUtils.isNotEmpty(bannerCaches)) {
redisService.hashPut(BannerKeys.BANNER.getKey(), getBannerKey(sysOrigin), redisService.hashPut(BannerKeys.BANNER.getKey(), getBannerKey(sysOrigin, reqClient, countryCode),
bannerCaches); bannerCaches);
} }
return bannerCaches; return bannerCaches;

View File

@ -45,6 +45,12 @@ public class BannerConfig extends TimestampBaseEntity {
@TableField("platform") @TableField("platform")
private String platform; private String platform;
/**
* 国家编码
*/
@TableField("country_code")
private String countryCode;
/** /**
* 封面. * 封面.
*/ */

View File

@ -22,7 +22,7 @@ public interface BannerConfigService extends BaseService<BannerConfig> {
* @param sysOrigin 来源系统 * @param sysOrigin 来源系统
* @return ignore * @return ignore
*/ */
List<BannerConfig> listEffective(String sysOrigin, String platform); List<BannerConfig> listEffective(String sysOrigin, String platform, String countryCode);
PageResult<BannerConfig> pageBanner(SysBannerConfigQryCmd query); PageResult<BannerConfig> pageBanner(SysBannerConfigQryCmd query);

View File

@ -28,10 +28,15 @@ public class BannerConfigServiceImpl extends
BaseServiceImpl<BannerConfigDAO, BannerConfig> implements BannerConfigService { BaseServiceImpl<BannerConfigDAO, BannerConfig> implements BannerConfigService {
@Override @Override
public List<BannerConfig> listEffective(String sysOrigin, String platform) { public List<BannerConfig> listEffective(String sysOrigin, String platform, String countryCode) {
return query() return query()
.eq(BannerConfig::getSysOrigin, sysOrigin) .eq(BannerConfig::getSysOrigin, sysOrigin)
.in(BannerConfig::getPlatform, Arrays.asList(platform, "")) .and(StringUtils.isNotBlank(platform), wrapper ->
wrapper.in(BannerConfig::getPlatform, "", platform)
)
.and(StringUtils.isNotBlank(countryCode), wrapper ->
wrapper.in(BannerConfig::getCountryCode, "", countryCode)
)
.gt(BannerConfig::getExpiredTime, LocalDateTime.now()) .gt(BannerConfig::getExpiredTime, LocalDateTime.now())
.eq(BannerConfig::getShowcase, Boolean.TRUE) .eq(BannerConfig::getShowcase, Boolean.TRUE)
.orderByDesc(BannerConfig::getSort) .orderByDesc(BannerConfig::getSort)
@ -42,6 +47,12 @@ public class BannerConfigServiceImpl extends
public PageResult<BannerConfig> pageBanner(SysBannerConfigQryCmd query) { public PageResult<BannerConfig> pageBanner(SysBannerConfigQryCmd query) {
return query() return query()
.eq(StringUtils.isNotBlank(query.getSysOrigin()), BannerConfig::getSysOrigin, query.getSysOrigin()) .eq(StringUtils.isNotBlank(query.getSysOrigin()), BannerConfig::getSysOrigin, query.getSysOrigin())
.and(StringUtils.isNotBlank(query.getPlatform()), wrapper ->
wrapper.in(BannerConfig::getPlatform, "", query.getPlatform())
)
.and(StringUtils.isNotBlank(query.getCountryCode()), wrapper ->
wrapper.in(BannerConfig::getCountryCode, "", query.getCountryCode())
)
.eq(Objects.equals(query.getShowcase(), 1), BannerConfig::getShowcase, Boolean.TRUE) .eq(Objects.equals(query.getShowcase(), 1), BannerConfig::getShowcase, Boolean.TRUE)
.gt(Objects.equals(query.getShowcase(), 1), BannerConfig::getExpiredTime, TimestampUtils.now()) .gt(Objects.equals(query.getShowcase(), 1), BannerConfig::getExpiredTime, TimestampUtils.now())
.eq(Objects.equals(query.getShowcase(), 2), BannerConfig::getShowcase, Boolean.FALSE) .eq(Objects.equals(query.getShowcase(), 2), BannerConfig::getShowcase, Boolean.FALSE)

View File

@ -55,7 +55,7 @@ public class SysBannerConfigClientServiceImpl implements SysBannerConfigClientSe
public void updateBanner(SysBannerConfigDTO bannerConfigDTO) { public void updateBanner(SysBannerConfigDTO bannerConfigDTO) {
BannerConfig bannerConfig = getSysBannerConfig(bannerConfigDTO); BannerConfig bannerConfig = getSysBannerConfig(bannerConfigDTO);
ResponseAssert.isTrue(CommonErrorCode.UPDATE_FAILURE, ResponseAssert.isTrue(CommonErrorCode.UPDATE_FAILURE,
bannerConfigService.updateInfo(bannerConfig)); bannerConfigService.updateSelectiveById(bannerConfig));
bannerCacheService.remove(bannerConfigDTO.getSysOrigin()); bannerCacheService.remove(bannerConfigDTO.getSysOrigin());
} }