Jelajahi Sumber

重复缴纳保证金check

hr~ 1 bulan lalu
induk
melakukan
469024dd09

+ 23 - 4
lot/src/main/java/cn/hobbystocks/auc/service/impl/DepositOrderServiceImpl.java

@@ -12,6 +12,7 @@ import cn.hobbystocks.auc.service.DepositOrderService;
 import cn.hobbystocks.auc.service.IAuctionService;
 import cn.hobbystocks.auc.service.ILotService;
 import cn.hutool.core.util.IdUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -21,7 +22,7 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.Resource;
 import java.util.Date;
 import java.util.List;
-import java.util.UUID;
+import java.util.Objects;
 
 @Service
 public class DepositOrderServiceImpl extends ServiceImpl<DepositOrderMapper, DepositOrder> implements DepositOrderService {
@@ -34,23 +35,28 @@ public class DepositOrderServiceImpl extends ServiceImpl<DepositOrderMapper, Dep
     OrderApi orderApi;
 
     final String DEPOSIT_ORDER_PRE = "DT";
+    private static final String DEPOSIT_TYPE_LOT = "拍品";
+    private static final String DEPOSIT_TYPE_AUCTION = "拍卖会";
+    private static final Integer DEPOSIT_STATUS_PAID = 1;
 
     @Override
     @Transactional
     public int createDepositOrder(DepositOrderDTO depositOrderDTO) {
-
         //查询拍品保证金配置
         Long lotId = depositOrderDTO.getLotId();
         Lot lot = lotService.selectLotById(lotId);
         Long deposit = lot.getDeposit();
         String name= lot.getName();
-        String depositType="拍品";
+        String depositType=DEPOSIT_TYPE_LOT;
         if (deposit ==null){
             //如果没有拍品保证金配置,创建拍卖会保证金配置
             Auction auction = auctionService.selectAuctionById(lot.getAuctionId());
             deposit=auction.getDeposit();
             name=auction.getName();
-            depositType="拍卖会";
+            depositType=DEPOSIT_TYPE_AUCTION;
+        }
+        if (hasPaidDeposit(depositOrderDTO.getUserId(), lot, depositType)) {
+            return 0;
         }
         depositOrderDTO.setAmount(deposit);
         depositOrderDTO.setAuctionId(lot.getAuctionId());
@@ -68,6 +74,19 @@ public class DepositOrderServiceImpl extends ServiceImpl<DepositOrderMapper, Dep
         depositOrder.setCreateTime(new Date());
         return baseMapper.insert(depositOrder);
     }
+
+    private boolean hasPaidDeposit(Integer userId, Lot lot, String depositType) {
+        LambdaQueryWrapper<DepositOrder> queryWrapper = new LambdaQueryWrapper<DepositOrder>()
+                .eq(DepositOrder::getUserId, userId)
+                .eq(DepositOrder::getStatus, DEPOSIT_STATUS_PAID)
+                .eq(DepositOrder::getDepositType, depositType);
+        if (Objects.equals(DEPOSIT_TYPE_LOT, depositType)) {
+            queryWrapper.eq(DepositOrder::getLotId, lot.getId());
+        } else {
+            queryWrapper.eq(DepositOrder::getAuctionId, lot.getAuctionId());
+        }
+        return baseMapper.selectCount(queryWrapper) > 0;
+    }
     @Override
     public void refundDepositOrder(String orderNo) {
 //        OrderVO orderVO=new OrderVO();

+ 8 - 4
lot/src/main/java/cn/hobbystocks/auc/service/impl/LotServiceImpl.java

@@ -582,9 +582,11 @@ public class LotServiceImpl extends ServiceImpl<LotMapper,Lot> implements ILotSe
             return false;
         }
         if (Objects.nonNull(lot.getDeposit())) {
-            return depositOrders.stream().anyMatch(order -> Objects.equals(order.getLotId(), lot.getId()));
+            return depositOrders.stream().anyMatch(order -> Objects.equals("拍品", order.getDepositType())
+                    && Objects.equals(order.getLotId(), lot.getId()));
         }
-        return depositOrders.stream().anyMatch(order -> Objects.equals(order.getAuctionId(), lot.getAuctionId()));
+        return depositOrders.stream().anyMatch(order -> Objects.equals("拍卖会", order.getDepositType())
+                && Objects.equals(order.getAuctionId(), lot.getAuctionId()));
     }
 
     private boolean matchSelfScene(String type, Lot lot, boolean hasDeposit, boolean hasUserBid, boolean hasWinBid) {
@@ -881,9 +883,11 @@ public class LotServiceImpl extends ServiceImpl<LotMapper,Lot> implements ILotSe
                 .eq(DepositOrder::getUserId, userInfo.getId())
                 .in(DepositOrder::getStatus,  1);
         if (Objects.equals("LOT", depositType)) {
-            depositQuery.eq(DepositOrder::getLotId, lot.getId());
+            depositQuery.eq(DepositOrder::getLotId, lot.getId())
+                    .eq(DepositOrder::getDepositType, "拍品");
         } else {
-            depositQuery.eq(DepositOrder::getAuctionId, lot.getAuctionId());
+            depositQuery.eq(DepositOrder::getAuctionId, lot.getAuctionId())
+                    .eq(DepositOrder::getDepositType, "拍卖会");
         }
         Long depositCount = depositOrderMapper.selectCount(depositQuery);
         response.setHasDeposit(depositCount > 0);