package com.stylefeng.guns.modular.system.service.impl; import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService; import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService; import com.stylefeng.guns.modular.system.service.INettyService; import com.stylefeng.guns.modular.system.util.ResultUtil; import com.stylefeng.guns.modular.system.warpper.EndPushWarpper; import com.stylefeng.guns.modular.system.warpper.OrderServerWarpper; import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; @Service public class NettyServiceImpl implements INettyService { @Autowired private IOrderTaxiService orderTaxiService; @Autowired private IOrderPrivateCarService orderPrivateCarService; @Autowired private IOrderCrossCityService orderCrossCityService; @Resource private RedisTemplate redisTemplate; /** * 获取下单推送完后没有司机接单的提醒 * @param uid * @return * @throws Exception */ @Override public ResultUtil queryEndPush(Integer orderId, Integer orderType, Integer uid) throws Exception { EndPushWarpper endPushWarpper = null; switch (orderType) { case 1: endPushWarpper = orderPrivateCarService.queryEndPush(uid); break; case 2: endPushWarpper = orderTaxiService.queryEndPush(uid); break; } return ResultUtil.success(endPushWarpper); } /** * 获取服务中的订单数据 * * @param uid * @return * @throws Exception */ @Override public ResultUtil queryOrderServer(Integer orderId, Integer orderType, Integer uid) throws Exception { OrderServerWarpper orderServerWarpper = null; switch (orderType){ case 1: orderServerWarpper = orderPrivateCarService.queryOrderServer(orderId, uid);//专车 break; case 2: orderServerWarpper = orderTaxiService.queryOrderServer(orderId, uid);//出租车 break; case 3: orderServerWarpper = orderCrossCityService.queryOrderServer(orderId, uid);//出租车 break; } String reservationMileage = orderServerWarpper.getReservationMileage(); if(reservationMileage!=null){ //从redis中拿取最后的距离参数 String value = (String) redisTemplate.opsForValue().get("DISTANCE:" + orderServerWarpper.getState() + ":" + orderId); if (value==null){ redisTemplate.opsForValue().set("DISTANCE:" + orderId, reservationMileage); String s = new BigDecimal(reservationMileage).setScale(2, RoundingMode.HALF_UP).toString(); orderServerWarpper.setReservationMileage(s); }else { //最近的一次距离 String recent = (String) redisTemplate.opsForValue().get("DISTANCE:" + orderServerWarpper.getState() + ":" + orderId); BigDecimal recentDecimal = new BigDecimal(recent).setScale(2, RoundingMode.HALF_UP); BigDecimal bigDecimal = new BigDecimal(reservationMileage).setScale(2, RoundingMode.HALF_UP); if (bigDecimal.compareTo(recentDecimal)<0){ orderServerWarpper.setReservationMileage(bigDecimal.toString()); redisTemplate.opsForValue().set("DISTANCE:" + orderServerWarpper.getState() + ":" + orderId, reservationMileage); }else { orderServerWarpper.setReservationMileage(recentDecimal.toString()); } } } String reservationTime = orderServerWarpper.getReservationTime(); if (reservationTime!=null){ String value = (String) redisTemplate.opsForValue().get("TIME:" + orderServerWarpper.getState() + ":" + orderId); if (value==null){ redisTemplate.opsForValue().set("TIME:" + orderId, reservationTime); String s = new BigDecimal(reservationTime).setScale(2, RoundingMode.HALF_UP).toString(); orderServerWarpper.setReservationTime(s); }else { //最近的一次距离 String recent = (String) redisTemplate.opsForValue().get("TIME:" + orderServerWarpper.getState() + ":" + orderId); BigDecimal recentDecimal = new BigDecimal(recent).setScale(2, RoundingMode.HALF_UP); BigDecimal bigDecimal = new BigDecimal(reservationTime).setScale(2, RoundingMode.HALF_UP); if (bigDecimal.compareTo(recentDecimal)<0){ orderServerWarpper.setReservationTime(bigDecimal.toString()); redisTemplate.opsForValue().set("TIME:" + orderServerWarpper.getState() + ":" + orderId, reservationTime); }else { orderServerWarpper.setReservationTime(recentDecimal.toString()); } } } return ResultUtil.success(orderServerWarpper); } }