AssetService.java 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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.event.CreateAssetEvent;
  11. import com.izouma.nineth.exception.BusinessException;
  12. import com.izouma.nineth.repo.AssetRepo;
  13. import com.izouma.nineth.repo.CollectionRepo;
  14. import com.izouma.nineth.repo.UserRepo;
  15. import com.izouma.nineth.utils.JpaUtils;
  16. import lombok.AllArgsConstructor;
  17. import lombok.extern.slf4j.Slf4j;
  18. import org.apache.commons.lang3.StringUtils;
  19. import org.springframework.context.ApplicationContext;
  20. import org.springframework.data.domain.Page;
  21. import org.springframework.scheduling.annotation.Async;
  22. import org.springframework.stereotype.Service;
  23. @Service
  24. @AllArgsConstructor
  25. @Slf4j
  26. public class AssetService {
  27. private AssetRepo assetRepo;
  28. private UserRepo userRepo;
  29. private NFTService nftService;
  30. private ApplicationContext applicationContext;
  31. public Page<Asset> all(PageQuery pageQuery) {
  32. return assetRepo.findAll(JpaUtils.toSpecification(pageQuery, Asset.class), JpaUtils.toPageRequest(pageQuery));
  33. }
  34. @Async
  35. public void createAsset(Order order) {
  36. User user = userRepo.findById(order.getUserId()).orElseThrow(new BusinessException("用户不存在"));
  37. if (StringUtils.isEmpty(user.getPublicKey())) {
  38. NFTAccount account = nftService.createAccount(user.getUsername());
  39. user.setNftAccount(account.getAccountId());
  40. user.setKmsId(account.getAccountKmsId());
  41. user.setPublicKey(account.getPublicKey());
  42. userRepo.save(user);
  43. }
  44. try {
  45. NFT nft = nftService.createToken(user.getNftAccount());
  46. if (nft != null) {
  47. Asset asset = Asset.builder()
  48. .userId(user.getId())
  49. .orderId(order.getId())
  50. .minter(order.getMinter())
  51. .minterId(order.getMinterId())
  52. .minterAvatar(order.getMinterAvatar())
  53. .name(order.getName())
  54. .pic(order.getPic())
  55. .properties(order.getProperties())
  56. .tokenId(nft.getTokenId())
  57. .blockNumber(nft.getBlockNumber())
  58. .txHash(nft.getTxHash())
  59. .gasUsed(nft.getGasUsed())
  60. .price(order.getPrice())
  61. .status(AssetStatus.NORMAL)
  62. .build();
  63. assetRepo.save(asset);
  64. applicationContext.publishEvent(new CreateAssetEvent(this, true, order, asset));
  65. return;
  66. }
  67. } catch (Exception e) {
  68. log.error("创建token失败", e);
  69. }
  70. applicationContext.publishEvent(new CreateAssetEvent(this, false, order, null));
  71. }
  72. }