| | |
| | | import com.xiaopeng.api.model.order.XpCruiseOrder; |
| | | import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; |
| | | import com.xiaopeng.api.vo.automaticPilot.VehiclePosition; |
| | | import com.xiaopeng.api.vo.automaticPilot.protobuf.TaskActionType; |
| | | import com.xiaopeng.common.core.domain.R; |
| | | import com.xiaopeng.common.core.utils.SensitiveDataCryptoUtil; |
| | | import com.xiaopeng.common.core.web.page.PageInfo; |
| | | import com.xiaopeng.evi.oss.service.AliOssService; |
| | | import com.xiaopeng.maintenance.dto.VehicleDispatchAcceptDTO; |
| | |
| | | // 判断是否有正在进行的正常订单 |
| | | // 查询车辆 |
| | | XpVehicle xpVehicle = xpVehicleClient.queryById(dto.getVehicleId()).getData(); |
| | | if(xpVehicle.getState()==1){ |
| | | if (xpVehicle.getState() == 1) { |
| | | return R.fail("车辆正在接单中"); |
| | | } |
| | | VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(xpVehicle.getVehicleVin())), VehiclePosition.class); |
| | | if(vehiclePosition==null || vehiclePosition.getPoint()==null){ |
| | | String vin = SensitiveDataCryptoUtil.decryptIfPossible(xpVehicle.getVehicleVin()); |
| | | VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vin)), VehiclePosition.class); |
| | | if (vehiclePosition == null || vehiclePosition.getPoint() == null) { |
| | | return R.fail("车辆位置信息不存在"); |
| | | } |
| | | Integer departureStatus = dto.getDepartureStatus(); |
| | |
| | | |
| | | // 封装埋点消息实体 |
| | | VehicleEventDTO vehicleEventDTO = new VehicleEventDTO(); |
| | | vehicleEventDTO.setVin(xpVehicle.getVehicleVin()); |
| | | vehicleEventDTO.setVin(vin); |
| | | vehicleEventDTO.setXpuId(""); |
| | | vehicleEventDTO.setOrderId(""); |
| | | vehicleEventDTO.setEventKey("RT_web_vehicle_status_changed"); |
| | | vehicleEventDTO.setEventTime(System.currentTimeMillis()); |
| | | Map<String,Object> attributes = new HashMap<>(); |
| | | attributes.put("vin",xpVehicle.getVehicleVin()); |
| | | attributes.put("order_id",""); |
| | | attributes.put("timestamp",vehicleEventDTO.getEventTime()); |
| | | if(departureStatus == 1){ |
| | | attributes.put("main_status","ONLINE"); |
| | | // TODO 预留位置 目前无状态 |
| | | attributes.put("sub_status",""); |
| | | attributes.put("prev_sub_status",""); |
| | | Map<String, Object> attributes = new HashMap<>(); |
| | | attributes.put("vin", vin); |
| | | attributes.put("order_id", ""); |
| | | attributes.put("timestamp", vehicleEventDTO.getEventTime()); |
| | | |
| | | }else { |
| | | attributes.put("main_status","OFFLINE"); |
| | | // 1.0埋点新增 |
| | | attributes.put("odometer_km", vehiclePosition.getTotalOdometer()); |
| | | |
| | | if (departureStatus == 1) { |
| | | attributes.put("main_status", "ONLINE"); |
| | | // TODO 预留位置 目前无状态 |
| | | attributes.put("sub_status",""); |
| | | attributes.put("prev_sub_status",""); |
| | | attributes.put("sub_status", ""); |
| | | attributes.put("prev_sub_status", ""); |
| | | |
| | | } else { |
| | | attributes.put("main_status", "OFFLINE"); |
| | | // TODO 预留位置 目前无状态 |
| | | attributes.put("sub_status", ""); |
| | | attributes.put("prev_sub_status", ""); |
| | | } |
| | | vehicleEventDTO.setAttributes(attributes); |
| | | vehicleBuriedPointClient.sendVehicleEvent(vehicleEventDTO); |
| | | |
| | | // 发车 |
| | | if(dto.getDepartureStatus()==1){ |
| | | if (dto.getDepartureStatus() == 1) { |
| | | // 找车辆的任务 生成巡游单子 下发命令 |
| | | //发车之前,检查所有之前没终止的数据,将其终止 |
| | | xpCruiseOrderClient.stopAllCruiseOrder(xpVehicle.getVehicleVin()); |
| | | R<XpCruiseOrder> newCruiseOrder = xpCruisePlanClient.getNewCruiseOrder(new NewCruiseOrderDto(xpVehicle.getId(),xpVehicle.getVehicleVin(),xpVehicle.getFleetId(),vehiclePosition.getPoint())); |
| | | if(newCruiseOrder.getData()!=null){ |
| | | //标记订单为返程类型巡游单 |
| | | xpCruiseOrderClient.stopAllCruiseOrder(vin); |
| | | R<XpCruiseOrder> newCruiseOrder = xpCruisePlanClient.getNewCruiseOrder(new NewCruiseOrderDto(xpVehicle.getId(), vin, xpVehicle.getFleetId(), vehiclePosition.getPoint())); |
| | | if (newCruiseOrder.getData() != null && 200 == newCruiseOrder.getCode()) { |
| | | //方向为正向 |
| | | XpCruiseOrder cruiseOrder = newCruiseOrder.getData(); |
| | | cruiseOrder.setOrderType(2); |
| | | cruiseOrder.setOrderReverse(1); |
| | | //不停车替换新任务 |
| | | cruiseOrder.setTaskActionType(TaskActionType.kTerminateForNewTask); |
| | | R<Long> longR = xpCruiseOrderClient.addCruiseOrder(cruiseOrder); |
| | | if(200 != longR.getCode()){ |
| | | if (200 != longR.getCode()) { |
| | | return R.fail(longR.getMsg()); |
| | | } |
| | | } |
| | | }else if(dto.getDepartureStatus()==3){ |
| | | } else if (dto.getDepartureStatus() == 3) { |
| | | // 收车 关闭当前巡游单子 生成新的返程单子 找到收车站点 |
| | | R<Long> r = xpCruiseOrderClient.cancelCruiseOrderByVin(xpVehicle.getVehicleVin()); |
| | | XpCruiseOrder oldCruiseOrder = xpCruiseOrderClient.cancelCruiseOrderByVin(vin).getData(); |
| | | |
| | | XpCruiseOrder xpCruiseOrder = new XpCruiseOrder(); |
| | | if(vehiclePosition!=null){ |
| | | if (vehiclePosition != null) { |
| | | double x = vehiclePosition.getPoint().getX(); |
| | | double y = vehiclePosition.getPoint().getY(); |
| | | xpCruiseOrder.setStartLon(x); |
| | |
| | | xpCruiseOrder.setOrderType(2); |
| | | xpCruiseOrder.setStatus(1); |
| | | xpCruiseOrder.setOrderReverse(1); |
| | | xpCruiseOrder.setLastOrderId(r.getData()); |
| | | xpCruiseOrder.setLastOrderId(oldCruiseOrder.getId()); |
| | | xpCruiseOrder.setOrderReverse(1); |
| | | xpCruiseOrder.setXpuTaskId(snowflake.nextId() + ""); |
| | | |
| | | // 找到收车站点 |
| | | XpCruiseOrder returnCruisePoint = xpCruisePlanClient.findReturnCruisePoint(xpCruiseOrder).getData(); |
| | | if(returnCruisePoint!=null){ |
| | | if (returnCruisePoint != null) { |
| | | //不停车替换新任务 |
| | | returnCruisePoint.setLastOrderId1("XU" + oldCruiseOrder.getId()); |
| | | returnCruisePoint.setLastXpuTaskId(oldCruiseOrder.getXpuTaskId()); |
| | | returnCruisePoint.setTaskActionType(TaskActionType.kTerminateForNewTask); |
| | | xpCruiseOrderClient.addCruiseOrder(returnCruisePoint); |
| | | } |
| | | } |
| | |
| | | if (StringUtils.isNotBlank(vehiclePictures)) { |
| | | JSONObject jsonObject = JSONObject.parseObject(vehiclePictures); |
| | | // 1 |
| | | String downloadUrl = jsonObject.getString("url");; |
| | | String downloadUrl = jsonObject.getString("url"); |
| | | try { |
| | | downloadUrl = aliOssService.getDownloadUrl(jsonObject.getString("id"), jsonObject.getString("name"), true); |
| | | } catch (UnsupportedEncodingException e) { |