From de0026f420814a34a0e94c2de702b563b7e9234e Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期三, 31 七月 2024 16:10:12 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/dto/MgtAuctionSalesroomDTO.java            |    2 
 ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml                                                    |    8 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/GoodsSkuClient.java                                |   14 +
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java                        |   36 +++
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java               |   28 ++
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/AuctionClient.java                                 |   19 +
 ruoyi-modules/ruoyi-auction/src/main/resources/mapper/auction/AuctionSalesroomGoodsMapper.xml                                |    2 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java                                            |    4 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceServiceImpl.java                           |    2 
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java                    |   34 +++
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/dto/MgtMemberQuery.java                      |    3 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/inner/GoodsSkuController.java                             |   26 ++
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java                      |    9 
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/scheduler/PromotionScheduler.java                            |    4 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java                                        |    6 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/tencent/common/Configure.java                                   |    8 
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionBidRecordServiceImpl.java                    |    4 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MgtBusinessDataService.java                             |    4 
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/inner/AuctionSalesroomController.java                 |   28 ++
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderReturnRequestServiceImpl.java                      |   22 +
 ruoyi-modules/ruoyi-auction/src/test/java/com/ruoyi/auction/RedissonTest.java                                                |   72 ++++++
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/mapper/AuctionSalesroomGoodsMapper.java                          |    2 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/vo/MgtOrderVO.java                             |    2 
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionVideoServiceImpl.java                        |    6 
 ruoyi-modules/ruoyi-promotion/src/main/resources/mapper/promotion/CouponMemberMapper.xml                                     |    2 
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/AuctionFallbackFactory.java                            |   22 ++
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/ForepartAuctionSalesroomGoodsController.java |   12 
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionGoodsService.java                                |    9 
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomGoodsService.java                       |    5 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java                                |   83 +++++++
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/inner/AuctionGoodsController.java                     |   26 ++
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java                            |   41 +++
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java                                   |   68 ++++-
 ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/AuctionSalesroomGoods.java                              |    2 
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomService.java                            |   11 +
 ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsGroupPurchaseMapper.xml                                       |   20 +
 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java                                |    1 
 37 files changed, 560 insertions(+), 87 deletions(-)

diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionSalesroomGoods.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/AuctionSalesroomGoods.java
similarity index 98%
rename from ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionSalesroomGoods.java
rename to ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/AuctionSalesroomGoods.java
index 4ff2cd7..a9e371d 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/domain/AuctionSalesroomGoods.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/AuctionSalesroomGoods.java
@@ -1,4 +1,4 @@
-package com.ruoyi.auction.domain;
+package com.ruoyi.system.api.domain;
 
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.FieldStrategy;
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java
index d3e66e7..28f157d 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysUser.java
@@ -140,7 +140,9 @@
     @TableField(exist = false)
     private String roleName;
 
-
+    @ApiModelProperty(value = "是否为拍卖师 1否 2是")
+    @TableField(exist = false)
+    private Integer isAuctioneer;
     @Override
     public String getRemark() {
         return remark;
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/AuctionFallbackFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/AuctionFallbackFactory.java
index 38b7f0a..ceb5abb 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/AuctionFallbackFactory.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/factory/AuctionFallbackFactory.java
@@ -4,6 +4,7 @@
 import com.ruoyi.system.api.domain.AppMiniLoginVO;
 import com.ruoyi.system.api.domain.AuctionGoods;
 import com.ruoyi.system.api.domain.AuctionSalesroom;
+import com.ruoyi.system.api.domain.AuctionSalesroomGoods;
 import com.ruoyi.system.api.domain.OrderAuctionBond;
 import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO;
 import com.ruoyi.system.api.domain.dto.BondDTO;
@@ -62,6 +63,27 @@
                     Collection<Long> auctionSalesroomGoodsIdSet, String source) {
                 return R.fail("获取拍卖场列表失败" + cause.getMessage());
             }
+
+            @Override
+            public R<List<AuctionSalesroom>> getAuctionSalesroomBySkuId(Long id, String source) {
+                return R.fail("获取拍卖场列表失败" + cause.getMessage());
+            }
+
+            @Override
+            public R<List<AuctionGoods>> getAuctionGoodsBySkuId(Long id, String source) {
+                return R.fail("获取商品竞价列表失败" + cause.getMessage());
+            }
+
+            @Override
+            public R<AuctionGoods> getAuctionGoodsId(Long goodsSkuId, String source) {
+                return R.fail("获取商品竞价失败" + cause.getMessage());
+            }
+
+            @Override
+            public R<AuctionSalesroomGoods> getAuctionSalesroomGoodsById(Long goodsSkuId,
+                    String source) {
+                return R.fail("获取拍卖会商品失败" + cause.getMessage());
+            }
         };
     }
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/AuctionClient.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/AuctionClient.java
index c605b46..8cbd02a 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/AuctionClient.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/AuctionClient.java
@@ -6,6 +6,7 @@
 import com.ruoyi.system.api.domain.AppMiniLoginVO;
 import com.ruoyi.system.api.domain.AuctionGoods;
 import com.ruoyi.system.api.domain.AuctionSalesroom;
+import com.ruoyi.system.api.domain.AuctionSalesroomGoods;
 import com.ruoyi.system.api.domain.OrderAuctionBond;
 import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO;
 import com.ruoyi.system.api.domain.dto.BondDTO;
@@ -14,6 +15,7 @@
 import java.util.Collection;
 import java.util.List;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PutMapping;
