sunkean пре 3 година
родитељ
комит
ba47ca7956

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

@@ -218,6 +218,7 @@ public class Asset extends CollectionBaseEntity {
     @Column(columnDefinition = "bit(1) default 0")
     private boolean safeFlag;
 
+    private String prefixName;
 
     public static Asset create(Collection collection, User user) {
         return Asset.builder()

+ 40 - 0
src/main/java/com/izouma/nineth/dto/AssetDTO.java

@@ -0,0 +1,40 @@
+package com.izouma.nineth.dto;
+
+import com.izouma.nineth.converter.FileObjectListConverter;
+import com.izouma.nineth.domain.Asset;
+import com.izouma.nineth.domain.FileObject;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Convert;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class AssetDTO {
+
+    @Convert(converter = FileObjectListConverter.class)
+    private List<FileObject> pic;
+
+    private String minter;
+
+    private List<Asset> assets;
+
+    private int num;
+
+    private String prefixName;
+
+    public static AssetDTO create(List<Asset> asset) {
+        return AssetDTO.builder()
+                .pic(asset.get(0).getPic())
+                .minter(asset.get(0).getMinter())
+                .assets(asset)
+                .num(asset.size())
+                .prefixName(asset.get(0).getPrefixName())
+                .build();
+    }
+}

+ 41 - 4
src/main/java/com/izouma/nineth/service/AssetService.java

@@ -1,15 +1,14 @@
 package com.izouma.nineth.service;
 
 import cn.hutool.core.convert.Convert;
+import com.google.common.collect.Lists;
 import com.izouma.nineth.TokenHistory;
 import com.izouma.nineth.config.Constants;
 import com.izouma.nineth.config.GeneralProperties;
 import com.izouma.nineth.converter.LongArrayConverter;
 import com.izouma.nineth.domain.Collection;
 import com.izouma.nineth.domain.*;
-import com.izouma.nineth.dto.PageQuery;
-import com.izouma.nineth.dto.PageWrapper;
-import com.izouma.nineth.dto.UserHistory;
+import com.izouma.nineth.dto.*;
 import com.izouma.nineth.enums.*;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.*;
@@ -18,8 +17,10 @@ import com.izouma.nineth.utils.SecurityUtils;
 import com.izouma.nineth.utils.TokenUtils;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.rocketmq.spring.core.RocketMQTemplate;
 import org.springframework.beans.BeanUtils;
 import org.springframework.cache.annotation.Cacheable;
@@ -78,6 +79,42 @@ public class AssetService {
         return all;
     }
 
+    public List<AssetDTO> superimposition(PageQuery pageQuery) {
+        List<AssetDTO> assetDTOs = new ArrayList<>();
+        // 根据条件查询所有资产
+        List<Asset> assets = assetRepo.findAll(JpaUtils.toSpecification(pageQuery, Asset.class));
+        if (CollectionUtils.isEmpty(assets)) {
+            return assetDTOs;
+        }
+        // 取出资产中未开启盲盒数据
+        List<Asset> blindBoxClosedAssets = assets.stream().filter(asset -> !asset.isOpened() && CollectionType.BLIND_BOX.equals(asset.getType())).collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(blindBoxClosedAssets)) {
+            blindBoxClosedAssets.forEach(asset -> {
+                assetDTOs.add(AssetDTO.create(Lists.newArrayList(asset)));
+            });
+            // 移除资产中未开启盲盒数据
+            assets.removeAll(blindBoxClosedAssets);
+        }
+        // 取出资产中所有未设置prefixName的值
+        List<Asset> prefixNameIsNullAssets = assets.stream().filter(asset -> StringUtils.isBlank(asset.getPrefixName())).collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(prefixNameIsNullAssets)) {
+            prefixNameIsNullAssets.forEach(asset -> {
+                assetDTOs.add(AssetDTO.create(Lists.newArrayList(asset)));
+            });
+            assets.removeAll(prefixNameIsNullAssets);
+        }
+        if (CollectionUtils.isNotEmpty(assets)) {
+            // 取出资产中所有prefixName
+            List<String> prefixNames = assets.stream().map(Asset::getPrefixName).distinct().collect(Collectors.toList());
+            // 将资产中相同prefixName归类(除未开启盲盒和未设置prefixName)
+            prefixNames.forEach(str -> {
+                List<Asset> collect = assets.stream().filter(asset -> str.equals(asset.getPrefixName())).collect(Collectors.toList());
+                assetDTOs.add(AssetDTO.create(collect));
+            });
+        }
+        return assetDTOs;
+    }
+
     public Asset createAsset(Collection collection, User user, Long orderId, BigDecimal price, String type,
                              Integer number, boolean safeFlag) {
         Asset asset = Asset.create(collection, user);
@@ -761,7 +798,7 @@ public class AssetService {
         userRepo.addDestroyPoint(userId, 1);
     }
 
-    public int getRoyalties(Long minterId, int royalties,Long userId) {
+    public int getRoyalties(Long minterId, int royalties, Long userId) {
         if (royalties == 3) {
             return 3;
         }

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

@@ -114,8 +114,8 @@ public class CollectionService {
             List<String> notLikes = converter.convertToEntityAttribute(notLike);
             specification = specification.and((Specification<Collection>) (root, criteriaQuery, criteriaBuilder) -> {
                 List<Predicate> and = new ArrayList<>();
-                notLikes.forEach( str -> {
-                    and.add(criteriaBuilder.notLike(root.get("name"), "%"+str+"%"));
+                notLikes.forEach(str -> {
+                    and.add(criteriaBuilder.notLike(root.get("name"), "%" + str + "%"));
                 });
                 return criteriaBuilder.and(and.toArray(new Predicate[0]));
             });

+ 13 - 0
src/main/java/com/izouma/nineth/web/AssetController.java

@@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonView;
 import com.izouma.nineth.TokenHistory;
 import com.izouma.nineth.domain.Asset;
 import com.izouma.nineth.domain.GiftOrder;
+import com.izouma.nineth.dto.AssetDTO;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.dto.UserHistory;
 import com.izouma.nineth.enums.CollectionType;
@@ -61,6 +62,18 @@ public class AssetController extends BaseController {
         return assetService.all(pageQuery);
     }
 
+    /**
+     * 资产查询,除未开启盲盒prefixName相同叠加数量
+     *
+     * @param pageQuery 查询条件
+     * @return 资产叠加后结果
+     */
+    @PostMapping("/superimposition")
+    public List<AssetDTO> superimposition(@RequestBody PageQuery pageQuery) {
+        pageQuery.getQuery().put("userId", SecurityUtils.getAuthenticatedUser().getId());
+        return assetService.superimposition(pageQuery);
+    }
+
     @GetMapping("/get/{id}")
     @JsonView(Asset.View.Basic.class)
     public Asset get(@PathVariable Long id) {