diff --git a/flash-sale-frontend/src/api/modules/flashsale.ts b/flash-sale-frontend/src/api/modules/flashsale.ts index fa35e96..ff6ef30 100644 --- a/flash-sale-frontend/src/api/modules/flashsale.ts +++ b/flash-sale-frontend/src/api/modules/flashsale.ts @@ -6,6 +6,7 @@ const flashSaleStatusToCode = (status?: string) => { if (status === 'UPCOMING') return 1 if (status === 'ACTIVE') return 2 if (status === 'ENDED') return 3 + if (status === 'PAUSED') return 4 return undefined } diff --git a/flash-sale-frontend/src/components/business/FlashSaleCard.vue b/flash-sale-frontend/src/components/business/FlashSaleCard.vue index 3ae082a..5daea4a 100644 --- a/flash-sale-frontend/src/components/business/FlashSaleCard.vue +++ b/flash-sale-frontend/src/components/business/FlashSaleCard.vue @@ -61,6 +61,7 @@ const statusType = computed(() => { case 'UPCOMING': return 'warning' case 'ACTIVE': return 'danger' case 'ENDED': return 'info' + case 'PAUSED': return 'warning' default: return 'info' } }) @@ -70,6 +71,7 @@ const statusText = computed(() => { case 'UPCOMING': return '即将开始' case 'ACTIVE': return '秒杀中' case 'ENDED': return '已结束' + case 'PAUSED': return '已暂停' default: return '未知' } }) diff --git a/flash-sale-frontend/src/pages/admin/flashsales.vue b/flash-sale-frontend/src/pages/admin/flashsales.vue index 12033d3..dc62d10 100644 --- a/flash-sale-frontend/src/pages/admin/flashsales.vue +++ b/flash-sale-frontend/src/pages/admin/flashsales.vue @@ -43,6 +43,7 @@ + 搜索 @@ -88,8 +89,8 @@ 编辑 发布 暂停 - 恢复 - 结束 + 恢复 + 结束 删除 @@ -253,6 +254,7 @@ const getStatusText = (status: string) => { const map: Record = { UPCOMING: '即将开始', ACTIVE: '进行中', + PAUSED: '已暂停', ENDED: '已结束', } return map[status] || status @@ -262,6 +264,7 @@ const getStatusType = (status: string) => { const map: Record = { UPCOMING: 'warning', ACTIVE: 'danger', + PAUSED: 'warning', ENDED: 'info', } return map[status] || 'info' diff --git a/flash-sale-frontend/src/types/api.d.ts b/flash-sale-frontend/src/types/api.d.ts index 750f910..8520b18 100644 --- a/flash-sale-frontend/src/types/api.d.ts +++ b/flash-sale-frontend/src/types/api.d.ts @@ -83,7 +83,7 @@ export interface FlashSale { remainingStock: number startTime: string endTime: string - status: 'UPCOMING' | 'ACTIVE' | 'ENDED' + status: 'UPCOMING' | 'ACTIVE' | 'ENDED' | 'PAUSED' limitPerUser: number description?: string createdAt: string diff --git a/flash-sale-frontend/src/utils/normalizers.ts b/flash-sale-frontend/src/utils/normalizers.ts index 02d261a..716fb11 100644 --- a/flash-sale-frontend/src/utils/normalizers.ts +++ b/flash-sale-frontend/src/utils/normalizers.ts @@ -59,6 +59,7 @@ export const mapFlashSaleStatus = (status: number | string): FlashSale['status'] if (value === 'UPCOMING' || value === 1) return 'UPCOMING' if (value === 'ACTIVE' || value === 2) return 'ACTIVE' if (value === 'ENDED' || value === 3) return 'ENDED' + if (value === 'PAUSED' || value === 4) return 'PAUSED' return 'UPCOMING' } diff --git a/src/main/java/com/org/flashsalesystem/repository/FlashSaleRepository.java b/src/main/java/com/org/flashsalesystem/repository/FlashSaleRepository.java index 0f195e4..83efe97 100644 --- a/src/main/java/com/org/flashsalesystem/repository/FlashSaleRepository.java +++ b/src/main/java/com/org/flashsalesystem/repository/FlashSaleRepository.java @@ -71,6 +71,11 @@ public interface FlashSaleRepository extends JpaRepository { @Query("SELECT f FROM FlashSale f WHERE f.endTime <= :now OR f.status = 3") Page findEndedFlashSales(@Param("now") LocalDateTime now, Pageable pageable); + /** + * 按状态分页查找秒杀活动 + */ + Page findByStatus(Integer status, Pageable pageable); + /** * 更新秒杀库存 */ diff --git a/src/main/java/com/org/flashsalesystem/service/FlashSaleService.java b/src/main/java/com/org/flashsalesystem/service/FlashSaleService.java index c2f42ef..c89bb75 100644 --- a/src/main/java/com/org/flashsalesystem/service/FlashSaleService.java +++ b/src/main/java/com/org/flashsalesystem/service/FlashSaleService.java @@ -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);