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/AuctionSalesroomServiceImpl.java | 251 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 235 insertions(+), 16 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 6abdf2d..bfb52e2 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 @@ -24,22 +24,31 @@ import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomDTO; import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomGoodsDTO; import com.ruoyi.auction.controller.management.dto.MgtAuctionSalesroomQuery; +import com.ruoyi.auction.controller.management.dto.MgtScreenBidPage; 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.controller.management.vo.MgtAuctionSalesroomVO; import com.ruoyi.auction.domain.AuctionBidRecord; import com.ruoyi.auction.domain.AuctionSalesroomGoods; import com.ruoyi.auction.domain.AuctionVideo; +import com.ruoyi.auction.mapper.AuctionBidRecordMapper; import com.ruoyi.auction.mapper.AuctionSalesroomGoodsMapper; import com.ruoyi.auction.mapper.AuctionSalesroomMapper; -import com.ruoyi.auction.service.*; +import com.ruoyi.auction.service.IAuctionBidRecordService; +import com.ruoyi.auction.service.IAuctionBrowseRecordService; +import com.ruoyi.auction.service.IAuctionGoodsService; +import com.ruoyi.auction.service.IAuctionSalesroomService; +import com.ruoyi.auction.service.IAuctionVideoService; import com.ruoyi.auction.util.CreateQrCode; import com.ruoyi.auction.util.HttpUtils; import com.ruoyi.common.core.constant.SecurityConstants; import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.enums.AuctionGoodsStatusEnum; 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.exception.ServiceException; import com.ruoyi.common.core.utils.IDhelper; import com.ruoyi.common.core.utils.StringUtils; @@ -60,6 +69,7 @@ import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomBondDTO; import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomDTO; import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomWdDTO; +import com.ruoyi.system.api.domain.dto.RefundDTO; import com.ruoyi.system.api.domain.vo.PayInfoVO; import com.ruoyi.system.api.domain.vo.WdMemberAuctionSalesroomVO; import com.ruoyi.system.api.feignClient.GoodsSkuClient; @@ -74,6 +84,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.atomic.AtomicReference; import java.util.function.Function; import java.util.stream.Collectors; import javax.annotation.Resource; @@ -112,9 +123,6 @@ private AuctionSalesroomGoodsMapper auctionSalesroomGoodsMapper; @Resource - private IAuctionSalesroomGoodsService auctionSalesroomGoodsService; - - @Resource private IAuctionGoodsService auctionGoodsService; @Resource @@ -122,6 +130,7 @@ @Resource private OrderClient orderClient; + @Resource private MemberClient memberClient; @@ -135,6 +144,9 @@ private static final String WX_APPID = "wxb7f0ea286fc4e535"; private static final String WX_SECRET = "852a2512a6ab559cafc68bae5d4160ac"; + + @Resource + private AuctionBidRecordMapper auctionBidRecordMapper; //支付寶 @@ -331,7 +343,7 @@ memberAuctionSalesroomVO.setStatus(auctionSalesroom.getStatus().getCode()); memberAuctionSalesroomVO.setSalesroomId(auctionSalesroom.getId()); memberAuctionSalesroomVO.setCoverPic(auctionSalesroom.getCoverPic()); - List<OrderAuctionBond> data = orderClient.getOrderAuctionBondList(memberAuctionSalesroomDTO, SecurityConstants.INNER).getData(); + List<OrderAuctionBond> data = orderClient.getOrderAuctionBondList1(memberAuctionSalesroomDTO, SecurityConstants.INNER).getData(); if (data.size()>0){ memberAuctionSalesroomVO.setIsApply(2); }else{ @@ -339,7 +351,7 @@ } MemberAuctionSalesroomDTO memberAuctionSalesroomDTO1=new MemberAuctionSalesroomDTO(); memberAuctionSalesroomDTO1.setAuctionSalesroomId(auctionSalesroom.getId()); - List<OrderAuctionBond> data1 = orderClient.getOrderAuctionBondList(memberAuctionSalesroomDTO1, SecurityConstants.INNER).getData(); + List<OrderAuctionBond> data1 = orderClient.getOrderAuctionBondList1(memberAuctionSalesroomDTO1, SecurityConstants.INNER).getData(); memberAuctionSalesroomVO.setApplyNum(data1.size()); List.add(memberAuctionSalesroomVO); } @@ -363,7 +375,7 @@ memberAuctionSalesroomInfoVO.setStartTime(byId.getStartTime()); memberAuctionSalesroomInfoVO.setStatus(byId.getStatus()); memberAuctionSalesroomInfoVO.setCoverPic(byId.getCoverPic()); - List<OrderAuctionBond> data = orderClient.getOrderAuctionBondList(memberAuctionSalesroomDTO, SecurityConstants.INNER).getData(); + List<OrderAuctionBond> data = orderClient.getOrderAuctionBondList1(memberAuctionSalesroomDTO, SecurityConstants.INNER).getData(); if (data.size()>0){ memberAuctionSalesroomInfoVO.setIsApply(2); }else{ @@ -383,7 +395,7 @@ forepartAuctionSalesroomGoodsVO.setStartingPrice(salesroomGoods.getStartingPrice()); forepartAuctionSalesroomGoodsVO.setSalesroomStock(salesroomGoods.getSalesroomStock()); forepartAuctionSalesroomGoodsVO.setGoodsSkustatus(salesroomGoods.getStatus().getCode()); - + forepartAuctionSalesroomGoodsVO.setYears(String.valueOf(goodsSku.getYears())); LambdaQueryWrapper<AuctionBidRecord> wrapper1=Wrappers.lambdaQuery(); wrapper1.eq(AuctionBidRecord::getMemberId,memberAuctionSalesroomDTO.getMemberId()); wrapper1.eq(AuctionBidRecord::getAuctionSalesroomId,byId.getId()); @@ -427,10 +439,92 @@ } @Override + public void CancelSignUpNow(MemberAuctionSalesroomBondDTO memberAuctionSalesroomBondDTO) { + if (memberAuctionSalesroomBondDTO.getBondType()==2){ + OrderAuctionBond orderAuctionBond = orderClient.getOrderAuctionBondone(memberAuctionSalesroomBondDTO, SecurityConstants.INNER).getData(); + + List<RefundDTO> refundDTOList = new ArrayList<>(); + RefundDTO refundDTO = new RefundDTO(); + refundDTO.setOrderNo(orderAuctionBond.getOrderNo()); + refundDTO.setAmount(orderAuctionBond.getBond()); + + LambdaQueryWrapper<AuctionBidRecord> wrapper = Wrappers.lambdaQuery(); + wrapper.eq(AuctionBidRecord::getAuctionSalesroomId,memberAuctionSalesroomBondDTO.getAuctionSalesroomId()); + wrapper.eq(AuctionBidRecord::getAuctionType,2); + wrapper.eq(AuctionBidRecord::getStatus,BidStatusEnum.SUCCESSFUL); + wrapper.eq(AuctionBidRecord::getDelFlag, 0); + AuctionBidRecord auctionBidRecord = auctionBidRecordMapper.selectOne(wrapper); + if (auctionBidRecord!=null){ + throw new ServiceException("当前拍卖场中标拍品订单未完成,请完成后再试。"); + } + + + // 远程调用订单服务进行退款 + Map<String, Object> data = orderClient.refund(refundDTOList, + SecurityConstants.INNER).getData(); + // 处理退款返回结果 + List<String> successfulOrders = new ArrayList<>(); + List<String> failedOrders = new ArrayList<>(); + + data.forEach((key, value) -> { + if ((boolean) value) { + successfulOrders.add(key); + } else { + failedOrders.add(key); + } + }); + // 退款成功的订单修改状态 + List<Long> ids = new ArrayList<>(); + ids.add(orderAuctionBond.getId()); + // 远程调用订单服务修改订单状态 + orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.PAID); + + }else{ + OrderAuctionBond orderAuctionBond = orderClient.getOrderAuctionBondone1(memberAuctionSalesroomBondDTO, SecurityConstants.INNER).getData(); + List<RefundDTO> refundDTOList = new ArrayList<>(); + RefundDTO refundDTO = new RefundDTO(); + refundDTO.setOrderNo(orderAuctionBond.getOrderNo()); + refundDTO.setAmount(orderAuctionBond.getBond()); + + LambdaQueryWrapper<AuctionBidRecord> wrapper = Wrappers.lambdaQuery(); + wrapper.eq(AuctionBidRecord::getTargetId, memberAuctionSalesroomBondDTO.getAuctionGoodsId()); + wrapper.eq(AuctionBidRecord::getAuctionType,1); + wrapper.eq(AuctionBidRecord::getStatus,BidStatusEnum.SUCCESSFUL); + wrapper.eq(AuctionBidRecord::getDelFlag, 0); + AuctionBidRecord auctionBidRecord = auctionBidRecordMapper.selectOne(wrapper); + if (auctionBidRecord!=null){ + throw new ServiceException("当前拍卖场中标拍品订单未完成,请完成后再试。"); + } + + // 远程调用订单服务进行退款 + Map<String, Object> data = orderClient.refund(refundDTOList, + SecurityConstants.INNER).getData(); + // 处理退款返回结果 + List<String> successfulOrders = new ArrayList<>(); + List<String> failedOrders = new ArrayList<>(); + + data.forEach((key, value) -> { + if ((boolean) value) { + successfulOrders.add(key); + } else { + failedOrders.add(key); + } + }); + // 退款成功的订单修改状态 + List<Long> ids = new ArrayList<>(); + ids.add(orderAuctionBond.getId()); + // 远程调用订单服务修改订单状态 + orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.PAID); + } + + + } + + @Override public void SaveBid(BidDTO bidVO) { Member membeOne = memberClient.getMembeOne(bidVO.getMemberId(), SecurityConstants.INNER).getData(); if (bidVO.getAuctionType()==2){ - AuctionSalesroomGoods byId = auctionSalesroomGoodsService.getById(bidVO.getTargetId()); + AuctionSalesroomGoods byId = auctionSalesroomGoodsMapper.selectById(bidVO.getTargetId()); if (byId.getStartingPrice().doubleValue()<bidVO.getLastBidAmount().doubleValue()){ throw new ServiceException("出价不能比起拍价低"); } @@ -646,7 +740,7 @@ } auctionSalesroom.setId(auctionSalesroomOrg.getId()); this.updateById(auctionSalesroom); - List<AuctionSalesroomGoods> list = auctionSalesroomGoodsService.list( + List<AuctionSalesroomGoods> list = auctionSalesroomGoodsMapper.selectList( Wrappers.<AuctionSalesroomGoods>lambdaQuery() .eq(AuctionSalesroomGoods::getAuctionSalesroomId, id)); // 封装库存修改实体 @@ -664,21 +758,24 @@ .collect(Collectors.toList()); goodsSkuClient.updGoodsStock(goodsStockUpdDTOS, SecurityConstants.INNER); // 移除原来地拍卖商品 - auctionSalesroomGoodsService.remove(Wrappers.<AuctionSalesroomGoods>lambdaQuery() + auctionSalesroomGoodsMapper.delete(Wrappers.<AuctionSalesroomGoods>lambdaQuery() .eq(AuctionSalesroomGoods::getAuctionSalesroomId, id)); } for (AuctionSalesroomGoods auctionSalesroomGood : auctionSalesroomGoods) { auctionSalesroomGood.setAuctionSalesroomId(id); } // 添加拍卖商品 - auctionSalesroomGoodsService.saveBatch(auctionSalesroomGoods); + for (AuctionSalesroomGoods auctionSalesroomGoodss:auctionSalesroomGoods){ + auctionSalesroomGoodsMapper.insert(auctionSalesroomGoodss); + } + } @Override public PageDTO<WdMemberAuctionSalesroomVO> getWdAuctionSalesroomList(MemberAuctionSalesroomDTO MemberAuctionSalesroomDTO) { MemberAuctionSalesroomDTO memberAuctionSalesroomDTO =new MemberAuctionSalesroomDTO(); memberAuctionSalesroomDTO.setMemberId(MemberAuctionSalesroomDTO.getMemberId()); - List<OrderAuctionBond> data = orderClient.getOrderAuctionBondList(memberAuctionSalesroomDTO, SecurityConstants.INNER).getData(); + List<OrderAuctionBond> data = orderClient.getOrderAuctionBondList1(memberAuctionSalesroomDTO, SecurityConstants.INNER).getData(); Set<Long> goodsSkuIdList = null; goodsSkuIdList = data.stream().map(OrderAuctionBond::getAuctionSalesroomId) .collect(Collectors.toSet()); @@ -702,7 +799,7 @@ MemberAuctionSalesroomDTO memberAuctionSalesroomDTO1=new MemberAuctionSalesroomDTO(); memberAuctionSalesroomDTO1.setAuctionSalesroomId(auctionSalesroom.getId()); memberAuctionSalesroomDTO1.setMemberId(MemberAuctionSalesroomDTO.getMemberId()); - List<OrderAuctionBond> data1 = orderClient.getOrderAuctionBondList(memberAuctionSalesroomDTO1, SecurityConstants.INNER).getData(); + List<OrderAuctionBond> data1 = orderClient.getOrderAuctionBondList1(memberAuctionSalesroomDTO1, SecurityConstants.INNER).getData(); memberAuctionSalesroomVO.setBondTime(data1.get(0).getCreateTime()); List.add(memberAuctionSalesroomVO); } @@ -724,8 +821,10 @@ MgtAuctionSalesroomVO mgtAuctionSalesroomVO = BeanUtils.copyBean(auctionSalesroom, MgtAuctionSalesroomVO.class); // 获取拍卖场商品 - List<AuctionSalesroomGoods> list = auctionSalesroomGoodsService.lambdaQuery() - .eq(AuctionSalesroomGoods::getAuctionSalesroomId, id).list(); + LambdaQueryWrapper<AuctionSalesroomGoods> wrappers=new LambdaQueryWrapper<AuctionSalesroomGoods>(); + wrappers.eq(AuctionSalesroomGoods::getAuctionSalesroomId, id); + wrappers.orderByDesc(AuctionSalesroomGoods::getSortNum); + List<AuctionSalesroomGoods> list = auctionSalesroomGoodsMapper.selectList(wrappers); if (StringUtils.isNotEmpty(list)) { List<MgtAuctionSalesroomGoodsVO> mgtAuctionSalesroomGoodsVOS = BeanUtils.copyList(list, MgtAuctionSalesroomGoodsVO.class); @@ -743,6 +842,7 @@ GoodsSku goodsSku = goodsSkuMap.get(vo.getGoodsSkuId()); if (StringUtils.isNotNull(goodsSku)) { vo.setGoodsSkuName(goodsSku.getSkuName()); + vo.setSpec(goodsSku.getSpec()); } } mgtAuctionSalesroomVO.setAuctionSalesroomGoodsVOS(mgtAuctionSalesroomGoodsVOS); @@ -798,4 +898,123 @@ } return mgtAuctionBidRecordVOPageDTO; } + + /** + * 大屏操作台分页查询拍卖场 + * + * @param query 拍卖场查询对象 + * @return PageDTO<MgtAuctionSalesroomVO> + */ + @Override + public PageDTO<MgtAuctionSalesroomVO> getAuctionSalesroom4ScreenPage( + MgtAuctionSalesroomQuery query) { + // 分页查询 + Page<AuctionSalesroom> page = this.lambdaQuery() + .select(AuctionSalesroom::getId, AuctionSalesroom::getSalesroomName, + AuctionSalesroom::getStartTime, AuctionSalesroom::getStatus) + .like(StringUtils.isNotEmpty(query.getSalesroomName()), + AuctionSalesroom::getSalesroomName, query.getSalesroomName()) + .eq(StringUtils.isNotNull(query.getStatus()), AuctionSalesroom::getStatus, + query.getStatus()) + .ne(AuctionSalesroom::getStatus, AuctionStartStatusEnum.ENDED) + .between(StringUtils.isNotNull(query.getStartTime()) && StringUtils.isNotNull( + query.getEndTime()), AuctionSalesroom::getStartTime, query.getStartTime(), + query.getEndTime()) + .page(new Page<>(query.getPageCurr(), query.getPageSize())); + List<AuctionSalesroom> records = page.getRecords(); + if (StringUtils.isNull(records)) { + return PageDTO.empty(page); + } + return PageDTO.of(page, MgtAuctionSalesroomVO.class); + } + + /** + * 进入详情 + * + * @param id 拍卖会id + * @return 大屏操作台拍卖场视图对象 + */ + @Override + public MgtAuctionSalesroomScreenVO getAuctionSalesroomDetail(Long id) { + MgtAuctionSalesroomVO mgtAuctionSalesroomVO = this.getAuctionSalesroom(id); + MgtAuctionSalesroomScreenVO vo = BeanUtils.copyBean( + mgtAuctionSalesroomVO, MgtAuctionSalesroomScreenVO.class); + if (vo.getStatus().equals(AuctionStartStatusEnum.IN_AUCTION)) { + List<MgtAuctionSalesroomGoodsVO> auctionSalesroomGoodsVOS = vo.getAuctionSalesroomGoodsVOS(); + List<MgtAuctionSalesroomGoodsVO> collect = auctionSalesroomGoodsVOS.stream() + .peek(goods -> { + List<AuctionBidRecord> list = auctionBidRecordService.lambdaQuery() + .eq(AuctionBidRecord::getTargetId, goods.getId()) + .eq(AuctionBidRecord::getAuctionType, + AuctionOrderTypeEnum.AUCTION_ITEMS) + .list(); + if (StringUtils.isNotEmpty(list)) { + long bidCount = list.stream() + .filter(item -> BidStatusEnum.SUCCESSFUL.equals( + item.getStatus())) + .count(); + goods.setBidCount((int) bidCount); + goods.setBidQuantity((int) bidCount); + goods.setBidPersonCount(list.size()); + } + if (goods.getStatus().equals(AuctionGoodsStatusEnum.IN_PROGRESS)) { + vo.setCurrentAuctionSalesroomGoods(goods); + } + }).collect(Collectors.toList()); + vo.setAuctionSalesroomGoodsVOS(collect); + if (StringUtils.isNotNull(vo.getCurrentAuctionSalesroomGoods())) { + int index = collect.indexOf(vo.getCurrentAuctionSalesroomGoods()); + vo.setNextAuctionSalesroomGoods(collect.get(index + 1)); + // 分页查询当前拍品出价信息 + List<AuctionBidRecord> list = auctionBidRecordService.lambdaQuery() + .eq(AuctionBidRecord::getTargetId, + vo.getCurrentAuctionSalesroomGoods().getId()) + .eq(AuctionBidRecord::getAuctionType, + AuctionOrderTypeEnum.AUCTION_ITEMS) + .list(); + if (StringUtils.isNotEmpty(list)) { + vo.setMgtAuctionBidRecordVOList(CollUtils.emptyList()); + } + vo.setMgtAuctionBidRecordVOList( + BeanUtils.copyList(list, MgtAuctionBidRecordVO.class)); + } else { + vo.setNextAuctionSalesroomGoods(collect.get(0)); + } + } + return vo; + } + + /** + * 进入详情-出价会员列表 + * + * @param mgtScreenBidPage + * @return PageDTO<MgtAuctionBidRecordVO> + */ + @Override + public PageDTO<MgtAuctionBidRecordVO> getScreenBidRecordList( + MgtScreenBidPage mgtScreenBidPage) { + MgtAuctionSalesroomVO mgtAuctionSalesroomVO = this.getAuctionSalesroom( + mgtScreenBidPage.getId()); + List<MgtAuctionSalesroomGoodsVO> auctionSalesroomGoodsVOS = mgtAuctionSalesroomVO.getAuctionSalesroomGoodsVOS(); + if (StringUtils.isEmpty(auctionSalesroomGoodsVOS)) { + throw new ServiceException("该拍卖会暂无拍卖商品"); + } + AtomicReference<Long> currentAuctionGoodsId = new AtomicReference<>(); + auctionSalesroomGoodsVOS.stream() + .filter(item -> item.getStatus().equals(AuctionGoodsStatusEnum.IN_PROGRESS)) + .findFirst().ifPresent(goods -> { + currentAuctionGoodsId.set(goods.getId()); + }); + Page<AuctionBidRecord> page = auctionBidRecordService.lambdaQuery() + .eq(StringUtils.isNotNull(currentAuctionGoodsId.get()), + AuctionBidRecord::getTargetId, + currentAuctionGoodsId.get()) + .eq(AuctionBidRecord::getAuctionType, + AuctionOrderTypeEnum.AUCTION_ITEMS) + .page(new Page<>(mgtScreenBidPage.getPageCurr(), mgtScreenBidPage.getPageSize())); + if (StringUtils.isNotEmpty(page.getRecords())) { + return PageDTO.empty(page); + } + return PageDTO.of(page, MgtAuctionBidRecordVO.class); + } } -- Gitblit v1.7.1