AssetService.java 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. package com.izouma.nineth.service;
  2. import com.izouma.nineth.domain.Asset;
  3. import com.izouma.nineth.domain.Order;
  4. import com.izouma.nineth.domain.User;
  5. import com.izouma.nineth.dto.NFT;
  6. import com.izouma.nineth.dto.NFTAccount;
  7. import com.izouma.nineth.dto.PageQuery;
  8. import com.izouma.nineth.enums.AssetStatus;
  9. import com.izouma.nineth.exception.BusinessException;
  10. import com.izouma.nineth.repo.AssetRepo;
  11. import com.izouma.nineth.repo.UserRepo;
  12. import com.izouma.nineth.utils.JpaUtils;
  13. import lombok.AllArgsConstructor;
  14. import lombok.extern.slf4j.Slf4j;
  15. import org.apache.commons.lang3.StringUtils;
  16. import org.springframework.data.domain.Page;
  17. import org.springframework.scheduling.annotation.Async;
  18. import org.springframework.stereotype.Service;
  19. @Service
  20. @AllArgsConstructor
  21. @Slf4j
  22. public class AssetService {
  23. private AssetRepo assetRepo;
  24. private UserRepo userRepo;
  25. private NFTService nftService;
  26. public Page<Asset> all(PageQuery pageQuery) {
  27. return assetRepo.findAll(JpaUtils.toSpecification(pageQuery, Asset.class), JpaUtils.toPageRequest(pageQuery));
  28. }
  29. @Async
  30. public Asset createAsset(Order order) throws Exception {
  31. User user = userRepo.findById(order.getUserId()).orElseThrow(new BusinessException("用户不存在"));
  32. if (StringUtils.isEmpty(user.getPublicKey())) {
  33. NFTAccount account = nftService.createAccount(user.getUsername());
  34. user.setNftAccount(account.getAccountId());
  35. user.setKmsId(account.getAccountKmsId());
  36. user.setPublicKey(account.getPublicKey());
  37. userRepo.save(user);
  38. }
  39. NFT nft = nftService.createToken(user.getNftAccount());
  40. if (nft != null) {
  41. Asset asset = Asset.builder()
  42. .userId(user.getId())
  43. .orderId(order.getId())
  44. .minter(order.getMinter())
  45. .minterId(order.getMinterId())
  46. .minterAvatar(order.getMinterAvatar())
  47. .pic(order.getPic())
  48. .tokenId(nft.getTokenId())
  49. .blockNumber(nft.getBlockNumber())
  50. .txHash(nft.getTxHash())
  51. .gasUsed(nft.getGasUsed())
  52. .price(order.getPrice())
  53. .status(AssetStatus.NORMAL)
  54. .build();
  55. assetRepo.save(asset);
  56. return asset;
  57. }
  58. throw new BusinessException("创建asset失败");
  59. }
  60. }