90 lines
2.3 KiB
Java
90 lines
2.3 KiB
Java
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;
|
||
}
|
||
}
|