| | |
| | | import com.xiaopeng.order.service.IXpOrderEvaluateService; |
| | | import com.xiaopeng.order.service.IXpOrderReassignService; |
| | | import com.xiaopeng.order.service.IXpOrderService; |
| | | import com.xiaopeng.order.utils.TaxiPricingDemoService; |
| | | import com.xiaopeng.order.utils.holiday.HolidayUtil; |
| | | import com.xiaopeng.order.vo.OrderDetailVo; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | |
| | | // 消息推送 |
| | | Map<String, Object> params = new HashMap<>(); |
| | | Map<String, Object> content = new HashMap<>(); |
| | | content.put("orderId",order.getId()); |
| | | content.put("orderId", order.getId()); |
| | | content.put("status", OrderStatusEnum.CANCELED.getCode()); |
| | | params.put("type", PushMessageTypeEnum.ORDER_STATUS.getDesc()); |
| | | params.put("content", com.alibaba.fastjson2.JSONObject.toJSONString(content)); |
| | | params.put("timestamp", new Date().getTime()+""); |
| | | params.put("timestamp", new Date().getTime() + ""); |
| | | String message = JSONObject.toJSONString(params); |
| | | SendMessageDTO sendMessageDTO = new SendMessageDTO(); |
| | | sendMessageDTO.setMessage(message); |
| | |
| | | |
| | | userVehicleClient.cancelTaxiPassenger(cancelTaxiPassengerVo); |
| | | } |
| | | // 计算起步价 |
| | | // 费用 |
| | | // 查询订单轨迹 |
| | | List<OrderTrajectory> trajectories = mongoTemplate.find( |
| | | new Query(Criteria.where("orderId").is(orderId)) |
| | | .with(Sort.by(Sort.Direction.ASC, "locatetime")), |
| | | OrderTrajectory.class |
| | | ); |
| | | List<TaxiPricingDemoService.GpsPoint> gpsPoints = new ArrayList<>(); |
| | | for (OrderTrajectory trajectory : trajectories) { |
| | | TaxiPricingDemoService.GpsPoint point = new TaxiPricingDemoService.GpsPoint(trajectory.getDistance(),trajectory.getLocatetime() ); |
| | | gpsPoints.add(point); |
| | | } |
| | | TaxiPricingDemoService.PricingConfig config = new TaxiPricingDemoService.PricingConfig(); |
| | | config.peak = new TaxiPricingDemoService.PricingRule("高峰期", "14:40", "14:46", 15.0, 3.0, 5.0, 3.0, 0.8); |
| | | config.night = new TaxiPricingDemoService.PricingRule("夜间行驶", "14:47", "14:48", 18.0, 3.0, 5.0, 3.5, 1.0); |
| | | config.holiday = new TaxiPricingDemoService.PricingRule("节假日", "18:47", "18:48", 18.0, 3.0, 5.0, 4, 2.0); |
| | | config.normals.add(new TaxiPricingDemoService.PricingRule("普通时段", "14:46", "14:47", 10.0, 3.0, 5.0, 2.4, 0.5)); |
| | | config.normals.add(new TaxiPricingDemoService.PricingRule("普通时段", "14:48", "17:59", 10.0, 3.0, 5.0, 2.4, 0.5)); |
| | | |
| | | // --- 远途加价区间配置 (关键修改) --- |
| | | // 1. 超过 num1(12) 不足 num2(20), 加收 num3(1.2) |
| | | config.longSteps.add(new TaxiPricingDemoService.LongRangeStep(5.0, 6.0, 1.2)); |
| | | // 2. 超过 num4(20) 不足 num5(35), 加收 num6(2.0) |
| | | config.longSteps.add(new TaxiPricingDemoService.LongRangeStep(6.0, 7.0, 2.0)); |
| | | // 3. 超过 num7(35) 以后, 加收 num8(3.5) -> numEnd 传个极大值 |
| | | config.longSteps.add(new TaxiPricingDemoService.LongRangeStep(7.0, 8.0, 3.5)); |
| | | |
| | | TaxiPricingDemoService.TaxiPricingService service = new TaxiPricingDemoService.TaxiPricingService(); |
| | | Map<String, BigDecimal> bill = service.calculateOrderPrice(DateUtils.toDate(order.getCreateTime()), order.getMileageKilometers(), gpsPoints, config); |
| | | System.err.println("======= 订单计费账单 ======="); |
| | | bill.forEach((detail, price) -> System.err.println(detail + ": " + price + " 元")); |
| | | |
| | | BigDecimal totalAmount = bill.values().stream().reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | System.err.println("--------------------------"); |
| | | System.err.println("应付总额: " + totalAmount + " 元"); |
| | | |
| | | // // 计算实际价格 |
| | | // // 根据订单所属开通城市id 查询定价 |
| | |
| | | //// ); |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | private MileageDto mileageType(MileageDto param,JSONArray startingFareJsonArray, Date mileageDate, LocalDateTime begin, String num14, String num16, String num17, String num21, String num22, String num24, String num25, String num30, String num31) { |
| | | private MileageDto mileageType(MileageDto param, JSONArray startingFareJsonArray, Date mileageDate, LocalDateTime begin, String num14, String num16, String num17, String num21, String num22, String num24, String num25, String num30, String num31) { |
| | | // 计算出是在哪个普通时间段内 |
| | | for (Object o : startingFareJsonArray) { |
| | | JSONObject startingFare = (JSONObject) o; |
| | |
| | | calendarEnd.set(Calendar.MINUTE, Integer.valueOf(startingFare.getString("num2").split(":")[1])); |
| | | // 找到符合条件的直接跳出循环 |
| | | if (mileageDate.getTime() > calendarStart.getTimeInMillis() && mileageDate.getTime() < calendarEnd.getTimeInMillis()) { |
| | | param.setMileage(startingFare.getString("num6")) ; |
| | | param.setMileage(startingFare.getString("num6")); |
| | | param.setTime(startingFare.getString("num7")); |
| | | param.setMileageTypeTemp(1); |
| | | break; |
| | |
| | | if (date.getTime() > calendarStart.getTimeInMillis() && date.getTime() < calendarEnd.getTimeInMillis() |
| | | ) { |
| | | |
| | | param.setMileage(num16) ; |
| | | param.setMileage(num16); |
| | | param.setTime(num17); |
| | | param.setMileageTypeTemp(2); |
| | | } |
| | |
| | | if ((date.getTime() > calendar1Start.getTimeInMillis() && date.getTime() < calendar1End.getTimeInMillis()) |
| | | || (date.getTime() > calendar2Start.getTimeInMillis() && date.getTime() < calendar2End.getTimeInMillis())) { |
| | | |
| | | param.setMileage(num24) ; |
| | | param.setMileage(num24); |
| | | param.setTime(num25); |
| | | param.setMileageTypeTemp(3); |
| | | } |
| | |
| | | boolean holiday = holidayUtil.isHoliday(localDate); |
| | | if (holiday) { |
| | | // 判断是否为节假日 起步价修改 |
| | | param.setMileage(num30) ; |
| | | param.setMileage(num30); |
| | | param.setTime(num31); |
| | | param.setMileageTypeTemp(4); |
| | | } |
| | |
| | | BeanUtils.copyProperties(order, orderDetailVo); |
| | | // 查询车辆信息 |
| | | XpVehicle vehicle = xpVehicleClient.queryById(order.getVehicleId()).getData(); |
| | | if (vehicle!=null){ |
| | | if (vehicle != null) { |
| | | orderDetailVo.setVehicleCode(vehicle.getVehicleCode()); |
| | | orderDetailVo.setPlateNumber(vehicle.getPlateNumber()); |
| | | orderDetailVo.setVehicleColor(vehicle.getVehicleColor()); |
| | |
| | | OrderTrajectory.class |
| | | ); |
| | | orderDetailVo.setTrajectories(trajectories); |
| | | if (order.getTripBegin()!=null&&order.getTripEnd()!=null){ |
| | | if (order.getTripBegin() != null && order.getTripEnd() != null) { |
| | | // 计算两个时间相差多少分钟 |
| | | long minutesDifference = Duration.between(order.getTripBegin(), order.getTripEnd()).toMinutes(); |
| | | orderDetailVo.setOrderTime(minutesDifference); |
| | | }else{ |
| | | } else { |
| | | orderDetailVo.setOrderTime(0l); |
| | | } |
| | | if (order.getStartMileage()!=null){ |
| | | orderDetailVo.setTotalMileage(order.getStartMileage()+(order.getMileageKilometers()!=null?order.getMileageKilometers():0D)); |
| | | if (order.getStartMileage() != null) { |
| | | orderDetailVo.setTotalMileage(order.getStartMileage() + (order.getMileageKilometers() != null ? order.getMileageKilometers() : 0D)); |
| | | |
| | | } |
| | | return orderDetailVo; |
| | |
| | | |
| | | /** |
| | | * 成功操作下发命令后调用 用于弹出redis队列的获取成功的数据 |
| | | * |
| | | * @param dto |
| | | */ |
| | | @Override |