| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package com.izouma.nineth.service;
- import com.izouma.nineth.domain.Asset;
- import com.izouma.nineth.domain.Collection;
- import com.izouma.nineth.domain.Order;
- import com.izouma.nineth.domain.User;
- import com.izouma.nineth.dto.NFT;
- import com.izouma.nineth.dto.NFTAccount;
- import com.izouma.nineth.dto.PageQuery;
- import com.izouma.nineth.enums.AssetStatus;
- import com.izouma.nineth.event.CreateAssetEvent;
- import com.izouma.nineth.exception.BusinessException;
- import com.izouma.nineth.repo.AssetRepo;
- import com.izouma.nineth.repo.CollectionRepo;
- import com.izouma.nineth.repo.UserRepo;
- import com.izouma.nineth.utils.JpaUtils;
- import lombok.AllArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.context.ApplicationContext;
- import org.springframework.data.domain.Page;
- import org.springframework.scheduling.annotation.Async;
- import org.springframework.stereotype.Service;
- @Service
- @AllArgsConstructor
- @Slf4j
- public class AssetService {
- private AssetRepo assetRepo;
- private UserRepo userRepo;
- private NFTService nftService;
- private ApplicationContext applicationContext;
- public Page<Asset> all(PageQuery pageQuery) {
- return assetRepo.findAll(JpaUtils.toSpecification(pageQuery, Asset.class), JpaUtils.toPageRequest(pageQuery));
- }
- @Async
- public void createAsset(Order order) {
- User user = userRepo.findById(order.getUserId()).orElseThrow(new BusinessException("用户不存在"));
- if (StringUtils.isEmpty(user.getPublicKey())) {
- NFTAccount account = nftService.createAccount(user.getUsername());
- user.setNftAccount(account.getAccountId());
- user.setKmsId(account.getAccountKmsId());
- user.setPublicKey(account.getPublicKey());
- userRepo.save(user);
- }
- try {
- NFT nft = nftService.createToken(user.getNftAccount());
- if (nft != null) {
- Asset asset = Asset.builder()
- .userId(user.getId())
- .orderId(order.getId())
- .minter(order.getMinter())
- .minterId(order.getMinterId())
- .minterAvatar(order.getMinterAvatar())
- .name(order.getName())
- .pic(order.getPic())
- .properties(order.getProperties())
- .tokenId(nft.getTokenId())
- .blockNumber(nft.getBlockNumber())
- .txHash(nft.getTxHash())
- .gasUsed(nft.getGasUsed())
- .price(order.getPrice())
- .status(AssetStatus.NORMAL)
- .build();
- assetRepo.save(asset);
- applicationContext.publishEvent(new CreateAssetEvent(this, true, order, asset));
- return;
- }
- } catch (Exception e) {
- log.error("创建token失败", e);
- }
- applicationContext.publishEvent(new CreateAssetEvent(this, false, order, null));
- }
- }
|