| | |
| | | |
| | | 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; |
| | |
| | | @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) { |
| | | // 过滤中奖概率为空的奖品 |
| | |
| | | // 转盘逻辑 |
| | | 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(); |
| | | } |
| | | |
| | | } |