From 357bf93f7fa56e414ad54d4fbfbf6bd97da5b1d2 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期五, 26 七月 2024 08:57:54 +0800
Subject: [PATCH] 修改bug

---
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java               |    6 
 ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/CustomWebsocketRoutingFilter.java                              |  210 ++++++++++++++++++++++++++++++
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/CouponServiceImpl.java                 |   11 
 ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/CouponReceiveDetailVO.java |    5 
 ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java           |   16 ++
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderController.java                       |    2 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java                       |   14 +-
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java                          |   81 ++++++----
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java                         |    5 
 ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrowseRecordServiceImpl.java              |   10 -
 ruoyi-modules/ruoyi-system/pom.xml                                                                                  |    5 
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderReturnRequestServiceImpl.java             |   28 +++
 ruoyi-api/ruoyi-api-system/pom.xml                                                                                  |    6 
 13 files changed, 330 insertions(+), 69 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-system/pom.xml b/ruoyi-api/ruoyi-api-system/pom.xml
index 0f6f7ba..846eaf8 100644
--- a/ruoyi-api/ruoyi-api-system/pom.xml
+++ b/ruoyi-api/ruoyi-api-system/pom.xml
@@ -34,12 +34,6 @@
                 </exclusion>
             </exclusions>
         </dependency>
-        <!-- WebSocket-->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-websocket</artifactId>
-        </dependency>
-
 
     </dependencies>
 
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/CustomWebsocketRoutingFilter.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/CustomWebsocketRoutingFilter.java
new file mode 100644
index 0000000..53e99c9
--- /dev/null
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/CustomWebsocketRoutingFilter.java
@@ -0,0 +1,210 @@
+package com.ruoyi.gateway.filter;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.cloud.gateway.filter.GlobalFilter;
+import org.springframework.cloud.gateway.filter.headers.HttpHeadersFilter;
+import org.springframework.cloud.gateway.support.ServerWebExchangeUtils;
+import org.springframework.core.Ordered;
+import org.springframework.http.HttpHeaders;
+import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
+import org.springframework.web.reactive.socket.WebSocketHandler;
+import org.springframework.web.reactive.socket.WebSocketMessage;
+import org.springframework.web.reactive.socket.WebSocketSession;
+import org.springframework.web.reactive.socket.client.WebSocketClient;
+import org.springframework.web.reactive.socket.server.WebSocketService;
+import org.springframework.web.server.ServerWebExchange;
+import org.springframework.web.util.UriComponentsBuilder;
+import reactor.core.publisher.Mono;
+
+/**
+ * 解决websocket关闭异常 问题
+ *
+ * @author admin
+ * @Desc websocket客户端主动断开连接, 网关服务报错1005
+ * @date 2022/8/24 14:30
+ */
+@Component
+public class CustomWebsocketRoutingFilter implements GlobalFilter, Ordered {
+
+    public static final String SEC_WEBSOCKET_PROTOCOL = "Sec-WebSocket-Protocol";
+    private static final Log log = LogFactory.getLog(CustomWebsocketRoutingFilter.class);
+    private final WebSocketClient webSocketClient;
+    private final WebSocketService webSocketService;
+    private final ObjectProvider<List<HttpHeadersFilter>> headersFiltersProvider;
+    private volatile List<HttpHeadersFilter> headersFilters;
+
+    public CustomWebsocketRoutingFilter(WebSocketClient webSocketClient,
+            WebSocketService webSocketService,
+            ObjectProvider<List<HttpHeadersFilter>> headersFiltersProvider) {
+        this.webSocketClient = webSocketClient;
+        this.webSocketService = webSocketService;
+        this.headersFiltersProvider = headersFiltersProvider;
+    }
+
+    static String convertHttpToWs(String scheme) {
+        scheme = scheme.toLowerCase();
+        return "http".equals(scheme) ? "ws" : ("https".equals(scheme) ? "wss" : scheme);
+    }
+
+    @Override
+    public int getOrder() {
+        return 2147483645;
+    }
+
+    @Override
+    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+        changeSchemeIfIsWebSocketUpgrade(exchange);
+        URI requestUrl = (URI) exchange.getRequiredAttribute(
+                ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR);
+        String scheme = requestUrl.getScheme();
+        if (!ServerWebExchangeUtils.isAlreadyRouted(exchange) && ("ws".equals(scheme)
+                || "wss".equals(scheme))) {
+            ServerWebExchangeUtils.setAlreadyRouted(exchange);
+            HttpHeaders headers = exchange.getRequest().getHeaders();
+            HttpHeaders filtered = HttpHeadersFilter.filterRequest(this.getHeadersFilters(),
+                    exchange);
+            List<String> protocols = this.getProtocols(headers);
+            return this.webSocketService.handleRequest(exchange,
+                    new CustomWebsocketRoutingFilter.ProxyWebSocketHandler(requestUrl,
+                            this.webSocketClient, filtered, protocols));
+        } else {
+            return chain.filter(exchange);
+        }
+    }
+
+    List<String> getProtocols(HttpHeaders headers) {
+        List<String> protocols = headers.get("Sec-WebSocket-Protocol");
+        if (protocols != null) {
+            ArrayList<String> updatedProtocols = new ArrayList();
+
+            for (int i = 0; i < ((List) protocols).size(); ++i) {
+                String protocol = (String) ((List) protocols).get(i);
+                updatedProtocols.addAll(
+                        Arrays.asList(StringUtils.tokenizeToStringArray(protocol, ",")));
+            }
+
+            protocols = updatedProtocols;
+        }
+
+        return (List) protocols;
+    }
+
+    List<HttpHeadersFilter> getHeadersFilters() {
+        if (this.headersFilters == null) {
+            this.headersFilters = (List) this.headersFiltersProvider.getIfAvailable(ArrayList::new);
+            this.headersFilters.add((headers, exchange) -> {
+                HttpHeaders filtered = new HttpHeaders();
+                filtered.addAll(headers);
+                filtered.remove("Host");
+                boolean preserveHost = (Boolean) exchange.getAttributeOrDefault(
+                        ServerWebExchangeUtils.PRESERVE_HOST_HEADER_ATTRIBUTE, false);
+                if (preserveHost) {
+                    String host = exchange.getRequest().getHeaders().getFirst("Host");
+                    filtered.add("Host", host);
+                }
+
+                return filtered;
+            });
+            this.headersFilters.add((headers, exchange) -> {
+                HttpHeaders filtered = new HttpHeaders();
+                Iterator var3 = headers.entrySet().iterator();
+
+                while (var3.hasNext()) {
+                    Map.Entry<String, List<String>> entry = (Map.Entry) var3.next();
+                    if (!((String) entry.getKey()).toLowerCase().startsWith("sec-websocket")) {
+                        filtered.addAll((String) entry.getKey(), (List) entry.getValue());
+                    }
+                }
+
+                return filtered;
+            });
+        }
+
+        return this.headersFilters;
+    }
+
+    static void changeSchemeIfIsWebSocketUpgrade(ServerWebExchange exchange) {
+        URI requestUrl = (URI) exchange.getRequiredAttribute(
+                ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR);
+        String scheme = requestUrl.getScheme().toLowerCase();
+        String upgrade = exchange.getRequest().getHeaders().getUpgrade();
+        if ("WebSocket".equalsIgnoreCase(upgrade) && ("http".equals(scheme) || "https".equals(
+                scheme))) {
+            String wsScheme = convertHttpToWs(scheme);
+            boolean encoded = ServerWebExchangeUtils.containsEncodedParts(requestUrl);
+            URI wsRequestUrl = UriComponentsBuilder.fromUri(requestUrl).scheme(wsScheme)
+                    .build(encoded).toUri();
+            exchange.getAttributes()
+                    .put(ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR, wsRequestUrl);
+            if (log.isTraceEnabled()) {
+                log.trace("changeSchemeTo:[" + wsRequestUrl + "]");
+            }
+        }
+
+    }
+
+    private static class ProxyWebSocketHandler implements WebSocketHandler {
+
+        private final WebSocketClient client;
+        private final URI url;
+        private final HttpHeaders headers;
+        private final List<String> subProtocols;
+
+        ProxyWebSocketHandler(URI url, WebSocketClient client, HttpHeaders headers,
+                List<String> protocols) {
+            this.client = client;
+            this.url = url;
+            this.headers = headers;
+            if (protocols != null) {
+                this.subProtocols = protocols;
+            } else {
+                this.subProtocols = Collections.emptyList();
+            }
+
+        }
+
+        @Override
+        public List<String> getSubProtocols() {
+            return this.subProtocols;
+        }
+
+        @Override
+        public Mono<Void> handle(WebSocketSession session) {
+            return this.client.execute(this.url, this.headers, new WebSocketHandler() {
+                @Override
+                public Mono<Void> handle(WebSocketSession proxySession) {
+                    Mono<Void> serverClose = proxySession.closeStatus()
+                            .filter(__ -> session.isOpen())
+                            .flatMap(session::close);
+                    Mono<Void> proxyClose = session.closeStatus()
+                            .filter(__ -> proxySession.isOpen())
+                            .flatMap(proxySession::close);
+                    // Use retain() for Reactor Netty
+                    Mono<Void> proxySessionSend = proxySession
+                            .send(session.receive().doOnNext(WebSocketMessage::retain));
+                    Mono<Void> serverSessionSend = session
+                            .send(proxySession.receive().doOnNext(WebSocketMessage::retain));
+                    return Mono.zip(proxySessionSend, serverSessionSend, serverClose, proxyClose)
+                            .then();
+                }
+
+                @Override
+                public List<String> getSubProtocols() {
+                    return CustomWebsocketRoutingFilter.ProxyWebSocketHandler.this.subProtocols;
+                }
+            });
+        }
+    }
+}
+
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 f521136..1752f91 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
@@ -326,7 +326,7 @@
                     }
                 } else {
                     // 中标
-                    for (int i = 0; i < auctionGoods.getAuctionStock(); i++) {
+                    for (int i = 0; i < auctionBidRecords.size(); i++) {
                         AuctionBidRecord auctionBidRecord = auctionBidRecords.get(i);
                         auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL);
                         auctionBidRecordList.add(auctionBidRecord);
@@ -335,7 +335,7 @@
                     GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO();
                     goodsStockUpdDTO.setGoodsSkuId(auctionGoods.getGoodsSkuId());
                     goodsStockUpdDTO.setAuctionStock(
-                            auctionGoods.getAuctionStock() - auctionBidRecordList.size());
+                            auctionGoods.getAuctionStock() - auctionBidRecords.size());
                     goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO),
                             SecurityConstants.INNER);
                 }
