From ed02b20b31e013159c55ab14b81772e41b36649c Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期六, 26 七月 2025 17:37:59 +0800 Subject: [PATCH] 修改下单逻辑和抢单等相关逻辑 --- DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java | 118 ++++++++++++++++++++++++++++++++++++---------------------- 1 files changed, 73 insertions(+), 45 deletions(-) diff --git a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java index 4bd3c54..49c8fb3 100644 --- a/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java +++ b/DriverQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/OrderServiceImpl.java @@ -13,23 +13,25 @@ import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService; import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar; import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService; -import com.stylefeng.guns.modular.system.dao.PhoneMapper; import com.stylefeng.guns.modular.system.dao.RegionMapper; import com.stylefeng.guns.modular.system.dao.SysReformistMapper; import com.stylefeng.guns.modular.system.model.AdditionalFee; import com.stylefeng.guns.modular.system.model.Driver; import com.stylefeng.guns.modular.system.model.OrderPosition; -import com.stylefeng.guns.modular.system.model.Region; import com.stylefeng.guns.modular.system.service.IAdditionalFeeService; import com.stylefeng.guns.modular.system.service.IDriverService; +import com.stylefeng.guns.modular.system.service.IOpenCityService; import com.stylefeng.guns.modular.system.service.IOrderService; import com.stylefeng.guns.modular.system.util.*; import com.stylefeng.guns.modular.system.warpper.BaseWarpper; import com.stylefeng.guns.modular.system.warpper.OrderListWarpper; import com.stylefeng.guns.modular.taxi.model.OrderTaxi; import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService; +import org.redisson.api.RLock; +import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -55,28 +57,28 @@ @Autowired private GDMapGeocodingUtil gdMapGeocodingUtil; - + @Autowired private IDriverService driverService; - + @Autowired private TaskUtil taskUtil; - + @Autowired private ChinaMobileUtil chinaMobileUtil; - - @Autowired - private RedisUtil redisUtil; - + + @Resource + private RedisTemplate<String, Object> redisTemplate; + @Autowired private PushUtil pushUtil; - + @Autowired private IOrderPrivateCarService orderPrivateCarService; - + @Autowired private IOrderCrossCityService orderCrossCityService; - + @Autowired private IOrderLogisticsService orderLogisticsService; @@ -94,6 +96,11 @@ @Autowired private IAdditionalFeeService additionalFeeService; + + @Autowired + private RedissonClient redissonClient; + @Autowired + private IOpenCityService openCityService; @@ -501,12 +508,27 @@ * @throws Exception */ @Override - public synchronized ResultUtil grabOrder(Integer orderId, Integer orderType, Integer uid) throws Exception { + public ResultUtil grabOrder(Integer orderId, Integer orderType, Integer uid) throws Exception { + //专车和出租是批量下单,所以这里需要将两种类型的抢单操作通过一个锁来一起控制 + if(1 == orderType || 2 == orderType){ + RLock lock = redissonClient.getLock("grabOrder:" + orderId); + if(!lock.tryLock()){ + return ResultUtil.error("抢单失败,请稍后重试"); + } + try { + if(1 == orderType){ + return orderPrivateCarService.grabOrder(orderId, uid); + } + if(2 == orderType){ + return orderTaxiService.grabOrder(orderId, uid); + } + }catch (Exception e){ + e.printStackTrace(); + }finally { + lock.unlock(); + } + } switch (orderType){ - case 1://专车 - return orderPrivateCarService.grabOrder(orderId, uid); - case 2://出租 - return orderTaxiService.grabOrder(orderId, uid); case 3://城际 return ResultUtil.success();//不作任何操作,跨城默认选择的司机 case 4://同城小件 @@ -612,27 +634,33 @@ */ @Override public Double queryReassignMoney(Integer orderId, Integer orderType) throws Exception { - Integer companyId = null; + Integer openCityId = null; switch (orderType){ case 1://专车 - companyId = orderPrivateCarService.selectById(orderId).getCompanyId(); + OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId); + openCityId = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()).getId(); break; case 2://出租 - companyId = orderTaxiService.selectById(orderId).getCompanyId(); + OrderTaxi orderTaxi = orderTaxiService.selectById(orderId); + openCityId = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()).getId(); break; case 3://城际 - companyId = orderCrossCityService.selectById(orderId).getCompanyId(); + OrderCrossCity orderCrossCity = orderCrossCityService.selectById(orderId); + openCityId = openCityService.openCity1(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString()).getId(); break; case 4://同城小件 - companyId = orderLogisticsService.selectById(orderId).getCompanyId(); + OrderLogistics orderLogistics = orderLogisticsService.selectById(orderId); + openCityId = openCityService.openCity1(orderLogistics.getStartLon().toString(), orderLogistics.getStartLat().toString()).getId(); break; case 5://跨城小件 - companyId = orderLogisticsService.selectById(orderId).getCompanyId(); + OrderLogistics orderLogistics1 = orderLogisticsService.selectById(orderId); + openCityId = openCityService.openCity1(orderLogistics1.getStartLon().toString(), orderLogistics1.getStartLat().toString()).getId(); + break; case 6: break; } - return sysReformistMapper.queryMoney(companyId); + return sysReformistMapper.queryMoney(openCityId); } @@ -889,7 +917,7 @@ Integer muoth = Long.valueOf((orderTaxi.getTravelTime().getTime() - System.currentTimeMillis()) / (1000 * 60)).intValue(); //发送短信提醒 - aLiSendSms.sendSms(driver.getPhone(), "SMS_229613325", "{\"data\":\"" + orderTaxi.getStartAddress() + "\",\"data1\":\"" + orderTaxi.getEndAddress() + "\",\"data2\":\"" + muoth + "\"}"); +// aLiSendSms.sendSms(driver.getPhone(), "SMS_229613325", "{\"data\":\"" + orderTaxi.getStartAddress() + "\",\"data1\":\"" + orderTaxi.getEndAddress() + "\",\"data2\":\"" + muoth + "\"}"); } //专车 List<OrderPrivateCar> list1 = orderPrivateCarService.queryMaturity(); @@ -901,7 +929,7 @@ Integer muoth = Long.valueOf((orderPrivateCar.getTravelTime().getTime() - System.currentTimeMillis()) / (1000 * 60)).intValue(); //发送短信提醒 - aLiSendSms.sendSms(driver.getPhone(), "SMS_229613325", "{\"data\":\"" + orderPrivateCar.getStartAddress() + "\",\"data1\":\"" + orderPrivateCar.getEndAddress() + "\",\"data2\":\"" + muoth + "\"}"); +// aLiSendSms.sendSms(driver.getPhone(), "SMS_229613325", "{\"data\":\"" + orderPrivateCar.getStartAddress() + "\",\"data1\":\"" + orderPrivateCar.getEndAddress() + "\",\"data2\":\"" + muoth + "\"}"); } //跨城 List<OrderCrossCity> orderCrossCities = orderCrossCityService.queryMaturity(); @@ -913,7 +941,7 @@ Integer muoth = Long.valueOf((orderCrossCity.getTravelTime().getTime() - System.currentTimeMillis()) / (1000 * 60)).intValue(); //发送短信提醒 - aLiSendSms.sendSms(driver.getPhone(), "SMS_229613325", "{\"data\":\"" + orderCrossCity.getStartAddress() + "\",\"data1\":\"" + orderCrossCity.getEndAddress() + "\",\"data2\":\"" + muoth + "\"}"); +// aLiSendSms.sendSms(driver.getPhone(), "SMS_229613325", "{\"data\":\"" + orderCrossCity.getStartAddress() + "\",\"data1\":\"" + orderCrossCity.getEndAddress() + "\",\"data2\":\"" + muoth + "\"}"); } //小件物流 List<OrderLogistics> orderLogistics = orderLogisticsService.queryMaturity(); @@ -923,7 +951,7 @@ Integer muoth = Long.valueOf((orderLogistics1.getTravelTime().getTime() - System.currentTimeMillis()) / (1000 * 60)).intValue(); //发送短信提醒 - aLiSendSms.sendSms(driver.getPhone(), "SMS_229613325", "{\"data\":\"" + orderLogistics1.getStartAddress() + "\",\"data1\":\"" + orderLogistics1.getEndAddress() + "\",\"data2\":\"" + muoth + "\"}"); +// aLiSendSms.sendSms(driver.getPhone(), "SMS_229613325", "{\"data\":\"" + orderLogistics1.getStartAddress() + "\",\"data1\":\"" + orderLogistics1.getEndAddress() + "\",\"data2\":\"" + muoth + "\"}"); } if(drivers.size() > 0){ driverService.updateBatchById(drivers);//批量修改状态为服务中 @@ -1009,11 +1037,11 @@ } //调用移动的小号接口 Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); - Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000)); - if(String.valueOf(map.get("code")).equals("200")){ - orderPrivateCar.setTelX(map.get("telX")); - orderPrivateCar.setBindId(map.get("bindId")); - } +// Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000)); +// if(String.valueOf(map.get("code")).equals("200")){ +// orderPrivateCar.setTelX(map.get("telX")); +// orderPrivateCar.setBindId(map.get("bindId")); +// } orderPrivateCarService.updateById(orderPrivateCar); } break; @@ -1026,11 +1054,11 @@ } //调用移动的小号接口 Driver driver = driverService.selectById(orderTaxi.getDriverId()); - Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderTaxi.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000)); - if(String.valueOf(map.get("code")).equals("200")){ - orderTaxi.setTelX(map.get("telX")); - orderTaxi.setBindId(map.get("bindId")); - } +// Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderTaxi.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000)); +// if(String.valueOf(map.get("code")).equals("200")){ +// orderTaxi.setTelX(map.get("telX")); +// orderTaxi.setBindId(map.get("bindId")); +// } orderTaxiService.updateById(orderTaxi); } break; @@ -1043,11 +1071,11 @@ } //调用移动的小号接口 Driver driver = driverService.selectById(orderCrossCity.getDriverId()); - Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderCrossCity.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000)); - if(String.valueOf(map.get("code")).equals("200")){ - orderCrossCity.setTelX(map.get("telX")); - orderCrossCity.setBindId(map.get("bindId")); - } +// Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderCrossCity.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000)); +// if(String.valueOf(map.get("code")).equals("200")){ +// orderCrossCity.setTelX(map.get("telX")); +// orderCrossCity.setBindId(map.get("bindId")); +// } orderCrossCityService.updateById(orderCrossCity); } break; @@ -1189,7 +1217,7 @@ state = orderTaxi.getState(); //司机手动确认收款,删除限制司机6分钟不能接单的标识 - String vehicle = redisUtil.getValue("VEHICLE"); + String vehicle = (String) redisTemplate.opsForValue().get("VEHICLE"); if(ToolUtil.isNotEmpty(vehicle)){ JSONArray jsonArray = JSON.parseArray(vehicle); for(int i = 0; i < jsonArray.size(); i++){ @@ -1198,7 +1226,7 @@ break; } } - redisUtil.setStrValue("VEHICLE", jsonArray.toJSONString()); + redisTemplate.opsForValue().set("VEHICLE", jsonArray.toJSONString()); } break; } -- Gitblit v1.7.1