| | |
| | | @Value("${pushMinistryOfTransport}") |
| | | private boolean pushMinistryOfTransport; |
| | | |
| | | @Autowired |
| | | private IAppOperationLogService appOperationLogService; |
| | | |
| | | |
| | | |
| | | /** |
| | |
| | | * @throws Exception |
| | | */ |
| | | @Override |
| | | public synchronized ResultUtil<BaseWarpper> saveOrderPrivateCar(Integer serverCarModelId, Date travelTime, Integer reservation, Integer instead, String placementLon, String placementLat, String startLon, String startLat, |
| | | String startAddress, String endLon, String endLat, String endAddress, String name, String phone, Integer orderSource, Integer driverId, Integer type, Integer uid, |
| | | BigDecimal estimatedPrice,String cityCode,Integer carIndex) throws Exception { |
| | | public ResultUtil<BaseWarpper> saveOrderPrivateCar(Integer serverCarModelId, Date travelTime, Integer reservation, Integer instead, String placementLon, String placementLat, String startLon, String startLat, |
| | | String startAddress, String endLon, String endLat, String endAddress, String name, String phone, Integer orderSource, Integer driverId, Integer type, Integer uid, |
| | | BigDecimal estimatedPrice, String cityCode, Integer carIndex) throws Exception { |
| | | long timeMillis = System.currentTimeMillis(); |
| | | //如果出行时间大于当前10分钟则默认为预约单 |
| | | if(travelTime.getTime() > (System.currentTimeMillis() + 600000)){ |
| | |
| | | orderPrivateCar.setEstimatedPrice(data.getAmount()); |
| | | orderPrivateCar.setPayMethod(0); |
| | | this.insert(orderPrivateCar); |
| | | |
| | | appOperationLogService.addAppOperationLog(uid, "{\"type\":\"用户下单\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderPrivateCar\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}"); |
| | | |
| | | BaseWarpper baseWarpper = new BaseWarpper(); |
| | | baseWarpper.setId(orderPrivateCar.getId()); |
| | | baseWarpper.setState(orderPrivateCar.getState()); |
| | |
| | | orderPrivateCar.setIsDelete(1); |
| | | orderPrivateCar.setPayMethod(1); |
| | | this.insert(orderPrivateCar); |
| | | |
| | | appOperationLogService.addAppOperationLog(uid, "{\"type\":\"用户下单\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderPrivateCar\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}"); |
| | | if(orderSource == 2){//扫码下单 |
| | | new Thread(new Runnable() { |
| | | @Override |
| | |
| | | if(drivers.size() > 0) {//有司机,直接指派给司机 |
| | | Driver dr = null; |
| | | if (drivers.size() > 1) { |
| | | List<Driver> ds = new ArrayList<>();//存储直线距离最近的几个司机 |
| | | for (int i = 0; i < assignOrder.getPeople(); i++) { |
| | | Driver driver = null; |
| | | int m = 0; |
| | | int index = 0; |
| | | // 查询预约单 |
| | | List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11); |
| | | List<Integer> orderPrivateCarDriverIds = orderPrivateCars.stream().map(OrderPrivateCar::getDriverId).collect(Collectors.toList()); |
| | | for (int j = 0; j < drivers.size(); j++) { |
| | | Driver driver1 = drivers.get(j); |
| | | if (orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver.getId())) { |
| | | continue; |
| | | } |
| | | // 判断该司机是否有30分钟内预约单 |
| | | long count = orderPrivateCarss.stream().filter(s -> s.getDriverId().equals(driver1.getId()) && |
| | | DateUtil.dateToLocalDateTime(s.getTravelTime()).minusMinutes(query.getLimitationTime()).isBefore(LocalDateTime.now())).count(); |
| | | if (count > 0) { |
| | | continue; |
| | | } |
| | | String value = redisUtil.getValue("DRIVER" + drivers.get(j).getId()); |
| | | if (null != value) { |
| | | Map<String, Double> distance1 = geodesyUtil.getDistance(orderPrivateCar.getStartLat() + "," + orderPrivateCar.getStartLon(), value); |
| | | int d = distance1.get("WGS84").intValue(); |
| | | if ((0 == m && null == driver) || (d < m)) { |
| | | driver = drivers.get(j); |
| | | m = d; |
| | | index = j; |
| | | } |
| | | List<Driver> ds = new ArrayList<>(); |
| | | double dis = assignOrder.getDistance() * 1000; |
| | | // 查询预约单 |
| | | List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11); |
| | | List<Integer> orderPrivateCarDriverIds = orderPrivateCars.stream().map(OrderPrivateCar::getDriverId).collect(Collectors.toList()); |
| | | for (int j = 0; j < drivers.size(); j++) { |
| | | Driver driver1 = drivers.get(j); |
| | | driver1.setDistance(0D); |
| | | if (orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver1.getId())) { |
| | | continue; |
| | | } |
| | | // 判断该司机是否有30分钟内预约单 |
| | | long count = orderPrivateCarss.stream().filter(s -> s.getDriverId().equals(driver1.getId()) && |
| | | DateUtil.dateToLocalDateTime(s.getTravelTime()).minusMinutes(query.getLimitationTime()).isBefore(LocalDateTime.now())).count(); |
| | | if (count > 0) { |
| | | continue; |
| | | } |
| | | String value = redisUtil.getValue("DRIVER" + drivers.get(j).getId()); |
| | | if (null != value) { |
| | | Map<String, String> distance = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1); |
| | | double d = Double.parseDouble(distance.get("distance")); |
| | | if(dis >= d){ |
| | | driver1.setDistance(d); |
| | | ds.add(driver1); |
| | | } |
| | | } |
| | | ds.add(driver); |
| | | drivers.remove(index); |
| | | } |
| | | |
| | | //再根据直线距离最短的司机中找出行驶距离最短的司机 |
| | | Integer m = 0; |
| | | for (Driver driver : ds) { |
| | | String value = redisUtil.getValue("DRIVER" + driver.getId()); |
| | | if (null != value) { |
| | | Map<String, String> distance = gdMapElectricFenceUtil.getDistance(startLon + "," + startLat, value, 1); |
| | | int distance1 = Integer.parseInt(distance.get("distance")); |
| | | if ((0 == m && null == dr) || (distance1 < m.intValue())) { |
| | | dr = driver; |
| | | m = distance1; |
| | | if(!ds.isEmpty()){ |
| | | ds.sort(new Comparator<Driver>() { |
| | | @Override |
| | | public int compare(Driver o1, Driver o2) { |
| | | return o1.getDistance().compareTo(o2.getDistance()); |
| | | } |
| | | } |
| | | }); |
| | | appOperationLogService.addAppOperationLog(uid, "{\"type\":\"指派推单,符合条件的司机\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"driver\":\"" + JSON.toJSONString(ds) + "\"}"); |
| | | dr = ds.get(0); |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | // for (int i = 0; i < assignOrder.getPeople(); i++) { |
| | | // Driver driver = null; |
| | | // int m = 0; |
| | | // int index = 0; |
| | | // // 查询预约单 |
| | | // List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11); |
| | | // List<Integer> orderPrivateCarDriverIds = orderPrivateCars.stream().map(OrderPrivateCar::getDriverId).collect(Collectors.toList()); |
| | | // for (int j = 0; j < drivers.size(); j++) { |
| | | // Driver driver1 = drivers.get(j); |
| | | // if (orderPrivateCar.getOrderType() == 2 && orderPrivateCarDriverIds.contains(driver.getId())) { |
| | | // continue; |
| | | // } |
| | | // // 判断该司机是否有30分钟内预约单 |
| | | // long count = orderPrivateCarss.stream().filter(s -> s.getDriverId().equals(driver1.getId()) && |
| | | // DateUtil.dateToLocalDateTime(s.getTravelTime()).minusMinutes(query.getLimitationTime()).isBefore(LocalDateTime.now())).count(); |
| | | // if (count > 0) { |
| | | // continue; |
| | | // } |
| | | // String value = redisUtil.getValue("DRIVER" + drivers.get(j).getId()); |
| | | // if (null != value) { |
| | | // Map<String, String> distance = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1); |
| | | // int d = Integer.parseInt(distance.get("distance")); |
| | | // if ((0 == m && null == driver) || (d < m)) { |
| | | // driver = drivers.get(j); |
| | | // m = d; |
| | | // index = j; |
| | | // } |
| | | // } |
| | | // } |
| | | // ds.add(driver); |
| | | // drivers.remove(index); |
| | | // } |
| | | // |
| | | // //再根据直线距离最短的司机中找出行驶距离最短的司机 |
| | | // Integer m = 0; |
| | | // for (Driver driver : ds) { |
| | | // String value = redisUtil.getValue("DRIVER" + driver.getId()); |
| | | // if (null != value) { |
| | | // Map<String, String> distance = gdMapElectricFenceUtil.getDistance(startLon + "," + startLat, value, 1); |
| | | // int distance1 = Integer.parseInt(distance.get("distance")); |
| | | // if ((0 == m && null == dr) || (distance1 < m.intValue())) { |
| | | // dr = driver; |
| | | // m = distance1; |
| | | // } |
| | | // } |
| | | // } |
| | | } else { |
| | | List<OrderPrivateCar> orderPrivateCarss = orderPrivateCarMapper.queryOrderByState(driverIds, 2, 1, 2, 3, 4, 5, 6, 11); |
| | | if (orderPrivateCarss.size() == 0) { |
| | | dr = drivers.get(0); |
| | | } |
| | | appOperationLogService.addAppOperationLog(uid, "{\"type\":\"指派推单,符合条件的司机\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"driver\":\"" + JSON.toJSONString(dr) + "\"}"); |
| | | } |
| | | |
| | | if (Objects.nonNull(dr)) { |
| | |
| | | } |
| | | } |
| | | } |
| | | appOperationLogService.addAppOperationLog(uid, "{\"type\":\"用户取消订单\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderPrivateCar\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}"); |
| | | this.deleteTask(id);//删除定时任务 |
| | | |
| | | new Thread(new Runnable() { |
| | |
| | | double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数 |
| | | int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取) |
| | | list = list.subList(0, lastIndex);//获取空闲司机中占比数据 |
| | | |
| | | appOperationLogService.addAppOperationLog(orderPrivateCar.getUserId(), "{\"type\":\"范围推单,第" + i +"轮,符合条件的司机\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"driver\":\"" + JSON.toJSONString(list) + "\"}"); |
| | | for(Driver driver : list){//开始进行推送 |
| | | // 判断该司机是否有30分钟内预约单 |
| | | long count = orderPrivateCars.stream().filter(orderPrivateCar1 -> driver.getId().equals(orderPrivateCar1.getDriverId()) |
| | |
| | | pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1); |
| | | orderIds.remove(orderPrivateCar.getId()); |
| | | |
| | | |
| | | // 第三轮取消订单 |
| | | orderPrivateCar.setState(10); |
| | | orderPrivateCarMapper.updateById(orderPrivateCar); |
| | | |
| | | appOperationLogService.addAppOperationLog(orderPrivateCar.getUserId(), "{\"type\":\"范围推单结束,无司机接单,自动取消订单\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderInfo\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}"); |
| | | pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); |
| | | // 添加站内信 |
| | | systemNoticeService.addSystemNotice(1, "当前区域未能及时为您匹配到合适车辆。为避免耽误您的行程,系统已自动取消订单,建议您稍后重新尝试。", orderPrivateCar.getUserId(), 1); |
| | |
| | | |
| | | Integer uid = orderPrivateCar.getUserId(); |
| | | Double orderMoney = orderPrivateCar.getOrderMoney(); |
| | | System.out.println("=========================订单金额====================="+orderMoney); |
| | | if(Objects.nonNull(orderPrivateCar.getPaymentAdvanceMoney()) && orderPrivateCar.getPaymentAdvanceMoney() > 0){ |
| | | double couponMoney1 = Objects.nonNull(orderPrivateCar.getCouponMoney()) ? orderPrivateCar.getCouponMoney() : 0.00; |
| | | orderMoney = orderMoney - orderPrivateCar.getPaymentAdvanceMoney() - couponMoney1; |
| | | System.out.println("=========================减去先付后金额====================="+orderMoney); |
| | | } |
| | | UserInfo userInfo = userInfoService.selectById(uid); |
| | | ResultUtil resultUtil = ResultUtil.success(new HashMap<>()); |
| | |
| | | resultUtil = payMoneyUtil.weixinpay("完成订单",orderId +"", code,orderMoney+"","/base/wxPayOrderTaxi","JSAPI",userInfo.getAppletsOpenId()); |
| | | if(resultUtil.getCode()==200){ |
| | | paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, null, 1, code);//添加预支付数据 |
| | | appOperationLogService.addAppOperationLog(orderPrivateCar.getUserId(), "{\"type\":\"用户支付订单\",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderInfo\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}"); |
| | | new Thread(()->{ |
| | | int num = 1; |
| | | int wait = 0; |
| | |
| | | } |
| | | |
| | | this.updateAllColumnById(orderPrivateCar); |
| | | |
| | | appOperationLogService.addAppOperationLog(orderPrivateCar.getUserId(), "{\"type\":\"用户" + (payType == 1 ? "微信" : payType == 2 ? "支付宝" : "余额") + "支付订单," + (orderPrivateCar.getPayMethod() == 0 ? "先付" : "后付") + "\"" + |
| | | ",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderInfo\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}"); |
| | | new Thread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | |
| | | |
| | | // 判断先付还是后付 |
| | | if(orderPrivateCar.getPayMethod() == 0){ |
| | | |
| | | if (Objects.nonNull(orderPrivateCar.getPaymentAdvanceMoney()) && orderPrivateCar.getPaymentAdvanceMoney() > 0 ) { |
| | | orderPrivateCar.setState(8); |
| | | orderPrivateCar.setOrderMoney(orderPrivateCar.getOrderMoney()+query.getAmount()); |
| | |
| | | incomeService.saveDriverData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue(), driver.getLaveBusinessMoney()); |
| | | } |
| | | } |
| | | |
| | | appOperationLogService.addAppOperationLog(orderPrivateCar.getUserId(), "{\"type\":\"用户" + (type == 1 ? "微信" : "支付宝") + "支付订单," + (orderPrivateCar.getPayMethod() == 0 ? "先付" : "后付") + "\"" + |
| | | ",\"orderId\":\"" + orderPrivateCar.getId() + "\",\"orderInfo\":\"" + JSON.toJSONString(orderPrivateCar) + "\"}"); |
| | | |
| | | // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 |
| | | new Thread(new Runnable() { |
| | | @Override |