Pu Zhibing
3 天以前 2792ef8f8472732999d4eafeab25d2eb6e2c5bad
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java
@@ -20,14 +20,13 @@
import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar;
import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService;
import com.stylefeng.guns.modular.specialTrain.server.impl.OrderPrivateCarServiceImpl;
import com.stylefeng.guns.modular.system.dao.RegionMapper;
import com.stylefeng.guns.modular.system.dao.SensitiveWordsMapper;
import com.stylefeng.guns.modular.system.dao.SysIntegralMapper;
import com.stylefeng.guns.modular.system.dao.UserActivityDiscount1Mapper;
import com.stylefeng.guns.modular.system.dao.*;
import com.stylefeng.guns.modular.system.model.*;
import com.stylefeng.guns.modular.system.model.vo.UnPayOrderVO;
import com.stylefeng.guns.modular.system.service.*;
import com.stylefeng.guns.modular.system.util.*;
import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil;
import com.stylefeng.guns.modular.system.util.qianyuntong.model.*;
import com.stylefeng.guns.modular.system.warpper.*;
import com.stylefeng.guns.modular.taxi.dao.OrderTaxiMapper;
import com.stylefeng.guns.modular.taxi.model.OrderTaxi;
@@ -57,6 +56,9 @@
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -85,9 +87,7 @@
   @Resource
   private OrderTaxiMapper orderTaxiMapper;
   
   @Resource
   private RegionMapper regionMapper;
   @Resource
   private SensitiveWordsMapper sensitiveWordsMapper;
   
@@ -111,10 +111,7 @@
   
   @Autowired
   private IOrderPrivateCarService orderPrivateCarService;
   @Autowired
   private ILineService lineService;
   @Autowired
   private IIncomeService incomeService;
   
@@ -136,9 +133,7 @@
   @Autowired
   private ChinaMobileUtil chinaMobileUtil;
   
   @Autowired
   private GDFalconUtil gdFalconUtil;
   @Resource
   private RedisTemplate<String, Object> redisTemplate;
   
@@ -171,13 +166,7 @@
   
   @Autowired
   private PayMoneyUtil payMoneyUtil;
   @Autowired
   private IOrderLogisticsService orderLogisticsService;
   @Autowired
   private ITaxiCardPaymentService taxiCardPaymentService;
   @Autowired
   private ICompanyService companyService;
   
@@ -193,7 +182,14 @@
   @Autowired
   private IRegionService regionService;
   @Autowired
   private TAbnormalPayOrderMapper abnormalPayOrderMapper;
   @Resource
   private CarMapper carMapper;
   @Resource
   private CarModelMapper carModelMapper;
   @Autowired
   private TDriverPromotionActivityService driverPromotionActivityService;
