Browse Source

创建拍卖

wangqifan 4 years ago
parent
commit
2b87e88cc4

+ 31 - 0
src/main/java/com/izouma/nineth/dto/auction/AuctionInputDTO.java

@@ -0,0 +1,31 @@
+package com.izouma.nineth.dto.auction;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AuctionInputDTO {
+    @ApiModelProperty("藏品id")
+    private Long          assetId;
+    @ApiModelProperty("起拍价")
+    private BigDecimal    startingPrice;
+    @ApiModelProperty("保证金")
+    private BigDecimal    deposit;
+    @ApiModelProperty("一口价")
+    private BigDecimal    fixedPrice;
+    @ApiModelProperty("开始时间")
+    private LocalDateTime startTime;
+    @ApiModelProperty("加价幅度")
+    private BigDecimal    increment;
+    @ApiModelProperty("截止时间")
+    private LocalDateTime endTime;
+
+    private String tradeCode;
+}

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

@@ -6,6 +6,7 @@ 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.dto.auction.AuctionInputDTO;
 import com.izouma.nineth.enums.AssetStatus;
 import com.izouma.nineth.enums.AuctionSource;
 import com.izouma.nineth.enums.AuctionStatus;
@@ -23,7 +24,10 @@ import org.springframework.data.redis.core.BoundValueOperations;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.RequestBody;
 
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.Optional;
 import java.util.concurrent.TimeUnit;
 
@@ -44,15 +48,43 @@ public class AuctionActivityService {
                 .findAll(JpaUtils.toSpecification(pageQuery, AuctionActivity.class), JpaUtils.toPageRequest(pageQuery));
     }
 
+    public AuctionActivity createFromAsset(AuctionInputDTO dto) {
+        Asset asset = assetRepo.findById(dto.getAssetId()).orElseThrow(new BusinessException("暂无"));
+        AuctionActivity auctionActivity = new AuctionActivity();
+        auctionActivity.setAuctionType(AuctionType.NFT);
+        auctionActivity.setAssetId(dto.getAssetId());
+        auctionActivity.setStatus(AuctionStatus.NOTSTARTED);
+        auctionActivity.setBids(0);
+        auctionActivity.setCategory(asset.getCategory());
+        auctionActivity.setDeposit(dto.getDeposit());
+        auctionActivity.setDetail(asset.getDetail());
+        auctionActivity.setFixedPrice(dto.getFixedPrice());
+        auctionActivity.setIncrement(dto.getIncrement());
+        auctionActivity.setMinter(asset.getMinter());
+        auctionActivity.setPic(asset.getPic());
+        auctionActivity.setModel3d(asset.getModel3d());
+        auctionActivity.setName(asset.getName());
+        auctionActivity.setSeller(asset.getOwner());
+        auctionActivity.setSellerId(asset.getOwnerId());
+        auctionActivity.setStartTime(LocalDateTime.now());
+        auctionActivity.setSource(AuctionSource.TRANSFER);
+        auctionActivity.setServiceCharge(5);
+        auctionActivity.setRoyalties(10);
+        auctionActivity.setEndTime(LocalDateTime.now().plusMinutes(240));
+        auctionActivity.setStartingPrice(dto.getStartingPrice());
+        return save(auctionActivity, dto.getTradeCode());
+    }
+
+
     public AuctionActivity save(AuctionActivity record, String tradeCode) {
-        if (record.getSource().equals(AuctionSource.TRANSFER)) {
+        if (record.getSource().equals(AuctionSource.TRANSFER) & !record.getSellerId().equals(9859L)) {
             User user = userRepo.findById(record.getSellerId()).orElseThrow(new BusinessException("无用户信息"));
             if (!passwordEncoder.matches(tradeCode, user.getTradeCode())) {
                 throw new BusinessException("交易密码错误");
             }
         }
 
-        if (record.getAuctionType().equals(AuctionType.NFT)) {
+        if (record.getAuctionType().equals(AuctionType.NFT) & !record.getSellerId().equals(9859L)) {
             Asset asset = assetRepo.findById(record.getAssetId()).orElseThrow(new BusinessException("未找到该藏品"));
             if (!asset.getOwnerId().equals(SecurityUtils.getAuthenticatedUser().getId())) {
                 throw new BusinessException("非本人藏品,无法操作.");

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

@@ -1,6 +1,7 @@
 package com.izouma.nineth.web;
 
 import com.izouma.nineth.domain.AuctionActivity;
+import com.izouma.nineth.dto.auction.AuctionInputDTO;
 import com.izouma.nineth.service.AuctionActivityService;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.exception.BusinessException;
@@ -35,6 +36,10 @@ public class AuctionActivityController extends BaseController {
         return auctionActivityService.save(record, code);
     }
 
+    @PostMapping("/create")
+    public AuctionActivity createFromAsset(@RequestBody AuctionInputDTO dto) {
+        return auctionActivityService.createFromAsset(dto);
+    }
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/all")

+ 8 - 1
src/test/java/com/izouma/nineth/service/AirDropServiceTest.java

@@ -13,7 +13,9 @@ import java.util.List;
 
 public class AirDropServiceTest extends ApplicationTests {
     @Autowired
-    AirDropService airDropService;
+    AirDropService         airDropService;
+    @Autowired
+    AuctionActivityService auctionActivityService;
 
     @Test
     public void drop() {
@@ -34,4 +36,9 @@ public class AirDropServiceTest extends ApplicationTests {
 
         });
     }
+
+    @Test
+    public void test2() {
+        auctionActivityService.createFromAsset(2630992L);
+    }
 }