From 9bcc40d213a44498c46dae5e678e592b918b40b0 Mon Sep 17 00:00:00 2001 From: rentaiming <806181062@qq.com> Date: 星期四, 30 五月 2024 18:33:54 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java | 274 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 258 insertions(+), 16 deletions(-) diff --git a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java index a243529..2352ce6 100644 --- a/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java +++ b/ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionGoodsServiceImpl.java @@ -1,13 +1,19 @@ package com.ruoyi.auction.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +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.ruoyi.auction.controller.forepart.vo.MemberAuctionSalesroomVO; +import com.google.common.collect.Lists; import com.ruoyi.auction.controller.management.dto.AuctionGoodsDTO; import com.ruoyi.auction.controller.management.dto.AuctionGoodsQuery; import com.ruoyi.auction.controller.management.vo.AuctionBidRecordVO; import com.ruoyi.auction.controller.management.vo.AuctionGoodsVO; import com.ruoyi.auction.domain.AuctionBidRecord; -import com.ruoyi.system.api.domain.AuctionGoods; +import com.ruoyi.auction.domain.MemberAuctionCollection; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.system.api.domain.*; import com.ruoyi.auction.mapper.AuctionGoodsMapper; import com.ruoyi.auction.service.IAuctionBidRecordService; import com.ruoyi.auction.service.IAuctionGoodsService; @@ -15,28 +21,42 @@ 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.enums.OrderFromEnum; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.StringUtils; import com.ruoyi.common.core.utils.page.BeanUtils; import com.ruoyi.common.core.utils.page.PageDTO; +import com.ruoyi.system.api.domain.AuctionGoods; +import com.ruoyi.system.api.domain.dto.*; +import com.ruoyi.system.api.domain.dto.AuctionGoodsListDTO; +import com.ruoyi.system.api.domain.dto.AuctionGoodsListPageDTO; import com.ruoyi.system.api.domain.GoodsSku; import com.ruoyi.system.api.domain.Member; import com.ruoyi.system.api.domain.MemberAddress; +import com.ruoyi.system.api.domain.OrderAuctionBond; +import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO; import com.ruoyi.system.api.domain.dto.OrderDTO; +import com.ruoyi.system.api.domain.dto.RefundDTO; +import com.ruoyi.system.api.domain.vo.AuctionGoodsListVO; +import com.ruoyi.system.api.domain.vo.AuctionGoodsinfoVO; import com.ruoyi.system.api.feignClient.GoodsSkuClient; import com.ruoyi.system.api.feignClient.MemberClient; import com.ruoyi.system.api.feignClient.OrderClient; import io.seata.spring.annotation.GlobalTransactional; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; /** * <p> @@ -55,6 +75,16 @@ private final MemberClient memberClient; private final OrderClient orderClient; private final IAuctionBidRecordService auctionBidRecordService; + + @Resource + private MemberAuctionCollectionServiceImpl memberAuctionCollectionServiceImpl; + + @Resource + private IAuctionGoodsService auctionGoodsService; + + @Resource + private AuctionGoodsMapper auctionGoodsMapper; + /** * 获取拍卖商品列表的分页数据 * @@ -88,8 +118,8 @@ } @Override - @GlobalTransactional(rollbackFor = Exception.class) @Transactional + @GlobalTransactional(rollbackFor = Exception.class) public void saveAuctionGoods(AuctionGoodsDTO dto) { Long id = dto.getId(); Long goodsSkuId = dto.getGoodsSkuId(); @@ -109,7 +139,11 @@ } this.save(auctionGoods); // 扣减商品库存 - goodsSkuClient.deductStock(goodsSkuId, dto.getAuctionStock(), SecurityConstants.INNER); + GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); + goodsStockUpdDTO.setGoodsSkuId(goodsSkuId); + goodsStockUpdDTO.setAuctionStock(dto.getAuctionStock() * -1); + goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), + SecurityConstants.INNER); } else { // 编辑 AuctionGoods auctionGoodsOrg = this.getById(id); @@ -117,7 +151,10 @@ throw new ServiceException("拍卖商品不存在"); } if (auctionGoodsOrg.getStartStatus().equals(AuctionStartStatusEnum.IN_AUCTION)) { - throw new ServiceException("该商品正在拍卖中,不能修改"); + throw new ServiceException("商品正在拍卖中不能编辑"); + } + if (auctionGoodsOrg.getStartStatus().equals(AuctionStartStatusEnum.ENDED)) { + throw new ServiceException("商品拍卖已结束不能编辑"); } GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(goodsSkuId, SecurityConstants.INNER) .getData(); @@ -127,9 +164,6 @@ if (goodsSku.getStock() + auctionGoodsOrg.getAuctionStock() < dto.getAuctionStock()) { throw new ServiceException("商品库存不足"); } - // 编辑商品时需要先回退商品库存,再扣减最新的商品库存 - goodsSkuClient.returningStock(auctionGoodsOrg.getGoodsSkuId(), - auctionGoodsOrg.getAuctionStock(), SecurityConstants.INNER); auctionGoodsOrg.setStartingPrice(dto.getStartingPrice()); auctionGoodsOrg.setMinimumMarkupAmount(dto.getMinimumMarkupAmount()); auctionGoodsOrg.setStartTime(dto.getStartTime()); @@ -141,9 +175,13 @@ auctionGoodsOrg.setShareTitle(dto.getShareTitle()); auctionGoodsOrg.setSharePic(dto.getSharePic()); this.updateById(auctionGoodsOrg); - // 扣减库存 - goodsSkuClient.deductStock(auctionGoodsOrg.getGoodsSkuId(), - auctionGoodsOrg.getAuctionStock(), SecurityConstants.INNER); + // 更新商品库存 + GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); + goodsStockUpdDTO.setGoodsSkuId(goodsSkuId); + goodsStockUpdDTO.setAuctionStock( + auctionGoodsOrg.getAuctionStock() - dto.getAuctionStock()); + goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), + SecurityConstants.INNER); } } @@ -202,12 +240,13 @@ // 查询出价记录 List<AuctionBidRecord> auctionBidRecords = auctionBidRecordService.getBidRecordByGoodsId( id); + Long memberId = null; if (StringUtils.isNotEmpty(auctionBidRecords)) { // 中标 AuctionBidRecord auctionBidRecord = auctionBidRecords.get(0); auctionBidRecord.setStatus(BidStatusEnum.SUCCESSFUL); auctionBidRecordService.updateById(auctionBidRecord); - + memberId = auctionBidRecord.getMemberId(); // 创建待支付订单 OrderDTO orderDTO = new OrderDTO(); orderDTO.setAuctionType(AuctionOrderTypeEnum.REGULAR_ITEMS); @@ -229,15 +268,218 @@ orderClient.saveOrderOne(orderDTO, SecurityConstants.INNER); } else { // 没有人出价,退回拍卖商品库存 - goodsSkuClient.returningStock(auctionGoods.getGoodsSkuId(), - auctionGoods.getAuctionStock(), SecurityConstants.INNER); + GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); + goodsStockUpdDTO.setGoodsSkuId(auctionGoods.getGoodsSkuId()); + goodsStockUpdDTO.setAuctionStock(auctionGoods.getAuctionStock()); + goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), + SecurityConstants.INNER); } // 结束拍卖 this.lambdaUpdate().set(AuctionGoods::getStartStatus, AuctionStartStatusEnum.ENDED) .eq(AuctionGoods::getId, id).update(); - // 查询已支付保证基记录 - // TODO 退还保证金 - + // 查询已支付保证金记录 + List<OrderAuctionBond> auctionBondList = orderClient.getOrderAuctionBondList(id, + AuctionOrderTypeEnum.REGULAR_ITEMS, + BondStatusEnum.PAID, + SecurityConstants.INNER).getData(); + if (StringUtils.isNotEmpty(auctionBondList)) { + List<RefundDTO> refundDTOList = new ArrayList<>(); + for (OrderAuctionBond orderAuctionBond : auctionBondList) { + // 已中标需在订单完成后退保证金 + if (orderAuctionBond.getMemberId().equals(memberId)) { + continue; + } + RefundDTO refundDTO = new RefundDTO(); + refundDTO.setOrderNo(orderAuctionBond.getOrderNo()); + refundDTO.setAmount(orderAuctionBond.getBond()); + } + // 远程调用订单服务进行退款 + 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); + } + }); + log.info("订单号:{},退款失败", failedOrders); + // 退款成功的订单修改状态 + List<Long> ids = auctionBondList.stream().map(bond -> { + if (successfulOrders.contains(bond.getOrderNo())) { + return bond.getId(); + } + return null; + }).filter(Objects::nonNull).collect(Collectors.toList()); + // 远程调用订单服务修改订单状态 + orderClient.updateOrderAuctionBondStatus(ids, BondStatusEnum.PAID); + } } } + + @Override + public PageDTO<AuctionGoodsListVO> getAuctionGoodsList(AuctionGoodsListDTO auctionGoodsListDTO) { + Set<Long> goodsSkuIdList = null; + if (StringUtils.isNotEmpty(auctionGoodsListDTO.getGoodsSkuName())) { + List<GoodsSku> goodsSku = goodsSkuClient.getGoodsByName(auctionGoodsListDTO.getGoodsSkuName(), + SecurityConstants.INNER) + .getData(); + goodsSkuIdList = goodsSku.stream().map(GoodsSku::getId) + .collect(Collectors.toSet()); + } + AuctionGoodsListPageDTO auctionGoodsListPageDTO=new AuctionGoodsListPageDTO(); + auctionGoodsListPageDTO.setGoodsSkuIdList(goodsSkuIdList); + + Page<AuctionGoodsListVO> page = new Page<>(); + page.setSize(auctionGoodsListDTO.getPageSize()); + page.setCurrent(auctionGoodsListDTO.getPageCurr()); + List<AuctionGoods> auctionGoodsPgeList = auctionGoodsMapper.getAuctionGoodsPgeList(page, auctionGoodsListPageDTO); + List<AuctionGoodsListVO> auctionGoodsVOS=new ArrayList<>(); + for (AuctionGoods auctionGoods:auctionGoodsPgeList){ + AuctionGoodsListVO auctionGoodsVO=new AuctionGoodsListVO(); + auctionGoodsVO.setAuctionStock(auctionGoods.getAuctionStock()); + auctionGoodsVO.setGoodsSkuId(auctionGoods.getId()); + auctionGoodsVO.setEndTime(auctionGoods.getEndTime()); + auctionGoodsVO.setStartTime(auctionGoods.getStartTime()); + auctionGoodsVO.setStartingPrice(auctionGoods.getStartingPrice()); + auctionGoodsVO.setStartStatus(auctionGoods.getStartStatus()); + GoodsSku goodsSkuOne = goodsSkuClient.getGoodsSkuOne(auctionGoods.getGoodsSkuId(), SecurityConstants.INNER).getData(); + auctionGoodsVO.setUnit(goodsSkuOne.getUnit()); + auctionGoodsVO.setSpec(goodsSkuOne.getSpec()); + auctionGoodsVO.setSpecUnit(goodsSkuOne.getSpecUnit()); + auctionGoodsVO.setGoodsSkuName(goodsSkuOne.getSkuName()); + auctionGoodsVO.setCoverPic(goodsSkuOne.getCoverPic()); + auctionGoodsVOS.add(auctionGoodsVO); + + } + page.setRecords(auctionGoodsVOS); + return PageDTO.of(page); + } + + @Override + public AuctionGoodsinfoVO getAuctionGoodsInfo(AuctionGoodsListDTO auctionGoodsListDTO) { + AuctionGoods byId = auctionGoodsService.getById(auctionGoodsListDTO.getGoodsSkuId()); + GoodsSku goodsSkuOne = goodsSkuClient.getGoodsSkuOne(byId.getGoodsSkuId(), SecurityConstants.INNER).getData(); + AuctionGoodsinfoVO auctionGoodsinfoVO=new AuctionGoodsinfoVO(); + auctionGoodsinfoVO.setGoodsSkuId(byId.getGoodsSkuId()); + auctionGoodsinfoVO.setGoodsSkuName(goodsSkuOne.getSkuName()); + auctionGoodsinfoVO.setStartingPrice(byId.getStartingPrice()); + auctionGoodsinfoVO.setSalesroomStock(byId.getAuctionStock()); + auctionGoodsinfoVO.setStartStatus(byId.getStartStatus()); + auctionGoodsinfoVO.setStartTime(byId.getStartTime()); + auctionGoodsinfoVO.setEndTime(byId.getEndTime()); + auctionGoodsinfoVO.setUnit(goodsSkuOne.getUnit()); + auctionGoodsinfoVO.setDescription(goodsSkuOne.getDescription()); + auctionGoodsinfoVO.setYears(goodsSkuOne.getYears()); + GoodsBrand data = goodsSkuClient.getBrandOne(goodsSkuOne.getBrandId(), SecurityConstants.INNER).getData(); + GoodsCategory data1 = goodsSkuClient.getCategoryOne(goodsSkuOne.getCategoryId(), SecurityConstants.INNER).getData(); + GoodsSeries data2 = goodsSkuClient.getSeriesOne(goodsSkuOne.getSeriesId(), SecurityConstants.INNER).getData(); + GoodsFlavorType data3 = goodsSkuClient.getFlavorTypeOne(goodsSkuOne.getFlavorTypeId(), SecurityConstants.INNER).getData(); + auctionGoodsinfoVO.setBrand(data.getBrandName()); + auctionGoodsinfoVO.setCategory(data1.getCategoryName()); + auctionGoodsinfoVO.setSeries(data2.getSeriesName()); + auctionGoodsinfoVO.setFlavorType(data3.getFlavorTypeName()); + auctionGoodsinfoVO.setCoverPic(goodsSkuOne.getCoverPic()); + auctionGoodsinfoVO.setAlbum(goodsSkuOne.getAlbum()); + auctionGoodsinfoVO.setAuthentication(byId.getAuthentication()); + auctionGoodsinfoVO.setMinimumMarkupAmount(byId.getMinimumMarkupAmount()); + auctionGoodsinfoVO.setSpec(goodsSkuOne.getSpec()); + auctionGoodsinfoVO.setSpecUnit(goodsSkuOne.getSpecUnit()); + auctionGoodsinfoVO.setShareTitle(goodsSkuOne.getShareTitle()); + auctionGoodsinfoVO.setSpecUnit(goodsSkuOne.getSpecUnit()); + LambdaQueryWrapper<AuctionBidRecord> wrapper1= Wrappers.lambdaQuery(); + wrapper1.eq(AuctionBidRecord::getMemberId,auctionGoodsListDTO.getMemberId()); + wrapper1.eq(AuctionBidRecord::getAuctionType,1); + wrapper1.eq(AuctionBidRecord::getTargetId,byId.getId()); + wrapper1.eq(AuctionBidRecord::getDelFlag,0); + AuctionBidRecord list1 = auctionBidRecordService.getOne(wrapper1); + if (list1!=null){ + auctionGoodsinfoVO.setIsBond(2); + auctionGoodsinfoVO.setPresentBid(list1.getLastBidAmount()); + if (list1.getStatus().getCode()==2){ + auctionGoodsinfoVO.setIsStatus(2); + }else{ + auctionGoodsinfoVO.setIsStatus(1); + } + }else{ + auctionGoodsinfoVO.setIsBond(1); + auctionGoodsinfoVO.setIsStatus(1); + } + LambdaQueryWrapper<MemberAuctionCollection> wrapper2= Wrappers.lambdaQuery(); + wrapper2.eq(MemberAuctionCollection::getMemberId,auctionGoodsListDTO.getMemberId()); + wrapper2.eq(MemberAuctionCollection::getTargetId,byId.getId()); + wrapper2.eq(MemberAuctionCollection::getDelFlag,0); + MemberAuctionCollection one = memberAuctionCollectionServiceImpl.getOne(wrapper2); + if (one!=null){ + auctionGoodsinfoVO.setIsCollection(2); + }else { + auctionGoodsinfoVO.setIsCollection(1); + } + List<OrderAuctionBond> datas = orderClient.getAuctionGoodsOrderAuctionBondList(auctionGoodsListDTO, SecurityConstants.INNER).getData(); + if (datas.size()>0){ + auctionGoodsinfoVO.setIsApply(2); + }else{ + auctionGoodsinfoVO.setIsApply(1); + } + return auctionGoodsinfoVO; + } + + @Override + public PageDTO<AuctionGoodsListVO> getWdAuctionSalesList(AuctionGoodsListDTO auctionGoodsListDTO) { + MemberAuctionSalesroomDTO memberAuctionSalesroomDTO =new MemberAuctionSalesroomDTO(); + memberAuctionSalesroomDTO.setMemberId(auctionGoodsListDTO.getMemberId()); + List<OrderAuctionBond> data = orderClient.getAuctionGoodsOrderAuctionBondList(auctionGoodsListDTO, SecurityConstants.INNER).getData(); + Set<Long> goodsSkuIdList = null; + goodsSkuIdList = data.stream().map(OrderAuctionBond::getAuctionSalesroomId) + .collect(Collectors.toSet()); + + AuctionGoodsListPageDTO auctionGoodsListPageDTO=new AuctionGoodsListPageDTO(); + auctionGoodsListPageDTO.setGoodsSkuIdList(goodsSkuIdList); + + Page<AuctionGoodsListVO> page = new Page<>(); + page.setSize(auctionGoodsListDTO.getPageSize()); + page.setCurrent(auctionGoodsListDTO.getPageCurr()); + List<AuctionGoods> auctionGoodsPgeList = auctionGoodsMapper.getAuctionGoodsPgeList(page, auctionGoodsListPageDTO); + List<AuctionGoodsListVO> auctionGoodsVOS=new ArrayList<>(); + for (AuctionGoods auctionGoods:auctionGoodsPgeList){ + AuctionGoodsListVO auctionGoodsVO=new AuctionGoodsListVO(); + auctionGoodsVO.setAuctionStock(auctionGoods.getAuctionStock()); + auctionGoodsVO.setGoodsSkuId(auctionGoods.getId()); + auctionGoodsVO.setEndTime(auctionGoods.getEndTime()); + auctionGoodsVO.setStartTime(auctionGoods.getStartTime()); + auctionGoodsVO.setStartingPrice(auctionGoods.getStartingPrice()); + auctionGoodsVO.setStartStatus(auctionGoods.getStartStatus()); + GoodsSku goodsSkuOne = goodsSkuClient.getGoodsSkuOne(auctionGoods.getGoodsSkuId(), SecurityConstants.INNER).getData(); + auctionGoodsVO.setUnit(goodsSkuOne.getUnit()); + auctionGoodsVO.setSpec(goodsSkuOne.getSpec()); + auctionGoodsVO.setSpecUnit(goodsSkuOne.getSpecUnit()); + auctionGoodsVO.setGoodsSkuName(goodsSkuOne.getSkuName()); + auctionGoodsVO.setCoverPic(goodsSkuOne.getCoverPic()); + + LambdaQueryWrapper<AuctionBidRecord> wrapper1= Wrappers.lambdaQuery(); + wrapper1.eq(AuctionBidRecord::getMemberId,auctionGoodsListDTO.getMemberId()); + wrapper1.eq(AuctionBidRecord::getAuctionType,1); + wrapper1.eq(AuctionBidRecord::getTargetId,auctionGoods.getId()); + wrapper1.eq(AuctionBidRecord::getDelFlag,0); + AuctionBidRecord list1 = auctionBidRecordService.getOne(wrapper1); + if (list1!=null){ + if (list1.getStatus().getCode()==2){ + auctionGoodsVO.setIsStatus(2); + }else{ + auctionGoodsVO.setIsStatus(1); + } + }else{ + auctionGoodsVO.setIsStatus(1); + } + + auctionGoodsVOS.add(auctionGoodsVO); + + } + page.setRecords(auctionGoodsVOS); + return PageDTO.of(page); + } } -- Gitblit v1.7.1