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"); }