@@ -206,8 +202,10 @@
   
   //存储摆渡车无接单后推送标识,实现多个类型的摆渡车订单无人接单后只给前端推送一次
   public static Map<Integer, Boolean> pushEndMap = new HashMap<>();
    @Autowired
    private ICompanyService iCompanyService;
   /**
    * 计算支付金额
    *
@@ -807,7 +805,9 @@
         userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
         OpenCity openCity = openCityService.openCity1(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString());
         SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
         userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分
         if(null != query1){
            userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分
         }
         
         //添加交易明细
         transactionDetailsService.saveData(uid, "跨城出行订单", orderMoney, 2, 1, 1, 3, orderId);
@@ -849,7 +849,7 @@
   
   @Override
   @Transactional(propagation = Propagation.REQUIRES_NEW)
   public ResultUtil payCrossCityOrder1(Integer payType, Integer orderId, Integer objectId, Integer objectType, Integer type) throws Exception {
   public ResultUtil payCrossCityOrder1(Integer payType, Integer orderId, Integer objectId, Integer objectType, Integer type, String path, String ip) throws Exception {
      OrderCrossCity orderCrossCity = this.selectById(orderId);
      if (orderCrossCity.getState() != 7) {
         return ResultUtil.error("订单已完成支付,不允许重复支付", "");
@@ -1018,9 +1018,119 @@
         if (orderMoney == 0) {
            return ResultUtil.error("请使用余额支付");
         }
         String app = type == 1 ? "APP" : "JSAPI";
         resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId());
//         String app = type == 1 ? "APP" : "JSAPI";
//         resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId());
         //创建订单并拉起支付(这里不需要创建行程单,由三方处理)
         Driver driver = driverService.selectById(orderCrossCity.getDriverId());
         if(null == orderCrossCity.getIsCreated() || 0 == orderCrossCity.getIsCreated()){
            //调用中台创建订单及拉起支付接口
            TradeOrderCreateData tradeOrderCreateData = new TradeOrderCreateData();
            tradeOrderCreateData.setTreatShopId(driver.getEmpId().toString());
            //追缴单不要分账
            if(0 == orderCrossCity.getRecoveryOrder()){
               tradeOrderCreateData.setField1("{\"profitSharing\":\"1\",\"isCompensate\":\"0\",\"isPromote\":\"" + (orderCrossCity.getPromotion() == 2 ? 1 : 0) + "\"}");
            }else{
               tradeOrderCreateData.setField1("{\"profitSharing\":\"0\",\"isCompensate\":\"1\",\"isPromote\":\"0\"}");
            }
            tradeOrderCreateData.setCharge(new BigDecimal(orderMoney));
            tradeOrderCreateData.setOrderNo("CC" + orderCrossCity.getId());
            tradeOrderCreateData.setCustomerId(userInfo.getOnconUUID());
            tradeOrderCreateData.setPartnerPayId(orderCrossCity.getTravelId());
            tradeOrderCreateData.setTotalFee(Double.valueOf(orderMoney * 100).intValue() + "");
            tradeOrderCreateData.setOrderDesc("完成订单");
            tradeOrderCreateData.setRetUrl(path);
            tradeOrderCreateData.setClientIp(ip);
            tradeOrderCreateData.setServiceType(3);
            if(null != orderCrossCity.getPromotionDriverId()){
               Driver driver1 = driverService.selectById(orderCrossCity.getPromotionDriverId());
               Company company = companyService.selectById(driver1.getCompanyId());
               tradeOrderCreateData.setPromoterId(driver1.getEmpId().toString());
               tradeOrderCreateData.setSupplierShopId(company.getEnterCode());
            }
            List<GoodsInfoRequest> goodsInfo = new ArrayList<>();
            GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest();
            goodsInfoRequest.setSubOpenId(userInfo.getAppletsOpenId());
            if(0 == orderCrossCity.getRecoveryOrder()){
               goodsInfoRequest.setProfitSharing("1");
            }else{
               goodsInfoRequest.setProfitSharing("0");
            }
            goodsInfo.add(goodsInfoRequest);
            tradeOrderCreateData.setGoodsInfo(goodsInfo);
            TradeOrderCreate tradeOrderCreate = OrderUtil.tradeOrderCreate1(tradeOrderCreateData, orderCrossCity.getRecoveryOrder());
            PayInfo payInfo = tradeOrderCreate.getPayInfo();
            if(!"000000".equals(payInfo.getRetCode())){
               return ResultUtil.error(payInfo.getRetMsg());
            }
            orderCrossCity.setIsCreated(1);
            orderCrossCity.setTrackId(tradeOrderCreate.getOrderInfo().getOrderId());
            resultUtil = ResultUtil.success(payInfo.getData().getRedirectUrl());
         }else{
            //拉起支付
            TradePayOff1Data tradePayOff1Data = new TradePayOff1Data();
            tradePayOff1Data.setPartnerPayId(orderCrossCity.getTravelId());
            tradePayOff1Data.setTotalFee(Double.valueOf(orderMoney * 100).intValue() + "");
            tradePayOff1Data.setRetUrl(path);
            tradePayOff1Data.setClientIp(ip);
            tradePayOff1Data.setOrderDesc("完成订单");
            List<GoodsInfoRequest> goodsInfo = new ArrayList<>();
            GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest();
            goodsInfoRequest.setSubOpenId(userInfo.getAppletsOpenId());
            if(0 == orderCrossCity.getRecoveryOrder()){
               goodsInfoRequest.setProfitSharing("1");
            }else{
               goodsInfoRequest.setProfitSharing("0");
            }
            goodsInfo.add(goodsInfoRequest);
            tradePayOff1Data.setGoodsInfo(goodsInfo);
            PayInfo payInfo = OrderUtil.tradePayOff1(tradePayOff1Data, orderCrossCity.getRecoveryOrder());
            if(!"000000".equals(payInfo.getRetCode())){
               return ResultUtil.error(payInfo.getRetMsg());
            }
            resultUtil = ResultUtil.success(payInfo.getData().getRedirectUrl());
         }
         paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, "", 1);//添加预支付数据
         //创建定时任务查询订单支付状态
         ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
         threadPoolExecutor.execute(()->{
            try {
               int num = 1;
               int wait = 0;
               while (num <= 13) {
                  int min = 5000;
                  wait += (min * num);
                  OrderCrossCity orderCrossCity1 = this.selectById(orderCrossCity.getId());
                  if (orderCrossCity1.getState() != 7) {
                     break;
                  }
                  GetTravelItineraryListRequest request = new GetTravelItineraryListRequest();
                  request.setCustomerId(userInfo.getOnconUUID());
                  request.setOrderNo("CC" + orderCrossCity1.getId());
                  request.setDriverId(driver.getEmpId().toString());
                  ListPage<List<TravelItinerary>> travelItineraryList = OrderUtil.getTravelItineraryList(request);
                  TravelItinerary travelItinerary = travelItineraryList.getList().get(0);
                  if(travelItinerary.getStatus() != 7 || travelItinerary.getOrderStatus() == 11){
                     GetPaymentInfoDataRequest getPaymentInfoDataRequest1 = new GetPaymentInfoDataRequest();
                     getPaymentInfoDataRequest1.setPartnerPayId(orderCrossCity1.getTravelId());
                     GetPaymentInfo getPaymentInfo1 = OrderUtil.paymentInfo(getPaymentInfoDataRequest1);
                     payOrderCrossCityCallback(orderCrossCity1.getId(), getPaymentInfo1.getPayId(), 1, null);
                     break;
                  }
                  Thread.sleep(wait);
                  num++;
               }
            } catch (Exception e) {
               e.printStackTrace();
            }finally {
               threadPoolExecutor.shutdown();
            }
         });
      }
      if (payType == 2) {//支付宝支付
         if (orderMoney == 0) {
@@ -1033,22 +1143,18 @@
         if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) {
            return ResultUtil.error("余额不足,无法完成支付");
         }
//            if(orderMoney > 0){
//                resultUtil= appOrderController.moneyPay(orderId,userInfo.getId(),orderMoney);
//                if(resultUtil.getCode()==500){
//                    return ResultUtil.error("电子余额不足,无法完成支付");
//                }
//            }
         
         userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
         OpenCity openCity = openCityService.openCity1(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString());
         SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
         userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分
         if(null != query1){
            userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分
            userInfoService.updateById(userInfo);
         }
         
         //添加交易明细
         transactionDetailsService.saveData(uid, "跨城出行订单", orderMoney, 2, 1, 1, 3, orderId);
         userInfoService.updateById(userInfo);
         
         orderCrossCity.setState(2);//跨城支付完成后才开始服务
         orderCrossCity.setPayType(3);
@@ -1272,7 +1378,6 @@
      orderCrossCity.setPassengers(userInfo.getNickName());
      orderCrossCity.setPassengersPhone(userInfo.getPhone());
      orderCrossCity.setPeopleNumber(orderCrossCityWarpper.getPeopleNumber());
      orderCrossCity.setSeatNumber(orderCrossCityWarpper.getSeatNumber());
      List<OrderCrossCity> orderCrossCities = this.selectList(new EntityWrapper<OrderCrossCity>().eq("orderNum", orderCrossCity.getOrderNum()).eq("isDelete", 1));
      orderCrossCity.setSort(orderCrossCities.size() + 1);
      orderCrossCity.setState(7);//待支付
@@ -1284,6 +1389,11 @@
      orderCrossCity.setIsDelete(1);
      orderCrossCity.setRemark(orderCrossCityWarpper.getRemark());
      orderCrossCity.setIsReassign(1);
      if(1 == orderCrossCity.getTravelMode()){
         orderCrossCity.setSeatNumber(orderCrossCityWarpper.getSeatNumber());
      }else{
         orderCrossCity.setSeatNumber(lineShiftDriver.getLaveSeatNumber());
      }
//        //调用高德创建轨迹
//        String s = gdFalconUtil.selectTerminal(driver.getPhone());
//        String track = gdFalconUtil.createTrack(s);
@@ -1302,7 +1412,15 @@
      // 是否推广订单
      Integer promotion = isPromotion(uid);
      orderCrossCity.setPromotion(promotion);
      if(promotion!=null){
         orderCrossCity.setPromotion(2);
         Driver driver1 = driverService.selectById(promotion);
         orderCrossCity.setPromotionUser(driver1.getName());
         orderCrossCity.setPromotionPhone(driver1.getPhone());
         orderCrossCity.setPromotionDriverId(promotion);
      }else{
         orderCrossCity.setPromotion(1);
      }
      this.insert(orderCrossCity);
      
@@ -1364,9 +1482,30 @@
            if (orderCrossCity1.getState() == 7 && orderCrossCity1.getPayMoney() == null) {
               orderCrossCity1.setState(10);
               orderCrossCityMapper.updateById(orderCrossCity1);
               //中台修改订单状态
               ModifyTravelItineraryRequest request1 = new ModifyTravelItineraryRequest();
               request1.setOrderId(orderCrossCity1.getTravelId());
               request1.setStatus(orderCrossCity1.getState());
               if (null != orderCrossCity1.getDriverId()) {
                  Driver driver2 = driverService.selectById(orderCrossCity1.getDriverId());
                  Company company = iCompanyService.selectById(driver2.getCompanyId());
                  request1.setDriverId(driver2.getEmpId().toString());
                  request1.setSupplierShopId(company.getEnterCode());
               }
               if (2 == orderCrossCity1.getPromotion() && null != orderCrossCity1.getPromotionDriverId()) {
                  Driver driver2 = driverService.selectById(orderCrossCity1.getPromotionDriverId());
                  request1.setPromoterId(driver2.getEmpId().toString());
               }
               OrderUtil.modifyTravelItinerary(request1);
               //未支付的情况取消订单
               if(null == orderCrossCity1.getPayType() && ToolUtil.isNotEmpty(orderCrossCity1.getTravelId())){
                  OrderUtil.tradeOrderCancel(orderCrossCity1.getTravelId());
               }
               
               OrderCancel orderCancel = new OrderCancel();
               orderCancel.setOrderId(orderCrossCity.getId());
               orderCancel.setOrderId(orderCrossCity1.getId());
               orderCancel.setOrderType(3);
               orderCancel.setReason("用户未及时付款,系统自动取消订单");
               orderCancel.setRemark("用户未及时付款,系统自动取消订单");
@@ -1376,18 +1515,20 @@
               orderCancelService.insert(orderCancel);
               
               //修改司机座位
               LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId());
               lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber());
               lineShiftDriver.setLaveSeatNumber(lineShiftDriver.getLaveSeatNumber() + (orderCrossCity.getTravelMode() == 1 ? "," : "") + orderCrossCity.getSeatNumber());
               LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity1.getLineShiftDriverId());
               lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity1.getPeopleNumber());
               lineShiftDriver.setLaveSeatNumber(lineShiftDriver.getLaveSeatNumber() + (orderCrossCity1.getTravelMode() == 1 ? "," : "") + orderCrossCity1.getSeatNumber());
               lineShiftDriverMapper.updateById(lineShiftDriver);
               
               //修改司机为空闲
               List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryByDriverId(orderCrossCity.getDriverId(), 2, 3, 4, 5, 11);
               List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryByDriverId(orderCrossCity1.getDriverId(), 2, 3, 4, 5, 11);
               if (orderCrossCities.size() == 0) {
                  Driver driver = driverService.selectById(orderCrossCity.getDriverId());
                  Driver driver = driverService.selectById(orderCrossCity1.getDriverId());
                  driver.setState(2);
                  driverService.updateById(driver);
               }
            }
         }
      };
@@ -1397,17 +1538,17 @@
      return ResultUtil.success(baseWarpper);
   }
   private Integer isPromotion(Integer userId){
      UserInfo userInfo = userInfoService.selectById(userId);
      if(userInfo.getBindDriverId()!=null && userInfo.getBindExpireDate().getTime()<=System.currentTimeMillis()){
         String registAreaCode = userInfo.getRegistAreaCode();
         TDriverPromotionActivity tDriverPromotionActivity = driverPromotionActivityService.selectOne(new EntityWrapper<TDriverPromotionActivity>().eq("districtCode", registAreaCode).ge("startTime", new Date()).lt("endTime", new Date()).last("AND FIND_IN_SET(" + 3 + ", bizType) limit 1"));
         TDriverPromotionActivity tDriverPromotionActivity = driverPromotionActivityService.selectOne(new EntityWrapper<TDriverPromotionActivity>().eq("state",1).eq("districtCode", registAreaCode).le("startTime", new Date()).ge("endTime", new Date()).last("AND FIND_IN_SET(" + 3 + ", bizType) limit 1"));
         if(tDriverPromotionActivity!=null){
            return 2;
            return userInfo.getBindDriverId();
         }
      }
      return null;
   }
   /**
    * 获取订单
@@ -1443,10 +1584,14 @@
        if(Integer.valueOf(String.valueOf(map.get("state"))) ==7 &&  (map.get("responsibilityType")==null || Integer.valueOf(String.valueOf(map.get("responsibilityType")))<4)){
            map.put("appealButton", 1);
        }
        if(map.get("abnormalIntro")!=null){
            map.put("appealStatus", 1);
        }
      //跨城不需要申诉
      map.put("appealStatus", 0);
        if(map.get("travelMode")!=null &&map.get("travelMode").toString().equals("2") ){
            map.put("zwNum", 1);
        }else {
         map.put("zwNum", 2);
      }
      Map<String, String> geocode = gdMapGeocodingUtil.geocode(map.get("startLon").toString(), map.get("startLat").toString());
      map.put("startCity", geocode.get("city"));
      geocode = gdMapGeocodingUtil.geocode(map.get("endLon").toString(), map.get("endLat").toString());
@@ -1471,6 +1616,15 @@
      BaseWarpper baseWarpper = new BaseWarpper();
      if (null == orderCrossCity) {
         return ResultUtil.error("获取数据失败,订单信息有误");
      }
      if (orderCrossCity.getState() == 5) {
         return ResultUtil.error("订单已开始服务,不能取消订单");
      }
      if (orderCrossCity.getState() == 6 || orderCrossCity.getState() == 8 || orderCrossCity.getState() == 9) {
         return ResultUtil.error("订单已完成,不能取消订单");
      }
      if (orderCrossCity.getState() == 10) {
         return ResultUtil.error("订单已被取消,不能重复操作");
      }
      OpenCity openCity = openCityService.openCity1(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString());
      double amount = 0;
@@ -1508,7 +1662,7 @@
         return ResultUtil.error("取消订单失败,订单信息有误", "");
      }
      if (orderCrossCity.getState() != 12) {
         return ResultUtil.error("取消订单失败,不合法的操作", "");
         return ResultUtil.error("订单已取消,请刷新页面", "");
      }
      OrderCancel orderCancel = null;
      if (null == cancleId) {
@@ -1970,7 +2124,7 @@
         return ResultUtil.error("取消订单失败,订单信息有误");
      }
      if (orderCrossCity.getState() >= 5 && orderCrossCity.getState() != 7 && orderCrossCity.getState() != 11) {
         return ResultUtil.error("取消订单失败,不合法的操作");
         return ResultUtil.error("订单已取消,请刷新页面");
      }
      
      //还原座位
@@ -1995,24 +2149,58 @@
               }
            }).start();
         }
         Driver driver = driverService.selectById(orderCrossCity.getDriverId());
         
         //修改司机座位
         LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId());
         lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber());
         lineShiftDriver.setLaveSeatNumber(lineShiftDriver.getLaveSeatNumber() + (orderCrossCity.getTravelMode() == 1 ? "," : "") + orderCrossCity.getSeatNumber());
         lineShiftDriverMapper.updateById(lineShiftDriver);
         if(1 == orderCrossCity.getTravelMode()){
            LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId());
            lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber());
            lineShiftDriver.setLaveSeatNumber(lineShiftDriver.getLaveSeatNumber() + (orderCrossCity.getTravelMode() == 1 ? "," : "") + orderCrossCity.getSeatNumber());
            lineShiftDriverMapper.updateById(lineShiftDriver);
         }else{
            Car car = carMapper.selectById(driver.getCarId());
            CarModel carModel = carModelMapper.selectById(car.getCarModelId());
            LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId());
            lineShiftDriver.setLaveSeat(carModel.getSeat() - 1);
            String seatNumber = "";
            for(int i = 1; i < carModel.getSeat(); i++){
               seatNumber += i + ",";
            }
            lineShiftDriver.setLaveSeatNumber(seatNumber.substring(0, seatNumber.length() - 1));
            lineShiftDriverMapper.updateById(lineShiftDriver);
         }
         
         //修改司机为空闲
         List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryByDriverId(orderCrossCity.getDriverId(), 2, 3, 4, 5, 11);
         if (orderCrossCities.size() == 0) {
            Driver driver = driverService.selectById(orderCrossCity.getDriverId());
            driver.setState(2);
            driverService.updateById(driver);
         }
      } else {
         return ResultUtil.error("请完善后台取消规则设置");
      }
      //中台修改订单状态
      ModifyTravelItineraryRequest request1 = new ModifyTravelItineraryRequest();
      request1.setOrderId(orderCrossCity.getTravelId());
      request1.setStatus(orderCrossCity.getState());
      if (null != orderCrossCity.getDriverId()) {
         Driver driver2 = driverService.selectById(orderCrossCity.getDriverId());
         Company company = iCompanyService.selectById(driver2.getCompanyId());
         request1.setDriverId(driver2.getEmpId().toString());
         request1.setSupplierShopId(company.getEnterCode());
      }
      if (2 == orderCrossCity.getPromotion() && null != orderCrossCity.getPromotionDriverId()) {
         Driver driver2 = driverService.selectById(orderCrossCity.getPromotionDriverId());
         request1.setPromoterId(driver2.getEmpId().toString());
      }
      OrderUtil.modifyTravelItinerary(request1);
      //未支付的情况取消订单
      if(null == orderCrossCity.getPayType() && ToolUtil.isNotEmpty(orderCrossCity.getTravelId())){
         OrderUtil.tradeOrderCancel(orderCrossCity.getTravelId());
      }
      UserInfo userInfo = userInfoService.selectById(orderCrossCity.getUserId());
      //已支付的情况下进行退款操作
      if (null != orderCrossCity.getPayType() && null != orderCrossCity.getPayMoney()) {
         // 退款
@@ -2024,7 +2212,6 @@
         }
         
         if (orderCrossCity.getPayType() == 3) {//余额支付
            UserInfo userInfo = userInfoService.selectById(orderCrossCity.getUserId());
            userInfo.setBalance(userInfo.getBalance() + orderCrossCity.getPayMoney());
            userInfoService.updateById(userInfo);
            //添加交易明细
@@ -2046,14 +2233,38 @@
            }
            
            if (query.getPayType() == 1) {//微信
               Map<String, String> map = payMoneyUtil.wxRefund(query.getCode(), id + "_3", query.getAmount().toString(), query.getAmount().toString(), "/base/cancleOrderWXPay");
               if (!"SUCCESS".equals(map.get("return_code"))) {
                  return ResultUtil.error(map.get("return_msg"));
               //中台订单退款操作
               if(ToolUtil.isNotEmpty(orderCrossCity.getTravelId())){
                  TradeOrderRefundRequest request = new TradeOrderRefundRequest();
                  request.setPartnerPayId(orderCrossCity.getTravelId());
                  request.setPayId(query.getCode());
                  request.setRefundTotalFee(Double.valueOf(orderCrossCity.getPayMoney() * 100).intValue() + "");
                  request.setRemark("跨城订单取消退款");
                  request.setRefundType("RF");
                  RefundInfoRequest refundInfo = new RefundInfoRequest();
                  refundInfo.setPayItemId(orderCrossCity.getTravelId());
                  refundInfo.setPayId(query.getCode());
                  refundInfo.setTradeFee(Double.valueOf(orderCrossCity.getPayMoney() * 100).intValue() + "");
                  request.setRefundInfos(new ArrayList<RefundInfoRequest>(){{
                     add(refundInfo);
                  }});
                  TradeOrderRefund tradeOrderRefund = OrderUtil.tradeOrderRefund(request);
                  //退款通知
                  OrderRefundNoticeRequest request1 = new OrderRefundNoticeRequest();
                  request1.setOrderId(orderCrossCity.getTravelId());
                  request1.setRefundPayNum(tradeOrderRefund.getRefundId());
                  request1.setRefundType("5");
                  request1.setApplyRefundCharge(new BigDecimal(orderCrossCity.getPayMoney()));
                  request1.setActualRefundCharge(new BigDecimal(orderCrossCity.getPayMoney()));
                  request1.setRefundAccount(userInfo.getOnconUUID());
                  request1.setRemark("跨城订单取消退款");
                  OrderUtil.orderRefundNotice(request1);
                  //添加交易明细
                  transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", query.getAmount(), 1, 1, 1, 3, id);
               }
            } else if (query.getPayType() == 4) { // 云闪付
               // TODO 退款
               UserInfo userInfo = userInfoService.selectById(orderCrossCity.getUserId());
               userInfo.setBalance(userInfo.getBalance() + orderCrossCity.getPayMoney());
               userInfoService.updateById(userInfo);
               //添加交易明细
@@ -2073,26 +2284,6 @@
               transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", query.getAmount(), 1, 1, 1, 3, id);
            }
         }
         //添加负的收入明细
         List<Income> incomes = incomeService.selectList(new EntityWrapper<Income>().eq("type", 2).eq("incomeId", id).eq("orderType", 3));
         for (Income income : incomes) {
            if (income.getUserType() == 2) {//处理司机的收入
               Driver driver = driverService.selectById(income.getObjectId());
               driver.setBalance(driver.getBalance() - income.getMoney());
               driver.setBusinessMoney(driver.getBusinessMoney() - income.getMoney());
               driver.setLaveBusinessMoney(driver.getLaveBusinessMoney() - income.getMoney());
               driverService.updateById(driver);
            }
            Income income1 = new Income();
            BeanUtils.copyProperties(income, income1);
            income1.setMoney(income.getMoney() * -1);
            income1.setId(null);
            income1.setInsertTime(new Date());
            incomeService.insert(income1);
         }
      }
      
      //添加消息
@@ -2113,64 +2304,67 @@
   @Override
   public OrderServerWarpper queryOrderServer(Integer orderId, Integer uid) throws Exception {
      OrderCrossCity orderCrossCity = this.selectById(orderId);
      //计算预计距离和剩余时间
      String value = (String) redisTemplate.opsForValue().get("DRIVER" + String.valueOf(orderCrossCity.getDriverId()));
      if (null == value || "".equals(value)) {
         System.err.println("司机没有上传位置信息");
      if(null != orderCrossCity){
         //计算预计距离和剩余时间
         String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(orderCrossCity.getDriverId()));
         if (null == value || "".equals(value)) {
            System.err.println("司机没有上传位置信息");
            //调用获取轨迹中的数据
            List<Map<String, Object>> list = orderPositionService.queryTrack(orderId, 3);
            if (list.size() > 0) {
               Map<String, Object> map = list.get(list.size() - 1);
               value = map.get("lon") + "," + map.get("lat");
            }
         }
         
         //调用获取轨迹中的数据
         List<Map<String, Object>> list = orderPositionService.queryTrack(orderId, 3);
         if (list.size() > 0) {
            Map<String, Object> map = list.get(list.size() - 1);
            value = map.get("lon") + "," + map.get("lat");
         OrderServerWarpper orderServerWarpper = new OrderServerWarpper();
         orderServerWarpper.setOrderId(orderCrossCity.getId());
         orderServerWarpper.setOrderType(3);
         orderServerWarpper.setState(orderCrossCity.getState());
         orderServerWarpper.setLon(null != value ? value.split(",")[0] : "0.0");
         orderServerWarpper.setLat(null != value ? value.split(",")[1] : "0.0");
         orderServerWarpper.setReassignNotice(orderCrossCity.getReassignNotice());
         if (orderCrossCity.getState() == 2 || orderCrossCity.getState() == 3) {//前往预约地
            // TODO: 2023/11/4 无法修改
            Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderCrossCity.getStartLon() + "," + orderCrossCity.getStartLat(), 1);
            String d = "0";
            String t = "0";
            if (null == distance) {
               System.err.println("查询距离出错了");
            } else {
               d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString();
               t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + "";
            }
            orderServerWarpper.setReservationMileage(d);
            orderServerWarpper.setReservationTime(t);
            orderServerWarpper.setServedMileage("0");
            orderServerWarpper.setServedTime("0");
            orderServerWarpper.setLaveMileage("0");
            orderServerWarpper.setLaveTime("0");
         }
      }
      OrderServerWarpper orderServerWarpper = new OrderServerWarpper();
      orderServerWarpper.setOrderId(orderCrossCity.getId());
      orderServerWarpper.setOrderType(3);
      orderServerWarpper.setState(orderCrossCity.getState());
      orderServerWarpper.setLon(null != value ? value.split(",")[0] : "0.0");
      orderServerWarpper.setLat(null != value ? value.split(",")[1] : "0.0");
      orderServerWarpper.setReassignNotice(orderCrossCity.getReassignNotice());
      if (orderCrossCity.getState() == 2 || orderCrossCity.getState() == 3) {//前往预约地
         // TODO: 2023/11/4 无法修改
         Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderCrossCity.getStartLon() + "," + orderCrossCity.getStartLat(), 1);
         String d = "0";
         String t = "0";
         if (null == distance) {
            System.err.println("查询距离出错了");
         } else {
            d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString();
            t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + "";
         if (orderCrossCity.getState() == 5 || orderCrossCity.getState() == 6) {//服务中
            // TODO: 2023/11/4 无法修改
            Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderCrossCity.getEndLon() + "," + orderCrossCity.getEndLat(), 1);
            String d = "0";
            String t = "0";
            if (null == distance) {
               System.err.println("查询距离出错了");
            } else {
               d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString();
               t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + "";
            }
            orderServerWarpper.setReservationMileage("0");
            orderServerWarpper.setReservationTime("0");
            orderServerWarpper.setServedMileage(String.valueOf(orderCrossCity.getMileage() / 1000));
            orderServerWarpper.setServedTime(Long.valueOf((new Date().getTime() - orderCrossCity.getStartServiceTime().getTime()) / 60000).intValue() + "");
            orderServerWarpper.setLaveMileage(d);
            orderServerWarpper.setLaveTime(t);
         }
         orderServerWarpper.setReservationMileage(d);
         orderServerWarpper.setReservationTime(t);
         orderServerWarpper.setServedMileage("0");
         orderServerWarpper.setServedTime("0");
         orderServerWarpper.setLaveMileage("0");
         orderServerWarpper.setLaveTime("0");
         return orderServerWarpper;
      }
      if (orderCrossCity.getState() == 5 || orderCrossCity.getState() == 6) {//服务中
         // TODO: 2023/11/4 无法修改
         Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderCrossCity.getEndLon() + "," + orderCrossCity.getEndLat(), 1);
         String d = "0";
         String t = "0";
         if (null == distance) {
            System.err.println("查询距离出错了");
         } else {
            d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000), new MathContext(2, RoundingMode.HALF_EVEN)).toString();
            t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), new MathContext(2, RoundingMode.HALF_EVEN)).intValue() + "";
         }
         orderServerWarpper.setReservationMileage("0");
         orderServerWarpper.setReservationTime("0");
         orderServerWarpper.setServedMileage(String.valueOf(orderCrossCity.getMileage() / 1000));
         orderServerWarpper.setServedTime(Long.valueOf((new Date().getTime() - orderCrossCity.getStartServiceTime().getTime()) / 60000).intValue() + "");
         orderServerWarpper.setLaveMileage(d);
         orderServerWarpper.setLaveTime(t);
      }
      return orderServerWarpper;
      return new OrderServerWarpper();
   }
   
   
@@ -2429,12 +2623,20 @@
                     OrderPrivateCarServiceImpl.orderIds.add(orderPrivateCar.getId());//添加记录,防止调用接口重复提醒无人接单
                     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() + 5; i++) {
                     for (int i = 1; i <= querys.size() + 15; i++) {
                        //订单被抢后的处理
                        Integer state = orderPrivateCarMapper.selectById(orderId).getState();
                        if (state != 1) {
                           //关闭其他推送线程
                           Set<String> keySet = threadMap.keySet();
                           datas.forEach(e->{
                              threadMap.get(orderId + "_1");
                           });
                           for (String key : keySet) {
                              if (!key.equals(orderId + "_1")) {
                                 Thread thread1 = threadMap.get(key);//中断线程
@@ -2448,7 +2650,7 @@
                           for (Map<String, Integer> map : datas) {
                              Integer orderType = map.get("orderType");
                              Integer orderId = map.get("orderId");
                              if (orderType == 1 && orderId != orderPrivateCar.getId()) {
                              if (orderType == 1 && !orderId.equals(orderPrivateCar.getId())) {
                                 orderPrivateCarMapper.deleteById(orderId);
                              }
                              if (orderType == 2) {
@@ -2484,8 +2686,8 @@
                        
                        //所有推送完后的处理
                        Boolean b = pushEndMap.get(orderPrivateCar.getCrossCityOrderId());
                        if (i == querys.size() + 5 && state == 1 && (null != b && !b.booleanValue())) {
                           pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1);
                        if (i == querys.size() + 15 && state == 1 && (null != b && !b.booleanValue())) {
                           pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 1);
                           OrderPrivateCarServiceImpl.orderIds.remove(orderPrivateCar.getId());
                           pushEndMap.put(orderPrivateCar.getCrossCityOrderId(), Boolean.TRUE);//推送后添加标识
                           break;
@@ -2499,7 +2701,7 @@
                     OrderTaxiServiceImpl.orderIds.add(orderTaxi.getId());//添加记录,防止调用接口重复提醒无人接单
                     OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString());
                     List<PushOrder> querys = pushOrderService.querys(null, 2, openCity.getId());//获取需要推送的次数
                     for (int i = 1; i <= querys.size() + 5; i++) {
                     for (int i = 1; i <= querys.size() + 15; i++) {
                        //处理订单被抢
                        Integer state = orderTaxiMapper.selectById(orderId).getState();
                        if (state != 1) {
@@ -2521,7 +2723,7 @@
                              if (orderType == 1) {
                                 orderPrivateCarMapper.deleteById(orderId);
                              }
                              if (orderType == 2 && orderId != orderTaxi.getId()) {
                              if (orderType == 2 && !orderId.equals(orderTaxi.getId())) {
                                 orderTaxiMapper.deleteById(orderId);
                              }
                           }
@@ -2548,16 +2750,14 @@
                              if (bo) {
                                 continue;
                              }
                              pushUtil.pushOrderState(2, driver.getId(), orderTaxi.getId(), 2, orderTaxi.getState(), pushOrder.getPushTime());
                           }
                        }
                        
                        //所有推送完后的处理
                        Boolean b = pushEndMap.get(orderTaxi.getCrossCityOrderId());
                        if (i == querys.size() + 5 && state == 1 && (null != b && !b.booleanValue())) {
                           pushUtil.pushEndPush(1, orderTaxi.getUserId(), orderTaxi.getId(), 2);
                        if (i == querys.size() + 15 && state == 1 && (null != b && !b.booleanValue())) {
                           pushUtil.pushEndPush(1, orderTaxi.getUserId(), orderTaxi.getId(), 2, 1);
                           OrderTaxiServiceImpl.orderIds.remove(orderTaxi.getId());
                           pushEndMap.put(orderTaxi.getCrossCityOrderId(), Boolean.TRUE);//推送后添加标识
                        }
@@ -2719,7 +2919,7 @@
      }
      orderCrossCity.setAbnormalIntro(abnormalIntro);
      orderCrossCity.setAbnormalImg(abnormalImg);
      orderCrossCity.setAbnormal(1);
      orderCrossCity.setAbnormal(2);
      this.baseMapper.updateById(orderCrossCity);
   }
@@ -2735,8 +2935,43 @@
            BigDecimal bigDecimal = tDriverPromotionActivity.getCommissionRatio().divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(payMoney)).setScale(2, RoundingMode.HALF_UP);
            orderCrossCity.setPromotionDriverId(userInfo.getBindDriverId());
            orderCrossCity.setPromotionMoney(bigDecimal);
            orderCrossCity.setPromotionActivityId(tDriverPromotionActivity.getId());
            this.baseMapper.updateById(orderCrossCity);
         }
      }
      // 是否异常订单
      if (orderCrossCity.getResponsibilityType() !=null && orderCrossCity.getResponsibilityType() >2) {
         TAbnormalPayOrder tAbnormalPayOrder = abnormalPayOrderMapper.selectList(new EntityWrapper<TAbnormalPayOrder>().eq("type", 3).eq("orderNum", orderCrossCity.getOrderNum())).stream().findFirst().orElse(null);
         if (tAbnormalPayOrder != null) {
            tAbnormalPayOrder.setPayStatus(2);
            tAbnormalPayOrder.setPayTime(new Date());
            abnormalPayOrderMapper.updateById(tAbnormalPayOrder);
         }
      }
   }
   @Override
   public List<Map<String, Object>> queryMyTripList(Integer uid, Integer pageNum, Integer size) throws Exception {
      pageNum = (pageNum - 1) * size;
      List<Map<String, Object>> maps = orderCrossCityMapper.queryMyTripList(uid, pageNum, size);
      for (Map<String, Object> map : maps) {
         if (Integer.valueOf(String.valueOf(map.get("state"))) == 11) {
            map.put("state", map.get("oldState"));
         }
      }
      return maps;
   }
   @Override
   public List<Map<String, Object>> queryMyTripListAll(Integer uid) throws Exception {
      List<Map<String, Object>> maps = orderCrossCityMapper.queryMyTripListAll(uid);
      for (Map<String, Object> map : maps) {
         if (Integer.valueOf(String.valueOf(map.get("state"))) == 11) {
            map.put("state", map.get("oldState"));
         }
      }
      return maps;
   }
}