From e43e290ac0fdbfdf4187ccae8e9af02bec517911 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期二, 28 五月 2024 20:59:55 +0800
Subject: [PATCH] 提交【管理后台】拍卖商品管理 立即结束接口

---
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionBidRecordServiceImpl.java |    9 ++++
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionBidRecord.java                  |   12 ++---
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java     |   48 +++++++++++++++++++++++-
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/MemberBond.java                        |    2 
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionBidRecordService.java         |    2 +
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java           |    4 +-
 6 files changed, 65 insertions(+), 12 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java
index 402d94d..c9d48f4 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/OrderFallbackFactory.java
@@ -21,13 +21,13 @@
 
             @Override
             public R<Boolean> saveOrderOne(OrderDTO orderDTO, String source) {
-                return R.fail("通过视频集合查询用户失败:" + cause.getMessage());
+                return R.fail("保存订单失败:" + cause.getMessage());
             }
 
             @Override
             public R<Boolean> getOrderAuctionBond(OrderAuctionBondDTO orderAuctionBondDTO,
                     String source) {
-                return R.fail("通过视频集合查询用户失败:" + cause.getMessage());
+                return R.fail("查询拍卖订单佣金失败:" + cause.getMessage());
             }
             @Override
             public R<Integer> getSeckillMembers(Long id, String source) {
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionBidRecord.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionBidRecord.java
index d175b74..a4c625a 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionBidRecord.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionBidRecord.java
@@ -6,6 +6,7 @@
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
 import com.ruoyi.common.core.enums.BidStatusEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -37,17 +38,14 @@
     @TableId(value = "id", type = IdType.ASSIGN_ID)
     private Long id;
 
-    @ApiModelProperty(value = "拍卖场id")
-    private Long auctionSalesroomId;
-
-    @ApiModelProperty(value = "商品id")
-    private Long goodsSkuId;
+    @ApiModelProperty(value = "目标商品id(普通拍品id 或 拍卖会拍品id)")
+    private Long targetId;
 
     @ApiModelProperty(value = "会员id")
     private Long memberId;
 
-    @ApiModelProperty(value = "商品名称")
-    private String goodsSkuName;
+    @ApiModelProperty("拍卖类型 (1=普通拍品 2=拍卖会拍品)")
+    private AuctionOrderTypeEnum auctionType;
 
     @ApiModelProperty(value = "最终出价时间")
     private LocalDateTime lastBidTime;
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/MemberBond.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/MemberBond.java
index 5f18c36..6ec36a7 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/MemberBond.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/MemberBond.java
@@ -34,7 +34,7 @@
     private static final long serialVersionUID = 1L;
 
     @ApiModelProperty(value = "主键id")
-    @TableId(value = "id", type = IdType.AUTO)
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
     private Long id;
 
     @ApiModelProperty(value = "会员id")
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionBidRecordService.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionBidRecordService.java
index 34d961b..ab8cdaf 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionBidRecordService.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionBidRecordService.java
@@ -19,4 +19,6 @@
      *
      */
     public List<AuctionBidRecord> getAuctionBidRecordList(AuctionSalesroomGoodsDTO auctionSalesroomGoodsDTO);
+
+    List<AuctionBidRecord> getBidRecordByGoodsId(Long id);
 }
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionBidRecordServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionBidRecordServiceImpl.java
index de23277..a07394a 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionBidRecordServiceImpl.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionBidRecordServiceImpl.java
@@ -9,6 +9,7 @@
 import com.ruoyi.auction.mapper.AuctionBidRecordMapper;
 import com.ruoyi.auction.service.IAuctionBidRecordService;
 import com.ruoyi.auction.service.IAuctionSalesroomGoodsService;
+import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
 import com.ruoyi.common.core.enums.BidStatusEnum;
 import java.util.ArrayList;
 import java.util.List;
@@ -65,4 +66,12 @@
 
 
     }
+
+    @Override
+    public List<AuctionBidRecord> getBidRecordByGoodsId(Long id) {
+        return this.lambdaQuery().eq(AuctionBidRecord::getTargetId, id)
+                .eq(AuctionBidRecord::getAuctionType,
+                        AuctionOrderTypeEnum.REGULAR_ITEMS)
+                .orderByDesc(AuctionBidRecord::getLastBidAmount).list();
+    }
 }
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
index 8c1c8df..e70ee71 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java
@@ -12,16 +12,23 @@
 import com.ruoyi.auction.service.IAuctionBidRecordService;
 import com.ruoyi.auction.service.IAuctionGoodsService;
 import com.ruoyi.common.core.constant.SecurityConstants;
+import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
 import com.ruoyi.common.core.enums.AuctionStartStatusEnum;
