| | |
| | | public OrderServerWarpper queryOrderServer(Integer orderId, Integer uid) throws Exception { |
| | | OrderCrossCity orderCrossCity = this.selectById(orderId); |
| | | //计算预计距离和剩余时间 |
| | | String value = redisUtil.getValue("DRIVER" + String.valueOf(orderCrossCity.getDriverId())); |
| | | String value = redisUtil.getValue("DRIVER" + orderCrossCity.getDriverId()); |
| | | if(null == value || "".equals(value)){ |
| | | System.err.println("司机没有上传位置信息"); |
| | | |
| | |
| | | } |
| | | try { |
| | | if(orderType == 1){//专车 |
| | | Thread.sleep(1000); |
| | | System.err.println("====="+orderId); |
| | | OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(orderId); |
| | | System.err.println("====="+orderPrivateCar); |
| | | OrderPrivateCarServiceImpl.orderIds.add(orderPrivateCar.getId());//添加记录,防止调用接口重复提醒无人接单 |
| | | Company query = companyCityService.query(String.valueOf(orderPrivateCar.getStartLon()), String.valueOf(orderPrivateCar.getStartLat()));//获取起点所属分公司 |
| | | List<PushOrder> querys = pushOrderService.querys(null, 1, query.getId());//获取需要推送的次数 |
| | | for(int i = 1; i <= querys.size(); i++){ |
| | | //订单被抢后的处理 |
| | | Integer state = orderPrivateCarMapper.selectById(orderId).getState(); |
| | | if(state != 1){ |
| | | //关闭其他推送线程 |
| | | Set<String> keySet = threadMap.keySet(); |
| | | for(String key : keySet){ |
| | | if(!key.equals(orderId + "_1")){ |
| | | Thread thread1 = threadMap.get(key);//中断线程 |
| | | if(null != thread1){ |
| | | thread1.interrupt(); |
| | | } |
| | | threadMap.remove(key); |
| | | } |
| | | } |
| | | //删除其他无效数据 |
| | | for(Map<String, Integer> map : datas){ |
| | | Integer orderType = map.get("orderType"); |
| | | Integer orderId1 = map.get("orderId"); |
| | | if(orderType == 1 && orderId != orderPrivateCar.getId()){ |
| | | orderPrivateCarMapper.deleteById(orderId1); |
| | | } |
| | | if(orderType == 2){ |
| | | orderTaxiMapper.deleteById(orderId1); |
| | | } |
| | | } |
| | | break; |
| | | } |
| | | |
| | | //开始进行推送的处理 |
| | | PushOrder pushOrder = pushOrderService.querys(i, 1, query.getId()).get(0); |
| | | //获取空闲司机 |
| | | List<Driver> list = driverService.queryIdleDriver(1, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机 |
| | | if(list.size() > 0){ |
| | | double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数 |
| | | int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取) |
| | | list = list.subList(0, lastIndex);//获取空闲司机中占比数据 |
| | | for(Driver driver : list){//开始进行推送 |
| | | boolean bo = false; |
| | | for(Integer integer : integers){ |
| | | if(integer.compareTo(driver.getId()) == 0){ |
| | | bo = true; |
| | | break; |
| | | } |
| | | } |
| | | if(bo){ |
| | | continue; |
| | | } |
| | | pushUtil.pushOrderState(2, driver.getId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), pushOrder.getPushTime()); |
| | | } |
| | | } |
| | | |
| | | //所有推送完后的处理 |
| | | Boolean b = pushEndMap.get(orderPrivateCar.getCrossCityOrderId()); |
| | | if(i == querys.size() && state == 1 && (null != b && !b.booleanValue())){ |
| | | pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1); |
| | | OrderPrivateCarServiceImpl.orderIds.remove(orderPrivateCar.getId()); |
| | | pushEndMap.put(orderPrivateCar.getCrossCityOrderId(), Boolean.TRUE);//推送后添加标识 |
| | | break; |
| | | } |
| | | Thread.sleep(pushOrder.getPushTime() * 1000);//设置等待时间 |
| | | //推单操作 |
| | | if(orderPrivateCar.getState() == 1){ |
| | | Integer id = orderPrivateCar.getId(); |
| | | redisUtil.addListRight("push_order_ids", id.toString()); |
| | | } |
| | | } |
| | | |