From a756255136e9244180f90d6dcfb51529e2ac8a9b Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期一, 03 六月 2024 21:13:35 +0800 Subject: [PATCH] 提交【管理后台】-大屏操作台相关接口 --- ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java | 184 +++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 173 insertions(+), 11 deletions(-) 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 bfb52e2..39216c6 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 @@ -14,6 +14,7 @@ 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.google.common.collect.Lists; import com.ruoyi.auction.controller.forepart.dto.AuctionSalesroomGoodsDTO; import com.ruoyi.auction.controller.forepart.dto.ForepartAuctionBidRecordDTO; import com.ruoyi.auction.controller.forepart.vo.ForepartAuctionSalesroomGoodsVO; @@ -23,8 +24,11 @@ import com.ruoyi.auction.controller.management.dto.MgtAuctionSaleroomBidRecordQuery; import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomDTO; import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomGoodsDTO; +import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomGoodsQuery; import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomQuery; import com.ruoyi.auction.controller.management.dto.MgtScreenBidPage; +import com.ruoyi.auction.controller.management.dto.MgtScreenSalesroomGoodsDTO; +import com.ruoyi.auction.controller.management.dto.MgtScreenVideoDTO; import com.ruoyi.auction.controller.management.vo.MgtAuctionBidRecordVO; import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomGoodsVO; import com.ruoyi.auction.controller.management.vo.MgtAuctionSalesroomScreenVO; @@ -42,6 +46,7 @@ import com.ruoyi.auction.service.IAuctionVideoService; import com.ruoyi.auction.util.CreateQrCode; import com.ruoyi.auction.util.HttpUtils; +import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.enums.AuctionGoodsStatusEnum; @@ -62,6 +67,7 @@ import com.ruoyi.system.api.domain.GoodsSku; import com.ruoyi.system.api.domain.Member; import com.ruoyi.system.api.domain.OrderAuctionBond; +import com.ruoyi.system.api.domain.PromotionVideo; import com.ruoyi.system.api.domain.SysUser; import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; import com.ruoyi.system.api.domain.dto.BidDTO; @@ -75,6 +81,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.feignClient.PromotionClient; import com.ruoyi.system.api.feignClient.SysUserClient; import io.seata.spring.annotation.GlobalTransactional; import java.math.BigDecimal; @@ -137,6 +144,8 @@ @Resource private IAuctionBrowseRecordService iAuctionBrowseRecordService; + @Resource + private PromotionClient promotionClient; //微信 private static final String ACCESS_TOKEN_HOST = "https://api.weixin.qq.com/cgi-bin/token"; @@ -810,21 +819,22 @@ /** * 查看详情 - * * @param id 拍卖会id - * @return 拍卖场视图对象 + * @param isScreen 是否为大屏控制台 + * @return MgtAuctionSalesroomVO */ @Override - public MgtAuctionSalesroomVO getAuctionSalesroom(Long id) { + public MgtAuctionSalesroomVO getAuctionSalesroom(Long id, Boolean isScreen) { // 获取拍卖场 AuctionSalesroom auctionSalesroom = this.getById(id); MgtAuctionSalesroomVO mgtAuctionSalesroomVO = BeanUtils.copyBean(auctionSalesroom, MgtAuctionSalesroomVO.class); - // 获取拍卖场商品 - LambdaQueryWrapper<AuctionSalesroomGoods> wrappers=new LambdaQueryWrapper<AuctionSalesroomGoods>(); - wrappers.eq(AuctionSalesroomGoods::getAuctionSalesroomId, id); - wrappers.orderByDesc(AuctionSalesroomGoods::getSortNum); - List<AuctionSalesroomGoods> list = auctionSalesroomGoodsMapper.selectList(wrappers); + List<AuctionSalesroomGoods> list; + if (isScreen) { + list = getAuctionSalesroomGoods(id, Boolean.TRUE); + } else { + list = getAuctionSalesroomGoods(id, null); + } if (StringUtils.isNotEmpty(list)) { List<MgtAuctionSalesroomGoodsVO> mgtAuctionSalesroomGoodsVOS = BeanUtils.copyList(list, MgtAuctionSalesroomGoodsVO.class); @@ -848,6 +858,16 @@ mgtAuctionSalesroomVO.setAuctionSalesroomGoodsVOS(mgtAuctionSalesroomGoodsVOS); } return mgtAuctionSalesroomVO; + } + + private List<AuctionSalesroomGoods> getAuctionSalesroomGoods(Long id, Boolean isBackup) { + // 获取拍卖场商品 + LambdaQueryWrapper<AuctionSalesroomGoods> wrappers = new LambdaQueryWrapper<AuctionSalesroomGoods>(); + wrappers.eq(AuctionSalesroomGoods::getAuctionSalesroomId, id); + wrappers.eq(StringUtils.isNotNull(isBackup), AuctionSalesroomGoods::getBackupStatus, + isBackup); + wrappers.orderByDesc(AuctionSalesroomGoods::getSortNum); + return auctionSalesroomGoodsMapper.selectList(wrappers); } /** @@ -936,7 +956,7 @@ */ @Override public MgtAuctionSalesroomScreenVO getAuctionSalesroomDetail(Long id) { - MgtAuctionSalesroomVO mgtAuctionSalesroomVO = this.getAuctionSalesroom(id); + MgtAuctionSalesroomVO mgtAuctionSalesroomVO = this.getAuctionSalesroom(id, Boolean.TRUE); MgtAuctionSalesroomScreenVO vo = BeanUtils.copyBean( mgtAuctionSalesroomVO, MgtAuctionSalesroomScreenVO.class); if (vo.getStatus().equals(AuctionStartStatusEnum.IN_AUCTION)) { @@ -987,14 +1007,14 @@ /** * 进入详情-出价会员列表 * - * @param mgtScreenBidPage + * @param mgtScreenBidPage 分页参数对象 * @return PageDTO<MgtAuctionBidRecordVO> */ @Override public PageDTO<MgtAuctionBidRecordVO> getScreenBidRecordList( MgtScreenBidPage mgtScreenBidPage) { MgtAuctionSalesroomVO mgtAuctionSalesroomVO = this.getAuctionSalesroom( - mgtScreenBidPage.getId()); + mgtScreenBidPage.getId(), Boolean.TRUE); List<MgtAuctionSalesroomGoodsVO> auctionSalesroomGoodsVOS = mgtAuctionSalesroomVO.getAuctionSalesroomGoodsVOS(); if (StringUtils.isEmpty(auctionSalesroomGoodsVOS)) { throw new ServiceException("该拍卖会暂无拍卖商品"); @@ -1017,4 +1037,146 @@ } return PageDTO.of(page, MgtAuctionBidRecordVO.class); } + + /** + * 添加商品 + * + * @param dto 大屏操作台添加商品数据传输对象 + */ + @Override + @Transactional + @GlobalTransactional(rollbackFor = Exception.class) + public void addGoods(MgtScreenSalesroomGoodsDTO dto) { + GoodsSku data = goodsSkuClient.getGoodsSkuOne(dto.getGoodsSkuId(), SecurityConstants.INNER) + .getData(); + if (StringUtils.isNull(data)) { + throw new ServiceException("商品不存在"); + } + // 扣减库存 + GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); + goodsStockUpdDTO.setGoodsSkuId(data.getId()); + goodsStockUpdDTO.setAuctionStock(dto.getSalesroomStock() * -1); + R<?> result = goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), + SecurityConstants.INNER); + if (result.getCode() != Constants.SUCCESS) { + throw new ServiceException("添加商品失败"); + } + AuctionSalesroomGoods auctionSalesroomGoods = BeanUtils.copyBean(dto, + AuctionSalesroomGoods.class); + auctionSalesroomGoods.setBackupStatus(false); + auctionSalesroomGoodsMapper.insert(auctionSalesroomGoods); + } + + /** + * 获取备选拍品列表的分页数据 + * + * @param query 拍卖场商品关系查询对象 + * @return PageDTO<MgtAuctionSalesroomGoodsVO> + */ + @Override + public PageDTO<MgtAuctionSalesroomGoodsVO> backupGoods(MgtAuctionSalesroomGoodsQuery query) { + Set<Long> goodsSkuIdSet = null; + if (StringUtils.isNotBlank(query.getGoodsName())) { + List<GoodsSku> data = goodsSkuClient.getGoodsByName(query.getGoodsName(), + SecurityConstants.INNER).getData(); + if (StringUtils.isNotEmpty(data)) { + goodsSkuIdSet = data.stream().map(GoodsSku::getId) + .collect(Collectors.toSet()); + } + } + Page<AuctionSalesroomGoods> page = auctionSalesroomGoodsMapper.selectPage( + new Page<>(query.getPageCurr(), query.getPageSize()), + Wrappers.<AuctionSalesroomGoods>lambdaQuery() + .in(StringUtils.isNotEmpty(goodsSkuIdSet), + AuctionSalesroomGoods::getGoodsSkuId, goodsSkuIdSet)); + if (StringUtils.isNotEmpty(page.getRecords())) { + return PageDTO.empty(page); + } + Set<Long> skuIdList = page.getRecords().stream().map(AuctionSalesroomGoods::getGoodsSkuId) + .collect(Collectors.toSet()); + List<GoodsSku> goodsSkuList = goodsSkuClient.getGoodsListByIds(skuIdList, + SecurityConstants.INNER).getData(); + Map<Long, GoodsSku> goodsSkuMap = goodsSkuList.stream() + .collect(Collectors.toMap(GoodsSku::getId, e -> e)); + PageDTO<MgtAuctionSalesroomGoodsVO> mgtAuctionSalesroomGoodsVOPageDTO = PageDTO.of(page, + MgtAuctionSalesroomGoodsVO.class); + mgtAuctionSalesroomGoodsVOPageDTO.getList().forEach(item -> { + item.setGoodsSkuName(goodsSkuMap.get(item.getGoodsSkuId()).getSkuName()); + }); + return mgtAuctionSalesroomGoodsVOPageDTO; + } + + /** + * 选择备选商品 + * + * @param idList 备选商品id集合 + */ + @Override + public void addBackupGoods(List<Long> idList) { + List<AuctionSalesroomGoods> auctionSalesroomGoods = auctionSalesroomGoodsMapper.selectList( + Wrappers.<AuctionSalesroomGoods>lambdaQuery() + .in(AuctionSalesroomGoods::getId, idList) + .eq(AuctionSalesroomGoods::getBackupStatus, Boolean.TRUE)); + if (StringUtils.isNotEmpty(auctionSalesroomGoods)) { + auctionSalesroomGoods.forEach(item -> { + item.setStatus(AuctionGoodsStatusEnum.WAITING); + }); + auctionSalesroomGoodsMapper.updateBatchById(auctionSalesroomGoods); + } + } + + /** + * 结束当前拍卖商品 + * + * @param id 拍卖场商品id + */ + @Override + public void stopCurrentGoods(Long id) { + AuctionSalesroomGoods auctionSalesroomGoods = auctionSalesroomGoodsMapper.selectById(id); + if (StringUtils.isNull(auctionSalesroomGoods)) { + throw new ServiceException("拍卖商品不存在"); + } + auctionSalesroomGoods.setStatus(AuctionGoodsStatusEnum.ENDED); + auctionSalesroomGoodsMapper.updateById(auctionSalesroomGoods); + } + + /** + * 开始下一拍卖商品 + * + * @param id 拍卖场商品id + */ + @Override + public void startNextGoods(Long id) { + AuctionSalesroomGoods auctionSalesroomGoods = auctionSalesroomGoodsMapper.selectById(id); + if (StringUtils.isNull(auctionSalesroomGoods)) { + throw new ServiceException("拍卖商品不存在"); + } + auctionSalesroomGoods.setStatus(AuctionGoodsStatusEnum.IN_PROGRESS); + auctionSalesroomGoodsMapper.updateById(auctionSalesroomGoods); + } + + /** + * 播放视频 + * + * @param dto 大屏播放视频对象 + */ + @Override + public void play(MgtScreenVideoDTO dto) { + PromotionVideo data = promotionClient.getPromotionVideoOne(dto.getVideoId(), + SecurityConstants.INNER).getData(); + if (StringUtils.isNull(data)) { + throw new ServiceException("视频不存在"); + } + AuctionVideo auctionVideo = new AuctionVideo(); + auctionVideo.setAuctionSalesroomId(dto.getAuctionSalesroomId()); + auctionVideo.setPromotionVideoId(dto.getVideoId()); + auctionVideo.setPromotionVideoUrl(data.getVideoUrl()); + iAuctionVideoService.save(auctionVideo); + } + + @Override + public void stopPlay(Long auctionSalesroomId) { + iAuctionVideoService.remove(Wrappers.<AuctionVideo>lambdaQuery().eq + (AuctionVideo::getAuctionSalesroomId, 1L)); + } } -- Gitblit v1.7.1