From d3b1427b1e919cfb42004f9e5430f078b1399a8e Mon Sep 17 00:00:00 2001
From: rentaiming <806181062@qq.com>
Date: 星期四, 13 六月 2024 18:08:55 +0800
Subject: [PATCH] 用户端商品

---
 ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java |  125 ++++++++++++++++++++++++++++++++++++-----
 1 files changed, 109 insertions(+), 16 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 1f65ef3..7ccf90f 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
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
+import com.ruoyi.common.core.constant.CacheConstants;
 import com.ruoyi.common.core.constant.SecurityConstants;
 import com.ruoyi.common.core.enums.OrderFromEnum;
 import com.ruoyi.common.core.enums.OrderStatusEnum;
@@ -12,34 +13,51 @@
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.StringUtils;
 import com.ruoyi.common.core.utils.page.PageDTO;
-import com.ruoyi.order.domain.MemberInvoiceRise;
+import com.ruoyi.common.redis.service.RedisService;
+import com.ruoyi.order.controller.management.dto.MgtMallOrderQuery;
+import com.ruoyi.order.controller.management.vo.MgtMallOrderVO;
 import com.ruoyi.order.domain.Paylog;
 import com.ruoyi.order.mapper.OrderAuctionBondMapper;
 import com.ruoyi.order.mapper.OrderMapper;
-import com.ruoyi.order.service.IOrderAuctionBondService;
 import com.ruoyi.order.service.IOrderService;
 import com.ruoyi.order.service.IPaylogService;
 import com.ruoyi.order.util.OrderUtil;
-import com.ruoyi.system.api.domain.*;
-import com.ruoyi.system.api.domain.dto.*;
-
-import java.lang.reflect.InvocationTargetException;
-import java.math.BigDecimal;
-import java.time.LocalDateTime;
-import java.util.List;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-import javax.annotation.Resource;
 import com.ruoyi.order.util.SinataUtil;
+import com.ruoyi.system.api.domain.CouponMember;
+import com.ruoyi.system.api.domain.CustomConfig;
+import com.ruoyi.system.api.domain.GoodsGroupPurchase;
+import com.ruoyi.system.api.domain.GoodsSeckill;
+import com.ruoyi.system.api.domain.GoodsSku;
+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.dto.CouponMemberDTO;
+import com.ruoyi.system.api.domain.dto.GoodsStockUpdDTO;
+import com.ruoyi.system.api.domain.dto.HomeGoodsSkuDTO;
+import com.ruoyi.system.api.domain.dto.MemberOrderDTO;
+import com.ruoyi.system.api.domain.dto.MemberOrderListDTO;
+import com.ruoyi.system.api.domain.dto.OrderDTO;
+import com.ruoyi.system.api.domain.dto.updMembeOneDTO;
 import com.ruoyi.system.api.domain.vo.MemberOrderListVO;
 import com.ruoyi.system.api.domain.vo.MemberTiOrderVO;
 import com.ruoyi.system.api.domain.vo.OrderVO;
 import com.ruoyi.system.api.feignClient.GoodsSkuClient;
 import com.ruoyi.system.api.feignClient.MemberClient;
 import com.ruoyi.system.api.feignClient.PromotionClient;
+import com.ruoyi.system.api.feignClient.SysUserClient;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.Collection;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import javax.annotation.Resource;
+
+import lombok.Synchronized;
 import org.apache.commons.beanutils.BeanUtils;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
 import org.springframework.stereotype.Service;
 
 /**
@@ -71,6 +89,15 @@
     @Resource
     private PaylogServiceImpl paylogService;
 
+    @Resource
+    private SysUserClient sysUserClient;
+
+    @Resource
+    private RedissonClient redissonClient;
+
+    @Resource
+    private RedisService redisService;
+
 
     @Override
     public void saveOrderOne(OrderDTO OrderDTO) {
@@ -97,6 +124,7 @@
         order.setMemberId(OrderDTO.getMemberId());
         order.setTotalAmount(OrderDTO.getTotalAmount());
         order.setOrderStatus(OrderStatusEnum.TO_PLAY);
+        order.setPoints(OrderDTO.getPoints());
         order.setGoodsQuantity(OrderDTO.getGoodsQuantity());
         order.setReceiverName(OrderDTO.getReceiverName());
         order.setReceiverphone(OrderDTO.getReceiverphone());
@@ -183,6 +211,7 @@
     }
 
     @Override
+    @Synchronized
     public MemberTiOrderVO saveMemberOrder(MemberOrderDTO memberOrderDTO) {
 
         MemberTiOrderVO memberOrderVO=new MemberTiOrderVO();
@@ -229,8 +258,22 @@
             pice=goodsSku.getPrice();
         }
         if (memberOrderDTO.getOrderFrom()==2){
-            order.setOrderFrom(OrderFromEnum.SNAP_ORDERS);
             GoodsSeckill data = goodsSkuClient.getGoodsSeckillOne(memberOrderDTO.getGoodsSkuId(), SecurityConstants.INNER).getData();
+      /*      String goodsLock = "goods_lock_" + CacheConstants.SECKILL_GOODS + data.getId();
+            RLock redissonLock = redissonClient.getLock(goodsLock);
+            Integer surpNum = 0;
+            try {
+                redissonLock.lock(30, TimeUnit.SECONDS);
+                surpNum = redisService.getCacheObject(CacheConstants.SECKILL_GOODS + data.getId());
+                if (surpNum == null || surpNum < memberOrderDTO.getGoodsQuantity()) {
+                    throw new ServiceException("商品已被抢完");
+                }
+
+            }catch (Exception e){
+                throw new ServiceException("reids 出错");
+            }*/
+            order.setOrderFrom(OrderFromEnum.SNAP_ORDERS);
+
             GoodsSku goodsSku = goodsSkuClient.getGoodsSkuOne(data.getGoodsSkuId(), SecurityConstants.INNER).getData();
             memberOrderVO.setGoodsSkuId(memberOrderDTO.getGoodsSkuId());
             memberOrderVO.setPrice(goodsSku.getPrice());
