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