@@ -51,4 +53,21 @@
     R<List<AuctionSalesroom>> getAuctionSalesroomByIds(
             @RequestBody Collection<Long> auctionSalesroomGoodsIdSet,
             @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
+    @GetMapping("/auction-salesroom/getAuctionSalesroomBySkuId/{id}")
+    R<List<AuctionSalesroom>> getAuctionSalesroomBySkuId(@PathVariable("id") Long id,
+            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
+    @GetMapping("/auction-goods/getAuctionGoodsBySkuId/{id}")
+    R<List<AuctionGoods>> getAuctionGoodsBySkuId(@PathVariable("id") Long id,
+            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
+    @GetMapping("/auction-goods/getAuctionGoodsId/{goodsSkuId}")
+    R<AuctionGoods> getAuctionGoodsId(@PathVariable("goodsSkuId") Long goodsSkuId,
+            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
+    @GetMapping("/auction-salesroom/getAuctionSalesroomGoodsById/{goodsSkuId}")
+    R<AuctionSalesroomGoods> getAuctionSalesroomGoodsById(
+            @PathVariable("goodsSkuId") Long goodsSkuId,
+            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 }
diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/GoodsSkuClient.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/GoodsSkuClient.java
index f42c226..6d8d5ae 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/GoodsSkuClient.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/feignClient/GoodsSkuClient.java
@@ -3,7 +3,15 @@
 import com.ruoyi.common.core.constant.SecurityConstants;
 import com.ruoyi.common.core.constant.ServiceNameConstants;
 import com.ruoyi.common.core.domain.R;
-import com.ruoyi.system.api.domain.*;
+import com.ruoyi.system.api.domain.GoodsBrand;
+import com.ruoyi.system.api.domain.GoodsCategory;
+import com.ruoyi.system.api.domain.GoodsFlavorType;
+import com.ruoyi.system.api.domain.GoodsGroupPurchase;
+import com.ruoyi.system.api.domain.GoodsGroupPurchaseInfo;
+import com.ruoyi.system.api.domain.GoodsSeckill;
+import com.ruoyi.system.api.domain.GoodsSeries;
+import com.ruoyi.system.api.domain.GoodsSku;
+import com.ruoyi.system.api.domain.Order;
 import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
 import com.ruoyi.system.api.domain.vo.GoodsInfoTitleValueVO;
 import com.ruoyi.system.api.factory.GoodsSkuFactory;
@@ -148,4 +156,8 @@
     @PostMapping("/goods-sku/list")
     R<List<GoodsSku>> getGoodsListByIds(@RequestBody Collection<Long> goodsIdList,
             @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
+
+    @PostMapping("/goods-sku/returnStockByOrder")
+    R<?> returnStockByOrder(@RequestBody Order order,
+            @RequestHeader(SecurityConstants.FROM_SOURCE) String source);
 }
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/ForepartAuctionSalesroomGoodsController.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/ForepartAuctionSalesroomGoodsController.java
index f32ebae..eac8163 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/ForepartAuctionSalesroomGoodsController.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/forepart/ForepartAuctionSalesroomGoodsController.java
@@ -1,11 +1,11 @@
 package com.ruoyi.auction.controller.forepart;
 
 
-import com.ruoyi.system.api.domain.dto.AuctionSalesroomDTO;
-import com.ruoyi.system.api.domain.dto.AuctionSalesroomGoodsInfoDTO;
-import com.ruoyi.auction.domain.AuctionSalesroomGoods;
 import com.ruoyi.auction.service.IAuctionSalesroomGoodsService;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.system.api.domain.AuctionSalesroomGoods;
+import com.ruoyi.system.api.domain.dto.AuctionSalesroomDTO;
+import com.ruoyi.system.api.domain.dto.AuctionSalesroomGoodsInfoDTO;
 import com.ruoyi.system.api.domain.vo.AuctionSalesroomGoodsInfoVO;
 import com.ruoyi.system.api.domain.vo.AuctionSalesroomVO;
 import com.ruoyi.system.api.domain.vo.ForepartAuctionSalesroomGoodsVO;
@@ -13,8 +13,10 @@
 import io.swagger.annotations.ApiOperation;
 import java.util.List;
 import javax.annotation.Resource;
-
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * <p>
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/inner/AuctionGoodsController.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/inner/AuctionGoodsController.java
index 10f75a8..6e9bf86 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/inner/AuctionGoodsController.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/inner/AuctionGoodsController.java
@@ -7,8 +7,10 @@
 import com.ruoyi.common.security.annotation.InnerAuth;
 import com.ruoyi.system.api.domain.AuctionGoods;
 import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomBondDTO;
+import java.util.List;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PutMapping;
@@ -62,4 +64,28 @@
         return R.ok();
     }
 
+    /**
+     * 根据商品id获取正在进行的拍卖商品
+     *
+     * @param id 商品id
+     * @return
+     */
+    @InnerAuth
+    @GetMapping("/getAuctionGoodsBySkuId/{id}")
+    R<List<AuctionGoods>> getAuctionGoodsBySkuId(@PathVariable("id") Long id) {
+        return R.ok(auctionGoodsService.getAuctionGoodsBySkuId(id));
+    }
+
+    /**
+     * 根据id获取拍卖商品
+     *
+     * @param goodsSkuId
+     * @return
+     */
+    @InnerAuth
+    @GetMapping("/getAuctionGoodsId/{goodsSkuId}")
+    R<AuctionGoods> getAuctionGoodsId(@PathVariable("goodsSkuId") Long goodsSkuId) {
+        return R.ok(auctionGoodsService.getById(goodsSkuId));
+    }
+
 }
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/inner/AuctionSalesroomController.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/inner/AuctionSalesroomController.java
index bbe3d49..c94fda0 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/inner/AuctionSalesroomController.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/inner/AuctionSalesroomController.java
@@ -5,10 +5,13 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.security.annotation.InnerAuth;
 import com.ruoyi.system.api.domain.AuctionSalesroom;
+import com.ruoyi.system.api.domain.AuctionSalesroomGoods;
 import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomBondDTO;
 import java.util.Collection;
 import java.util.List;
 import javax.annotation.Resource;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -47,4 +50,29 @@
 
         return R.ok(iAuctionSalesroomService.getAuctionSalesroomByIds(auctionSalesroomGoodsIdSet));
     }
+
+    /**
+     * 根据商品id获取正在进行的拍卖会
+     *
+     * @param id 商品id
+     * @return
+     */
+    @InnerAuth
+    @GetMapping("/getAuctionSalesroomBySkuId/{id}")
+    R<List<AuctionSalesroom>> getAuctionSalesroomBySkuId(@PathVariable("id") Long id) {
+        return R.ok(iAuctionSalesroomService.getAuctionSalesroomBySkuId(id));
+    }
+
+    /**
+     * 获取拍卖商品
+     *
+     * @param goodsSkuId
+     * @return
+     */
+    @InnerAuth
+    @GetMapping("/getAuctionSalesroomGoodsById/{goodsSkuId}")
+    R<AuctionSalesroomGoods> getAuctionSalesroomGoodsById(
+            @PathVariable("goodsSkuId") Long goodsSkuId) {
+        return R.ok(iAuctionSalesroomService.getAuctionSalesroomGoodsById(goodsSkuId));
+    }
 }
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/dto/MgtAuctionSalesroomDTO.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/dto/MgtAuctionSalesroomDTO.java
index b748a45..f78e842 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/dto/MgtAuctionSalesroomDTO.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/controller/management/dto/MgtAuctionSalesroomDTO.java
@@ -54,7 +54,7 @@
     private String coverPic;
 
     @ApiModelProperty(value = "用户端拍卖场封面图")
-    // @NotBlank(message = "用户端拍卖场封面图不能为空")
+    @NotBlank(message = "用户端拍卖场封面图不能为空")
     private String clientCoverPic;
 
     @ApiModelProperty(value = "分享标题")
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/mapper/AuctionSalesroomGoodsMapper.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/mapper/AuctionSalesroomGoodsMapper.java
index 6ff6d03..d0e5783 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/mapper/AuctionSalesroomGoodsMapper.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/mapper/AuctionSalesroomGoodsMapper.java
@@ -1,7 +1,7 @@
 package com.ruoyi.auction.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.ruoyi.auction.domain.AuctionSalesroomGoods;
+import com.ruoyi.system.api.domain.AuctionSalesroomGoods;
 import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomDTO;
 import java.util.List;
 import org.apache.ibatis.annotations.Param;
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionGoodsService.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionGoodsService.java
index b3ae255..d2a1de6 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionGoodsService.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionGoodsService.java
@@ -11,6 +11,7 @@
 import com.ruoyi.system.api.domain.dto.ListStatusDTO;
 import com.ruoyi.system.api.domain.vo.AuctionGoodsListVO;
 import com.ruoyi.system.api.domain.vo.AuctionGoodsinfoVO;
+import java.util.List;
 import org.springframework.web.bind.annotation.RequestBody;
 
 /**
@@ -68,4 +69,12 @@
      * @param dto 商品上下架状态对象
      */
     void updStatus(ListStatusDTO dto);
+
+    /**
+     * 根据商品id获取正在进行的拍卖商品
+     *
+     * @param id 商品id
+     * @return
+     */
+    List<AuctionGoods> getAuctionGoodsBySkuId(Long id);
 }
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomGoodsService.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomGoodsService.java
index ded3c6d..ed81116 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomGoodsService.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomGoodsService.java
@@ -1,16 +1,15 @@
 package com.ruoyi.auction.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.system.api.domain.AuctionSalesroomGoods;
 import com.ruoyi.system.api.domain.dto.AuctionSalesroomDTO;
 import com.ruoyi.system.api.domain.dto.AuctionSalesroomGoodsInfoDTO;
-import com.ruoyi.auction.domain.AuctionSalesroomGoods;
 import com.ruoyi.system.api.domain.vo.AuctionBidRecordVO;
 import com.ruoyi.system.api.domain.vo.AuctionSalesroomGoodsInfoVO;
 import com.ruoyi.system.api.domain.vo.AuctionSalesroomVO;
 import com.ruoyi.system.api.domain.vo.ForepartAuctionSalesroomGoodsVO;
-import org.springframework.web.bind.annotation.RequestBody;
-
 import java.util.List;
+import org.springframework.web.bind.annotation.RequestBody;
 
 /**
  * <p>
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomService.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomService.java
index 84a83ab..cec7c03 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomService.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/IAuctionSalesroomService.java
@@ -17,6 +17,7 @@
 import com.ruoyi.common.core.utils.page.PageDTO;
 import com.ruoyi.system.api.domain.AppMiniLoginVO;
 import com.ruoyi.system.api.domain.AuctionSalesroom;
+import com.ruoyi.system.api.domain.AuctionSalesroomGoods;
 import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO;
 import com.ruoyi.system.api.domain.dto.AuctionSalesroomDTO;
 import com.ruoyi.system.api.domain.dto.BidDTO;
@@ -196,4 +197,14 @@
     void stopCurrentAuctionSalesroom(Long auctionSalesroomId) throws JsonProcessingException;
 
     List<AuctionSalesroom> getAuctionSalesroomByIds(Collection<Long> auctionSalesroomGoodsIdSet);
+
+    /**
+     * 根据商品id获取正在进行的拍卖会
+     *
+     * @param id 商品id
+     * @return
+     */
+    List<AuctionSalesroom> getAuctionSalesroomBySkuId(Long id);
+
+    AuctionSalesroomGoods getAuctionSalesroomGoodsById(Long goodsSkuId);
 }
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 012b9fe..c3981ea 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
@@ -3,14 +3,14 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.system.api.domain.dto.AuctionSalesroomDTO;
 import com.ruoyi.auction.domain.AuctionBidRecord;
