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; import java.util.List; /** * 订单Feign客户端降级工厂 * * @author mitao */ @Slf4j @Component public class XpOrderClientFallbackFactory implements FallbackFactory { @Override public XpOrderClient create(Throwable cause) { log.error("订单服务调用失败: {}", cause.getMessage()); return new XpOrderClient() { @Override public R 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 hasUnPaodOrder(String uid) { log.error("获取进行中订单失败,原因: {}", cause.getMessage()); return R.ok(0l); } @Override public R hasUnPayOrder(String uid) { log.error("查询未支付订单失败,原因: {}", cause.getMessage()); return R.ok(0L); } @Override public R queryOrderById(Long orderId) { log.error("根据订单id查询订单信息查询失败,原因: {}", cause.getMessage()); return R.fail("根据订单id查询订单信息查询失败" + cause.getMessage()); } @Override public R 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 queryOrderByOrderNo(String orderNo) { log.error("根据订单编号查询订单信息查询失败,原因: {}", cause.getMessage()); return R.fail(); } @Override public R getOrderNum(GetOrderNumDto dto) { log.error("获取订单数量失败,原因: {}", cause.getMessage()); return R.fail(); } @Override public R todayCancellationCount(Long userId) { log.error("获取当日取消订单次数失败,原因: {}", cause.getMessage()); return R.fail("获取当日取消订单次数失败"); } @Override public R 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 updateOrderStatus(Long orderId, Integer status, Boolean orderException) { log.error("更新订单状态失败,原因: {}", cause.getMessage()); return R.fail("更新订单状态失败"); } @Override public R carAbnormalUpdateOrderStatus(Long orderId) { return null; } @Override public R saveVehicleLocation(OrderTrajectoryVo orderTrajectory) { log.error("保存订单轨迹数据失败,原因: {}", cause.getMessage()); return R.fail("保存订单轨迹数据失败"); } @Override public R determineUserType(Long userId) { log.error("确定用户类型失败,原因: {}", cause.getMessage()); return R.fail("确定用户类型失败"); } @Override public R getUserOrderNum(Long userId) { log.error("获取用户订单数量失败,原因: {}", cause.getMessage()); return R.fail("获取用户订单数量失败"); } @Override public R> getUserTypeIdList(Integer userType) { return R.fail("获取各类型用户数据失败"); } }; } }