User.java 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. package com.izouma.nineth.domain;
  2. import com.alibaba.excel.annotation.ExcelIgnore;
  3. import com.fasterxml.jackson.annotation.JsonIgnore;
  4. import com.fasterxml.jackson.annotation.JsonView;
  5. import com.fasterxml.jackson.databind.annotation.JsonSerialize;
  6. import com.izouma.nineth.annotations.Searchable;
  7. import com.izouma.nineth.enums.AuthStatus;
  8. import com.izouma.nineth.enums.InviteType;
  9. import com.izouma.nineth.enums.SearchMode;
  10. import com.izouma.nineth.security.Authority;
  11. import com.izouma.nineth.utils.UserAuthoritySerializer;
  12. import io.swagger.annotations.ApiModel;
  13. import io.swagger.annotations.ApiModelProperty;
  14. import lombok.AllArgsConstructor;
  15. import lombok.Builder;
  16. import lombok.Data;
  17. import lombok.NoArgsConstructor;
  18. import org.hibernate.annotations.BatchSize;
  19. import org.hibernate.annotations.DynamicUpdate;
  20. import javax.persistence.*;
  21. import javax.validation.constraints.Size;
  22. import java.io.Serializable;
  23. import java.math.BigDecimal;
  24. import java.util.HashSet;
  25. import java.util.Set;
  26. @Data
  27. @Entity
  28. @Table(indexes = {
  29. @Index(columnList = "phone", unique = true, name = "user_index_phone"),
  30. @Index(columnList = "collectionId"),
  31. @Index(columnList = "collectionInvitor"),
  32. @Index(columnList = "admin"),
  33. @Index(columnList = "minter"),
  34. @Index(columnList = "company"),
  35. @Index(columnList = "createdAt"),
  36. @Index(columnList = "settleAccountId"),
  37. @Index(columnList = "nickname"),
  38. @Index(columnList = "del"),
  39. })
  40. @AllArgsConstructor
  41. @NoArgsConstructor
  42. @Builder
  43. @ApiModel(value = "用户", description = "用户")
  44. @DynamicUpdate
  45. public class User extends UserBaseEntity implements Serializable {
  46. public interface View {
  47. interface Basic {
  48. }
  49. interface Detail {
  50. }
  51. }
  52. // @Pattern(regexp = Constants.Regex.USERNAME)
  53. @Size(min = 1, max = 50)
  54. @Column(nullable = false, unique = true)
  55. @Searchable(mode = SearchMode.EXACT)
  56. private String username;
  57. @Searchable(mode = SearchMode.EXACT)
  58. private String nickname;
  59. private String avatar;
  60. @JsonView(View.Detail.class)
  61. private String password;
  62. private boolean del = false;
  63. @ManyToMany(fetch = FetchType.EAGER, cascade = {CascadeType.DETACH})
  64. @JoinTable(
  65. name = "user_authority",
  66. joinColumns = {@JoinColumn(name = "user_id", referencedColumnName = "id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))},
  67. inverseJoinColumns = {@JoinColumn(name = "authority_name", referencedColumnName = "name", foreignKey = @ForeignKey(name = "none", value = ConstraintMode.NO_CONSTRAINT))})
  68. @BatchSize(size = 20)
  69. @ExcelIgnore
  70. @JsonSerialize(using = UserAuthoritySerializer.class, as = HashSet.class)
  71. @JsonView(View.Detail.class)
  72. private Set<Authority> authorities = new HashSet<>();
  73. private String openId;
  74. private String sex;
  75. private String language;
  76. private String city;
  77. private String province;
  78. private String country;
  79. @Searchable(mode = SearchMode.EXACT)
  80. private String phone;
  81. private String email;
  82. @ApiModelProperty("关注数量")
  83. private int follows;
  84. @ApiModelProperty("粉丝数量")
  85. private int followers;
  86. private int sales;
  87. @Column(columnDefinition = "TEXT")
  88. private String intro;
  89. private String bg;
  90. private Long authId;
  91. @ApiModelProperty("实名审核状态")
  92. @Enumerated(EnumType.STRING)
  93. private AuthStatus authStatus;
  94. private String nftAccount;
  95. @JsonIgnore
  96. private String kmsId;
  97. @JsonIgnore
  98. private String publicKey;
  99. @JsonIgnore
  100. private String tradeCode;
  101. @Column(columnDefinition = "tinyint unsigned")
  102. private boolean admin;
  103. @ApiModelProperty("分成比例")
  104. @Column(precision = 10, scale = 2)
  105. private BigDecimal shareRatio;
  106. private String memberId;
  107. private String settleAccountId;
  108. private String invitorName;
  109. private String invitorPhone;
  110. private String inviteCode;
  111. @ApiModelProperty("分享藏品邀请者")
  112. private Long collectionInvitor;
  113. @ApiModelProperty("藏品Id")
  114. private Long collectionId;
  115. @ApiModelProperty("勋章等级")
  116. private int level;
  117. @ApiModelProperty("优先购买")
  118. private int vipPurchase;
  119. @Column(columnDefinition = "tinyint unsigned")
  120. private boolean minter;
  121. /**
  122. * 0 无光 1 绿光 2 金光
  123. */
  124. @ApiModelProperty("使用藏品图片")
  125. @Column(columnDefinition = "tinyint unsigned default 0")
  126. private boolean useCollectionPic;
  127. @Column(columnDefinition = "int(11) default 0")
  128. @ApiModelProperty("白名单积分")
  129. private int vipPoint = 0;
  130. @ApiModelProperty(value = "风险提示")
  131. private Boolean riskWarning;
  132. @Column(columnDefinition = "tinyint unsigned default 0")
  133. private boolean canSale = false;
  134. @Column(columnDefinition = "tinyint unsigned default 0")
  135. private boolean company = false;
  136. @Column(columnDefinition = "tinyint unsigned default 0")
  137. private boolean walletEnabled = false;
  138. private String hcChainAddress;
  139. @Column(columnDefinition = "int(11) default 0")
  140. @ApiModelProperty("销毁积分")
  141. private int destroyPoint = 0;
  142. @Column(columnDefinition = "tinyint unsigned default 1")
  143. @ApiModelProperty("主页是否展示")
  144. private Boolean isPublicShow = Boolean.TRUE;
  145. private Long companyId;
  146. @ApiModelProperty("是否关注")
  147. @Transient
  148. private boolean follow;
  149. @Enumerated(EnumType.STRING)
  150. private InviteType inviteType;
  151. @Transient
  152. private String metaCompany;
  153. }