فهرست منبع

Merge branch 'dev' of http://git.izouma.com/xiongzhu/raex_back into dev

lajiyouxi-xu 2 سال پیش
والد
کامیت
aae326b65b

+ 8 - 0
src/main/java/com/izouma/nineth/domain/WithdrawApply.java

@@ -1,5 +1,6 @@
 package com.izouma.nineth.domain;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import com.izouma.nineth.annotations.Searchable;
 import com.izouma.nineth.enums.WithdrawStatus;
 import lombok.AllArgsConstructor;
@@ -22,19 +23,26 @@ import java.time.LocalDateTime;
 public class WithdrawApply extends BaseEntity {
 
     @Searchable
+    @ExcelProperty("用户ID")
     private Long userId;
 
+    @ExcelProperty("金额")
     private BigDecimal amount;
 
     @Enumerated(EnumType.STRING)
     @Column(length = 20)
+    @ExcelProperty("状态")
     private WithdrawStatus status;
 
+    @ExcelProperty("原因")
     private String reason;
 
+    @ExcelProperty("提现id")
     private String withdrawId;
 
+    @ExcelProperty("提现方式")
     private String channel;
 
+    @ExcelProperty("时间")
     private LocalDateTime finishTime;
 }

+ 14 - 3
src/main/java/com/izouma/nineth/enums/WithdrawStatus.java

@@ -1,7 +1,18 @@
 package com.izouma.nineth.enums;
 
 public enum WithdrawStatus {
-    PENDING,
-    SUCCESS,
-    FAIL
+
+    PENDING("待提现"),
+    SUCCESS("成功"),
+    FAIL("失败");
+
+    private final String description;
+
+    WithdrawStatus(String description) {
+        this.description = description;
+    }
+
+    public String getDescription() {
+        return description;
+    }
 }

+ 2 - 2
src/main/java/com/izouma/nineth/repo/nftdomain/DomainAskRepo.java

@@ -29,9 +29,9 @@ public interface DomainAskRepo extends JpaRepository<DomainAsk, Long>, JpaSpecif
     @Query(nativeQuery = true, value = "select count(da.id) count,da.pic_url pic,da.domain_order_id domainOrderId,a.id assetId,da.`name` picName,da.end_time endTime from domain_ask da inner join asset a on a.id = da.asset_id where da.status = 'ASKING' and da.owner_id = ?1 and a.status = 'NORMAL' group by da.asset_id order by a.created_at desc ")
     List<Map<String, Object>> askGroup(Long userId);
 
-    int countByDomainOrderIdAndUserIdAndStatusInAndDelFalse(Long domainOrderId, Long userId, Set<DomainAskStatus> statuses);
+    int countByAssetIdAndUserIdAndStatusInAndDelFalse(Long assetId, Long userId, Set<DomainAskStatus> statuses);
 
-    int countByDomainOrderIdAndOwnerIdAndStatusInAndDelFalse(Long domainOrderId, Long userId, Set<DomainAskStatus> statuses);
+    int countByAssetIdAndOwnerIdAndStatusInAndDelFalse(Long assetId, Long userId, Set<DomainAskStatus> statuses);
 
     List<DomainAsk> findByAssetIdAndStatusAndDelFalse(Long assetId, DomainAskStatus domainAskStatus);
 }

+ 237 - 232
src/main/java/com/izouma/nineth/service/AssetService.java

@@ -121,8 +121,9 @@ public class AssetService {
         }
         // 取出资产中未开启盲盒数据
         List<Asset> blindBoxClosedAssets = assets.stream()
-                .filter(asset -> !asset.isOpened() && CollectionType.BLIND_BOX.equals(asset.getType()))
-                .collect(Collectors.toList());
+                                                 .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)));
@@ -132,8 +133,8 @@ public class AssetService {
         }
         // 取出资产中所有未设置prefixName的值
         List<Asset> prefixNameIsNullAssets = assets.stream()
-                .filter(asset -> StringUtils.isBlank(asset.getPrefixName()))
-                .collect(Collectors.toList());
+                                                   .filter(asset -> StringUtils.isBlank(asset.getPrefixName()))
+                                                   .collect(Collectors.toList());
         if (CollectionUtils.isNotEmpty(prefixNameIsNullAssets)) {
             prefixNameIsNullAssets.forEach(asset -> {
                 assetDTOs.add(AssetDTO.create(Lists.newArrayList(asset)));
@@ -143,14 +144,14 @@ public class AssetService {
         if (CollectionUtils.isNotEmpty(assets)) {
             // 取出资产中所有prefixName
             List<String> prefixNames = assets.stream()
-                    .map(Asset::getPrefixName)
-                    .distinct()
-                    .collect(Collectors.toList());
+                                             .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());
+                                            .filter(asset -> str.equals(asset.getPrefixName()))
+                                            .collect(Collectors.toList());
                 assetDTOs.add(AssetDTO.create(collect));
             });
         }
@@ -182,17 +183,17 @@ public class AssetService {
         }
         assetRepo.saveAndFlush(asset);
         tokenHistoryRepo.save(TokenHistory.builder()
-                .tokenId(asset.getTokenId())
-                .fromUser(collection.getMinter())
-                .fromUserId(collection.getMinterId())
-                .fromAvatar(collection.getMinterAvatar())
-                .toUser((safeFlag ? fakeUser : user).getNickname())
-                .toUserId((safeFlag ? fakeUser : user).getId())
-                .toAvatar((safeFlag ? fakeUser : user).getAvatar())
-                .operation(type)
-                .price(price)
-                .companyId(asset.getCompanyId())
-                .build());
+                                          .tokenId(asset.getTokenId())
+                                          .fromUser(collection.getMinter())
+                                          .fromUserId(collection.getMinterId())
+                                          .fromAvatar(collection.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, "购买");
@@ -241,17 +242,17 @@ public class AssetService {
         }
         assetRepo.saveAndFlush(asset);
         tokenHistoryRepo.save(TokenHistory.builder()
-                .tokenId(asset.getTokenId())
-                .fromUser(photoAsset.getUserName())
-                .fromUserId(photoAsset.getUserId())
-                .fromAvatar(photoAsset.getUserAvatar())
-                .toUser((safeFlag ? fakeUser : user).getNickname())
-                .toUserId((safeFlag ? fakeUser : user).getId())
-                .toAvatar((safeFlag ? fakeUser : user).getAvatar())
-                .operation(type)
-                .price(price)
-                .companyId(asset.getCompanyId())
-                .build());
+                                          .tokenId(asset.getTokenId())
+                                          .fromUser(photoAsset.getUserName())
+                                          .fromUserId(photoAsset.getUserId())
+                                          .fromAvatar(photoAsset.getUserAvatar())
+                                          .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, "购买");
@@ -298,17 +299,17 @@ public class AssetService {
         }
         assetRepo.saveAndFlush(asset);
         tokenHistoryRepo.save(TokenHistory.builder()
-                .tokenId(asset.getTokenId())
-                .fromUser(domainOrder.getUserName())
-                .fromUserId(domainOrder.getUserId())
-                .fromAvatar(domainOrder.getUserAvatar())
-                .toUser((safeFlag ? fakeUser : user).getNickname())
-                .toUserId((safeFlag ? fakeUser : user).getId())
-                .toAvatar((safeFlag ? fakeUser : user).getAvatar())
-                .operation(type)
-                .price(price)
-                .companyId(asset.getCompanyId())
-                .build());
+                                          .tokenId(asset.getTokenId())
+                                          .fromUser(domainOrder.getUserName())
+                                          .fromUserId(domainOrder.getUserId())
+                                          .fromAvatar(domainOrder.getUserAvatar())
+                                          .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, "购买");
@@ -335,17 +336,17 @@ public class AssetService {
         }
         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(null)
