mitao
2024-07-26 357bf93f7fa56e414ad54d4fbfbf6bd97da5b1d2
修改bug
1个文件已添加
12个文件已修改
399 ■■■■ 已修改文件
ruoyi-api/ruoyi-api-system/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/CustomWebsocketRoutingFilter.java 210 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsBrowseRecordServiceImpl.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/GoodsSkuServiceImpl.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/inner/OrderController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderReturnRequestServiceImpl.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/controller/management/vo/CouponReceiveDetailVO.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-promotion/src/main/java/com/ruoyi/promotion/service/impl/CouponServiceImpl.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>
ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/CustomWebsocketRoutingFilter.java
New file
@@ -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;
                }
            });
        }
    }
}
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);
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);
                }
                // 没有出价记录,回退库存
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>
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());
        }
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));
    }
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);
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;
    }
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)
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;
            }
        }
    }
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>
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");
        }