From 912a4cfecbc4f0783e2045fb2287c5110ec64767 Mon Sep 17 00:00:00 2001
From: 无关风月 <443237572@qq.com>
Date: 星期五, 13 二月 2026 22:01:45 +0800
Subject: [PATCH] bug修改,计算费用工具类
---
xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java | 469 +++++++++++-----------------------------------------------
1 files changed, 90 insertions(+), 379 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 cbf7ba7..7a15439 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
@@ -8,6 +8,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.ImmutableMap;
import com.xiaopeng.api.dto.account.GetUserCouponDto;
+import com.xiaopeng.api.dto.automaticPilot.PushOrderDto;
import com.xiaopeng.api.dto.operation.LonLatDto;
import com.xiaopeng.api.dto.order.GetOrderNumDto;
import com.xiaopeng.api.dto.order.HistoryEndPointsDto;
@@ -20,6 +21,7 @@
import com.xiaopeng.api.dto.vehicleConvoy.BaseVehicleUserDto;
import com.xiaopeng.api.feignClient.account.XpAppUserClient;
import com.xiaopeng.api.feignClient.account.XpAppUserCouponClient;
+import com.xiaopeng.api.feignClient.automaticPilot.OrderMissionClient;
import com.xiaopeng.api.feignClient.operation.XpPointClient;
import com.xiaopeng.api.feignClient.operation.XpPricingClient;
import com.xiaopeng.api.feignClient.operation.XpSystemSettingClient;
@@ -33,14 +35,13 @@
import com.xiaopeng.api.model.operation.XpFeedbackType;
import com.xiaopeng.api.model.operation.XpPoint;
import com.xiaopeng.api.model.operation.XpPricing;
-import com.xiaopeng.api.model.order.XpOrder;
-import com.xiaopeng.api.model.order.XpOrderCancel;
-import com.xiaopeng.api.model.order.XpOrderEvaluate;
-import com.xiaopeng.api.model.order.XpOrderReassign;
+import com.xiaopeng.api.model.order.*;
import com.xiaopeng.api.model.vehicleConvoy.XpFleet;
import com.xiaopeng.api.model.vehicleConvoy.XpVehicle;
import com.xiaopeng.api.vo.account.UserCouponVo;
+import com.xiaopeng.api.vo.automaticPilot.proto.down.cloudOrderOperation.OrderOperationType;
import com.xiaopeng.api.vo.order.*;
+import com.xiaopeng.api.vo.vehicleConvoy.AddTaxiPassengerVo;
import com.xiaopeng.api.vo.vehicleConvoy.CancelTaxiPassengerVo;
import com.xiaopeng.common.core.constant.CacheConstants;
import com.xiaopeng.common.core.domain.R;
@@ -62,6 +63,7 @@
import com.xiaopeng.order.job.jobs.OrderCancelJob;
import com.xiaopeng.order.mangodb.model.OrderTrajectory;
import com.xiaopeng.order.mangodb.service.OrderTrajectoryService;
+import com.xiaopeng.order.mapper.XpOrderDetailMapper;
import com.xiaopeng.order.mapper.XpOrderMapper;
import com.xiaopeng.order.model.dto.XpOrderCommentDto;
import com.xiaopeng.order.model.dto.XpOrderPayDto;
@@ -127,6 +129,8 @@
private final XpSystemSettingClient xpSystemSettingClient;
private final OrderTrajectoryService orderTrajectoryService;
private final XpPushMessageClient xpPushMessageClient;
+ private final OrderMissionClient orderMissionClient;
+ private final XpOrderDetailMapper xpOrderDetailMapper;
@Autowired
private MongoTemplate mongoTemplate;
@@ -726,7 +730,6 @@
// TODO 加配置文件取
cancelTaxiPassengerVo.setAppId("");
-
BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.cancelTaxiPassenger(cancelTaxiPassengerVo);
if (baseVehicleUserDto.getCode() != 200) {
throw new RuntimeException("取消订单失败");
@@ -749,6 +752,13 @@
Integer i = Integer.valueOf(cacheObject.toString());
redisService.setCacheCancelOrder("CANCEL_ORDER_" + uid, i + 1);
}
+
+ // 下发命令
+ PushOrderDto pushOrderDto = new PushOrderDto();
+ pushOrderDto.setOrderId(order.getId());
+ pushOrderDto.setVin(xpVehicle.getVehicleVin());
+ pushOrderDto.setOperation_type(OrderOperationType.VEHICLE_CANCEL_ORDER);
+ orderMissionClient.cancelOrder(pushOrderDto);
}
@Override
@@ -769,7 +779,10 @@
xpOrderCancelService.save(xpOrderCancel);
- // 推送消息
+ R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(order.getVehicleId());
+ XpVehicle xpVehicle = xpVehicleR.getData();
+
+
// 消息推送
Map<String, Object> params = new HashMap<>();
Map<String, Object> content = new HashMap<>();
@@ -784,6 +797,13 @@
sendMessageDTO.setAppUserId(String.valueOf(order.getAppUserId()));
xpPushMessageClient.sendStatus(sendMessageDTO);
log.info("订单取消消息推送完毕");
+
+ // 下发命令
+ PushOrderDto pushOrderDto = new PushOrderDto();
+ pushOrderDto.setOrderId(order.getId());
+ pushOrderDto.setVin(xpVehicle.getVehicleVin());
+ pushOrderDto.setOperation_type(OrderOperationType.CLOUD_CANCEL_ORDER);
+ orderMissionClient.cancelOrder(pushOrderDto);
}
/**
@@ -817,6 +837,7 @@
evaluate.setFeedbackContent(dto.getFeedbackContent());
evaluate.setFeedbackPictures(dto.getFeedbackPictures());
evaluate.setFeedbackTypeId(dto.getFeedbackTypeId());
+ evaluate.setCreateTime(LocalDateTime.now());
xpOrderEvaluateService.save(evaluate);
}
@@ -882,6 +903,7 @@
@Override
public void endTrip(Long orderId, String uid) {
+ List<XpOrderDetail> xpOrderDetails = new ArrayList<>();
// 起步价格明细
List<FareBreakdownDetailVo> start = new ArrayList<>();
// 里程费价格明细
@@ -962,11 +984,11 @@
}
// --- 远途加价区间配置 (关键修改) ---
// 1. 超过 num1(12) 不足 num2(20), 加收 num3(1.2)
- config.longSteps.add(new TaxiPricingDemoService.LongRangeStep(5.0, 6.0, 1.2));
+ config.longSteps.add(new TaxiPricingDemoService.LongRangeStep(Double.parseDouble(basicPricingJson.getString("num6")), Double.parseDouble(basicPricingJson.getString("num7")), Double.parseDouble(basicPricingJson.getString("num8"))));
// 2. 超过 num4(20) 不足 num5(35), 加收 num6(2.0)
- config.longSteps.add(new TaxiPricingDemoService.LongRangeStep(6.0, 7.0, 2.0));
+ config.longSteps.add(new TaxiPricingDemoService.LongRangeStep(Double.parseDouble(basicPricingJson.getString("num9")), Double.parseDouble(basicPricingJson.getString("num10")), Double.parseDouble(basicPricingJson.getString("num11"))));
// 3. 超过 num7(35) 以后, 加收 num8(3.5) -> numEnd 传个极大值
- config.longSteps.add(new TaxiPricingDemoService.LongRangeStep(7.0, 8.0, 3.5));
+ config.longSteps.add(new TaxiPricingDemoService.LongRangeStep(Double.parseDouble(basicPricingJson.getString("num12")), 999999, Double.parseDouble(basicPricingJson.getString("num13"))));
TaxiPricingDemoService.TaxiPricingService service = new TaxiPricingDemoService.TaxiPricingService();
Map<String, BigDecimal> bill = service.calculateOrderPrice(DateUtils.toDate(order.getCreateTime()), order.getMileageKilometers(), gpsPoints, config);
@@ -1035,6 +1057,7 @@
mileageDetail.setMileage(distance);
mileageDetail.setMoney(money);
}
+ mileage.add(mileageDetail);
}
// 封装时长费
@@ -1054,354 +1077,39 @@
longDistance.add(longDetail);
}
}
-// // 计算实际价格
-
-// // 查询订单轨迹
-// List<OrderTrajectory> trajectories = mongoTemplate.find(
-// new Query(Criteria.where("orderId").is(orderId))
-// .with(Sort.by(Sort.Direction.ASC, "locatetime")),
-// OrderTrajectory.class
-// );
-// // 计算等待时间
-// LocalDateTime boardingTime = order.getBoardingTime();// 上车时间
-// LocalDateTime arrivalTime = order.getArrivalTime();// 车辆到达上车点时间
-// // 行程开始时间
-// Integer waitTime = Math.abs((int) Duration.between(boardingTime, arrivalTime).getSeconds());
-//
-// // 行程总时间 秒
-// LocalDateTime tripBegin = order.getTripBegin();
-// LocalDateTime tripEnd = order.getTripEnd();
-// long seconds = Duration.between(tripBegin, tripEnd).getSeconds();
-// // 默认费率1
-// double priceRate = 1;
-// if (pricing.getIsDynamicPrice() == 1) {
-// // 先判断是否已经调价过了
-// Object userDynamicPriceObj = redisService.getCacheObject("USER_DYNAMIC_PRICE_" + order.getCityId() + "_" + uid);
-// if (userDynamicPriceObj != null) {
-// // 是否调价过了
-// priceRate = Double.parseDouble(userDynamicPriceObj.toString());
-// } else {
-// // 没有调过
-// //是否触发动态调价 redis获取
-// Object dynamicPriceObj = redisService.getCacheObject("DYNAMIC_PRICE_" + order.getCityId());
-// if (dynamicPriceObj != null) {
-// JSONObject jsonObject = JSONObject.parseObject(pricing.getDynamicPricingJson());
-// // 触发动态调价
-// // value=时间
-// String timeStr = dynamicPriceObj.toString();
-// // 判断当前距离这个时间范围的新增订单数(排除取消) / 上浮数量 算出应该增加的价格率
-// Integer num = this.getOrderNum(new GetOrderNumDto(timeStr, order.getCityId()));
-// // X单上升一次调价
-// Integer orderNum = getOrderNum(jsonObject, 4);
-// // 需要调价的次数
-// int count = num / orderNum;
-// if (count > 0) {
-// // 计算每次上升的费率
-// Integer upRate = getOrderNum(jsonObject, 5);
-// BigDecimal divide = new BigDecimal(upRate).divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
-// for (int i = count; i > 0; i--) {
-// // 当前费率+(费率*上升百分比)
-// priceRate = new BigDecimal(priceRate).multiply(divide).add(new BigDecimal(priceRate)).setScale(2, RoundingMode.HALF_UP).doubleValue();
-// }
-// // 冷却时间
-// Integer time = getOrderNum(jsonObject, 6);
-// // 触发调价了
-// redisService.setCacheObject("USER_DYNAMIC_PRICE_" + order.getCityId() + "_" + uid, priceRate, time.longValue(), TimeUnit.MINUTES);
-// }
-//
-// }
-// }
-// }
-// if (trajectories.isEmpty()) {
-// return;
-// }
-// // 起步价规则
-// String startingFareJson = pricing.getStartingFareJson();
-// JSONArray startingFareJsonArray = JSONArray.parseArray(startingFareJson);
-// // 基础信息规则
-// String basicPricing = pricing.getBasicPricingJson();
-// JSONObject basicPricingJson = JSONObject.parseObject(basicPricing);
-//
-// // 计算过后得到起步价
-// String num3 = "";
-// String num4 = "";
-// String num5 = "";
-// String num6 = "";
-// String num7 = "";
-// String startTime = "";
-// String endTime = "";
-// // 等待费设置
-// String num4Wait = basicPricingJson.getString("num4");
-// String num5Wait = basicPricingJson.getString("num5");
-// // 远途费设置
-// String numLong6 = basicPricingJson.getString("num6");
-// String numLong7 = basicPricingJson.getString("num7");
-// String numLong8 = basicPricingJson.getString("num8");
-// String numLong9 = basicPricingJson.getString("num9");
-// String numLong10 = basicPricingJson.getString("num10");
-// String numLong11 = basicPricingJson.getString("num11");
-// String numLong12 = basicPricingJson.getString("num12");
-// String numLong13 = basicPricingJson.getString("num13");
-// String numLong14 = basicPricingJson.getString("num14");
-// String numLong15 = basicPricingJson.getString("num15");
-// // 节假日基础价格规则
-// String num29 = basicPricingJson.getString("num29");
-// String num30 = basicPricingJson.getString("num30");
-// String num31 = basicPricingJson.getString("num31");
-// String num32 = basicPricingJson.getString("num32");
-// String num33 = basicPricingJson.getString("num33");
-// String num34 = basicPricingJson.getString("num34");
-//
-// // 高峰期基础价格规则
-// String num21 = basicPricingJson.getString("num21");
-// String num22 = basicPricingJson.getString("num22");
-// String num23 = basicPricingJson.getString("num23");
-// String num24 = basicPricingJson.getString("num24");
-// String num25 = basicPricingJson.getString("num25");
-// String num26 = basicPricingJson.getString("num26");
-// String num27 = basicPricingJson.getString("num27");
-// String num28 = basicPricingJson.getString("num28");
-// // 夜间行驶基础价格规则
-// String num14 = basicPricingJson.getString("num14");
-// String num15 = basicPricingJson.getString("num15");
-// String num16 = basicPricingJson.getString("num16");
-// String num17 = basicPricingJson.getString("num17");
-// String num18 = basicPricingJson.getString("num18");
-// String num19 = basicPricingJson.getString("num19");
-// String num20 = basicPricingJson.getString("num20");
-// // 起步里程
-// Double startDistance = 0.00D;
-// // 临时超出起步里程的额外里程
-// Double mileageDistance = 0.00D;
-// // 起步价所属时段 type 1 普通时段 2 夜间行驶时段 3 高峰时段 4 节假日时段
-// Integer startType = 1;
-// // 里程费所属时段 type 0默认临时 1 普通时段 2 夜间行驶时段 3 高峰时段 4 节假日时段
-// Integer mileageType = 0;
-// // 里程费所属时段临时字段 用于区分时段是否变化 type 0默认临时 1 普通时段 2 夜间行驶时段 3 高峰时段 4 节假日时段
-// Integer mileageTypeTemp = 0;
-//
-// // 起步价时段开始时间
-// Date startDate = DateUtils.toDate(order.getTripBegin());
-// // 根据订单创建时间确定使用哪个起步价规则
-// Date createTime = DateUtils.toDate(order.getCreateTime());
-// // 起步价时段结束时间
-// Date endDate = new Date();
-// // 计算订单总行驶距离,单位米
-// Double totalDistance = 0.00D;
-// // 起步价计算完成表示
-// boolean startFlag = true;
-// SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
-// if (pricing.getPricingType() == 1) {
-//
-// // 计算起步价
-// for (Object o : startingFareJsonArray) {
-// JSONObject startingFare = (JSONObject) o;
-// Calendar calendarStart = Calendar.getInstance();
-// calendarStart.setTime(createTime);
-// calendarStart.set(Calendar.HOUR_OF_DAY, Integer.valueOf(startingFare.getString("num1").split(":")[0]));
-// calendarStart.set(Calendar.MINUTE, Integer.valueOf(startingFare.getString("num1").split(":")[1]));
-//
-// Calendar calendarEnd = Calendar.getInstance();
-// calendarEnd.setTime(createTime);
-// calendarEnd.set(Calendar.HOUR_OF_DAY, Integer.valueOf(startingFare.getString("num2").split(":")[0]));
-// calendarEnd.set(Calendar.MINUTE, Integer.valueOf(startingFare.getString("num2").split(":")[1]));
-// // 找到符合条件的直接跳出循环
-// if (createTime.getTime() > calendarStart.getTimeInMillis() && createTime.getTime() < calendarEnd.getTimeInMillis()) {
-// num3 = startingFare.getString("num3");
-// num4 = startingFare.getString("num4");
-// num5 = startingFare.getString("num5");
-// num6 = startingFare.getString("num6");
-// num7 = startingFare.getString("num7");
-// startTime = startingFare.getString("num1");
-// endTime = startingFare.getString("num2");
-// break;
-// }
-// }
-// // 判断是否为夜间行驶 起步价修改
-// Calendar calendarStart = Calendar.getInstance();
-// calendarStart.setTime(createTime);
-// calendarStart.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num14.split("-")[0].split(":")[0]));
-// calendarStart.set(Calendar.MINUTE, Integer.valueOf(num14.split("-")[0].split(":")[1]));
-// Calendar calendarEnd = Calendar.getInstance();
-// calendarEnd.setTime(createTime);
-// calendarEnd.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num14.split("-")[1].split(":")[0]));
-// calendarEnd.set(Calendar.MINUTE, Integer.valueOf(num14.split("-")[1].split(":")[1]));
-// if (createTime.getTime() > calendarStart.getTimeInMillis() && createTime.getTime() < calendarEnd.getTimeInMillis()
-// ) {
-// num3 = num15;
-// num6 = num16;
-// num7 = num17;
-// startType = 2;
-//
-// }
-// // 判断是否为高峰期
-// Calendar calendar1Start = Calendar.getInstance();
-// calendar1Start.setTime(createTime);
-// calendar1Start.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num21.split("-")[0].split(":")[0]));
-// calendar1Start.set(Calendar.MINUTE, Integer.valueOf(num21.split("-")[0].split(":")[1]));
-//
-// Calendar calendar1End = Calendar.getInstance();
-// calendar1End.setTime(createTime);
-// calendar1End.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num21.split("-")[1].split(":")[0]));
-// calendar1End.set(Calendar.MINUTE, Integer.valueOf(num21.split("-")[1].split(":")[1]));
-//
-// Calendar calendar2Start = Calendar.getInstance();
-// calendar2Start.setTime(createTime);
-// calendar2Start.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num22.split("-")[0].split("-")[0].split(":")[0]));
-// calendar2Start.set(Calendar.MINUTE, Integer.valueOf(num22.split("-")[0].split("-")[0].split(":")[1]));
-//
-// Calendar calendar2End = Calendar.getInstance();
-// calendar2End.setTime(createTime);
-// calendar2End.set(Calendar.HOUR_OF_DAY, Integer.valueOf(num22.split("-")[1].split(":")[0]));
-// calendar2End.set(Calendar.MINUTE, Integer.valueOf(num22.split("-")[1].split(":")[1]));
-// // 判断是否为高峰期 起步价,里程费,时长费修改
-// if ((createTime.getTime() > calendar1Start.getTimeInMillis() && createTime.getTime() < calendar1End.getTimeInMillis())
-// || (createTime.getTime() > calendar2Start.getTimeInMillis() && createTime.getTime() < calendar2End.getTimeInMillis())) {
-// num3 = num23;
-// num6 = num24;
-// num7 = num25;
-// startType = 3;
-// }
-// // 判断当前是否属于节假日
-// boolean holiday = holidayUtil.isHoliday(DateUtils.toLocalDate(createTime));
-// if (holiday) {
-// // 判断是否为节假日 起步价修改
-// num3 = num29;
-// num6 = num30;
-// num7 = num31;
-// startType = 4;
-// }
-// // 查询起步价结束时间段
-// for (OrderTrajectory trajectory : trajectories) {
-// Long locatetime = trajectory.getLocatetime();
-// endDate = new Date(locatetime);
-// LocalDateTime end = DateUtils.dateToLocalDateTime(endDate);
-// if (end.isAfter(tripBegin)) {
-// // 行程开始 开始计算里程数
-// if (startDistance >= Double.parseDouble(num4)) {
-// // 行驶里程大于基础配置里程 那么起步价时段计算完成
-// break;
-// }
-// startDistance += trajectory.getDistance();
-// }
-// }
-// // 起步价价格明细封装
-// FareBreakdownDetailVo startDetail = new FareBreakdownDetailVo();
-// startDetail.setType(startType);
-// startDetail.setTime(timeFormat.format(startDate) + "-" + timeFormat.format(endDate));
-// startDetail.setMileage(new BigDecimal(startDistance / 1000).setScale(2, RoundingMode.HALF_UP));
-//
-// // 计算startDate和endDate相差多少分钟
-// // 将 Date 转换为 LocalDateTime
-// LocalDateTime startDateTime = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
-// LocalDateTime endDateTime = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
-//
-// // 计算时间差(单位:分钟)
-// long minutesDifference = Duration.between(startDateTime, endDateTime).toMinutes();
-// startDetail.setDuration(minutesDifference);
-// startDetail.setMoney(new BigDecimal(num3));
-// start.add(startDetail);
-//
-//
-// // 计算起步价格、里程、时段、行驶时间
-//// calculateStartingFare(trajectories, tripBegin, startFlag, startDistance, startingFareJsonArray, num3, num4, num5, endDate, order, num14, num15, num16, num17, startType, num21, num22, num23, num24, num25, num29, num30, num31, timeFormat, startDate, start);
-//
-// for (OrderTrajectory trajectory : trajectories) {
-//// FareBreakdownDetailVo mileageDetail = new FareBreakdownDetailVo();
-//// mileageDetail.setType();
-//// mileageDetail.setTime();
-//// mileageDetail.setMileage();
-//// mileageDetail.setDuration();
-//// mileageDetail.setMoney();
-//
-// Long locatetime = trajectory.getLocatetime();
-// Date mileageDate = new Date(locatetime);
-// LocalDateTime begin = DateUtils.dateToLocalDateTime(mileageDate);
-// if (begin.isAfter(tripBegin)) {
-// totalDistance += trajectory.getDistance();
-// if (totalDistance >= startDistance) {
-// // 开始累加起步里程
-// mileageDistance += trajectory.getDistance();
-// // 判断当前里程费属于什么时段
-//// mileageTypeTemp
-// MileageDto param = new MileageDto();
-// param.setMileage(num6);
-// param.setTime(num7);
-// param.setMileageTypeTemp(mileageTypeTemp);
-// MileageDto mileageDto = mileageType(param,startingFareJsonArray, mileageDate, begin, num14, num16, num17, num21, num22, num24, num25, num30, num31);
-// if (mileageType==0){
-// // 首次
-// mileageType = mileageDto.getMileageTypeTemp();
-// mileageTypeTemp= mileageDto.getMileageTypeTemp();
-// } else if (mileageType!=mileageTypeTemp){
-// // 新时段
-// FareBreakdownDetailVo fareBreakdownDetailVo = new FareBreakdownDetailVo();
-// fareBreakdownDetailVo.setType(mileageType);
-// fareBreakdownDetailVo.setTime(timeFormat.format(endDate)+"-"+timeFormat.format(mileageDate));
-// double md = mileageDistance / 1000;
-// fareBreakdownDetailVo.setMileage(new BigDecimal(md).setScale(2, RoundingMode.HALF_UP));
-// // 计算startDate和endDate相差多少分钟
-// // 将 Date 转换为 LocalDateTime
-// LocalDateTime startMileageTime = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
-// LocalDateTime endMileageTime = mileageDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
-//
-// // 计算时间差(单位:分钟)
-// long minutesDifferenceMileage = Duration.between(startMileageTime, endMileageTime).toMinutes();
-// startDetail.setDuration(minutesDifference);
-// fareBreakdownDetailVo.setDuration(minutesDifferenceMileage);
-// // 如果md小数位是0 那么舍弃小数,如果小数位不为0 那么进1
-// fareBreakdownDetailVo.setMileage(new BigDecimal(md).setScale(2, RoundingMode.HALF_UP));
-// Integer temp = (int)md;
-// if (md> temp){
-// temp=temp+1;
-// }
-// // 超出的里程
-// fareBreakdownDetailVo.setMoney(new BigDecimal(temp*6));
-// mileage.add(fareBreakdownDetailVo);
-// // 修改时段标识
-// mileageType = mileageTypeTemp;
-// // 修改新时段开始时间
-// endDate = mileageDate;
-// }else{
-// // 时段未变化
-// }
-// }
-// }
-// }
-// // 开始计算里程费用
-// for (OrderTrajectory trajectory : trajectories) {
-// Long locatetime = trajectory.getLocatetime();
-// Date mileageDate = new Date(locatetime);
-// LocalDateTime begin = DateUtils.dateToLocalDateTime(mileageDate);
-// // 行驶里程大于起步里程配置 开始计算里程和里程费
-// if (begin.isAfter(tripBegin)) {
-// totalDistance += trajectory.getDistance();
-// double v = totalDistance / 1000.0;
-// if (v >= Double.parseDouble(num5)) {
-// // 增加超出起步里程的里程数
-// mileageDistance += trajectory.getDistance();
-//
-// }
-// if (mileageType == 0) {
-// // 第一次计算里程费
-//
-// }
-// }
-// }
-// } else {
-//
-// }
-//
-//// XpPricingCardVo xpPricingCardVo = xpPricingUtil.calculationPrice(
-//// order.getAppUserId().toString(),JSON.parseObject(pricing.getBasicPricingJson()),
-//// JSON.parseArray(pricing.getStartingFareJson()),
-//// pricing.getDynamicPricingJson(),
-//// pricing.getIsDynamicPrice(),
-//// totalDistance,
-//// seconds,
-//// order.getCityId()
-//// );
-
+ for (FareBreakdownDetailVo fareBreakdownDetailVo : start) {
+ XpOrderDetail xpOrderDetail = new XpOrderDetail();
+ BeanUtils.copyProperties(fareBreakdownDetailVo, xpOrderDetail);
+ xpOrderDetail.setOrderId(orderId);
+ xpOrderDetail.setDetailType(1);
+ xpOrderDetail.setCreateTime(LocalDateTime.now());
+ xpOrderDetails.add(xpOrderDetail);
+ }
+ BigDecimal mileageMoney = BigDecimal.ZERO;
+ for (FareBreakdownDetailVo fareBreakdownDetailVo : mileage) {
+ XpOrderDetail xpOrderDetail = new XpOrderDetail();
+ BeanUtils.copyProperties(fareBreakdownDetailVo, xpOrderDetail);
+ xpOrderDetail.setOrderId(orderId);
+ xpOrderDetail.setDetailType(2);
+ xpOrderDetail.setCreateTime(LocalDateTime.now());
+ mileageMoney = mileageMoney.add(fareBreakdownDetailVo.getMoney());
+ xpOrderDetails.add(xpOrderDetail);
+ }
+ order.setMileageMoney(mileageMoney);
+ for (XpOrderDetail xpOrderDetail : xpOrderDetails) {
+ xpOrderDetailMapper.insert(xpOrderDetail);
+ }
+ for (FareBreakdownDetailVo fareBreakdownDetailVo : duration) {
+ order.setDurationType(fareBreakdownDetailVo.getType());
+ order.setDurationMoney(fareBreakdownDetailVo.getMoney());
+ order.setDuration(Double.parseDouble(fareBreakdownDetailVo.getDuration()+""));
+ }
+ for (FareBreakdownDetailVo fareBreakdownDetailVo : longDistance) {
+ order.setLongDistanceType(fareBreakdownDetailVo.getType());
+ order.setLongDistance(fareBreakdownDetailVo.getMileage().doubleValue());
+ order.setLongDistancemoney(fareBreakdownDetailVo.getMoney());
+ }
+ baseMapper.updateById(order);
}
@@ -1743,8 +1451,11 @@
orderDetailVo.setFeedbackPictures(evaluate.getFeedbackPictures());
orderDetailVo.setFeedbackContent(evaluate.getFeedbackContent());
orderDetailVo.setOrderRating(evaluate.getOrderRating());
- XpFeedbackType feedbackType = xpSystemSettingClient.getFeedbackTypeById(evaluate.getFeedbackTypeId()).getData();
- orderDetailVo.setFeedbackTypeName(feedbackType.getFeedbackType());
+ if(evaluate.getFeedbackTypeId()!=null){
+ XpFeedbackType feedbackType = xpSystemSettingClient.getFeedbackTypeById(evaluate.getFeedbackTypeId()).getData();
+ orderDetailVo.setFeedbackTypeName(feedbackType.getFeedbackType());
+ }
+
}
List<OrderTrajectory> trajectories = mongoTemplate.find(
new Query(Criteria.where("orderId").is(orderId))
@@ -1776,35 +1487,35 @@
@Transactional
// @ShardingTransactionType(TransactionType.BASE)
public void popOrder(PopOrderDto dto) {
-
XpOrder order = this.getById(dto.getOrderId());
order.setAcceptanceTime(LocalDateTime.now());
-
+ AddTaxiPassengerVo addTaxiPassengerVo = new AddTaxiPassengerVo();
R<XpVehicle> byVehicleVin = xpVehicleClient.findByVehicleVin(dto.getXpVehicleVin());
if (byVehicleVin.getCode() == 200) {
order.setVehicleId(byVehicleVin.getData().getId());
+ addTaxiPassengerVo.setVin(byVehicleVin.getData().getVehicleVin());
}
order.setStatus(2);
- // Redis弹出这个队列元素
- // value 订单Id_经纬度_状态_用户id_订单编号_距离_时间
- String popFirstElement = redisService.popFirstElement(order.getQueueName());
- XpGeoQueryEntity xpGeoQueryEntity = new XpGeoQueryEntity();
- String[] split = popFirstElement.split("_");
- xpGeoQueryEntity.setOrderId(split[0]);
- String[] split1 = split[1].split(",");
- xpGeoQueryEntity.setLocation(new GeoJsonPoint(Double.parseDouble(split1[0]), Double.parseDouble(split1[1])));
- xpGeoQueryEntity.setTimestamp(new Date());
- // 计算2个时间的秒数
- LocalDateTime createTime = order.getCreateTime();
- LocalDateTime acceptanceTime = order.getAcceptanceTime();
- xpGeoQueryEntity.setSeconds((int) Duration.between(createTime, acceptanceTime).getSeconds());
- String currentTimeSlot = DateUtils.getCurrentTimeSlot();
- xpGeoQueryEntity.setTime(currentTimeSlot);
- // 存mongo数据
- xpPricingClient.saveXpGeoQueryEntity(xpGeoQueryEntity);
- this.updateById(order);
+ addTaxiPassengerVo.setUid(order.getAppUserId().toString());
+ addTaxiPassengerVo.setOrderNo(order.getOrderNumber());
+ // TODO appid
+ addTaxiPassengerVo.setAppId("");
+ BaseVehicleUserDto baseVehicleUserDto = userVehicleClient.addTaxiPassenger(addTaxiPassengerVo);
+ if(baseVehicleUserDto.getCode()==200){
+
+ // Redis弹出这个队列元素
+ // value 订单Id_经纬度_状态_用户id_订单编号_距离_时间
+ String popFirstElement = redisService.popFirstElement(order.getQueueName());
+ XpGeoQueryEntity xpGeoQueryEntity = new XpGeoQueryEntity();
+ String[] split = popFirstElement.split("_");
+ xpGeoQueryEntity.setOrderId(split[0]);
+ // 存mongo数据
+ xpPricingClient.updateXpGeoQueryEntity(split[0]);
+ this.updateById(order);
+
+ }
}
--
Gitblit v1.7.1