-                .companyId(asset.getCompanyId())
-                .build());
+                                          .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(null)
+                                          .companyId(asset.getCompanyId())
+                                          .build());
 
         //绿洲石
 //        rockRecordService.addRock(user.getId(), price, "购买");
@@ -365,9 +366,9 @@ public class AssetService {
                 map.put(i, Hashing.md5().hashString(collectionId + ":" + i, StandardCharsets.UTF_8).asInt());
             }
             numberSeq.setNumbers(map.entrySet().stream()
-                    .sorted(Map.Entry.comparingByValue())
-                    .map(Map.Entry::getKey)
-                    .collect(Collectors.toList()));
+                                    .sorted(Map.Entry.comparingByValue())
+                                    .map(Map.Entry::getKey)
+                                    .collect(Collectors.toList()));
             numberSeqRepo.save(numberSeq);
         }
         return numberSeq.getNumbers().get(number);
@@ -376,9 +377,9 @@ public class AssetService {
     public Asset createAsset(BlindBoxItem winItem, User user, Long orderId, BigDecimal price, String type,
                              Integer number, Integer holdDays, boolean safeFlag) {
         Collection blindBox = collectionRepo.findDetailById(winItem.getBlindBoxId())
-                .orElseThrow(new BusinessException("盲盒不存在"));
+                                            .orElseThrow(new BusinessException("盲盒不存在"));
         Collection collection = collectionRepo.findDetailById(winItem.getCollectionId())
-                .orElseThrow(new BusinessException("藏品不存在"));
+                                              .orElseThrow(new BusinessException("藏品不存在"));
         if (collection.isMessNumber() && number != null) {
             number = getMessedNumber(collection.getId(), number, collection.getTotal());
         }
@@ -410,17 +411,17 @@ public class AssetService {
         }
         assetRepo.saveAndFlush(asset);
         tokenHistoryRepo.save(TokenHistory.builder()
-                .tokenId(asset.getTokenId())
-                .fromUser(winItem.getMinter())
-                .fromUserId(winItem.getMinterId())
-                .fromAvatar(winItem.getMinterAvatar())
-                .toUser((safeFlag ? fakeUser : user).getNickname())
-                .toUserId((safeFlag ? fakeUser : user).getId())
-                .toAvatar((safeFlag ? fakeUser : user).getAvatar())
-                .operation(type)
-                .price(price)
-                .companyId(asset.getCompanyId())
-                .build());
+                                          .tokenId(asset.getTokenId())
+                                          .fromUser(winItem.getMinter())
+                                          .fromUserId(winItem.getMinterId())
+                                          .fromAvatar(winItem.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, "购买");
@@ -448,34 +449,34 @@ public class AssetService {
                 userRepo.findById(asset.getOwnerId()).orElseThrow(new BusinessException("用户不存在"))
                 : userRepo.findById(asset.getUserId()).orElseThrow(new BusinessException("用户不存在"));
         Collection collection = Collection.builder()
-                .name(asset.getName())
-                .pic(asset.getPic())
-                .minter(asset.getMinter())
-                .minterId(asset.getMinterId())
-                .minterAvatar(asset.getMinterAvatar())
-                .owner(owner.getNickname())
-                .oasisId(asset.getOasisId())
-                .ownerId(owner.getId())
-                .ownerAvatar(owner.getAvatar())
-                .detail(asset.getDetail())
-                .type(CollectionType.DEFAULT)
-                .source(CollectionSource.TRANSFER)
-                .sale(0)
-                .stock(1)
-                .total(1)
-                .onShelf(true)
-                .salable(false)
-                .price(BigDecimal.valueOf(0))
-                .properties(asset.getProperties())
-                .canResale(asset.isCanResale())
-                .royalties(asset.getRoyalties())
-                .serviceCharge(asset.getServiceCharge())
-                .assetId(id)
-                .number(asset.getNumber())
-                .tags(new HashSet<>())
-                .prefixName(asset.getPrefixName())
-                .companyId(asset.getCompanyId())
-                .build();
+                                          .name(asset.getName())
+                                          .pic(asset.getPic())
+                                          .minter(asset.getMinter())
+                                          .minterId(asset.getMinterId())
+                                          .minterAvatar(asset.getMinterAvatar())
+                                          .owner(owner.getNickname())
+                                          .oasisId(asset.getOasisId())
+                                          .ownerId(owner.getId())
+                                          .ownerAvatar(owner.getAvatar())
+                                          .detail(asset.getDetail())
+                                          .type(CollectionType.DEFAULT)
+                                          .source(CollectionSource.TRANSFER)
+                                          .sale(0)
+                                          .stock(1)
+                                          .total(1)
+                                          .onShelf(true)
+                                          .salable(false)
+                                          .price(BigDecimal.valueOf(0))
+                                          .properties(asset.getProperties())
+                                          .canResale(asset.isCanResale())
+                                          .royalties(asset.getRoyalties())
+                                          .serviceCharge(asset.getServiceCharge())
+                                          .assetId(id)
+                                          .number(asset.getNumber())
+                                          .tags(new HashSet<>())
+                                          .prefixName(asset.getPrefixName())
+                                          .companyId(asset.getCompanyId())
+                                          .build();
         if (asset.getTags() != null) {
             collection.getTags().addAll(asset.getTags());
         }
@@ -582,13 +583,13 @@ public class AssetService {
             asset.setOwnerAvatar(owner.getAvatar());
             asset.setSafeFlag(true);
             tokenHistoryRepo.findByTokenIdOrderByCreatedAtDesc(asset.getTokenId()).stream()
-                    .filter(t -> t.getToUserId().equals(asset.getUserId())).findFirst()
-                    .ifPresent(tokenHistory -> {
-                        tokenHistory.setToUserId(owner.getId());
-                        tokenHistory.setToUser(owner.getNickname());
-                        tokenHistory.setToAvatar(owner.getAvatar());
-                        tokenHistoryRepo.save(tokenHistory);
-                    });
+                            .filter(t -> t.getToUserId().equals(asset.getUserId())).findFirst()
+                            .ifPresent(tokenHistory -> {
+                                tokenHistory.setToUserId(owner.getId());
+                                tokenHistory.setToUser(owner.getNickname());
+                                tokenHistory.setToAvatar(owner.getAvatar());
+                                tokenHistoryRepo.save(tokenHistory);
+                            });
         } else {
             owner = asset.isSafeFlag() ?
                     userRepo.findById(asset.getOwnerId()).orElseThrow(new BusinessException("用户不存在"))
@@ -618,34 +619,34 @@ public class AssetService {
         }
 
         Collection collection = Collection.builder()
-                .name(asset.getName())
-                .pic(asset.getPic())
-                .minter(asset.getMinter())
-                .minterId(asset.getMinterId())
-                .minterAvatar(asset.getMinterAvatar())
-                .owner(owner.getNickname())
-                .ownerId(owner.getId())
-                .oasisId(asset.getOasisId())
-                .ownerAvatar(owner.getAvatar())
-                .detail(asset.getDetail())
-                .type(CollectionType.DEFAULT)
-                .source(CollectionSource.TRANSFER)
-                .sale(0)
-                .stock(1)
-                .total(1)
-                .onShelf(true)
-                .salable(true)
-                .price(price)
-                .properties(asset.getProperties())
-                .canResale(asset.isCanResale())
-                .royalties(asset.getRoyalties())
-                .serviceCharge(asset.getServiceCharge())
-                .assetId(id)
-                .number(asset.getNumber())
-                .tags(new HashSet<>())
-                .prefixName(asset.getPrefixName())
-                .companyId(asset.getCompanyId())
-                .build();
+                                          .name(asset.getName())
+                                          .pic(asset.getPic())
+                                          .minter(asset.getMinter())
+                                          .minterId(asset.getMinterId())
+                                          .minterAvatar(asset.getMinterAvatar())
+                                          .owner(owner.getNickname())
+                                          .ownerId(owner.getId())
+                                          .oasisId(asset.getOasisId())
+                                          .ownerAvatar(owner.getAvatar())
+                                          .detail(asset.getDetail())
+                                          .type(CollectionType.DEFAULT)
+                                          .source(CollectionSource.TRANSFER)
+                                          .sale(0)
+                                          .stock(1)
+                                          .total(1)
+                                          .onShelf(true)
+                                          .salable(true)
+                                          .price(price)
+                                          .properties(asset.getProperties())
+                                          .canResale(asset.isCanResale())
+                                          .royalties(asset.getRoyalties())
+                                          .serviceCharge(asset.getServiceCharge())
+                                          .assetId(id)
+                                          .number(asset.getNumber())
+                                          .tags(new HashSet<>())
+                                          .prefixName(asset.getPrefixName())
+                                          .companyId(asset.getCompanyId())
+                                          .build();
         if (asset.getType().equals(CollectionType.DOMAIN)) {
             collection.setType(CollectionType.DOMAIN);
         }
@@ -674,11 +675,11 @@ public class AssetService {
                 throw new BusinessException("已有订单不可取消");
             }
             collectionRepo.findById(asset.getPublicCollectionId())
-                    .ifPresent(collection -> {
-                        collection.setSalable(false);
-                        collection.setOnShelf(false);
-                        collectionRepo.save(collection);
-                    });
+                          .ifPresent(collection -> {
+                              collection.setSalable(false);
+                              collection.setOnShelf(false);
+                              collectionRepo.save(collection);
+                          });
         }
         asset.setConsignment(false);
         asset.setPublicShow(false);
@@ -709,10 +710,10 @@ public class AssetService {
                 throw new BusinessException("已有订单不可取消");
             }
             collectionRepo.findById(asset.getPublicCollectionId())
-                    .ifPresent(collection -> {
-                        collection.setSalable(false);
-                        collectionRepo.save(collection);
-                    });
+                          .ifPresent(collection -> {
+                              collection.setSalable(false);
+                              collectionRepo.save(collection);
+                          });
         }
         asset.setConsignment(false);
         assetRepo.saveAndFlush(asset);
@@ -737,7 +738,7 @@ public class AssetService {
             cancelConsignment(asset);
         }
         Collection collection = collectionRepo.findById(asset.getPublicCollectionId())
-                .orElseThrow(new BusinessException("无展示记录"));
+                                              .orElseThrow(new BusinessException("无展示记录"));
         collectionRepo.delete(collection);
         // 如果展厅有此藏品
         showCollectionRepo.deleteAllByCollectionId(asset.getPublicCollectionId());
@@ -766,11 +767,11 @@ public class AssetService {
     private User createFakeUser() {
         String name = "0x" + RandomStringUtils.randomAlphabetic(8);
         return userRepo.save(User.builder()
-                .username(name)
-                .nickname(name)
-                .avatar(Constants.DEFAULT_AVATAR)
-                .isPublicShow(true)
-                .build());
+                                 .username(name)
+                                 .nickname(name)
+                                 .avatar(Constants.DEFAULT_AVATAR)
+                                 .isPublicShow(true)
+                                 .build());
     }
 
     public void transfer(Asset asset, BigDecimal price, User toUser, TransferReason reason, Long orderId, boolean safeFlag, Set<Tag> tags) {
@@ -825,17 +826,17 @@ public class AssetService {
         }
 
         TokenHistory tokenHistory = TokenHistory.builder()
-                .tokenId(asset.getTokenId())
-                .fromUser(asset.getOwner())
-                .fromUserId(asset.getOwnerId())
-                .fromAvatar(asset.getOwnerAvatar())
-                .toUser(newOwner.getNickname())
-                .toUserId(newOwner.getId())
-                .toAvatar(newOwner.getAvatar())
-                .operation(reason.getDescription())
-                .price(TransferReason.GIFT == reason ? null : price)
-                .companyId(asset.getCompanyId())
-                .build();
+                                                .tokenId(asset.getTokenId())
+                                                .fromUser(asset.getOwner())
+                                                .fromUserId(asset.getOwnerId())
+                                                .fromAvatar(asset.getOwnerAvatar())
+                                                .toUser(newOwner.getNickname())
+                                                .toUserId(newOwner.getId())
+                                                .toAvatar(newOwner.getAvatar())
+                                                .operation(reason.getDescription())
+                                                .price(TransferReason.GIFT == reason ? null : price)
+                                                .companyId(asset.getCompanyId())
+                                                .build();
         tokenHistoryRepo.save(tokenHistory);
 
         //购买者加绿洲石
@@ -855,6 +856,10 @@ public class AssetService {
                 break;
             case TRANSFER:
                 asset.setStatus(AssetStatus.TRANSFERRED);
+                break;
+            case ASK:
+                asset.setStatus(AssetStatus.TRANSFERRED);
+                break;
         }
         asset.setOwner(newOwner.getNickname());
         asset.setOwnerId(newOwner.getId());
@@ -897,7 +902,7 @@ public class AssetService {
             UserHistory userHistory = new UserHistory();
             BeanUtils.copyProperties(tokenHistory, userHistory);
             Optional<Asset> asset = assets.stream().filter(a -> a.getTokenId().equals(tokenHistory.getTokenId()))
-                    .findAny();
+                                          .findAny();
             userHistory.setAssetName(asset.map(Asset::getName).orElse(null));
             userHistory.setPic(asset.map(Asset::getPic).orElse(new ArrayList<>()));
             switch (tokenHistory.getOperation()) {
@@ -940,7 +945,7 @@ public class AssetService {
             UserHistory userHistory = new UserHistory();
             BeanUtils.copyProperties(tokenHistory, userHistory);
             Optional<Asset> asset = assets.stream().filter(a -> a.getTokenId().equals(tokenHistory.getTokenId()))
-                    .findAny();
+                                          .findAny();
             userHistory.setAssetName(asset.map(Asset::getName).orElse(null));
             userHistory.setPic(asset.map(Asset::getPic).orElse(new ArrayList<>()));
             switch (tokenHistory.getOperation()) {
@@ -1055,11 +1060,11 @@ public class AssetService {
                     throw new BusinessException("已有订单不可取消");
                 }
                 collectionRepo.findById(asset.getPublicCollectionId())
-                        .ifPresent(collection -> {
-                            collection.setSalable(false);
-                            collection.setOnShelf(false);
-                            collectionRepo.save(collection);
-                        });
+                              .ifPresent(collection -> {
+                                  collection.setSalable(false);
+                                  collection.setOnShelf(false);
+                                  collectionRepo.save(collection);
+                              });
             }
             asset.setConsignment(false);
             asset.setPublicShow(false);
@@ -1099,7 +1104,7 @@ public class AssetService {
                             criteriaBuilder.equal(root.get("consignment"), false),
                             // and has some tagId
                             root.join("tags").get("id").in(tags.stream().map(Tag::getId).toArray()))
-                            .getRestriction(), pageable);
+                         .getRestriction(), pageable);
         } else {
             return assetRepo
                     .findByUserIdAndStatusAndCompanyIdAndNameLikeAndConsignment(userId, AssetStatus.NORMAL, companyId,
@@ -1130,17 +1135,17 @@ public class AssetService {
         User toUser = userRepo.findById(Constants.BLACK_HOLE_USER_ID).orElseThrow(new BusinessException("无记录"));
 
         TokenHistory tokenHistory = TokenHistory.builder()
-                .tokenId(asset.getTokenId())
-                .fromUser(asset.getOwner())
-                .fromUserId(asset.getOwnerId())
-                .fromAvatar(asset.getOwnerAvatar())
-                .toUser(toUser.getNickname())
-                .toUserId(toUser.getId())
-                .toAvatar(toUser.getAvatar())
-                .operation(TransferReason.DESTROY.getDescription())
-                .price(null)
-                .companyId(asset.getCompanyId())
-                .build();
+                                                .tokenId(asset.getTokenId())
+                                                .fromUser(asset.getOwner())
+                                                .fromUserId(asset.getOwnerId())
+                                                .fromAvatar(asset.getOwnerAvatar())
+                                                .toUser(toUser.getNickname())
+                                                .toUserId(toUser.getId())
+                                                .toAvatar(toUser.getAvatar())
+                                                .operation(TransferReason.DESTROY.getDescription())
+                                                .price(null)
+                                                .companyId(asset.getCompanyId())
+                                                .build();
         tokenHistoryRepo.save(tokenHistory);
 
         asset.setPublicShow(false);
@@ -1153,15 +1158,15 @@ public class AssetService {
         assetRepo.saveAndFlush(asset);
         //积分记录
         destroyRecordRepo.save(DestroyRecord.builder()
-                .userId(userId)
-                .assetId(asset.getId())
-                .name(asset.getName())
-                .pic(asset.getPic().get(0).getUrl())
-                .record(1)
-                .type(RecordType.OBTAIN)
-                .companyId(asset.getCompanyId())
-                .source(source)
-                .build());
+                                            .userId(userId)
+                                            .assetId(asset.getId())
+                                            .name(asset.getName())
+                                            .pic(asset.getPic().get(0).getUrl())
+                                            .record(1)
+                                            .type(RecordType.OBTAIN)
+                                            .companyId(asset.getCompanyId())
+                                            .source(source)
+                                            .build());
 
         //加积分
         userRepo.addDestroyPoint(userId, 1);
@@ -1200,17 +1205,17 @@ public class AssetService {
         User toUser = userRepo.findById(Constants.BLACK_HOLE_USER_ID).orElseThrow(new BusinessException("无记录"));
 
         TokenHistory tokenHistory = TokenHistory.builder()
-                .tokenId(asset.getTokenId())
-                .fromUser(asset.getOwner())
-                .fromUserId(asset.getOwnerId())
-                .fromAvatar(asset.getOwnerAvatar())
-                .toUser(toUser.getNickname())
-                .toUserId(toUser.getId())
-                .toAvatar(toUser.getAvatar())
-                .operation(TransferReason.DESTROY.getDescription())
-                .price(null)
-                .companyId(asset.getCompanyId())
-                .build();
+                                                .tokenId(asset.getTokenId())
+                                                .fromUser(asset.getOwner())
+                                                .fromUserId(asset.getOwnerId())
+                                                .fromAvatar(asset.getOwnerAvatar())
+                                                .toUser(toUser.getNickname())
+                                                .toUserId(toUser.getId())
+                                                .toAvatar(toUser.getAvatar())
+                                                .operation(TransferReason.DESTROY.getDescription())
+                                                .price(null)
+                                                .companyId(asset.getCompanyId())
+                                                .build();
         tokenHistoryRepo.save(tokenHistory);
 
         asset.setPublicShow(false);
@@ -1223,15 +1228,15 @@ public class AssetService {
         assetRepo.saveAndFlush(asset);
         //积分记录
         DestroyRecord destroyRecord = DestroyRecord.builder()
-                .userId(userId)
-                .assetId(asset.getId())
-                .name(asset.getName())
-                .record(1)
-                .type(RecordType.OBTAIN)
-                .companyId(asset.getCompanyId())
-                .source(source)
-                .remark(remark)
-                .build();
+                                                   .userId(userId)
+                                                   .assetId(asset.getId())
+                                                   .name(asset.getName())
+                                                   .record(1)
+                                                   .type(RecordType.OBTAIN)
+                                                   .companyId(asset.getCompanyId())
+                                                   .source(source)
+                                                   .remark(remark)
+                                                   .build();
         destroyRecord
                 .setPic("video/mp4".equals(asset.getPic().get(0).getType()) ? asset.getPic().get(0).getThumb() : asset
                         .getPic().get(0).getUrl());
@@ -1308,22 +1313,22 @@ public class AssetService {
         new ForkJoinPool(1000).submit(() -> {
             AtomicInteger num = new AtomicInteger();
             assetRepo.findByStatus(AssetStatus.NORMAL).parallelStream()
-                    .forEach(asset -> {
-                        if (asset.getHcTxHash() == null) {
-                            User user = userRepo.findById(asset.getUserId()).orElse(null);
-                            if (user != null) {
-                                if (user.getHcChainAddress() == null) {
-                                    user.setHcChainAddress(hcChainService.createAccount(asset.getUserId()));
-                                }
-                                NFT nft = hcChainService.mint(user.getHcChainAddress(), asset.getTokenId());
-                                asset.setHcTokenId(nft.getTokenId());
-                                asset.setHcTxHash(nft.getTxHash());
-                                asset.setGasUsed(nft.getGasUsed());
-                                assetRepo.saveAndFlush(asset);
-                            }
-                        }
-                        log.info("hcChain:" + num.getAndIncrement());
-                    });
+                     .forEach(asset -> {
+                         if (asset.getHcTxHash() == null) {
+                             User user = userRepo.findById(asset.getUserId()).orElse(null);
+                             if (user != null) {
+                                 if (user.getHcChainAddress() == null) {
+                                     user.setHcChainAddress(hcChainService.createAccount(asset.getUserId()));
+                                 }
+                                 NFT nft = hcChainService.mint(user.getHcChainAddress(), asset.getTokenId());
+                                 asset.setHcTokenId(nft.getTokenId());
+                                 asset.setHcTxHash(nft.getTxHash());
+                                 asset.setGasUsed(nft.getGasUsed());
+                                 assetRepo.saveAndFlush(asset);
+                             }
+                         }
+                         log.info("hcChain:" + num.getAndIncrement());
+                     });
         }).get();
     }
 
@@ -1353,16 +1358,16 @@ public class AssetService {
         assetRepo.saveAndFlush(asset);
 
         assetLockRepo.save(AssetLock.builder()
-                .userId(userId)
-                .phone(user.getPhone())
-                .nickname(user.getNickname())
-                .assetId(assetId)
-                .name(asset.getName())
-                .number(asset.getNumber())
-                .lockAt(asset.getLockAt())
-                .lockTo(asset.getLockTo())
-                .duration(duration)
-                .build());
+                                    .userId(userId)
+                                    .phone(user.getPhone())
+                                    .nickname(user.getNickname())
+                                    .assetId(assetId)
+                                    .name(asset.getName())
+                                    .number(asset.getNumber())
+                                    .lockAt(asset.getLockAt())
+                                    .lockTo(asset.getLockTo())
+                                    .duration(duration)
+                                    .build());
     }
 
     public List<TransactionTopTenDTO> transactionTopTen() {

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

@@ -238,8 +238,11 @@ public class OrderService {
 
     public void limitReq(Long collectionId) {
         Bucket bucket = buckets.builder().build("limit::" + collectionId, () -> (BucketConfiguration.builder()
-                .addLimit(Bandwidth.classic(3000, Refill.intervally(3000, Duration.ofSeconds(3000))))
-                .build()));
+                                                                                                    .addLimit(Bandwidth
+                                                                                                            .classic(3000, Refill
+                                                                                                                    .intervally(3000, Duration
+                                                                                                                            .ofSeconds(3000))))
+                                                                                                    .build()));
         if (!bucket.tryConsume(1)) {
             throw new BusinessException("前方拥堵,请稍后再试");
         }
@@ -249,29 +252,29 @@ public class OrderService {
                         Long id, boolean vip, Long showroomId, OrderType orderType, Long parentOrderId, String collectionIds, Long newId) {
         if (orderType.equals(OrderType.MIX)) {
             Collection collection = collectionRepo.findById(collectionId).orElseThrow(new BusinessException("暂无藏品"));
-            Cart cart = cartRepo
-                    .findFirstByCollectionIdAndUserIdAndDel(collectionId, userId, false);
-            if (cart != null)
-                cartRepo.delete(cart);
+//            Cart cart = cartRepo
+//                    .findFirstByCollectionIdAndUserIdAndDel(collectionId, userId, false);
+//            if (cart != null)
+//                cartRepo.delete(cart);
             User minter = userRepo.findById(collection.getMinterId()).orElseThrow(new BusinessException("铸造者不存在"));
             Order order = Order.builder()
-                    .id(Optional.ofNullable(id).orElse(snowflakeIdWorker.nextId()))
-                    .userId(userId)
-                    .collectionId(collectionId)
-                    .name(collection.getName())
-                    .pic(collection.getPic())
-                    .detail(collection.getDetail())
-                    .properties(collection.getProperties())
-                    .category(collection.getCategory())
-                    .canResale(collection.isCanResale())
-                    .royalties(collection.getRoyalties())
-                    .serviceCharge(collection.getServiceCharge())
-                    .type(collection.getType())
-                    .source(collection.getSource())
-                    .minterId(collection.getMinterId())
-                    .minter(minter.getNickname())
-                    .minterAvatar(minter.getAvatar())
-                    .qty(qty)
+                               .id(Optional.ofNullable(id).orElse(snowflakeIdWorker.nextId()))
+                               .userId(userId)
+                               .collectionId(collectionId)
+                               .name(collection.getName())
+                               .pic(collection.getPic())
+                               .detail(collection.getDetail())
+                               .properties(collection.getProperties())
+                               .category(collection.getCategory())
+                               .canResale(collection.isCanResale())
+                               .royalties(collection.getRoyalties())
+                               .serviceCharge(collection.getServiceCharge())
+                               .type(collection.getType())
+                               .source(collection.getSource())
+                               .minterId(collection.getMinterId())
+                               .minter(minter.getNickname())
+                               .minterAvatar(minter.getAvatar())
+                               .qty(qty)
 //                    .price(collection.getPrice())
 //                    .gasPrice(gasFee)
 //                    .totalPrice(collection.getPrice().multiply(BigDecimal.valueOf(qty)).add(gasFee))
@@ -281,24 +284,24 @@ public class OrderService {
 //                            u.getProvinceName() + " " + u.getCityName() + " " + u.getDistrictName() + " " + u
 //                                    .getAddress())
 //                            .orElse(null))
-                    .status(OrderStatus.NOT_PAID)
+                               .status(OrderStatus.NOT_PAID)
 //                    .assetId(collection.getAssetId())
-                    .couponId(userCouponId)
-                    .invitor(invitor)
+                               .couponId(userCouponId)
+                               .invitor(invitor)
 //                    .countId(collection.getCountId())
-                    .vip(vip)
-                    .vipPoint(0)
-                    .companyId(1L)
-                    .orderType(OrderType.MIX)
-                    .collectionIds(collectionIds)
-                    .build();
+                               .vip(vip)
+                               .vipPoint(0)
+                               .companyId(1L)
+                               .orderType(OrderType.MIX)
+                               .collectionIds(collectionIds)
+                               .build();
             return orderRepo.save(order);
         } else {
             long t = System.currentTimeMillis();
             qty = 1;
             int stock = Optional.ofNullable(collectionService.decreaseStock(collectionId, qty))
-                    .map(Math::toIntExact)
-                    .orElseThrow(new BusinessException("很遗憾,藏品已售罄", ErrorCode.SOLD_OUT));
+                                .map(Math::toIntExact)
+                                .orElseThrow(new BusinessException("很遗憾,藏品已售罄", ErrorCode.SOLD_OUT));
 
             int usePoint = 0;
             // 创建订单出错后需要回滚库存,所以需要try-catch
@@ -307,7 +310,7 @@ public class OrderService {
                     throw new BusinessException("很遗憾,藏品已售罄", ErrorCode.SOLD_OUT);
                 }
                 Collection collection = collectionRepo.findById(collectionId)
-                        .orElseThrow(new BusinessException("藏品不存在"));
+                                                      .orElseThrow(new BusinessException("藏品不存在"));
                 if (collection.isInPaying()) {
                     throw new BusinessException("当然藏品正在支付中");
                 }
@@ -316,7 +319,7 @@ public class OrderService {
                 }
                 if (collection.getSource() == CollectionSource.TRANSFER) {
                     Asset asset = assetRepo.findById(collection.getAssetId())
-                            .orElseThrow(new BusinessException("藏品不存在"));
+                                           .orElseThrow(new BusinessException("藏品不存在"));
                     if (Objects.equals(asset.getUserId(), userId)) {
                         throw new BusinessException("不能购买自己的藏品");
                     }
@@ -362,8 +365,8 @@ public class OrderService {
 
                 if (collection.getMaxCount() > 0) {
                     int userMax = userPropertyRepo.findById(userId)
-                            .map(UserProperty::getMaxCount)
-                            .orElse(collection.getMaxCount());
+                                                  .map(UserProperty::getMaxCount)
+                                                  .orElse(collection.getMaxCount());
                     int count;
                     if (StringUtils.isNotBlank(collection.getCountId())) {
                         count = orderRepo.countByUserIdAndCountIdAndStatusIn(userId, collection.getCountId(),
@@ -381,7 +384,7 @@ public class OrderService {
 
                 //设置了最低消费
                 if (ObjectUtils.isNotEmpty(collection.getMinimumCharge()) && collection.getMinimumCharge()
-                        .compareTo(BigDecimal.ZERO) > 0) {
+                                                                                       .compareTo(BigDecimal.ZERO) > 0) {
 
                     if (!user.isCanSale()) {
                         throw new BusinessException("绿洲石不足");
@@ -416,41 +419,43 @@ public class OrderService {
 
                 BigDecimal gasFee = sysConfigService.getBigDecimal("gas_fee");
                 Order order = Order.builder()
-                        .id(Optional.ofNullable(id).orElse(snowflakeIdWorker.nextId()))
-                        .userId(userId)
-                        .collectionId(collectionId)
-                        .name(collection.getName())
-                        .pic(collection.getPic())
-                        .detail(collection.getDetail())
-                        .properties(collection.getProperties())
-                        .category(collection.getCategory())
-                        .canResale(collection.isCanResale())
-                        .royalties(collection.getRoyalties())
-                        .serviceCharge(collection.getServiceCharge())
-                        .type(collection.getType())
-                        .source(collection.getSource())
-                        .minterId(collection.getMinterId())
-                        .minter(minter.getNickname())
-                        .minterAvatar(minter.getAvatar())
-                        .qty(qty)
-                        .price(collection.getPrice())
-                        .gasPrice(gasFee)
-                        .totalPrice(collection.getPrice().multiply(BigDecimal.valueOf(qty)).add(gasFee))
-                        .contactName(Optional.ofNullable(userAddress).map(UserAddress::getName).orElse(null))
-                        .contactPhone(Optional.ofNullable(userAddress).map(UserAddress::getPhone).orElse(null))
-                        .address(Optional.ofNullable(userAddress).map(u ->
-                                u.getProvinceName() + " " + u.getCityName() + " " + u.getDistrictName() + " " + u
-                                        .getAddress())
-                                .orElse(null))
-                        .status(OrderStatus.NOT_PAID)
-                        .assetId(collection.getAssetId())
-                        .couponId(userCouponId)
-                        .invitor(invitor)
-                        .countId(collection.getCountId())
-                        .vip(vip)
-                        .vipPoint(usePoint)
-                        .companyId(collection.getCompanyId())
-                        .build();
+                                   .id(Optional.ofNullable(id).orElse(snowflakeIdWorker.nextId()))
+                                   .userId(userId)
+                                   .collectionId(collectionId)
+                                   .name(collection.getName())
+                                   .pic(collection.getPic())
+                                   .detail(collection.getDetail())
+                                   .properties(collection.getProperties())
+                                   .category(collection.getCategory())
+                                   .canResale(collection.isCanResale())
+                                   .royalties(collection.getRoyalties())
+                                   .serviceCharge(collection.getServiceCharge())
+                                   .type(collection.getType())
+                                   .source(collection.getSource())
+                                   .minterId(collection.getMinterId())
+                                   .minter(minter.getNickname())
+                                   .minterAvatar(minter.getAvatar())
+                                   .qty(qty)
+                                   .price(collection.getPrice())
+                                   .gasPrice(gasFee)
+                                   .totalPrice(collection.getPrice().multiply(BigDecimal.valueOf(qty)).add(gasFee))
+                                   .contactName(Optional.ofNullable(userAddress).map(UserAddress::getName).orElse(null))
+                                   .contactPhone(Optional.ofNullable(userAddress).map(UserAddress::getPhone)
+                                                         .orElse(null))
+                                   .address(Optional.ofNullable(userAddress).map(u ->
+                                           u.getProvinceName() + " " + u.getCityName() + " " + u
+                                                   .getDistrictName() + " " + u
+                                                   .getAddress())
+                                                    .orElse(null))
+                                   .status(OrderStatus.NOT_PAID)
+                                   .assetId(collection.getAssetId())
+                                   .couponId(userCouponId)
+                                   .invitor(invitor)
+                                   .countId(collection.getCountId())
+                                   .vip(vip)
+                                   .vipPoint(usePoint)
+                                   .companyId(collection.getCompanyId())
+                                   .build();
                 if (orderType == OrderType.SUB) {
                     order.setId(newId);
                     order.setOrderType(orderType);
@@ -469,7 +474,7 @@ public class OrderService {
 
                 if (collection.getSource() == CollectionSource.TRANSFER) {
                     Asset asset = assetRepo.findById(collection.getAssetId())
-                            .orElseThrow(new BusinessException("资产不存在"));
+                                           .orElseThrow(new BusinessException("资产不存在"));
                     asset.setStatus(AssetStatus.TRADING);
                     assetRepo.save(asset);
 //                collectionRepo.setOnShelf(collectionId, false);
@@ -497,17 +502,17 @@ public class OrderService {
                 if (ObjectUtils.isNotEmpty(showroomId)) {
                     //通过展厅的购买数量
                     heatInfoRepo.save(HeatInfo.builder()
-                            .showroomId(showroomId)
-                            .userId(userId)
-                            .type(HeatType.BUY)
-                            .value(0)
-                            .orderId(order.getId())
-                            .build());
+                                              .showroomId(showroomId)
+                                              .userId(userId)
+                                              .type(HeatType.BUY)
+                                              .value(0)
+                                              .orderId(order.getId())
+                                              .build());
                 }
-                Cart cart = cartRepo
-                        .findFirstByCollectionIdAndUserIdAndDel(collectionId, userId, false);
-                if (cart != null)
-                    cartRepo.delete(cart);
+//                Cart cart = cartRepo
+//                        .findFirstByCollectionIdAndUserIdAndDel(collectionId, userId, false);
+//                if (cart != null)
+//                    cartRepo.delete(cart);
                 rocketMQTemplate.syncSend(generalProperties.getUpdateStockTopic(), collectionId, 10000);
                 log.info("订单创建完成, id={}, {}ms", order.getId(), System.currentTimeMillis() - t);
                 return order;
@@ -600,7 +605,7 @@ public class OrderService {
                     SecurityUtils.getAuthenticatedUser().getId(), order.getUserId());
         }
         Collection collection = collectionRepo.findById(order.getCollectionId())
-                .orElseThrow(new BusinessException("藏品不存在"));
+                                              .orElseThrow(new BusinessException("藏品不存在"));
         User invitor = null;
         if (order.getInvitor() != null) {
             invitor = userRepo.findById(order.getInvitor()).orElse(null);
@@ -620,7 +625,7 @@ public class OrderService {
         paymentParams.put("goods_title", collection.getName());
         paymentParams.put("goods_desc", collection.getName());
         paymentParams.put("time_expire", DateTimeFormatter.ofPattern("yyyyMMddHHmmss")
-                .format(LocalDateTime.now().plusMinutes(3)));
+                                                          .format(LocalDateTime.now().plusMinutes(3)));
         paymentParams.put("notify_url", adapayProperties.getNotifyUrl() + "/order/" + adapayProperties
                 .getMerchant() + "/" + order.getId());
 
@@ -702,7 +707,7 @@ public class OrderService {
         if (ratio == -1 || (ratio > 0 && ratio < 100)) {
             BigDecimal divAmount = ratio == -1 ? restAmount :
                     totalAmount.multiply(BigDecimal.valueOf(ratio))
-                            .divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
+                               .divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
             Map<String, Object> divMem = new HashMap<>();
             divMem.put("member_id", memberId);
             divMem.put("amount", divAmount.toPlainString());
@@ -763,7 +768,11 @@ public class OrderService {
                 order.setTransactionId(transactionId);
             } else {
                 Collection collection = collectionRepo.findDetailById(order.getCollectionId())
-                        .orElseThrow(new BusinessException("藏品不存在"));
+                                                      .orElseThrow(new BusinessException("藏品不存在"));
+                Cart cart = cartRepo
+                        .findFirstByCollectionIdAndUserIdAndDel(order.getCollectionId(), order.getUserId(), false);
+                if (cart != null)
+                    cartRepo.delete(cart);
                 User user = userRepo.findById(order.getUserId()).orElseThrow(new BusinessException("用户不存在"));
                 if (order.getStatus() == OrderStatus.NOT_PAID) {
                     order.setStatus(OrderStatus.PROCESSING);
@@ -789,7 +798,7 @@ public class OrderService {
                             }
                         }
                         Collection winCollection = collectionRepo.findById(winItem.getCollectionId())
-                                .orElseThrow(new BusinessException("藏品不存在"));
+                                                                 .orElseThrow(new BusinessException("藏品不存在"));
                         assetService.createAsset(winItem, user, order.getId(), order.getPrice(), "出售",
                                 winItem.getTotal() > 1 ? collectionService
                                         .getNextNumber(winItem.getCollectionId()) : null,
@@ -832,7 +841,7 @@ public class OrderService {
                                 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
                                 String localDateTimeNowStr = order.getPayTime().format(formatter);
                                 String info = "元域名:\"" + collection.getName().substring(9)
-                                        .replace(".nft", "") + "\"\n" +
+                                                                   .replace(".nft", "") + "\"\n" +
                                         "持有人:\"" + collection.getOwner() + "\"\n" +
                                         "购买人:\"" + user.getNickname() + "\"\n" +
                                         "时间:\"" + localDateTimeNowStr + "\"\n" +
@@ -885,10 +894,10 @@ public class OrderService {
             }
         } catch (Exception e) {
             ErrorOrder errorOrder = ErrorOrder.builder()
-                    .orderId(orderId)
-                    .transactionId(transactionId)
-                    .payMethod(payMethod)
-                    .build();
+                                              .orderId(orderId)
+                                              .transactionId(transactionId)
+                                              .payMethod(payMethod)
+                                              .build();
             if (e instanceof BusinessException) {
                 log.error("订单回调出错 orderId: {} {}", orderId, e.getMessage());
             } else {
@@ -1064,18 +1073,19 @@ public class OrderService {
                         shareRatio != null && shareRatio.compareTo(BigDecimal.ZERO) > 0) {
                     BigDecimal totalPrice = order.getTotalPrice().subtract(order.getGasPrice());
                     commissionRecordRepo.save(CommissionRecord.builder()
-                            .orderId(order.getId())
-                            .collectionId(order.getCollectionId())
-                            .name(order.getName())
-                            .totalPrice(totalPrice)
-                            .nickname(user.getNickname())
-                            .userId(user.getId())
-                            .shareRatio(user.getShareRatio())
-                            .phone(user.getPhone())
-                            .shareAmount(totalPrice.multiply(shareRatio)
-                                    .divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP))
-                            .type(InviteType.NORMAL)
-                            .build());
+                                                              .orderId(order.getId())
+                                                              .collectionId(order.getCollectionId())
+                                                              .name(order.getName())
+                                                              .totalPrice(totalPrice)
+                                                              .nickname(user.getNickname())
+                                                              .userId(user.getId())
+                                                              .shareRatio(user.getShareRatio())
+                                                              .phone(user.getPhone())
+                                                              .shareAmount(totalPrice.multiply(shareRatio)
+                                                                                     .divide(BigDecimal
+                                                                                             .valueOf(100), 2, RoundingMode.HALF_UP))
+                                                              .type(InviteType.NORMAL)
+                                                              .build());
                 }
             });
         }
@@ -1120,19 +1130,19 @@ public class OrderService {
         List<MarketSettlement> settlements = new ArrayList<>();
         for (Order order : orders) {
             BigDecimal amount = order.getTotalPrice()
-                    .subtract(order.getGasPrice())
-                    .multiply(new BigDecimal("100")
-                            .subtract(BigDecimal.valueOf(order.getServiceCharge()))
-                            .subtract(BigDecimal.valueOf(order.getRoyalties()))
-                            .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP))
-                    .setScale(2, RoundingMode.HALF_UP);
+                                     .subtract(order.getGasPrice())
+                                     .multiply(new BigDecimal("100")
+                                             .subtract(BigDecimal.valueOf(order.getServiceCharge()))
+                                             .subtract(BigDecimal.valueOf(order.getRoyalties()))
+                                             .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP))
+                                     .setScale(2, RoundingMode.HALF_UP);
             Long userId = assets.stream().filter(a -> a.getId().equals(order.getAssetId())).map(Asset::getUserId)
-                    .findAny().orElse(null);
+                                .findAny().orElse(null);
             if (userId != null) {
                 UserBankCard userBankCard = bankCards.stream().filter(b -> b.getUserId().equals(userId)).findAny()
-                        .orElse(null);
+                                                     .orElse(null);
                 MarketSettlement marketSettlement = settlements.stream().filter(s -> s.getUserId().equals(userId))
-                        .findAny().orElse(null);
+                                                               .findAny().orElse(null);
                 if (marketSettlement == null) {
                     marketSettlement = new MarketSettlement(userId,
                             Optional.ofNullable(userBankCard).map(UserBankCard::getRealName).orElse(null),
@@ -1141,7 +1151,7 @@ public class OrderService {
                     settlements.add(marketSettlement);
                 } else {
                     marketSettlement.setAmount(marketSettlement.getAmount()
-                            .add(amount));
+                                                               .add(amount));
                 }
             }
         }
@@ -1168,30 +1178,30 @@ public class OrderService {
             time = time.plusSeconds(i++);
             BigDecimal gasFee = new BigDecimal("1");
             Order order = Order.builder()
-                    .id(snowflakeIdWorker.nextId())
-                    .userId(userId)
-                    .collectionId(collectionId)
-                    .name(collection.getName())
-                    .pic(collection.getPic())
-                    .detail(collection.getDetail())
-                    .properties(collection.getProperties())
-                    .category(collection.getCategory())
-                    .canResale(collection.isCanResale())
-                    .royalties(collection.getRoyalties())
-                    .serviceCharge(collection.getServiceCharge())
-                    .type(collection.getType())
-                    .source(collection.getSource())
-                    .minterId(collection.getMinterId())
-                    .minter(minter.getNickname())
-                    .minterAvatar(minter.getAvatar())
-                    .qty(1)
-                    .price(collection.getPrice())
-                    .gasPrice(gasFee)
-                    .totalPrice(collection.getPrice().multiply(BigDecimal.valueOf(1)).add(gasFee))
-                    .status(notify ? OrderStatus.NOT_PAID : OrderStatus.FINISH)
-                    .assetId(collection.getAssetId())
-                    .countId(collection.getCountId())
-                    .build();
+                               .id(snowflakeIdWorker.nextId())
+                               .userId(userId)
+                               .collectionId(collectionId)
+                               .name(collection.getName())
+                               .pic(collection.getPic())
+                               .detail(collection.getDetail())
+                               .properties(collection.getProperties())
+                               .category(collection.getCategory())
+                               .canResale(collection.isCanResale())
+                               .royalties(collection.getRoyalties())
+                               .serviceCharge(collection.getServiceCharge())
+                               .type(collection.getType())
+                               .source(collection.getSource())
+                               .minterId(collection.getMinterId())
+                               .minter(minter.getNickname())
+                               .minterAvatar(minter.getAvatar())
+                               .qty(1)
+                               .price(collection.getPrice())
+                               .gasPrice(gasFee)
+                               .totalPrice(collection.getPrice().multiply(BigDecimal.valueOf(1)).add(gasFee))
+                               .status(notify ? OrderStatus.NOT_PAID : OrderStatus.FINISH)
+                               .assetId(collection.getAssetId())
+                               .countId(collection.getCountId())
+                               .build();
             orderRepo.saveAndFlush(order);
 
             String txHash = RandomStringUtils.randomAlphanumeric(64).toLowerCase(Locale.ROOT);
@@ -1238,8 +1248,9 @@ public class OrderService {
     public void refundGas() throws ExecutionException, InterruptedException {
         new ForkJoinPool(500).submit(() -> {
             List<Order> list = orderRepo.findByCollectionId(8657801L).stream()
-                    .filter(o -> o.getStatus() == OrderStatus.FINISH || o.getStatus() == OrderStatus.PROCESSING)
-                    .collect(Collectors.toList());
+                                        .filter(o -> o.getStatus() == OrderStatus.FINISH || o
+                                                .getStatus() == OrderStatus.PROCESSING)
+                                        .collect(Collectors.toList());
             list.parallelStream().forEach(o -> {
                 log.info("refundGas {}", o.getId());
                 userBalanceService

+ 9 - 3
src/main/java/com/izouma/nineth/service/nftdomain/DomainAskService.java

@@ -23,6 +23,7 @@ import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -65,7 +66,7 @@ public class DomainAskService {
         Set<DomainAskStatus> domainAskStatuses = new HashSet<>();
         domainAskStatuses.add(DomainAskStatus.ASKING);
         if (domainAskRepo
-                .countByDomainOrderIdAndUserIdAndStatusInAndDelFalse(domainOrderId, userId, domainAskStatuses) > 0) {
+                .countByAssetIdAndUserIdAndStatusInAndDelFalse(asset.getId(), userId, domainAskStatuses) > 0) {
             throw new BusinessException("已有报价,请勿重复报价!");
         }
         DomainAsk domainAsk = DomainAsk.builder()
@@ -134,11 +135,16 @@ public class DomainAskService {
         Set<DomainAskStatus> domainAskStatuses = new HashSet<>();
         domainAskStatuses.add(DomainAskStatus.FINISH);
         if (domainAskRepo
-                .countByDomainOrderIdAndOwnerIdAndStatusInAndDelFalse(domainAsk.getDomainOrderId(), domainAsk
+                .countByAssetIdAndOwnerIdAndStatusInAndDelFalse(asset.getId(), domainAsk
                         .getOwnerId(), domainAskStatuses) > 0) {
             throw new BusinessException("已有通过报价,请勿重复通过!");
         }
-        assetService.transfer(asset, domainAsk.getPrice(),
+        BigDecimal amount = domainAsk.getPrice()
+//                                 .subtract(BigDecimal.valueOf(1))
+                                     .multiply(BigDecimal
+                                             .valueOf(100 - domainAsk.getRoyalties() - domainAsk.getServiceCharge()))
+                                     .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
+        assetService.transfer(asset, amount,
                 userRepo.findById(domainAsk.getUserId())
                         .orElseThrow(new BusinessException("未找到用户")), TransferReason.ASK, domainAsk
                         .getId());

+ 1 - 0
src/main/java/com/izouma/nineth/utils/excel/ExcelUtils.java

@@ -52,6 +52,7 @@ public class ExcelUtils<T> {
                 .registerConverter(new MetaLuckyDrawAwardModelConverter())
                 .registerConverter(new MetaPropTriggerTypeConverter())
                 .registerConverter(new MetaPropUsedTypeConverter())
+                .registerConverter(new WithdrawStatusConverter())
                 .doWrite(data);
     }
 }

+ 43 - 0
src/main/java/com/izouma/nineth/utils/excel/WithdrawStatusConverter.java

@@ -0,0 +1,43 @@
+package com.izouma.nineth.utils.excel;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+import com.izouma.nineth.enums.MetaZombieType;
+import com.izouma.nineth.enums.WithdrawStatus;
+
+public class WithdrawStatusConverter implements Converter<WithdrawStatus> {
+
+    @Override
+    public Class supportJavaTypeKey() {
+        return WithdrawStatus.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return null;
+    }
+
+    @Override
+    public WithdrawStatus convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        try {
+            for (WithdrawStatus value : WithdrawStatus.values()) {
+                if (value.getDescription().equals(cellData.getStringValue())) {
+                    return value;
+                }
+            }
+        } catch (Exception ignored) {
+        }
+        return null;
+    }
+
+    @Override
+    public CellData convertToExcelData(WithdrawStatus value, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        if (value != null) {
+            return new CellData(value.getDescription());
+        }
+        return null;
+    }
+}

+ 3 - 1
src/main/java/com/izouma/nineth/web/nftdomain/CartController.java

@@ -82,7 +82,9 @@ public class CartController extends BaseController {
                 if (collection != null) {
                     if (!collection.isSalable() || collection.getStock() < 0 || collection.isInPaying()) {
                         cart.setEnabled(false);
-//                        cartRepo.save(cart);
+                        if (!collection.isInPaying()) {
+                            cartRepo.save(cart);
+                        }
                     } else {
                         if (collection.getType().equals(CollectionType.DOMAIN)) {
                             String domainName = collection.getName().substring(9);