From a53a1f481278f981bab8030853b353a823a9cd81 Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期五, 01 十一月 2024 18:41:57 +0800
Subject: [PATCH] 09.25心愿求购新增

---
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java |  119 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 112 insertions(+), 7 deletions(-)

diff --git a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
index 042c48e..a6c20d4 100644
--- a/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
+++ b/ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -56,6 +56,7 @@
 import com.ruoyi.system.api.domain.MemberAddress;
 import com.ruoyi.system.api.domain.Order;
 import com.ruoyi.system.api.domain.OrderAuctionBond;
+import com.ruoyi.system.api.domain.PromotionWishRecommend;
 import com.ruoyi.system.api.domain.dto.CouponMemberDTO;
 import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
 import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
@@ -71,6 +72,7 @@
 import com.ruoyi.system.api.domain.vo.MemberOrderListVO;
 import com.ruoyi.system.api.domain.vo.MemberOrderNumVO;
 import com.ruoyi.system.api.domain.vo.MemberTiOrderVO;
+import com.ruoyi.system.api.domain.vo.MgtPromotionWishRecommendVO;
 import com.ruoyi.system.api.domain.vo.OrderVO;
 import com.ruoyi.system.api.feignClient.AuctionClient;
 import com.ruoyi.system.api.feignClient.GoodsSkuClient;
@@ -317,6 +319,10 @@
             order.setOrderNo(OrderUtil.getOrderNoForPrefix("TG"));
             order.setIsOrder(2);
         }
+        if (memberOrderDTO.getOrderFrom() == OrderFromEnum.WISH_ORDER.getCode()) {
+            order.setOrderFrom(OrderFromEnum.WISH_ORDER);
+            order.setOrderNo(OrderUtil.getOrderNoForPrefix("QG"));
+        }
         if (memberOrderDTO.getPaymentMethod()==1){
             order.setPaymentMethod(PaymentMethodEnum.WECHAT);
         }if (memberOrderDTO.getPaymentMethod()==2){
@@ -461,6 +467,33 @@
             order.setSjPrice(goodsSku.getPrice());
             order.setGoodsId(goodsSku.getId());
         }
+        if (memberOrderDTO.getOrderFrom() == OrderFromEnum.WISH_ORDER.getCode()) {
+            // 远程调用营销服务,获取推荐商品信息
+            PromotionWishRecommend recommend = promotionClient.getPromotionWishRecommend(
+                    memberOrderDTO.getGoodsSkuId(),
+                    SecurityConstants.INNER).getData();
+            if (Objects.isNull(recommend)) {
+                throw new ServiceException("推荐商品不存在");
+            }
+            if (recommend.getExpireTime().isBefore(LocalDateTime.now())) {
+                throw new ServiceException("推荐商品已过期");
+            }
+            if (recommend.getAvailableNum().compareTo(memberOrderDTO.getGoodsQuantity()) < 0) {
+                throw new ServiceException("推荐商品可购数量不足");
+            }
+            // 远程调用,更新可购数量
+            Integer res = promotionClient.subRecommendAvailableNum(
+                    memberOrderDTO.getGoodsQuantity(),
+                    recommend.getId(), SecurityConstants.INNER).getData();
+            if (res == 0) {
+                throw new ServiceException("推荐商品可购数量不足");
+            }
+            memberOrderVO.setGoodsSkuId(memberOrderDTO.getGoodsSkuId());
+            memberOrderVO.setPrice(recommend.getSellingPrice());
+            memberOrderVO.setCoverPic(recommend.getGoodsImageUrl());
+            memberOrderVO.setSkuName(recommend.getGoodsName());
+            pice = recommend.getSellingPrice();
+        }
         order.setOrderRemark(memberOrderDTO.getOrderRemark());
         order.setMemberId(memberOrderDTO.getMemberId());
         order.setGoodsQuantity(memberOrderDTO.getGoodsQuantity());
@@ -574,8 +607,6 @@
                     memberOrderVO.setCoverPic(goodsSku.getCoverPic());
                     memberOrderVO.setSkuName(goodsSku.getSkuName());
                 }
-
-
             if (order.getOrderFrom().getCode()==2){
                 MemberOrderDTO memberOrderDTO1=new MemberOrderDTO();
                 memberOrderDTO1.setMemberId(order.getMemberId());
@@ -629,8 +660,8 @@
                     memberOrderVO.setYouhiPrice(data.getSeckillPrice());
 
 
-
-        }  if (order.getOrderFrom().getCode()==3){
+            }
+            if (order.getOrderFrom().getCode() == 3) {
                 order.setOrderFrom(OrderFromEnum.GROUP_PURCHASE_ORDERS);
                 GoodsGroupPurchase data = goodsSkuClient.getGoodsSeckiGoodsGroupPurchaseOne(order.getGoodsSkuId(), SecurityConstants.INNER).getData();
                 GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(data.getGoodsSkuId(), SecurityConstants.INNER).getData();
@@ -660,6 +691,40 @@
                         }
                     }
                 }
