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(onConstructor_ = @Lazy) 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); } }