AssetService.java 2.6 KB

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