+            }
+            if (memberOrderDTO.getOrderFrom() == OrderFromEnum.WISH_ORDER.getCode()) {
+                // 远程调用营销服务,获取推荐商品信息
+                PromotionWishRecommend recommend = promotionClient.getPromotionWishRecommend(
+                        memberOrderDTO.getGoodsSkuId(),
+                        SecurityConstants.INNER).getData();
+                if (Objects.isNull(recommend)) {
+                    throw new ServiceException("推荐商品不存在");
+                }
+                Integer availableNum = recommend.getAvailableNum() + order.getGoodsQuantity();
+                if (availableNum.compareTo(memberOrderDTO.getGoodsQuantity()) < 0) {
+                    throw new ServiceException("推荐商品可购数量不足");
+                }
+                // 如果最新购买数比锁定库存数大,则扣减多出来的商品数量,否则恢复多出的锁定库存
+                if (memberOrderDTO.getGoodsQuantity().compareTo(order.getGoodsQuantity()) > 0) {
+                    // 远程调用,更新可购数量
+                    Integer res = promotionClient.subRecommendAvailableNum(
+                            memberOrderDTO.getGoodsQuantity() - order.getGoodsQuantity(),
+                            recommend.getId(), SecurityConstants.INNER).getData();
+                    if (res == 0) {
+                        throw new ServiceException("推荐商品可购数量不足");
+                    }
+                } else {
+                    promotionClient.addRecommendAvailableNum(
+                            order.getGoodsQuantity() - memberOrderDTO.getGoodsQuantity(),
+                            recommend.getId(), SecurityConstants.INNER);
+                }
+                order.setTotalAmount(recommend.getSellingPrice()
+                        .multiply(new BigDecimal(memberOrderDTO.getGoodsQuantity())));
+                order.setGoodsQuantity(memberOrderDTO.getGoodsQuantity());
+                memberOrderVO.setGoodsSkuId(memberOrderDTO.getGoodsSkuId());
+                memberOrderVO.setPrice(recommend.getSellingPrice());
+                memberOrderVO.setCoverPic(recommend.getGoodsImageUrl());
+                memberOrderVO.setSkuName(recommend.getGoodsName());
             }
         }
         if (memberOrderDTO.getGoodsQuantity()!=null){
@@ -824,7 +889,10 @@
         Map<Long, GoodsSku> goodsUnitMap = getGoodsUnitMap(list);
         for (MemberOrderListVO MemberOrderList:list){
             if (MemberOrderList.getOrderStatus().getCode()==1){
-                if (MemberOrderList.getOrderFrom().getCode()==1||MemberOrderList.getOrderFrom().getCode()==2||MemberOrderList.getOrderFrom().getCode()==3){
+                if (MemberOrderList.getOrderFrom().getCode() == 1
+                        || MemberOrderList.getOrderFrom().getCode() == 2
+                        || MemberOrderList.getOrderFrom().getCode() == 3
+                        || MemberOrderList.getOrderFrom().equals(OrderFromEnum.WISH_ORDER)) {
                     LocalDateTime localDateTime = MemberOrderList.getOrderTime().plusMinutes(30);
                     if (LocalDateTime.now().isAfter(localDateTime)) {
                         // dateTime1 在 dateTime2 之后
@@ -865,7 +933,12 @@
                             }
                             goodsSkuClient.updGoodsSeckill(goodsStockUpdDTO1,SecurityConstants.INNER);
                         }
-
+                        // 恢复推荐商品可购数量
+                        if (MemberOrderList.getOrderFrom().equals(OrderFromEnum.WISH_ORDER)) {
+                            promotionClient.addRecommendAvailableNum(
+                                    MemberOrderList.getGoodsQuantity(),
+                                    MemberOrderList.getGoodsSkuId(), SecurityConstants.INNER);
+                        }
 
                         this.updateById(order);
                     }
@@ -1138,6 +1211,11 @@
 
                 }
             }
+            // 恢复可购数量
+            if (order.getOrderFrom().equals(OrderFromEnum.WISH_ORDER)) {
+                promotionClient.addRecommendAvailableNum(
+                        order.getGoodsQuantity(), order.getGoodsSkuId(), SecurityConstants.INNER);
+            }
 
         }
         if (order.getOrderStatus().getCode() == 2) {
@@ -1181,7 +1259,11 @@
 
                 }
             }
-
+            // 恢复可购数量
+            if (order.getOrderFrom().equals(OrderFromEnum.WISH_ORDER)) {
+                promotionClient.addRecommendAvailableNum(
+                        order.getGoodsQuantity(), order.getGoodsSkuId(), SecurityConstants.INNER);
+            }
             if (order.getCouponId()!=0){
                 CouponMemberDTO couponMemberDTO1=new CouponMemberDTO();
                 couponMemberDTO1.setId(order.getCouponId());
@@ -2042,4 +2124,27 @@
         List<Order> page1 = this.list(wrapper);
         return page1;
     }
+
+    /**
+     * 根据skuId获取心愿求购详情数据
+     *
+     * @param id
+     * @return
+     */
+    @Override
+    public MgtPromotionWishRecommendVO getWishDataBySkuId(Long id) {
+        MgtPromotionWishRecommendVO vo = null;
+        List<Order> list = this.lambdaQuery().eq(Order::getGoodsSkuId, id)
+                .eq(Order::getOrderFrom, OrderFromEnum.WISH_ORDER)
+                .ne(Order::getOrderStatus, OrderStatusEnum.CANCELED).list();
+        if (CollUtils.isNotEmpty(list)) {
+            vo = new MgtPromotionWishRecommendVO();
+            Integer purchasedNum = list.stream().map(Order::getGoodsQuantity)
+                    .reduce(0, Integer::sum);
+            String orderNo = list.stream().map(Order::getOrderNo).collect(Collectors.joining(","));
+            vo.setPurchasedNum(purchasedNum);
+            vo.setOrderNo(orderNo);
+        }
+        return vo;
+    }
 }

--
Gitblit v1.7.1