-import com.ruoyi.auction.domain.AuctionSalesroomGoods;
 import com.ruoyi.auction.mapper.AuctionBidRecordMapper;
 import com.ruoyi.auction.mapper.AuctionSalesroomGoodsMapper;
 import com.ruoyi.auction.service.IAuctionBidRecordService;
 import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
 import com.ruoyi.common.core.enums.BidStatusEnum;
+import com.ruoyi.system.api.domain.AuctionSalesroomGoods;
+import com.ruoyi.system.api.domain.dto.AuctionSalesroomDTO;
 import java.util.ArrayList;
 import java.util.List;
 import javax.annotation.Resource;
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 fb98337..bdee7c4 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
@@ -34,6 +34,7 @@
 import com.ruoyi.common.core.utils.DateUtils;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.utils.page.BeanUtils;
+import com.ruoyi.common.core.utils.page.CollUtils;
 import com.ruoyi.common.core.utils.page.PageDTO;
 import com.ruoyi.system.api.constants.ConfigEnum;
 import com.ruoyi.system.api.constants.NotificationTypeConstant;
@@ -247,7 +248,19 @@
             auctionGoodsOrg.setSharePic(dto.getSharePic());
             this.updateById(auctionGoodsOrg);
         }
-        auctionAsyncMethodService.auctionGoodsScheduleTask(Lists.newArrayList(auctionGoods));
+        if (auctionGoods.getEndTime().isBefore(LocalDateTime.now())) {
+            // 退回剩余库存
+            GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
+            goodsStockUpdDTO.setAuctionStock(auctionGoods.getAuctionStock());
+            goodsStockUpdDTO.setGoodsSkuId(auctionGoods.getGoodsSkuId());
+            goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO),
+                    SecurityConstants.INNER);
+            auctionGoods.setStartStatus(AuctionStartStatusEnum.ENDED);
+            this.updateById(auctionGoods);
+        } else {
+            auctionAsyncMethodService.auctionGoodsScheduleTask(Lists.newArrayList(auctionGoods));
+        }
+
     }
 
     /**
@@ -409,7 +422,8 @@
                 for (OrderAuctionBond orderAuctionBond : auctionBondList) {
 
                     // 已中标需在订单完成后退保证金
-                    if (unRefundMemberIdList.contains(orderAuctionBond.getMemberId())) {
+                    if (unRefundMemberIdList.contains(orderAuctionBond.getMemberId())
+                            || Objects.isNull(orderAuctionBond.getBond())) {
                         continue;
                     }
                     RefundDTO refundDTO = new RefundDTO();
@@ -420,10 +434,10 @@
                 // 远程调用订单服务进行退款
                 Map<String, Object> data = orderClient.refund(refundDTOList,
                         SecurityConstants.INNER).getData();
+                if (CollUtils.isNotEmpty(data)) {
                 // 处理退款返回结果
                 List<String> successfulOrders = new ArrayList<>();
                 List<String> failedOrders = new ArrayList<>();
-
                 data.forEach((key, value) -> {
                     if ((boolean) value) {
                         successfulOrders.add(key);
@@ -439,9 +453,11 @@
                     }
                     return null;
                 }).filter(Objects::nonNull).collect(Collectors.toList());
+
                 // 远程调用订单服务修改订单状态
                 orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.REFUNDED,
                         SecurityConstants.INNER);
+                }
             }
         }
     }
@@ -901,6 +917,19 @@
         this.updateById(auctionGoods);
     }
 
+    /**
+     * 根据商品id获取正在进行的拍卖商品
+     *
+     * @param id 商品id
+     * @return
+     */
+    @Override
+    public List<AuctionGoods> getAuctionGoodsBySkuId(Long id) {
+        return this.list(new LambdaQueryWrapper<AuctionGoods>().eq(AuctionGoods::getGoodsSkuId,
+                        id).eq(AuctionGoods::getListingStatus, ListingStatusEnum.ON_SHELVES)
+                .eq(AuctionGoods::getStartStatus, AuctionStartStatusEnum.IN_AUCTION));
+    }
+
     public static void main(String[] args) throws JsonProcessingException {
         Map<String, Object> map = new ConcurrentHashMap<>();
         map.put("notification_type", NotificationTypeConstant.AUCTION_GOODS);
@@ -910,4 +939,5 @@
         String msg = objectMapper.writeValueAsString(map);
         System.out.println(msg);
     }
+
 }
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java
index 3d79f4d..c4e197e 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomGoodsServiceImpl.java
@@ -8,7 +8,6 @@
 import com.google.common.collect.Lists;
 import com.ruoyi.auction.domain.AuctionBidRecord;
 import com.ruoyi.auction.domain.AuctionBondJl;
-import com.ruoyi.auction.domain.AuctionSalesroomGoods;
 import com.ruoyi.auction.mapper.AuctionBidRecordMapper;
 import com.ruoyi.auction.mapper.AuctionBondJlMapper;
 import com.ruoyi.auction.mapper.AuctionSalesroomGoodsMapper;
@@ -26,13 +25,28 @@
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.DateUtils;
 import com.ruoyi.system.api.constants.NotificationTypeConstant;
-import com.ruoyi.system.api.domain.*;
+import com.ruoyi.system.api.domain.AuctionSalesroom;
+import com.ruoyi.system.api.domain.AuctionSalesroomGoods;
+import com.ruoyi.system.api.domain.CustomConfig;
+import com.ruoyi.system.api.domain.GoodsBrand;
+import com.ruoyi.system.api.domain.GoodsCategory;
+import com.ruoyi.system.api.domain.GoodsFlavorType;
+import com.ruoyi.system.api.domain.GoodsSeries;
+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.Order;
 import com.ruoyi.system.api.domain.dto.AuctionSalesroomDTO;
 import com.ruoyi.system.api.domain.dto.AuctionSalesroomGoodsInfoDTO;
 import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
 import com.ruoyi.system.api.domain.dto.OrderAuctionBondDTO;
 import com.ruoyi.system.api.domain.dto.OrderDTO;
-import com.ruoyi.system.api.domain.vo.*;
+import com.ruoyi.system.api.domain.vo.AuctionBidRecordVO;
+import com.ruoyi.system.api.domain.vo.AuctionSalesroomGoodsInfoVO;
+import com.ruoyi.system.api.domain.vo.AuctionSalesroomVO;
+import com.ruoyi.system.api.domain.vo.ForepartAuctionSalesroomGoodsVO;
+import com.ruoyi.system.api.domain.vo.GoodsInfoTitleValueVO;
+import com.ruoyi.system.api.domain.vo.getHomeGoodsSkuXxiVO;
 import com.ruoyi.system.api.feignClient.GoodsSkuClient;
 import com.ruoyi.system.api.feignClient.MemberClient;
 import com.ruoyi.system.api.feignClient.OrderClient;
@@ -40,7 +54,13 @@
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import javax.annotation.Resource;
 import org.springframework.stereotype.Service;
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
index 6bdc56b..de3fb67 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java
@@ -24,7 +24,10 @@
 import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomGoodsVO;
 import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomScreenVO;
 import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomVO;
-import com.ruoyi.auction.domain.*;
+import com.ruoyi.auction.domain.AuctionBidRecord;
+import com.ruoyi.auction.domain.AuctionBondJl;
+import com.ruoyi.auction.domain.AuctionBrowseRecord;
+import com.ruoyi.auction.domain.AuctionVideo;
 import com.ruoyi.auction.mapper.AuctionBidRecordMapper;
 import com.ruoyi.auction.mapper.AuctionBondJlMapper;
 import com.ruoyi.auction.mapper.AuctionSalesroomGoodsMapper;
@@ -60,6 +63,7 @@
 import com.ruoyi.system.api.domain.AppMiniLoginVO;
 import com.ruoyi.system.api.domain.AuctionGoods;
 import com.ruoyi.system.api.domain.AuctionSalesroom;
+import com.ruoyi.system.api.domain.AuctionSalesroomGoods;
 import com.ruoyi.system.api.domain.CustomConfig;
 import com.ruoyi.system.api.domain.GoodsSku;
 import com.ruoyi.system.api.domain.Member;
@@ -1732,4 +1736,32 @@
                         Collectors.toSet());
         return this.listByIds(auctionSalesroomIdSet);
     }
