| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- package com.izouma.nineth.service;
- import com.izouma.nineth.domain.Asset;
- import com.izouma.nineth.domain.MintMaterial;
- import com.izouma.nineth.domain.MintOrder;
- import com.izouma.nineth.domain.User;
- import com.izouma.nineth.dto.PageQuery;
- import com.izouma.nineth.enums.AssetStatus;
- import com.izouma.nineth.enums.MintOrderStatus;
- import com.izouma.nineth.exception.BusinessException;
- import com.izouma.nineth.repo.AssetRepo;
- import com.izouma.nineth.repo.MintOrderRepo;
- import com.izouma.nineth.repo.UserRepo;
- import com.izouma.nineth.utils.JpaUtils;
- import lombok.AllArgsConstructor;
- import org.springframework.data.domain.Page;
- import org.springframework.stereotype.Service;
- import javax.transaction.Transactional;
- import java.util.List;
- import java.util.Optional;
- import java.util.stream.Collectors;
- @Service
- @AllArgsConstructor
- public class MintOrderService {
- private MintOrderRepo mintOrderRepo;
- private UserRepo userRepo;
- private AssetService assetService;
- private AssetRepo assetRepo;
- public Page<MintOrder> all(PageQuery pageQuery) {
- return mintOrderRepo.findAll(JpaUtils.toSpecification(pageQuery, MintOrder.class), JpaUtils.toPageRequest(pageQuery));
- }
- @Transactional
- public void create(Long userId, List<Long> assetIds) {
- User user = userRepo.findByIdAndDelFalse(userId).orElseThrow(new BusinessException("用户不存在"));
- User blackHole = userRepo.findByIdAndDelFalse(1435297L).orElseThrow(new BusinessException("无法铸造"));
- if (assetIds.size() != 3) {
- throw new BusinessException("数量不正确,请重新选择");
- }
- List<Asset> assets = assetRepo.findAllByIdInAndUserId(assetIds, userId);
- assets = assets.stream()
- .filter(asset -> asset.getName().contains("尼尔斯") && AssetStatus.NORMAL.equals(asset.getStatus()))
- .collect(Collectors.toList());
- if (assets.size() != 3) {
- throw new BusinessException("有藏品不符合,请重新选择");
- }
- // 铸造资产
- List<MintMaterial> materials = assets.stream().map(asset -> {
- MintMaterial material = new MintMaterial();
- material.setAssetId(asset.getId());
- material.setCollectionId(asset.getCollectionId());
- material.setName(asset.getName());
- return material;
- }).collect(Collectors.toList());
- // 铸造订单
- mintOrderRepo.save(MintOrder.builder()
- .userId(userId)
- .phone(user.getPhone())
- .material(materials)
- .consume(true)
- .status(MintOrderStatus.AIR_DROP)
- .build());
- // 改为转赠
- assets.forEach(asset -> assetService.transfer(asset, asset.getPrice(), blackHole, "转赠", null));
- }
- public void finish(Long id) {
- MintOrder mintOrder = mintOrderRepo.findById(id).orElseThrow(new BusinessException("铸造订单不存在"));
- mintOrder.setStatus(MintOrderStatus.FINISH);
- mintOrderRepo.save(mintOrder);
- }
- }
|