From 1442f149019ee0590389abd7a88a79c4d9b59034 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期二, 27 五月 2025 18:23:34 +0800
Subject: [PATCH] bug修改

---
 ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/OrderServiceImpl.java |  133 +++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 124 insertions(+), 9 deletions(-)

diff --git a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/OrderServiceImpl.java b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/OrderServiceImpl.java
index ccc18a1..61b34c1 100644
--- a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/OrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/OrderServiceImpl.java
@@ -2,11 +2,24 @@
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.admin.api.entity.Prize;
+import com.ruoyi.common.core.constant.Constants;
+import com.ruoyi.common.core.exception.GlobalException;
+import com.ruoyi.common.core.utils.SnowflakeIdWorker;
+import com.ruoyi.order.api.entity.UserOrderRequest;
+import com.ruoyi.order.api.feignClient.OrderClient;
 import com.ruoyi.user.entity.Order;
+import com.ruoyi.user.entity.RecoveryServe;
+import com.ruoyi.user.entity.RecoveryServePrice;
+import com.ruoyi.user.entity.UserRecipient;
 import com.ruoyi.user.mapper.OrderMapper;
+import com.ruoyi.user.request.OrderRequest;
 import com.ruoyi.user.service.OrderService;
+import com.ruoyi.user.service.RecoveryServePriceService;
+import com.ruoyi.user.service.RecoveryServeService;
+import com.ruoyi.user.service.UserRecipientService;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.util.List;
 import java.util.Random;
 import java.util.stream.Collectors;
@@ -22,6 +35,20 @@
 @Service
 public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
 
