package com.org.flashsalesystem.entity; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import javax.persistence.*; import javax.validation.constraints.DecimalMin; import javax.validation.constraints.Min; import javax.validation.constraints.NotNull; import java.math.BigDecimal; import java.time.LocalDateTime; /** * 秒杀活动实体类 * 对应数据库flash_sales表 */ @Entity @Table(name = "flash_sales") @Data @NoArgsConstructor @AllArgsConstructor public class FlashSale { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @NotNull(message = "商品ID不能为空") @Column(name = "product_id", nullable = false) private Long productId; @NotNull(message = "秒杀价格不能为空") @DecimalMin(value = "0.01", message = "秒杀价格必须大于0") @Column(name = "flash_price", nullable = false, precision = 10, scale = 2) private BigDecimal flashPrice; @Min(value = 1, message = "秒杀库存必须大于0") @Column(name = "flash_stock", nullable = false) private Integer flashStock; @NotNull(message = "开始时间不能为空") @Column(name = "start_time", nullable = false) private LocalDateTime startTime; @NotNull(message = "结束时间不能为空") @Column(name = "end_time", nullable = false) private LocalDateTime endTime; /** * 活动状态:1-未开始,2-进行中,3-已结束 */ @Column(nullable = false) private Integer status = 1; @Column(name = "created_at", nullable = false, updatable = false) private LocalDateTime createdAt; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "product_id", insertable = false, updatable = false) private Product product; @PrePersist protected void onCreate() { createdAt = LocalDateTime.now(); } /** * 检查活动是否已开始 */ public boolean isStarted() { return LocalDateTime.now().isAfter(startTime); } /** * 检查活动是否已结束 */ public boolean isEnded() { return LocalDateTime.now().isAfter(endTime); } /** * 检查活动是否正在进行中 */ public boolean isActive() { LocalDateTime now = LocalDateTime.now(); return now.isAfter(startTime) && now.isBefore(endTime) && status == 2; } }