记得上下班打卡 | git大法好,push需谨慎

Commit ae5cdba0 authored by 姜秀龙's avatar 姜秀龙

增加演出名称。读取了 kylin redis,注意需要加配置

parent 3cd4776c
......@@ -30,6 +30,9 @@ public class AdamCaomeiPassportBadgeShelfItemVo {
@ApiModelProperty("关联演出ID(演出纪念徽章)")
private String performanceId;
@ApiModelProperty("关联演出名称(type=2 时用于按演出分组展示;无数据时可能为演出ID)")
private String performanceName;
@ApiModelProperty("是否已认领")
private boolean claimed;
......
......@@ -16,6 +16,6 @@ public class AdamCaomeiPassportHomeVo {
@ApiModelProperty("已认领徽章(全部获得记录,用于网格墙)")
private List<AdamCaomeiPassportUserClaimedBadgeVo> claimedBadges;
@ApiModelProperty("全部上架徽章(扁平列表,前端按类型分组展示)")
@ApiModelProperty("全部上架徽章(扁平列表;演出类含 performanceName,前端可按类型或按演出分组展示)")
private List<AdamCaomeiPassportBadgeShelfItemVo> allBadges;
}
......@@ -87,6 +87,18 @@ spring:
max-wait: -1
max-idle: 8
min-idle: 0
kylin:
database: ${liquidnet.redis.kylin.database}
dbs: ${liquidnet.redis.kylin.dbs}
port: ${liquidnet.redis.kylin.port}
host: ${liquidnet.redis.kylin.host}
password: ${liquidnet.redis.kylin.password}
lettuce:
pool:
max-active: 16
max-wait: -1
max-idle: 8
min-idle: 4
database: 15
dbs: ${liquidnet.redis.adam.dbs}
port: ${liquidnet.redis.adam.port}
......
......@@ -23,6 +23,11 @@
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-web</artifactId>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-cache-redis</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.liquidnet</groupId>-->
<!-- <artifactId>liquidnet-common-cache-redisson</artifactId>-->
......@@ -38,11 +43,11 @@
<artifactId>liquidnet-service-adam-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.liquidnet</groupId>-->
<!-- <artifactId>liquidnet-service-kylin-api</artifactId>-->
<!-- <version>1.0-SNAPSHOT</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-service-kylin-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-third-easemob</artifactId>
......
......@@ -3,6 +3,7 @@ package com.liquidnet.service.adam.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.databind.JsonNode;
import com.liquidnet.common.cache.redis.util.RedisDataSourceUtil;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.common.exception.LiquidnetServiceException;
import com.liquidnet.commons.lang.util.IdentityUtils;
......@@ -15,6 +16,8 @@ import com.liquidnet.service.adam.dto.vo.*;
import com.liquidnet.service.adam.entity.AdamCaomeiBadge;
import com.liquidnet.service.adam.entity.AdamEnters;
import com.liquidnet.service.adam.entity.AdamUserMember;
import com.liquidnet.service.kylin.constant.KylinRedisConst;
import com.liquidnet.service.kylin.dto.vo.mongo.KylinPerformanceVo;
import com.liquidnet.service.adam.mapper.AdamCaomeiBadgeMapper;
import com.liquidnet.service.adam.mapper.AdamCaomeiPassportMapper;
import com.liquidnet.service.adam.mapper.AdamEntersMapper;
......@@ -44,6 +47,9 @@ public class AdamRdmService {
@Autowired
RedisUtil redisUtil;
@Autowired
RedisDataSourceUtil redisDataSourceUtil;
@Autowired
AdamUserMapper adamUserMapper;
@Autowired
......@@ -745,6 +751,34 @@ public class AdamRdmService {
return performanceIds;
}
/**
* 从演出缓存(kylin redis)读取演出标题,用于草莓护照演出徽章分组展示。
* 读取不到时返回 null。
*/
public String getPerformanceTitleById(String performanceId) {
if (StringUtils.isEmpty(performanceId)) {
return null;
}
try {
if (redisDataSourceUtil == null || redisDataSourceUtil.getRedisKylinUtil() == null) {
return null;
}
Object cached = redisDataSourceUtil.getRedisKylinUtil().get(KylinRedisConst.PERFORMANCES + performanceId);
if (cached instanceof KylinPerformanceVo) {
return ((KylinPerformanceVo) cached).getTitle();
}
// 兼容:部分环境序列化配置不同,可能反序列化成 Map(如 LinkedHashMap)
if (cached instanceof Map) {
Object title = ((Map<?, ?>) cached).get("title");
return title == null ? null : String.valueOf(title);
}
return null;
} catch (Exception e) {
log.warn("[getPerformanceTitleById] 读取演出缓存失败, performanceId: {}", performanceId, e);
return null;
}
}
/**
* 删除用户徽章redis
* @param uid
......
......@@ -9,7 +9,6 @@ import com.liquidnet.service.adam.entity.AdamCaomeiBadge;
import com.liquidnet.service.adam.entity.AdamCaomeiBadgeApplyRecord;
import com.liquidnet.service.adam.entity.AdamCaomeiPassport;
import com.liquidnet.service.adam.mapper.AdamCaomeiBadgeApplyRecordMapper;
import com.liquidnet.service.adam.mapper.AdamCaomeiBadgeMapper;
import com.liquidnet.service.adam.mapper.AdamCaomeiPassportMapper;
import com.liquidnet.service.adam.service.AdamRdmService;
import com.liquidnet.service.adam.service.IAdamCaomeiPassportUserService;
......@@ -35,8 +34,6 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse
@Autowired
private AdamCaomeiPassportMapper adamCaomeiPassportMapper;
@Autowired
private AdamCaomeiBadgeMapper adamCaomeiBadgeMapper;
@Autowired
private AdamCaomeiBadgeApplyRecordMapper badgeApplyRecordMapper;
@Autowired
private AdamRdmService adamRdmService;
......@@ -218,13 +215,17 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse
}
log.info("[getPassportHome] 系统已上架的徽章数量, uid: {}, 数量: {}", uid, published.size());
// 8. 组装全部上架徽章列表 (扁平结构,前端按 type 筛选展示)
// 演出纪念徽章:批量查演出名称,供前端按演出分组展示
Map<String, String> performanceTitleById = buildPerformanceTitleMap(published);
// 8. 组装全部上架徽章列表 (扁平结构,前端按 type / 演出名称 筛选分组展示)
List<AdamCaomeiPassportBadgeShelfItemVo> allBadges = toShelfItems(
published,
claimedMap,
paidPerformanceIds,
applyBadgeStatus.passedApplyBadgeIds,
applyBadgeStatus.pendingApplyBadgeIds
applyBadgeStatus.pendingApplyBadgeIds,
performanceTitleById
);
home.setAllBadges(allBadges);
......@@ -297,13 +298,35 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse
.collect(Collectors.toMap(AdamCaomeiPassportUserBadgeDto::getBadgeId, Function.identity(), (a, b) -> a));
}
private Map<String, String> buildPerformanceTitleMap(List<AdamCaomeiBadge> published) {
List<String> perfIds = published.stream()
.filter(b -> b != null && b.getType() != null && b.getType() == 2)
.map(AdamCaomeiBadge::getPerformanceId)
.filter(StringUtils::isNotBlank)
.distinct()
.collect(Collectors.toList());
if (perfIds.isEmpty()) {
return Collections.emptyMap();
}
Map<String, String> map = new HashMap<>(perfIds.size() * 2);
for (String perfId : perfIds) {
String title = adamRdmService.getPerformanceTitleById(perfId);
if (StringUtils.isNotBlank(title)) {
map.put(perfId, title);
}
}
return map;
}
private static List<AdamCaomeiPassportBadgeShelfItemVo> toShelfItems(List<AdamCaomeiBadge> published,
Map<String, AdamCaomeiPassportUserBadgeDto> claimedMap,
List<String> paidPerformanceIds,
Set<String> passedApplyBadgeIds,
Set<String> pendingApplyBadgeIds) {
Set<String> pendingApplyBadgeIds,
Map<String, String> performanceTitleById) {
return published.stream()
.map(b -> toShelfItem(b, claimedMap, paidPerformanceIds, passedApplyBadgeIds, pendingApplyBadgeIds))
.map(b -> toShelfItem(b, claimedMap, paidPerformanceIds, passedApplyBadgeIds, pendingApplyBadgeIds, performanceTitleById))
.collect(Collectors.toList());
}
......@@ -313,29 +336,35 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse
* @param paidPerformanceIds 当前账号实名身份证号码购买的演出IDs
* @param passedApplyBadgeIds 补签审核已通过的徽章ID集合
* @param pendingApplyBadgeIds 补签待审核的徽章ID集合
* @param performanceTitleById 演出 ID → 演出名称(仅 type=2 使用)
* @return
*/
private static AdamCaomeiPassportBadgeShelfItemVo toShelfItem(AdamCaomeiBadge b,
Map<String, AdamCaomeiPassportUserBadgeDto> claimedMap,
List<String> paidPerformanceIds,
Set<String> passedApplyBadgeIds,
Set<String> pendingApplyBadgeIds) {
Set<String> pendingApplyBadgeIds,
Map<String, String> performanceTitleById) {
AdamCaomeiPassportBadgeShelfItemVo v = new AdamCaomeiPassportBadgeShelfItemVo();
v.setBadgeId(b.getBadgeId());
v.setName(StringUtils.defaultString(b.getName()));
v.setIcon(StringUtils.defaultString(b.getIcon()));
v.setShareText(StringUtils.defaultString(b.getShareText()));
v.setType(b.getType());
v.setPerformanceId(StringUtils.defaultString(b.getPerformanceId()));
String perfId = StringUtils.defaultString(b.getPerformanceId());
v.setPerformanceId(perfId);
int type = b.getType() == null ? 0 : b.getType();
if (type == 2 && StringUtils.isNotBlank(perfId)) {
String title = performanceTitleById != null ? performanceTitleById.get(perfId) : null;
v.setPerformanceName(StringUtils.isNotBlank(title) ? title : perfId);
}
v.setApplyPending(false);
// 判断当前徽章是否已认领
AdamCaomeiPassportUserBadgeDto got = claimedMap.get(b.getBadgeId());
boolean claimed = got != null;
v.setClaimed(claimed);
v.setClaimedAt(claimed ? got.getClaimedAt() : null);
int type = b.getType() == null ? 0 : b.getType();
v.setClaimedAt(got != null ? got.getClaimedAt() : null);
// 针对未认领的徽章,根据类型判断是否可认领 (claimable)
if (!claimed) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment