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 | 664 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 640 insertions(+), 24 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 4a89185..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 @@ -16,40 +16,82 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.auction.controller.forepart.dto.AuctionSalesroomGoodsDTO; import com.ruoyi.auction.controller.forepart.dto.ForepartAuctionBidRecordDTO; -import com.ruoyi.system.api.domain.OrderAuctionBond; -import com.ruoyi.system.api.domain.dto.MemberAuctionSalesroomDTO; import com.ruoyi.auction.controller.forepart.vo.ForepartAuctionSalesroomGoodsVO; import com.ruoyi.auction.controller.forepart.vo.ForepartAuctionSalesroomVO; import com.ruoyi.auction.controller.forepart.vo.MemberAuctionSalesroomInfoVO; import com.ruoyi.auction.controller.forepart.vo.MemberAuctionSalesroomVO; -import com.ruoyi.auction.domain.*; +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.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; +import com.ruoyi.common.core.utils.page.BeanUtils; +import com.ruoyi.common.core.utils.page.Checker; +import com.ruoyi.common.core.utils.page.CollUtils; import com.ruoyi.common.core.utils.page.PageDTO; -import com.ruoyi.auction.util.HttpUtils; import com.ruoyi.system.api.domain.AppMiniLoginVO; +import com.ruoyi.system.api.domain.AuctionGoods; +import com.ruoyi.system.api.domain.AuctionSalesroom; 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.SysUser; import com.ruoyi.system.api.domain.dto.AppMiniLoginDTO; +import com.ruoyi.system.api.domain.dto.BidDTO; +import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO; +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; +import com.ruoyi.system.api.feignClient.MemberClient; import com.ruoyi.system.api.feignClient.OrderClient; import com.ruoyi.system.api.feignClient.SysUserClient; -import javax.annotation.Resource; - -import org.apache.http.HttpResponse; -import org.apache.http.util.EntityUtils; -import org.springframework.stereotype.Service; - - +import io.seata.spring.annotation.GlobalTransactional; +import java.math.BigDecimal; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.HashMap; 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; +import org.apache.http.HttpResponse; +import org.apache.http.util.EntityUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; /** * <p> @@ -61,8 +103,6 @@ */ @Service public class AuctionSalesroomServiceImpl extends ServiceImpl<AuctionSalesroomMapper, AuctionSalesroom> implements IAuctionSalesroomService { - @Resource - private IAuctionSalesroomService iAuctionSalesroomService; @Resource private IAuctionBidRecordService auctionBidRecordService; @@ -83,10 +123,19 @@ private AuctionSalesroomGoodsMapper auctionSalesroomGoodsMapper; @Resource + private IAuctionGoodsService auctionGoodsService; + + @Resource private GoodsSkuClient goodsSkuClient; @Resource private OrderClient orderClient; + + @Resource + private MemberClient memberClient; + + @Resource + private IAuctionBrowseRecordService iAuctionBrowseRecordService; //微信 @@ -95,6 +144,9 @@ private static final String WX_APPID = "wxb7f0ea286fc4e535"; private static final String WX_SECRET = "852a2512a6ab559cafc68bae5d4160ac"; + + @Resource + private AuctionBidRecordMapper auctionBidRecordMapper; //支付寶 @@ -131,7 +183,7 @@ LambdaQueryWrapper<AuctionSalesroom> wrapper=Wrappers.lambdaQuery(); wrapper.eq(AuctionSalesroom::getSalesroomName,ationSalesroomGoodsDTO.getSalesroomName()); wrapper.eq(AuctionSalesroom::getDelFlag,0); - Page<AuctionSalesroom> page1=iAuctionSalesroomService.page(page, wrapper); + Page<AuctionSalesroom> page1 = this.page(page, wrapper); return PageDTO.of(page1); } @@ -142,7 +194,8 @@ wrapper.eq(AuctionVideo::getDelFlag,0); AuctionVideo auctionVideo=iAuctionVideoService.getOne(wrapper); ForepartAuctionSalesroomVO forepartAuctionSalesroomVO =new ForepartAuctionSalesroomVO(); - AuctionSalesroom auctionSalesroom=iAuctionSalesroomService.getById(ationSalesroomGoodsDTO.getAuctionSalesroomId()); + AuctionSalesroom auctionSalesroom = this.getById( + ationSalesroomGoodsDTO.getAuctionSalesroomId()); forepartAuctionSalesroomVO.setAuctionSalesroomStatus(auctionSalesroom.getStatus().getCode()); if (auctionVideo!=null){ forepartAuctionSalesroomVO.setUrl(auctionVideo.getPromotionVideoUrl()); @@ -172,7 +225,7 @@ LambdaQueryWrapper<AuctionSalesroom> wrapper=Wrappers.lambdaQuery(); wrapper.eq(AuctionSalesroom::getAuctionSalesroomNo,arepartAuctionBidRecordDTO.getAuctionSalesroomQrcode()); wrapper.eq(AuctionSalesroom::getDelFlag,0); - AuctionSalesroom auctionBidRecord=iAuctionSalesroomService.getOne(wrapper); + AuctionSalesroom auctionBidRecord = this.getOne(wrapper); return auctionBidRecord; } @@ -290,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{ @@ -298,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); } @@ -308,10 +361,10 @@ @Override public MemberAuctionSalesroomInfoVO getMemberAuctionSalesroomInfo(MemberAuctionSalesroomDTO memberAuctionSalesroomDTO) { - AuctionSalesroom byId = iAuctionSalesroomService.getById(memberAuctionSalesroomDTO.getAuctionSalesroomId()); + AuctionSalesroom byId = this.getById(memberAuctionSalesroomDTO.getAuctionSalesroomId()); MemberAuctionSalesroomInfoVO memberAuctionSalesroomInfoVO=new MemberAuctionSalesroomInfoVO(); memberAuctionSalesroomInfoVO.setId(byId.getId()); - memberAuctionSalesroomInfoVO.setBound(byId.getBound()); + memberAuctionSalesroomInfoVO.setBound(byId.getBond()); memberAuctionSalesroomInfoVO.setAuthentication(byId.getAuthentication()); memberAuctionSalesroomInfoVO.setEndTime(byId.getEndTime()); memberAuctionSalesroomInfoVO.setSalesroomName(byId.getSalesroomName()); @@ -322,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{ @@ -342,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()); @@ -371,13 +424,180 @@ LambdaQueryWrapper<AuctionSalesroom> wrapper=Wrappers.lambdaQuery(); wrapper.eq(AuctionSalesroom::getAuctionSalesroomNo,MemberAuctionSalesroomDTO.getSalesroomNO()); wrapper.eq(AuctionSalesroom::getDelFlag,0); - AuctionSalesroom auctionSalesroom=iAuctionSalesroomService.getOne(wrapper); + AuctionSalesroom auctionSalesroom = this.getOne(wrapper); MemberAuctionSalesroomVO memberAuctionSalesroomVO=new MemberAuctionSalesroomVO(); memberAuctionSalesroomVO.setSalesroomName(auctionSalesroom.getSalesroomName()); memberAuctionSalesroomVO.setStatus(auctionSalesroom.getStatus().getCode()); memberAuctionSalesroomVO.setDescription(auctionSalesroom.getDescription()); memberAuctionSalesroomVO.setSalesroomId(auctionSalesroom.getId()); return memberAuctionSalesroomVO; + } + + @Override + public PayInfoVO SaveSignUpNow(MemberAuctionSalesroomBondDTO memberAuctionSalesroomBondDTO) { + return orderClient.SaveOrderAuctionBond(memberAuctionSalesroomBondDTO,SecurityConstants.INNER).getData(); + } + + @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 = auctionSalesroomGoodsMapper.selectById(bidVO.getTargetId()); + if (byId.getStartingPrice().doubleValue()<bidVO.getLastBidAmount().doubleValue()){ + throw new ServiceException("出价不能比起拍价低"); + } + BigDecimal bigDecimal=byId.getStartingPrice().add(byId.getMinimumMarkupAmount()); + if (bigDecimal.doubleValue()<bidVO.getLastBidAmount().doubleValue()){ + throw new ServiceException("出价不能比每次最少加价低"); + } + + LambdaQueryWrapper<AuctionBidRecord> wrapper1=Wrappers.lambdaQuery(); + wrapper1.eq(AuctionBidRecord::getMemberId,bidVO.getMemberId()); + wrapper1.eq(AuctionBidRecord::getAuctionSalesroomId,bidVO.getAuctionSalesroomId()); + wrapper1.eq(AuctionBidRecord::getTargetId,bidVO.getTargetId()); + wrapper1.eq(AuctionBidRecord::getDelFlag,0); + AuctionBidRecord one = auctionBidRecordService.getOne(wrapper1); + if (one!=null){ + BigDecimal bigDecimal1=one.getLastBidAmount().add(byId.getMinimumMarkupAmount()); + if (bigDecimal1.doubleValue()<bidVO.getLastBidAmount().doubleValue()){ + throw new ServiceException("出价不能比上次出价加每次最少加价低"); + } + one.setLastBidAmount(bidVO.getLastBidAmount()); + one.setLastBidTime(LocalDateTime.now()); + one.setBidCount(one.getBidCount()+1); + auctionBidRecordService.updateById(one); + }else{ + one=new AuctionBidRecord(); + one.setAuctionSalesroomId(bidVO.getAuctionSalesroomId()); + one.setTargetId(bidVO.getTargetId()); + one.setMemberId(bidVO.getMemberId()); + one.setLastBidTime(LocalDateTime.now()); + one.setAuctionType(AuctionOrderTypeEnum.AUCTION_ITEMS); + one.setStatus(BidStatusEnum.ELIMINATE); + one.setBidCount(1); + one.setLastBidAmount(bidVO.getLastBidAmount()); + auctionBidRecordService.save(one); + } + + + }else { + AuctionGoods byId = auctionGoodsService.getById(bidVO.getTargetId()); + if (byId.getStartingPrice().doubleValue()<bidVO.getLastBidAmount().doubleValue()){ + throw new ServiceException("出价不能比起拍价低"); + } + BigDecimal bigDecimal=byId.getStartingPrice().add(byId.getMinimumMarkupAmount()); + if (bigDecimal.doubleValue()<bidVO.getLastBidAmount().doubleValue()){ + throw new ServiceException("出价不能比每次最少加价低"); + } + LambdaQueryWrapper<AuctionBidRecord> wrapper1=Wrappers.lambdaQuery(); + wrapper1.eq(AuctionBidRecord::getMemberId,bidVO.getMemberId()); + wrapper1.eq(AuctionBidRecord::getTargetId,bidVO.getTargetId()); + wrapper1.eq(AuctionBidRecord::getDelFlag,0); + AuctionBidRecord one = auctionBidRecordService.getOne(wrapper1); + if (one!=null){ + BigDecimal bigDecimal1=one.getLastBidAmount().add(byId.getMinimumMarkupAmount()); + if (bigDecimal1.doubleValue()<bidVO.getLastBidAmount().doubleValue()){ + throw new ServiceException("出价不能比上次出价加每次最少加价低"); + } + one.setLastBidAmount(bidVO.getLastBidAmount()); + one.setLastBidTime(LocalDateTime.now()); + one.setBidCount(one.getBidCount()+1); + auctionBidRecordService.updateById(one); + }else{ + one=new AuctionBidRecord(); + one.setAuctionSalesroomId(bidVO.getAuctionSalesroomId()); + one.setTargetId(bidVO.getTargetId()); + one.setMemberId(bidVO.getMemberId()); + one.setLastBidTime(LocalDateTime.now()); + one.setAuctionType(AuctionOrderTypeEnum.REGULAR_ITEMS); + one.setStatus(BidStatusEnum.ELIMINATE); + one.setBidCount(1); + one.setLastBidAmount(bidVO.getLastBidAmount()); + auctionBidRecordService.save(one); + } + } } @@ -401,4 +621,400 @@ HttpResponse response = HttpUtils.doPost(host, "", "POST", headers, querys, body); return EntityUtils.toString(response.getEntity()); } + + /** + * 分页查询拍卖场 + * + * @param query 拍卖场查询对象 + * @return PageDTO<MgtAuctionSalesroomVO> + */ + @Override + public PageDTO<MgtAuctionSalesroomVO> getAuctionSalesroomPage(MgtAuctionSalesroomQuery query) { + // 分页查询 + Page<AuctionSalesroom> page = this.lambdaQuery() + .select(AuctionSalesroom::getId, AuctionSalesroom::getSalesroomName, + AuctionSalesroom::getCreateTime, AuctionSalesroom::getStartTime, + AuctionSalesroom::getEndTime, AuctionSalesroom::getType, + AuctionSalesroom::getAuthentication, AuctionSalesroom::getStatus) + .like(StringUtils.isNotEmpty(query.getSalesroomName()), + AuctionSalesroom::getSalesroomName, query.getSalesroomName()) + .eq(StringUtils.isNotNull(query.getAuthentication()), + AuctionSalesroom::getAuthentication, query.getAuthentication()) + .eq(StringUtils.isNotNull(query.getStatus()), AuctionSalesroom::getStatus, + query.getStatus()).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); + } + PageDTO<MgtAuctionSalesroomVO> auctionSalesroomVOPageDTO = PageDTO.of(page, + MgtAuctionSalesroomVO.class); + List<MgtAuctionSalesroomVO> list = auctionSalesroomVOPageDTO.getList(); + List<Long> auctionSalesroomIdList = list.stream().map(MgtAuctionSalesroomVO::getId) + .collect(Collectors.toList()); + // 所有拍卖场的拍卖商品 + List<AuctionSalesroomGoods> auctionSalesroomGoods = auctionSalesroomGoodsMapper.selectList( + Wrappers.<AuctionSalesroomGoods>lambdaQuery() + .in(AuctionSalesroomGoods::getAuctionSalesroomId, auctionSalesroomIdList)); + // 计算每个拍卖场所有拍品数量 + Map<Long, Integer> map = auctionSalesroomGoods.stream() + .collect(Collectors.groupingBy(AuctionSalesroomGoods::getAuctionSalesroomId, + Collectors.summingInt(AuctionSalesroomGoods::getSalesroomStock))); + for (MgtAuctionSalesroomVO mgtAuctionSalesroomVO : list) { + Integer i = map.get(mgtAuctionSalesroomVO.getId()); + if (StringUtils.isNotNull(i)) { + mgtAuctionSalesroomVO.setAuctionGoodsNum(i); + } + } + return auctionSalesroomVOPageDTO; + } + + /** + * 查看二维码 + * + * @param id 拍卖场id + * @return 二维码 + */ + @Override + public String getQrCode(Long id) throws Exception { + AuctionSalesroom auctionSalesroom = this.getById(id); + String auctionSalesroomNo = auctionSalesroom.getAuctionSalesroomNo(); + return CreateQrCode.createQRCode(auctionSalesroomNo); + } + + @Override + @Transactional + @GlobalTransactional(rollbackFor = Exception.class) + public void saveAuctionSalesroom(MgtAuctionSalesroomDTO dto) { + Long id = dto.getId(); + AuctionSalesroom auctionSalesroom = BeanUtils.copyBean(dto, AuctionSalesroom.class); + List<MgtAuctionSalesroomGoodsDTO> auctionSalesroomGoodsDTOS = dto.getAuctionSalesroomGoodsDTOS(); + CollUtils.check(auctionSalesroomGoodsDTOS, new Checker<MgtAuctionSalesroomGoodsDTO>() { + @Override + public void check(MgtAuctionSalesroomGoodsDTO data) { + if (StringUtils.isNull(data.getStartingPrice())) { + throw new ServiceException("拍卖商品起拍价格不能为空"); + } + if (StringUtils.isNull(data.getMinimumMarkupAmount())) { + throw new ServiceException("拍卖商品最低加价金额不能为空"); + } + if (StringUtils.isNull(data.getSalesroomStock())) { + throw new ServiceException("拍卖商品拍品数量不能为空"); + } + if (StringUtils.isNull(data.getListingDuration())) { + throw new ServiceException("拍卖商品拍卖时间不能为空"); + } + } + }); + List<AuctionSalesroomGoods> auctionSalesroomGoods = BeanUtils.copyList( + auctionSalesroomGoodsDTOS, AuctionSalesroomGoods.class); + + if (StringUtils.isNull(id)) { + // 生成唯一编号 + Long nextId = IDhelper.getNextId(); + auctionSalesroom.setAuctionSalesroomNo(nextId.toString()); + // 添加 + this.save(auctionSalesroom); + List<GoodsStockUpdDTO> goodsStockUpdDTOS = auctionSalesroomGoods.stream().map(item -> { + GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); + goodsStockUpdDTO.setGoodsSkuId(item.getGoodsSkuId()); + goodsStockUpdDTO.setAuctionStock(item.getSalesroomStock() * -1); + return goodsStockUpdDTO; + }).collect(Collectors.toList()); + goodsSkuClient.updGoodsStock(goodsStockUpdDTOS, SecurityConstants.INNER); + } else { + // 编辑 + AuctionSalesroom auctionSalesroomOrg = this.getById(id); + if (StringUtils.isNull(auctionSalesroomOrg)) { + throw new ServiceException("该拍卖场不存在"); + } + if (auctionSalesroomOrg.getStatus().equals(AuctionStartStatusEnum.IN_AUCTION)) { + throw new ServiceException("该拍卖场正在拍卖中,不能编辑"); + } + if (auctionSalesroomOrg.getStatus().equals(AuctionStartStatusEnum.ENDED)) { + throw new ServiceException("该拍卖场已结束,不能编辑"); + } + auctionSalesroom.setId(auctionSalesroomOrg.getId()); + this.updateById(auctionSalesroom); + List<AuctionSalesroomGoods> list = auctionSalesroomGoodsMapper.selectList( + Wrappers.<AuctionSalesroomGoods>lambdaQuery() + .eq(AuctionSalesroomGoods::getAuctionSalesroomId, id)); + // 封装库存修改实体 + List<GoodsStockUpdDTO> goodsStockUpdDTOS = list.stream() + .flatMap(salesroomGoods -> auctionSalesroomGoods.stream() + .filter(auctionSalesroomGood -> salesroomGoods.getId() + .equals(auctionSalesroomGood.getId())) + .map(auctionSalesroomGood -> { + GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); + goodsStockUpdDTO.setGoodsSkuId(salesroomGoods.getGoodsSkuId()); + goodsStockUpdDTO.setAuctionStock(salesroomGoods.getSalesroomStock() + - auctionSalesroomGood.getSalesroomStock()); + return goodsStockUpdDTO; + })) + .collect(Collectors.toList()); + goodsSkuClient.updGoodsStock(goodsStockUpdDTOS, SecurityConstants.INNER); + // 移除原来地拍卖商品 + auctionSalesroomGoodsMapper.delete(Wrappers.<AuctionSalesroomGoods>lambdaQuery() + .eq(AuctionSalesroomGoods::getAuctionSalesroomId, id)); + } + for (AuctionSalesroomGoods auctionSalesroomGood : auctionSalesroomGoods) { + auctionSalesroomGood.setAuctionSalesroomId(id); + } + // 添加拍卖商品 + 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.getOrderAuctionBondList1(memberAuctionSalesroomDTO, SecurityConstants.INNER).getData(); + Set<Long> goodsSkuIdList = null; + goodsSkuIdList = data.stream().map(OrderAuctionBond::getAuctionSalesroomId) + .collect(Collectors.toSet()); + Page<WdMemberAuctionSalesroomVO> page = new Page<>(); + page.setSize(memberAuctionSalesroomDTO.getPageSize()); + page.setCurrent(memberAuctionSalesroomDTO.getPageCurr()); + MemberAuctionSalesroomWdDTO memberAuctionSalesroomWdDTO=new MemberAuctionSalesroomWdDTO(); + memberAuctionSalesroomWdDTO.setGoodsSkuIdList(goodsSkuIdList); + if(memberAuctionSalesroomWdDTO.getStatus()!=4){ + memberAuctionSalesroomWdDTO.setStatus(memberAuctionSalesroomWdDTO.getStatus()); + } + List<AuctionSalesroom> auctionSalesroomList=auctionSalesroomMapper.pageMemberAuctionSalesroomWdList(page,memberAuctionSalesroomWdDTO); + List<WdMemberAuctionSalesroomVO> List=new ArrayList<>(); + for (AuctionSalesroom auctionSalesroom:auctionSalesroomList){ + WdMemberAuctionSalesroomVO memberAuctionSalesroomVO=new WdMemberAuctionSalesroomVO(); + memberAuctionSalesroomVO.setSalesroomName(auctionSalesroom.getSalesroomName()); + memberAuctionSalesroomVO.setDescription(auctionSalesroom.getDescription()); + memberAuctionSalesroomVO.setStatus(auctionSalesroom.getStatus().getCode()); + memberAuctionSalesroomVO.setSalesroomId(auctionSalesroom.getId()); + memberAuctionSalesroomVO.setCoverPic(auctionSalesroom.getCoverPic()); + MemberAuctionSalesroomDTO memberAuctionSalesroomDTO1=new MemberAuctionSalesroomDTO(); + memberAuctionSalesroomDTO1.setAuctionSalesroomId(auctionSalesroom.getId()); + memberAuctionSalesroomDTO1.setMemberId(MemberAuctionSalesroomDTO.getMemberId()); + List<OrderAuctionBond> data1 = orderClient.getOrderAuctionBondList1(memberAuctionSalesroomDTO1, SecurityConstants.INNER).getData(); + memberAuctionSalesroomVO.setBondTime(data1.get(0).getCreateTime()); + List.add(memberAuctionSalesroomVO); + } + page.setRecords(List); + return PageDTO.of(page); + + } + + /** + * 查看详情 + * + * @param id 拍卖会id + * @return 拍卖场视图对象 + */ + @Override + public MgtAuctionSalesroomVO getAuctionSalesroom(Long id) { + // 获取拍卖场 + 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); + if (StringUtils.isNotEmpty(list)) { + List<MgtAuctionSalesroomGoodsVO> mgtAuctionSalesroomGoodsVOS = BeanUtils.copyList(list, + MgtAuctionSalesroomGoodsVO.class); + Set<Long> goodsIdList = mgtAuctionSalesroomGoodsVOS.stream() + .map(MgtAuctionSalesroomGoodsVO::getGoodsSkuId).collect( + Collectors.toSet()); + // 获取商品信息 + List<GoodsSku> goodsSkuList = goodsSkuClient.getGoodsListByIds(goodsIdList, + SecurityConstants.INNER).getData(); + Map<Long, GoodsSku> goodsSkuMap = goodsSkuList.stream() + .collect(Collectors.toMap(GoodsSku::getId, Function.identity())); + + // 封装商品名称 + for (MgtAuctionSalesroomGoodsVO vo : mgtAuctionSalesroomGoodsVOS) { + GoodsSku goodsSku = goodsSkuMap.get(vo.getGoodsSkuId()); + if (StringUtils.isNotNull(goodsSku)) { + vo.setGoodsSkuName(goodsSku.getSkuName()); + vo.setSpec(goodsSku.getSpec()); + } + } + mgtAuctionSalesroomVO.setAuctionSalesroomGoodsVOS(mgtAuctionSalesroomGoodsVOS); + } + return mgtAuctionSalesroomVO; + } + + /** + * 查看详情-出价记录 + * + * @param query 拍卖场出价记录查询对象 + * @return PageDTO<MgtAuctionBidRecordVO> + */ + @Override + public PageDTO<MgtAuctionBidRecordVO> getAuctionSalesroomBidRecordList( + MgtAuctionSaleroomBidRecordQuery query) { + Page<AuctionBidRecord> page = auctionBidRecordService.lambdaQuery() + .eq(AuctionBidRecord::getTargetId, query.getId()) + .eq(AuctionBidRecord::getAuctionType, AuctionOrderTypeEnum.AUCTION_ITEMS) + .orderByDesc(query.getSortType() == 1, AuctionBidRecord::getLastBidAmount) + .orderByDesc(query.getSortType() == 2, AuctionBidRecord::getBidCount) + .page(new Page<>(query.getPageCurr(), query.getPageSize())); + if (StringUtils.isNull(page.getRecords())) { + return PageDTO.empty(page); + } + PageDTO<MgtAuctionBidRecordVO> mgtAuctionBidRecordVOPageDTO = PageDTO.of(page, + MgtAuctionBidRecordVO.class); + List<MgtAuctionBidRecordVO> list = mgtAuctionBidRecordVOPageDTO.getList(); + Set<Long> goodsIdList = list.stream().map(MgtAuctionBidRecordVO::getGoodsSkuId) + .collect(Collectors.toSet()); + Set<Long> memberIdList = list.stream().map(MgtAuctionBidRecordVO::getMemberId) + .collect(Collectors.toSet()); + List<GoodsSku> goodsSkuList = goodsSkuClient.getGoodsListByIds(goodsIdList, + SecurityConstants.INNER) + .getData(); + List<Member> memberList = memberClient.getMemberListByIds(memberIdList, + SecurityConstants.INNER) + .getData(); + Map<Long, GoodsSku> goodsSkuMap = goodsSkuList.stream() + .collect(Collectors.toMap(GoodsSku::getId, Function.identity())); + Map<Long, Member> memberMap = memberList.stream() + .collect(Collectors.toMap(Member::getId, Function.identity())); + for (MgtAuctionBidRecordVO vo : list) { + GoodsSku goodsSku = goodsSkuMap.get(vo.getGoodsSkuId()); + Member member = memberMap.get(vo.getMemberId()); + if (StringUtils.isNotNull(goodsSku)) { + vo.setGoodsSkuName(goodsSku.getSkuName()); + } + if (StringUtils.isNotNull(member)) { + vo.setMemberName(member.getNickname()); + vo.setPhone(member.getPhone()); + } + } + 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