wangqifan 3 yıl önce
ebeveyn
işleme
49a402b56b

+ 2 - 0
src/main/java/com/izouma/nineth/domain/TradeAuction.java

@@ -82,6 +82,8 @@ public class TradeAuction extends BaseEntity {
 
     private double increasePer;
 
+    private double royalties;
+
     private BigDecimal nextPrice;
 
     private Long stock;

+ 39 - 1
src/main/java/com/izouma/nineth/service/TradeAuctionOrderService.java

@@ -72,6 +72,41 @@ public class TradeAuctionOrderService {
         return tradeAuctionOrder;
     }
 
+    public TradeAuctionOrder createFixedPrice(Long auctionId, Long userId, BigDecimal price) {
+        TradeAuction tradeAuction = tradeAuctionRepo.findById(auctionId).orElseThrow(new BusinessException("未找到易拍活动"));
+        User user = userRepo.findById(userId).orElseThrow(new BusinessException("暂无用户"));
+        if (tradeAuction.getCurrentOwnerId().equals(userId)) {
+            throw new BusinessException("不可竞价持有的易拍产品");
+        }
+        if (LocalDateTime.now().compareTo(tradeAuction.getCurrentEndTime()) < 0) {
+            throw new BusinessException("未到竞价时间");
+        }
+        if (!tradeAuction.getStatus().equals(TradeAuctionStatus.ONGOING)) {
+            throw new BusinessException("易拍产品未处在竞价状态");
+        }
+        BigDecimal serviceCharge = (BigDecimal.valueOf(0.03).multiply(tradeAuction.getCurrentPrice()))
+                .add(tradeAuction.getCurrentPrice().subtract(tradeAuction.getPrice()));
+        TradeAuctionOrder tradeAuctionOrder = TradeAuctionOrder.builder()
+                .tradeAuctionId(tradeAuction.getId())
+                .earnedPrice(price.subtract(tradeAuction.getPrice()))
+                .serviceCharge(serviceCharge)
+                .name(tradeAuction.getName())
+                .nickname(user.getNickname())
+                .userId(user.getId())
+                .originPrice(tradeAuction.getPrice())
+                .currentPrice(tradeAuction.getCurrentPrice())
+                .price(price)
+                .paybackStatus(PaybackStatus.NOPASSED)
+                .pic(tradeAuction.getPic())
+                .source(AuctionSource.OFFICIAL)
+                .status(AuctionOrderStatus.NOT_PAID)
+                .build();
+        tradeAuctionOrder = tradeAuctionOrderRepo.save(tradeAuctionOrder);
+        //下订单减库存
+        tradeAuctionService.decreaseStock(tradeAuction.getStock(), 1);
+        return tradeAuctionOrder;
+    }
+
     @Transactional
     public void notify(Long orderId, String transactionId, PayMethod payMethod) {
         TradeAuctionOrder tradeAuctionOrder = tradeAuctionOrderRepo.findById(orderId)
@@ -89,7 +124,8 @@ public class TradeAuctionOrderService {
         TradeAuction tradeAuction = tradeAuctionRepo.findById(tradeAuctionOrder.getTradeAuctionId())
                 .orElseThrow(new BusinessException("未找到该易拍活动"));
 
-        BigDecimal result = tradeAuctionOrder.getCurrentPrice().multiply(BigDecimal.valueOf(tradeAuction.getIncreasePer()))
+        BigDecimal result = tradeAuctionOrder.getCurrentPrice()
+                .multiply(BigDecimal.valueOf(tradeAuction.getIncreasePer()))
                 .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
         tradeAuction.setNextPrice(result);
         tradeAuction.setEarning(result.subtract(tradeAuction.getPrice()));
@@ -98,6 +134,8 @@ public class TradeAuctionOrderService {
         tradeAuction.setCurrentOwner(tradeAuctionOrder.getNickname());
         tradeAuction.setCurrentOwnerId(tradeAuctionOrder.getUserId());
         tradeAuction.setCurrentEndTime(tradeAuction.getCurrentEndTime().plusDays(1));
+        tradeAuction.setFixedPrice(tradeAuction.getPrice().multiply(BigDecimal.valueOf(150))
+                .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP));
         tradeAuctionRepo.save(tradeAuction);
 
         tradeAuctionService.increaseSale(tradeAuction.getId(), 1);

+ 2 - 0
src/main/java/com/izouma/nineth/service/TradeAuctionService.java

@@ -58,6 +58,8 @@ public class TradeAuctionService {
                 .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP);
         record.setNextPrice(result);
         record.setEarning(result.subtract(record.getPrice()));
+        record.setFixedPrice(record.getPrice().multiply(BigDecimal.valueOf(150))
+                .divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP));
         return tradeAuctionRepo.save(record);
     }