+
+    /**
+     * 根据商品id获取正在进行的拍卖会
+     *
+     * @param id 商品id
+     * @return
+     */
+    @Override
+    public List<AuctionSalesroom> getAuctionSalesroomBySkuId(Long id) {
+        List<AuctionSalesroomGoods> auctionSalesroomGoods = auctionSalesroomGoodsMapper.selectList(
+                new LambdaQueryWrapper<AuctionSalesroomGoods>().eq(
+                                AuctionSalesroomGoods::getGoodsSkuId, id)
+                        .groupBy(AuctionSalesroomGoods::getAuctionSalesroomId));
+        if (CollUtils.isNotEmpty(auctionSalesroomGoods)) {
+            Set<Long> auctionSalesroomIdSet = auctionSalesroomGoods.stream()
+                    .map(AuctionSalesroomGoods::getAuctionSalesroomId).collect(
+                            Collectors.toSet());
+            return this.lambdaQuery()
+                    .eq(AuctionSalesroom::getStatus, AuctionStartStatusEnum.IN_AUCTION).in(
+                            AuctionSalesroom::getId, auctionSalesroomGoods).list();
+        }
+        return CollUtils.emptyList();
+    }
+
+    @Override
+    public AuctionSalesroomGoods getAuctionSalesroomGoodsById(Long goodsSkuId) {
+        return auctionSalesroomGoodsMapper.selectById(goodsSkuId);
+    }
 }
diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionVideoServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionVideoServiceImpl.java
index c795328..6084646 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionVideoServiceImpl.java
+++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionVideoServiceImpl.java
@@ -3,16 +3,16 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.core.exception.ServiceException;
-import com.ruoyi.system.api.domain.dto.ForepartAuctionVideo;
-import com.ruoyi.auction.domain.AuctionSalesroomGoods;
 import com.ruoyi.auction.domain.AuctionVideo;
 import com.ruoyi.auction.mapper.AuctionSalesroomGoodsMapper;
 import com.ruoyi.auction.mapper.AuctionVideoMapper;
 import com.ruoyi.auction.service.IAuctionVideoService;
 import com.ruoyi.common.core.constant.SecurityConstants;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.system.api.domain.AuctionSalesroomGoods;
 import com.ruoyi.system.api.domain.PromotionVideo;
+import com.ruoyi.system.api.domain.dto.ForepartAuctionVideo;
 import com.ruoyi.system.api.feignClient.PromotionClient;
 import java.util.List;
 import javax.annotation.Resource;
diff --git a/ruoyi-modules/ruoyi-auction/src/main/resources/mapper/auction/AuctionSalesroomGoodsMapper.xml b/ruoyi-modules/ruoyi-auction/src/main/resources/mapper/auction/AuctionSalesroomGoodsMapper.xml
index 53f3942..7898cf0 100644
--- a/ruoyi-modules/ruoyi-auction/src/main/resources/mapper/auction/AuctionSalesroomGoodsMapper.xml
+++ b/ruoyi-modules/ruoyi-auction/src/main/resources/mapper/auction/AuctionSalesroomGoodsMapper.xml
@@ -20,7 +20,7 @@
     </foreach>
   </update>
   <select id="getAuctionSalesroomGoods"
-    resultType="com.ruoyi.auction.domain.AuctionSalesroomGoods">
+    resultType="com.ruoyi.system.api.domain.AuctionSalesroomGoods">
         SELECT * FROM t_auction_salesroom_goods ta
         WHERE ta.del_flag = 0
         <if test="param.auctionSalesroomId!=null and param.auctionSalesroomId != ''">
diff --git a/ruoyi-modules/ruoyi-auction/src/test/java/com/ruoyi/auction/RedissonTest.java b/ruoyi-modules/ruoyi-auction/src/test/java/com/ruoyi/auction/RedissonTest.java
new file mode 100644
index 0000000..2c3b9ab
--- /dev/null
+++ b/ruoyi-modules/ruoyi-auction/src/test/java/com/ruoyi/auction/RedissonTest.java
@@ -0,0 +1,72 @@
+package com.ruoyi.auction;
+
+import com.alibaba.fastjson2.JSON;
+import com.google.common.collect.Lists;
+import com.google.zxing.WriterException;
+import com.ruoyi.auction.util.CreateQrCode;
+import com.ruoyi.common.core.constant.SecurityConstants;
+import com.ruoyi.system.api.RemoteFileService;
+import com.ruoyi.system.api.domain.Order;
+import com.ruoyi.system.api.feignClient.OrderClient;
+import java.io.IOException;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import javax.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.Test;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * @author mitao
+ * @date 2024/5/31
+ */
+@SpringBootTest
+@Slf4j
+public class RedissonTest {
+    @Resource
+    private RedissonClient redissonClient;
+    @Resource
+    private RemoteFileService remoteFileService;
+    @Resource
+    private OrderClient orderClient;
+    @Test
+    public void test() {
+   //创建5个线程,模拟并发,同时执行excute()方法
+        for (int i = 0; i < 5; i++) {
+            final int key = i;
+            new Thread(() -> {
+                execute(key);
+            }).start();
+        }
+    }
+    private void execute(Integer key){
+        String goodsLock = "goods_lock:" + key;
+        RLock redissonClientLock = redissonClient.getLock(goodsLock);
+
+        try {
+            redissonClientLock.lock(30, TimeUnit.SECONDS);
+            if (redissonClientLock.isLocked()) {
+                log.info("execute:{}",key);
+            }
+        } finally {
+            redissonClientLock.unlock();
+        }
+    }
+
+    @Test
+    public void test2() throws IOException, WriterException {
+        MultipartFile file = CreateQrCode.createQRCodeStream("123456");
+        String data = remoteFileService.obsUpload(file).getData();
+        System.out.println("data:"+data);
+    }
+    @Test
+    public void test3() {
+
+        List<Order> orderVOList = orderClient.getOrderListByMubres(  Lists.newArrayList("cc219177-0494-47c5-a1a5-67ccb00547b7", "45675c47-3f00-4c52-ada9-b2be52ea8cb1"),
+                SecurityConstants.INNER).getData();
+        System.err.println(JSON.toJSONString(orderVOList));
+    }
+}
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/inner/GoodsSkuController.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/inner/GoodsSkuController.java
index d9836c4..d8075b2 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/inner/GoodsSkuController.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/inner/GoodsSkuController.java
@@ -1,17 +1,23 @@
 package com.ruoyi.goods.controller.inner;
 
 
-import com.ruoyi.common.core.constant.SecurityConstants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.security.annotation.InnerAuth;
 import com.ruoyi.goods.service.IGoodsSkuService;
 import com.ruoyi.system.api.domain.GoodsSku;
+import com.ruoyi.system.api.domain.Order;
 import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
 import java.util.Collection;
 import java.util.List;
 import javax.annotation.Resource;
-
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * <p>
@@ -95,11 +101,23 @@
      * 根据商品id集合查询商品
      *
      * @param goodsIdList 商品id集合
-     * @param source      请求来源
      * @return 商品集合
      */
+    @InnerAuth
     @PostMapping("/list")
     R<List<GoodsSku>> getGoodsListByIds(@RequestBody Collection<Long> goodsIdList) {
         return R.ok(iGoodsSkuService.listByIds(goodsIdList));
     }
+
+    /**
+     * 退款退货订单退库存
+     *
+     * @param order
+     */
+    @InnerAuth
+    @PostMapping("/returnStockByOrder")
+    R<?> returnStockByOrder(@RequestBody Order order) {
+        iGoodsSkuService.returnStockByOrder(order);
+        return R.ok();
+    }
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java
index ba1012a..db074bb 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/IGoodsSkuService.java
@@ -7,14 +7,14 @@
 import com.ruoyi.goods.controller.management.dto.GoodsSkuQuery;
 import com.ruoyi.goods.controller.management.vo.GoodsSkuVO;
 import com.ruoyi.system.api.domain.GoodsSku;
+import com.ruoyi.system.api.domain.Order;
 import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
 import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
 import com.ruoyi.system.api.domain.dto.ListStatusDTO;
 import com.ruoyi.system.api.domain.vo.HomeGoodsSkuInfoVO;
 import com.ruoyi.system.api.domain.vo.HomeGoodsSkuListVO;
-import java.util.List;
-
 import com.ruoyi.system.api.domain.vo.getHomeGoodsSkuXxiVO;
