xiongzhu hace 4 años
padre
commit
7360070b7a

+ 4 - 0
src/main/java/com/izouma/nineth/dto/CreateBlindBox.java

@@ -2,11 +2,15 @@ package com.izouma.nineth.dto;
 
 import com.izouma.nineth.domain.BlindBoxItem;
 import com.izouma.nineth.domain.Collection;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
 import java.util.List;
 
 @Data
+@AllArgsConstructor
+@NoArgsConstructor
 public class CreateBlindBox {
     private Collection         blindBox;
     private List<BlindBoxItem> items;

+ 3 - 3
src/main/java/com/izouma/nineth/service/CollectionService.java

@@ -171,10 +171,11 @@ public class CollectionService {
         blindBox.setOwner(user.getNickname());
         blindBox.setOwnerId(user.getId());
         blindBox.setOwnerAvatar(user.getAvatar());
+        blindBox.setTotal(createBlindBox.getItems().stream().mapToInt(BlindBoxItem::getTotal).sum());
         blindBox.setStock(blindBox.getTotal());
         blindBox.setSale(0);
         collectionRepo.save(blindBox);
-        for (BlindBoxItem item : createBlindBox.getItems()) {
+        createBlindBox.getItems().stream().parallel().forEach(item -> {
             Collection collection = list.stream().filter(i -> i.getId().equals(item.getCollectionId())).findAny()
                     .orElseThrow(new BusinessException("所选藏品不存在"));
             collectionRepo.increaseStock(collection.getId(), -item.getTotal());
@@ -188,8 +189,7 @@ public class CollectionService {
             blindBoxItem.setRare(item.isRare());
             blindBoxItem.setBlindBoxId(blindBox.getId());
             blindBoxItemRepo.save(blindBoxItem);
-        }
-
+        });
         return blindBox;
     }
 

+ 2 - 2
src/main/java/com/izouma/nineth/service/OrderService.java

@@ -392,7 +392,7 @@ public class OrderService {
                 order.setWinCollectionId(winItem.getCollectionId());
                 orderRepo.save(order);
                 assetService.createAsset(winItem, user, order.getId(), order.getPrice(), "出售",
-                        collectionService.getNextNumber(winItem.getCollectionId()));
+                        collection.getTotal() > 1 ? collectionService.getNextNumber(winItem.getCollectionId()) : null);
                 addSales(winItem.getMinterId(), order.getQty());
             } else {
                 if (collection.getSource() == CollectionSource.TRANSFER) {
@@ -402,7 +402,7 @@ public class OrderService {
                 } else {
                     orderRepo.save(order);
                     assetService.createAsset(collection, user, order.getId(), order.getPrice(), "出售",
-                            collectionService.getNextNumber(order.getCollectionId()));
+                            collection.getTotal() > 1 ? collectionService.getNextNumber(order.getCollectionId()) : null);
                 }
                 addSales(collection.getMinterId(), order.getQty());
             }

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

@@ -1,6 +1,5 @@
 package com.izouma.nineth;
 
-import com.alibaba.fastjson.JSONArray;
 import com.github.kevinsawicki.http.HttpRequest;
 import com.izouma.nineth.config.Constants;
 import com.izouma.nineth.domain.BaseEntity;
@@ -52,16 +51,13 @@ import java.io.File;
 import java.io.IOException;
 import java.lang.reflect.Method;
 import java.math.BigDecimal;
-import java.math.BigInteger;
 import java.math.RoundingMode;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Paths;
-import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.util.List;
 import java.util.*;
-import java.util.concurrent.ThreadLocalRandom;
 import java.util.regex.Pattern;
 
 import static java.nio.file.StandardOpenOption.CREATE;
@@ -379,18 +375,6 @@ public class CommonTest {
 
     @Test
     public void random256() throws NoSuchAlgorithmException {
-        Random random = ThreadLocalRandom.current();
-        byte[] r = new byte[2]; //Means 2048 bit
-        random.nextBytes(r);
-        MessageDigest m = MessageDigest.getInstance("MD5");
-        m.update(r, 0, r.length);
-        BigInteger bi = new BigInteger(1, m.digest());
-        System.out.println(bi);
-        System.out.println(bi.toString(16));
-        System.out.println(new BigInteger(bi.toString(16), 16));
-
-        JSONArray jsonArray = new JSONArray();
-        jsonArray.add(bi);
-        System.out.println(jsonArray.toString());
+        System.out.println(new File("/Users/drew/Downloads/images").list((dir, name) -> Pattern.matches(".*\\.png", name)));
     }
 }

+ 130 - 2
src/test/java/com/izouma/nineth/service/CollectionServiceTest.java

@@ -1,17 +1,48 @@
 package com.izouma.nineth.service;
 
 import com.izouma.nineth.ApplicationTests;
+import com.izouma.nineth.domain.*;
 import com.izouma.nineth.domain.Collection;
+import com.izouma.nineth.dto.CreateBlindBox;
+import com.izouma.nineth.enums.CollectionSource;
+import com.izouma.nineth.enums.CollectionType;
 import com.izouma.nineth.repo.CollectionRepo;
+import com.izouma.nineth.repo.PrivilegeOptionRepo;
+import com.izouma.nineth.repo.UserRepo;
+import com.izouma.nineth.service.storage.StorageService;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.lang3.RandomStringUtils;
 import org.junit.jupiter.api.Test;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.nio.file.Files;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
 class CollectionServiceTest extends ApplicationTests {
 
     @Autowired
-    private CollectionService collectionService;
+    private CollectionService   collectionService;
+    @Autowired
+    private CollectionRepo      collectionRepo;
+    @Autowired
+    private StorageService      storageService;
+    @Autowired
+    private UserRepo            userRepo;
+    @Autowired
+    private PrivilegeOptionRepo privilegeOptionRepo;
     @Autowired
-    private CollectionRepo    collectionRepo;
+    private SysConfigService    sysConfigService;
 
     @Test
     void toDTO() {
@@ -19,5 +50,102 @@ class CollectionServiceTest extends ApplicationTests {
         assert collection.getPic() != null;
     }
 
+    @Test
+    public void batchUpload() throws IOException {
+        File imgDir = new File("/Users/drew/Downloads/images");
+        AtomicInteger num = new AtomicInteger(1);
+        User minter = userRepo.findById(53099L).get();
+        List<PrivilegeOption> privilegeOptions = privilegeOptionRepo.findAll();
+        List<Collection> collections = new ArrayList<>();
+        List<BlindBoxItem> items = new ArrayList<>();
+        Arrays.stream(imgDir.list((dir, name) -> Pattern.matches(".*\\.png", name))).parallel().forEach(file -> {
+            try {
+                File img = new File(imgDir, file);
+                Collection collection = Collection.builder()
+                        .name(String.format("OASIS尼尔斯 #%03d", num.getAndIncrement()))
+                        .pic(Collections.singletonList(uploadFile(img)))
+                        .minter(minter.getNickname())
+                        .minterAvatar(minter.getAvatar())
+                        .minterId(minter.getId())
+                        .detail(FileUtils.readFileToString(new File("/Users/drew/Desktop/detail.txt"), "UTF-8"))
+                        .type(CollectionType.DEFAULT)
+                        .properties(new ArrayList<>())
+                        .privileges(privilegeOptions.stream().filter(p -> p.getName().equals("悄悄话")).map(p -> {
+                            Privilege p1 = new Privilege();
+                            BeanUtils.copyProperties(p, p1);
+                            p1.setDetail("绿洲元宇宙在现实世界入口位置是东经121.911305,北纬30.919856");
+                            return p1;
+                        }).collect(Collectors.toList()))
+                        .canResale(true)
+                        .royalties(10)
+                        .serviceCharge(5)
+                        .category("收藏品")
+                        .source(CollectionSource.OFFICIAL)
+                        .sale(0)
+                        .stock(1)
+                        .total(1)
+                        .likes(0)
+                        .onShelf(false)
+                        .salable(false)
+                        .price(new BigDecimal("59.9"))
+                        .originalPrice(new BigDecimal("59.9"))
+                        .build();
+                collectionRepo.save(collection);
+                collections.add(collection);
+
+                items.add(BlindBoxItem
+                        .builder()
+                        .collectionId(collection.getId())
+                        .total(1)
+                        .stock(1)
+                        .rare(file.startsWith("qie_"))
+                        .build());
+            } catch (Exception e) {
+            }
+        });
 
+        Collection blindBox = Collection.builder()
+                .name("1M001:绿洲海洋尼尔斯限定盲盒")
+                .pic(Collections.singletonList(uploadFile(new File("/Users/drew/Downloads/images/BGbule1_BGTX1_T1_L1_YF7_MZ2_YJ0.png"))))
+                .minter(minter.getNickname())
+                .minterAvatar(minter.getAvatar())
+                .minterId(minter.getId())
+                .detail(FileUtils.readFileToString(new File("/Users/drew/Desktop/detail.txt"), "UTF-8"))
+                .type(CollectionType.BLIND_BOX)
+                .properties(new ArrayList<>())
+                .privileges(privilegeOptions.stream().filter(p -> p.getName().equals("悄悄话")).map(p -> {
+                    Privilege p1 = new Privilege();
+                    BeanUtils.copyProperties(p, p1);
+                    p1.setDetail("绿洲元宇宙在现实世界入口位置是东经121.911305,北纬30.919856");
+                    return p1;
+                }).collect(Collectors.toList()))
+                .canResale(true)
+                .royalties(10)
+                .serviceCharge(5)
+                .category("收藏品")
+                .source(CollectionSource.OFFICIAL)
+                .sale(0)
+                .stock(1)
+                .total(1)
+                .likes(0)
+                .onShelf(true)
+                .salable(false)
+                .price(new BigDecimal("59.9"))
+                .originalPrice(new BigDecimal("59.9"))
+                .scheduleSale(true)
+                .startTime(LocalDateTime.of(2021, 12, 23, 20, 0, 0))
+                .build();
+        collectionService.createBlindBox(new CreateBlindBox(blindBox, items));
+    }
+
+    public FileObject uploadFile(File file) throws IOException {
+        String ext = Optional.of(FilenameUtils.getExtension(file.getName())).orElse("")
+                .toLowerCase().replace("jpeg", "jpg");
+        String basePath = Optional.ofNullable(Files.probeContentType(file.toPath())).orElse("application")
+                .split("/")[0];
+        String path = basePath + "/" + new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date())
+                + RandomStringUtils.randomAlphabetic(8)
+                + "." + ext;
+        return new FileObject("", storageService.uploadFromInputStream(new FileInputStream(file), path), null, ext);
+    }
 }