Collection.java 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287
  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. @Data
  29. @Entity
  30. @Table(name = "collection_info", indexes = {
  31. @Index(columnList = "type"),
  32. @Index(columnList = "source"),
  33. @Index(columnList = "minterId"),
  34. @Index(columnList = "onShelf"),
  35. @Index(columnList = "ownerId"),
  36. @Index(columnList = "assetId"),
  37. @Index(columnList = "salable"),
  38. @Index(columnList = "del"),
  39. @Index(columnList = "name"),
  40. @Index(columnList = "createdAt"),
  41. @Index(columnList = "sale"),
  42. @Index(columnList = "sort"),
  43. @Index(columnList = "del"),
  44. @Index(columnList = "price"),
  45. @Index(columnList = "likes"),
  46. @Index(columnList = "onShelf,del"),
  47. @Index(columnList = "onShelf,del,source"),
  48. @Index(columnList = "onShelf,del,source,salable"),
  49. @Index(columnList = "onShelf,del,source,salable,price"),
  50. @Index(columnList = "prefixName"),
  51. })
  52. @DynamicUpdate
  53. @AllArgsConstructor
  54. @NoArgsConstructor
  55. @Builder
  56. @ApiModel("藏品")
  57. public class Collection extends CollectionBaseEntity {
  58. public interface View {
  59. interface Basic {
  60. }
  61. interface Detail {
  62. }
  63. }
  64. @Transient
  65. private boolean liked;
  66. @Transient
  67. private boolean appointment;
  68. @Transient
  69. private int vipSurplus;
  70. @ApiModelProperty("名称")
  71. @Searchable
  72. private String name;
  73. @ApiModelProperty("图片")
  74. @Column(columnDefinition = "TEXT")
  75. @Convert(converter = FileObjectListConverter.class)
  76. private List<FileObject> pic;
  77. @Column(columnDefinition = "TEXT")
  78. @Convert(converter = FileObjectConverter.class)
  79. private FileObject model3d;
  80. @ApiModelProperty("铸造者")
  81. @SearchableOne
  82. private String minter;
  83. @ApiModelProperty("铸造者ID")
  84. private Long minterId;
  85. @ApiModelProperty("铸造者头像")
  86. private String minterAvatar;
  87. @ApiModelProperty("持有者")
  88. @SearchableOne
  89. private String owner;
  90. @ApiModelProperty("持有者者ID")
  91. private Long ownerId;
  92. private Long oasisId;
  93. @ApiModelProperty("铸造者头像")
  94. private String ownerAvatar;
  95. @ApiModelProperty("详情")
  96. @Column(columnDefinition = "TEXT")
  97. private String detail;
  98. @ApiModelProperty("类型")
  99. @Enumerated(EnumType.STRING)
  100. @Column(length = 20)
  101. private CollectionType type;
  102. @Column(columnDefinition = "TEXT")
  103. @Convert(converter = PropertyListConverter.class)
  104. @ApiModelProperty("特性")
  105. private List<CollectionProperty> properties;
  106. @Column(columnDefinition = "TEXT")
  107. @Convert(converter = PrivilegeListConverter.class)
  108. @ApiModelProperty("特权")
  109. private List<Privilege> privileges;
  110. @ApiModelProperty("编号")
  111. private Integer number;
  112. @ApiModelProperty("是否可转售")
  113. @Column(columnDefinition = "tinyint unsigned")
  114. private boolean canResale;
  115. @ApiModelProperty("版税比例")
  116. private double royalties;
  117. @ApiModelProperty("手续费比例")
  118. private double serviceCharge;
  119. @ApiModelProperty("分类")
  120. private String category;
  121. @ApiModelProperty("来源")
  122. @Enumerated(EnumType.STRING)
  123. @Column(length = 20)
  124. private CollectionSource source;
  125. @ApiModelProperty("已售")
  126. private int sale;
  127. @ApiModelProperty("库存")
  128. private int stock;
  129. @ApiModelProperty("发行数量")
  130. private int total;
  131. @ApiModelProperty("点赞")
  132. private int likes;
  133. @ApiModelProperty("上架")
  134. @Column(columnDefinition = "tinyint unsigned")
  135. private boolean onShelf;
  136. @ApiModelProperty("可售")
  137. @Column(columnDefinition = "tinyint unsigned")
  138. private boolean salable;
  139. @ApiModelProperty("价格")
  140. @Column(precision = 10, scale = 2)
  141. private BigDecimal price;
  142. @ApiModelProperty("盲盒开售时间")
  143. private LocalDateTime startTime;
  144. @Column(columnDefinition = "tinyint unsigned")
  145. private boolean scheduleSale;
  146. private int sort;
  147. private Long assetId;
  148. private BigDecimal originalPrice;
  149. private Integer currentNumber;
  150. @Formula(value = "if(stock <= 0, 1, 0)")
  151. private int soldOut;
  152. @ApiModelProperty("限购数量")
  153. private int maxCount;
  154. @ApiModelProperty("限购识别码")
  155. private String countId;
  156. @Column(columnDefinition = "tinyint unsigned")
  157. private boolean scanCode;
  158. /*
  159. true: 没售罄
  160. false: 已售罄
  161. */
  162. @ApiModelProperty("手动售罄")
  163. @Column(columnDefinition = "tinyint unsigned")
  164. private boolean noSoldOut;
  165. @ApiModelProperty("拉新任务指标")
  166. private int assignment;
  167. @ApiModelProperty("优惠券支付")
  168. @Column(columnDefinition = "tinyint unsigned")
  169. private boolean couponPayment;
  170. @ApiModelProperty("分享背景")
  171. private String shareBg;
  172. @ApiModelProperty("注册背景")
  173. private String registerBg;
  174. @ApiModelProperty("总额度")
  175. private Integer totalQuota;
  176. @ApiModelProperty("剩余额度")
  177. private Integer vipQuota;
  178. @ApiModelProperty("延迟销售")
  179. private Boolean timeDelay;
  180. @ApiModelProperty("销售时间")
  181. private LocalDateTime saleTime;
  182. @ApiModelProperty("持有几天")
  183. private Integer holdDays;
  184. @ApiModelProperty("开启抢白名单")
  185. private Boolean openQuota;
  186. @ApiModelProperty("最低消费")
  187. private BigDecimal minimumCharge;
  188. @ApiModelProperty("是否支付中")
  189. private boolean inPaying;
  190. @ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE})
  191. @JoinTable(
  192. name = "collection_tag",
  193. joinColumns = {@JoinColumn(name = "collection_id", referencedColumnName = "id",
  194. foreignKey = @ForeignKey(foreignKeyDefinition =
  195. "FOREIGN KEY (collection_id) REFERENCES collection_info(id) ON DELETE CASCADE ON UPDATE CASCADE"
  196. ))},
  197. inverseJoinColumns = {@JoinColumn(name = "tag_id", referencedColumnName = "id",
  198. foreignKey = @ForeignKey(foreignKeyDefinition =
  199. "FOREIGN KEY (tag_id) REFERENCES tag(id) ON DELETE CASCADE ON UPDATE CASCADE"
  200. ))})
  201. @JsonSerialize(using = CollectionTagSerializer.class, as = HashSet.class)
  202. @JsonView(View.Detail.class)
  203. private Set<Tag> tags = new HashSet<>();
  204. @ApiModelProperty("活动规则")
  205. @Column(columnDefinition = "TEXT")
  206. private String rule;
  207. private String hcTxHash;
  208. private BigInteger hcBlockNumber;
  209. private BigInteger hcGasUsed;
  210. private String hcTokenId;
  211. @ApiModelProperty("系列名称")
  212. @Column(length = 100)
  213. private String prefixName;
  214. @ApiModelProperty("赋能列表")
  215. @Column(columnDefinition = "TEXT")
  216. private String empower;
  217. @Column(columnDefinition = "bigint default 1 not null")
  218. private Long companyId;
  219. @ApiModelProperty("bit 0: 蚂蚁链, bit 1: 华储链")
  220. @Column(columnDefinition = "int default 3 not null")
  221. private int chainFlag;
  222. }