+import com.ruoyi.common.core.enums.BidStatusEnum;
+import com.ruoyi.common.core.enums.OrderFromEnum;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.utils.page.BeanUtils;
 import com.ruoyi.common.core.utils.page.PageDTO;
 import com.ruoyi.system.api.domain.GoodsSku;
 import com.ruoyi.system.api.domain.Member;
+import com.ruoyi.system.api.domain.MemberAddress;
+import com.ruoyi.system.api.domain.dto.OrderDTO;
 import com.ruoyi.system.api.feignClient.GoodsSkuClient;
 import com.ruoyi.system.api.feignClient.MemberClient;
+import com.ruoyi.system.api.feignClient.OrderClient;
 import io.seata.spring.annotation.GlobalTransactional;
+import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -47,6 +54,7 @@
     private final GoodsSkuClient goodsSkuClient;
     private final IAuctionBidRecordService auctionBidRecordService;
     private final MemberClient memberClient;
+    private final OrderClient orderClient;
     /**
      * 获取拍卖商品列表的分页数据
      *
@@ -154,7 +162,8 @@
         AuctionGoodsVO auctionGoodsVO = BeanUtils.copyBean(auctionGoods, AuctionGoodsVO.class);
         if (!auctionGoods.getStartStatus().equals(AuctionStartStatusEnum.IN_PREVIEW)) {
             List<AuctionBidRecord> list = auctionBidRecordService.lambdaQuery()
-                    .eq(AuctionBidRecord::getGoodsSkuId, auctionGoods.getGoodsSkuId())
+                    .eq(AuctionBidRecord::getTargetId, auctionGoodsVO.getId())
+                    .eq(AuctionBidRecord::getAuctionType, AuctionOrderTypeEnum.REGULAR_ITEMS)
                     .orderByDesc(AuctionBidRecord::getLastBidAmount).list();
             if (StringUtils.isNotEmpty(list)) {
                 Set<Long> collect = list.stream().map(AuctionBidRecord::getMemberId)
@@ -181,12 +190,47 @@
      * @param id 拍卖商品id
      */
     @Override
+    @GlobalTransactional(rollbackFor = Exception.class)
+    @Transactional
     public void stopAuctionGoods(Long id) {
         AuctionGoods auctionGoods = this.lambdaQuery().eq(AuctionGoods::getId, id)
                 .eq(AuctionGoods::getStartStatus, AuctionStartStatusEnum.IN_AUCTION).one();
         if (StringUtils.isNull(auctionGoods)) {
             throw new ServiceException("拍卖商品不存在");
         }
-        
+        if (auctionGoods.getStartStatus().equals(AuctionStartStatusEnum.IN_AUCTION)) {
+            // 查询出价记录
+            List<AuctionBidRecord> auctionBidRecords = auctionBidRecordService.getBidRecordByGoodsId(
+                    id);
+            if (StringUtils.isNotEmpty(auctionBidRecords)) {
+                // 中标
+                AuctionBidRecord auctionBidRecord = auctionBidRecords.get(0);
+                auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL);
+                auctionBidRecordService.updateById(auctionBidRecord);
+
+                // 创建待支付订单
+                OrderDTO orderDTO = new OrderDTO();
+                orderDTO.setAuctionType(AuctionOrderTypeEnum.REGULAR_ITEMS);
+                orderDTO.setGoodsQuantity(auctionGoods.getAuctionStock());
+                orderDTO.setGoodsSkuId(auctionGoods.getGoodsSkuId());
+                orderDTO.setBound(auctionGoods.getBond());
+                orderDTO.setMemberId(auctionBidRecord.getMemberId());
+                orderDTO.setTotalAmount(auctionBidRecord.getLastBidAmount());
+                orderDTO.setOrderFrom(OrderFromEnum.AUCTION_ORDERS);
+                orderDTO.setOrderTime(LocalDateTime.now());
+                MemberAddress data = memberClient.getMemberAddressOne(
+                        auctionBidRecord.getMemberId(), SecurityConstants.INNER).getData();
+                if (StringUtils.isNotNull(data)) {
+                    orderDTO.setReceiverName(data.getRecipientName());
+                    orderDTO.setReceiverCity(data.getReceiverCity());
+                    orderDTO.setReceiverDetailAddress(data.getDetailedAddress());
+                    orderDTO.setReceiverphone(data.getRecipientPhone());
+                }
+                orderClient.saveOrderOne(orderDTO, SecurityConstants.INNER);
+            }
+            // 结束拍卖
+            this.lambdaUpdate().set(AuctionGoods::getStartStatus, AuctionStartStatusEnum.ENDED)
+                    .eq(AuctionGoods::getId, id).update();
+        }
     }
 }

--
Gitblit v1.7.1