| | |
| | | } |
| | | |
| | | // 判断当天取消的次数 后台配置 redis 查询 |
| | | // Object cancelOrder = redisService.getCacheObject("CANCEL_ORDER_" + uid); |
| | | // log.info("取消次数:{}", cancelOrder); |
| | | // // 静默处理 |
| | | // boolean isSilent = false; |
| | | // if (cancelOrder != null) { |
| | | // Integer num = Integer.valueOf(cancelOrder.toString()); |
| | | // if (num >= cancelCount) { |
| | | // isSilent = true; |
| | | // } |
| | | // } |
| | | Object cancelOrder = redisService.getCacheObject("CANCEL_ORDER_" + uid); |
| | | log.info("取消次数:{}", cancelOrder); |
| | | // 静默处理 |
| | | boolean isSilent = false; |
| | | if (cancelOrder != null) { |
| | | Integer num = Integer.valueOf(cancelOrder.toString()); |
| | | if (num >= cancelCount) { |
| | | isSilent = true; |
| | | } |
| | | } |
| | | |
| | | |
| | | // 获取起步里程 |
| | |
| | | |
| | | // 生成订单数据 |
| | | XpOrder xpOrder = new XpOrder(); |
| | | |
| | | xpOrder.setMileageKilometers(0.0); |
| | | |
| | | // xpOrder.setVehicleId(1l); |
| | | |
| | | // xpOrder.setStartMileage(Double.valueOf(startMileage)); |
| | | |
| | | xpOrder.setAppUserId(Long.valueOf(uid)); |
| | | xpOrder.setOrderNumber("XP" + System.currentTimeMillis()); |
| | | xpOrder.setPlacementLon(dto.getPlacementLon()); |
| | |
| | | xpOrder.setId(orderId); |
| | | |
| | | // 静默处理 不推单 |
| | | // if (isSilent) { |
| | | // log.info("订单取消次数达到上限,执行静默处理,不推单。"); |
| | | // return orderId.toString(); |
| | | // } |
| | | if (isSilent) { |
| | | log.info("订单取消次数达到上限,执行静默处理,不推单。"); |
| | | return orderId.toString(); |
| | | } |
| | | |
| | | // 最大距离 |
| | | Object maxPushDistanceObj = redisService.getCacheObject(CacheConstants.MAX_PUSH_DISTANCE); |
| | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 测试阶段用于自动完成小程序的整个流程数据状态流转 |
| | | * @param orderId |
| | | */ |
| | | public void testOrder(Long orderId, Integer status) { |
| | | XpOrder xpOrder = xpOrderClient.queryOrderById(orderId).getData(); |
| | | Long appUserId = xpOrder.getAppUserId(); |
| | | if (2 == status) { |
| | | if (xpOrder.getStatus() == 0) { |
| | | return; |
| | | } |
| | | xpOrder.setAppUserId(null); |
| | | xpOrder.setStatus(2); |
| | | xpOrder.setVehicleId(1L); |
| | | xpOrder.setFleetId(2L); |
| | | xpOrderClient.updateOrder(xpOrder); |
| | | } |
| | | if (3 == status) { |
| | | //修改状态为接驾中 |
| | | xpOrder = xpOrderClient.queryOrderById(orderId).getData(); |
| | | if (xpOrder.getStatus() == 0) { |
| | | return; |
| | | } |
| | | xpOrder.setAppUserId(null); |
| | | xpOrder.setStatus(3); |
| | | xpOrderClient.updateOrder(xpOrder); |
| | | //发送订单状态 |
| | | SendMessageDTO dto = new SendMessageDTO(); |
| | | dto.setAppUserId(appUserId.toString()); |
| | | dto.setMessage("{\"type\":\"ORDER_STATUS\",\"content\":\"{\\\"orderId\\\":\\\"" + orderId + "\\\",\\\"status\\\":3}\",\"timestamp\":\"176569945845456\"}"); |
| | | xpPushMessageClient.sendStatus(dto); |
| | | //推送车辆位置 |
| | | dto.setAppUserId(appUserId.toString()); |
| | | dto.setMessage("{\"type\":\"VEHICLE_LOCATION\",\"content\":\"{\\\"orderId\\\":\\\"" + orderId + "\\\",\\\"lon\\\":113.385848,\\\"lat\\\":23.156841}\",\"timestamp\":\"176569945845456\"}"); |
| | | xpPushMessageClient.sendVehicleLocation(dto); |
| | | //发送车辆到达起点的轨迹 |
| | | OrderRouteAndFareDto routeAndFareDto = new OrderRouteAndFareDto(); |
| | | LonLatDto destination = new LonLatDto(); |
| | | destination.setLongitude(xpOrder.getStartLon()); |
| | | destination.setLatitude(xpOrder.getStartLat()); |
| | | routeAndFareDto.setDestination(destination); |
| | | LonLatDto origin = new LonLatDto(); |
| | | origin.setLongitude(113.385848); |
| | | origin.setLatitude(23.156841); |
| | | routeAndFareDto.setOrigin(origin); |
| | | routeAndFareDto.setRouteType(1); |
| | | routeAndFareDto.setOrderId(orderId); |
| | | RouteVo routeVo = xpMapClient.getOrderDistanceAndDuration(routeAndFareDto).getData(); |
| | | com.alibaba.fastjson2.JSONObject jsonObject = new com.alibaba.fastjson2.JSONObject(); |
| | | jsonObject.put("type", "ORDER_ROUTE"); |
| | | jsonObject.put("timestamp", System.currentTimeMillis()); |
| | | com.alibaba.fastjson2.JSONObject content = new com.alibaba.fastjson2.JSONObject(); |
| | | content.put("orderId", orderId.toString()); |
| | | content.put("routeType", 1); |
| | | com.alibaba.fastjson2.JSONObject route = new com.alibaba.fastjson2.JSONObject(); |
| | | route.put("distance", routeVo.getDistance()); |
| | | route.put("duration", routeVo.getDuration()); |
| | | route.put("routeID", routeVo.getRouteID()); |
| | | |
| | | List<com.alibaba.fastjson2.JSONObject> collect = routeVo.getPolyline().stream().map(item -> { |
| | | com.alibaba.fastjson2.JSONObject point = new com.alibaba.fastjson2.JSONObject(); |
| | | point.put("latitude", item.getLatitude()); |
| | | point.put("longitude", item.getLongitude()); |
| | | return point; |
| | | }).collect(Collectors.toList()); |
| | | |
| | | route.put("polyline", JSON.toJSONString(collect)); |
| | | content.put("route", route.toJSONString()); |
| | | jsonObject.put("content", content.toJSONString()); |
| | | SendMessageDTO messageDTO = new SendMessageDTO(); |
| | | messageDTO.setAppUserId(appUserId.toString()); |
| | | messageDTO.setMessage(jsonObject.toJSONString()); |
| | | xpPushMessageClient.sendRoute(messageDTO); |
| | | } |
| | | if (4 == status) { |
| | | //司机到达起点 |
| | | xpOrder = xpOrderClient.queryOrderById(orderId).getData(); |
| | | if (xpOrder.getStatus() == 0) { |
| | | return; |
| | | } |
| | | xpOrder.setAppUserId(null); |
| | | xpOrder.setStatus(4); |
| | | xpOrderClient.updateOrder(xpOrder); |
| | | SendMessageDTO dto = new SendMessageDTO(); |
| | | dto.setAppUserId(appUserId.toString()); |
| | | dto.setMessage("{\"type\":\"ORDER_STATUS\",\"content\":\"{\\\"orderId\\\":\\\"" + orderId + "\\\",\\\"status\\\":4}\",\"timestamp\":\"176569945845456\"}"); |
| | | xpPushMessageClient.sendStatus(dto); |
| | | //推送车辆位置到起点 |
| | | dto.setAppUserId(appUserId.toString()); |
| | | dto.setMessage("{\"type\":\"VEHICLE_LOCATION\",\"content\":\"{\\\"orderId\\\":\\\"" + orderId + "\\\",\\\"lon\\\":" + xpOrder.getStartLon() + ",\\\"lat\\\":" + xpOrder.getStartLat() + "}\",\"timestamp\":\"176569945845456\"}"); |
| | | xpPushMessageClient.sendVehicleLocation(dto); |
| | | } |
| | | if (5 == status) { |
| | | //乘客上车 |
| | | xpOrder = xpOrderClient.queryOrderById(orderId).getData(); |
| | | if (xpOrder.getStatus() == 0) { |
| | | return; |
| | | } |
| | | xpOrder.setAppUserId(null); |
| | | xpOrder.setStatus(5); |
| | | xpOrder.setBoardingTime(LocalDateTime.now()); |
| | | xpOrder.setBoardingLat(xpOrder.getStartLat()); |
| | | xpOrder.setBoardingLon(xpOrder.getStartLon()); |
| | | xpOrder.setBoardingAddress(xpOrder.getStartAddress()); |
| | | xpOrderClient.updateOrder(xpOrder); |
| | | SendMessageDTO dto = new SendMessageDTO(); |
| | | dto.setAppUserId(appUserId.toString()); |
| | | dto.setMessage("{\"type\":\"ORDER_STATUS\",\"content\":\"{\\\"orderId\\\":\\\"" + orderId + "\\\",\\\"status\\\":5}\",\"timestamp\":\"176569945845456\"}"); |
| | | xpPushMessageClient.sendStatus(dto); |
| | | //推送起点到终点的行驶轨迹 |
| | | OrderRouteAndFareDto routeAndFareDto = new OrderRouteAndFareDto(); |
| | | routeAndFareDto.setDestination(new LonLatDto(xpOrder.getEndLon(), xpOrder.getEndLat())); |
| | | routeAndFareDto.setOrigin(new LonLatDto(xpOrder.getStartLon(), xpOrder.getStartLat())); |
| | | routeAndFareDto.setRouteType(2); |
| | | routeAndFareDto.setOrderId(orderId); |
| | | RouteVo routeVo = xpMapClient.getOrderDistanceAndDuration(routeAndFareDto).getData(); |
| | | com.alibaba.fastjson2.JSONObject jsonObject = new com.alibaba.fastjson2.JSONObject(); |
| | | jsonObject.put("type", "ORDER_ROUTE"); |
| | | jsonObject.put("timestamp", System.currentTimeMillis()); |
| | | com.alibaba.fastjson2.JSONObject content = new com.alibaba.fastjson2.JSONObject(); |
| | | content.put("orderId", orderId.toString()); |
| | | content.put("routeType", 2); |
| | | com.alibaba.fastjson2.JSONObject route = new com.alibaba.fastjson2.JSONObject(); |
| | | route.put("distance", routeVo.getDistance()); |
| | | route.put("duration", routeVo.getDuration()); |
| | | route.put("routeID", routeVo.getRouteID()); |
| | | List<com.alibaba.fastjson2.JSONObject> collect = routeVo.getPolyline().stream().map(item -> { |
| | | com.alibaba.fastjson2.JSONObject point = new com.alibaba.fastjson2.JSONObject(); |
| | | point.put("latitude", item.getLatitude()); |
| | | point.put("longitude", item.getLongitude()); |
| | | return point; |
| | | }).collect(Collectors.toList()); |
| | | route.put("polyline", JSON.toJSONString(collect)); |
| | | content.put("route", route.toJSONString()); |
| | | jsonObject.put("content", content.toJSONString()); |
| | | SendMessageDTO messageDTO = new SendMessageDTO(); |
| | | messageDTO.setAppUserId(appUserId.toString()); |
| | | messageDTO.setMessage(jsonObject.toJSONString()); |
| | | xpPushMessageClient.sendRoute(messageDTO); |
| | | } |
| | | if (6 == status) { |
| | | //开始服务中 |
| | | xpOrder.setAppUserId(null); |
| | | xpOrder.setStatus(6); |
| | | xpOrder.setTripBegin(LocalDateTime.now()); |
| | | xpOrderClient.updateOrder(xpOrder); |
| | | SendMessageDTO dto = new SendMessageDTO(); |
| | | dto.setAppUserId(appUserId.toString()); |
| | | dto.setMessage("{\"type\":\"ORDER_STATUS\",\"content\":\"{\\\"orderId\\\":\\\"" + orderId + "\\\",\\\"status\\\":6}\",\"timestamp\":\"176569945845456\"}"); |
| | | xpPushMessageClient.sendStatus(dto); |
| | | } |
| | | |
| | | if (7 == status) { |
| | | //乘客待下车 |
| | | xpOrder.setAppUserId(null); |
| | | xpOrder.setStatus(7); |
| | | xpOrder.setTripEnd(LocalDateTime.now()); |
| | | xpOrder.setGetoffLat(xpOrder.getEndLat()); |
| | | xpOrder.setGetoffLon(xpOrder.getEndLon()); |
| | | xpOrder.setGetoffAddress(xpOrder.getEndAddress()); |
| | | xpOrder.setGetoffTime(LocalDateTime.now()); |
| | | xpOrder.setOrderMoney(new BigDecimal(50)); |
| | | xpOrder.setStartMileage(5D); |
| | | xpOrder.setStartMoney(new BigDecimal(10)); |
| | | xpOrder.setMileageKilometers(10D); |
| | | xpOrder.setMileageMoney(new BigDecimal(25)); |
| | | xpOrder.setDuration(20D); |
| | | xpOrder.setDurationMoney(new BigDecimal(5)); |
| | | xpOrder.setWait(0D); |
| | | xpOrder.setWaitMoney(new BigDecimal(0)); |
| | | xpOrder.setLongDistance(10D); |
| | | xpOrder.setLongDistanceType(1); |
| | | xpOrder.setLongDistancemoney(new BigDecimal(10)); |
| | | xpOrderClient.updateOrder(xpOrder); |
| | | //推送车辆位置到起点 |
| | | SendMessageDTO dto = new SendMessageDTO(); |
| | | dto.setAppUserId(appUserId.toString()); |
| | | dto.setMessage("{\"type\":\"VEHICLE_LOCATION\",\"content\":\"{\\\"orderId\\\":\\\"" + orderId + "\\\",\\\"lon\\\":" + xpOrder.getEndLon() + ",\\\"lat\\\":" + xpOrder.getEndLat() + "}\",\"timestamp\":\"176569945845456\"}"); |
| | | xpPushMessageClient.sendVehicleLocation(dto); |
| | | dto.setAppUserId(appUserId.toString()); |
| | | dto.setMessage("{\"type\":\"ORDER_STATUS\",\"content\":\"{\\\"orderId\\\":\\\"" + orderId + "\\\",\\\"status\\\":7}\",\"timestamp\":\"176569945845456\"}"); |
| | | xpPushMessageClient.sendStatus(dto); |
| | | } |
| | | //添加费用明细 |
| | | // XpOrderDetail detail = new XpOrderDetail(); |
| | | // detail.setDetailType(1); |
| | | // detail.setOrderId(orderId); |
| | | // detail.setType(1); |
| | | // detail.setTime(""); |
| | | // detail.setDuration(20D); |
| | | // detail.setMileage(new BigDecimal(10)); |
| | | // detail.setMoney(); |
| | | // detail.setIsDeleted(false); |
| | | // detail.setCreateTime(LocalDateTime.now()); |
| | | // detail.setUpdateTime(LocalDateTime.now()); |
| | | // xpOrder |
| | | |
| | | |
| | | if (8 == status) { |
| | | //乘客待支付 |
| | | xpOrder.setAppUserId(null); |
| | | xpOrder.setStatus(8); |
| | | xpOrderClient.updateOrder(xpOrder); |
| | | SendMessageDTO dto = new SendMessageDTO(); |
| | | dto.setAppUserId(appUserId.toString()); |
| | | dto.setMessage("{\"type\":\"ORDER_STATUS\",\"content\":\"{\\\"orderId\\\":\\\"" + orderId + "\\\",\\\"status\\\":8}\",\"timestamp\":\"176569945845456\"}"); |
| | | xpPushMessageClient.sendStatus(dto); |
| | | } |
| | | |
| | | if (9 == status) { |
| | | //乘客支付成功 |
| | | xpOrder.setAppUserId(null); |
| | | xpOrder.setStatus(9); |
| | | xpOrderClient.updateOrder(xpOrder); |
| | | SendMessageDTO dto = new SendMessageDTO(); |
| | | dto.setAppUserId(appUserId.toString()); |
| | | dto.setMessage("{\"type\":\"ORDER_STATUS\",\"content\":\"{\\\"orderId\\\":\\\"" + orderId + "\\\",\\\"status\\\":9}\",\"timestamp\":\"176569945845456\"}"); |
| | | xpPushMessageClient.sendStatus(dto); |
| | | } |
| | | } |
| | | } |