首次提交

This commit is contained in:
guotao 2026-01-09 12:20:24 +08:00
commit 1101681331
131 changed files with 7017 additions and 0 deletions

View 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";
}
}