@@ -251,7 +294,7 @@
             order.setSkuName(goodsSku.getSkuName());
             order.setPrice(data.getSeckillPrice());
             order.setCoverPic(goodsSku.getCoverPic());
-
+            /*redisService.setCacheObject(CacheConstants.SECKILL_GOODS + data.getId(), surpNum - memberOrderDTO.getGoodsQuantity());*/
         }
         if (memberOrderDTO.getOrderFrom()==3){
             order.setOrderFrom(OrderFromEnum.GROUP_PURCHASE_ORDERS);
@@ -273,6 +316,13 @@
         order.setOrderTime(LocalDateTime.now());
         order.setGoodsQuantity(memberOrderDTO.getGoodsQuantity());
         order.setTotalAmount(pice.multiply(new BigDecimal(memberOrderDTO.getGoodsQuantity())));
+        CustomConfig memberPointsMoney = sysUserClient.getconfig("MEMBER_POINTS_MONEY").getData();
+        CustomConfig memberPointsPoints = sysUserClient.getconfig("MEMBER_POINTS_POINTS").getData();
+
+       BigDecimal pic=pice.multiply(new BigDecimal(memberOrderDTO.getGoodsQuantity()));
+       Double aDouble= Double.valueOf(memberPointsMoney.getConfigValue()) * Double.valueOf(memberPointsPoints.getConfigValue());
+       BigDecimal pi=pic.multiply(new BigDecimal(aDouble));
+        order.setPoints(pi.intValue());
         order.setOrderStatus(OrderStatusEnum.TO_PLAY);
 
         if (memberOrderDTO.getOrderFrom()==3){
@@ -309,6 +359,8 @@
         memberOrderVO.setReceiverCity(order.getReceiverCity());
         memberOrderVO.setReceiverDetailAddress(order.getReceiverDetailAddress());
         memberOrderVO.setReceiverphone(order.getReceiverphone());
+        Integer delayTime = 30;
+        redisService.setCacheObject(CacheConstants.ORDER_AUTOMATIC_CANCEL + "-" + order.getId(), order.getId() , delayTime.longValue(), TimeUnit.MINUTES);
 
         return memberOrderVO;
     }
@@ -434,6 +486,15 @@
             promotionClient.updCouponMember(couponMemberDTO2, SecurityConstants.INNER);
 
             order.setTotalAmount(pice);
+
+            CustomConfig memberPointsMoney = sysUserClient.getconfig("MEMBER_POINTS_MONEY").getData();
+            CustomConfig memberPointsPoints = sysUserClient.getconfig("MEMBER_POINTS_POINTS").getData();
+
+            BigDecimal pic=pice.multiply(new BigDecimal(memberOrderDTO.getGoodsQuantity()));
+            Double aDouble= Double.valueOf(memberPointsMoney.getConfigValue()) * Double.valueOf(memberPointsPoints.getConfigValue());
+            BigDecimal pi=pic.multiply(new BigDecimal(aDouble));
+            order.setPoints(pi.intValue());
+
         }
 
         baseMapper.updateById(order);
@@ -498,6 +559,15 @@
             order.setOrderStatus(OrderStatusEnum.CANCELED);
             order.setCancelTime(LocalDateTime.now());
             baseMapper.updateById(order);
+
+            updMembeOneDTO MembeOneDTO=new updMembeOneDTO();
+            MembeOneDTO.setType(2);
+            MembeOneDTO.setMemberId(order.getMemberId());
+            MembeOneDTO.setMoney(order.getTotalAmount());
+            MembeOneDTO.setTotalPoints(order.getPoints());
+            memberClient.updMembeOne(MembeOneDTO);
+
+
             if (order.getPaymentMethod() != null && order.getPaymentMethod().getCode() == 1) {//支付宝
                 //获取支付信息
                 LambdaQueryWrapper<Paylog> paylogEntityWrapper = Wrappers.lambdaQuery();
@@ -578,4 +648,27 @@
             baseMapper.updateById(order);
         }
     }
+
+    /**
+     * 根据优惠券id集合查询订单列表
+     *
+     * @param couponIds 优惠券id集合
+     * @return List<Order>
+     */
+    @Override
+    public List<Order> getOrderByCouponIds(Collection<Long> couponIds) {
+        return this.lambdaQuery().in(Order::getCouponId, couponIds)
+                .eq(Order::getOrderStatus, OrderStatusEnum.FINISHED).list();
+    }
+
+    /**
+     * 商城订单分页列表
+     *
+     * @param query 商城订单查询对象
+     * @return PageDTO<MgtMallOrderVO>
+     */
+    @Override
+    public PageDTO<MgtMallOrderVO> getMallOrderPage(MgtMallOrderQuery query) {
+        return null;
+    }
 }

--
Gitblit v1.7.1