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.constant.Constants;
|
import com.ruoyi.common.core.exception.GlobalException;
|
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.math.BigDecimal;
|
import java.util.Date;
|
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;
|
|
@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) {
|
String orderNumber = orderRequest.getOrderNumber();
|
Integer serveId = orderRequest.getServeId();
|
String reservationName = orderRequest.getReservationName();
|
String reservationPhone = orderRequest.getReservationPhone();
|
Integer addressId = orderRequest.getAddressId();
|
Date time = orderRequest.getTime();
|
String reservationRemark = orderRequest.getReservationRemark();
|
Double longitude = orderRequest.getLongitude();
|
Double latitude = orderRequest.getLatitude();
|
BigDecimal subsidy = orderRequest.getSubsidy();
|
// 下单相关信息
|
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("下单失败,预约服务信息或收货地址信息异常!");
|
}
|
// 订单信息
|
Order order = new Order();
|
order.setOrderNumber(orderNumber);
|
order.setServeId(serveId);
|
order.setServeName(recoveryServe.getServeName());
|
order.setServePrice(recoveryServe.getDefaultPrice());
|
order.setUserId(userId);
|
order.setReservationName(reservationName);
|
order.setReservationPhone(reservationPhone);
|
order.setReservationAddress(userRecipient.getAddress());
|
order.setTime(time);
|
order.setReservationRemark(reservationRemark);
|
order.setOrderMoney(recoveryServe.getDefaultPrice().add(new BigDecimal(String.valueOf(subsidy))));
|
order.setState(Constants.ZERO);
|
order.setType(Constants.ZERO);
|
order.setLongitude(longitude);
|
order.setLatitude(latitude);
|
order.setIsWithdrawal(Constants.ZERO);
|
order.setSubsidy(subsidy);
|
order.setAddress(userRecipient.getAddressDetail());
|
return this.save(order);
|
|
}
|
|
}
|