From 4f7fd9e879d9de211b255eb21535a034893ffbff Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期四, 14 五月 2026 16:20:48 +0800
Subject: [PATCH] 合并代码
---
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java | 289 ++++++++++++++++++++++++++++++++++++++++++++++++++++++---
1 files changed, 270 insertions(+), 19 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 c263969..1232329 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
@@ -40,6 +40,7 @@
import com.xiaopeng.api.feignClient.map.XpMapClient;
import com.xiaopeng.api.feignClient.operation.*;
import com.xiaopeng.api.feignClient.order.XpCruiseOrderClient;
+import com.xiaopeng.api.feignClient.payFront.XpPayFrontClient;
import com.xiaopeng.api.feignClient.pushMessage.XpPushMessageClient;
import com.xiaopeng.api.feignClient.vehicleConvoy.*;
import com.xiaopeng.api.model.maintenance.XpTaskRule;
@@ -47,6 +48,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.LoginUser;
@@ -59,6 +62,9 @@
import com.xiaopeng.api.vo.operation.RouteVo;
import com.xiaopeng.api.vo.order.*;
import com.xiaopeng.api.vo.order.FareBreakdownVo;
+import com.xiaopeng.api.vo.payFront.CreditOrderCreateVo;
+import com.xiaopeng.api.vo.payFront.CreditPaySignQueryVo;
+import com.xiaopeng.api.vo.payFront.CreditPrecreateVo;
import com.xiaopeng.api.vo.vehicleConvoy.AddTaxiPassengerVo;
import com.xiaopeng.api.vo.vehicleConvoy.BluetoothDeliverVo;
import com.xiaopeng.api.vo.vehicleConvoy.CancelTaxiPassengerVo;
@@ -99,6 +105,8 @@
import com.xiaopeng.order.utils.*;
import com.xiaopeng.order.utils.holiday.HolidayUtil;
import com.xiaopeng.order.vo.*;
+import com.xiaopeng.api.dto.order.UpdateInvoiceStatusDto;
+import com.xiaopeng.api.dto.payFront.*;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.transaction.annotation.ShardingSphereTransactionType;
@@ -141,7 +149,7 @@
*/
@Slf4j
@Service
-@RequiredArgsConstructor
+@RequiredArgsConstructor(onConstructor_ = @Lazy)
public class XpOrderServiceImpl extends ServiceImpl<XpOrderMapper, XpOrder> implements IXpOrderService {
private static final String REASSIGN_CANCEL_CONTEXT_PREFIX = "REASSIGN_CANCEL_CONTEXT:";
@@ -154,9 +162,13 @@
private final XpFleetClient xpFleetClient;
private final XpFleetVehicleClient xpFleetVehicleClient;
private final UserVehicleClient userVehicleClient;
- private final IXpOrderEvaluateService xpOrderEvaluateService;
+ @Lazy
+ @Autowired
+ private IXpOrderEvaluateService xpOrderEvaluateService;
private final IXpOrderCancelService xpOrderCancelService;
- private final IXpOrderReassignService xpOrderReassignService;
+ @Lazy
+ @Autowired
+ private IXpOrderReassignService xpOrderReassignService;
private final RedisService redisService;
private final XpPricingClient xpPricingClient;
private final XpSystemSettingClient xpSystemSettingClient;
@@ -170,7 +182,9 @@
private final XpPricingUtil xpPricingUtil;
private final GDMapGeocodingUtil gdMapGeocodingUtil;
private final VehicleBuriedPointClient vehicleBuriedPointClient;
- private final IXpTestOrderService xpTestOrderService;
+ @Lazy
+ @Autowired
+ private IXpTestOrderService xpTestOrderService;
private final XpMapClient xpMapClient;
@Resource
private XpRoutePlanClient xpRoutePlanClient;
@@ -201,6 +215,9 @@
@Resource
private TokenService tokenService;
+
+ @Resource
+ private XpPayFrontClient xpPayFrontClient;
@Value("${robotaxi.appId:xp_robotaxi_api}")
private String appid;
@@ -1193,8 +1210,10 @@
pushOrderDto.setEndPoiName(order.getEndPointName());
pushOrderDto.setOrderType(OrderType.USER_ORDER);
pushOrderDto.setStage(1);
- pushOrderDto.setLastOrderId("XU" + cruiseOrder.getId());
- pushOrderDto.setLastXpuTaskId(cruiseOrder.getXpuTaskId());
+ if(null != cruiseOrder){
+ pushOrderDto.setLastOrderId("XU" + cruiseOrder.getId());
+ pushOrderDto.setLastXpuTaskId(cruiseOrder.getXpuTaskId());
+ }
pushOrderDto.setTaskActionType(TaskActionType.kTerminateForNewTask);
// 调用推送服务 orderId + carVin
orderMissionClient.pushOrder(pushOrderDto);
@@ -1329,8 +1348,10 @@
pushOrderDto.setEndLongitude(returnOrder.getEndLon());
pushOrderDto.setOrderType(OrderType.CRUISE_ORDER);
pushOrderDto.setStage(2);
- pushOrderDto.setLastOrderId("XU" + lastCruise.getId());
- pushOrderDto.setLastXpuTaskId(lastCruise.getXpuTaskId());
+ if(null != lastCruise){
+ pushOrderDto.setLastOrderId("XU" + lastCruise.getId());
+ pushOrderDto.setLastXpuTaskId(lastCruise.getXpuTaskId());
+ }
pushOrderDto.setTaskActionType(TaskActionType.kTerminateForNewTask);
// 调用推送服务 orderId + carVin
orderMissionClient.pushOrder(pushOrderDto);
@@ -2935,8 +2956,10 @@
pushOrderDto.setEndLongitude(xpCruiseOrder.getEndLon());
pushOrderDto.setOrderType(OrderType.CRUISE_ORDER);
pushOrderDto.setStage(2);
- pushOrderDto.setLastOrderId(order.getId() + "");
- pushOrderDto.setLastXpuTaskId(order.getXpuEndTaskId());
+ if(null != order){
+ pushOrderDto.setLastOrderId(order.getId() + "");
+ pushOrderDto.setLastXpuTaskId(order.getXpuEndTaskId());
+ }
pushOrderDto.setTaskActionType(TaskActionType.kTerminateForNewTask);
orderMissionClient.pushOrder(pushOrderDto);
log.info("下发XUP巡游订单报文成功");
@@ -3057,8 +3080,10 @@
pushOrderDto.setEndLongitude(xpCruiseOrder.getEndLon());
pushOrderDto.setOrderType(OrderType.CRUISE_ORDER);
pushOrderDto.setStage(2);
- pushOrderDto.setLastOrderId(order.getId() + "");
- pushOrderDto.setLastXpuTaskId(status < 5 ? order.getXpuStartTaskId() : order.getXpuEndTaskId());
+ if(null != order){
+ pushOrderDto.setLastOrderId(order.getId() + "");
+ pushOrderDto.setLastXpuTaskId(status < 5 ? order.getXpuStartTaskId() : order.getXpuEndTaskId());
+ }
pushOrderDto.setTaskActionType(status < 5 ? TaskActionType.kTerminateForNewTask : TaskActionType.kWaitPrevTaskFinish);
// 调用推送服务 orderId + carVin
log.info("开始推送XPU巡游订单 {}", xpCruiseOrder.getVehicleVin());
@@ -3326,6 +3351,86 @@
@Override
public R payment(XpOrderPayDto dto, String uid) {
+
+
+ HashMap<String, Object> resultMap = new HashMap<>();
+
+ // 1.0 免密 //查询是否开通免密
+ // 1先查用户是否申请 申请了拿到通过的businessOrderId
+// boolean signed = false;
+// CreditPaySignQueryDto creditPaySignQueryDto = new CreditPaySignQueryDto();
+// creditPaySignQueryDto.setUid(Long.valueOf(uid));
+// creditPaySignQueryDto.setBusinessId("xp-robotaxi");
+// creditPaySignQueryDto.setCategory("009001");
+// creditPaySignQueryDto.setBusinessOrderId("");
+// R<CreditPaySignQueryVo> creditPaySignQueryVoR = xpPayFrontClient.queryCreditPaySign(creditPaySignQueryDto);
+// if (creditPaySignQueryVoR.getCode()==200) {
+// CreditPaySignQueryVo data = creditPaySignQueryVoR.getData();
+// // 查看是否有签约的
+// long count = data.getSignList().stream().filter(e -> e.getStatus().equals("VALID")).count();
+// if (count > 0){
+// signed = true;
+// }
+// }
+//
+//
+// if(signed){
+// // y已签约 1.信用下单
+// CreditOrderCreateDto creditOrderCreateDto = new CreditOrderCreateDto();
+// creditOrderCreateDto.setUid(Long.valueOf(uid));
+// creditOrderCreateDto.setBusinessId("xp-robotaxi");
+// creditOrderCreateDto.setCategory("xp_robotaxi_api");
+// creditOrderCreateDto.setBusinessOrderId("");
+// creditOrderCreateDto.setSubject("009001");
+// creditOrderCreateDto.setPayType("13");
+//
+//
+// // 信用下单
+// ArrayList<CreditOrderCreateDto.PostPayment> postPayments = new ArrayList<>(1);
+// CreditOrderCreateDto.PostPayment postPayment = new CreditOrderCreateDto.PostPayment();
+// postPayment.setName("收费标准");
+// postPayment.setDescription("行程价格动态浮动,具体详情可在费用详情或计价规则查看");
+// postPayments.add(postPayment);
+// creditOrderCreateDto.setPostPayments(postPayments);
+// R<CreditOrderCreateVo> creditOrderCreateVoR = xpPayFrontClient.createCreditOrder(creditOrderCreateDto);
+// if(creditOrderCreateVoR.getCode()==200){
+// CreditOrderCreateVo data = creditOrderCreateVoR.getData();
+// resultMap.put("status", 1);
+// resultMap.put("value", data);
+// return R.ok(resultMap);
+// }
+//
+// }else {
+//
+// // 未签约
+// // 调用预下单接口
+// XpOrder order = this.getById(dto.getOrderId());
+// CreditPrecreateDto creditPrecreateDto = new CreditPrecreateDto();
+// creditPrecreateDto.setUid(uid);
+// creditPrecreateDto.setBizId("xp-robotaxi");
+// creditPrecreateDto.setBizOrderId("");
+// creditPrecreateDto.setPayScene(99);
+// creditPrecreateDto.setAmount(order.getOrderMoney().multiply(new BigDecimal(100)).intValue());
+// creditPrecreateDto.setCategory("009001");
+// creditPrecreateDto.setTitle("信用下单");
+// creditPrecreateDto.setDetail("信用下单");
+//
+// HashMap<String, String> businessExtend = new HashMap<>();
+// businessExtend.put("returnUrl", "");
+// businessExtend.put("notifyUrl", "");
+// creditPrecreateDto.setBusinessExtend(businessExtend);
+//
+// R<CreditPrecreateVo> creditPrecreateVoR = xpPayFrontClient.precreate(creditPrecreateDto);
+// if (creditPrecreateVoR.getCode()==200) {
+// CreditPrecreateVo data = creditPrecreateVoR.getData();
+// resultMap.put("status", 2);
+// resultMap.put("value", data);
+// return R.ok(resultMap);
+// }
+// }
+
+
+
// mvp版本不做支付 使用优惠券抵扣为0元订单处理 处理订单状态即可
XpOrder order = this.getById(dto.getOrderId());
order.setStatus(9);
@@ -3753,13 +3858,13 @@
vo.setVin(vehicle.getVehicleVin());
vo.setPassengerUid(order.getAppUserId());
BaseVehicleUserDto deliver = bluetoothUnlockClient.deliver(vo);
- if(null == deliver){
- throw new ServiceException("下发蓝牙token失败");
- }
- if(deliver.getCode() != 0){
- log.error("下发蓝牙token失败:{} {}", deliver.getMsg(), order.getOrderNumber());
- throw new ServiceException(deliver.getMsg());
- }
+// if(null == deliver){
+// throw new ServiceException("下发蓝牙token失败");
+// }
+// if(deliver.getCode() != 0){
+// log.error("下发蓝牙token失败:{} {}", deliver.getMsg(), order.getOrderNumber());
+// throw new ServiceException(deliver.getMsg());
+// }
log.info("下发蓝牙token成功:{} {}", deliver.getData(), order.getOrderNumber());
}
@@ -4219,6 +4324,7 @@
XpOrder xpOrder = this.getById(orderId);
OrderInfoVo vo = new OrderInfoVo();
vo.setOrderId(xpOrder.getId());
+ vo.setOrderNumber(xpOrder.getOrderNumber());
vo.setOrderStatus(xpOrder.getStatus());
XpPoint startPoint = xpPointClient.queryById(xpOrder.getStartPointId()).getData();
vo.setPickupAddress(startPoint.getPointAddress());
@@ -4625,4 +4731,149 @@
vo.setRemoteTakeoverAt("");
return vo;
}
+
+
+ /**
+ * 发票列表
+ * @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