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.RedisUtil; 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.system.warpper.OrderStatusWarpper; import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.List; @Service public class NettyServiceImpl implements INettyService { @Autowired private IOrderTaxiService orderTaxiService; @Autowired private IOrderPrivateCarService orderPrivateCarService; @Autowired private IOrderCrossCityService orderCrossCityService; /** * 获取下单推送完后没有司机接单的提醒 * @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); } @Resource private RedisUtil redisUtil; /** * 获取服务中的订单数据 * @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 = redisUtil.getValue("DISTANCE:"+orderServerWarpper.getState()+":"+ orderId); if (value==null){ redisUtil.setStrValue("DISTANCE:"+orderServerWarpper.getState()+":"+ orderId,reservationMileage); String s = new BigDecimal(reservationMileage).setScale(2, RoundingMode.HALF_UP).toString(); orderServerWarpper.setReservationMileage(s); }else { //最近的一次距离 String recent = redisUtil.getValue("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()); redisUtil.setStrValue("DISTANCE:" +orderServerWarpper.getState()+":"+ orderId,reservationMileage); }else { orderServerWarpper.setReservationMileage(recentDecimal.toString()); } } } String reservationTime = orderServerWarpper.getReservationTime(); if (reservationTime!=null){ String value = redisUtil.getValue("TIME:"+orderServerWarpper.getState()+":"+ orderId); if (value==null){ redisUtil.setStrValue("TIME:"+orderServerWarpper.getState()+":"+ orderId,reservationTime); String s = new BigDecimal(reservationTime).setScale(2, RoundingMode.HALF_UP).toString(); orderServerWarpper.setReservationTime(s); }else { //最近的一次距离 String recent = redisUtil.getValue("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()); redisUtil.setStrValue("TIME:" +orderServerWarpper.getState()+":"+ orderId,reservationTime); }else { orderServerWarpper.setReservationTime(recentDecimal.toString()); } } } return ResultUtil.success(orderServerWarpper); } }