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.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
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;
|
|
/**
|
* <p>
|
* 订单 前端控制器
|
* </p>
|
*
|
* @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<XpTestOrder> 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<String> 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<PageInfo<XpTestOrderPageVO>> pageList(@Validated @RequestBody XpTestOrderPageQuery query) {
|
PageInfo<XpTestOrderPageVO> pageInfo = xpTestOrderService.pageList(query);
|
return R.ok(pageInfo);
|
}
|
|
/**
|
* 订单详情
|
*
|
* @param id 订单ID
|
* @return 订单详情
|
*/
|
@ApiOperation(value = "订单详情", tags = {"管理后台-测试计划"})
|
@GetMapping("/api/v1/testOrder/queryById")
|
public R<XpTestOrderDetailVO> 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<String> 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<Long> queryCountByTestPlanId(@RequestParam Long testPlanId){
|
long count = xpTestOrderService.count(new QueryWrapper<XpTestOrder>().eq("test_plan_id", testPlanId));
|
return R.ok(count);
|
}
|
|
|
}
|