| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | @Resource |
| | | private IAuctionBrowseRecordService iAuctionBrowseRecordService; |
| | | |
| | | @Resource |
| | | private PromotionClient promotionClient; |
| | | |
| | | //微信 |
| | | private static final String ACCESS_TOKEN_HOST = "https://api.weixin.qq.com/cgi-bin/token"; |
| | |
| | | |
| | | /** |
| | | * 查看详情 |
| | | * |
| | | * @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); |
| | |
| | | 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); |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | @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)) { |
| | |
| | | /** |
| | | * 进入详情-出价会员列表 |
| | | * |
| | | * @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("该拍卖会暂无拍卖商品"); |
| | |
| | | } |
| | | 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)); |
| | | } |
| | | } |