package com.ruoyi.user.service.impl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ruoyi.admin.api.entity.Prize;
|
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.UserRecipient;
|
import com.ruoyi.user.mapper.OrderMapper;
|
import com.ruoyi.user.request.OrderRequest;
|
import com.ruoyi.user.service.OrderService;
|
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;
|
|
/**
|
* <p>
|
* 订单管理 服务实现类
|
* </p>
|
*
|
* @author hjl
|
* @since 2024-06-07
|
*/
|
@Service
|
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
|
|
@Resource
|
private UserRecipientService userRecipientService;
|
@Resource
|
private RecoveryServeService recoveryServeService;
|
@Resource
|
private OrderClient orderClient;
|
|
/**
|
* 雪花算法类
|
*/
|
private static final SnowflakeIdWorker SNOW_FLAKE_ID_WORKER = new SnowflakeIdWorker(5, 5);
|
|
@Override
|
public Object obtainAllowance(List<Prize> prizeList) {
|
// 过滤中奖概率为空的奖品
|
List<Prize> prizes = prizeList.stream().filter(data -> data.getProbability() != 0).collect(Collectors.toList());
|
// 转盘逻辑
|
double sum = prizes.stream().map(Prize::getProbability).mapToDouble(Double::doubleValue).sum();
|
Prize result = null;
|
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("下单失败,预约服务信息或收货地址信息异常!");
|
}
|
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();
|
|
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());
|
userOrderRequest.setDefaultPrice(recoveryServe.getDefaultPrice());
|
userOrderRequest.setServeName(recoveryServe.getServeName());
|
userOrderRequest.setUserId(userid);
|
return orderClient.orderEstimate(userOrderRequest).getData();
|
}
|
|
}
|