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;
|
|
|
/**
|
* 获取下单推送完后没有司机接单的提醒
|
* @param uid
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public ResultUtil<EndPushWarpper> 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 RedisTemplate redisTemplate;
|
|
/**
|
* 获取服务中的订单数据
|
* @param uid
|
* @return
|
* @throws Exception
|
*/
|
@Override
|
public ResultUtil<OrderServerWarpper> 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);
|
}
|
}
|