wangqifan vor 3 Jahren
Ursprung
Commit
e7322878e4

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

@@ -154,6 +154,9 @@ public class Asset extends BaseEntity {
 
     private Long fromAssetId;
 
+    //地块ID
+    private Long oasisId;
+
     @ApiModelProperty("类型")
     @Enumerated(EnumType.STRING)
     private CollectionType type;

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

@@ -31,6 +31,8 @@ public class BlindBoxItem extends BaseEntity {
 
     private Long collectionId;
 
+    private Long oasisId;
+
     @ApiModelProperty("名称")
     @Searchable
     private String name;

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

@@ -80,6 +80,8 @@ public class Collection extends BaseEntity {
     @ApiModelProperty("持有者者ID")
     private Long ownerId;
 
+    private Long oasisId;
+
     @ApiModelProperty("铸造者头像")
     private String ownerAvatar;
 

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

@@ -66,6 +66,8 @@ public class CompanyCollection extends BaseEntity {
     @ApiModelProperty("限购识别码")
     private String countId;
 
+    private Long oasisId;
+
     @Column(columnDefinition = "TEXT")
     @Convert(converter = PropertyListConverter.class)
     @ApiModelProperty("特性")

+ 20 - 0
src/main/java/com/izouma/nineth/dto/oasis/OasisDistrictCollectionDTO.java

@@ -0,0 +1,20 @@
+package com.izouma.nineth.dto.oasis;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class OasisDistrictCollectionDTO {
+    private Long       oasisId;
+    private String     collectionName;
+    private BigDecimal originPrice;
+    private BigDecimal sellPrice;
+    private String     status;
+    private String     owner;
+
+}

+ 44 - 0
src/main/java/com/izouma/nineth/dto/oasis/OasisDistrictDTO.java

@@ -0,0 +1,44 @@
+package com.izouma.nineth.dto.oasis;
+
+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.domain.CollectionProperty;
+import com.izouma.nineth.domain.FileObject;
+import com.izouma.nineth.domain.Privilege;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Convert;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class OasisDistrictDTO {
+    private Long                     id;
+    private Long                     oasisId;
+    private String                   name;
+    @Convert(converter = FileObjectListConverter.class)
+    private List<FileObject>         pic;
+    @Convert(converter = FileObjectConverter.class)
+    private FileObject               model3d;
+    private String                   detail;
+    private String                   category;
+    private int                      total;
+    private BigDecimal               price;
+    private BigDecimal               originalPrice;
+    private int                      maxCount;
+    @Convert(converter = PropertyListConverter.class)
+    @ApiModelProperty("特性")
+    private List<CollectionProperty> properties;
+    @Convert(converter = PrivilegeListConverter.class)
+    @ApiModelProperty("特权")
+    private List<Privilege>          privileges;
+    @ApiModelProperty("是否可转售")
+    private boolean                  canResale;
+}

+ 5 - 0
src/main/java/com/izouma/nineth/repo/AssetRepo.java

@@ -12,6 +12,7 @@ import java.time.LocalDateTime;
 import java.util.Collection;
 import java.util.List;
 import java.util.Optional;
+import java.util.Set;
 
 public interface AssetRepo extends JpaRepository<Asset, Long>, JpaSpecificationExecutor<Asset> {
     @Query("update Asset t set t.del = true where t.id = ?1")
@@ -25,6 +26,8 @@ public interface AssetRepo extends JpaRepository<Asset, Long>, JpaSpecificationE
 
     List<Asset> findByCollectionIdAndStatusIn(Long collectionId, Iterable<AssetStatus> statuses);
 
+    List<Asset> findAllByCollectionIdInAndStatusIn(List<Long> collectionId, Iterable<AssetStatus> statuses);
+
     List<Asset> findByCreatedAtBefore(LocalDateTime localDateTime);
 
     List<Asset> findByConsignmentTrue();
@@ -41,6 +44,8 @@ public interface AssetRepo extends JpaRepository<Asset, Long>, JpaSpecificationE
     @Query("select a from Asset a join User u on a.userId = u.id where a.consignment = true and u.settleAccountId is null")
     List<Asset> findNoAccount();
 
+    Set<Asset> findAllByUserIdInAndCollectionId(List<Long> ids, Long collectionId);
+
     List<Asset> findByTxHash(String hash);
 
     List<Asset> findByIdIn(Iterable<Long> ids);

+ 2 - 0
src/main/java/com/izouma/nineth/repo/CollectionRepo.java

@@ -154,4 +154,6 @@ public interface CollectionRepo extends JpaRepository<Collection, Long>, JpaSpec
     Set<Long> findResaleCollectionPriceOver20K(BigDecimal price, CollectionSource source, LocalDateTime startTime, boolean salable);
 
     List<Collection> findAllByNameLike(String name);
+
+    List<Collection> findAllByOasisIdInAndStockGreaterThan(List<Long> oasisIds, int stock);
 }

+ 4 - 0
src/main/java/com/izouma/nineth/repo/CompanyCollectionRepo.java

@@ -1,16 +1,20 @@
 package com.izouma.nineth.repo;
 
 import com.izouma.nineth.domain.CompanyCollection;
+import com.izouma.nineth.enums.CollectionStatus;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
 import javax.transaction.Transactional;
+import java.util.List;
 
 public interface CompanyCollectionRepo extends JpaRepository<CompanyCollection, Long>, JpaSpecificationExecutor<CompanyCollection> {
     @Query("update CompanyCollection t set t.del = true where t.id = ?1")
     @Modifying
     @Transactional
     void softDelete(Long id);
+
+    List<CompanyCollection> findAllByOasisIdInAndStatusNot(List<Long> ids, CollectionStatus status);
 }

+ 5 - 0
src/main/java/com/izouma/nineth/service/AssetService.java

@@ -82,6 +82,7 @@ public class AssetService {
         Asset asset = Asset.create(collection, user);
         asset.setTokenId(TokenUtils.genTokenId());
         asset.setNumber(number);
+        asset.setOasisId(collection.getOasisId());
         asset.setOrderId(orderId);
         asset.setPrice(price);
         assetRepo.saveAndFlush(asset);
@@ -106,6 +107,7 @@ public class AssetService {
         Asset asset = Asset.create(winItem, user, holdDays);
         asset.setTokenId(TokenUtils.genTokenId());
         asset.setNumber(number);
+        asset.setOasisId(winItem.getOasisId());
         asset.setOrderId(orderId);
         asset.setPrice(price);
         assetRepo.saveAndFlush(asset);
@@ -145,6 +147,7 @@ public class AssetService {
                 .minterId(asset.getMinterId())
                 .minterAvatar(asset.getMinterAvatar())
                 .owner(owner.getNickname())
+                .oasisId(asset.getOasisId())
                 .ownerId(owner.getId())
                 .ownerAvatar(owner.getAvatar())
                 .detail(asset.getDetail())
@@ -217,6 +220,7 @@ public class AssetService {
                 .minterAvatar(asset.getMinterAvatar())
                 .owner(owner.getNickname())
                 .ownerId(owner.getId())
+                .oasisId(asset.getOasisId())
                 .ownerAvatar(owner.getAvatar())
                 .detail(asset.getDetail())
                 .type(CollectionType.DEFAULT)
@@ -326,6 +330,7 @@ public class AssetService {
         newAsset.setPrice(price);
         newAsset.setSellPrice(null);
         newAsset.setOrderId(orderId);
+        newAsset.setOasisId(asset.getOasisId());
         newAsset.setFromAssetId(asset.getId());
         newAsset.setType(CollectionType.DEFAULT);
         assetRepo.save(newAsset);

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

@@ -78,7 +78,8 @@ public class CollectionService {
         if (Arrays.asList(env.getActiveProfiles()).contains("dev")) {
             return;
         }
-        List<Collection> collections = collectionRepo.findByScheduleSaleTrueAndOnShelfFalseAndStartTimeBeforeAndDelFalse(LocalDateTime.now());
+        List<Collection> collections = collectionRepo
+                .findByScheduleSaleTrueAndOnShelfFalseAndStartTimeBeforeAndDelFalse(LocalDateTime.now());
         for (Collection collection : collections) {
             onShelfTask(collection);
         }
@@ -201,7 +202,9 @@ public class CollectionService {
                     collectionDTO.setAppointment(appointmentRepo.findFirstByBlindBoxId(collection.getId()).isPresent());
                 }
                 if (showVip && collection.getAssignment() > 0 && user.getVipPurchase() > 0) {
-                    int purchase = orderRepo.countByUserIdAndCollectionIdAndVipTrueAndStatusIn(user.getId(), collection.getId(), Arrays.asList(OrderStatus.FINISH, OrderStatus.NOT_PAID, OrderStatus.PROCESSING));
+                    int purchase = orderRepo
+                            .countByUserIdAndCollectionIdAndVipTrueAndStatusIn(user.getId(), collection.getId(), Arrays
+                                    .asList(OrderStatus.FINISH, OrderStatus.NOT_PAID, OrderStatus.PROCESSING));
                     collectionDTO.setVipSurplus(user.getVipPurchase() - purchase);
                 }
             }
@@ -269,6 +272,7 @@ public class CollectionService {
             BlindBoxItem blindBoxItem = new BlindBoxItem();
             BeanUtils.copyProperties(collection, blindBoxItem);
             blindBoxItem.setId(null);
+            blindBoxItem.setOasisId(collection.getOasisId());
             blindBoxItem.setCollectionId(item.getCollectionId());
             blindBoxItem.setSale(0);
             blindBoxItem.setTotal(item.getTotal());
@@ -416,7 +420,7 @@ public class CollectionService {
         return increaseSale(id, -number);
     }
 
-//    @Debounce(key = "#id", delay = 500)
+    //    @Debounce(key = "#id", delay = 500)
     public void syncStock(Long id) {
         Integer stock = (Integer) redisTemplate.opsForValue().get(RedisKeys.COLLECTION_STOCK + id);
         if (stock != null) {

+ 42 - 1
src/main/java/com/izouma/nineth/service/CompanyCollectionService.java

@@ -2,6 +2,9 @@ package com.izouma.nineth.service;
 
 import com.izouma.nineth.domain.*;
 import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.dto.oasis.OasisDistrictCollectionDTO;
+import com.izouma.nineth.dto.oasis.OasisDistrictDTO;
+import com.izouma.nineth.enums.AssetStatus;
 import com.izouma.nineth.enums.CollectionSource;
 import com.izouma.nineth.enums.CollectionStatus;
 import com.izouma.nineth.enums.CollectionType;
@@ -14,6 +17,11 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
 @Service
 @AllArgsConstructor
 public class CompanyCollectionService {
@@ -23,9 +31,11 @@ public class CompanyCollectionService {
     private UserRepo                userRepo;
     private CollectionPrivilegeRepo collectionPrivilegeRepo;
     private SysConfigService        sysConfigService;
+    private AssetRepo               assetRepo;
 
     public Page<CompanyCollection> all(PageQuery pageQuery) {
-        return companyCollectionRepo.findAll(JpaUtils.toSpecification(pageQuery, CompanyCollection.class), JpaUtils.toPageRequest(pageQuery));
+        return companyCollectionRepo.findAll(JpaUtils.toSpecification(pageQuery, CompanyCollection.class), JpaUtils
+                .toPageRequest(pageQuery));
     }
 
     public void audit(Long id, CollectionStatus status, String reason) {
@@ -85,4 +95,35 @@ public class CompanyCollectionService {
         companyCollectionRepo.save(companyCollection);
     }
 
+    public List<OasisDistrictCollectionDTO> oasisSearch(List<Long> oasisIds) {
+        List<OasisDistrictCollectionDTO> oasisDistrictCollectionDTOS = new ArrayList<>();
+        List<Collection> collections = collectionRepo.findAllByOasisIdInAndStockGreaterThan(oasisIds, 0);
+        List<CompanyCollection> companyCollections = companyCollectionRepo
+                .findAllByOasisIdInAndStatusNot(oasisIds, CollectionStatus.SUCCESS);
+
+        collections.forEach(collection -> {
+            OasisDistrictCollectionDTO oasisDistrictCollectionDTO = new OasisDistrictCollectionDTO();
+            oasisDistrictCollectionDTO.setOasisId(collection.getOasisId());
+            oasisDistrictCollectionDTO.setCollectionName(collection.getName());
+            oasisDistrictCollectionDTO.setOriginPrice(collection.getPrice());
+            oasisDistrictCollectionDTO.setOwner(collection.getOwner());
+            if (collection.getSource() != CollectionSource.TRANSFER) {
+                oasisDistrictCollectionDTO.setStatus("官方库存");
+            } else {
+                oasisDistrictCollectionDTO.setStatus("用户展示");
+            }
+            oasisDistrictCollectionDTOS.add(oasisDistrictCollectionDTO);
+        });
+
+        companyCollections.forEach(companyCollection -> {
+            OasisDistrictCollectionDTO oasisDistrictCollectionDTO = new OasisDistrictCollectionDTO();
+            oasisDistrictCollectionDTO.setOasisId(companyCollection.getOasisId());
+            oasisDistrictCollectionDTO.setCollectionName(companyCollection.getName());
+            oasisDistrictCollectionDTO.setOriginPrice(companyCollection.getPrice());
+            oasisDistrictCollectionDTO.setOwner(companyCollection.getMinter());
+            oasisDistrictCollectionDTO.setStatus("平台审核");
+            oasisDistrictCollectionDTOS.add(oasisDistrictCollectionDTO);
+        });
+        return oasisDistrictCollectionDTOS;
+    }
 }

+ 63 - 4
src/main/java/com/izouma/nineth/web/CompanyCollectionController.java

@@ -1,6 +1,8 @@
 package com.izouma.nineth.web;
 
 import com.izouma.nineth.domain.CompanyCollection;
+import com.izouma.nineth.dto.oasis.OasisDistrictCollectionDTO;
+import com.izouma.nineth.dto.oasis.OasisDistrictDTO;
 import com.izouma.nineth.enums.CollectionStatus;
 import com.izouma.nineth.service.CompanyCollectionService;
 import com.izouma.nineth.dto.PageQuery;
@@ -10,12 +12,14 @@ import com.izouma.nineth.utils.ObjUtils;
 import com.izouma.nineth.utils.SecurityUtils;
 import com.izouma.nineth.utils.excel.ExcelUtils;
 import lombok.AllArgsConstructor;
+import org.springframework.beans.BeanUtils;
 import org.springframework.data.domain.Page;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.List;
 
 @RestController
@@ -42,6 +46,65 @@ public class CompanyCollectionController extends BaseController {
         return companyCollectionRepo.save(record);
     }
 
+    //oasis创建保存地块接口
+    @PreAuthorize("hasAnyRole('ADMIN','COMPANY')")
+    @PostMapping("/saveDistrict")
+    public CompanyCollection saveDistrict(@RequestBody OasisDistrictDTO oasisDistrictDTO) {
+        CompanyCollection record = new CompanyCollection();
+        BeanUtils.copyProperties(oasisDistrictDTO, record);
+        record.setStatus(CollectionStatus.PENDING);
+        record.setCategory("地块");
+        record.setUserId(7958191L);
+        record.setMinter("oasis地块测试");
+        if (record.getId() != null) {
+            CompanyCollection orig = companyCollectionRepo.findById(record.getId())
+                    .orElseThrow(new BusinessException("无记录"));
+            if (CollectionStatus.SUCCESS.equals(orig.getStatus())) {
+                throw new BusinessException("已通过申请,不可编辑");
+            }
+
+            ObjUtils.merge(orig, record);
+            return companyCollectionRepo.save(orig);
+        }
+        record.setUserId(SecurityUtils.getAuthenticatedUser().getId());
+        return companyCollectionRepo.save(record);
+    }
+
+    //oasis创建保存地块接口
+    @PreAuthorize("hasAnyRole('ADMIN','COMPANY')")
+    @PostMapping("/multiDistrict")
+    public List<CompanyCollection> multiDistrict(@RequestBody List<OasisDistrictDTO> oasisDistrictDTOs) {
+        List<CompanyCollection> companyCollections = new ArrayList<>();
+        oasisDistrictDTOs.forEach(oasisDistrictDTO -> {
+            CompanyCollection record = new CompanyCollection();
+            BeanUtils.copyProperties(oasisDistrictDTO, record);
+            record.setStatus(CollectionStatus.PENDING);
+            record.setCategory("地块");
+            record.setUserId(7958191L);
+            record.setMinter("oasis地块测试");
+            if (record.getId() != null) {
+                CompanyCollection orig = companyCollectionRepo.findById(record.getId())
+                        .orElseThrow(new BusinessException("无记录"));
+                if (CollectionStatus.SUCCESS.equals(orig.getStatus())) {
+                    throw new BusinessException("已通过申请,不可编辑");
+                }
+
+                ObjUtils.merge(orig, record);
+                companyCollections.add(orig);
+            }
+            record.setUserId(SecurityUtils.getAuthenticatedUser().getId());
+            companyCollections.add(record);
+        });
+        return companyCollectionRepo.saveAll(companyCollections);
+    }
+
+    //oasis创建地块接口
+    @PreAuthorize("hasAnyRole('ADMIN','COMPANY')")
+    @PostMapping("/oasisSearch")
+    public List<OasisDistrictCollectionDTO> oasisSearch(@RequestBody List<Long> oasisIds) {
+        return companyCollectionService.oasisSearch(oasisIds);
+    }
+
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/all")
@@ -76,9 +139,5 @@ public class CompanyCollectionController extends BaseController {
         companyCollectionService.audit(id, CollectionStatus.FAIL, reason);
     }
 
-//    @PostMapping("/createDistrict")
-//    public void deny(@RequestParam Long id, String reason) {
-//        companyCollectionService.audit(id, CollectionStatus.FAIL, reason);
-//    }
 }