package com.xiaopeng.order.controller; import cn.afterturn.easypoi.excel.ExcelExportUtil; import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.hutool.core.bean.BeanUtil; import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.xiaopeng.api.dto.QueryOrderRouteDTO; import com.xiaopeng.api.dto.operation.LonLatDto; 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.vehicleConvoy.XpVehicleClient; import com.xiaopeng.api.model.order.XpTestOrder; import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; import com.xiaopeng.api.vo.automaticPilot.VehiclePosition; import com.xiaopeng.api.vo.operation.RouteVo; import com.xiaopeng.api.vo.order.*; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.utils.WebUtils; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.common.redis.service.RedisService; import com.xiaopeng.order.mangodb.model.OrderTrajectory; import com.xiaopeng.order.model.dto.XpOrderCommentDto; import com.xiaopeng.order.model.dto.XpOrderOperateDTO; import com.xiaopeng.order.model.dto.XpOrderPayDto; import com.xiaopeng.order.model.dto.XpOrderReassignDTO; import com.xiaopeng.order.model.exportExcel.XpOrderExportExcel; import com.xiaopeng.order.model.query.XpHistoryOrderListQuery; import com.xiaopeng.order.model.query.XpOrderExcelQuery; import com.xiaopeng.order.model.query.XpOrderPageQuery; import com.xiaopeng.order.model.query.XpTestOrderPageQuery; import com.xiaopeng.order.model.vo.*; import com.xiaopeng.order.service.IXpOrderService; import com.xiaopeng.order.service.IXpTestOrderService; import com.xiaopeng.order.vo.OrderDetailVo; import com.xiaopeng.unifiedverification.interceptor.XpClientCheck; import io.swagger.annotations.*; import lombok.RequiredArgsConstructor; import org.apache.poi.ss.usermodel.Workbook; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.data.domain.Sort; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Query; import org.springframework.util.CollectionUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.math.BigDecimal; import java.math.RoundingMode; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** *

* 订单 前端控制器 *

* * @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("/inner/testOrder/queryOrderById") public R queryOrderById(@RequestParam Long orderId){ XpTestOrder xpTestOrder = xpTestOrderService.getById(orderId); return R.ok(xpTestOrder); } /** * 修改订单状态 * @param orderId * @param status * @return */ @PostMapping("/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(); } /** * 订单车辆定位实时存储-订单车辆定位实时存储(内部接口) */ @ApiOperation(value = "订单车辆定位实时存储") @PostMapping("/inner/v1/testOrder/saveVehicleLocation") public R saveVehicleLocation(@RequestBody OrderTrajectoryVo vo) { OrderTrajectory orderTrajectory = new OrderTrajectory(); BeanUtils.copyProperties(vo, orderTrajectory); xpTestOrderService.saveVehicleLocation(orderTrajectory); return R.ok(); } }