| | |
| | | import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient; |
| | | import com.xiaopeng.api.model.account.XpAppUser; |
| | | import com.xiaopeng.api.model.maintenance.XpTaskRule; |
| | | import com.xiaopeng.api.model.operation.XpFeedbackType; |
| | | import com.xiaopeng.api.model.operation.XpGeoQueryEntity; |
| | | import com.xiaopeng.api.model.operation.XpPoint; |
| | | import com.xiaopeng.api.model.operation.XpPricing; |
| | | import com.xiaopeng.api.model.operation.*; |
| | | import com.xiaopeng.api.model.order.*; |
| | | import com.xiaopeng.api.model.vehicleConvoy.XpFleet; |
| | | import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; |
| | |
| | | } |
| | | |
| | | // 11.2 下发订单到新车辆 |
| | | PushOrderDto pushDto = new PushOrderDto(); |
| | | pushDto.setOrderId(order.getId().toString()); |
| | | pushDto.setVin(newVehicle.getVehicleVin()); |
| | | orderMissionClient.pushOrder(pushDto); |
| | | PushOrderDto pushOrderDto = new PushOrderDto(); |
| | | pushOrderDto.setVin(newVehicle.getVehicleVin()); |
| | | pushOrderDto.setOrderId(order.getId().toString()); |
| | | pushOrderDto.setStartLatitude(order.getStartLat()); |
| | | pushOrderDto.setStartLongitude(order.getStartLon()); |
| | | pushOrderDto.setEndLatitude(order.getEndLat()); |
| | | pushOrderDto.setEndLongitude(order.getEndLon()); |
| | | pushOrderDto.setOrderType(OrderType.USER_ORDER); |
| | | pushOrderDto.setStage(1); |
| | | // 调用推送服务 orderId + carVin |
| | | orderMissionClient.pushOrder(pushOrderDto); |
| | | |
| | | |
| | | log.info("已下发订单到新车辆,订单ID: {}, VIN: {}", orderId, newVehicle.getVehicleVin()); |
| | | |
| | | // 11.3 更新新车辆状态为已接单 |
| | |
| | | xpCruiseOrderMapper.insert(returnOrder); |
| | | |
| | | // 下发巡游订单到原车辆 |
| | | PushOrderDto pushDto = new PushOrderDto(); |
| | | pushDto.setVin(oldVehicle.getVehicleVin()); |
| | | pushDto.setOrderId(returnOrder.getId()); |
| | | orderMissionClient.pushOrder(pushDto); |
| | | PushOrderDto pushOrderDto = new PushOrderDto(); |
| | | pushOrderDto.setVin(oldVehicle.getVehicleVin()); |
| | | pushOrderDto.setOrderId(returnOrder.getId().toString()); |
| | | pushOrderDto.setStartLatitude(returnOrder.getStartLat()); |
| | | pushOrderDto.setStartLongitude(returnOrder.getStartLon()); |
| | | pushOrderDto.setEndLatitude(returnOrder.getEndLat()); |
| | | pushOrderDto.setEndLongitude(returnOrder.getEndLon()); |
| | | pushOrderDto.setOrderType(OrderType.CRUISE_ORDER); |
| | | pushOrderDto.setStage(2); |
| | | // 调用推送服务 orderId + carVin |
| | | orderMissionClient.pushOrder(pushOrderDto); |
| | | |
| | | log.info("为原车辆创建返程巡游订单成功,订单ID: {}, 车辆ID: {}", returnOrder.getId(), oldVehicle.getId()); |
| | | |
| | |
| | | // 修改车辆状态 |
| | | vehicle.setState(0); |
| | | |
| | | // 获取配置 根据配置判断是否该收车 如果是则找到收车点位进行收车操作 |
| | | R<XpTaskRule> xpTaskRuleR = xpTaskRuleClient.queryDetail(); |
| | | XpTaskRule xpTaskRule = xpTaskRuleR.getData(); |
| | | |
| | | // 生成新的巡游单子 回到最新巡游的初始起点位置 |
| | | XpCruiseOrder xpCruiseOrders = xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 2).orderByDesc(BaseModel::getCreateTime).last("limit 1")); |
| | | int temp=0; |
| | | if(xpCruiseOrders==null){ |
| | | temp=1; |
| | | //特殊情况 可能没有产生终止的订单 (到站点就被正常接单了)所以找正常订单 |
| | | xpCruiseOrders=xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 3).orderByDesc(BaseModel::getCreateTime).last("limit 1")); |
| | | } |
| | | XpCruiseOrder xpCruiseOrder = new XpCruiseOrder(); |
| | | xpCruiseOrder.setVehicleId(vehicle.getId()); |
| | | xpCruiseOrder.setFleetId(vehicle.getFleetId()); |
| | | xpCruiseOrder.setVehicleVin(vehicle.getVehicleVin()); |
| | | xpCruiseOrder.setOrderType(2); |
| | | // 返程起点是当前正常订单的终点 |
| | | xpCruiseOrder.setStartPointId(order.getEndPointId()); |
| | | xpCruiseOrder.setStartPointName(order.getEndPointName()); |
| | | xpCruiseOrder.setStartLon(order.getEndLon()); |
| | | xpCruiseOrder.setStartLat(order.getEndLat()); |
| | | |
| | | // 完成的直接走终点 终止的走起点 |
| | | if(temp==0){ |
| | | xpCruiseOrder.setEndPointId(xpCruiseOrders.getStartPointId()); |
| | | xpCruiseOrder.setEndPointName(xpCruiseOrders.getStartPointName()); |
| | | xpCruiseOrder.setEndLon(xpCruiseOrders.getStartLon()); |
| | | xpCruiseOrder.setEndLat(xpCruiseOrders.getStartLat()); |
| | | }else { |
| | | xpCruiseOrder.setEndPointId(xpCruiseOrders.getEndPointId()); |
| | | xpCruiseOrder.setEndPointName(xpCruiseOrders.getEndPointName()); |
| | | xpCruiseOrder.setEndLon(xpCruiseOrders.getEndLon()); |
| | | xpCruiseOrder.setEndLat(xpCruiseOrders.getEndLat()); |
| | | } |
| | | |
| | | |
| | | xpCruiseOrder.setStatus(1); |
| | | xpCruiseOrder.setLastOrderId(xpCruiseOrders.getId()); |
| | | xpCruiseOrder.setCreateTime(LocalDateTime.now()); |
| | | xpCruiseOrder.setId("XU"+ IdUtil.fastUUID()); |
| | | |
| | | // 判断当前时分秒是否大于收车时间 |
| | | LocalTime vehicleCollectionTime = xpTaskRule.getVehicleCollectionTime(); |
| | | if (vehicleCollectionTime.isBefore(LocalTime.now())) { |
| | | vehicle.setOperatingStatus(3); |
| | | //找到车辆的收车点位 更新终点点位 |
| | | R<XpCruiseOrder> returnCruisePoint = xpCruisePlanClient.findReturnCruisePoint(xpCruiseOrder); |
| | | xpCruiseOrder = returnCruisePoint.getData(); |
| | | } |
| | | xpVehicleClient.updateVehicleById(vehicle); |
| | | |
| | | xpCruiseOrderMapper.insert(xpCruiseOrder); |
| | | |
| | | |
| | | R<XpPoint> xpPointR = xpPointClient.queryById(order.getEndPointId()); |
| | | XpPoint data = xpPointR.getData(); |
| | | //下发命令 |
| | | // 添加自动结束行程定时任务job |
| | | Map<String, ? extends Object> jobMaps = |
| | | new ImmutableMap.Builder<String, String>(). |
| | | put("id", xpCruiseOrder.getId()) |
| | | .build(); |
| | | QuartzManager.addJob( |
| | | AddCruiseMissionJob.class, |
| | | (AddCruiseMissionJob.name + xpCruiseOrder.getId()).toUpperCase(), |
| | | TimeJobType.ADD_CRUISE_MISSION, |
| | | DateUtils.localDateTimeToDate(LocalDateTime.now().plusMinutes(data.getParkingTimeLimit())), |
| | | jobMaps |
| | | ); |
| | | addCruiseMission(vehicle,order); |
| | | // // 获取配置 根据配置判断是否该收车 如果是则找到收车点位进行收车操作 |
| | | // R<XpTaskRule> xpTaskRuleR = xpTaskRuleClient.queryDetail(); |
| | | // XpTaskRule xpTaskRule = xpTaskRuleR.getData(); |
| | | // |
| | | // // 生成新的巡游单子 回到最新巡游的初始起点位置 |
| | | // XpCruiseOrder xpCruiseOrders = xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 2).orderByDesc(BaseModel::getCreateTime).last("limit 1")); |
| | | // int temp=0; |
| | | // if(xpCruiseOrders==null){ |
| | | // temp=1; |
| | | // //特殊情况 可能没有产生终止的订单 (到站点就被正常接单了)所以找正常订单 |
| | | // xpCruiseOrders=xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 3).orderByDesc(BaseModel::getCreateTime).last("limit 1")); |
| | | // } |
| | | // XpCruiseOrder xpCruiseOrder = new XpCruiseOrder(); |
| | | // xpCruiseOrder.setVehicleId(vehicle.getId()); |
| | | // xpCruiseOrder.setFleetId(vehicle.getFleetId()); |
| | | // xpCruiseOrder.setVehicleVin(vehicle.getVehicleVin()); |
| | | // xpCruiseOrder.setOrderType(2); |
| | | // // 返程起点是当前正常订单的终点 |
| | | // xpCruiseOrder.setStartPointId(order.getEndPointId()); |
| | | // xpCruiseOrder.setStartPointName(order.getEndPointName()); |
| | | // xpCruiseOrder.setStartLon(order.getEndLon()); |
| | | // xpCruiseOrder.setStartLat(order.getEndLat()); |
| | | // |
| | | // // 完成的直接走终点 终止的走起点 |
| | | // if(temp==0){ |
| | | // xpCruiseOrder.setEndPointId(xpCruiseOrders.getStartPointId()); |
| | | // xpCruiseOrder.setEndPointName(xpCruiseOrders.getStartPointName()); |
| | | // xpCruiseOrder.setEndLon(xpCruiseOrders.getStartLon()); |
| | | // xpCruiseOrder.setEndLat(xpCruiseOrders.getStartLat()); |
| | | // }else { |
| | | // xpCruiseOrder.setEndPointId(xpCruiseOrders.getEndPointId()); |
| | | // xpCruiseOrder.setEndPointName(xpCruiseOrders.getEndPointName()); |
| | | // xpCruiseOrder.setEndLon(xpCruiseOrders.getEndLon()); |
| | | // xpCruiseOrder.setEndLat(xpCruiseOrders.getEndLat()); |
| | | // } |
| | | // |
| | | // |
| | | // xpCruiseOrder.setStatus(0); |
| | | // xpCruiseOrder.setLastOrderId(xpCruiseOrders.getId()); |
| | | // xpCruiseOrder.setCreateTime(LocalDateTime.now()); |
| | | // xpCruiseOrder.setId("XU"+ IdUtil.fastUUID()); |
| | | // |
| | | // // 判断当前时分秒是否大于收车时间 |
| | | // LocalTime vehicleCollectionTime = xpTaskRule.getVehicleCollectionTime(); |
| | | // if (vehicleCollectionTime.isBefore(LocalTime.now())) { |
| | | // vehicle.setOperatingStatus(3); |
| | | // //找到车辆的收车点位 更新终点点位 |
| | | // R<XpCruiseOrder> returnCruisePoint = xpCruisePlanClient.findReturnCruisePoint(xpCruiseOrder); |
| | | // xpCruiseOrder = returnCruisePoint.getData(); |
| | | // } |
| | | // xpVehicleClient.updateVehicleById(vehicle); |
| | | // |
| | | // xpCruiseOrderMapper.insert(xpCruiseOrder); |
| | | // |
| | | // |
| | | // R<XpPoint> xpPointR = xpPointClient.queryById(order.getEndPointId()); |
| | | // XpPoint data = xpPointR.getData(); |
| | | // //下发命令 |
| | | // // 添加自动结束行程定时任务job |
| | | // Map<String, ? extends Object> jobMaps = |
| | | // new ImmutableMap.Builder<String, String>(). |
| | | // put("id", xpCruiseOrder.getId()) |
| | | // .build(); |
| | | // QuartzManager.addJob( |
| | | // AddCruiseMissionJob.class, |
| | | // (AddCruiseMissionJob.name + xpCruiseOrder.getId()).toUpperCase(), |
| | | // TimeJobType.ADD_CRUISE_MISSION, |
| | | // DateUtils.localDateTimeToDate(LocalDateTime.now().plusMinutes(data.getParkingTimeLimit())), |
| | | // jobMaps |
| | | // ); |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 添加巡游任务下发命令 |
| | | * @param vehicle |
| | | * @param order |
| | | */ |
| | | |
| | | public void addCruiseMission(XpVehicle vehicle, XpOrder order) { |
| | | |
| | | if(vehicle.getState()!=0 || vehicle.getOperatingStatus()!=1){ |
| | | return; |
| | | } |
| | | |
| | | // 判断是否有计划 |
| | | R<XpCruisePlanVehicle> xpCruisePlanR = xpCruisePlanClient.getCruisePlan(vehicle.getId()); |
| | | if(xpCruisePlanR==null || xpCruisePlanR.getData()==null){ |
| | | return; |
| | | } |
| | | |
| | | // 获取配置 根据配置判断是否该收车 如果是则找到收车点位进行收车操作 |
| | | R<XpTaskRule> xpTaskRuleR = xpTaskRuleClient.queryDetail(); |
| | | XpTaskRule xpTaskRule = xpTaskRuleR.getData(); |
| | | |
| | | // 生成新的巡游单子 回到最新巡游的初始起点位置 |
| | | XpCruiseOrder xpCruiseOrders = xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 2).orderByDesc(BaseModel::getCreateTime).last("limit 1")); |
| | | int temp=0; |
| | | if(xpCruiseOrders==null){ |
| | | temp=1; |
| | | //特殊情况 可能没有产生终止的订单 (到站点就被正常接单了)所以找正常订单 |
| | | xpCruiseOrders=xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 3).orderByDesc(BaseModel::getCreateTime).last("limit 1")); |
| | | } |
| | | XpCruiseOrder xpCruiseOrder = new XpCruiseOrder(); |
| | | xpCruiseOrder.setVehicleId(vehicle.getId()); |
| | | xpCruiseOrder.setFleetId(vehicle.getFleetId()); |
| | | xpCruiseOrder.setVehicleVin(vehicle.getVehicleVin()); |
| | | xpCruiseOrder.setOrderType(2); |
| | | // 返程起点是当前正常订单的终点 |
| | | xpCruiseOrder.setStartPointId(order.getEndPointId()); |
| | | xpCruiseOrder.setStartPointName(order.getEndPointName()); |
| | | xpCruiseOrder.setStartLon(order.getEndLon()); |
| | | xpCruiseOrder.setStartLat(order.getEndLat()); |
| | | |
| | | // 完成的直接走终点 终止的走起点 |
| | | if(temp==0){ |
| | | xpCruiseOrder.setEndPointId(xpCruiseOrders.getStartPointId()); |
| | | xpCruiseOrder.setEndPointName(xpCruiseOrders.getStartPointName()); |
| | | xpCruiseOrder.setEndLon(xpCruiseOrders.getStartLon()); |
| | | xpCruiseOrder.setEndLat(xpCruiseOrders.getStartLat()); |
| | | }else { |
| | | xpCruiseOrder.setEndPointId(xpCruiseOrders.getEndPointId()); |
| | | xpCruiseOrder.setEndPointName(xpCruiseOrders.getEndPointName()); |
| | | xpCruiseOrder.setEndLon(xpCruiseOrders.getEndLon()); |
| | | xpCruiseOrder.setEndLat(xpCruiseOrders.getEndLat()); |
| | | } |
| | | |
| | | |
| | | xpCruiseOrder.setStatus(0); |
| | | xpCruiseOrder.setLastOrderId(xpCruiseOrders.getId()); |
| | | xpCruiseOrder.setCreateTime(LocalDateTime.now()); |
| | | xpCruiseOrder.setId("XU"+ IdUtil.fastUUID()); |
| | | |
| | | // 判断当前时分秒是否大于收车时间 |
| | | LocalTime vehicleCollectionTime = xpTaskRule.getVehicleCollectionTime(); |
| | | if (vehicleCollectionTime.isBefore(LocalTime.now())) { |
| | | vehicle.setOperatingStatus(3); |
| | | //找到车辆的收车点位 更新终点点位 |
| | | R<XpCruiseOrder> returnCruisePoint = xpCruisePlanClient.findReturnCruisePoint(xpCruiseOrder); |
| | | xpCruiseOrder = returnCruisePoint.getData(); |
| | | } |
| | | xpVehicleClient.updateVehicleById(vehicle); |
| | | |
| | | xpCruiseOrderMapper.insert(xpCruiseOrder); |
| | | |
| | | |
| | | R<XpPoint> xpPointR = xpPointClient.queryById(order.getEndPointId()); |
| | | XpPoint data = xpPointR.getData(); |
| | | //下发命令 |
| | | // 添加自动结束行程定时任务job |
| | | Map<String, ? extends Object> jobMaps = |
| | | new ImmutableMap.Builder<String, String>(). |
| | | put("id", xpCruiseOrder.getId()) |
| | | .build(); |
| | | QuartzManager.addJob( |
| | | AddCruiseMissionJob.class, |
| | | (AddCruiseMissionJob.name + xpCruiseOrder.getId()).toUpperCase(), |
| | | TimeJobType.ADD_CRUISE_MISSION, |
| | | DateUtils.localDateTimeToDate(LocalDateTime.now().plusMinutes(data.getParkingTimeLimit())), |
| | | jobMaps |
| | | ); |
| | | } |
| | | |
| | | 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) { |
| | | // 计算出是在哪个普通时间段内 |
| | |
| | | Long orderId = dto.getOrderId(); |
| | | //巡游单处理逻辑 |
| | | if(OrderType.CRUISE_ORDER.equals(orderType)){ |
| | | // todo 需要处理巡游的逻辑 |
| | | |
| | | XpCruiseOrder xpCruiseOrder = xpCruiseOrderMapper.selectById(orderId); |
| | | if(xpCruiseOrder!=null){ |
| | | xpCruiseOrder.setStatus(1); |
| | | xpCruiseOrderMapper.updateById(xpCruiseOrder); |
| | | } |
| | | |
| | | |
| | | } |
| | |
| | | |
| | | } |
| | | |
| | | if(xpOrder.getVehicleId()!=null){ |
| | | R<XpVehicle> xpVehicleR = xpVehicleClient.queryById(xpOrder.getVehicleId()); |
| | | xpOrderDetailVO.setPlateNumber(xpVehicleR.getData().getPlateNumber()); |
| | | } |
| | | |
| | | return xpOrderDetailVO; |
| | | } |
| | | } |