From 7106d8205f0af944a34b880405c1b33effcc5393 Mon Sep 17 00:00:00 2001 From: mitao <2763622819@qq.com> Date: 星期五, 19 七月 2024 22:06:33 +0800 Subject: [PATCH] 修改bug --- ruoyi-modules/ruoyi-auction/src/main/java/com/ruoyi/auction/service/impl/AuctionSalesroomServiceImpl.java | 147 +++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 135 insertions(+), 12 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 1cbe7a6..053ad8a 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 @@ -46,6 +46,7 @@ import com.ruoyi.common.core.enums.BidStatusEnum; import com.ruoyi.common.core.enums.BondStatusEnum; import com.ruoyi.common.core.enums.ClientTypeEnum; +import com.ruoyi.common.core.enums.OrderFromEnum; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.IDhelper; import com.ruoyi.common.core.utils.StringUtils; @@ -55,12 +56,15 @@ import com.ruoyi.common.core.utils.page.PageDTO; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.RemoteFileService; +import com.ruoyi.system.api.constants.ConfigEnum; import com.ruoyi.system.api.constants.NotificationTypeConstant; 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.CustomConfig; 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.PromotionVideo; import com.ruoyi.system.api.domain.SysUser; @@ -72,8 +76,8 @@ 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.OrderAuctionBondDTO; +import com.ruoyi.system.api.domain.dto.OrderDTO; import com.ruoyi.system.api.domain.dto.RefundDTO; import com.ruoyi.system.api.domain.vo.ForepartAuctionSalesroomGoodsVO; import com.ruoyi.system.api.domain.vo.ForepartAuctionSalesroomVO; @@ -89,6 +93,7 @@ import io.seata.spring.annotation.GlobalTransactional; import java.io.IOException; import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Arrays; @@ -97,6 +102,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicReference; @@ -824,7 +830,8 @@ .select(AuctionSalesroom::getId, AuctionSalesroom::getSalesroomName, AuctionSalesroom::getCreateTime, AuctionSalesroom::getStartTime, AuctionSalesroom::getEndTime, AuctionSalesroom::getType, - AuctionSalesroom::getAuthentication, AuctionSalesroom::getStatus) + AuctionSalesroom::getAuthentication, AuctionSalesroom::getStatus, + AuctionSalesroom::getQrCode) .like(StringUtils.isNotEmpty(query.getSalesroomName()), AuctionSalesroom::getSalesroomName, query.getSalesroomName()) .eq(StringUtils.isNotNull(query.getAuthentication()), @@ -1110,28 +1117,28 @@ .orderByDesc(query.getSortType() == 1, AuctionBidRecord::getLastBidAmount) .orderByDesc(query.getSortType() == 2, AuctionBidRecord::getBidCount) .page(new Page<>(query.getPageCurr(), query.getPageSize())); - if (StringUtils.isNull(page.getRecords())) { + if (StringUtils.isEmpty(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()); + + AuctionSalesroomGoods auctionSalesroomGoods = auctionSalesroomGoodsMapper.selectById( + query.getId()); + Set<Long> memberIdList = list.stream().map(MgtAuctionBidRecordVO::getMemberId) .collect(Collectors.toSet()); - List<GoodsSku> goodsSkuList = goodsSkuClient.getGoodsListByIds(goodsIdList, + GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne( + auctionSalesroomGoods.getGoodsSkuId(), 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()); @@ -1227,7 +1234,10 @@ vo.setMgtAuctionBidRecordVOList( BeanUtils.copyList(list, MgtAuctionBidRecordVO.class)); } else { - vo.setNextAuctionSalesroomGoods(collect.get(0)); + Optional<MgtAuctionSalesroomGoodsVO> first = collect.stream() + .filter(c -> c.getStatus().equals(AuctionGoodsStatusEnum.WAITING)) + .findFirst(); + vo.setNextAuctionSalesroomGoods(first.orElse(null)); } } } @@ -1262,10 +1272,26 @@ .eq(AuctionBidRecord::getAuctionType, AuctionOrderTypeEnum.AUCTION_ITEMS) .page(new Page<>(mgtScreenBidPage.getPageCurr(), mgtScreenBidPage.getPageSize())); - if (StringUtils.isNotEmpty(page.getRecords())) { + if (StringUtils.isEmpty(page.getRecords())) { return PageDTO.empty(page); } - return PageDTO.of(page, MgtAuctionBidRecordVO.class); + PageDTO<MgtAuctionBidRecordVO> vo = PageDTO.of(page, + MgtAuctionBidRecordVO.class); + List<Long> id = vo.getList().stream().map(MgtAuctionBidRecordVO::getMemberId) + .collect(Collectors.toList()); + List<Member> data = memberClient.getMemberListByIds(id, SecurityConstants.INNER).getData(); + if (CollUtils.isNotEmpty(data)) { + Map<Long, Member> memberMap = data.stream() + .collect(Collectors.toMap(Member::getId, e -> e)); + vo.getList().forEach(item -> { + Member member = memberMap.get(item.getMemberId()); + if (StringUtils.isNotNull(member)) { + item.setMemberName(member.getNickname()); + item.setPhone(member.getPhone()); + } + }); + } + return vo; } /** @@ -1375,8 +1401,51 @@ if (StringUtils.isNull(auctionSalesroomGoods)) { throw new ServiceException("拍卖商品不存在"); } + AuctionSalesroom auctionSalesroom = this.getById( + auctionSalesroomGoods.getAuctionSalesroomId()); auctionSalesroomGoods.setStatus(AuctionGoodsStatusEnum.ENDED); auctionSalesroomGoodsMapper.updateById(auctionSalesroomGoods); + List<AuctionBidRecord> auctionBidRecordList = auctionBidRecordMapper.selectList( + Wrappers.lambdaQuery(AuctionBidRecord.class) + .eq(AuctionBidRecord::getAuctionSalesroomId, + auctionSalesroomGoods.getAuctionSalesroomId()) + .eq(AuctionBidRecord::getTargetId, auctionSalesroomGoods.getGoodsSkuId()) + .eq(AuctionBidRecord::getAuctionType, AuctionOrderTypeEnum.AUCTION_ITEMS) + .orderByDesc(AuctionBidRecord::getLastBidAmount)); + if (CollUtils.isNotEmpty(auctionBidRecordList)) { + List<AuctionBidRecord> auctionBidRecords = new ArrayList<>(); + if (auctionBidRecordList.size() >= auctionSalesroomGoods.getSalesroomStock()) { + for (int i = 0; i < auctionSalesroomGoods.getSalesroomStock(); i++) { + AuctionBidRecord auctionBidRecord = auctionBidRecordList.get(i); + auctionBidRecords.add(auctionBidRecord); + } + } else { + for (int i = 0; i < auctionSalesroomGoods.getSalesroomStock(); i++) { + AuctionBidRecord auctionBidRecord = auctionBidRecordList.get(i); + auctionBidRecords.add(auctionBidRecord); + } + // 没有出价记录,回退库存 + GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); + goodsStockUpdDTO.setGoodsSkuId(auctionSalesroomGoods.getGoodsSkuId()); + goodsStockUpdDTO.setAuctionStock( + auctionSalesroomGoods.getSalesroomStock() - auctionBidRecordList.size()); + goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), + SecurityConstants.INNER); + } + for (AuctionBidRecord auctionBidRecord : auctionBidRecords) { + addOrder(auctionBidRecord.getTargetId(), auctionBidRecord.getMemberId(), + auctionBidRecord.getLastBidAmount(), + auctionSalesroom.getBond()); + } + } else { + // 没有出价记录,回退库存 + GoodsStockUpdDTO goodsStockUpdDTO = new GoodsStockUpdDTO(); + goodsStockUpdDTO.setGoodsSkuId(auctionSalesroomGoods.getGoodsSkuId()); + goodsStockUpdDTO.setAuctionStock( + auctionSalesroomGoods.getSalesroomStock()); + goodsSkuClient.updGoodsStock(Lists.newArrayList(goodsStockUpdDTO), + SecurityConstants.INNER); + } Map<String, Object> map = new ConcurrentHashMap<>(); map.put("notification_type", NotificationTypeConstant.AUCTION_SALESROOM_GOODS); map.put("auctionSalesroomId", auctionSalesroomGoods.getAuctionSalesroomId().toString()); @@ -1388,6 +1457,59 @@ sysUserClient.pushAll(msg, SecurityConstants.INNER); } + public void addOrder(Long goodsSkuId, Long memberId, BigDecimal lastBidAmount, + BigDecimal bound) { + OrderDTO order = new OrderDTO(); + order.setGoodsSkuId(goodsSkuId); + order.setOrderTime(LocalDateTime.now()); + order.setOrderFrom(OrderFromEnum.AUCTION_ORDERS); + order.setMemberId(memberId); + AuctionSalesroomGoods auctionSalesroomGoods = auctionSalesroomGoodsMapper.selectById( + goodsSkuId); + + order.setGoodsQuantity(1); + order.setTotalAmount(lastBidAmount); + order.setAuctionSalesroomId(auctionSalesroomGoods.getAuctionSalesroomId()); + + R<MemberAddress> memberAddressR = memberClient.getMemberAddressOne(memberId, + SecurityConstants.INNER); + MemberAddress memberAddress = memberAddressR.getData(); + + CustomConfig memberPointsMoney = sysUserClient.getconfig( + ConfigEnum.MEMBER_POINTS_MONEY.getKey()).getData(); + CustomConfig memberPointsPoints = sysUserClient.getconfig( + ConfigEnum.MEMBER_POINTS_POINTS.getKey()) + .getData(); + + if (lastBidAmount.intValue() > 0) { + BigDecimal divide = lastBidAmount.divide( + BigDecimal.valueOf(Long.parseLong(memberPointsMoney.getConfigValue())), 0, + RoundingMode.DOWN); + int points = divide.multiply( + BigDecimal.valueOf( + Long.parseLong((memberPointsPoints.getConfigValue())))).intValue(); + order.setPoints(points); + } else { + order.setPoints(0); + } + + if (memberAddress != null) { + order.setReceiverCity(memberAddress.getCity()); + order.setReceiverDetailAddress(memberAddress.getDetailedAddress()); + order.setReceiverphone(memberAddress.getRecipientPhone()); + order.setReceiverName(memberAddress.getRecipientName()); + } + + order.setBound(bound); + order.setAuctionType(AuctionOrderTypeEnum.AUCTION_ITEMS); + GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(auctionSalesroomGoods.getGoodsSkuId(), + SecurityConstants.INNER) + .getData(); + order.setSkuName(goodsSku.getSkuName()); + order.setCoverPic(goodsSku.getCoverPic()); + order.setPrice(lastBidAmount); + orderClient.saveOrderOne(order, SecurityConstants.INNER); + } /** * 开始下一拍卖商品 * @@ -1400,6 +1522,7 @@ throw new ServiceException("拍卖商品不存在"); } auctionSalesroomGoods.setStatus(AuctionGoodsStatusEnum.IN_PROGRESS); + auctionSalesroomGoods.setStartTime(LocalDateTime.now()); auctionSalesroomGoodsMapper.updateById(auctionSalesroomGoods); Map<String, Object> map = new ConcurrentHashMap<>(); map.put("notification_type", NotificationTypeConstant.AUCTION_SALESROOM_GOODS); -- Gitblit v1.7.1