wangqifan преди 3 години
родител
ревизия
00b816bbbd

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

@@ -366,4 +366,32 @@ public class Asset extends CollectionBaseEntity {
                 .chainFlag(2)
                 .build();
     }
+
+    public static Asset create(TradeAuction tradeAuction, User user) {
+        return Asset.builder()
+                .userId(user.getId())
+                .collectionId(tradeAuction.getId())
+                .minter(tradeAuction.getMinter())
+                .minterId(Long.valueOf(tradeAuction.getMinterId()))
+                .minterAvatar(tradeAuction.getMinterAvatar())
+                .name(tradeAuction.getName())
+                .pic(tradeAuction.getPic())
+                .model3d(null)
+                .category("易拍")
+                .canResale(true)
+                .royalties(tradeAuction.getRoyalties())
+                .serviceCharge(0)
+                .price(tradeAuction.getRecommendPrice())
+                .status(AssetStatus.NORMAL)
+                .owner(user.getNickname())
+                .ownerId(user.getId())
+                .ownerAvatar(user.getAvatar())
+                .type(CollectionType.DEFAULT)
+                .holdDays(null)
+                .oldHoldDays(null)
+                .source(AssetSource.OFFICIAL)
+                .companyId(1L)
+                .chainFlag(2)
+                .build();
+    }
 }

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

@@ -292,6 +292,43 @@ public class AssetService {
         return asset;
     }
 
+    public Asset createAsset(TradeAuction tradeAuction, User user, Long orderId, BigDecimal price, String type,
+                             Integer number, boolean safeFlag) {
+        Asset asset = Asset.create(tradeAuction, user);
+        asset.setTokenId(TokenUtils.genTokenId());
+        asset.setNumber(number);
+        asset.setOrderId(orderId);
+        asset.setPrice(price);
+        asset.setPrefixName("易拍");
+        asset.setTags(new HashSet<>());
+        User fakeUser = null;
+        if (safeFlag) {
+            fakeUser = createFakeUser();
+            asset.setOwner(fakeUser.getNickname());
+            asset.setOwnerId(fakeUser.getId());
+            asset.setOwnerAvatar(fakeUser.getAvatar());
+        }
+        assetRepo.saveAndFlush(asset);
+        tokenHistoryRepo.save(TokenHistory.builder()
+                .tokenId(asset.getTokenId())
+                .fromUser(tradeAuction.getMinter())
+                .fromUserId(Long.valueOf(tradeAuction.getMinterId()))
+                .fromAvatar(tradeAuction.getMinterAvatar())
+                .toUser((safeFlag ? fakeUser : user).getNickname())
+                .toUserId((safeFlag ? fakeUser : user).getId())
+                .toAvatar((safeFlag ? fakeUser : user).getAvatar())
+                .operation(type)
+                .price(price)
+                .companyId(asset.getCompanyId())
+                .build());
+
+        //绿洲石
+//        rockRecordService.addRock(user.getId(), price, "购买");
+
+        rocketMQTemplate.syncSend(generalProperties.getMintTopic(), asset.getId());
+        return asset;
+    }
+
     public synchronized int getMessedNumber(Long collectionId, int number, int total) {
         NumberSeq numberSeq = numberSeqRepo.findById(collectionId).orElse(null);
         if (numberSeq == null || numberSeq.getTotal() != total) {

+ 5 - 1
src/main/java/com/izouma/nineth/service/TradeAuctionOrderService.java

@@ -41,6 +41,7 @@ public class TradeAuctionOrderService {
     private SysConfigService              sysConfigService;
     private CommissionRecordRepo          commissionRecordRepo;
     private RedisTemplate<String, Object> redisTemplate;
+    private AssetService                  assetService;
 
     private static int orderCancelInterval = 210;
 
@@ -204,7 +205,10 @@ public class TradeAuctionOrderService {
             tradeAuction.setCurrentOwnerId(tradeAuctionOrder.getUserId());
             tradeAuction.setStatus(TradeAuctionStatus.FINISH);
             finishLastOrder(tradeAuction.getCurrentOrderId());
-            tradeAuctionOrder.setStatus(AuctionOrderStatus.AIR_DROP);
+            User owner = userRepo.findById(tradeAuctionOrder.getUserId()).orElseThrow(new BusinessException("暂无用户"));
+            assetService.createAsset(tradeAuction, owner, tradeAuctionOrder.getId(), tradeAuction
+                    .getCurrentPrice(), "空投", 1, false);
+            tradeAuctionOrder.setStatus(AuctionOrderStatus.FINISH);
         }
         tradeAuction.setLastCommission(tradeAuctionOrder.getServiceCharge());
         tradeAuctionOrder.setCurrentEndTime(tradeAuction.getCurrentEndTime());