Pu Zhibing
4 天以前 0cc73a9ffcdd356e0b797e458b400acfb660da94
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
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);
    }
}