7.30 解决前端同一个拼团显示两个的bug,明确下一步任务。

This commit is contained in:
zhangsan 2025-07-30 18:25:15 +08:00
parent 8d4c13b9e2
commit 9de2d03f17
5 changed files with 23 additions and 6 deletions

View File

@ -81,14 +81,27 @@ document.addEventListener('DOMContentLoaded', () => {
soldBox.textContent = `${allTeamUserCount}人已抢`;
}
/* ------------- 渲染拼团列表 ------------- */
/* ------------- 渲染拼团列表 (按 teamId 去重) ------------- */
function renderTeams(list = [], groupPrice = 0) {
if (!list?.length) {
// 1) 先按 teamId 聚合,只取第一条
const uniq = [];
const seen = new Set();
list.forEach(t => {
if (!seen.has(t.teamId)) {
uniq.push(t);
seen.add(t.teamId);
}
});
if (!uniq.length) {
groupTitle.textContent = '小伙伴,赶紧去开团吧,做村里最靓的仔。';
return;
}
// 2) 绘制
userList.innerHTML = '';
list.forEach(t => userList.appendChild(makeItem(t, groupPrice)));
uniq.forEach(t => userList.appendChild(makeItem(t, groupPrice)));
initUserMarquee(3);
initCountdown();
}
@ -125,7 +138,9 @@ document.addEventListener('DOMContentLoaded', () => {
div.className = 'user-item';
div.innerHTML = `
<div class="user-avatar"><i class="fas fa-user"></i></div>
<div class="user-info">
<div class="user-info"
data-teamid="${team.teamId}"
data-activityid="${team.activityId}">
<div class="user-name">${maskedId}</div>
<div class="user-status">
仅剩 ${leftNum} 人成团

View File

@ -38,7 +38,6 @@ public class TradeLockLockOrderService implements ITradeLockOrderService {
return repository.queryGroupBuyProgress(teamId);
}
//TODO:设置超时未付款自动取消lock释放资源
@Override
public MarketPayOrderEntity lockMarketPayOrder(UserEntity userEntity, PayActivityEntity payActivityEntity, PayDiscountEntity payDiscountEntity) throws Exception{
log.info("拼团交易-锁定营销优惠支付订单:{} activityId:{} goodsId:{}", userEntity.getUserId(), payActivityEntity.getActivityId(), payDiscountEntity.getGoodsId());

View File

@ -68,6 +68,7 @@ public class TradeTaskService implements ITradeTaskService {
* @return key任务总量successCounterrorCountretryCount
*/
private Map<String, Integer> execNotifyJob(List<NotifyTaskEntity> notifyTaskEntityList) throws Exception {
//successCount:成功回调的任务数量
int successCount = 0, errorCount = 0, retryCount = 0;
for (NotifyTaskEntity notifyTask : notifyTaskEntityList) {
// 回调小商城中的groupBuyNotify接口 success 成功error 失败

View File

@ -46,6 +46,7 @@ import java.util.concurrent.TimeUnit;
@RequiredArgsConstructor
// todo:逆向后还要处理 redis recoveryCount
// todo:用户退单后他的参与活动次数应该释放应该还能再次参加拼团
// todo:支付商城端的消息处理已支付->退款 未支付->定时任务查询->调用拼团系统释放锁单
public class TradeRepository implements ITradeRepository {
private final IGroupBuyOrderDao groupBuyOrderDao;

View File

@ -32,7 +32,8 @@ public class MarketIndexController implements IMarketIndexService {
private final IIndexGroupBuyMarketService indexGroupBuyMarketService;
@RateLimiterAccessInterceptor(key = "userId", fallbackMethod = "queryGroupBuyMarketConfigFallBack", permitsPerSecond = 1.0d, blacklistCount = 1)
// 每秒放 5 个令牌超限 5 次后算进黑名单
@RateLimiterAccessInterceptor(key = "userId", fallbackMethod = "queryGroupBuyMarketConfigFallBack", permitsPerSecond = 5.0d, blacklistCount = 5)
@PostMapping("/query_group_buy_market_config")
@Override
public Response<GoodsMarketResponseDTO> queryGroupBuyMarketConfig(