diff --git a/rc-service/rc-inner-api/other-inner/other-inner-model/src/main/java/com/red/circle/other/inner/model/dto/material/BadgeConfigDTO.java b/rc-service/rc-inner-api/other-inner/other-inner-model/src/main/java/com/red/circle/other/inner/model/dto/material/BadgeConfigDTO.java index 880bfd00..65d76e41 100644 --- a/rc-service/rc-inner-api/other-inner/other-inner-model/src/main/java/com/red/circle/other/inner/model/dto/material/BadgeConfigDTO.java +++ b/rc-service/rc-inner-api/other-inner/other-inner-model/src/main/java/com/red/circle/other/inner/model/dto/material/BadgeConfigDTO.java @@ -31,14 +31,19 @@ public class BadgeConfigDTO implements Serializable { @JsonSerialize(using = ToStringSerializer.class) private Long id; - /** - * 徽章类型. - */ - private String type; - - /** - * 徽章等级. - */ + /** + * 徽章类型. + */ + private String type; + + /** + * 展示类型: LONG 长徽章, SHORT 短徽章. + */ + private String displayType; + + /** + * 徽章等级. + */ private Integer badgeLevel; /** diff --git a/rc-service/rc-inner-api/other-inner/other-inner-model/src/main/java/com/red/circle/other/inner/model/dto/material/BadgeConfigDetailsDTO.java b/rc-service/rc-inner-api/other-inner/other-inner-model/src/main/java/com/red/circle/other/inner/model/dto/material/BadgeConfigDetailsDTO.java index f887fb81..07b8fbc8 100644 --- a/rc-service/rc-inner-api/other-inner/other-inner-model/src/main/java/com/red/circle/other/inner/model/dto/material/BadgeConfigDetailsDTO.java +++ b/rc-service/rc-inner-api/other-inner/other-inner-model/src/main/java/com/red/circle/other/inner/model/dto/material/BadgeConfigDetailsDTO.java @@ -43,14 +43,19 @@ public class BadgeConfigDetailsDTO implements Serializable { */ private String badgeName; - /** - * 徽章类型. - */ - private String type; - - /** - * 徽章key. - */ + /** + * 徽章类型. + */ + private String type; + + /** + * 展示类型: LONG 长徽章, SHORT 短徽章. + */ + private String displayType; + + /** + * 徽章key. + */ private String badgeKey; /** diff --git a/rc-service/rc-inner-api/other-inner/other-inner-model/src/main/java/com/red/circle/other/inner/model/dto/material/UseBadgeDTO.java b/rc-service/rc-inner-api/other-inner/other-inner-model/src/main/java/com/red/circle/other/inner/model/dto/material/UseBadgeDTO.java index fa22f61f..a7c982df 100644 --- a/rc-service/rc-inner-api/other-inner/other-inner-model/src/main/java/com/red/circle/other/inner/model/dto/material/UseBadgeDTO.java +++ b/rc-service/rc-inner-api/other-inner/other-inner-model/src/main/java/com/red/circle/other/inner/model/dto/material/UseBadgeDTO.java @@ -45,14 +45,19 @@ public class UseBadgeDTO implements Serializable { */ private String badgeName; - /** - * 徽章类型. - */ - private String type; - - /** - * 是否佩戴上 - */ + /** + * 徽章类型. + */ + private String type; + + /** + * 展示类型: LONG 长徽章, SHORT 短徽章. + */ + private String displayType; + + /** + * 是否佩戴上 + */ private Boolean use; /** diff --git a/rc-service/rc-inner-api/other-inner/other-inner-model/src/main/java/com/red/circle/other/inner/model/dto/user/props/UserUseBadgeDTO.java b/rc-service/rc-inner-api/other-inner/other-inner-model/src/main/java/com/red/circle/other/inner/model/dto/user/props/UserUseBadgeDTO.java index 26e4f898..20a11157 100644 --- a/rc-service/rc-inner-api/other-inner/other-inner-model/src/main/java/com/red/circle/other/inner/model/dto/user/props/UserUseBadgeDTO.java +++ b/rc-service/rc-inner-api/other-inner/other-inner-model/src/main/java/com/red/circle/other/inner/model/dto/user/props/UserUseBadgeDTO.java @@ -45,14 +45,19 @@ public class UserUseBadgeDTO implements Serializable { */ private String badgeName; - /** - * 徽章类型. - */ - private String type; - - - /** - * 是否佩戴上 + /** + * 徽章类型. + */ + private String type; + + /** + * 展示类型: LONG 长徽章, SHORT 短徽章. + */ + private String displayType; + + + /** + * 是否佩戴上 */ private Boolean use; diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/entity/badge/BadgeConfig.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/entity/badge/BadgeConfig.java index ea030775..3dc9b584 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/entity/badge/BadgeConfig.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/entity/badge/BadgeConfig.java @@ -36,12 +36,18 @@ public class BadgeConfig extends TimestampBaseEntity { /** * 徽章类型. */ - @TableField("type") - private String type; - - /** - * 徽章等级. - */ + @TableField("type") + private String type; + + /** + * 展示类型: LONG 长徽章, SHORT 短徽章. + */ + @TableField("display_type") + private String displayType; + + /** + * 徽章等级. + */ @TableField("badge_level") private Integer badgeLevel; diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/material/props/impl/PropsSourceClientServiceImpl.java b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/material/props/impl/PropsSourceClientServiceImpl.java index daa3a94f..ac2370d6 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/material/props/impl/PropsSourceClientServiceImpl.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/material/props/impl/PropsSourceClientServiceImpl.java @@ -51,6 +51,8 @@ public class PropsSourceClientServiceImpl implements PropsSourceClientService { private static final String BADGE_TYPE = PropsTypeEnum.BADGE.name(); private static final String DEFAULT_BADGE_SOURCE_TYPE = SysBadgeConfigTypeEnum.ACTIVITY.getName(); + private static final String BADGE_DISPLAY_TYPE_LONG = "LONG"; + private static final String BADGE_DISPLAY_TYPE_SHORT = "SHORT"; private final PropsResourcesCommon propsResourcesCommon; private final FamilyLevelConfigService familyLevelConfigService; @@ -194,6 +196,9 @@ public class PropsSourceClientServiceImpl implements PropsSourceClientService { } JSONObject expand = parseExpand(dto.getExpand()); String badgeSourceType = normalizeBadgeSourceType(expand.getString("badgeType")); + String badgeDisplayType = normalizeBadgeDisplayType( + firstNotBlank(expand.getString("badgeDisplayType"), expand.getString("displayType")), + badgeSourceType); Integer badgeLevel = expand.getInteger("badgeLevel"); Long milestone = expand.getLong("milestone"); String badgeKey = StringUtils.isNotBlank(expand.getString("badgeKey")) @@ -203,6 +208,7 @@ public class PropsSourceClientServiceImpl implements PropsSourceClientService { BadgeConfig badgeConfig = new BadgeConfig() .setId(badgeId) .setType(badgeSourceType) + .setDisplayType(badgeDisplayType) .setBadgeLevel(Objects.nonNull(badgeLevel) ? badgeLevel : 0) .setMilestone(milestone) .setBadgeName(propsSourceRecord.getName()) @@ -254,9 +260,31 @@ public class PropsSourceClientServiceImpl implements PropsSourceClientService { } return DEFAULT_BADGE_SOURCE_TYPE; } - - @Override - public PropsRedPacketSkinDTO getPropsRedPacketSkin(Long id) { + + private String normalizeBadgeDisplayType(String displayType, String badgeSourceType) { + if (StringUtils.isNotBlank(displayType)) { + String normalized = displayType.trim().toUpperCase(); + if (Objects.equals(BADGE_DISPLAY_TYPE_LONG, normalized) + || Objects.equals(BADGE_DISPLAY_TYPE_SHORT, normalized)) { + return normalized; + } + } + return Objects.equals(SysBadgeConfigTypeEnum.VIP.getName(), badgeSourceType) + ? BADGE_DISPLAY_TYPE_LONG + : BADGE_DISPLAY_TYPE_SHORT; + } + + private String firstNotBlank(String... values) { + for (String value : values) { + if (StringUtils.isNotBlank(value)) { + return value; + } + } + return null; + } + + @Override + public PropsRedPacketSkinDTO getPropsRedPacketSkin(Long id) { return propsResourcesInnerConvertor.toPropsRedPacketSkinDTO( propsRedPacketSkinService.getById(id)); diff --git a/sql/20260516_sys_badge_display_type.sql b/sql/20260516_sys_badge_display_type.sql new file mode 100644 index 00000000..7022030a --- /dev/null +++ b/sql/20260516_sys_badge_display_type.sql @@ -0,0 +1,25 @@ +SET @current_schema := DATABASE(); + +SET @add_sys_badge_display_type_sql := IF( + NOT EXISTS ( + SELECT 1 FROM information_schema.columns + WHERE table_schema = @current_schema + AND table_name = 'sys_badge_config' + AND column_name = 'display_type' + ), + 'ALTER TABLE `sys_badge_config` ADD COLUMN `display_type` varchar(16) NOT NULL DEFAULT '''' COMMENT ''展示类型: LONG长徽章 SHORT短徽章'' AFTER `type`', + 'SELECT 1' +); +PREPARE add_sys_badge_display_type_stmt FROM @add_sys_badge_display_type_sql; +EXECUTE add_sys_badge_display_type_stmt; +DEALLOCATE PREPARE add_sys_badge_display_type_stmt; + +UPDATE `sys_badge_config` +SET `display_type` = 'LONG' +WHERE `type` = 'VIP' + AND (`display_type` IS NULL OR `display_type` = ''); + +UPDATE `sys_badge_config` +SET `display_type` = 'SHORT' +WHERE `type` <> 'VIP' + AND (`display_type` IS NULL OR `display_type` = '');