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