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