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