|
|
@@ -1,20 +1,61 @@
|
|
|
package com.izouma.nineth.service;
|
|
|
|
|
|
+import com.izouma.nineth.domain.Asset;
|
|
|
import com.izouma.nineth.domain.AuctionActivity;
|
|
|
+import com.izouma.nineth.domain.User;
|
|
|
import com.izouma.nineth.dto.PageQuery;
|
|
|
+import com.izouma.nineth.enums.AssetStatus;
|
|
|
+import com.izouma.nineth.enums.AuctionSource;
|
|
|
+import com.izouma.nineth.enums.AuctionStatus;
|
|
|
+import com.izouma.nineth.enums.AuctionType;
|
|
|
+import com.izouma.nineth.exception.BusinessException;
|
|
|
+import com.izouma.nineth.repo.AssetRepo;
|
|
|
import com.izouma.nineth.repo.AuctionActivityRepo;
|
|
|
+import com.izouma.nineth.repo.UserRepo;
|
|
|
import com.izouma.nineth.utils.JpaUtils;
|
|
|
+import com.izouma.nineth.utils.SecurityUtils;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
import org.springframework.data.domain.Page;
|
|
|
+import org.springframework.security.crypto.password.PasswordEncoder;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
@Service
|
|
|
@AllArgsConstructor
|
|
|
public class AuctionActivityService {
|
|
|
|
|
|
- private AuctionActivityRepo auctionActivityRepo;
|
|
|
+ private final AuctionActivityRepo auctionActivityRepo;
|
|
|
+ private final AssetRepo assetRepo;
|
|
|
+ private final UserRepo userRepo;
|
|
|
+ private final PasswordEncoder passwordEncoder;
|
|
|
|
|
|
public Page<AuctionActivity> all(PageQuery pageQuery) {
|
|
|
- return auctionActivityRepo.findAll(JpaUtils.toSpecification(pageQuery, AuctionActivity.class), JpaUtils.toPageRequest(pageQuery));
|
|
|
+ return auctionActivityRepo
|
|
|
+ .findAll(JpaUtils.toSpecification(pageQuery, AuctionActivity.class), JpaUtils.toPageRequest(pageQuery));
|
|
|
+ }
|
|
|
+
|
|
|
+ public AuctionActivity save(AuctionActivity record, String tradeCode) {
|
|
|
+ if (record.getSource().equals(AuctionSource.TRANSFER)) {
|
|
|
+ User user = userRepo.findById(record.getSellerId()).orElseThrow(new BusinessException("无用户信息"));
|
|
|
+ if (!passwordEncoder.matches(tradeCode, user.getTradeCode())) {
|
|
|
+ throw new BusinessException("交易密码错误");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (record.getAuctionType().equals(AuctionType.NFT)) {
|
|
|
+ Asset asset = assetRepo.findById(record.getAssetId()).orElseThrow(new BusinessException("未找到该藏品"));
|
|
|
+ if (!asset.getOwnerId().equals(SecurityUtils.getAuthenticatedUser().getId())) {
|
|
|
+ throw new BusinessException("非本人藏品,无法操作.");
|
|
|
+ }
|
|
|
+ if (!asset.getStatus().equals(AssetStatus.NORMAL)) {
|
|
|
+ throw new BusinessException("藏品状态异常,无法操作.");
|
|
|
+ }
|
|
|
+ if (asset.isConsignment()) {
|
|
|
+ throw new BusinessException("藏品已寄售,取消寄售后再申请拍卖。");
|
|
|
+ }
|
|
|
+ asset.setStatus(AssetStatus.AUCTIONING);
|
|
|
+ assetRepo.save(asset);
|
|
|
+ }
|
|
|
+ record.setStatus(AuctionStatus.NOTSTARTED);
|
|
|
+ return auctionActivityRepo.save(record);
|
|
|
}
|
|
|
}
|