From 06f59ebb282ab74565585f77dde772d228d6075a Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期二, 18 六月 2024 14:13:10 +0800 Subject: [PATCH] 修改bug --- ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java | 167 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 140 insertions(+), 27 deletions(-) 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 69c7b40..c193f7b 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 @@ -4,6 +4,8 @@ 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.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.common.collect.Lists; import com.ruoyi.auction.controller.management.dto.MgtAuctionGoodsDTO; import com.ruoyi.auction.controller.management.dto.MgtAuctionGoodsQuery; @@ -17,44 +19,45 @@ import com.ruoyi.auction.service.IAuctionBrowseRecordService; import com.ruoyi.auction.service.IAuctionGoodsService; import com.ruoyi.auction.service.IMemberAuctionCollectionService; +import com.ruoyi.auction.service.async.AuctionAsyncMethodService; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.enums.AuctionOrderTypeEnum; import com.ruoyi.common.core.enums.AuctionStartStatusEnum; import com.ruoyi.common.core.enums.BidStatusEnum; import com.ruoyi.common.core.enums.BondStatusEnum; +import com.ruoyi.common.core.enums.ClientTypeEnum; +import com.ruoyi.common.core.enums.ListingStatusEnum; import com.ruoyi.common.core.enums.OrderFromEnum; 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.PageDTO; -import com.ruoyi.system.api.domain.AuctionGoods; -import com.ruoyi.system.api.domain.GoodsBrand; -import com.ruoyi.system.api.domain.GoodsCategory; -import com.ruoyi.system.api.domain.GoodsFlavorType; -import com.ruoyi.system.api.domain.GoodsSeries; -import com.ruoyi.system.api.domain.GoodsSku; -import com.ruoyi.system.api.domain.Member; -import com.ruoyi.system.api.domain.MemberAddress; -import com.ruoyi.system.api.domain.OrderAuctionBond; +import com.ruoyi.system.api.constants.NotificationTypeConstant; +import com.ruoyi.system.api.domain.*; import com.ruoyi.system.api.domain.dto.AuctionGoodsListDTO; import com.ruoyi.system.api.domain.dto.AuctionGoodsListPageDTO; import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO; +import com.ruoyi.system.api.domain.dto.ListStatusDTO; import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomDTO; import com.ruoyi.system.api.domain.dto.OrderDTO; import com.ruoyi.system.api.domain.dto.RefundDTO; import com.ruoyi.system.api.domain.vo.AuctionGoodsListVO; import com.ruoyi.system.api.domain.vo.AuctionGoodsinfoVO; +import com.ruoyi.system.api.feignClient.AuctionClient; import com.ruoyi.system.api.feignClient.GoodsSkuClient; import com.ruoyi.system.api.feignClient.MemberClient; import com.ruoyi.system.api.feignClient.OrderClient; +import com.ruoyi.system.api.util.WebSocketUsers; import io.seata.spring.annotation.GlobalTransactional; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; import javax.annotation.Resource; import lombok.RequiredArgsConstructor; @@ -78,8 +81,12 @@ private final GoodsSkuClient goodsSkuClient; private final MemberClient memberClient; private final OrderClient orderClient; - private final IAuctionBidRecordService auctionBidRecordService; + private final AuctionClient auctionClient; + private final IAuctionBidRecordService auctionBidRecordService; + private final AuctionAsyncMethodService auctionAsyncMethodService; + // 创建一个静态共享的ObjectMapper实例以重用 + private static final ObjectMapper objectMapper = new ObjectMapper(); @Resource private IMemberAuctionCollectionService memberAuctionCollectionService; @@ -98,18 +105,23 @@ @Override public PageDTO<MgtAuctionGoodsVO> getAuctionGoodsPage(MgtAuctionGoodsQuery query) { Set<Long> goodsSkuIdList = null; + Page<AuctionGoods> page = new Page<>(query.getPageCurr(), query.getPageSize()); if (StringUtils.isNotEmpty(query.getGoodsSkuName())) { List<GoodsSku> goodsSku = goodsSkuClient.getGoodsByName(query.getGoodsSkuName(), - SecurityConstants.INNER) - .getData(); + SecurityConstants.INNER).getData(); + if (StringUtils.isEmpty(goodsSku)) { + return PageDTO.empty(page); + } goodsSkuIdList = goodsSku.stream().map(GoodsSku::getId) .collect(Collectors.toSet()); + } - Page<AuctionGoods> page = this.lambdaQuery() + page = this.lambdaQuery() .select(AuctionGoods::getId, AuctionGoods::getGoodsSkuId, AuctionGoods::getListingStatus, AuctionGoods::getStartStatus, AuctionGoods::getStartTime, AuctionGoods::getEndTime, - AuctionGoods::getAuctionStock, AuctionGoods::getMinimumMarkupAmount).in( + AuctionGoods::getAuctionStock, AuctionGoods::getMinimumMarkupAmount, + AuctionGoods::getAuthentication, AuctionGoods::getStartingPrice).in( StringUtils.isNotEmpty(goodsSkuIdList), AuctionGoods::getGoodsSkuId, goodsSkuIdList).eq(StringUtils.isNotNull(query.getAuthentication()), AuctionGoods::getAuthentication, query.getAuthentication()) @@ -118,7 +130,28 @@ .eq(StringUtils.isNotNull(query.getStartStatus()), AuctionGoods::getStartStatus, query.getStartStatus()) .page(new Page<>(query.getPageCurr(), query.getPageSize())); - return PageDTO.of(page, MgtAuctionGoodsVO.class); + if (StringUtils.isEmpty(page.getRecords())) { + return PageDTO.empty(page); + } + // 查询商品信息 + Set<Long> goodsIdList = page.getRecords().stream().map(AuctionGoods::getGoodsSkuId) + .collect(Collectors.toSet()); + List<GoodsSku> data = goodsSkuClient.getGoodsListByIds(goodsIdList, SecurityConstants.INNER) + .getData(); + PageDTO<MgtAuctionGoodsVO> pageDTO = PageDTO.of(page, + MgtAuctionGoodsVO.class); + if (StringUtils.isNotEmpty(data)) { + Map<Long, GoodsSku> goodsSkuMap = data.stream() + .collect(Collectors.toMap(GoodsSku::getId, e -> e)); + for (MgtAuctionGoodsVO mgtAuctionGoodsVO : pageDTO.getList()) { + GoodsSku goodsSku = goodsSkuMap.get(mgtAuctionGoodsVO.getGoodsSkuId()); + if (StringUtils.isNotNull(goodsSku)) { + mgtAuctionGoodsVO.setGoodsSkuName(goodsSku.getSkuName()); + mgtAuctionGoodsVO.setSpec(goodsSku.getSpec()); + } + } + } + return pageDTO; } @Override @@ -186,6 +219,7 @@ auctionGoodsOrg.getAuctionStock() - dto.getAuctionStock()); goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), SecurityConstants.INNER); + auctionAsyncMethodService.auctionGoodsScheduleTask(Lists.newArrayList(auctionGoods)); } } @@ -203,6 +237,12 @@ } MgtAuctionGoodsVO auctionGoodsVO = BeanUtils.copyBean(auctionGoods, MgtAuctionGoodsVO.class); + // 远程调用商品服务,获取商品信息 + GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(auctionGoods.getGoodsSkuId(), + SecurityConstants.INNER).getData(); + if (StringUtils.isNotNull(goodsSku)) { + auctionGoodsVO.setGoodsSkuName(goodsSku.getSkuName()); + } if (!auctionGoods.getStartStatus().equals(AuctionStartStatusEnum.IN_PREVIEW)) { List<AuctionBidRecord> list = auctionBidRecordService.lambdaQuery() .eq(AuctionBidRecord::getTargetId, auctionGoodsVO.getId()) @@ -321,7 +361,7 @@ return null; }).filter(Objects::nonNull).collect(Collectors.toList()); // 远程调用订单服务修改订单状态 - orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.PAID); + orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.PAID,SecurityConstants.INNER); } } } @@ -352,12 +392,14 @@ auctionGoodsVO.setStartTime(auctionGoods.getStartTime()); auctionGoodsVO.setStartingPrice(auctionGoods.getStartingPrice()); auctionGoodsVO.setStartStatus(auctionGoods.getStartStatus()); + auctionGoodsVO.setAuctionStock(auctionGoods.getAuctionStock()); GoodsSku goodsSkuOne = goodsSkuClient.getGoodsSkuOne(auctionGoods.getGoodsSkuId(), SecurityConstants.INNER).getData(); auctionGoodsVO.setUnit(goodsSkuOne.getUnit()); auctionGoodsVO.setSpec(goodsSkuOne.getSpec()); auctionGoodsVO.setSpecUnit(goodsSkuOne.getSpecUnit()); auctionGoodsVO.setGoodsSkuName(goodsSkuOne.getSkuName()); auctionGoodsVO.setCoverPic(goodsSkuOne.getCoverPic()); + auctionGoodsVO.setYears(String.valueOf(goodsSkuOne.getYears())); auctionGoodsVOS.add(auctionGoodsVO); } @@ -378,8 +420,9 @@ auctionGoodsinfoVO.setStartTime(byId.getStartTime()); auctionGoodsinfoVO.setEndTime(byId.getEndTime()); auctionGoodsinfoVO.setUnit(goodsSkuOne.getUnit()); + auctionGoodsinfoVO.setBond(byId.getBond()); auctionGoodsinfoVO.setDescription(goodsSkuOne.getDescription()); - auctionGoodsinfoVO.setYears(goodsSkuOne.getYears()); + auctionGoodsinfoVO.setYears(String.valueOf(goodsSkuOne.getYears())); GoodsBrand data = goodsSkuClient.getBrandOne(goodsSkuOne.getBrandId(), SecurityConstants.INNER).getData(); GoodsCategory data1 = goodsSkuClient.getCategoryOne(goodsSkuOne.getCategoryId(), SecurityConstants.INNER).getData(); GoodsSeries data2 = goodsSkuClient.getSeriesOne(goodsSkuOne.getSeriesId(), SecurityConstants.INNER).getData(); @@ -396,6 +439,9 @@ auctionGoodsinfoVO.setSpecUnit(goodsSkuOne.getSpecUnit()); auctionGoodsinfoVO.setShareTitle(goodsSkuOne.getShareTitle()); auctionGoodsinfoVO.setSpecUnit(goodsSkuOne.getSpecUnit()); + auctionGoodsinfoVO.setDetail(goodsSkuOne.getDetail()); + auctionGoodsinfoVO.setBond(byId.getBond()); + auctionGoodsinfoVO.setYears(String.valueOf(goodsSkuOne.getYears())); LambdaQueryWrapper<AuctionBidRecord> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(AuctionBidRecord::getMemberId,auctionGoodsListDTO.getMemberId()); wrapper1.eq(AuctionBidRecord::getAuctionType,1); @@ -407,6 +453,15 @@ auctionGoodsinfoVO.setPresentBid(list1.getLastBidAmount()); if (list1.getStatus().getCode()==2){ auctionGoodsinfoVO.setIsStatus(2); + + OrderDTO orderDTO =new OrderDTO(); + orderDTO.setMemberId(auctionGoodsListDTO.getMemberId()); + orderDTO.setGoodsSkuId(byId.getId()); + Order data4 = orderClient.getOrderOne1(orderDTO, SecurityConstants.INNER).getData(); + if (data4!=null){ + auctionGoodsinfoVO.setOrderId(data4.getId()); + auctionGoodsinfoVO.setOrderNo(data4.getOrderNo()); + } }else{ auctionGoodsinfoVO.setIsStatus(1); } @@ -432,19 +487,14 @@ } LocalDateTime now = LocalDateTime.now(); - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - String formattedDate = now.format(formatter); - LocalDateTime parseTime = LocalDateTime.parse(formattedDate, formatter); LocalDateTime newTime7 = now.minusDays(7); - String formattedDate7 = newTime7.format(formatter); - LocalDateTime parseTime7 = LocalDateTime.parse(formattedDate7, formatter); LambdaQueryWrapper<AuctionBrowseRecord> wrapper3=Wrappers.lambdaQuery(); wrapper3.eq(AuctionBrowseRecord::getDelFlag,0); wrapper3.eq(AuctionBrowseRecord::getTargetId,auctionGoodsListDTO.getGoodsSkuId()); wrapper3.eq(AuctionBrowseRecord::getMemberId,auctionGoodsListDTO.getMemberId()); - wrapper3.ge(AuctionBrowseRecord::getCreateTime, parseTime7) - .le(AuctionBrowseRecord::getCreateTime, parseTime); + wrapper3.ge(AuctionBrowseRecord::getCreateTime, newTime7) + .le(AuctionBrowseRecord::getCreateTime, now); List<AuctionBrowseRecord> list = iAuctionBrowseRecordService.list(wrapper3); if (list.size()==0){ AuctionBrowseRecord auctionBrowseRecord=new AuctionBrowseRecord(); @@ -465,11 +515,20 @@ memberAuctionSalesroomDTO.setMemberId(auctionGoodsListDTO.getMemberId()); List<OrderAuctionBond> data = orderClient.getAuctionGoodsOrderAuctionBondList(auctionGoodsListDTO, SecurityConstants.INNER).getData(); Set<Long> goodsSkuIdList = null; - goodsSkuIdList = data.stream().map(OrderAuctionBond::getAuctionSalesroomId) - .collect(Collectors.toSet()); + if (data!=null){ + goodsSkuIdList = data.stream().map(OrderAuctionBond::getAuctionSalesroomId) + .collect(Collectors.toSet()); + }else { + Set<Long> goodsSkuIdList1 =new HashSet<>(); + goodsSkuIdList1.add(0L); + goodsSkuIdList=goodsSkuIdList1; + } AuctionGoodsListPageDTO auctionGoodsListPageDTO=new AuctionGoodsListPageDTO(); - auctionGoodsListPageDTO.setGoodsSkuIdList(goodsSkuIdList); + if (goodsSkuIdList!=null){ + auctionGoodsListPageDTO.setGoodsSkuIdList(goodsSkuIdList); + } + if (auctionGoodsListDTO.getStartStatus()!=4){ auctionGoodsListPageDTO.setStartStatus(auctionGoodsListDTO.getStartStatus()); } @@ -516,4 +575,58 @@ page.setRecords(auctionGoodsVOS); return PageDTO.of(page); } + + @Override + public void endAuctionGoods(Long id) throws JsonProcessingException { + AuctionGoods auctionGoods = this.getById(id); + if (StringUtils.isNotNull(auctionGoods) && auctionGoods.getListingStatus().equals( + ListingStatusEnum.ON_SHELVES) && auctionGoods.getStartStatus() + .equals(AuctionStartStatusEnum.IN_AUCTION)) { + this.lambdaUpdate().set(AuctionGoods::getStartStatus, AuctionStartStatusEnum.ENDED) + .eq(AuctionGoods::getId, id); + // TODO 退保证金 + Map<String, Object> map = new ConcurrentHashMap<>(); + map.put("notification_type", NotificationTypeConstant.AUCTION_GOODS); + map.put("notification_time", LocalDateTime.now()); + map.put("target_id", id); + map.put("message_type", "end"); + String msg = objectMapper.writeValueAsString(map); + WebSocketUsers.sendMessageToUsersByType(1, msg); + log.info("===================>发送websocket通知,消息体{}", msg); + } + } + + @Override + public void startAuctionGoods(Long id) throws JsonProcessingException { + AuctionGoods auctionGoods = this.getById(id); + if (StringUtils.isNotNull(auctionGoods) && auctionGoods.getListingStatus().equals( + ListingStatusEnum.ON_SHELVES) && auctionGoods.getStartStatus() + .equals(AuctionStartStatusEnum.IN_PREVIEW)) { + this.lambdaUpdate().set(AuctionGoods::getStartStatus, AuctionStartStatusEnum.IN_AUCTION) + .eq(AuctionGoods::getId, id); + Map<String, Object> map = new ConcurrentHashMap<>(); + map.put("notification_type", NotificationTypeConstant.AUCTION_GOODS); + map.put("notification_time", LocalDateTime.now()); + map.put("target_id", id); + map.put("message_type", "start"); + String msg = objectMapper.writeValueAsString(map); + WebSocketUsers.sendMessageToUsersByType(ClientTypeEnum.MEMBER.getCode(), msg); + log.info("===================>发送websocket通知,消息体{}", msg); + } + } + + /** + * 下架/上架 拍卖商品 + * + * @param dto 商品上下架状态对象 + */ + @Override + public void updStatus(ListStatusDTO dto) { + AuctionGoods auctionGoods = this.getById(dto.getId()); + if (StringUtils.isNull(auctionGoods)) { + throw new ServiceException("拍卖商品不存在"); + } + auctionGoods.setListingStatus(dto.getListingStatus()); + this.updateById(auctionGoods); + } } -- Gitblit v1.7.1