首次提交
This commit is contained in:
commit
1101681331
131 changed files with 7017 additions and 0 deletions
127
src/main/java/com/xjhs/findmemerchant/entity/Member.java
Normal file
127
src/main/java/com/xjhs/findmemerchant/entity/Member.java
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
package com.xjhs.findmemerchant.entity;
|
||||
|
||||
import com.xjhs.findmemerchant.common.jpa.AbstractBaseEntity;
|
||||
import jakarta.persistence.*;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.hibernate.annotations.Comment;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 会员实体(C 端用户)
|
||||
* 对应表:members
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@Entity
|
||||
@Table(
|
||||
name = "members",
|
||||
indexes = {
|
||||
@Index(name = "idx_members_phone", columnList = "phone")
|
||||
},
|
||||
uniqueConstraints = {
|
||||
@UniqueConstraint(
|
||||
name = "idx_merchant_phone",
|
||||
columnNames = {"merchant_id", "phone"}
|
||||
)
|
||||
}
|
||||
)
|
||||
public class Member extends AbstractBaseEntity {
|
||||
|
||||
/**
|
||||
* 手机号
|
||||
*/
|
||||
@Column(name = "phone", nullable = false, length = 11)
|
||||
@Comment("手机号")
|
||||
private String phone;
|
||||
|
||||
/**
|
||||
* 昵称
|
||||
*/
|
||||
@Column(name = "nickname", length = 50)
|
||||
@Comment("昵称")
|
||||
private String nickname;
|
||||
|
||||
/**
|
||||
* 头像地址
|
||||
*/
|
||||
@Column(name = "avatar", length = 500)
|
||||
@Comment("头像URL")
|
||||
private String avatar;
|
||||
|
||||
/**
|
||||
* 累计订单数
|
||||
*/
|
||||
@Column(name = "total_orders", nullable = false)
|
||||
@Comment("累计订单数")
|
||||
private Integer totalOrders = 0;
|
||||
|
||||
/**
|
||||
* 累计消费金额
|
||||
*/
|
||||
@Column(name = "total_amount", nullable = false, precision = 12, scale = 2)
|
||||
@Comment("累计消费金额")
|
||||
private BigDecimal totalAmount = BigDecimal.ZERO;
|
||||
|
||||
/**
|
||||
* 最后一次下单时间
|
||||
*/
|
||||
@Column(name = "last_order_at")
|
||||
@Comment("最后下单时间")
|
||||
private LocalDateTime lastOrderAt;
|
||||
|
||||
// ============ 关联关系 ============
|
||||
/**
|
||||
* 商户
|
||||
*/
|
||||
@ManyToOne(fetch = FetchType.LAZY)
|
||||
@JoinColumn(name = "merchant_id", insertable = false, updatable = false)
|
||||
private Merchant merchant;
|
||||
|
||||
/**
|
||||
* 拥有的券码
|
||||
*/
|
||||
@OneToMany(mappedBy = "member", fetch = FetchType.LAZY)
|
||||
private List<CouponCode> couponCodes;
|
||||
|
||||
/**
|
||||
* 订单列表
|
||||
*/
|
||||
@OneToMany(mappedBy = "member", fetch = FetchType.LAZY)
|
||||
private List<Order> orders;
|
||||
|
||||
// ============ 业务方法 ============
|
||||
|
||||
/**
|
||||
* 返回脱敏手机号,例如:138****1234
|
||||
*/
|
||||
public String maskPhone() {
|
||||
if (phone == null || phone.length() != 11) {
|
||||
return phone;
|
||||
}
|
||||
return phone.substring(0, 3) + "****" + phone.substring(7);
|
||||
}
|
||||
|
||||
/**
|
||||
* 展示用名称:优先昵称,否则使用脱敏手机号
|
||||
*/
|
||||
public String getDisplayName() {
|
||||
if (nickname != null && !nickname.isBlank()) {
|
||||
return nickname;
|
||||
}
|
||||
return maskPhone();
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回头像URL,若为空则返回默认头像
|
||||
*/
|
||||
public String getAvatarOrDefault() {
|
||||
if (avatar != null && !avatar.isBlank()) {
|
||||
return avatar;
|
||||
}
|
||||
return "/static/default-avatar.png";
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue