xiongzhu před 4 roky
rodič
revize
e9b4fb8c48

+ 6 - 0
pom.xml

@@ -326,6 +326,12 @@
             <artifactId>alipay-sdk-java</artifactId>
             <version>4.16.57.ALL</version>
         </dependency>
+
+        <dependency>
+            <groupId>com.github.ipfs</groupId>
+            <artifactId>java-ipfs-http-client</artifactId>
+            <version>v1.3.3</version>
+        </dependency>
     </dependencies>
 
 </project>

+ 9 - 0
src/main/java/com/izouma/nineth/domain/Asset.java

@@ -27,9 +27,18 @@ public class Asset extends BaseEntity {
     @ApiModelProperty("用户ID")
     private Long userId;
 
+    @ApiModelProperty("持有者")
+    private String ownerName;
+
+    @ApiModelProperty("藏品ID")
+    private Long collectionId;
+
     @ApiModelProperty("订单ID")
     private Long orderId;
 
+    @ApiModelProperty("编号")
+    private int number;
+
     @ApiModelProperty("名称")
     @Searchable
     private String name;

+ 80 - 0
src/main/java/com/izouma/nineth/domain/BlinkBox.java

@@ -0,0 +1,80 @@
+package com.izouma.nineth.domain;
+
+import com.izouma.nineth.annotations.Searchable;
+import com.izouma.nineth.converter.StringArrayConverter;
+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 javax.persistence.*;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel("盲盒")
+public class BlinkBox extends BaseEntity {
+
+    @ApiModelProperty("名称")
+    @Searchable
+    private String name;
+
+    @ApiModelProperty("图片")
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = StringArrayConverter.class)
+    private List<String> pics;
+
+    @ApiModelProperty("铸造者")
+    @Searchable
+    private String minter;
+
+    @ApiModelProperty("铸造者ID")
+    private Long minterId;
+
+    @ApiModelProperty("铸造者头像")
+    private String minterAvatar;
+
+    @ApiModelProperty("详情")
+    @Column(columnDefinition = "TEXT")
+    private String detail;
+
+    @ApiModelProperty("类型")
+    @Enumerated(EnumType.STRING)
+    private CollectionType type;
+
+    @ApiModelProperty("来源")
+    @Enumerated(EnumType.STRING)
+    private CollectionSource source;
+
+    @ApiModelProperty("已售")
+    private int sale;
+
+    @ApiModelProperty("库存")
+    private int stock;
+
+    @ApiModelProperty("点赞")
+    private int likes;
+
+    @ApiModelProperty("上架")
+    private boolean onShelf;
+
+    @ApiModelProperty("可售")
+    private boolean salable;
+
+    @ApiModelProperty("价格")
+    @Column(precision = 10, scale = 2)
+    private BigDecimal price;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = Collection.PropertyListConverter.class)
+    @ApiModelProperty("特性")
+    private List<Collection.CollectionProperty> properties;
+}

+ 2 - 0
src/main/java/com/izouma/nineth/domain/Collection.java

