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

Commit 90f404b9 authored by wangyifan's avatar wangyifan

Merge branch 'dev_fudai_20250418' into container

parents 893dbc55 5c08c47d
...@@ -152,17 +152,14 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService { ...@@ -152,17 +152,14 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService {
* @param vo * @param vo
* @return * @return
*/ */
public List<KylinRewardUser> getRandomRewardCode(OrderDetailsVo vo, String luckyBagId) { /**
final int limitTotal = vo.getOrderTicketVo().getNumber(); * 分配兑换码
final KylinOrderTicketVo orderTicketVo = vo.getOrderTicketVo(); *
final String orderId = orderTicketVo.getOrderTicketsId(); * @param vo
* @return
if (limitTotal <= 0) { */
log.error("[getRandomRewardCode] 用户订单购买数量错误, orderId: {}.", orderId); private List<KylinRewardUser> getRandomRewardCode(OrderDetailsVo vo, String luckyBagId) {
return Collections.emptyList(); String lockKey = KylinRedisConst.LUCKY_BAG_CODE_LOCK + luckyBagId;
}
final String lockKey = KylinRedisConst.LUCKY_BAG_CODE_LOCK + luckyBagId;
try { try {
// 1. 获取分布式锁,防止并发问题 // 1. 获取分布式锁,防止并发问题
boolean locked = redisUtil.lock(lockKey, 1, 30); boolean locked = redisUtil.lock(lockKey, 1, 30);
...@@ -171,9 +168,21 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService { ...@@ -171,9 +168,21 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService {
return Collections.emptyList(); return Collections.emptyList();
} }
final int limitTotal = vo.getOrderTicketVo().getNumber();
if (limitTotal <= 0) {
log.error("[getRandomRewardCode] 用户订单购买数量错误, orderId: {}.", vo.getOrderTicketVo().getOrderTicketsId());
return Collections.emptyList();
}
LambdaQueryWrapper<KylinRewardCode> lambdaQueryWrapper = new QueryWrapper<KylinRewardCode>().lambda()
.eq(KylinRewardCode::getLuckyBagId, luckyBagId)
.eq(KylinRewardCode::getState, 1)
.last(true, "ORDER BY RAND() limit " + limitTotal);
//2. 搜索兑换码 //2. 搜索兑换码
List<KylinRewardCode> rewardCodes = getAvailableRewardCodes(luckyBagId, limitTotal); List<KylinRewardCode> rewardCodes = kylinRewardCodeMapper.selectList(lambdaQueryWrapper);
if (rewardCodes.size() < limitTotal) {
if (rewardCodes.isEmpty() || rewardCodes.size() < limitTotal) {
log.error("[getRandomRewardCode] 兑换码不足, luckyBagId: {}, need total: {}.", luckyBagId, limitTotal); log.error("[getRandomRewardCode] 兑换码不足, luckyBagId: {}, need total: {}.", luckyBagId, limitTotal);
// 报警 // 报警
String msg = String.format("福袋ID [%s] 兑换码不足,请及时补充.", luckyBagId); String msg = String.format("福袋ID [%s] 兑换码不足,请及时补充.", luckyBagId);
...@@ -181,7 +190,34 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService { ...@@ -181,7 +190,34 @@ public class KylinLuckyBagServiceImpl implements IKylinLuckyBagService {
return Collections.emptyList(); return Collections.emptyList();
} }
return assignRewardCodesToUser(orderTicketVo.getUserId(), orderId, luckyBagId, rewardCodes, orderTicketVo.getEntitiesVoList()); //3. 写入
List<KylinRewardUser> rewardUsers = new ArrayList<>(limitTotal);
for (int i = 0; i < rewardCodes.size(); i++) {
KylinRewardCode rewardCode = rewardCodes.get(i);
rewardCode.setState(0);
int updateResult = kylinRewardCodeMapper.updateById(rewardCode);
if (updateResult > 0) {
KylinRewardUser user = new KylinRewardUser();
user.setUid(vo.getOrderTicketVo().getUserId());
user.setLuckyBagId(luckyBagId);
user.setOrderId(vo.getOrderTicketVo().getOrderTicketsId());
user.setOrderTicketEntitiesId(vo.getOrderTicketVo().getEntitiesVoList().get(i).getOrderTicketEntitiesId());
user.setCode(rewardCode.getCode());
user.setState(1);
user.setCreatedAt(LocalDateTime.now());
user.setUpdatedAt(LocalDateTime.now());
kylinRewardUserMapper.insert(user);
rewardUsers.add(user);
log.info("[getRandomRewardCode] 兑换码分配成功, luckyBagId: {}, orderId: {}, code: {}.", luckyBagId, vo.getOrderTicketVo().getOrderTicketsId(), rewardCode.getCode());
} else {
log.error("[getRandomRewardCode] 兑换码分配失败, luckyBagId: {}, orderId: {}.", luckyBagId, vo.getOrderTicketVo().getOrderTicketsId());
// 报警
String msg = String.format("福袋ID [%s] 分配兑换码失败:用户ID [%s] 的订单ID [%s] 已分配了 [%s] 个,应分配 [%s] 个。",
luckyBagId, vo.getOrderTicketVo().getUserId(), vo.getOrderTicketVo().getOrderTicketsId(), rewardUsers.size(), limitTotal);
iFeishuBotService.sendTextMessage(msg);
}
}
return rewardUsers;
} catch (Exception e) { } catch (Exception e) {
log.error("error", e); log.error("error", e);
// 报警 // 报警
......
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