Files
FlashSaleSystem/src/main/java/com/org/flashsalesystem/entity/FlashSale.java

90 lines
2.3 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;
}
}