From f5da7281ee8fed938198afcd33a2a619f08a37f0 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期二, 19 八月 2025 14:27:26 +0800
Subject: [PATCH] 合并代码
---
user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java | 219 ++++++++++++++++++++++++++++++------------------------
1 files changed, 120 insertions(+), 99 deletions(-)
diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java
index 010f109..b7090e1 100644
--- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java
+++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java
@@ -19,6 +19,8 @@
import com.supersavedriving.user.modular.system.util.mongodb.model.Location;
import com.supersavedriving.user.modular.system.warpper.*;
import io.swagger.models.auth.In;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
@@ -41,6 +43,7 @@
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;
+import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -77,6 +80,9 @@
@Autowired
private RedisUtil redisUtil;
+
+ @Autowired
+ private RedissonClient redissonClient;
@Autowired
private MongoTemplate mongoTemplate;
@@ -433,111 +439,126 @@
*/
@Override
public ResultUtil travelOrder(Integer uid, TravelOrder travelOrder) throws Exception {
- List<Integer> state = Arrays.asList(101, 102, 103, 104, 105, 106, 107, 201, 401);
- Order order = this.selectOne(new EntityWrapper<Order>().eq("userId", uid).eq("status", 1).in("state", state));
- if(null != order){
- return ResultUtil.error("您还有正在进行的订单");
+ RLock lock1 = redissonClient.getLock("travelOrder:" + uid);
+ boolean lock2 = lock1.tryLock(5, TimeUnit.SECONDS);
+ if(!lock2){
+ return ResultUtil.error("系统繁忙,请稍后重试");
}
- AppUser appUser = appUserService.selectById(uid);
- order = this.selectOne(new EntityWrapper<Order>().eq("userPhone", appUser.getPhone()).eq("status", 1).in("state", state));
- if(null != order){
- return ResultUtil.error("您还有正在进行的订单");
- }
-
- String startAddress = travelOrder.getStartAddress();
- startAddress = startAddress.replaceAll("& #40;", "(");
- startAddress = startAddress.replaceAll("& #41;", ")");
- travelOrder.setStartAddress(startAddress);
- if(ToolUtil.isNotEmpty(travelOrder.getEndAddress())){
- String endAddress = travelOrder.getEndAddress();
- endAddress = endAddress.replaceAll("& #40;", "(");
- endAddress = endAddress.replaceAll("& #41;", ")");
- travelOrder.setEndAddress(endAddress);
- }
-
- order = new Order();
- BeanUtils.copyProperties(travelOrder, order);
- if(ToolUtil.isEmpty(travelOrder.getUserPhone())){
- order.setUserPhone(appUser.getPhone());
- order.setUserName(appUser.getNickname());
- }
- order.setUserId(uid);
- order.setSource(1);
- order.setHallOrder(0);
- order.setStatus(1);
- order.setCreateTime(new Date());
- order.setState(null != travelOrder.getDriverId() ? 102 : 101);
- Double d = 0D;
- if(ToolUtil.isNotEmpty(travelOrder.getEndAddress())){
- Map<String, String> distance = MapUtil.getDistance(order.getStartLng() + "," + order.getStartLat(), order.getEndLng() + "," + order.getEndLat(), 1);
- if(null == distance){
- return ResultUtil.error("获取预估距离出错");
+ try {
+ List<Integer> state = Arrays.asList(101, 102, 103, 104, 105, 106, 107, 201, 401);
+ Order order = this.selectOne(new EntityWrapper<Order>().eq("userId", uid).eq("status", 1).in("state", state));
+ if(null != order){
+ return ResultUtil.error("您还有正在进行的订单");
}
- d = Double.valueOf(distance.get("distance")) / 1000;
- order.setEstimatedMileage(d);
- order.setEstimatedTime(Integer.valueOf(distance.get("duration")) / 60);
- }
- String city = "";
- Integer branchOfficeId = null;
- District geocode = MapUtil.geocode(order.getStartLng().toString(), order.getStartLat().toString());
- if(null != geocode){
- String districtCode = geocode.getDistrictCode();
- BranchOffice branchOffice = branchOfficeService.selectOne(new EntityWrapper<BranchOffice>().eq("status", 1).eq("districtCode", districtCode));
- if(null == branchOffice){
- String cityCode = geocode.getCityCode();
- branchOffice = branchOfficeService.selectOne(new EntityWrapper<BranchOffice>().eq("status", 1).eq("cityCode", cityCode));
+ AppUser appUser = appUserService.selectById(uid);
+ order = this.selectOne(new EntityWrapper<Order>().eq("userPhone", appUser.getPhone()).eq("status", 1).in("state", state));
+ if(null != order){
+ return ResultUtil.error("您还有正在进行的订单");
+ }
+
+ String startAddress = travelOrder.getStartAddress();
+ startAddress = startAddress.replaceAll("& #40;", "(");
+ startAddress = startAddress.replaceAll("& #41;", ")");
+ travelOrder.setStartAddress(startAddress);
+ if(ToolUtil.isNotEmpty(travelOrder.getEndAddress())){
+ String endAddress = travelOrder.getEndAddress();
+ endAddress = endAddress.replaceAll("& #40;", "(");
+ endAddress = endAddress.replaceAll("& #41;", ")");
+ travelOrder.setEndAddress(endAddress);
+ }
+
+ order = new Order();
+ BeanUtils.copyProperties(travelOrder, order);
+ if(ToolUtil.isEmpty(travelOrder.getUserPhone())){
+ order.setUserPhone(appUser.getPhone());
+ order.setUserName(appUser.getNickname());
+ }
+ order.setUserId(uid);
+ order.setSource(1);
+ order.setHallOrder(0);
+ order.setStatus(1);
+ order.setCreateTime(new Date());
+ order.setState(null != travelOrder.getDriverId() ? 102 : 101);
+ Double d = 0D;
+ if(ToolUtil.isNotEmpty(travelOrder.getEndAddress())){
+ Map<String, String> distance = MapUtil.getDistance(order.getStartLng() + "," + order.getStartLat(), order.getEndLng() + "," + order.getEndLat(), 1);
+ if(null == distance){
+ return ResultUtil.error("获取预估距离出错");
+ }
+ d = Double.valueOf(distance.get("distance")) / 1000;
+ order.setEstimatedMileage(d);
+ order.setEstimatedTime(Integer.valueOf(distance.get("duration")) / 60);
+ }
+ String city = "";
+ Integer branchOfficeId = null;
+ District geocode = MapUtil.geocode(order.getStartLng().toString(), order.getStartLat().toString());
+ if(null != geocode){
+ String districtCode = geocode.getDistrictCode();
+ BranchOffice branchOffice = branchOfficeService.selectOne(new EntityWrapper<BranchOffice>().eq("status", 1).eq("districtCode", districtCode));
if(null == branchOffice){
- String provinceCode = geocode.getProvinceCode();
- branchOffice = branchOfficeService.selectOne(new EntityWrapper<BranchOffice>().eq("status", 1).eq("provinceCode", provinceCode));
+ String cityCode = geocode.getCityCode();
+ branchOffice = branchOfficeService.selectOne(new EntityWrapper<BranchOffice>().eq("status", 1).eq("cityCode", cityCode));
+ if(null == branchOffice){
+ String provinceCode = geocode.getProvinceCode();
+ branchOffice = branchOfficeService.selectOne(new EntityWrapper<BranchOffice>().eq("status", 1).eq("provinceCode", provinceCode));
+ }
+ }
+ if(null == branchOffice){
+ return ResultUtil.error("起点暂无企业服务");
+ }
+ branchOfficeId = branchOffice.getId();
+ }
+
+ order.setCreateTime(new Date());
+ order = getOrderPrice(1, d, 0, order, city, branchOfficeId);
+ if(null != travelOrder.getDriverId()){
+ DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", travelOrder.getDriverId()).eq("status", 1));
+ if(null == driverWork){
+ return ResultUtil.error("司机还未上班");
+ }
+ Driver driver = driverService.selectById(travelOrder.getDriverId());
+ if(driver.getServerStatus() == 2){
+ return ResultUtil.error("司机正在服务中");
+ }
+ order.setAgentId(driver.getAgentId());
+ order.setBranchOfficeId(driver.getBranchOfficeId());
+ order.setOrderTakingTime(new Date());
+ driver.setServerStatus(2);
+ driverService.updateById(driver);
+ appUser.setCancelCount(0);
+ appUser.setIsException(1);
+ appUserService.updateById(appUser);
+ }
+
+ for (Integer i = 0; i < travelOrder.getDriverNum(); i++) {
+ order.setId(null);
+ order.setCode(UUIDUtil.getTimeStr() + UUIDUtil.getNumberRandom(5));
+ boolean insert = this.insert(order);
+ if(insert){
+ //推送状态
+ pushUtil.pushOrderStatus(uid, 1, order.getId(), order.getState());
+ if(null != order.getDriverId()){
+ PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
+ pushOrderInfoWarpper.setId(order.getId());
+ pushOrderInfoWarpper.setState(order.getState());
+ pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper);
+ }else{
+ //推单
+ Order finalOrder = order;
+ new Thread(()->{
+ pushOrder(finalOrder.getId());
+ }).start();
+ }
}
}
- if(null == branchOffice){
- return ResultUtil.error("起点暂无企业服务");
- }
- branchOfficeId = branchOffice.getId();
+ redisUtil.setStrValue("newOrder", "true");
+ return ResultUtil.success(order.getId());
+ }catch (Exception e){
+ e.printStackTrace();
+ }finally {
+ lock1.unlock();
}
-
- order.setCreateTime(new Date());
- order = getOrderPrice(1, d, 0, order, city, branchOfficeId);
- if(null != travelOrder.getDriverId()){
- DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", travelOrder.getDriverId()).eq("status", 1));
- if(null == driverWork){
- return ResultUtil.error("司机还未上班");
- }
- Driver driver = driverService.selectById(travelOrder.getDriverId());
- if(driver.getServerStatus() == 2){
- return ResultUtil.error("司机正在服务中");
- }
- order.setAgentId(driver.getAgentId());
- order.setBranchOfficeId(driver.getBranchOfficeId());
- order.setOrderTakingTime(new Date());
- driver.setServerStatus(2);
- driverService.updateById(driver);
- appUser.setCancelCount(0);
- appUser.setIsException(1);
- appUserService.updateById(appUser);
- }
-
- for (Integer i = 0; i < travelOrder.getDriverNum(); i++) {
- order.setId(null);
- order.setCode(UUIDUtil.getTimeStr() + UUIDUtil.getNumberRandom(5));
- boolean insert = this.insert(order);
- if(insert){
- //推送状态
- pushUtil.pushOrderStatus(uid, 1, order.getId(), order.getState());
- if(null != order.getDriverId()){
- PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper();
- pushOrderInfoWarpper.setId(order.getId());
- pushOrderInfoWarpper.setState(order.getState());
- pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper);
- }else{
- //推单
- pushOrder(order.getId());
- }
- }
- }
- redisUtil.setStrValue("newOrder", "true");
- return ResultUtil.success(order.getId());
+ return ResultUtil.error("系统异常");
}
--
Gitblit v1.7.1