From 62a2a8e5fafec9cde437c00a5721253501451c33 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期三, 18 三月 2026 17:46:45 +0800
Subject: [PATCH] 派单模式 新增

---
 UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java |  209 ++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 168 insertions(+), 41 deletions(-)

diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index b5634e1..b344ddf 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -144,6 +144,9 @@
 	private IUserTaxiCardService userTaxiCardService;
 	@Autowired
 	private IRegionService regionService;
+	@Autowired
+	private ITSysPushTypeService tSysPushTypeService;
+
 	@Value("${callbackPath}")
 	private String callbackPath;
 	
@@ -349,6 +352,13 @@
 					driver.setState(3);
 					driverService.updateById(driver);
 				}
+
+
+
+
+
+
+
 				//判断独享,一口价,拼车
 				if (orderPrivateCar.getRideType() != 3) {
 					orderPrivateCar.setTotalPeopleNum(peopleNum);
@@ -371,6 +381,7 @@
 					if (orderPrivateCar.getState() == 1) {
 						this.pushOrder(orderPrivateCar);
 					}
+
 				} else {
 
 
@@ -2756,6 +2767,8 @@
 	 * @throws Exception
 	 */
 	public void pushOrder(OrderPrivateCar orderPrivateCar) throws Exception {
+
+
 		new Thread(new Runnable() {
 			@Override
 			public void run() {
@@ -2769,56 +2782,168 @@
 						integers = JSON.parseArray(vehicle).toJavaList(Integer.class);
 					}
 					OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
-					List<PushOrder> querys = pushOrderService.querys(null, 1, openCity.getId());//获取需要推送的次数
-					for (int i = 1; i <= querys.size() + 15; i++) {
+
+					// 判断是否为派单模式
+					TSysPushType sysPushType = tSysPushTypeService.selectOne(new EntityWrapper<TSysPushType>().eq("openCityId", openCity.getId()));
+					if(sysPushType!=null && sysPushType.getPushType()==2){
 						OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(id);
-						if (null == orderPrivateCar || orderPrivateCar.getState() > 1) {
-							break;
-						}
-						int finalI = i;
-						PushOrder pushOrder = querys.stream().filter(s -> s.getType() == (finalI <= 3 ? finalI : 3)).findFirst().orElse(null);
-						System.out.println("pushOrder:" + pushOrder);
-						int i2 = pushOrder.getPushTime() / 10;
-						if (i2 == 0) {
-							i2 = 1;
-						}
-						for (int i1 = 0; i1 < i2; i1++) {
-							if (orderPrivateCar.getState() > 1) {
-								break;
-							}
-							//获取空闲司机
-							List<Driver> list = driverService.queryIdleDriver(orderType, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机
+						if (null == orderPrivateCar && orderPrivateCar.getState() == 1) {
+							// 固定5公里进行派单
+							List<Driver> list = driverService.queryIdleDriver(orderType, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), 5.0, null);//所有附近空闲司机
 							if (list.size() > 0) {
-								double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数
-								int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取)
-								lastIndex = lastIndex == 0 ? list.size() : lastIndex;
-								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;
+								Driver driver1 = list.stream().sorted(Comparator.comparingDouble(Driver::getDistance).reversed()).findFirst().get();
+								if(orderPrivateCar.getType() == 3){
+									//批量订单
+									CarService carService = new CarService();
+									carService.setCarId(driver1.getCarId());
+									carService.setType(1);
+									CarService carService1 = carServiceMapper.selectOne(carService);
+									orderPrivateCar.setServerCarModelId(carService1.getServerCarModelId());
+									//1=独享,2=一口价
+									String serverCarModel = orderPrivateCar.getServerCarModel();
+									JSONArray jsonArray = JSON.parseArray(serverCarModel);
+									Integer rideType1 = null;
+									for (int i = 0; i < jsonArray.size(); i++) {
+										JSONObject jsonObject = jsonArray.getJSONObject(i);
+										Integer serverCarModelId = jsonObject.getInteger("serverCarModelId");
+										Integer rideType = jsonObject.getInteger("rideType");
+										if(serverCarModelId.equals(carService1.getServerCarModelId())){
+											rideType1 = rideType;
+											if(rideType == 1){
+												break;
+											}
 										}
 									}
-									if (bo) {
-										continue;
-									}
-									pushUtil.pushOrderState(2, driver.getId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), pushOrder.getPushTime());
+									orderPrivateCar.setRideType(rideType1);
 								}
-							}
-							Thread.sleep(10000);//设置等待时间
-							Integer state = orderPrivateCar.getState();
-							if (state > 1) {
-								orderIds.remove(orderPrivateCar.getId());
-								return;
-							}
-							if (i == querys.size() + 15 && state == 1) {
+								orderPrivateCar.setDriverId(driver1.getId());
+								orderPrivateCar.setCarId(driver1.getCarId());
+								orderPrivateCar.setCompanyId(driver1.getFranchiseeId() != null && driver1.getFranchiseeId() != 0 ? driver1.getFranchiseeId() : (
+										driver1.getCompanyId() != null && driver1.getCompanyId() != 0 ? driver1.getCompanyId() : 1));
+								orderPrivateCar.setState(2);
+								orderPrivateCar.setSnatchOrderTime(new Date());
+
+								// 是否推广订单
+								Integer promotion = isPromotion(orderPrivateCar.getUserId(), driver1.getPlaceOfEmployment());
+								if(null != promotion){
+									orderPrivateCar.setPromotion(2);
+									driver1 = driverService.selectById(promotion);
+									orderPrivateCar.setPromotionUser(driver1.getName());
+									orderPrivateCar.setPromotionPhone(driver1.getPhone());
+									orderPrivateCar.setPromotionDriverId(promotion);
+								}else{
+									orderPrivateCar.setPromotion(1);
+								}
+								orderPrivateCarMapper.updateById(orderPrivateCar);
+
+								//如果是预约单,则不修改司机为服务中
+								if(orderPrivateCar.getOrderType() != 2 || (orderPrivateCar.getOrderType() == 2 && orderPrivateCar.getTravelTime().getTime() < System.currentTimeMillis() + 600000)){
+									//修改司机为服务中
+									driver1.setState(3);
+									driverService.updateById(driver1);
+								}
+
+								//推送相关代码------------------start----------------
+								new Thread(new Runnable() {
+									@Override
+									public void run() {
+											pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(),0);
+											pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(),0);
+											if(orderPrivateCar.getType() == 2){
+												pushUtil.pushFerryOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 2);
+											}
+
+									}
+								}).start();
+
+								new Thread(new Runnable() {
+									@Override
+									public void run() {
+										pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1);
+									}
+								}).start();
+
+								systemNoticeService.addSystemNotice(2, "已为您派得快车订单,请及时联系客户!", orderPrivateCar.getDriverId(), 1);
+								systemNoticeService.addSystemNotice(1, "您的订单已指派给" + driver1.getName().substring(0, 1) + "师傅,请保持电话畅通!", orderPrivateCar.getUserId(), 1);
+
+								if(pushMinistryOfTransport){
+									new Thread(new Runnable() {
+										@Override
+										public void run() {
+											//上传数据
+											pushMinistryOfTransportUtil.orderCreate(orderPrivateCar.getId());
+											pushMinistryOfTransportUtil.orderMatch(orderPrivateCar.getId());
+										}
+									}).start();
+								}
+
+
+							}else {
+								// 没找到车辆
+								orderPrivateCar.setState(10);
+								orderPrivateCarMapper.updateById(orderPrivateCar);
 								pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 1);
-								orderIds.remove(orderPrivateCar.getId());
+
+								// TODO 退款
+							}
+
+
+						}
+
+					}else {
+
+						List<PushOrder> querys = pushOrderService.querys(null, 1, openCity.getId());//获取需要推送的次数
+						for (int i = 1; i <= querys.size() + 15; i++) {
+							OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(id);
+							if (null == orderPrivateCar || orderPrivateCar.getState() > 1) {
+								break;
+							}
+							int finalI = i;
+							PushOrder pushOrder = querys.stream().filter(s -> s.getType() == (finalI <= 3 ? finalI : 3)).findFirst().orElse(null);
+							System.out.println("pushOrder:" + pushOrder);
+							int i2 = pushOrder.getPushTime() / 10;
+							if (i2 == 0) {
+								i2 = 1;
+							}
+							for (int i1 = 0; i1 < i2; i1++) {
+								if (orderPrivateCar.getState() > 1) {
+									break;
+								}
+								//获取空闲司机
+								List<Driver> list = driverService.queryIdleDriver(orderType, 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();//计算占比转成整数(下标截取)
+									lastIndex = lastIndex == 0 ? list.size() : lastIndex;
+									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());
+									}
+								}
+								Thread.sleep(10000);//设置等待时间
+								Integer state = orderPrivateCar.getState();
+								if (state > 1) {
+									orderIds.remove(orderPrivateCar.getId());
+									return;
+								}
+								if (i == querys.size() + 15 && state == 1) {
+									pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 1);
+									orderIds.remove(orderPrivateCar.getId());
+								}
 							}
 						}
 					}
+
 				} catch (Exception e) {
 					e.printStackTrace();
 				}
@@ -2890,4 +3015,6 @@
 		}
 		return maps;
 	}
+
+
 }

--
Gitblit v1.7.1