Collection.java 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. package com.izouma.nineth.domain;
  2. import com.fasterxml.jackson.annotation.JsonView;
  3. import com.fasterxml.jackson.databind.annotation.JsonSerialize;
  4. import com.izouma.nineth.annotations.Searchable;
  5. import com.izouma.nineth.annotations.SearchableOne;
  6. import com.izouma.nineth.converter.FileObjectConverter;
  7. import com.izouma.nineth.converter.FileObjectListConverter;
  8. import com.izouma.nineth.converter.PrivilegeListConverter;
  9. import com.izouma.nineth.converter.PropertyListConverter;
  10. import com.izouma.nineth.enums.CollectionSource;
  11. import com.izouma.nineth.enums.CollectionType;
  12. import com.izouma.nineth.utils.CollectionTagSerializer;
  13. import io.swagger.annotations.ApiModel;
  14. import io.swagger.annotations.ApiModelProperty;
  15. import lombok.AllArgsConstructor;
  16. import lombok.Builder;
  17. import lombok.Data;
  18. import lombok.NoArgsConstructor;
  19. import org.hibernate.annotations.DynamicUpdate;
  20. import org.hibernate.annotations.Formula;
  21. import javax.persistence.*;
  22. import java.math.BigDecimal;
  23. import java.math.BigInteger;
  24. import java.time.LocalDateTime;
  25. import java.util.HashSet;
  26. import java.util.List;
  27. import java.util.Set;
  28. /**
  29. * 藏品
  30. */
  31. @Data
  32. @Entity
  33. @Table(name = "collection_info", indexes = {
  34. @Index(columnList = "type"),
  35. @Index(columnList = "source"),
  36. @Index(columnList = "minterId"),
  37. @Index(columnList = "onShelf"),
  38. @Index(columnList = "ownerId"),
  39. @Index(columnList = "assetId"),
  40. @Index(columnList = "salable"),
  41. @Index(columnList = "del"),
  42. @Index(columnList = "name"),
  43. @Index(columnList = "createdAt"),
  44. @Index(columnList = "sale"),
  45. @Index(columnList = "sort"),
  46. @Index(columnList = "del"),
  47. @Index(columnList = "price"),
  48. @Index(columnList = "likes"),
  49. @Index(columnList = "onShelf,del"),
  50. @Index(columnList = "onShelf,del,source"),
  51. @Index(columnList = "onShelf,del,source,salable"),
  52. @Index(columnList = "onShelf,del,source,salable,price"),
  53. @Index(columnList = "prefixName"),
  54. })
  55. @DynamicUpdate
  56. @AllArgsConstructor
  57. @NoArgsConstructor
  58. @Builder
  59. @ApiModel("藏品")
  60. public class Collection extends CollectionBaseEntity {
  61. public interface View {
  62. interface Basic {
  63. }
  64. interface Detail {
  65. }
  66. }
  67. //@transient 就是在给某个javabean上需要添加个属性,但是这个属性你又不希望给存到数据库中去,仅仅是做个临时变量,用一下。不修改已经存在数据库的数据的数据结构。
  68. @Transient
  69. private boolean liked;
  70. @Transient
  71. private boolean appointment;
  72. @Transient
  73. private int vipSurplus;
  74. @ApiModelProperty("名称")
  75. @Searchable
  76. private String name;
  77. //columnDefinition 实在是比较万能,不好定义或者没有这个属性的直接用columnDefinition根据ddl来定义即可,字段的注释也是可以定义的。
  78. @ApiModelProperty("图片")
  79. @Column(columnDefinition = "TEXT")
  80. @Convert(converter = FileObjectListConverter.class)
  81. private List<FileObject> pic;
  82. @Column(columnDefinition = "TEXT")
  83. @Convert(converter = FileObjectConverter.class)
  84. private FileObject model3d;
  85. @ApiModelProperty("铸造者")
  86. @SearchableOne
  87. private String minter;
  88. @ApiModelProperty("铸造者ID")
  89. private Long minterId;
  90. @ApiModelProperty("铸造者头像")
  91. private String minterAvatar;
  92. @ApiModelProperty("持有者")
  93. @SearchableOne
  94. private String owner;
  95. @ApiModelProperty("持有者者ID")
  96. private Long ownerId;
  97. private Long oasisId;
  98. private Long raceId;
  99. private Long groupId;
  100. private Long itemId;
  101. @ApiModelProperty("铸造者头像")
  102. private String ownerAvatar;
  103. @ApiModelProperty("详情")
  104. @Column(columnDefinition = "TEXT")
  105. private String detail;
  106. @ApiModelProperty("类型")
  107. @Enumerated(EnumType.STRING)
  108. @Column(length = 20)
  109. private CollectionType type;
  110. @Column(columnDefinition = "TEXT")
  111. @Convert(converter = PropertyListConverter.class)
  112. @ApiModelProperty("特性")
  113. private List<CollectionProperty> properties;
  114. @Column(columnDefinition = "TEXT")
  115. @Convert(converter = PrivilegeListConverter.class)
  116. @ApiModelProperty("特权")
  117. private List<Privilege> privileges;
  118. @ApiModelProperty("编号")
  119. private Integer number;
  120. @ApiModelProperty("是否可转售")
  121. @Column(columnDefinition = "tinyint unsigned")
  122. private boolean canResale;
  123. @ApiModelProperty("版税比例")
  124. private double royalties;
  125. @ApiModelProperty("手续费比例")
  126. private double serviceCharge;
  127. @ApiModelProperty("分类")
  128. private String category;
  129. @ApiModelProperty("来源")
  130. @Enumerated(EnumType.STRING)
  131. @Column(length = 20)
  132. private CollectionSource source;
  133. @ApiModelProperty("已售")
  134. private int sale;
  135. @ApiModelProperty("库存")
  136. private int stock;
  137. @ApiModelProperty("发行数量")
  138. private int total;
  139. @ApiModelProperty("点赞")
  140. private int likes;
  141. @ApiModelProperty("上架")
  142. @Column(columnDefinition = "tinyint unsigned")
  143. private boolean onShelf;
  144. @ApiModelProperty("可售")
  145. @Column(columnDefinition = "tinyint unsigned")
  146. private boolean salable;
  147. @ApiModelProperty("价格")
  148. @Column(precision = 10, scale = 2)
  149. private BigDecimal price;
  150. @ApiModelProperty("盲盒开售时间")
  151. private LocalDateTime startTime;
  152. @Column(columnDefinition = "tinyint unsigned")
  153. private boolean scheduleSale;
  154. private int sort;
  155. private Long assetId;
  156. private BigDecimal originalPrice;
  157. private Integer currentNumber;
  158. @Formula(value = "if(stock <= 0, 1, 0)")
  159. private int soldOut;
  160. @ApiModelProperty("限购数量")
  161. private int maxCount;
  162. @ApiModelProperty("限购识别码")
  163. private String countId;
  164. @Column(columnDefinition = "tinyint unsigned")
  165. private boolean scanCode;
  166. /*
  167. true: 没售罄
  168. false: 已售罄
  169. */
  170. @ApiModelProperty("手动售罄")
  171. @Column(columnDefinition = "tinyint unsigned")
  172. private boolean noSoldOut;
  173. @ApiModelProperty("拉新任务指标")
  174. private int assignment;
  175. @ApiModelProperty("优惠券支付")
  176. @Column(columnDefinition = "tinyint unsigned")
  177. private boolean couponPayment;
  178. @ApiModelProperty("分享背景")
  179. private String shareBg;
  180. @ApiModelProperty("注册背景")
  181. private String registerBg;
  182. @ApiModelProperty("总额度")
  183. private Integer totalQuota;
  184. @ApiModelProperty("剩余额度")
  185. private Integer vipQuota;
  186. @ApiModelProperty("延迟销售")
  187. private Boolean timeDelay;
  188. @ApiModelProperty("销售时间")
  189. private LocalDateTime saleTime;
  190. @ApiModelProperty("持有几天")
  191. private Integer holdDays;
  192. @ApiModelProperty("开启抢白名单")
  193. private Boolean openQuota;
  194. @ApiModelProperty("最低消费")
  195. private BigDecimal minimumCharge;
  196. @ApiModelProperty("是否支付中")
  197. private boolean inPaying;
  198. @ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE})
  199. @JoinTable(
  200. name = "collection_tag",
  201. joinColumns = {@JoinColumn(name = "collection_id", referencedColumnName = "id",
  202. foreignKey = @ForeignKey(foreignKeyDefinition =
  203. "FOREIGN KEY (collection_id) REFERENCES collection_info(id) ON DELETE CASCADE ON UPDATE CASCADE"
  204. ))},
  205. inverseJoinColumns = {@JoinColumn(name = "tag_id", referencedColumnName = "id",
  206. foreignKey = @ForeignKey(foreignKeyDefinition =
  207. "FOREIGN KEY (tag_id) REFERENCES tag(id) ON DELETE CASCADE ON UPDATE CASCADE"
  208. ))})
  209. @JsonSerialize(using = CollectionTagSerializer.class, as = HashSet.class)
  210. @JsonView(View.Detail.class)
  211. private Set<Tag> tags = new HashSet<>();
  212. @ApiModelProperty("活动规则")
  213. @Column(columnDefinition = "TEXT")
  214. private String rule;
  215. private String hcTxHash;
  216. private BigInteger hcBlockNumber;
  217. private BigInteger hcGasUsed;
  218. private String hcTokenId;
  219. @ApiModelProperty("系列名称")
  220. @Column(length = 100)
  221. private String prefixName;
  222. @ApiModelProperty("赋能列表")
  223. @Column(columnDefinition = "TEXT")
  224. private String empower;
  225. @Column(columnDefinition = "bigint default 1 not null")
  226. private Long companyId = 1L;
  227. @ApiModelProperty("bit 0: 蚂蚁链, bit 1: 华储链")
  228. @Column(columnDefinition = "int default 3 not null")
  229. private int chainFlag;
  230. @ApiModelProperty("新闻id")
  231. private Long newsId;
  232. @ApiModelProperty("新闻标题")
  233. private String newsTitle;
  234. @ApiModelProperty("新闻图片")
  235. private String newsPic;
  236. private LocalDateTime newsCreatedTime;
  237. private boolean messNumber;
  238. }