package com.xiaopeng.order.controller; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.xiaopeng.api.dto.account.UcUserInfo; import com.xiaopeng.api.dto.vehicleConvoy.ServiceVehicleListDto; import com.xiaopeng.api.feignClient.account.UserResourcesClient; import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient; import com.xiaopeng.api.model.order.XpOrder; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.utils.StringUtils; import com.xiaopeng.order.dto.UserOrderListDto; import com.xiaopeng.order.service.IXpOrderService; import com.xiaopeng.order.vo.OrderInfoVo; import com.xiaopeng.order.vo.ServiceOrderVo; import com.xiaopeng.order.vo.ServiceVehicleListVo; import com.xiaopeng.order.vo.UserOrderListVo; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** * 提供三方客服系统接口 */ @RestController @RequestMapping("/logan/rt/customerService") public class CustomerServiceController { @Resource private XpVehicleClient xpVehicleClient; @Resource private IXpOrderService xpOrderService; @Resource private UserResourcesClient userResourcesClient; /** * 1. 判断 VIN 是否为 robotaxi 车辆 * @param vim * @return */ @GetMapping("/isRobotaxi/{vim}") @ApiOperation(value = "判断 VIN 是否为 robotaxi 车辆", notes = "客服系统对接") @ApiImplicitParam(name = "vim", value = "VIN码", required = true, dataType = "string", paramType = "path") public R isRobotaxi(@PathVariable String vim){ if(StringUtils.isEmpty(vim)){ return R.fail("VIM码不能为空"); } XpVehicle xpVehicle = xpVehicleClient.findByVehicleVin(vim).getData(); if(null != xpVehicle){ return R.ok(true); } return R.ok(false); } /** * 2. 根据 VIN 查询在途/最近订单客户手机号 * @param vim * @return */ @GetMapping("/getServiceOrder/{vim}") @ApiOperation(value = "根据 VIN 查询在途/最近订单客户手机号", notes = "客服系统对接") @ApiImplicitParam(name = "vim", value = "VIN码", required = true, dataType = "string", paramType = "path") public R getServiceOrder(@PathVariable String vim){ if(StringUtils.isEmpty(vim)){ return R.fail("VIM码不能为空"); } XpVehicle xpVehicle = xpVehicleClient.findByVehicleVin(vim).getData(); if(null == xpVehicle){ return R.fail("VIM码不存在"); } XpOrder one = xpOrderService.getOne(new QueryWrapper().eq("vehicle_id", xpVehicle.getId()) .eq("is_deleted", 0).last(" order by create_time desc limit 1")); if(null == one){ return R.ok(new ServiceOrderVo()); } ServiceOrderVo vo = new ServiceOrderVo(); vo.setOrderId(one.getId()); UcUserInfo ucUserInfo = userResourcesClient.getBaseUserByUid(one.getAppUserId().toString()); vo.setCustomerPhone(null != ucUserInfo ? ucUserInfo.getMobile() : null); vo.setHasActiveOrder(!Arrays.asList(0, 8, 9, 10).contains(one.getStatus())); return R.ok(vo); } /** * 3. 获取当前在运营车辆列表 * @param dto * @return */ @PostMapping("/getServiceVehicleList") @ApiOperation(value = "获取当前在运营车辆列表", notes = "客服系统对接") public R> getServiceVehicleList(@RequestBody ServiceVehicleListDto dto){ R> serviceVehicleList = xpVehicleClient.getServiceVehicleList(dto); if(serviceVehicleList.getCode() != 200){ return R.fail(serviceVehicleList.getMsg()); } List collect = serviceVehicleList.getData().stream().map(xpVehicle -> { ServiceVehicleListVo vo = new ServiceVehicleListVo(); vo.setVim(xpVehicle.getVehicleVin()); vo.setPlateNumber(xpVehicle.getPlateNumber()); return vo; }).collect(Collectors.toList()); return R.ok(collect); } /** * 4. 根据 UID 查询用户是否有 RT 订单 & 订单列表 * @param dto * @return */ @PostMapping("/getUserOrderList") @ApiOperation(value = "根据 UID 查询用户是否有 RT 订单 & 订单列表", notes = "客服系统对接") public R> getUserOrderList(@RequestBody UserOrderListDto dto){ List userOrderList = xpOrderService.getUserOrderList(dto); return R.ok(userOrderList); } /** * 5. 根据订单号查询订单详情 * @param orderId * @return */ @GetMapping("/getOrderDetail/{orderId}") @ApiOperation(value = "根据订单号查询订单详情", notes = "客服系统对接") @ApiImplicitParam(name = "orderId", value = "订单ID", required = true, dataType = "Long", paramType = "path") public R getOrderDetail(@PathVariable Long orderId){ if(null == orderId){ return R.fail("订单ID不能为空"); } return R.ok(xpOrderService.getOrderInfo(orderId)); } }