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.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; /** *

* 订单管理 服务实现类 *

* * @author hjl * @since 2024-06-07 */ @Service public class OrderServiceImpl extends ServiceImpl 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 prizeList) { // 过滤中奖概率为空的奖品 List 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("下单失败,预约服务信息或收货地址信息异常!"); } 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(); } }