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.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.xiaopeng.api.dto.automaticPilot.PushOrderDto;
|
import com.xiaopeng.api.dto.order.AddCruiseMissionDto;
|
import com.xiaopeng.api.feignClient.automaticPilot.OrderMissionClient;
|
import com.xiaopeng.api.model.order.XpCruiseOrder;
|
import com.xiaopeng.api.vo.OrderType;
|
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.order.model.exportExcel.XpCruiseOrderExportExcel;
|
import com.xiaopeng.order.model.exportExcel.XpOrderExportExcel;
|
import com.xiaopeng.order.model.query.XpCruiseOrderExcelQuery;
|
import com.xiaopeng.order.model.vo.XpOrderPageVO;
|
import com.xiaopeng.order.service.IXpCruiseOrderService;
|
import com.xiaopeng.order.model.query.XpCruiseOrderPageQuery;
|
import com.xiaopeng.order.model.vo.XpCruiseOrderPageVO;
|
import com.xiaopeng.order.service.IXpOrderService;
|
import io.swagger.annotations.ApiOperation;
|
import lombok.RequiredArgsConstructor;
|
import org.apache.poi.ss.usermodel.Workbook;
|
import org.springframework.context.annotation.Lazy;
|
import org.springframework.validation.annotation.Validated;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.servlet.ServletOutputStream;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.IOException;
|
import java.net.URLEncoder;
|
import java.util.Arrays;
|
import java.util.List;
|
|
/**
|
* <p>
|
* 订单 前端控制器
|
* </p>
|
*
|
* @author mitao
|
* @since 2026-02-03
|
*/
|
@Validated
|
@RestController
|
@RequiredArgsConstructor(onConstructor_ = @Lazy)
|
public class XpCruiseOrderController {
|
|
private final IXpCruiseOrderService xpCruiseOrderService;
|
private final OrderMissionClient orderMissionClient;
|
private final IXpOrderService xpOrderService;
|
|
|
/**
|
* 根据车辆VIN码取消订单
|
* 发送取消订单XPU报文
|
*
|
* @param
|
*/
|
@PostMapping("/inner/cruiseOrder/cancelCruiseOrderByVin")
|
public R<Long> cancelCruiseOrderByVin(@RequestParam String vin) {
|
Long id = xpCruiseOrderService.cancelCruiseOrderByVin(vin);
|
return R.ok(id);
|
}
|
|
/**
|
* 完成订单
|
*
|
* @param
|
*/
|
@PostMapping("/inner/cruiseOrder/completeCruiseOrder")
|
public R<?> completeCruiseOrder(@RequestParam Long orderId) {
|
xpCruiseOrderService.completeCruiseOrder(orderId);
|
return R.ok();
|
}
|
|
|
/**
|
* 根据订单ID查询取消订单
|
*
|
* @param orderId
|
* @return
|
*/
|
@PostMapping("/inner/cruiseOrder/cancelCruiseOrderById")
|
public R<?> cancelCruiseOrderById(@RequestParam Long orderId) {
|
return xpCruiseOrderService.cancelCruiseOrderById(orderId);
|
}
|
|
|
/**
|
* 查询订单信息
|
*
|
* @param orderId
|
* @return
|
*/
|
@PostMapping("/inner/cruiseOrder/getCruiseOrder")
|
public R<XpCruiseOrder> getCruiseOrder(@RequestParam Long orderId) {
|
return R.ok(xpCruiseOrderService.getById(orderId));
|
}
|
|
|
/**
|
* 新增订单 下发命令
|
*
|
* @param
|
* @return 订单ID
|
*/
|
@PostMapping("/inner/cruiseOrder/addCruiseOrder")
|
public R<Long> addCruiseOrder(@RequestBody XpCruiseOrder order) {
|
boolean save = xpCruiseOrderService.save(order);
|
if (!save) {
|
return R.fail("新增失败");
|
}
|
|
// 下发命令
|
PushOrderDto pushOrderDto = new PushOrderDto();
|
pushOrderDto.setVin(order.getVehicleVin());
|
pushOrderDto.setOrderId("XU" + order.getId());
|
pushOrderDto.setStartLatitude(order.getStartLat());
|
pushOrderDto.setStartLongitude(order.getStartLon());
|
pushOrderDto.setEndLatitude(order.getEndLat());
|
pushOrderDto.setEndLongitude(order.getEndLon());
|
pushOrderDto.setOrderType(OrderType.CRUISE_ORDER);
|
pushOrderDto.setStage(2);
|
// 调用推送服务 orderId + carVin
|
orderMissionClient.pushOrder(pushOrderDto);
|
|
return R.ok(order.getId());
|
}
|
|
/**
|
* 巡游订单记录分页列表
|
*
|
* @param query 分页查询参数
|
* @return 分页结果
|
*/
|
@ApiOperation(value = "巡游订单记录分页列表", tags = {"管理后台-巡游订单"})
|
@PostMapping("/api/v1/cruise-order/pageList")
|
public R<PageInfo<XpCruiseOrderPageVO>> pageList(@Validated @RequestBody XpCruiseOrderPageQuery query) {
|
PageInfo<XpCruiseOrderPageVO> pageInfo = xpCruiseOrderService.pageList(query);
|
return R.ok(pageInfo);
|
}
|
|
|
|
/**
|
* 终止所有没结束或者终止的订单
|
*
|
* @param vin
|
* @return
|
*/
|
@PostMapping("/inner/cruiseOrder/stopAllCruiseOrder")
|
public R<?> stopAllCruiseOrder(@RequestParam String vin) {
|
xpCruiseOrderService.update(new UpdateWrapper<XpCruiseOrder>().eq("vehicleVin", vin)
|
.in("status", Arrays.asList(0, 1)).set("status", 2));
|
return R.ok();
|
}
|
|
/**
|
* 巡游订单导出
|
*
|
* @param query 查询参数
|
*/
|
@ApiOperation(value = "巡游订单导出", tags = {"管理后台-巡游订单"})
|
@PostMapping("/api/v1/cruiseOrder/exportExcel")
|
public void exportExcel(@RequestBody XpCruiseOrderExcelQuery query) {
|
// 1. 查询导出数据
|
List<XpCruiseOrderPageVO> dataList = xpCruiseOrderService.getExportList(query);
|
|
// 2. 转换为导出对象
|
List<XpCruiseOrderExportExcel> exportList = BeanUtil.copyToList(dataList, XpCruiseOrderExportExcel.class);
|
|
// 3. 生成 Excel
|
Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), XpCruiseOrderExportExcel.class, exportList);
|
|
// 4. 输出到响应流
|
HttpServletResponse response = WebUtils.response();
|
response.setContentType("application/vnd.ms-excel");
|
response.setCharacterEncoding("utf-8");
|
ServletOutputStream outputStream = null;
|
try {
|
String fileName = URLEncoder.encode("巡游订单订单列表.xls", "utf-8");
|
response.setHeader("Content-disposition", "attachment;filename=" + fileName);
|
outputStream = response.getOutputStream();
|
workbook.write(outputStream);
|
} catch (IOException e) {
|
e.printStackTrace();
|
} finally {
|
try {
|
if (outputStream != null) {
|
outputStream.close();
|
}
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
}
|
}
|
|
/**
|
* 删除巡游订单
|
* @param id
|
* @return
|
*/
|
@ApiOperation(value = "删除巡游订单", tags = {"管理后台-巡游订单"})
|
@DeleteMapping(value = "/api/v1/cruise-order/deleteById/{id}")
|
public R<?> deleteById(@PathVariable Long id){
|
xpCruiseOrderService.removeById(id);
|
return R.ok();
|
}
|
|
@ApiOperation(value = "巡游订单详情", tags = {"管理后台-巡游订单"})
|
@GetMapping(value = "/api/v1/cruise-order/getDetailById/{id}")
|
public R<XpCruiseOrder> getDetailById(@PathVariable Long id){
|
XpCruiseOrder xpCruiseOrder = xpCruiseOrderService.getById(id);
|
return R.ok(xpCruiseOrder);
|
}
|
}
|