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

Commit 565a2963 authored by wangyifan's avatar wangyifan

草莓护照- home页 未绑定护照返回提示

parent 060e4490
...@@ -3,12 +3,7 @@ package com.liquidnet.service.adam.service.impl; ...@@ -3,12 +3,7 @@ package com.liquidnet.service.adam.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.liquidnet.commons.lang.util.CurrentUtil; import com.liquidnet.commons.lang.util.CurrentUtil;
import com.liquidnet.service.adam.dto.AdamCaomeiPassportUserBadgeDto; import com.liquidnet.service.adam.dto.AdamCaomeiPassportUserBadgeDto;
import com.liquidnet.service.adam.dto.vo.AdamCaomeiPassportBadgeShelfItemVo; import com.liquidnet.service.adam.dto.vo.*;
import com.liquidnet.service.adam.dto.vo.AdamCaomeiPassportHomeVo;
import com.liquidnet.service.adam.dto.vo.AdamCaomeiPassportUserCardVo;
import com.liquidnet.service.adam.dto.vo.AdamCaomeiPassportUserClaimedBadgeVo;
import com.liquidnet.service.adam.dto.vo.AdamRealInfoVo;
import com.liquidnet.service.adam.dto.vo.AdamUserInfoVo;
import com.liquidnet.service.adam.entity.AdamCaomeiBadge; import com.liquidnet.service.adam.entity.AdamCaomeiBadge;
import com.liquidnet.service.adam.entity.AdamCaomeiPassport; import com.liquidnet.service.adam.entity.AdamCaomeiPassport;
import com.liquidnet.service.adam.mapper.AdamCaomeiBadgeMapper; import com.liquidnet.service.adam.mapper.AdamCaomeiBadgeMapper;
...@@ -23,7 +18,10 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -23,7 +18,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.*; import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -42,12 +40,12 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse ...@@ -42,12 +40,12 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public ResponseDto<List<AdamCaomeiPassportUserClaimedBadgeVo>> bindPassport(String passportNo) { public ResponseDto<List<AdamCaomeiPassportUserClaimedBadgeVo>> bindPassport(String passportNo) {
String uid = CurrentUtil.getCurrentUid(); String uid = CurrentUtil.getCurrentUid();
// 1. 先校验护照信息是否满足绑定条件 // 1. 先校验护照信息是否满足绑定条件
AdamCaomeiPassport passport = adamCaomeiPassportMapper.selectOne( AdamCaomeiPassport passport = adamCaomeiPassportMapper.selectOne(
Wrappers.lambdaQuery(AdamCaomeiPassport.class) Wrappers.lambdaQuery(AdamCaomeiPassport.class)
.eq(AdamCaomeiPassport::getPassportNo, passportNo.trim())); .eq(AdamCaomeiPassport::getPassportNo, passportNo.trim()));
if (passport == null) { if (passport == null) {
log.error("[bindPassport] 未查询到护照信息, passportSn: {}", passportNo); log.error("[bindPassport] 未查询到护照信息, passportSn: {}", passportNo);
return ResponseDto.failure(ErrorMapping.get("10600")); return ResponseDto.failure(ErrorMapping.get("10600"));
...@@ -66,7 +64,7 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse ...@@ -66,7 +64,7 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse
log.error("[bindPassport] 护照已被其他账号绑定, passportSn: {}", passportNo); log.error("[bindPassport] 护照已被其他账号绑定, passportSn: {}", passportNo);
return ResponseDto.failure(ErrorMapping.get("10602")); return ResponseDto.failure(ErrorMapping.get("10602"));
} }
// 2. 校验当前用户是否已经绑定过其他护照 // 2. 校验当前用户是否已经绑定过其他护照
AdamCaomeiPassport userExistsPassport = findBoundPassportForUser(uid); AdamCaomeiPassport userExistsPassport = findBoundPassportForUser(uid);
if (userExistsPassport != null && !passportNo.equals(userExistsPassport.getPassportNo())) { if (userExistsPassport != null && !passportNo.equals(userExistsPassport.getPassportNo())) {
...@@ -76,7 +74,7 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse ...@@ -76,7 +74,7 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse
// 3. 尝试原子更新绑定状态 (仅当 status = 0 时才能更新成功) // 3. 尝试原子更新绑定状态 (仅当 status = 0 时才能更新成功)
int updatedRows = adamCaomeiPassportMapper.bindPassportAtomic(passportNo.trim(), uid); int updatedRows = adamCaomeiPassportMapper.bindPassportAtomic(passportNo.trim(), uid);
if (updatedRows > 0) { if (updatedRows > 0) {
// 4. 优先复用已上架徽章缓存,再筛选护照纪念徽章(type=1),用于批量发放和返回给前端弹窗 // 4. 优先复用已上架徽章缓存,再筛选护照纪念徽章(type=1),用于批量发放和返回给前端弹窗
List<AdamCaomeiBadge> publishedBadges = adamRdmService.getPublishedCaomeiBadges(); List<AdamCaomeiBadge> publishedBadges = adamRdmService.getPublishedCaomeiBadges();
...@@ -122,9 +120,18 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse ...@@ -122,9 +120,18 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse
String uid = CurrentUtil.getCurrentUid(); String uid = CurrentUtil.getCurrentUid();
log.info("[getPassportHome] 开始获取护照首页数据, uid: {}", uid); log.info("[getPassportHome] 开始获取护照首页数据, uid: {}", uid);
// 4. 获取用户当前绑定的护照信息
AdamCaomeiPassport bound = findBoundPassportForUser(uid);
if (null == bound) {
log.error("[getPassportHome] 用户未绑定护照, uid: {}", uid);
return ResponseDto.failure(ErrorMapping.get("10604")); // 未绑定护照
}
// 1. 初始化返回对象 // 1. 初始化返回对象
AdamCaomeiPassportHomeVo home = new AdamCaomeiPassportHomeVo(); AdamCaomeiPassportHomeVo home = new AdamCaomeiPassportHomeVo();
AdamCaomeiPassportUserCardVo card = new AdamCaomeiPassportUserCardVo(); AdamCaomeiPassportUserCardVo card = new AdamCaomeiPassportUserCardVo();
card.setPassportBound(true);
card.setPassportNo(bound.getPassportNo());
home.setUserCard(card); home.setUserCard(card);
// 2. 获取用户基本信息(头像、昵称) // 2. 获取用户基本信息(头像、昵称)
...@@ -136,7 +143,7 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse ...@@ -136,7 +143,7 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse
card.setAvatar(""); card.setAvatar("");
card.setNickname(""); card.setNickname("");
} }
// 3. 获取用户实名认证信息 // 3. 获取用户实名认证信息
AdamRealInfoVo real = adamRdmService.getRealInfoVoByUidPlain(uid); AdamRealInfoVo real = adamRdmService.getRealInfoVoByUidPlain(uid);
String idCard = null; String idCard = null;
...@@ -146,23 +153,12 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse ...@@ -146,23 +153,12 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse
idCard = real.getIdCard(); idCard = real.getIdCard();
} }
card.setRealNameVerified(isRealNameVerified); card.setRealNameVerified(isRealNameVerified);
log.info("[getPassportHome] 实名认证状态, uid: {}, 是否已实名: {}, 是否有身份证号: {}", uid, isRealNameVerified, StringUtils.isNotBlank(idCard)); log.info("[getPassportHome] 实名认证状态, uid: {}, 是否已实名: {}, 是否有身份证号: {}",
uid, isRealNameVerified, StringUtils.isNotBlank(idCard));
// 4. 获取用户当前绑定的护照信息
AdamCaomeiPassport bound = findBoundPassportForUser(uid);
boolean isPassportBound = bound != null;
if (isPassportBound) {
card.setPassportBound(true);
card.setPassportNo(bound.getPassportNo());
} else {
card.setPassportBound(false);
card.setPassportNo("");
}
log.info("[getPassportHome] 护照绑定状态, uid: {}, 是否已绑定: {}, 护照编号: {}", uid, isPassportBound, card.getPassportNo());
// 5. 查询用户购买过的演出ID列表 (用于判断演出徽章是否可认领) // 5. 查询用户购买过的演出ID列表 (用于判断演出徽章是否可认领)
final List<String> paidPerformanceIds = StringUtils.isNotBlank(idCard) final List<String> paidPerformanceIds = StringUtils.isNotBlank(idCard)
? adamCaomeiBadgeMapper.selectPaidPerformanceIdsByIdCard(idCard) ? adamCaomeiBadgeMapper.selectPaidPerformanceIdsByIdCard(idCard)
: new ArrayList<>(); : new ArrayList<>();
log.info("[getPassportHome] 用户已支付的演出订单数量, uid: {}, 数量: {}", uid, paidPerformanceIds.size()); log.info("[getPassportHome] 用户已支付的演出订单数量, uid: {}, 数量: {}", uid, paidPerformanceIds.size());
...@@ -198,7 +194,7 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse ...@@ -198,7 +194,7 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse
// 8. 组装全部上架徽章列表 (扁平结构,前端按 type 筛选展示) // 8. 组装全部上架徽章列表 (扁平结构,前端按 type 筛选展示)
List<AdamCaomeiPassportBadgeShelfItemVo> allBadges = published.stream() List<AdamCaomeiPassportBadgeShelfItemVo> allBadges = published.stream()
.map(b -> toShelfItem(b, claimedMap, isPassportBound, paidPerformanceIds)) .map(b -> toShelfItem(b, claimedMap, paidPerformanceIds))
.collect(Collectors.toList()); .collect(Collectors.toList());
home.setAllBadges(allBadges); home.setAllBadges(allBadges);
...@@ -206,27 +202,35 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse ...@@ -206,27 +202,35 @@ public class AdamCaomeiPassportUserServiceImpl implements IAdamCaomeiPassportUse
return ResponseDto.success(home); return ResponseDto.success(home);
} }
private static AdamCaomeiPassportBadgeShelfItemVo toShelfItem(AdamCaomeiBadge b, Map<String, AdamCaomeiPassportUserBadgeDto> claimedMap, boolean isPassportBound, List<String> paidPerformanceIds) { /**
* @param b 徽章信息
* @param claimedMap 用户已领取的徽章
* @param paidPerformanceIds 当前账号实名身份证号码购买的演出IDs
* @return
*/
private static AdamCaomeiPassportBadgeShelfItemVo toShelfItem(AdamCaomeiBadge b,
Map<String, AdamCaomeiPassportUserBadgeDto> claimedMap,
List<String> paidPerformanceIds) {
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.setType(b.getType()); v.setType(b.getType());
v.setPerformanceId(StringUtils.defaultString(b.getPerformanceId())); v.setPerformanceId(StringUtils.defaultString(b.getPerformanceId()));
// 判断当前徽章是否已认领 // 判断当前徽章是否已认领
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(claimed ? got.getClaimedAt() : null);
int type = b.getType() == null ? 0 : b.getType(); int type = b.getType() == null ? 0 : b.getType();
// 针对未认领的徽章,根据类型判断是否可认领 (claimable) // 针对未认领的徽章,根据类型判断是否可认领 (claimable)
if (!claimed) { if (!claimed) {
if (type == 1) { if (type == 1) {
// 护照纪念徽章:只要绑定了护照,就可认领(通常是绑定时漏发或后来新上架的) // 护照纪念徽章:只要绑定了护照,就可认领(通常是绑定时漏发或后来新上架的)
v.setClaimable(isPassportBound); v.setClaimable(true);
} else if (type == 2) { } else if (type == 2) {
// 演出纪念徽章:只要有对应演出的已支付购票记录,就可认领 // 演出纪念徽章:只要有对应演出的已支付购票记录,就可认领
v.setClaimable(paidPerformanceIds != null && paidPerformanceIds.contains(b.getPerformanceId())); v.setClaimable(paidPerformanceIds != null && paidPerformanceIds.contains(b.getPerformanceId()));
......
...@@ -91,7 +91,7 @@ ...@@ -91,7 +91,7 @@
10601=\u8BE5\u62A4\u7167\u5DF2\u4F5C\u5E9F 10601=\u8BE5\u62A4\u7167\u5DF2\u4F5C\u5E9F
10602=\u8BE5\u62A4\u7167\u5DF2\u88AB\u5176\u4ED6\u8D26\u53F7\u7ED1\u5B9A 10602=\u8BE5\u62A4\u7167\u5DF2\u88AB\u5176\u4ED6\u8D26\u53F7\u7ED1\u5B9A
10603=\u60A8\u5DF2\u7ED1\u5B9A\u5176\u4ED6\u62A4\u7167\uFF0C\u65E0\u6CD5\u91CD\u590D\u7ED1\u5B9A 10603=\u60A8\u5DF2\u7ED1\u5B9A\u5176\u4ED6\u62A4\u7167\uFF0C\u65E0\u6CD5\u91CD\u590D\u7ED1\u5B9A
10604=\u62A4\u7167\u7F16\u53F7\u4E0D\u80FD\u4E3A\u7A7A 10604=\u672A\u7ED1\u5B9A\u62A4\u7167
10605=\u62A4\u7167\u7ED1\u5B9A\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5 10605=\u62A4\u7167\u7ED1\u5B9A\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5
10606=\u8BE5\u62A4\u7167\u5DF2\u4E0E\u60A8\u7ED1\u5B9A\uFF0C\u65E0\u9700\u91CD\u590D\u64CD\u4F5C 10606=\u8BE5\u62A4\u7167\u5DF2\u4E0E\u60A8\u7ED1\u5B9A\uFF0C\u65E0\u9700\u91CD\u590D\u64CD\u4F5C
10607=\u5FBD\u7AE0\u4E0D\u5B58\u5728\u6216\u672A\u4E0A\u67B6 10607=\u5FBD\u7AE0\u4E0D\u5B58\u5728\u6216\u672A\u4E0A\u67B6
......
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