From a3972e331b703c703ba29e6070432997428bb00f Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期三, 06 五月 2026 16:53:13 +0800
Subject: [PATCH] 发票功能
---
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java | 152 +++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 148 insertions(+), 4 deletions(-)
diff --git a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
index 2bdfd0c..b694dfd 100644
--- a/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
+++ b/xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -20,10 +20,7 @@
import com.xiaopeng.api.dto.map.OrderRouteAndFareDto;
import com.xiaopeng.api.dto.map.RouteAndFareDto;
import com.xiaopeng.api.dto.operation.LonLatDto;
-import com.xiaopeng.api.dto.order.GetOrderNumDto;
-import com.xiaopeng.api.dto.order.HistoryEndPointsDto;
-import com.xiaopeng.api.dto.order.HistoryStartPointsDto;
-import com.xiaopeng.api.dto.order.PopOrderDto;
+import com.xiaopeng.api.dto.order.*;
import com.xiaopeng.api.dto.pushMessage.SendMessageDTO;
import com.xiaopeng.api.dto.statistics.DailyCountDTO;
import com.xiaopeng.api.dto.statistics.OrderStatisticsDTO;
@@ -46,6 +43,8 @@
import com.xiaopeng.api.model.order.*;
import com.xiaopeng.api.model.vehicleConvoy.XpFleet;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
+import com.xiaopeng.api.query.order.InvoiceOrdersQuery;
+import com.xiaopeng.api.query.order.XpOrderInvoiceQuery;
import com.xiaopeng.api.vo.OrderType;
import com.xiaopeng.api.vo.account.CalculateDiscountAmountVo;
import com.xiaopeng.api.vo.account.UserCouponVo;
@@ -4483,4 +4482,149 @@
return R.ok();
}
+
+
+ /**
+ * 发票列表
+ * @param query
+ * @return
+ */
+ @Override
+ public List<XpInvoiceVo> invoiceList(XpOrderInvoiceQuery query) {
+
+ // 格式:yyyyMM 转yyyy-MM
+ query.setStartTime(query.getStartTime().substring(0, 4) + "-" + query.getStartTime().substring(4, 6));
+ query.setEndTime(query.getEndTime().substring(0, 4) + "-" + query.getEndTime().substring(4, 6));
+
+ List<XpOrder> list =null;
+ // 通过uid 和时间查出来数据 先判断是否传入了分页
+ if (query.getPageNo()!=null && query.getPageSize()!=null) {
+ Page<XpOrder> page = new Page<>(query.getPageNo(), query.getPageSize());
+ Page<XpOrder> orderPage = this.baseMapper.selectPage(page, new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.valueOf(query.getUid())).ge(XpOrder::getStatus, 9).between(BaseModel::getCreateTime, query.getStartTime(), query.getEndTime()));
+ list = orderPage.getRecords();
+ }else {
+ list = this.baseMapper.selectList(new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.valueOf(query.getUid())).ge(XpOrder::getStatus, 9).between(BaseModel::getCreateTime, query.getStartTime(), query.getEndTime()));
+ }
+
+ if(list.isEmpty()){
+ return new ArrayList<>();
+ }
+
+
+ ArrayList<XpInvoiceVo> xpInvoiceVoList = new ArrayList<>(list.size());
+
+ R<List<XpVehicle>> r = xpVehicleClient.listByIds(list.stream().map(XpOrder::getVehicleId).collect(Collectors.toList()));
+ List<XpVehicle> vehicleList = r.getData();
+
+ // 数据组装
+ for (XpOrder xpOrder : list) {
+ XpInvoiceVo xpInvoiceVo = new XpInvoiceVo();
+ xpInvoiceVo.setUid(xpOrder.getAppUserId().toString());
+ xpInvoiceVo.setOrderNo(xpOrder.getOrderNumber());
+ xpInvoiceVo.setOrderTotalAmount(xpOrder.getOrderMoney());
+ xpInvoiceVo.setOrderDiscountAmount(xpOrder.getCouponMoney());
+ xpInvoiceVo.setOrderFinishTime(String.valueOf(xpOrder.getTripEnd()));
+ xpInvoiceVo.setXpInvoiceFlag(true);
+ xpInvoiceVo.setInvoiceStatus(xpOrder.getInvoiceStatus());
+ XpInvoiceVo.Itinerary itinerary = new XpInvoiceVo.Itinerary();
+ // yyyy-MM-dd格式
+ itinerary.setTripStartDate(xpOrder.getAcceptanceTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+ itinerary.setTripEndDate(xpOrder.getTripEnd().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+
+
+ XpVehicle xpVehicle = vehicleList.stream().filter(vehicle -> vehicle.getId().equals(xpOrder.getVehicleId())).findFirst().get();
+ itinerary.setCarType(xpVehicle.getVehicleModel());
+ itinerary.setTripStartDate(xpOrder.getBoardingTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+
+ itinerary.setCity(xpOrder.getCityName());
+ itinerary.setStartPoint(xpOrder.getStartAddress());
+ itinerary.setEndPoint(xpOrder.getEndAddress());
+ itinerary.setMileage(xpOrder.getMileageKilometers().toString());
+ itinerary.setAmount(xpOrder.getOrderMoney());
+
+ xpInvoiceVo.setItinerary(itinerary);
+ xpInvoiceVoList.add(xpInvoiceVo);
+ }
+ return xpInvoiceVoList;
+ }
+
+
+ /**
+ * 查询发票订单
+ * @param query
+ * @return
+ */
+ @Override
+ public List<XpInvoiceVo> queryInvoiceOrders(InvoiceOrdersQuery query) {
+ if(query.getOrderNoList().isEmpty()){
+ return Collections.emptyList();
+ }
+ List<XpOrder> list = this.baseMapper.selectList(new LambdaQueryWrapper<XpOrder>().eq(XpOrder::getAppUserId, Long.valueOf(query.getUid())).ge(XpOrder::getStatus, 9).in(XpOrder::getOrderNumber, query.getOrderNoList()));
+ if(list.isEmpty()){
+ return Collections.emptyList();
+ }
+
+
+ ArrayList<XpInvoiceVo> xpInvoiceVoList = new ArrayList<>(list.size());
+
+ R<List<XpVehicle>> r = xpVehicleClient.listByIds(list.stream().map(XpOrder::getVehicleId).collect(Collectors.toList()));
+ List<XpVehicle> vehicleList = r.getData();
+
+ // 数据组装
+ for (XpOrder xpOrder : list) {
+ XpInvoiceVo xpInvoiceVo = new XpInvoiceVo();
+ xpInvoiceVo.setUid(xpOrder.getAppUserId().toString());
+ xpInvoiceVo.setOrderNo(xpOrder.getOrderNumber());
+ xpInvoiceVo.setOrderTotalAmount(xpOrder.getOrderMoney());
+ xpInvoiceVo.setOrderDiscountAmount(xpOrder.getCouponMoney());
+ xpInvoiceVo.setOrderFinishTime(String.valueOf(xpOrder.getTripEnd()));
+ xpInvoiceVo.setXpInvoiceFlag(true);
+ xpInvoiceVo.setInvoiceStatus(xpOrder.getInvoiceStatus());
+ XpInvoiceVo.Itinerary itinerary = new XpInvoiceVo.Itinerary();
+ // yyyy-MM-dd格式
+ itinerary.setTripStartDate(xpOrder.getAcceptanceTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+ itinerary.setTripEndDate(xpOrder.getTripEnd().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+
+
+ XpVehicle xpVehicle = vehicleList.stream().filter(vehicle -> vehicle.getId().equals(xpOrder.getVehicleId())).findFirst().get();
+ itinerary.setCarType(xpVehicle.getVehicleModel());
+ itinerary.setTripStartDate(xpOrder.getBoardingTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+
+ itinerary.setCity(xpOrder.getCityName());
+ itinerary.setStartPoint(xpOrder.getStartAddress());
+ itinerary.setEndPoint(xpOrder.getEndAddress());
+ itinerary.setMileage(xpOrder.getMileageKilometers().toString());
+ itinerary.setAmount(xpOrder.getOrderMoney());
+
+ xpInvoiceVo.setItinerary(itinerary);
+ xpInvoiceVoList.add(xpInvoiceVo);
+ }
+ return xpInvoiceVoList;
+ }
+
+
+ /**
+ * 修改发票状态
+ * @param dto
+ */
+ @Override
+ public void updateInvoiceStatus(UpdateInvoiceStatusDto dto) {
+ List<UpdateInvoiceStatusDto.Order> orderList = dto.getOrderList();
+ if(!orderList.isEmpty()){
+ List<String> orderNos = orderList.stream().map(UpdateInvoiceStatusDto.Order::getOrderNo).collect(Collectors.toList());
+ List<XpOrder> xpOrders = this.baseMapper.selectList(new LambdaQueryWrapper<XpOrder>().in(XpOrder::getOrderNumber, orderNos));
+ for (XpOrder xpOrder : xpOrders) {
+ UpdateInvoiceStatusDto.Order order = orderList.stream().filter(e -> e.getOrderNo().equals(xpOrder.getOrderNumber())).findFirst().orElse(null);
+ if(order!=null){
+ xpOrder.setInvoiceStatus(order.getInvoiceStatus());
+ xpOrder.setInvoiceId(dto.getRequestId());
+ xpOrder.setAppUserId(null);
+ this.updateById(xpOrder);
+ }
+ }
+
+ }
+
+
+ }
}
--
Gitblit v1.7.1