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

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

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

parent 3cd4776c
...@@ -30,6 +30,9 @@ public class AdamCaomeiPassportBadgeShelfItemVo { ...@@ -30,6 +30,9 @@ public class AdamCaomeiPassportBadgeShelfItemVo {
@ApiModelProperty("关联演出ID(演出纪念徽章)") @ApiModelProperty("关联演出ID(演出纪念徽章)")
private String performanceId; private String performanceId;
@ApiModelProperty("关联演出名称(type=2 时用于按演出分组展示;无数据时可能为演出ID)")
private String performanceName;
@ApiModelProperty("是否已认领") @ApiModelProperty("是否已认领")
private boolean claimed; private boolean claimed;
......
...@@ -16,6 +16,6 @@ public class AdamCaomeiPassportHomeVo { ...@@ -16,6 +16,6 @@ public class AdamCaomeiPassportHomeVo {
@ApiModelProperty("已认领徽章(全部获得记录,用于网格墙)") @ApiModelProperty("已认领徽章(全部获得记录,用于网格墙)")
private List<AdamCaomeiPassportUserClaimedBadgeVo> claimedBadges; private List<AdamCaomeiPassportUserClaimedBadgeVo> claimedBadges;
@ApiModelProperty("全部上架徽章(扁平列表,前端按类型分组展示)") @ApiModelProperty("全部上架徽章(扁平列表;演出类含 performanceName,前端可按类型或按演出分组展示)")
private List<AdamCaomeiPassportBadgeShelfItemVo> allBadges; private List<AdamCaomeiPassportBadgeShelfItemVo> allBadges;
} }
...@@ -87,6 +87,18 @@ spring: ...@@ -87,6 +87,18 @@ spring:
max-wait: -1 max-wait: -1
max-idle: 8 max-idle: 8
min-idle: 0 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 database: 15
dbs: ${liquidnet.redis.adam.dbs} dbs: ${liquidnet.redis.adam.dbs}
port: ${liquidnet.redis.adam.port} port: ${liquidnet.redis.adam.port}
......
...@@ -23,6 +23,11 @@ ...@@ -23,6 +23,11 @@
<groupId>com.liquidnet</groupId> <groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-web</artifactId> <artifactId>liquidnet-common-web</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-cache-redis</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- <dependency>--> <!-- <dependency>-->
<!-- <groupId>com.liquidnet</groupId>--> <!-- <groupId>com.liquidnet</groupId>-->
<!-- <artifactId>liquidnet-common-cache-redisson</artifactId>--> <!-- <artifactId>liquidnet-common-cache-redisson</artifactId>-->
...@@ -38,11 +43,11 @@ ...@@ -38,11 +43,11 @@
<artifactId>liquidnet-service-adam-api</artifactId> <artifactId>liquidnet-service-adam-api</artifactId>
<version>1.0-SNAPSHOT</version> <version>1.0-SNAPSHOT</version>
</dependency> </dependency>
<!-- <dependency>--> <dependency>
<!-- <groupId>com.liquidnet</groupId>--> <groupId>com.liquidnet</groupId>
<!-- <artifactId>liquidnet-service-kylin-api</artifactId>--> <artifactId>liquidnet-service-kylin-api</artifactId>
<!-- <version>1.0-SNAPSHOT</version>--> <version>1.0-SNAPSHOT</version>
<!-- </dependency>--> </dependency>
<dependency> <dependency>
<groupId>com.liquidnet</groupId> <groupId>com.liquidnet</groupId>
<artifactId>liquidnet-common-third-easemob</artifactId> <artifactId>liquidnet-common-third-easemob</artifactId>
......
...@@ -3,6 +3,7 @@ package com.liquidnet.service.adam.service; ...@@ -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.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.databind.JsonNode; 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.cache.redis.util.RedisUtil;
import com.liquidnet.common.exception.LiquidnetServiceException; import com.liquidnet.common.exception.LiquidnetServiceException;
import com.liquidnet.commons.lang.util.IdentityUtils; import com.liquidnet.commons.lang.util.IdentityUtils;
...@@ -15,6 +16,8 @@ import com.liquidnet.service.adam.dto.vo.*; ...@@ -15,6 +16,8 @@ import com.liquidnet.service.adam.dto.vo.*;
import com.liquidnet.service.adam.entity.AdamCaomeiBadge; import com.liquidnet.service.adam.entity.AdamCaomeiBadge;
import com.liquidnet.service.adam.entity.AdamEnters; import com.liquidnet.service.adam.entity.AdamEnters;
import com.liquidnet.service.adam.entity.AdamUserMember; 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.AdamCaomeiBadgeMapper;
import com.liquidnet.service.adam.mapper.AdamCaomeiPassportMapper; import com.liquidnet.service.adam.mapper.AdamCaomeiPassportMapper;
import com.liquidnet.service.adam.mapper.AdamEntersMapper; import com.liquidnet.service.adam.mapper.AdamEntersMapper;
...@@ -44,6 +47,9 @@ public class AdamRdmService { ...@@ -44,6 +47,9 @@ public class AdamRdmService {
@Autowired @Autowired
RedisUtil redisUtil; RedisUtil redisUtil;
@Autowired
RedisDataSourceUtil redisDataSourceUtil;
@Autowired @Autowired
AdamUserMapper adamUserMapper; AdamUserMapper adamUserMapper;
@Autowired @Autowired
...@@ -745,6 +751,34 @@ public class AdamRdmService { ...@@ -745,6 +751,34 @@ public class AdamRdmService {
return performanceIds; 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 * 删除用户徽章redis
* @param uid * @param uid
......
...@@ -9,7 +9,6 @@ import com.liquidnet.service.adam.entity.AdamCaomeiBadge; ...@@ -9,7 +9,6 @@ import com.liquidnet.service.adam.entity.AdamCaomeiBadge;
import com.liquidnet.service.adam.entity.AdamCaomeiBadgeApplyRecord; import com.liquidnet.service.adam.entity.AdamCaomeiBadgeApplyRecord;
import com.liquidnet.service.adam.entity.AdamCaomeiPassport; import com.liquidnet.service.adam.entity.AdamCaomeiPassport;
import com.liquidnet.service.adam.mapper.AdamCaomeiBadgeApplyRecordMapper; 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.mapper.AdamCaomeiPassportMapper;
import com.liquidnet.service.adam.service.AdamRdmService; import com.liquidnet.service.adam.service.AdamRdmService;
import com.liquidnet.service.adam.service.IAdamCaomeiPassportUserService; import com.liquidnet.service.adam.service.IAdamCaomeiPassportUserService;
...@@ -35,8 +34,6 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse ...@@ -35,8 +34,6 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse
@Autowired @Autowired
private AdamCaomeiPassportMapper adamCaomeiPassportMapper; private AdamCaomeiPassportMapper adamCaomeiPassportMapper;
@Autowired @Autowired
private AdamCaomeiBadgeMapper adamCaomeiBadgeMapper;
@Autowired
private AdamCaomeiBadgeApplyRecordMapper badgeApplyRecordMapper; private AdamCaomeiBadgeApplyRecordMapper badgeApplyRecordMapper;
@Autowired @Autowired
private AdamRdmService adamRdmService; private AdamRdmService adamRdmService;
...@@ -218,13 +215,17 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse ...@@ -218,13 +215,17 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse
} }
log.info("[getPassportHome] 系统已上架的徽章数量, uid: {}, 数量: {}", uid, published.size()); log.info("[getPassportHome] 系统已上架的徽章数量, uid: {}, 数量: {}", uid, published.size());
// 8. 组装全部上架徽章列表 (扁平结构,前端按 type 筛选展示) // 演出纪念徽章:批量查演出名称,供前端按演出分组展示
Map<String, String> performanceTitleById = buildPerformanceTitleMap(published);
// 8. 组装全部上架徽章列表 (扁平结构,前端按 type / 演出名称 筛选分组展示)
List<AdamCaomeiPassportBadgeShelfItemVo> allBadges = toShelfItems( List<AdamCaomeiPassportBadgeShelfItemVo> allBadges = toShelfItems(
published, published,
claimedMap, claimedMap,
paidPerformanceIds, paidPerformanceIds,
applyBadgeStatus.passedApplyBadgeIds, applyBadgeStatus.passedApplyBadgeIds,
applyBadgeStatus.pendingApplyBadgeIds applyBadgeStatus.pendingApplyBadgeIds,
performanceTitleById
); );
home.setAllBadges(allBadges); home.setAllBadges(allBadges);
...@@ -297,13 +298,35 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse ...@@ -297,13 +298,35 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse
.collect(Collectors.toMap(AdamCaomeiPassportUserBadgeDto::getBadgeId, Function.identity(), (a, b) -> a)); .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, private static List<AdamCaomeiPassportBadgeShelfItemVo> toShelfItems(List<AdamCaomeiBadge> published,
Map<String, AdamCaomeiPassportUserBadgeDto> claimedMap, Map<String, AdamCaomeiPassportUserBadgeDto> claimedMap,
List<String> paidPerformanceIds, List<String> paidPerformanceIds,
Set<String> passedApplyBadgeIds, Set<String> passedApplyBadgeIds,
Set<String> pendingApplyBadgeIds) { Set<String> pendingApplyBadgeIds,
Map<String, String> performanceTitleById) {
return published.stream() return published.stream()
.map(b -> toShelfItem(b, claimedMap, paidPerformanceIds, passedApplyBadgeIds, pendingApplyBadgeIds)) .map(b -> toShelfItem(b, claimedMap, paidPerformanceIds, passedApplyBadgeIds, pendingApplyBadgeIds, performanceTitleById))
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
...@@ -313,29 +336,35 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse ...@@ -313,29 +336,35 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse
* @param paidPerformanceIds 当前账号实名身份证号码购买的演出IDs * @param paidPerformanceIds 当前账号实名身份证号码购买的演出IDs
* @param passedApplyBadgeIds 补签审核已通过的徽章ID集合 * @param passedApplyBadgeIds 补签审核已通过的徽章ID集合
* @param pendingApplyBadgeIds 补签待审核的徽章ID集合 * @param pendingApplyBadgeIds 补签待审核的徽章ID集合
* @param performanceTitleById 演出 ID → 演出名称(仅 type=2 使用)
* @return * @return
*/ */
private static AdamCaomeiPassportBadgeShelfItemVo toShelfItem(AdamCaomeiBadge b, private static AdamCaomeiPassportBadgeShelfItemVo toShelfItem(AdamCaomeiBadge b,
Map<String, AdamCaomeiPassportUserBadgeDto> claimedMap, Map<String, AdamCaomeiPassportUserBadgeDto> claimedMap,
List<String> paidPerformanceIds, List<String> paidPerformanceIds,
Set<String> passedApplyBadgeIds, Set<String> passedApplyBadgeIds,
Set<String> pendingApplyBadgeIds) { Set<String> pendingApplyBadgeIds,
Map<String, String> performanceTitleById) {
AdamCaomeiPassportBadgeShelfItemVo v = new AdamCaomeiPassportBadgeShelfItemVo(); AdamCaomeiPassportBadgeShelfItemVo v = new AdamCaomeiPassportBadgeShelfItemVo();
v.setBadgeId(b.getBadgeId()); v.setBadgeId(b.getBadgeId());
v.setName(StringUtils.defaultString(b.getName())); v.setName(StringUtils.defaultString(b.getName()));
v.setIcon(StringUtils.defaultString(b.getIcon())); v.setIcon(StringUtils.defaultString(b.getIcon()));
v.setShareText(StringUtils.defaultString(b.getShareText())); v.setShareText(StringUtils.defaultString(b.getShareText()));
v.setType(b.getType()); 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); v.setApplyPending(false);
// 判断当前徽章是否已认领 // 判断当前徽章是否已认领
AdamCaomeiPassportUserBadgeDto got = claimedMap.get(b.getBadgeId()); AdamCaomeiPassportUserBadgeDto got = claimedMap.get(b.getBadgeId());
boolean claimed = got != null; boolean claimed = got != null;
v.setClaimed(claimed); v.setClaimed(claimed);
v.setClaimedAt(claimed ? got.getClaimedAt() : null); v.setClaimedAt(got != null ? got.getClaimedAt() : null);
int type = b.getType() == null ? 0 : b.getType();
// 针对未认领的徽章,根据类型判断是否可认领 (claimable) // 针对未认领的徽章,根据类型判断是否可认领 (claimable)
if (!claimed) { 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