wangqifan há 4 anos atrás
pai
commit
64bf86b055

+ 43 - 2
src/main/java/com/izouma/nineth/service/AuctionActivityService.java

@@ -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);
     }
 }

+ 7 - 5
src/main/java/com/izouma/nineth/web/AuctionActivityController.java

@@ -1,4 +1,5 @@
 package com.izouma.nineth.web;
+
 import com.izouma.nineth.domain.AuctionActivity;
 import com.izouma.nineth.service.AuctionActivityService;
 import com.izouma.nineth.dto.PageQuery;
@@ -20,17 +21,18 @@ import java.util.List;
 @AllArgsConstructor
 public class AuctionActivityController extends BaseController {
     private AuctionActivityService auctionActivityService;
-    private AuctionActivityRepo auctionActivityRepo;
+    private AuctionActivityRepo    auctionActivityRepo;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
-    public AuctionActivity save(@RequestBody AuctionActivity record) {
+    public AuctionActivity save(@RequestBody AuctionActivity record, String code) {
         if (record.getId() != null) {
-            AuctionActivity orig = auctionActivityRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            AuctionActivity orig = auctionActivityRepo.findById(record.getId())
+                    .orElseThrow(new BusinessException("无记录"));
             ObjUtils.merge(orig, record);
-            return auctionActivityRepo.save(orig);
+            return auctionActivityService.save(orig, code);
         }
-        return auctionActivityRepo.save(record);
+        return auctionActivityService.save(record, code);
     }