7.30 解决前端同一个拼团显示两个的bug,明确下一步任务。
This commit is contained in:
parent
8d4c13b9e2
commit
9de2d03f17
@ -81,14 +81,27 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
soldBox.textContent = `${allTeamUserCount}人已抢`;
|
soldBox.textContent = `${allTeamUserCount}人已抢`;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------- 渲染拼团列表 ------------- */
|
/* ------------- 渲染拼团列表 (按 teamId 去重) ------------- */
|
||||||
function renderTeams(list = [], groupPrice = 0) {
|
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 = '小伙伴,赶紧去开团吧,做村里最靓的仔。';
|
groupTitle.textContent = '小伙伴,赶紧去开团吧,做村里最靓的仔。';
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 2) 绘制
|
||||||
userList.innerHTML = '';
|
userList.innerHTML = '';
|
||||||
list.forEach(t => userList.appendChild(makeItem(t, groupPrice)));
|
uniq.forEach(t => userList.appendChild(makeItem(t, groupPrice)));
|
||||||
|
|
||||||
initUserMarquee(3);
|
initUserMarquee(3);
|
||||||
initCountdown();
|
initCountdown();
|
||||||
}
|
}
|
||||||
@ -125,7 +138,9 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
div.className = 'user-item';
|
div.className = 'user-item';
|
||||||
div.innerHTML = `
|
div.innerHTML = `
|
||||||
<div class="user-avatar"><i class="fas fa-user"></i></div>
|
<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-name">${maskedId}</div>
|
||||||
<div class="user-status">
|
<div class="user-status">
|
||||||
仅剩 ${leftNum} 人成团
|
仅剩 ${leftNum} 人成团
|
||||||
|
@ -38,7 +38,6 @@ public class TradeLockLockOrderService implements ITradeLockOrderService {
|
|||||||
return repository.queryGroupBuyProgress(teamId);
|
return repository.queryGroupBuyProgress(teamId);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO:设置超时未付款自动取消lock,释放资源
|
|
||||||
@Override
|
@Override
|
||||||
public MarketPayOrderEntity lockMarketPayOrder(UserEntity userEntity, PayActivityEntity payActivityEntity, PayDiscountEntity payDiscountEntity) throws Exception{
|
public MarketPayOrderEntity lockMarketPayOrder(UserEntity userEntity, PayActivityEntity payActivityEntity, PayDiscountEntity payDiscountEntity) throws Exception{
|
||||||
log.info("拼团交易-锁定营销优惠支付订单:{} activityId:{} goodsId:{}", userEntity.getUserId(), payActivityEntity.getActivityId(), payDiscountEntity.getGoodsId());
|
log.info("拼团交易-锁定营销优惠支付订单:{} activityId:{} goodsId:{}", userEntity.getUserId(), payActivityEntity.getActivityId(), payDiscountEntity.getGoodsId());
|
||||||
|
@ -68,6 +68,7 @@ public class TradeTaskService implements ITradeTaskService {
|
|||||||
* @return key——任务总量、successCount、errorCount、retryCount
|
* @return key——任务总量、successCount、errorCount、retryCount
|
||||||
*/
|
*/
|
||||||
private Map<String, Integer> execNotifyJob(List<NotifyTaskEntity> notifyTaskEntityList) throws Exception {
|
private Map<String, Integer> execNotifyJob(List<NotifyTaskEntity> notifyTaskEntityList) throws Exception {
|
||||||
|
//successCount:成功回调的任务数量
|
||||||
int successCount = 0, errorCount = 0, retryCount = 0;
|
int successCount = 0, errorCount = 0, retryCount = 0;
|
||||||
for (NotifyTaskEntity notifyTask : notifyTaskEntityList) {
|
for (NotifyTaskEntity notifyTask : notifyTaskEntityList) {
|
||||||
// 回调小商城中的groupBuyNotify接口 success 成功,error 失败
|
// 回调小商城中的groupBuyNotify接口 success 成功,error 失败
|
||||||
|
@ -46,6 +46,7 @@ import java.util.concurrent.TimeUnit;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
// todo:逆向后,还要处理 redis recoveryCount
|
// todo:逆向后,还要处理 redis recoveryCount
|
||||||
// todo:用户退单后,他的参与活动次数应该释放,应该还能再次参加拼团
|
// todo:用户退单后,他的参与活动次数应该释放,应该还能再次参加拼团
|
||||||
|
// todo:支付商城端的消息处理,已支付->退款 未支付->定时任务查询->调用拼团系统释放锁单。
|
||||||
public class TradeRepository implements ITradeRepository {
|
public class TradeRepository implements ITradeRepository {
|
||||||
|
|
||||||
private final IGroupBuyOrderDao groupBuyOrderDao;
|
private final IGroupBuyOrderDao groupBuyOrderDao;
|
||||||
|
@ -32,7 +32,8 @@ public class MarketIndexController implements IMarketIndexService {
|
|||||||
|
|
||||||
private final IIndexGroupBuyMarketService indexGroupBuyMarketService;
|
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")
|
@PostMapping("/query_group_buy_market_config")
|
||||||
@Override
|
@Override
|
||||||
public Response<GoodsMarketResponseDTO> queryGroupBuyMarketConfig(
|
public Response<GoodsMarketResponseDTO> queryGroupBuyMarketConfig(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user