package com.izouma.nineth.domain; import com.izouma.nineth.annotations.Searchable; import com.izouma.nineth.annotations.SearchableOne; import com.izouma.nineth.converter.FileObjectConverter; import com.izouma.nineth.converter.FileObjectListConverter; import com.izouma.nineth.converter.PrivilegeListConverter; import com.izouma.nineth.converter.PropertyListConverter; import com.izouma.nineth.enums.CollectionSource; import com.izouma.nineth.enums.CollectionType; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import org.hibernate.annotations.Formula; import javax.persistence.*; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; @Data @Entity @Table(name = "collection_info", indexes = { @Index(columnList = "type,source"), @Index(columnList = "minterId"), @Index(columnList = "onShelf"), @Index(columnList = "ownerId"), @Index(columnList = "assetId") }) @AllArgsConstructor @NoArgsConstructor @Builder @ApiModel("藏品") public class Collection extends BaseEntity { @ApiModelProperty("名称") @Searchable private String name; @ApiModelProperty("图片") @Column(columnDefinition = "TEXT") @Convert(converter = FileObjectListConverter.class) private List pic; @Column(columnDefinition = "TEXT") @Convert(converter = FileObjectConverter.class) private FileObject model3d; @ApiModelProperty("铸造者") @SearchableOne private String minter; @ApiModelProperty("铸造者ID") private Long minterId; @ApiModelProperty("铸造者头像") private String minterAvatar; @ApiModelProperty("持有者") @SearchableOne private String owner; @ApiModelProperty("持有者者ID") private Long ownerId; @ApiModelProperty("铸造者头像") private String ownerAvatar; @ApiModelProperty("详情") @Column(columnDefinition = "TEXT") private String detail; @ApiModelProperty("类型") @Enumerated(EnumType.STRING) private CollectionType type; @Column(columnDefinition = "TEXT") @Convert(converter = PropertyListConverter.class) @ApiModelProperty("特性") private List properties; @Column(columnDefinition = "TEXT") @Convert(converter = PrivilegeListConverter.class) @ApiModelProperty("特权") private List privileges; @ApiModelProperty("编号") private Integer number; @ApiModelProperty("是否可转售") private boolean canResale; @ApiModelProperty("版税比例") private int royalties; @ApiModelProperty("手续费比例") private int serviceCharge; @ApiModelProperty("分类") private String category; @ApiModelProperty("来源") @Enumerated(EnumType.STRING) private CollectionSource source; @ApiModelProperty("已售") private int sale; @ApiModelProperty("库存") private int stock; @ApiModelProperty("发行数量") private int total; @ApiModelProperty("点赞") private int likes; @ApiModelProperty("上架") private boolean onShelf; @ApiModelProperty("可售") private boolean salable; @ApiModelProperty("价格") @Column(precision = 10, scale = 2) private BigDecimal price; @ApiModelProperty("盲盒开售时间") private LocalDateTime startTime; private boolean scheduleSale; private int sort; private Long assetId; private BigDecimal originalPrice; private Integer currentNumber; @Formula(value = "if(stock <= 0, 1, 0)") private int soldOut; @ApiModelProperty("限购数量") private int maxCount; @ApiModelProperty("限购识别码") private String countId; private boolean scanCode; /* true: 没售罄 false: 已售罄 */ @ApiModelProperty("手动售罄") private boolean noSoldOut; @ApiModelProperty("拉新任务指标") private int assignment; @ApiModelProperty("优惠券支付") private boolean couponPayment; @ApiModelProperty("分享背景") private String shareBg; @ApiModelProperty("注册背景") private String registerBg; @ApiModelProperty("总额度") private Integer totalQuota; @ApiModelProperty("剩余额度") private Integer vipQuota; @ApiModelProperty("延迟销售") private Boolean timeDelay; @ApiModelProperty("销售时间") private LocalDateTime saleTime; @ApiModelProperty("持有几天") private Integer holdDays; @ApiModelProperty("开启抢白名单") private Boolean openQuota; @ApiModelProperty("展厅背景") private String showroomBg; @ApiModelProperty("最多可放藏品数量") private Integer maxCollection; @ApiModelProperty("藏品类别") private String collectionCategory; @ApiModelProperty("藏品者的作品字段") private String collectionWorks; @ApiModelProperty("关注") private boolean follow; @ApiModelProperty("发行方") private String issuer; @ApiModelProperty("购买须知") private String purchaseInstructions; @ApiModelProperty("预约结束时间") private LocalDateTime endTime; @ApiModelProperty("购买资格公布时间") private LocalDateTime publishTime; @ApiModelProperty("购买时间") private LocalDateTime purchaseTime; }