+    @Resource
+    private UserRecipientService userRecipientService;
+    @Resource
+    private RecoveryServeService recoveryServeService;
+    @Resource
+    private OrderClient orderClient;
+    @Resource
+    private RecoveryServePriceService servePriceService;
+
+    /**
+     * 雪花算法类
+     */
+    private static final SnowflakeIdWorker SNOW_FLAKE_ID_WORKER = new SnowflakeIdWorker(5, 5);
+
     @Override
     public Object obtainAllowance(List<Prize> prizeList) {
         // 过滤中奖概率为空的奖品
@@ -29,18 +56,106 @@
         // 转盘逻辑
         double sum = prizes.stream().map(Prize::getProbability).mapToDouble(Double::doubleValue).sum();
         Prize result = null;
-        for (Prize prize : prizes) {
-            double item = prize.getProbability() / sum;
-            // 随机数对象
-            Random random = new Random();
-            // 生成一个介于0到1之间的随机小数
-            double randomDouble = random.nextDouble();
-            if (item <= randomDouble) {
-                result = prize;
-                break;
+        boolean v = true;
+        while (v) {
+            for (Prize prize : prizes) {
+                double item = prize.getProbability() / sum;
+                // 随机数对象
+                Random random = new Random();
+                // 生成一个介于0到1之间的随机小数
+                double randomDouble = random.nextDouble();
+                if (item >= randomDouble) {
+                    result = prize;
+                    break;
+                }
+            }
+            if (null != result) {
+                v = false;
             }
         }
         // 抽中的商品
         return result;
     }
+
+    @Override
+    public Boolean placeOrder(OrderRequest orderRequest, Integer userId) {
+        Integer serveId = orderRequest.getServeId();
+        Integer addressId = orderRequest.getAddressId();
+        // 下单相关信息
+        RecoveryServe recoveryServe = recoveryServeService.lambdaQuery().eq(RecoveryServe::getId, serveId)
+                .eq(RecoveryServe::getIsDelete, 0).one();
+        UserRecipient userRecipient = userRecipientService.lambdaQuery().eq(UserRecipient::getId, addressId)
+                .eq(UserRecipient::getIsDelete, 0).one();
+        if (null == recoveryServe || null == userRecipient) {
+            throw new GlobalException("下单失败,预约服务信息或收货地址信息异常!");
+        }
+        String address = userRecipient.getAddress();
+        if (address.contains(Constants.PROVINCE) && address.contains(Constants.MARKET)) {
+
+        }
+        UserOrderRequest userOrderRequest = new UserOrderRequest();
+        userOrderRequest.setOrderNumber(orderRequest.getOrderNumber());
+        userOrderRequest.setServeId(orderRequest.getServeId());
+        userOrderRequest.setReservationName(orderRequest.getReservationName());
+        userOrderRequest.setReservationPhone(orderRequest.getReservationPhone());
+        userOrderRequest.setAddressId(orderRequest.getAddressId());
+        userOrderRequest.setTime(orderRequest.getTime());
+        userOrderRequest.setReservationRemark(orderRequest.getReservationRemark());
+        userOrderRequest.setLongitude(orderRequest.getLongitude());
+        userOrderRequest.setLatitude(orderRequest.getLatitude());
+        userOrderRequest.setSubsidy(orderRequest.getSubsidy());
+        userOrderRequest.setDefaultPrice(recoveryServe.getDefaultPrice());
+        userOrderRequest.setServeName(recoveryServe.getServeName());
+        userOrderRequest.setAddress(userRecipient.getAddress());
+        userOrderRequest.setAddressDetail(userRecipient.getAddressDetail());
+        userOrderRequest.setUserId(userId);
+        return orderClient.placeOrder(userOrderRequest).getData();
+
+    }
+
+    @Override
+    public String orderEstimate(OrderRequest orderRequest, Integer userid) {
+        Integer serveId = orderRequest.getServeId();
+        orderRequest.setOrderNumber(String.valueOf(SNOW_FLAKE_ID_WORKER.nextId()));
+        Integer addressId = orderRequest.getAddressId();
+        // 下单相关信息
+        RecoveryServe recoveryServe = recoveryServeService.lambdaQuery().eq(RecoveryServe::getId, serveId)
+                .eq(RecoveryServe::getIsDelete, 0).one();
+        RecoveryServePrice price = servePriceService.lambdaQuery()
+                .eq(RecoveryServePrice::getRecoveryServeId, serveId)
+                .eq(RecoveryServePrice::getCity, orderRequest.getCity())
+                .eq(RecoveryServePrice::getIsDelete, 0).one();
+        if (null == recoveryServe) {
+            throw new GlobalException("下单失败,预约服务信息或收货地址信息异常!");
+        }
+        UserOrderRequest userOrderRequest = new UserOrderRequest();
+        if (null != orderRequest.getAddressId()) {
+            UserRecipient userRecipient = userRecipientService.lambdaQuery().eq(UserRecipient::getId, addressId)
+                    .eq(UserRecipient::getIsDelete, 0).one();
+            userOrderRequest.setAddress(userRecipient.getAddress());
+            userOrderRequest.setAddressDetail(userRecipient.getAddressDetail());
+        } else {
+            userOrderRequest.setAddressDetail(orderRequest.getFillAddress());
+        }
+        userOrderRequest.setOrderNumber(orderRequest.getOrderNumber());
+        userOrderRequest.setServeId(orderRequest.getServeId());
+        userOrderRequest.setReservationName(orderRequest.getReservationName());
+        userOrderRequest.setReservationPhone(orderRequest.getReservationPhone());
+        userOrderRequest.setAddressId(orderRequest.getAddressId());
+        userOrderRequest.setTime(orderRequest.getTime());
+        userOrderRequest.setReservationRemark(orderRequest.getReservationRemark());
+        userOrderRequest.setLongitude(orderRequest.getLongitude());
+        userOrderRequest.setLatitude(orderRequest.getLatitude());
+        userOrderRequest.setSubsidy(orderRequest.getSubsidy());
+        // 城市回收价
+        if (null == price) {
+            userOrderRequest.setDefaultPrice(recoveryServe.getDefaultPrice());
+        } else {
+            userOrderRequest.setDefaultPrice(price.getRecoveryPrice());
+        }
+        userOrderRequest.setServeName(recoveryServe.getServeName());
+        userOrderRequest.setUserId(userid);
+        return orderClient.orderEstimate(userOrderRequest).getData();
+    }
+
 }

--
Gitblit v1.7.1