fix: 修复秒杀活动发布后状态未更新的问题
根因:publishFlashSale() 只做了缓存预热,从未调用 updateStatus() 将状态从1(未开始)更新为2(进行中),导致发布后UI无变化, 且活动无法被"进行中"查询找到。 修复内容: - publishFlashSale() 添加 updateStatus(id, 2) 和缓存更新 - 简化 getFlashSaleList 状态查询,直接按 status 字段过滤 - 新增 findByStatus 仓库方法 - 前后端全面支持 PAUSED(status=4) 状态 - 修复管理后台"恢复"按钮错误显示在"已结束"状态上 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -71,6 +71,11 @@ public interface FlashSaleRepository extends JpaRepository<FlashSale, Long> {
|
||||
@Query("SELECT f FROM FlashSale f WHERE f.endTime <= :now OR f.status = 3")
|
||||
Page<FlashSale> findEndedFlashSales(@Param("now") LocalDateTime now, Pageable pageable);
|
||||
|
||||
/**
|
||||
* 按状态分页查找秒杀活动
|
||||
*/
|
||||
Page<FlashSale> findByStatus(Integer status, Pageable pageable);
|
||||
|
||||
/**
|
||||
* 更新秒杀库存
|
||||
*/
|
||||
|
||||
@@ -326,19 +326,7 @@ public class FlashSaleService {
|
||||
} else {
|
||||
// 根据状态查询
|
||||
if (queryDTO.getStatus() != null) {
|
||||
switch (queryDTO.getStatus()) {
|
||||
case 1: // 未开始
|
||||
flashSalePage = flashSaleRepository.findUpcomingFlashSales(now, pageable);
|
||||
break;
|
||||
case 2: // 进行中
|
||||
flashSalePage = flashSaleRepository.findActiveFlashSales(now, pageable);
|
||||
break;
|
||||
case 3: // 已结束
|
||||
flashSalePage = flashSaleRepository.findEndedFlashSales(now, pageable);
|
||||
break;
|
||||
default:
|
||||
flashSalePage = flashSaleRepository.findAll(pageable);
|
||||
}
|
||||
flashSalePage = flashSaleRepository.findByStatus(queryDTO.getStatus(), pageable);
|
||||
} else {
|
||||
flashSalePage = flashSaleRepository.findAll(pageable);
|
||||
}
|
||||
@@ -753,10 +741,16 @@ public class FlashSaleService {
|
||||
|
||||
FlashSale flashSale = flashSaleOpt.get();
|
||||
|
||||
// 更新状态为进行中 (status = 2)
|
||||
flashSaleRepository.updateStatus(flashSaleId, 2);
|
||||
flashSale.setStatus(2);
|
||||
|
||||
// 预热缓存
|
||||
preloadFlashSale(flashSaleId);
|
||||
|
||||
// 更新缓存
|
||||
Product product = productRepository.findById(flashSale.getProductId()).orElse(null);
|
||||
cacheFlashSaleInfo(flashSale, product);
|
||||
|
||||
log.info("秒杀活动发布成功: ID={}", flashSaleId);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user