@@ -721,7 +721,7 @@
                         }
                     } else {
                         // 中标
-                        for (int i = 0; i < auctionGoods.getAuctionStock(); i++) {
+                        for (int i = 0; i < auctionBidRecords.size(); i++) {
                             AuctionBidRecord auctionBidRecord = auctionBidRecords.get(i);
                             auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL);
                             auctionBidRecordList.add(auctionBidRecord);
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 a0806af..a51b10a 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
@@ -978,6 +978,15 @@
                 throw new ServiceException("该拍卖场已结束,不能编辑");
             }
             auctionSalesroom.setId(auctionSalesroomOrg.getId());
+            if (!auctionSalesroomOrg.getType().equals(auctionSalesroom.getType())) {
+                AuctionSalesroomQrCodeVO vo = new AuctionSalesroomQrCodeVO();
+                vo.setAuctionSalesroomNo(auctionSalesroomOrg.getAuctionSalesroomNo());
+                vo.setType(auctionSalesroom.getType().getCode());
+                String url = remoteFileService.obsUpload(
+                                CreateQrCode.createQRCodeStream(objectMapper.writeValueAsString(vo)))
+                        .getData();
+                auctionSalesroom.setQrCode(url);
+            }
             this.updateById(auctionSalesroom);
             List<AuctionSalesroomGoods> list = auctionSalesroomGoodsMapper.selectList(
                     Wrappers.<AuctionSalesroomGoods>lambdaQuery()
@@ -1197,11 +1206,10 @@
                         AuctionSalesroom::getSalesroomName, query.getSalesroomName())
                 .eq(StringUtils.isNotNull(query.getStatus()), AuctionSalesroom::getStatus,
                         query.getStatus())
-                .ne(AuctionSalesroom::getStatus, AuctionStartStatusEnum.ENDED)
                 .between(StringUtils.isNotNull(query.getStartTime()) && StringUtils.isNotNull(
                                 query.getEndTime()), AuctionSalesroom::getStartTime, query.getStartTime(),
                         query.getEndTime())
-                .orderByAsc(AuctionSalesroom::getStartTime)
+                .orderByAsc(AuctionSalesroom::getCreateTime)
                 .page(new Page<>(query.getPageCurr(), query.getPageSize()));
         List<AuctionSalesroom> records = page.getRecords();
         if (StringUtils.isNull(records)) {
@@ -1446,11 +1454,15 @@
             if (auctionBidRecordList.size() >= auctionSalesroomGoods.getSalesroomStock()) {
                 for (int i = 0; i < auctionSalesroomGoods.getSalesroomStock(); i++) {
                     AuctionBidRecord auctionBidRecord = auctionBidRecordList.get(i);
+                    auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL);
+                    auctionBidRecordMapper.updateById(auctionBidRecord);
                     auctionBidRecords.add(auctionBidRecord);
                 }
             } else {
                 for (int i = 0; i < auctionSalesroomGoods.getSalesroomStock(); i++) {
                     AuctionBidRecord auctionBidRecord = auctionBidRecordList.get(i);
+                    auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL);
+                    auctionBidRecordMapper.updateById(auctionBidRecord);
                     auctionBidRecords.add(auctionBidRecord);
                 }
                 // 没有出价记录,回退库存
diff --git a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrowseRecordServiceImpl.java b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrowseRecordServiceImpl.java
index e191799..622ae86 100644
--- a/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrowseRecordServiceImpl.java
+++ b/ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrowseRecordServiceImpl.java
@@ -3,28 +3,24 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.core.constant.SecurityConstants;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.utils.page.PageDTO;
 import com.ruoyi.goods.domain.GoodsBrowseRecord;
-import com.ruoyi.goods.domain.MemberGoodsCollection;
 import com.ruoyi.goods.mapper.GoodsBrowseRecordMapper;
 import com.ruoyi.goods.mapper.GoodsSkuMapper;
 import com.ruoyi.goods.service.IGoodsBrowseRecordService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.system.api.domain.GoodsSku;
 import com.ruoyi.system.api.domain.dto.AuctionCollectionDTO;
 import com.ruoyi.system.api.domain.vo.HomeGoodsSkuListVO;
-import com.ruoyi.system.api.domain.vo.WdMemberAuctionSalesroomVO;
 import com.ruoyi.system.api.feignClient.GoodsSkuClient;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Service;
 
 /**
  * <p>
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 6d1e950..a5d8666 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
@@ -36,7 +36,6 @@
 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.dto.HomeGoodsSkuDTO;
 import com.ruoyi.system.api.domain.dto.ListStatusDTO;
@@ -194,7 +193,8 @@
         Page<GoodsSku> page = this.lambdaQuery()
                 .select(GoodsSku::getId, GoodsSku::getSkuName, GoodsSku::getPrice,
                         GoodsSku::getStock, GoodsSku::getSoldQuantity, GoodsSku::getSortNum,
-                        GoodsSku::getListingStatus)
+                        GoodsSku::getListingStatus, GoodsSku::getUnit, GoodsSku::getSpec,
+                        GoodsSku::getSpecUnit)
                 .like(StringUtils.isNotEmpty(query.getSkuName()), GoodsSku::getSkuName,
                         query.getSkuName())
                 .eq(StringUtils.isNotNull(query.getListingStatus()
@@ -299,11 +299,11 @@
         LambdaQueryWrapper<GoodsSku> wrapper3= Wrappers.lambdaQuery();
         wrapper3.eq(GoodsSku::getDelFlag,0);
         wrapper3.eq(GoodsSku::getListingStatus,0);
-        if(homeGoodsSkuDTO.getId()!=null){
-            List arr=new ArrayList<>();
-            arr.add(homeGoodsSkuDTO.getId());
-            wrapper3.notIn(GoodsSku::getId,arr);
-        }
+        // if(homeGoodsSkuDTO.getId()!=null){
+        //     List arr=new ArrayList<>();
+        //     arr.add(homeGoodsSkuDTO.getId());
+        //     wrapper3.notIn(GoodsSku::getId,arr);
+        // }
         if (homeGoodsSkuDTO.getSkuName()!=null&&homeGoodsSkuDTO.getSkuName()!=""){
             wrapper3.like(GoodsSku::getSkuName,homeGoodsSkuDTO.getSkuName());
         }
diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderController.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderController.java
index 53d3617..980c2d7 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderController.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderController.java
@@ -166,7 +166,7 @@
      * @param couponIds 优惠券id集合
      * @return List<Order>
      */
-    @PostMapping("/order/list-by-coupon")
+    @PostMapping("/list-by-coupon")
     R<List<Order>> getOrderByCouponIds(@RequestBody Collection<Long> couponIds) {
         return R.ok(orderService.getOrderByCouponIds(couponIds));
     }
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 722e517..2aeea8f 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
@@ -40,6 +40,7 @@
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.function.Function;
 import java.util.regex.Matcher;
@@ -236,13 +237,38 @@
         if (orderReturnRequest.getAuditStatus() != AuditStatusEnum.TO_BE_REVIEWED) {
             throw new ServiceException("该售后已被审核");
         }
+        Order order = orderMapper.selectById(orderReturnRequest.getOrderId());
         if (dto.getAuditStatus() == AuditStatusEnum.PASSED) {
-            orderReturnRequest.setStatus(ReturnRequestStatusEnum.TO_BE_RETURNED);
+            if (orderReturnRequest.getRequestType()
+                    .equals(RequestTypeEnum.REFUNDS_AND_RETURNS)) {
+                orderReturnRequest.setStatus(ReturnRequestStatusEnum.TO_BE_RETURNED);
+            } else {
+                orderReturnRequest.setStatus(ReturnRequestStatusEnum.COMPLETED);
+
+                if (Objects.nonNull(order)) {
+                    Paylog paylog = paylogService.lambdaQuery()
+                            .eq(Paylog::getOutTradeNo, order.getOrderNo())
+                            .last("limit 1").one();
+                    if (StringUtils.isNotNull(paylog)) {
+                        PaymentMethodEnum paymentMethod = order.getPaymentMethod();
+                        boolean result = handleRefund(paymentMethod, paylog,
+                                paylog.getOutTradeNo());
+                        if (result) {
+                            paylog.setState(3);// 已退款
+                            paylogService.updateById(paylog);
+                        }
+                    }
+                }
+            }
             orderReturnRequest.setAuditStatus(AuditStatusEnum.PASSED);
         } else {
             orderReturnRequest.setStatus(ReturnRequestStatusEnum.REJECTED);
             orderReturnRequest.setAuditStatus(AuditStatusEnum.REJECTED);
             orderReturnRequest.setRefuseReason(dto.getRefuseComment());
+            if (Objects.nonNull(order)) {
+                order.setIsRequest(1);
+                orderMapper.updateById(order);
+            }
         }
         orderReturnRequest.setAuditTime(LocalDateTime.now());
         this.updateById(orderReturnRequest);
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 3995532..05e2d23 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
@@ -20,6 +20,7 @@
 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.CollUtils;
 import com.ruoyi.common.core.utils.page.PageDTO;
 import com.ruoyi.common.redis.service.RedisService;
 import com.ruoyi.order.controller.management.dto.MgtOrderConfirmShipmentDTO;
@@ -75,6 +76,7 @@
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -85,6 +87,7 @@
 import java.util.stream.Collectors;
 import javax.annotation.Resource;
 import lombok.Synchronized;
+import org.apache.commons.collections.map.HashedMap;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
 import org.springframework.stereotype.Service;
@@ -99,6 +102,7 @@
  * @since 2024-05-16
  */
 @Service
+@SuppressWarnings("unchecked")
 public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements IOrderService {
 
     @Resource
@@ -1182,8 +1186,7 @@
      */
     @Override
     public List<Order> getOrderByCouponIds(Collection<Long> couponIds) {
-        return this.lambdaQuery().in(Order::getCouponId, couponIds)
-                .eq(Order::getOrderStatus, OrderStatusEnum.FINISHED).list();
+        return this.lambdaQuery().in(Order::getCouponId, couponIds).list();
     }
 
     /**
@@ -1239,7 +1242,7 @@
         }
         pageVO = PageDTO.of(page, MgtOrderVO.class);
         List<MgtOrderVO> voList = pageVO.getList();
-        if (query.getOrderFrom() == OrderFromEnum.AUCTION_ORDERS) {
+        if (query.getQueryType() == OrderTypeEnum.AUCTION_ORDER) {
             List<MgtOrderVO> list = voList;
             // 封装参数查询拍卖会
             Set<Long> auctionSalesroomGoodsIdSet = list.stream()
@@ -1249,9 +1252,16 @@
             List<AuctionSalesroom> auctionSalesroomList = auctionClient.getAuctionSalesroomByIds(
                             auctionSalesroomGoodsIdSet, SecurityConstants.INNER)
                     .getData();
-            Map<Long, String> salesroomMap = auctionSalesroomList.stream()
-                    .collect(Collectors.toMap(AuctionSalesroom::getId,
-                            AuctionSalesroom::getSalesroomName));
+            Map<Long, String> salesroomMap = new HashedMap();
+            Set<Long> auctionSalesroomSet = new HashSet<>();
+            if (CollUtils.isNotEmpty(auctionSalesroomList)) {
+                salesroomMap = auctionSalesroomList.stream()
+                        .collect(Collectors.toMap(AuctionSalesroom::getId,
+                                AuctionSalesroom::getSalesroomName));
+                auctionSalesroomList.stream()
+                        .map(AuctionSalesroom::getId)
+                        .collect(Collectors.toSet());
+            }
             // 封装参数查询拍卖订单保证金
             Set<Long> auctionGoodsIdSet = list.stream()
                     .filter(order -> order.getAuctionOrderType()
@@ -1259,36 +1269,39 @@
                     .map(MgtOrderVO::getGoodsSkuId)
                     .collect(Collectors.toSet());
 
-            Set<Long> auctionSalesroomSet = auctionSalesroomList.stream()
-                    .map(AuctionSalesroom::getId)
-                    .collect(Collectors.toSet());
-
-            List<OrderAuctionBond> auctionBondList = orderAuctionBondMapper.selectList(
+            List<OrderAuctionBond> auctionSalesroomBondList = orderAuctionBondMapper.selectList(
                     Wrappers.lambdaQuery(OrderAuctionBond.class)
-                            .in(OrderAuctionBond::getAuctionGoodsId, auctionGoodsIdSet)
-                            .in(OrderAuctionBond::getAuctionSalesroomId, auctionSalesroomSet)
+                            .in(CollUtils.isNotEmpty(auctionSalesroomSet),
+                                    OrderAuctionBond::getAuctionSalesroomId, auctionSalesroomSet)
+                            .eq(OrderAuctionBond::getBoundStatus, BondStatusEnum.PAID)
+                            .groupBy(OrderAuctionBond::getAuctionSalesroomId,
+                                    OrderAuctionBond::getMemberId));
+            List<OrderAuctionBond> auctionGoodsBondList = orderAuctionBondMapper.selectList(
+                    Wrappers.lambdaQuery(OrderAuctionBond.class)
+                            .in(CollUtils.isNotEmpty(auctionGoodsIdSet),
+                                    OrderAuctionBond::getAuctionGoodsId, auctionGoodsIdSet)
                             .eq(OrderAuctionBond::getBoundStatus,
-                                    BondStatusEnum.PAID));
-            Map<String, OrderAuctionBond> auctionSalesroomBondMap = auctionBondList.stream()
+                                    BondStatusEnum.PAID)
+                            .groupBy(OrderAuctionBond::getAuctionGoodsId,
+                                    OrderAuctionBond::getMemberId));
+            Map<String, OrderAuctionBond> auctionSalesroomBondMap = auctionSalesroomBondList.stream()
                     .filter(bond -> bond.getBondType() == AuctionOrderTypeEnum.AUCTION_ITEMS)
                     .collect(Collectors.toMap(
                             bond -> bond.getAuctionSalesroomId() + "-" + bond.getMemberId(),
                             Function.identity()));
-            Map<String, OrderAuctionBond> auctionSalesroomGoodsBondMap = auctionBondList.stream()
+            Map<String, OrderAuctionBond> auctionSalesroomGoodsBondMap = auctionGoodsBondList.stream()
                     .filter(bond -> bond.getBondType() == AuctionOrderTypeEnum.REGULAR_ITEMS)
                     .collect(Collectors.toMap(
                             bond -> bond.getAuctionGoodsId() + "-" + bond.getMemberId(),
                             Function.identity()));
-
-            list.forEach(order -> {
+            for (MgtOrderVO order : list) {
                 if (order.getAuctionOrderType() == AuctionOrderTypeEnum.AUCTION_ITEMS) {
                     order.setSalesroomName(
-                            StringUtils.isNotBlank(salesroomMap.get(order.getGoodsSkuId()))
+                            StringUtils.isNotBlank(salesroomMap.get(order.getAuctionSalesroomId()))
                                     ? salesroomMap.get(order.getAuctionSalesroomId()) : "无");
                     order.setBoundStatus(
                             StringUtils.isNotNull(auctionSalesroomBondMap.get(
-                                            order.getAuctionSalesroomId() + "-" + order.getMemberId())
-                                    .getBoundStatus())
+                                    order.getAuctionSalesroomId() + "-" + order.getMemberId()))
                                     ? auctionSalesroomBondMap.get(
                                             order.getAuctionSalesroomId() + "-" + order.getMemberId())
                                     .getBoundStatus()
@@ -1298,28 +1311,30 @@
                     order.setSalesroomName("无");
                     order.setBoundStatus(
                             StringUtils.isNotNull(auctionSalesroomGoodsBondMap.get(
-                                            order.getGoodsSkuId() + "-" + order.getMemberId())
-                                    .getBoundStatus())
+                                    order.getGoodsSkuId() + "-" + order.getMemberId()))
                                     ? auctionSalesroomGoodsBondMap.get(
                                             order.getGoodsSkuId() + "-" + order.getMemberId())
                                     .getBoundStatus()
                                     : null);
                 }
-            });
+            }
+
         }
         Set<Long> memberVoIdSet = voList.stream().map(MgtOrderVO::getMemberId)
                 .collect(Collectors.toSet());
         List<Member> data = memberClient.getMemberListByIds(memberVoIdSet, SecurityConstants.INNER)
                 .getData();
-        Map<Long, Member> memberMap = data.stream()
-                .collect(Collectors.toMap(Member::getId, e -> e));
-        voList = voList.stream().peek(order -> {
-            Member member = memberMap.get(order.getMemberId());
-            if (StringUtils.isNotNull(member)) {
-                order.setNickname(member.getNickname());
-                order.setPhone(member.getPhone());
-            }
-        }).collect(Collectors.toList());
+        if (CollUtils.isNotEmpty(data)) {
+            Map<Long, Member> memberMap = data.stream()
+                    .collect(Collectors.toMap(Member::getId, e -> e));
+            voList = voList.stream().peek(order -> {
+                Member member = memberMap.get(order.getMemberId());
+                if (StringUtils.isNotNull(member)) {
+                    order.setNickname(member.getNickname());
+                    order.setPhone(member.getPhone());
+                }
+            }).collect(Collectors.toList());
+        }
         return pageVO;
     }
 
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/CouponReceiveDetailVO.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/CouponReceiveDetailVO.java
index b9782f6..003056f 100644
--- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/CouponReceiveDetailVO.java
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/CouponReceiveDetailVO.java
@@ -20,6 +20,9 @@
 public class CouponReceiveDetailVO implements Serializable {
 
     private static final long serialVersionUID = 7898162954825380293L;
+    @ApiModelProperty(value = "会员优惠券id")
+    @ExcelIgnore
+    private Long id;
 
     @ApiModelProperty(value = "优惠券id")
     @ExcelIgnore
@@ -44,7 +47,7 @@
     @ApiModelProperty(value = "使用时间")
     @ExcelProperty("使用时间")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
-    private LocalDateTime createTime;
+    private LocalDateTime useTime;
 
     @ApiModelProperty(value = "使用状态 0:未使用, 1:已使用")
     @ExcelProperty(value = "使用状态", converter = CouponUseEnumConverter.class)
diff --git a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/CouponServiceImpl.java b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/CouponServiceImpl.java
index 4e80ed1..0cd5900 100644
--- a/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/CouponServiceImpl.java
+++ b/ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/CouponServiceImpl.java
@@ -213,7 +213,7 @@
         List<CouponReceiveDetailVO> usedCouponList = couponReceiveDetailVOList.stream()
                 .filter(item -> item.getCouponStatus().equals(
                         CouponUseEnum.USED)).collect(Collectors.toList());
-        Set<Long> couponIdSet = usedCouponList.stream().map(CouponReceiveDetailVO::getCouponId)
+        Set<Long> couponIdSet = usedCouponList.stream().map(CouponReceiveDetailVO::getId)
                 .collect(Collectors.toSet());
         Map<String, Order> orderMap = null;
         Map<Long, Member> memberMap = null;
@@ -243,15 +243,14 @@
                     couponReceiveDetailVO.setNickname(member.getNickname());
                     couponReceiveDetailVO.setPhone(member.getPhone());
                 }
-            } else if (StringUtils.isNotEmpty(orderMap)) {
-                Order order = orderMap.get(couponReceiveDetailVO.getCouponId() + "-"
+            }
+            if (StringUtils.isNotEmpty(orderMap)) {
+                Order order = orderMap.get(couponReceiveDetailVO.getId() + "-"
                         + couponReceiveDetailVO.getMemberId());
                 if (StringUtils.isNotNull(order)) {
                     couponReceiveDetailVO.setOrderNo(order.getOrderNo());
-                    couponReceiveDetailVO.setCreateTime(order.getCreateTime());
+                    couponReceiveDetailVO.setUseTime(order.getCreateTime());
                 }
-            } else {
-                break;
             }
         }
     }
diff --git a/ruoyi-modules/ruoyi-system/pom.xml b/ruoyi-modules/ruoyi-system/pom.xml
index 579270f..68b4ea3 100644
--- a/ruoyi-modules/ruoyi-system/pom.xml
+++ b/ruoyi-modules/ruoyi-system/pom.xml
@@ -101,6 +101,11 @@
             <groupId>com.ruoyi</groupId>
             <artifactId>ruoyi-common-seata</artifactId>
         </dependency>
+        <!-- WebSocket-->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-websocket</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
index ce9a62f..2eea06d 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
@@ -234,9 +234,10 @@
         SysUser sysUser = userService.selectUserById(userId);
         if (sysUser.getStatus().equals("0")) {
             sysUser.setStatus("1");
-
             Object tokenObj = redisService.getCacheObject(getUserTokenKey(userId));
-            authClient.logout(tokenObj.toString(), SecurityConstants.INNER);
+            if (Objects.nonNull(tokenObj)) {
+                authClient.logout(tokenObj.toString(), SecurityConstants.INNER);
+            }
         } else {
             sysUser.setStatus("0");
         }

--
Gitblit v1.7.1