From 2dcde26e44e85d84c3a20fee0aaed3724edba3bc Mon Sep 17 00:00:00 2001 From: rentaiming <806181062@qq.com> Date: 星期一, 03 六月 2024 14:11:40 +0800 Subject: [PATCH] 用户端商品 --- ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java | 94 +++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 91 insertions(+), 3 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..e5d9bda 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,16 +19,19 @@ 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.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.constants.NotificationTypeConstant; import com.ruoyi.system.api.domain.AuctionGoods; import com.ruoyi.system.api.domain.GoodsBrand; import com.ruoyi.system.api.domain.GoodsCategory; @@ -39,6 +44,7 @@ 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; @@ -47,6 +53,7 @@ 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; @@ -55,6 +62,7 @@ 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; @@ -79,7 +87,9 @@ private final MemberClient memberClient; private final OrderClient orderClient; private final IAuctionBidRecordService auctionBidRecordService; - + private final AuctionAsyncMethodService auctionAsyncMethodService; + // 创建一个静态共享的ObjectMapper实例以重用 + private static final ObjectMapper objectMapper = new ObjectMapper(); @Resource private IMemberAuctionCollectionService memberAuctionCollectionService; @@ -118,7 +128,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.getTotal(), page.getPages()); + } + // 查询商品信息 + 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 +217,7 @@ auctionGoodsOrg.getAuctionStock() - dto.getAuctionStock()); goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), SecurityConstants.INNER); + auctionAsyncMethodService.auctionGoodsScheduleTask(Lists.newArrayList(auctionGoods)); } } @@ -358,6 +390,7 @@ auctionGoodsVO.setSpecUnit(goodsSkuOne.getSpecUnit()); auctionGoodsVO.setGoodsSkuName(goodsSkuOne.getSkuName()); auctionGoodsVO.setCoverPic(goodsSkuOne.getCoverPic()); + auctionGoodsVO.setYears(String.valueOf(goodsSkuOne.getYears())); auctionGoodsVOS.add(auctionGoodsVO); } @@ -379,7 +412,7 @@ auctionGoodsinfoVO.setEndTime(byId.getEndTime()); auctionGoodsinfoVO.setUnit(goodsSkuOne.getUnit()); 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 +429,8 @@ auctionGoodsinfoVO.setSpecUnit(goodsSkuOne.getSpecUnit()); auctionGoodsinfoVO.setShareTitle(goodsSkuOne.getShareTitle()); auctionGoodsinfoVO.setSpecUnit(goodsSkuOne.getSpecUnit()); + auctionGoodsinfoVO.setDetail(goodsSkuOne.getDetail()); + auctionGoodsinfoVO.setYears(String.valueOf(goodsSkuOne.getYears())); LambdaQueryWrapper<AuctionBidRecord> wrapper1= Wrappers.lambdaQuery(); wrapper1.eq(AuctionBidRecord::getMemberId,auctionGoodsListDTO.getMemberId()); wrapper1.eq(AuctionBidRecord::getAuctionType,1); @@ -516,4 +551,57 @@ 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_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.sendMessageToUsersByText(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_AUCTION)) { + this.lambdaUpdate().set(AuctionGoods::getStartStatus, AuctionStartStatusEnum.ENDED) + .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", "end"); + String msg = objectMapper.writeValueAsString(map); + WebSocketUsers.sendMessageToUsersByText(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