package com.xiaopeng.order.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient;
import com.xiaopeng.api.model.order.XpTestOrder;
import com.xiaopeng.api.vo.order.*;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.api.model.order.OrderTrajectory;
import com.xiaopeng.order.model.dto.XpOrderOperateDTO;
import com.xiaopeng.order.model.dto.XpOrderReassignDTO;
import com.xiaopeng.order.model.query.XpTestOrderPageQuery;
import com.xiaopeng.order.model.vo.*;
import com.xiaopeng.order.service.IXpTestOrderService;
import io.swagger.annotations.*;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
/**
*
* 订单 前端控制器
*
*
* @author mitao
* @since 2026-02-03
*/
@RestController
@Api(tags = "测试订单")
@RequiredArgsConstructor
public class XpTestOrderController {
private final IXpTestOrderService xpTestOrderService;
private final XpVehicleClient xpVehicleClient;
/**
* 通过订单id查询订单信息
*
* @param orderId 订单id
* @return 订单详情
*/
@PostMapping("/logan/inner/v1/testOrder/queryOrderById")
public R queryOrderById(@RequestParam Long orderId){
XpTestOrder xpTestOrder = xpTestOrderService.getById(orderId);
return R.ok(xpTestOrder);
}
/**
* 修改订单状态
* @param orderId
* @param status
* @return
*/
@PostMapping("/logan/inner/v1/testOrder/updateOrderStatus")
public R updateOrderStatus(@RequestParam Long orderId,
@RequestParam Integer status){
xpTestOrderService.updateOrderStatus(orderId, status);
return R.ok();
}
/**
* 根据订单ID查询取消订单
*
* @param orderId
* @return
*/
@PostMapping("/inner/testOrder/cancelTestOrderById")
public R> cancelTestOrderById(@RequestParam Long orderId) {
return xpTestOrderService.cancelTestOrderById(orderId);
}
/**
* 生成订单
* @param query
* @return
*/
@ApiOperation(value = "生成订单", tags = {"管理后台-测试计划"})
@PostMapping("/api/v1/testOrder/addTestOrder")
public R> addTestOrder(@RequestBody AddTestOrderVo query){
xpTestOrderService.addTestOrder(query);
return R.ok();
}
/**
* 订单分页列表
*
* @param query 分页查询参数
* @return 分页结果
*/
@ApiOperation(value = "订单分页列表", tags = {"管理后台-测试计划"})
@PostMapping("/api/v1/testOrder/pageList")
public R> pageList(@Validated @RequestBody XpTestOrderPageQuery query) {
PageInfo pageInfo = xpTestOrderService.pageList(query);
return R.ok(pageInfo);
}
/**
* 订单详情
*
* @param id 订单ID
* @return 订单详情
*/
@ApiOperation(value = "订单详情", tags = {"管理后台-测试计划"})
@GetMapping("/api/v1/testOrder/queryById")
public R queryById(@ApiParam(value = "订单id", required = true) @RequestParam Long id) {
XpTestOrderDetailVO detail = xpTestOrderService.getOrderDetail(id);
return R.ok(detail);
}
/**
* 删除订单
*
* @param id 订单ID
* @return 操作结果
*/
@ApiOperation(value = "删除订单", tags = {"管理后台-测试计划"})
@DeleteMapping("/api/v1/testOrder/deleteById")
public R> deleteById(@ApiParam(value = "订单id", required = true) @RequestParam Long id) {
xpTestOrderService.deleteOrder(id);
return R.ok();
}
/**
* 取消/关闭订单
*
* @param dto 操作请求参数
* @return 操作结果
*/
@ApiOperation(value = "取消/关闭订单", tags = {"管理后台-测试计划"})
@PostMapping("/api/v1/testOrder/cancelAndCloseById")
public R> cancelAndCloseById(@Validated @RequestBody XpOrderOperateDTO dto) {
xpTestOrderService.cancelOrCloseOrder(dto.getOrderId(), dto.getType());
return R.ok();
}
/**
* 改派订单
*
* @param dto 改派请求参数
* @return 操作结果
*/
@ApiOperation(value = "改派订单", tags = {"管理后台-测试计划"}, notes = "车辆列表在vehicleConvoy服务")
@PostMapping("/api/v1/testOrder/reassignById")
public R> reassignById(@Validated @RequestBody XpOrderReassignDTO dto) {
xpTestOrderService.reassignOrder(
dto.getOrderId(),
dto.getVehicleId(),
dto.getReassignReason()
);
return R.ok();
}
@ApiOperation(value = "订单改价", tags = {"管理后台-测试计划"})
@PostMapping("/api/v1/testOrder/changeAmount")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = "订单ID", required = true, dataType = "Long"),
@ApiImplicitParam(name = "amount", value = "新的订单金额", required = true, dataType = "BigDecimal")
})
public R> changeAmount(@RequestParam("id") Long id, @RequestParam("amount") BigDecimal amount) {
xpTestOrderService.changeAmount(id, amount);
return R.ok();
}
/**
* 订单车辆定位实时存储-订单车辆定位实时存储(内部接口)
*/
@PostMapping("/logan/inner/v1/testOrder/saveVehicleLocation")
public R saveVehicleLocation(@RequestBody OrderTrajectoryVo vo) {
OrderTrajectory orderTrajectory = new OrderTrajectory();
BeanUtils.copyProperties(vo, orderTrajectory);
xpTestOrderService.saveVehicleLocation(orderTrajectory);
return R.ok();
}
/**
* 根据测试计划ID查询订单数量
* @param testPlanId
* @return
*/
@PostMapping("/inner/v1/testOrder/queryCountByTestPlanId")
public R queryCountByTestPlanId(@RequestParam Long testPlanId){
long count = xpTestOrderService.count(new QueryWrapper().eq("test_plan_id", testPlanId));
return R.ok(count);
}
/**
* 行驶中车辆异常,订单状态修改- 修改状态=7 再修改 金额-再将状态修改成8
*/
@ApiOperation(value = "行驶中车辆异常,订单状态修改- 修改状态=7 再修改 金额-再将状态修改成8")
@PostMapping("/logan/inner/v1/testOrder/carAbnormalUpdateOrderStatus")
public R> carAbnormalUpdateOrderStatus(@RequestParam Long orderId) {
xpTestOrderService.carAbnormalUpdateOrderStatus(orderId);
return R.ok();
}
}