yyy
2026-04-29 66e7a83f20944f1285bd869110e123564c7f9867
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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package com.xiaopeng.api.factory.order;
 
import com.xiaopeng.api.dto.order.GetOrderNumDto;
import com.xiaopeng.api.dto.order.PopOrderDto;
import com.xiaopeng.api.dto.statistics.OrderStatisticsDTO;
import com.xiaopeng.api.dto.statistics.StatisticsQueryDTO;
import com.xiaopeng.api.feignClient.order.XpOrderClient;
import com.xiaopeng.api.model.order.XpOrder;
import com.xiaopeng.api.vo.order.OrderTrajectoryVo;
import com.xiaopeng.common.core.domain.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestParam;
 
import java.math.BigDecimal;
import java.util.ArrayList;
 
/**
 * 订单Feign客户端降级工厂
 *
 * @author mitao
 */
@Slf4j
@Component
public class XpOrderClientFallbackFactory implements FallbackFactory<XpOrderClient> {
 
    @Override
    public XpOrderClient create(Throwable cause) {
        log.error("订单服务调用失败: {}", cause.getMessage());
        return new XpOrderClient() {
            @Override
            public R<OrderStatisticsDTO> getOrderStatistics(StatisticsQueryDTO query) {
                log.error("获取订单统计数据失败,原因: {}", cause.getMessage());
                // 降级返回空数据
                OrderStatisticsDTO dto = new OrderStatisticsDTO();
                dto.setTotalCount(0L);
                dto.setNewCount(0L);
                dto.setTotalMoney(BigDecimal.ZERO);
                dto.setTotalIncome(BigDecimal.ZERO);
                dto.setDailyCountList(new ArrayList<>());
                return R.ok(dto);
            }
 
            @Override
            public R<Long> hasUnPaodOrder(String uid) {
                log.error("获取进行中订单失败,原因: {}", cause.getMessage());
                return R.ok(0l);
            }
 
            @Override
            public R<XpOrder> queryOrderById(Long orderId) {
                log.error("根据订单id查询订单信息查询失败,原因: {}", cause.getMessage());
                return R.fail("根据订单id查询订单信息查询失败" + cause.getMessage());
            }
 
            @Override
            public R<Long> addOrder(XpOrder xpOrder) {
                log.error("添加订单失败,原因: {}", cause.getMessage());
                return R.fail();
            }
 
            @Override
            public R<?> cancelOrder(String orderId) {
                log.error("取消订单失败,原因: {}", cause.getMessage());
                return R.fail();
            }
 
            @Override
            public R<XpOrder> queryOrderByOrderNo(String orderNo) {
                log.error("根据订单编号查询订单信息查询失败,原因: {}", cause.getMessage());
                return R.fail();
            }
 
 
            @Override
            public R<Integer> getOrderNum(GetOrderNumDto dto) {
                log.error("获取订单数量失败,原因: {}", cause.getMessage());
                return R.fail();
            }
 
            @Override
            public R<Integer> todayCancellationCount(Long userId) {
                log.error("获取当日取消订单次数失败,原因: {}", cause.getMessage());
                return R.fail("获取当日取消订单次数失败");
            }
 
            @Override
            public R<Integer> countActiveOrdersByCityId(Long cityId) {
                log.error("查询进行中订单数量失败,原因: {}", cause.getMessage());
                return R.ok(0);
            }
 
            @Override
            public R<?> popOrder(PopOrderDto dto) {
                log.error("订单出队失败,原因: {}", cause.getMessage());
                return R.fail();
            }
 
            @Override
            public R<?> updateOrder(XpOrder xpOrder) {
                log.error("更新订单失败,原因: {}", cause.getMessage());
                return R.fail();
            }
 
            @Override
            public R<String> updateOrderStatus(Long orderId, Integer status, Boolean orderException) {
                log.error("更新订单状态失败,原因: {}", cause.getMessage());
                return R.fail("更新订单状态失败");
            }
 
            @Override
            public R<String> carAbnormalUpdateOrderStatus(Long orderId) {
 
                return null;
            }
 
 
            @Override
            public R<String> saveVehicleLocation(OrderTrajectoryVo orderTrajectory) {
                log.error("保存订单轨迹数据失败,原因: {}", cause.getMessage());
                return R.fail("保存订单轨迹数据失败");
            }
 
            @Override
            public R<Integer> determineUserType(Long userId) {
                log.error("确定用户类型失败,原因: {}", cause.getMessage());
                return R.fail("确定用户类型失败");
            }
 
 
            @Override
            public R<Long> getUserOrderNum(Long userId) {
                log.error("获取用户订单数量失败,原因: {}", cause.getMessage());
                return R.fail("获取用户订单数量失败");
            }
        };
    }
}