+import java.util.List;
 import org.springframework.web.bind.annotation.RequestBody;
 
 /**
@@ -75,4 +75,6 @@
     List<getHomeGoodsSkuXxiVO> getHomeGoodsSkuXxi(@RequestBody HomeGoodsSkuDTO homeGoodsSkuDTO);
     List<getHomeGoodsSkuXxiVO>   getMsHomeGoodsSkuXxi(@RequestBody HomeGoodsSkuDTO homeGoodsSkuDTO);
     GoodsSkuVO getGoodsDetail(Long id);
+
+    void returnStockByOrder(Order order);
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
index 3a3b300..f92fa11 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsGroupPurchaseServiceImpl.java
@@ -47,6 +47,7 @@
 import com.ruoyi.system.api.domain.vo.WdGoodsGroupPurchaseVO;
 import com.ruoyi.system.api.feignClient.OrderClient;
 import com.ruoyi.system.api.feignClient.SysUserClient;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -144,7 +145,13 @@
                         goodsSku.getSkuName()));
             }
         }
-        asyncMethodService.groupPurchaseScheduleTask(Lists.newArrayList(goodsGroupPurchase));
+        if (goodsGroupPurchase.getEndTime().isBefore(LocalDateTime.now())) {
+            goodsGroupPurchase.setStartStatus(StartStatusEnum.ENDED);
+            goodsGroupPurchase.setGroupStatus(GroupStatusEnum.GROUP_FAILURE);
+            this.updateById(goodsGroupPurchase);
+        } else {
+            asyncMethodService.groupPurchaseScheduleTask(Lists.newArrayList(goodsGroupPurchase));
+        }
     }
 
     /**
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java
index 5f66fd1..b005cfe 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSeckillServiceImpl.java
@@ -142,7 +142,12 @@
             goodsStockUpdDTO.setAuctionStock(seckillStock * -1);
             goodsStockUpdDTO.setGoodsSkuId(goodsSku.getId());
             goodsSkuService.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO));
-            asyncMethodService.seckillScheduleTask(Lists.newArrayList(goodsSeckill));
+            if (goodsSeckill.getEndTime().isBefore(LocalDateTime.now())) {
+                goodsSeckill.setStartStatus(StartStatusEnum.ENDED);
+                this.updateById(goodsSeckill);
+            } else {
+                asyncMethodService.seckillScheduleTask(Lists.newArrayList(goodsSeckill));
+            }
         }
     }
 
@@ -181,15 +186,29 @@
         if (goodsSku.getStock() < upd.getSeckillStock()) {
             throw new ServiceException("编辑失败,商品库存不足");
         }
+        Optional<GoodsSeckill> seckillOpt = this.lambdaQuery()
+                .ne(GoodsSeckill::getStartStatus, StartStatusEnum.ENDED)
+                .ne(GoodsSeckill::getId, goodsSeckill.getId())
+                .eq(GoodsSeckill::getGoodsSkuId, goodsSeckill.getGoodsSkuId()).oneOpt();
+        if (seckillOpt.isPresent()) {
+            throw new ServiceException("编辑失败,商品在该时间段内有其他秒杀活动");
+        }
         GoodsSeckill goodsSeckillUpd = BeanUtils.copyBean(upd, GoodsSeckill.class);
         goodsSeckillUpd.setListingStatus(ListingStatusEnum.ON_SHELVES);
         goodsSeckillUpd.setStartStatus(StartStatusEnum.NOT_STARTED);
         this.updateById(goodsSeckillUpd);
-        GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
-        goodsStockUpdDTO.setAuctionStock(upd.getSeckillStock() * -1);
-        goodsStockUpdDTO.setGoodsSkuId(goodsSeckill.getGoodsSkuId());
-        goodsSkuService.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO));
-        asyncMethodService.seckillScheduleTask(Lists.newArrayList(goodsSeckillUpd));
+
+        if (goodsSeckillUpd.getEndTime().isBefore(LocalDateTime.now())) {
+            goodsSeckillUpd.setStartStatus(StartStatusEnum.ENDED);
+            this.updateById(goodsSeckillUpd);
+        } else {
+            // 修改库存
+            GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
+            goodsStockUpdDTO.setAuctionStock(upd.getSeckillStock() * -1);
+            goodsStockUpdDTO.setGoodsSkuId(goodsSeckill.getGoodsSkuId());
+            goodsSkuService.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO));
+            asyncMethodService.seckillScheduleTask(Lists.newArrayList(goodsSeckillUpd));
+        }
     }
 
     /**
@@ -204,7 +223,8 @@
             throw new ServiceException("秒杀商品不存在");
         }
         goodsSeckill.setListingStatus(dto.getListingStatus());
-        if (dto.getListingStatus().equals(ListingStatusEnum.REMOVED_FROM_THE_SHELF)) {
+        if (dto.getListingStatus().equals(ListingStatusEnum.REMOVED_FROM_THE_SHELF)
+                && !goodsSeckill.getStartStatus().equals(StartStatusEnum.ENDED)) {
             // 退回剩余库存
             GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
             goodsStockUpdDTO.setAuctionStock(goodsSeckill.getSeckillStock());
@@ -280,12 +300,17 @@
         log.info(">>>>>>>>>>>>>>>>>>>>{}秒杀结束<<<<<<<<<<<<<<<<<<<<", seckillId);
         GoodsSeckill goodsSeckill = this.getById(seckillId);
         if (StringUtils.isNotNull(goodsSeckill)
-                && goodsSeckill.getStartStatus().equals(StartStatusEnum.STARTED)) {
+                && !goodsSeckill.getStartStatus().equals(StartStatusEnum.ENDED)) {
             //结束秒杀
             this.lambdaUpdate().set(GoodsSeckill::getStartStatus, StartStatusEnum.ENDED)
                     .eq(GoodsSeckill::getId, seckillId).update();
 //            将秒杀商品从缓存中移除
             redisService.deleteObject(CacheConstants.SECKILL_GOODS + goodsSeckill.getId());
+            // 退回剩余库存
+            GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
+            goodsStockUpdDTO.setAuctionStock(goodsSeckill.getSeckillStock());
+            goodsStockUpdDTO.setGoodsSkuId(goodsSeckill.getGoodsSkuId());
+            goodsSkuService.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO));
         }
         Map<String, Object> map = new ConcurrentHashMap<>();
         map.put("notification_type", NotificationTypeConstant.SECKILL);
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java
index 9cc16bb..65403ca 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java
@@ -7,7 +7,9 @@
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.ruoyi.common.core.constant.SecurityConstants;
+import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
 import com.ruoyi.common.core.enums.ListingStatusEnum;
+import com.ruoyi.common.core.enums.OrderFromEnum;
 import com.ruoyi.common.core.enums.StartStatusEnum;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.StringUtils;
@@ -29,6 +31,9 @@
 import com.ruoyi.goods.service.IGoodsInfoTitleValueService;
 import com.ruoyi.goods.service.IGoodsSkuService;
 import com.ruoyi.goods.service.IMemberGoodsCollectionService;
+import com.ruoyi.system.api.domain.AuctionGoods;
+import com.ruoyi.system.api.domain.AuctionSalesroom;
+import com.ruoyi.system.api.domain.AuctionSalesroomGoods;
 import com.ruoyi.system.api.domain.GoodsBrand;
 import com.ruoyi.system.api.domain.GoodsCategory;
 import com.ruoyi.system.api.domain.GoodsFlavorType;
@@ -44,6 +49,7 @@
 import com.ruoyi.system.api.domain.vo.HomeGoodsSkuInfoVO;
 import com.ruoyi.system.api.domain.vo.HomeGoodsSkuListVO;
 import com.ruoyi.system.api.domain.vo.getHomeGoodsSkuXxiVO;
+import com.ruoyi.system.api.feignClient.AuctionClient;
 import com.ruoyi.system.api.feignClient.GoodsSkuClient;
 import com.ruoyi.system.api.feignClient.OrderClient;
 import java.time.LocalDate;
@@ -82,7 +88,7 @@
     private final GoodsSeckillMapper goodsSeckillMapper;
     private final GoodsGroupPurchaseMapper goodsGroupPurchaseMapper;
     private final RedissonClient redissonClient;
-
+    private final AuctionClient auctionClient;
     @Resource
     private IGoodsBrowseRecordService iGoodsBrowseRecordService;
 
@@ -222,8 +228,40 @@
                 .eq(GoodsSku::getId, dto.getId())
                 .set(GoodsSku::getListingStatus, dto.getListingStatus())
                 .update();
-        //关联的秒杀商品和团购商品同步下架
+
         if (dto.getListingStatus().equals(ListingStatusEnum.REMOVED_FROM_THE_SHELF)) {
+            // 校验是否有秒杀活动商品
+            Long seckillCount = goodsSeckillMapper.selectCount(
+                    new LambdaQueryWrapper<GoodsSeckill>().eq(GoodsSeckill::getGoodsSkuId,
+                                    dto.getId())
+                            .eq(GoodsSeckill::getStartStatus, StartStatusEnum.STARTED)
+                            .eq(GoodsSeckill::getListingStatus, ListingStatusEnum.ON_SHELVES));
+            if (seckillCount > 0) {
+                throw new ServiceException("该商品有秒杀活动商品正在进行中,不能下架");
+            }
+            // 校验是否有团购活动商品
+            Long groupCount = goodsGroupPurchaseMapper.selectCount(
+                    new LambdaQueryWrapper<GoodsGroupPurchase>().eq(
+                                    GoodsGroupPurchase::getGoodsSkuId,
+                                    dto.getId())
+                            .eq(GoodsGroupPurchase::getStartStatus, StartStatusEnum.STARTED)
+                            .eq(GoodsGroupPurchase::getListingStatus,
+                                    ListingStatusEnum.ON_SHELVES));
+            if (groupCount > 0) {
+                throw new ServiceException("该商品有团购活动商品正在进行中,不能下架");
+            }
+            // 校验是否有拍卖会商品
+            List<AuctionSalesroom> auctionSalesrooms = auctionClient.getAuctionSalesroomBySkuId(
+                    dto.getId(), SecurityConstants.INNER).getData();
+            if (CollUtils.isNotEmpty(auctionSalesrooms)) {
+                throw new ServiceException("该商品有拍卖会商品正在进行中,不能下架");
+            }
+            List<AuctionGoods> auctionGoodsList = auctionClient.getAuctionGoodsBySkuId(dto.getId(),
+                    SecurityConstants.INNER).getData();
+            if (CollUtils.isNotEmpty(auctionGoodsList)) {
+                throw new ServiceException("该商品有商品竞价商品正在进行中,不能下架");
+            }
+            // 关联的秒杀商品和团购商品同步下架
             updateGoodsStatus(dto);
         }
     }
@@ -233,7 +271,7 @@
         queryWrapper.eq(GoodsSeckill::getListingStatus, ListingStatusEnum.ON_SHELVES)
                 .eq(GoodsSeckill::getGoodsSkuId, dto.getId());
         List<GoodsSeckill> goodsSeckillList = goodsSeckillMapper.selectList(queryWrapper);
-        if (StringUtils.isNotNull(goodsSeckillList)) {
+        if (StringUtils.isNotEmpty(goodsSeckillList)) {
             goodsSeckillList = goodsSeckillList.stream().peek(goodsSeckill -> {
                 goodsSeckill.setListingStatus(ListingStatusEnum.REMOVED_FROM_THE_SHELF);
             }).collect(Collectors.toList());
@@ -652,4 +690,43 @@
         goodsSkuVO.setGoodsInfoTitleValueVOList(goodsInfoTitleValueVOList);
         return goodsSkuVO;
     }
+
+    @Override
+    public void returnStockByOrder(Order order) {
+        Long goodsSkuId = null;
+        if (order.getOrderFrom().equals(OrderFromEnum.COMMODITY_ORDER)) {
+            goodsSkuId = order.getGoodsSkuId();
+        } else if (order.getOrderFrom().equals(OrderFromEnum.SNAP_ORDERS)) {
+            GoodsSeckill goodsSeckill = goodsSeckillMapper.selectById(order.getGoodsSkuId());
+            if (Objects.nonNull(goodsSeckill)) {
+                goodsSkuId = goodsSeckill.getGoodsSkuId();
+            }
+        } else if (order.getOrderFrom().equals(OrderFromEnum.GROUP_PURCHASE_ORDERS)) {
+            GoodsGroupPurchase goodsGroupPurchase = goodsGroupPurchaseMapper.selectById(
+                    order.getGoodsSkuId());
+            if (Objects.nonNull(goodsGroupPurchase)) {
+                goodsSkuId = goodsGroupPurchase.getGoodsSkuId();
+            }
+        } else if (order.getOrderFrom()
+                .equals(OrderFromEnum.AUCTION_ORDERS) && order.getAuctionOrderType()
+                .equals(AuctionOrderTypeEnum.REGULAR_ITEMS)) {
+            AuctionGoods auctionGoods = auctionClient.getAuctionGoodsId(order.getGoodsSkuId(),
+                    SecurityConstants.INNER).getData();
+            if (Objects.nonNull(auctionGoods)) {
+                goodsSkuId = auctionGoods.getGoodsSkuId();
+            }
+        } else if (order.getOrderFrom()
+                .equals(OrderFromEnum.AUCTION_ORDERS) && order.getAuctionOrderType()
+                .equals(AuctionOrderTypeEnum.AUCTION_ITEMS)) {
+            AuctionSalesroomGoods auctionSalesroomGoods = auctionClient.getAuctionSalesroomGoodsById(
+                    order.getGoodsSkuId(),
+                    SecurityConstants.INNER).getData();
+            if (Objects.nonNull(auctionSalesroomGoods)) {
+                goodsSkuId = auctionSalesroomGoods.getGoodsSkuId();
+            }
+        }
+        if (Objects.nonNull(goodsSkuId)) {
+            updateGoodsStock(goodsSkuId, order.getGoodsQuantity());
+        }
+    }
 }
diff --git a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsGroupPurchaseMapper.xml b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsGroupPurchaseMapper.xml
index 378103e..6e3204f 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsGroupPurchaseMapper.xml
+++ b/ruoyi-modules/ruoyi-goods/src/main/resources/mapper/goods/GoodsGroupPurchaseMapper.xml
@@ -17,11 +17,29 @@
   <select id="getGoodsGroupPurchasePage"
     resultType="com.ruoyi.goods.controller.management.vo.GoodsGroupPurchaseVO">
     SELECT
-    tgp.*,
+    tgp.id,
+    tgp.goods_sku_id,
+    tgp.share_title,
+    tgp.share_pic,
+    tgp.group_purchase_price,
+    tgp.group_size,
+    IFNULL(tgpi.current_number,0) AS current_number,
+    tgp.limit_number,
+    tgp.start_time,
+    tgp.end_time,
+    tgp.description,
+    tgp.start_status,
+    tgp.listing_status,
+    tgp.group_status,
+    tgp.group_time,
+    tgp.create_time,
+    tgp.update_time,
     tgs.sku_name AS goodsSkuName
     FROM
     t_goods_group_purchase tgp
     LEFT JOIN t_goods_sku tgs ON tgp.goods_sku_id = tgs.id
+    LEFT JOIN (SELECT current_number,group_purchase_id FROM t_goods_group_purchase_info WHERE
+    group_status = 0) tgpi ON tgp.id = tgpi.group_purchase_id
     <where>
       <if test="goodsSkuName != null and goodsSkuName != ''">
         AND tgs.sku_name LIKE CONCAT('%',#{goodsSkuName},'%')
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/dto/MgtMemberQuery.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/dto/MgtMemberQuery.java
index b83c8ce..14b04b9 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/dto/MgtMemberQuery.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/controller/management/dto/MgtMemberQuery.java
@@ -23,4 +23,7 @@
 
     @ApiModelProperty(value = "联系电话")
     private String phone;
+    
+    @ApiModelProperty(value = "会员等级")
+    private String level;
 }
diff --git a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java
index 69c6dcf..febf68e 100644
--- a/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java
+++ b/ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/MemberServiceImpl.java
@@ -518,6 +518,7 @@
                 .like(StringUtils.isNotBlank(query.getRealName()), Member::getRealName,
                         query.getRealName())
                 .like(StringUtils.isNotBlank(query.getPhone()), Member::getPhone, query.getPhone())
+                .eq(StringUtils.isNotBlank(query.getLevel()), Member::getLevel, query.getLevel())
                 .orderByDesc(Member::getCreateTime)
                 .page(new Page<>(query.getPageCurr(), query.getPageSize()));
         if (StringUtils.isEmpty(page.getRecords())) {
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/vo/MgtOrderVO.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/vo/MgtOrderVO.java
index 67d3b50..d58113e 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/vo/MgtOrderVO.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/management/vo/MgtOrderVO.java
@@ -145,7 +145,7 @@
     @ApiModelProperty("物流信息")
     private Express100VO express100VO;
 
-    @ApiModelProperty("是否售后 1未售后,2 售后")
+    @ApiModelProperty("是否售后 1未售后,2 售后待审核 3 售后完成")
     private Integer isRequest;
 
 }
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceServiceImpl.java
index 4feb7e1..9b56a97 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceServiceImpl.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MemberInvoiceServiceImpl.java
@@ -222,7 +222,7 @@
         this.updateById(memberInvoice);
         // 更新关联订单状态
         List<MemberInvoiceOrder> memberInvoiceOrderList = iMemberInvoiceOrderService.lambdaQuery()
-                .eq(MemberInvoiceOrder::getInvoiceId, memberInvoice)
+                .eq(MemberInvoiceOrder::getInvoiceId, memberInvoice.getId())
                 .list();
         Set<String> orderNoSet = memberInvoiceOrderList.stream()
                 .map(MemberInvoiceOrder::getOrderNo)
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MgtBusinessDataService.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MgtBusinessDataService.java
index 90d2b31..e30efd2 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MgtBusinessDataService.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/MgtBusinessDataService.java
@@ -66,11 +66,11 @@
         long mallOrderTotalCount = orderList.stream()
                 .filter(order -> !order.getOrderFrom().equals(OrderFromEnum.AUCTION_ORDERS))
                 .count();
-        // 商城订单统计-订单总数
+        // 商城订单统计-商城订单
         long mallOrderCount = orderList.stream()
                 .filter(order -> order.getOrderFrom().equals(OrderFromEnum.COMMODITY_ORDER))
                 .count();
-        // 商城订单统计-商城订单
+        // 商城订单统计-秒杀订单
         long seckillOrderCount = orderList.stream()
                 .filter(order -> order.getOrderFrom().equals(OrderFromEnum.SNAP_ORDERS))
                 .count();
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderReturnRequestServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderReturnRequestServiceImpl.java
index 8ef985d..2a531cb 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderReturnRequestServiceImpl.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderReturnRequestServiceImpl.java
@@ -36,6 +36,7 @@
 import com.ruoyi.system.api.domain.dto.updMembeOneDTO;
 import com.ruoyi.system.api.domain.vo.Express100VO;
 import com.ruoyi.system.api.domain.vo.OrderReturnVO;
+import com.ruoyi.system.api.feignClient.GoodsSkuClient;
 import com.ruoyi.system.api.feignClient.MemberClient;
 import com.ruoyi.system.api.feignClient.PromotionClient;
 import com.ruoyi.system.api.feignClient.SysUserClient;
@@ -79,7 +80,8 @@
 
     @Resource
     private PromotionClient promotionClient;
-    
+    @Resource
+    private GoodsSkuClient goodsSkuClient;
     @Override
     public OrderReturnVO saveOrderReturnRequest(OrderReturnDTO OrderReturnDTO) {
         Order order = orderMapper.selectById(OrderReturnDTO.getOrderId());
@@ -179,7 +181,7 @@
         order.setOrderStatus(OrderStatusEnum.FINISHED);
         order.setIsRequest(1);
         orderMapper.updateById(order);
-        this.removeById(byId);
+        this.updateById(byId);
     }
 
     @Override
@@ -188,6 +190,7 @@
         byId.setStatus(ReturnRequestStatusEnum.TO_BE_RECEIVED_BY_THE_PLATFORM);
         byId.setLogisticsNum(OrderReturnDTO.getLogistics());
         byId.setCourierNumber(OrderReturnDTO.getCourierNumber());
+        byId.setReturnTime(LocalDateTime.now());
         this.updateById(byId);
     }
 
@@ -300,6 +303,12 @@
                         }
                     }
                 }
+                if (Objects.nonNull(order.getCouponId())) {
+                    CouponMemberDTO couponMemberDTO = new CouponMemberDTO();
+                    couponMemberDTO.setId(order.getCouponId());
+                    couponMemberDTO.setCouponStatus(CouponUseEnum.UNUSED.getCode());
+                    promotionClient.updCouponMember(couponMemberDTO, SecurityConstants.INNER);
+                }
             }
             orderReturnRequest.setAuditStatus(AuditStatusEnum.PASSED);
             // 扣除订单积分
@@ -319,12 +328,6 @@
                 updMembeOneDTO.setTotalPoints(
                         Math.max(member.getTotalPoints() - order.getPoints(), 0));
                 memberClient.updMembeOne(updMembeOneDTO, SecurityConstants.INNER);
-            }
-            if (Objects.nonNull(order.getCouponId())) {
-                CouponMemberDTO couponMemberDTO = new CouponMemberDTO();
-                couponMemberDTO.setId(order.getCouponId());
-                couponMemberDTO.setCouponStatus(CouponUseEnum.UNUSED.getCode());
-                promotionClient.updCouponMember(couponMemberDTO, SecurityConstants.INNER);
             }
         } else {
             orderReturnRequest.setStatus(ReturnRequestStatusEnum.REJECTED);
@@ -400,6 +403,9 @@
             dto.setCouponStatus(CouponUseEnum.UNUSED.getCode());
             promotionClient.updCouponMember(dto, SecurityConstants.INNER);
         }
+        // 退回剩余库存
+        goodsSkuClient.returnStockByOrder(order, SecurityConstants.INNER);
+
     }
 
     private boolean handleRefund(PaymentMethodEnum paymentMethod, Paylog paylog, String orderNo) {
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
index 8b6c194..59f52a4 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -7,11 +7,11 @@
 import com.google.common.collect.Lists;
 import com.ruoyi.common.core.constant.CacheConstants;
 import com.ruoyi.common.core.constant.SecurityConstants;
-import com.ruoyi.common.core.enums.*;
 import com.ruoyi.common.core.enums.AuctionOrderTypeEnum;
 import com.ruoyi.common.core.enums.AuditStatusEnum;
 import com.ruoyi.common.core.enums.BondStatusEnum;
 import com.ruoyi.common.core.enums.CouponUseEnum;
+import com.ruoyi.common.core.enums.GroupStatusEnum;
 import com.ruoyi.common.core.enums.OrderFromEnum;
 import com.ruoyi.common.core.enums.OrderStatusEnum;
 import com.ruoyi.common.core.enums.OrderTypeEnum;
@@ -65,7 +65,11 @@
 import com.ruoyi.system.api.domain.dto.MgtAfterSaleSettingDTO;
 import com.ruoyi.system.api.domain.dto.OrderDTO;
 import com.ruoyi.system.api.domain.dto.updMembeOneDTO;
-import com.ruoyi.system.api.domain.vo.*;
+import com.ruoyi.system.api.domain.vo.Express100VO;
+import com.ruoyi.system.api.domain.vo.MemberOrderListVO;
+import com.ruoyi.system.api.domain.vo.MemberOrderNumVO;
+import com.ruoyi.system.api.domain.vo.MemberTiOrderVO;
+import com.ruoyi.system.api.domain.vo.OrderVO;
 import com.ruoyi.system.api.feignClient.AuctionClient;
 import com.ruoyi.system.api.feignClient.GoodsSkuClient;
 import com.ruoyi.system.api.feignClient.MemberClient;
@@ -80,6 +84,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
@@ -168,6 +173,9 @@
             order.setOrderFrom(OrderFromEnum.AUCTION_ORDERS);
             order.setOrderNo(OrderUtil.getOrderNoForPrefix("PM"));
             order.setIsOrder(1);
+            if (OrderDTO.getAuctionType().equals(AuctionOrderTypeEnum.AUCTION_ITEMS)) {
+                order.setAuctionSalesroomId(OrderDTO.getAuctionSalesroomId());
+            }
         }
         order.setOrderTime(OrderDTO.getOrderTime());
         order.setOrderFrom(OrderDTO.getOrderFrom());
@@ -908,6 +916,7 @@
 
             LambdaQueryWrapper<OrderAuctionBond> wrapper3= Wrappers.lambdaQuery();
             wrapper3.eq(OrderAuctionBond::getOrderId,order.getId());
+            wrapper3.or().eq(OrderAuctionBond::getOrderNo, order.getOrderNo());
             OrderAuctionBond orderAuctionBond = orderAuctionBondMapper.selectOne(wrapper3);
             if (orderAuctionBond!=null){
                 if (orderAuctionBond.getBoundStatus().getCode()==1||orderAuctionBond.getBoundStatus().getCode()==2){
@@ -1368,7 +1377,9 @@
      */
     @Override
     public List<Order> getOrderByCouponIds(Collection<Long> couponIds) {
-        return this.lambdaQuery().in(Order::getCouponId, couponIds).list();
+        return this.lambdaQuery().in(Order::getCouponId, couponIds)
+                .ne(Order::getOrderStatus, OrderStatusEnum.CANCELED).eq(Order::getIsRequest, 1)
+                .list();
     }
 
     /**
@@ -1417,6 +1428,8 @@
                         query.getSkuName())
                 .eq(StringUtils.isNotNull(query.getOrderStatus()), Order::getOrderStatus,
                         query.getOrderStatus())
+                .eq(StringUtils.isNotNull(query.getOrderStatus()) && query.getOrderStatus()
+                        .equals(OrderStatusEnum.FINISHED), Order::getIsRequest, 1)
                 .orderByDesc(Order::getCreateTime)
                 .page(new Page<>(query.getPageCurr(), query.getPageSize()));
         if (StringUtils.isEmpty(page.getRecords())) {
@@ -1424,6 +1437,22 @@
         }
         pageVO = PageDTO.of(page, MgtOrderVO.class);
         List<MgtOrderVO> voList = pageVO.getList();
+        List<Long> orderIdList = voList.stream().filter(order -> order.getIsRequest().equals(2))
+                .map(MgtOrderVO::getId).collect(
+                        Collectors.toList());
+        if (CollUtils.isNotEmpty(orderIdList)) {
+            List<OrderReturnRequest> orderReturnRequestList = orderReturnRequestService.lambdaQuery()
+                    .in(OrderReturnRequest::getOrderId, orderIdList)
+                    .eq(OrderReturnRequest::getAuditStatus, AuditStatusEnum.PASSED).list();
+            List<Long> orderReturnRequestPassedIds = orderReturnRequestList.stream()
+                    .map(OrderReturnRequest::getOrderId)
+                    .collect(Collectors.toList());
+            for (MgtOrderVO order : voList) {
+                if (orderReturnRequestPassedIds.contains(order.getId())) {
+                    order.setIsRequest(3);
+                }
+            }
+        }
         if (query.getQueryType() == OrderTypeEnum.AUCTION_ORDER) {
             List<MgtOrderVO> list = voList;
             // 封装参数查询拍卖会
@@ -1440,9 +1469,6 @@
                 salesroomMap = auctionSalesroomList.stream()
                         .collect(Collectors.toMap(AuctionSalesroom::getId,
                                 AuctionSalesroom::getSalesroomName));
-                auctionSalesroomList.stream()
-                        .map(AuctionSalesroom::getId)
-                        .collect(Collectors.toSet());
             }
             // 封装参数查询拍卖订单保证金
             Set<Long> auctionGoodsIdSet = list.stream()
@@ -1627,36 +1653,38 @@
             throw new ServiceException("该订单已是售后状态");
         }
         String orderNo = order.getOrderNo();
-        Paylog paylog = iPaylogService.lambdaQuery().eq(Paylog::getOutTradeNo, orderNo)
-                .last("limit 1").one();
+        Optional<Paylog> paylogOpt = iPaylogService.lambdaQuery().eq(Paylog::getOutTradeNo, orderNo)
+                .last("limit 1").oneOpt();
         PaymentMethodEnum paymentMethod = order.getPaymentMethod();
 
-        if (StringUtils.isNotNull(paylog)) {
+        if (paylogOpt.isPresent()) {
+            Paylog paylog = paylogOpt.get();
             boolean result = handleRefund(paymentMethod, paylog, orderNo);
             if (result) {
                 paylog.setState(3);// 已退款
                 iPaylogService.updateById(paylog);
             }
-            OrderReturnRequest orderReturnRequest = new OrderReturnRequest();
-            orderReturnRequest.setOrderId(id);
-            orderReturnRequest.setRequestTime(LocalDateTime.now());
-            orderReturnRequest.setRequestType(RequestTypeEnum.REFUND);
-            orderReturnRequest.setRequestReason("管理后台退款");
-            orderReturnRequest.setStatus(ReturnRequestStatusEnum.COMPLETED);
-            orderReturnRequest.setAuditStatus(AuditStatusEnum.PASSED);
-            orderReturnRequest.setAuditTime(LocalDateTime.now());
-            orderReturnRequestService.save(orderReturnRequest);
         }
         order.setIsRequest(2);
         this.updateById(order);
+        // 生成售后记录
+        OrderReturnRequest orderReturnRequest = new OrderReturnRequest();
+        orderReturnRequest.setOrderId(id);
+        orderReturnRequest.setRequestTime(LocalDateTime.now());
+        orderReturnRequest.setRequestType(RequestTypeEnum.REFUND);
+        orderReturnRequest.setRequestReason("管理后台退款");
+        orderReturnRequest.setStatus(ReturnRequestStatusEnum.COMPLETED);
+        orderReturnRequest.setAuditStatus(AuditStatusEnum.PASSED);
+        orderReturnRequest.setAuditTime(LocalDateTime.now());
+        orderReturnRequestService.save(orderReturnRequest);
         // 扣除订单积分
         Member member = memberClient.getMembeOne(order.getMemberId(), SecurityConstants.INNER)
                 .getData();
         if (StringUtils.isNotNull(member)) {
             MemberPointsDTO memberPointsDTO = new MemberPointsDTO();
             memberPointsDTO.setMemberId(order.getMemberId());
-            memberPointsDTO.setPointsType(1);
-            memberPointsDTO.setPointsStatus(PointStatusEnum.INCREASE);
+            memberPointsDTO.setPointsType(2);
+            memberPointsDTO.setPointsStatus(PointStatusEnum.REDUCE);
             memberPointsDTO.setPoints(order.getPoints());
             memberClient.addMemberPoints(memberPointsDTO);
 
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/tencent/common/Configure.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/tencent/common/Configure.java
index 4ca130b..29ccd20 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/tencent/common/Configure.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/util/tencent/common/Configure.java
@@ -42,7 +42,9 @@
 	//HTTPS证书的本地路径
 	private static String certLocalPath;
 	static{//从服务器相对路径中获取
-		certLocalPath = Configure.class.getClassLoader().getResource("").getPath() + "com/ruoyi/order/util/tencent/common/cert/apiclient_cert.p12";
+		// certLocalPath = Configure.class.getClassLoader().getResource("").getPath() + "com/ruoyi/order/util/tencent/common/cert/apiclient_cert.p12";
+		certLocalPath = Configure.class.getClassLoader().getResource("").getPath()
+				+ "cert/apiclient_cert.p12";
 	}
 	
 	//HTTPS证书密码,默认密码等于商户号MCHID
@@ -51,7 +53,9 @@
 	//HTTPS证书的本地路径
 	private static String certLocalPath_2;
 	static{//从服务器相对路径中获取
-		certLocalPath_2 = Configure.class.getClassLoader().getResource("").getPath() + "com/ruoyi/order/util/tencent/common/cert_2/apiclient_cert.p12";
+		// certLocalPath_2 = Configure.class.getClassLoader().getResource("").getPath() + "com/ruoyi/order/util/tencent/common/cert_2/apiclient_cert.p12";
+		certLocalPath_2 = Configure.class.getClassLoader().getResource("").getPath()
+				+ "cert_2/apiclient_cert.p12";
 	}	
 	
 	//HTTPS证书密码,默认密码等于商户号MCHID
diff --git a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
index 6464c93..acdde13 100644
--- a/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
+++ b/ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -3,15 +3,13 @@
 <mapper namespace="com.ruoyi.order.mapper.OrderMapper">
 
   <select id="getSeckillMembers" resultType="java.lang.Integer">
-    SELECT IFNULL(COUNT(id), 0) AS num
+    SELECT COUNT(DISTINCT o.member_id) AS num
     FROM t_order o
     WHERE
       o.goods_sku_id = #{id}
-      AND o.order_from=2
-      AND o.del_flag=0
+      AND o.order_from = 2
+      AND o.del_flag = 0
       AND o.order_status IN (2, 3, 4)
-    GROUP BY
-      o.member_id
   </select>
 
 
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/scheduler/PromotionScheduler.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/scheduler/PromotionScheduler.java
index a2be45e..45cbc04 100644
--- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/scheduler/PromotionScheduler.java
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/scheduler/PromotionScheduler.java
@@ -20,7 +20,9 @@
     /**
      * 每小时定时检查优惠券过期
      */
-    @Scheduled(cron = "0 0 * * * *")
+    // 每分钟执行一次
+    @Scheduled(cron = "0 0/1 * * * *")
+    // @Scheduled(cron = "0 0 * * * *")
     private void timingCheckMemberCoupon() {
         log.info("----------------定时检查优惠券过期任务开始执行----------------");
         couponMemberService.timingCheckMemberCoupon();
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/resources/mapper/promotion/CouponMemberMapper.xml b/ruoyi-modules/ruoyi-promotion/src/main/resources/mapper/promotion/CouponMemberMapper.xml
index b379d3e..f1ab70a 100644
--- a/ruoyi-modules/ruoyi-promotion/src/main/resources/mapper/promotion/CouponMemberMapper.xml
+++ b/ruoyi-modules/ruoyi-promotion/src/main/resources/mapper/promotion/CouponMemberMapper.xml
@@ -7,6 +7,6 @@
     SET coupon_status = 2
     WHERE del_flag = 0
       AND coupon_status = 0
-      AND end_date &lt; CURDATE()
+      AND end_date &lt; CURTIME()
   </update>
 </mapper>

--
Gitblit v1.7.1