@@ -82,6 +82,8 @@ public class Collection extends BaseEntity {
     @ApiModelProperty("特性")
     private List<CollectionProperty> properties;
 
+    private boolean canResale;
+
     @Data
     public static class CollectionProperty {
         private String name;

+ 4 - 3
src/main/java/com/izouma/nineth/domain/CollectionNumber.java

@@ -15,15 +15,14 @@ import java.math.BigDecimal;
 @Builder
 @ApiModel("藏品编号")
 public class CollectionNumber {
+
     private Long collectionId;
 
     private String number;
 
     private int sort;
 
-    private BigDecimal price;
-
-    private Long owner;
+    private Long ownerId;
 
     private Long assetId;
 
@@ -31,5 +30,7 @@ public class CollectionNumber {
 
     private boolean salable;
 
+    private BigDecimal price;
+
 
 }

+ 4 - 1
src/main/java/com/izouma/nineth/enums/AssetStatus.java

@@ -3,7 +3,10 @@ package com.izouma.nineth.enums;
 public enum AssetStatus {
     NORMAL("正常"),
     ON_SALE("出售中"),
-    TRANSFERRED("已转让"),;
+    IN_BLIND_BOX("盲盒中"),
+    TRANSFERRING("转让中"),
+    TRANSFERRED("已转让"),
+    ;
 
     private final String description;
 

+ 1 - 1
src/main/java/com/izouma/nineth/security/JwtTokenUtil.java

@@ -74,7 +74,7 @@ public class JwtTokenUtil implements Serializable {
         return doGenerateToken(claims, userDetails.getUsername());
     }
 
-    private String doGenerateToken(Map<String, Object> claims, String subject) {
+    public String doGenerateToken(Map<String, Object> claims, String subject) {
         final Date createdDate = clock.now();
         final Date expirationDate = calculateExpirationDate(createdDate);
 

+ 13 - 1
src/main/java/com/izouma/nineth/service/sms/AliSmsService.java

@@ -11,6 +11,8 @@ import com.izouma.nineth.config.Constants;
 import com.izouma.nineth.domain.SmsRecord;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.SmsRecordRepo;
+import io.jsonwebtoken.Jwts;
+import io.jsonwebtoken.SignatureAlgorithm;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -21,6 +23,8 @@ import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
+import java.util.Date;
+import java.util.HashMap;
 
 @Service
 @Slf4j
@@ -81,7 +85,7 @@ public class AliSmsService implements SmsService {
     }
 
     @Override
-    public void verify(String phone, String code) {
+    public String verify(String phone, String code) {
         SmsRecord smsRecord = smsRecordRepo.findLastByPhoneAndExpiresAtAfterAndExpiredFalse(phone, LocalDateTime.now())
                 .orElseThrow(new BusinessException("验证码错误"));
         if (!smsRecord.getCode().equalsIgnoreCase(code)) {
@@ -89,6 +93,14 @@ public class AliSmsService implements SmsService {
         }
         smsRecord.setExpired(true);
         smsRecordRepo.save(smsRecord);
+
+        return Jwts.builder()
+                .setClaims(new HashMap<>())
+                .setSubject(phone)
+                .setIssuedAt(new Date())
+                .setExpiration(new Date(new Date().getTime() + 10 * 60 * 1000)) //10min
+                .signWith(SignatureAlgorithm.HS512, "jwtConfig.getSecret()")
+                .compact();
     }
 
 

+ 1 - 1
src/main/java/com/izouma/nineth/service/sms/SmsService.java

@@ -5,7 +5,7 @@ import java.util.function.Supplier;
 public interface SmsService {
     String sendVerify(String phone);
 
-    void verify(String phone, String code);
+    String verify(String phone, String code);
 
     class SmsVerifyException extends Exception implements Supplier<SmsVerifyException> {
         public SmsVerifyException(String msg) {

+ 17 - 1
src/test/java/com/izouma/nineth/CommonTest.java

@@ -6,6 +6,11 @@ import com.izouma.nineth.enums.AuthorityName;
 import com.izouma.nineth.security.Authority;
 import com.izouma.nineth.utils.UrlUtils;
 import com.izouma.nineth.web.BaseController;
+import io.ipfs.api.IPFS;
+import io.ipfs.api.MerkleNode;
+import io.ipfs.api.NamedStreamable;
+import io.ipfs.cid.Cid;
+import io.ipfs.multihash.Multihash;
 import lombok.SneakyThrows;
 import org.apache.commons.codec.EncoderException;
 import org.apache.commons.codec.net.URLCodec;
@@ -15,6 +20,7 @@ import org.apache.http.client.utils.URLEncodedUtils;
 import org.apache.poi.util.TempFile;
 import org.bouncycastle.util.encoders.Base64;
 import org.bouncycastle.util.encoders.UrlBase64Encoder;
+import org.junit.Assert;
 import org.junit.Test;
 import org.libjpegturbo.turbojpeg.processor.api.ImageProcessInfo;
 import org.libjpegturbo.turbojpeg.processor.api.ImageProcessor;
@@ -191,4 +197,14 @@ public class CommonTest {
             e.printStackTrace();
         }
     }
-}
+
+    @Test
+    public void testIPFS() throws IOException {
+        IPFS ipfs = new IPFS("121.40.132.44", 5001);
+        NamedStreamable.FileWrapper file1 = new NamedStreamable.FileWrapper(new File("/Users/drew/Desktop/截屏2021-10-19 上午11.22.10.png"));
+        MerkleNode put = ipfs.add(file1).get(0);
+        Multihash multihash = ipfs.pin.add(put.hash).get(0);
+        System.out.println(put.hash.toBase58());
+        System.out.println(multihash.toBase58());
+    }
+}