From 4228cb0f9ff33e4baa4be0ac904eb927f8d84a19 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期六, 11 十月 2025 14:28:27 +0800
Subject: [PATCH] 提交代码

---
 user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java |  522 +++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 297 insertions(+), 225 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 56f597a..57069a5 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
@@ -15,10 +15,11 @@
 import com.supersavedriving.user.modular.system.util.MallBook.model.*;
 import com.supersavedriving.user.modular.system.util.MallBook.util.Transfer;
 import com.supersavedriving.user.modular.system.util.MallBook.util.TrhRequest;
-import com.supersavedriving.user.modular.system.util.juhe.WeatherUtil;
 import com.supersavedriving.user.modular.system.util.mongodb.model.Location;
+import com.supersavedriving.user.modular.system.util.qianyuntong.OrderUtil;
+import com.supersavedriving.user.modular.system.util.qianyuntong.model.*;
 import com.supersavedriving.user.modular.system.warpper.*;
-import io.swagger.models.auth.In;
+import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
@@ -35,12 +36,13 @@
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.math.MathContext;
 import java.math.RoundingMode;
-import java.net.InetAddress;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.util.*;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 
@@ -79,6 +81,9 @@
     private RedisUtil redisUtil;
 
     @Autowired
+    private RedissonClient redissonClient;
+
+    @Autowired
     private MongoTemplate mongoTemplate;
 
     @Autowired
@@ -101,12 +106,6 @@
 
     @Autowired
     private IRevenueService revenueService;
-
-    @Autowired
-    private IAgentService agentService;
-
-    @Autowired
-    private IPlatformRechargeRecordService platformRechargeRecordService;
 
     @Autowired
     private IDivisionRecordService divisionRecordService;
@@ -433,111 +432,142 @@
      */
     @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("您还有正在进行的订单");
-        }
-        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();
             }
-            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("司机还未上班");
+            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);
             }
-            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());
+
+            List<Order> orderList = new ArrayList<>();
+            for (Integer i = 0; i < travelOrder.getDriverNum(); i++) {
+                order.setId(null);
+                order.setCode(UUIDUtil.getTimeStr() + UUIDUtil.getNumberRandom(5));
+                boolean insert = this.insert(order);
                 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());
+                    Driver driver = driverService.selectById(order.getDriverId());
+                    BranchOffice branchOffice = branchOfficeService.selectById(order.getBranchOfficeId());
+                    //调三方订单中心创建行程单
+                    CreateTravelItineraryRequest request = new CreateTravelItineraryRequest();
+                    request.setOrderNo("DJ" + order.getId());
+                    request.setCustomerId(appUser.getOnconUUID());
+                    request.setDriverId(driver.getEmpId().toString());
+                    request.setSupplierShopId(branchOffice.getEnterCode());
+                    request.setServiceType(2);
+                    String travelItinerary = OrderUtil.createTravelItinerary(request);
+                    order.setTravelId(travelItinerary);
+                    this.insertOrUpdate(order);
+                }
+
+                if(insert){
+                    orderList.add(order);
                 }
             }
+            new Thread(new Runnable() {
+                @Override
+                public void run() {
+                    orderList.forEach(order -> {
+                        //推送状态
+                        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(), uid);
+                        }
+                    });
+                }
+            }).start();
+
+            redisUtil.setStrValue("newOrder", "true");
+            return ResultUtil.success(order.getId());
+        }catch (Exception e){
+            e.printStackTrace();
         }
-        redisUtil.setStrValue("newOrder", "true");
-        return ResultUtil.success(order.getId());
+        return ResultUtil.error("系统异常");
     }
 
 
@@ -546,7 +576,9 @@
     /**
      * 订单推送逻辑
      */
-    public void pushOrder(Long orderId){
+    public void pushOrder(Long orderId, Integer uid){
+        System.err.println("开始推单:" + orderId);
+//        RLock lock1 = redissonClient.getLock("pushOrder:" + uid);
         try {
             Order order = this.selectById(orderId);
             /**
@@ -556,28 +588,14 @@
              *        合适司:积分 > 评分 > 距离
              *      3.司机没有接单直接将订单置入大厅
              */
-            boolean lock = redisUtil.lock(5);
-            if(!lock){
-                int num1 = 1;
-                while (num1 <= 10){
-                    Thread.sleep(3000);//等待3秒
-                    lock = redisUtil.lock(5);
-                    if(lock){
-                        break;
-                    }else{
-                        num1++;
-                    }
-                }
-            }
-            if(!lock){
-                order.setHallOrder(1);
-                this.updateById(order);
-                ExtraPushOrder(order);
-                redisUtil.unlock();
-            }
+//            boolean lock2 = lock1.tryLock(5, 10, TimeUnit.SECONDS);
+//            if(!lock2){
+//                order.setHallOrder(1);
+//                this.updateById(order);
+//                ExtraPushOrder(order);
+//            }
             SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 1));
             if(null == systemConfig){
-                redisUtil.unlock();
                 return;
             }
             JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
@@ -605,7 +623,7 @@
                         .eq("state", 2).last(" and surplusQuantity > 0 and now() < failureTime"));
                 Double d = null;
                 for (YouTuiDriver youTuiDriver : youTuiDrivers) {
-                    String value = redisUtil.getValue("DRIVER" + youTuiDriver.getDriverId());
+                    String value = redisUtil.getValue("daijia:DRIVER" + youTuiDriver.getDriverId());
                     if(ToolUtil.isEmpty(value)){
                         continue;
                     }
@@ -667,7 +685,7 @@
                         Double score = null;//评分
                         Double d = null;
                         for (Driver driver1 : drivers) {
-                            String value = redisUtil.getValue("DRIVER" + driver1.getId());
+                            String value = redisUtil.getValue("daijia:DRIVER" + driver1.getId());
                             if(ToolUtil.isEmpty(value)){
                                 continue;
                             }
@@ -724,6 +742,7 @@
             }
 
             if(null != driver){
+                System.err.println("完成司机查找:" + driver);
                 //防止多笔订单推给一个司机
                 Driver driver1 = driverService.selectById(driver);
                 driver1.setServerStatus(2);
@@ -765,10 +784,10 @@
                 ExtraPushOrder(order);
                 redisUtil.setStrValue("lobbyOrder", "true");
             }
-            redisUtil.unlock();
         }catch (Exception e){
             e.printStackTrace();
-            redisUtil.unlock();
+        }finally {
+//            lock1.unlock();
         }
 
     }
@@ -801,7 +820,7 @@
             return;
         }
         for (Driver driver1 : drivers) {
-            String value = redisUtil.getValue("DRIVER" + driver1.getId());
+            String value = redisUtil.getValue("daijia:DRIVER" + driver1.getId());
             if (ToolUtil.isEmpty(value)) {
                 continue;
             }
@@ -836,13 +855,25 @@
         order.setState(301);
         this.updateById(order);
         redisUtil.delSetValue("orderService", order.getId().toString());
+
+        Driver driver = driverService.selectById(order.getDriverId());
+        if(null != order.getTravelId()){
+            //中台修改订单状态
+            ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
+            request.setOrderId(order.getTravelId());
+            request.setStatus(getState(order.getState()));
+            BranchOffice branchOffice = branchOfficeService.selectById(order.getBranchOfficeId());
+            request.setDriverId(driver.getEmpId().toString());
+            request.setSupplierShopId(branchOffice.getEnterCode());
+            OrderUtil.modifyTravelItinerary(request);
+        }
+
         AppUser appUser = appUserService.selectById(uid);
         appUser.setCancelCount(appUser.getCancelCount() + 1);
         if(appUser.getCancelCount() >= 3){
             appUser.setIsException(2);
         }
         appUserService.updateById(appUser);
-        Driver driver = driverService.selectById(order.getDriverId());
         if(null != driver){
             driver.setServerStatus(1);
             driverService.updateById(driver);
@@ -861,6 +892,36 @@
     }
 
 
+
+    private Integer getState(Integer state){
+        switch (state){
+            case 101://待接单
+                return 1;
+            case 102://已接单
+                return 2;
+            case 103://前往预约点
+                return 3;
+            case 104://到达预约点
+                return 4;
+            case 105://开始服务
+                return 5;
+            case 106://到达目的地
+                return 6;
+            case 107://待支付
+                return 7;
+            case 108://待评价
+                return 8;
+            case 109://已完成
+                return 9;
+            case 201://转单中
+                return 11;
+            case 301://已取消
+                return 10;
+        }
+        return null;
+    }
+
+
     /**
      * 获取订单详情
      * @param uid
@@ -876,7 +937,7 @@
             JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
             orderInfoWarpper.setServiceCell(jsonObject.getString("num1"));
         }
-        String value = redisUtil.getValue("DRIVER" + orderInfoWarpper.getDriverId());
+        String value = redisUtil.getValue("daijia:DRIVER" + orderInfoWarpper.getDriverId());
         if(ToolUtil.isNotEmpty(value)){
             String[] split = value.split(",");
             orderInfoWarpper.setDriverLon(split[0]);
@@ -1094,16 +1155,16 @@
         }
         //开始支付操作
         if(orderPayment.getPayType() == 1){//微信支付
-            return weixinPay(order, appUser, orderPayment.getCouponId());
+            return weixinPay(order, appUser, orderPayment.getCouponId(), orderPayment.getPath(), orderPayment.getIp());
         }
         if(orderPayment.getPayType() == 2){//余额支付
             return balancePayment(order, appUser, orderPayment.getCouponId());
         }
 //        if(orderPayment.getPayType() == 3){//线下支付(由司机端操作)
 //        }
-        if(orderPayment.getPayType() == 4){//微信+余额
-            return weixinAndBalancePayment(order, appUser, orderPayment.getCouponId());
-        }
+//        if(orderPayment.getPayType() == 4){//微信+余额
+//            return weixinAndBalancePayment(order, appUser, orderPayment.getCouponId());
+//        }
         return ResultUtil.success();
     }
 
@@ -1117,100 +1178,100 @@
      * @return
      * @throws Exception
      */
-    public ResultUtil weixinPay(Order order, AppUser appUser, Integer couponId) throws Exception{
+    public ResultUtil weixinPay(Order order, AppUser appUser, Integer couponId, String path, String ip) throws Exception{
         Double payMoney = order.getPayMoney();
         order.setPayType(1);
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
-        String out_trade_no = sdf.format(new Date()) + order.getId();
+        ResultUtil resultUtil = ResultUtil.success(new Object());
+        Driver driver = driverService.selectById(order.getDriverId());
+        if(null == order.getIsCreated() || 0 == order.getIsCreated()){
+            //调用中台创建订单及拉起支付接口
+            TradeOrderCreateData tradeOrderCreateData = new TradeOrderCreateData();
+            tradeOrderCreateData.setTreatShopId(driver.getEmpId().toString());
+            tradeOrderCreateData.setField1("{\"profitSharing\":\"1\",\"isCompensate\":\"0\",\"isPromote\":\"0\"}");
+            tradeOrderCreateData.setCharge(new BigDecimal(payMoney).setScale(2, RoundingMode.HALF_EVEN));
+            tradeOrderCreateData.setOrderNo("DJ" + order.getId());
+            tradeOrderCreateData.setCustomerId(appUser.getOnconUUID());
+            tradeOrderCreateData.setPartnerPayId(order.getTravelId());
+            tradeOrderCreateData.setTotalFee(Double.valueOf(payMoney * 100).intValue() + "");
+            tradeOrderCreateData.setOrderDesc("完成订单");
+            tradeOrderCreateData.setRetUrl(path);
+            tradeOrderCreateData.setClientIp(ip);
+            tradeOrderCreateData.setServiceType(3);
 
-//
-//        PaymentOrder paymentOrder = new PaymentOrder();
-//        paymentOrder.setBizOrderId(out_trade_no);
-//        paymentOrder.setAmount(new BigDecimal(payMoney).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "");
-//        paymentOrder.setOrderName("代驾服务费");
-//        paymentOrder.setPayType("WX_MINI");
-//        paymentOrder.setTransferType("0");
-//        paymentOrder.setAsynSplitFlag("1");
-//        paymentOrder.setAppid(appletsAppid);
-//        paymentOrder.setOpenid(appUser.getOpenid());
-//        paymentOrder.setTerminalIp(InetAddress.getLocalHost().getHostAddress());
-//        List<PaymentOrderGood> goodsDetail = new ArrayList<>();
-//        PaymentOrderGood paymentOrderGood = new PaymentOrderGood();
-//        paymentOrderGood.setGoodsName("服务费");
-//        goodsDetail.add(paymentOrderGood);
-//        paymentOrder.setGoodsDetail(goodsDetail);
-//        paymentOrder.setFrontUrl(callbackPath + "/base/order/orderPayCallback");
-//        paymentOrder.setNotifyUrl(callbackPath + "/base/order/orderPayCallback");
-//        paymentOrder.setParameter1(order.getId().toString());
-//
-//        TrhRequest<PaymentOrder> request = new TrhRequest();
-//        InterfaceResponse execute = request.execute(paymentOrder, PaymentOrder.SERVICE_CODE);
-        return  MiniAppPay.pay(appUser.getOpenid(),new BigDecimal(payMoney).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "","/base/order/orderPayCallback",order.getCode());
-//        return payMoneyUtil.weixinpay("服务费", String.valueOf(order.getId()),out_trade_no,new BigDecimal(payMoney).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "","/base/order/orderPayCallback","APP");
+            List<GoodsInfoRequest> goodsInfo = new ArrayList<>();
+            GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest();
+            goodsInfoRequest.setSubOpenId(appUser.getOpenid());
+            goodsInfoRequest.setProfitSharing("1");
+            goodsInfo.add(goodsInfoRequest);
+            tradeOrderCreateData.setGoodsInfo(goodsInfo);
+            TradeOrderCreate tradeOrderCreate = OrderUtil.tradeOrderCreate1(tradeOrderCreateData, 0);
+            PayInfo payInfo = tradeOrderCreate.getPayInfo();
+            if(!"000000".equals(payInfo.getRetCode())){
+                return ResultUtil.error(payInfo.getRetMsg());
+            }
+            order.setIsCreated(1);
+            order.setTravelId(tradeOrderCreate.getOrderInfo().getOrderId());
+            resultUtil = ResultUtil.success(payInfo.getData().getRedirectUrl());
+        }else{
+            //拉起支付
+            TradePayOff1Data tradePayOff1Data = new TradePayOff1Data();
+            tradePayOff1Data.setPartnerPayId(order.getTravelId());
+            tradePayOff1Data.setTotalFee(Double.valueOf(payMoney * 100).intValue() + "");
+            tradePayOff1Data.setRetUrl(path);
+            tradePayOff1Data.setClientIp(ip);
+            tradePayOff1Data.setOrderDesc("完成订单");
+            List<GoodsInfoRequest> goodsInfo = new ArrayList<>();
+            GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest();
+            goodsInfoRequest.setSubOpenId(appUser.getOpenid());
+            goodsInfoRequest.setProfitSharing("1");
+            goodsInfo.add(goodsInfoRequest);
+            tradePayOff1Data.setGoodsInfo(goodsInfo);
+            PayInfo payInfo = OrderUtil.tradePayOff1(tradePayOff1Data, 0);
+            if(!"000000".equals(payInfo.getRetCode())){
+                return ResultUtil.error(payInfo.getRetMsg());
+            }
+            resultUtil = ResultUtil.success(payInfo.getData().getRedirectUrl());
+        }
+        this.updateById(order);
 
+        //创建定时任务查询订单支付状态
+        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);
+                    Order order1 = this.selectById(order.getId());
+                    if (order1.getState() != 107) {
+                        break;
+                    }
+                    GetTravelItineraryListRequest request = new GetTravelItineraryListRequest();
+                    request.setCustomerId(appUser.getOnconUUID());
+                    request.setOrderNo("DJ" + order1.getId());
+                    request.setDriverId(driver.getEmpId().toString());
+                    ListPage<List<TravelItinerary>> travelItineraryList = OrderUtil.getTravelItineraryList(request);
+                    TravelItinerary travelItinerary = travelItineraryList.getList().get(0);
+                    if(travelItinerary.getStatus() != 7 || Arrays.asList(3, 11).contains(travelItinerary.getOrderStatus())){
+                        GetPaymentInfoDataRequest getPaymentInfoDataRequest1 = new GetPaymentInfoDataRequest();
+                        getPaymentInfoDataRequest1.setPartnerPayId(order1.getTravelId());
+                        GetPaymentInfo getPaymentInfo1 = OrderUtil.paymentInfo(getPaymentInfoDataRequest1);
+                        orderPayCallback(order1.getId().toString(), getPaymentInfo1.getPayId());
+                        break;
+                    }
+                    Thread.sleep(wait);
+                    num++;
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+            }finally {
+                threadPoolExecutor.shutdown();
+            }
 
+        });
 
-//
-//        if(!"0000".equals(execute.getCode())){
-//            return ResultUtil.error(execute.getMsg());
-//        }
-//        JSONObject jsonObject = JSON.parseObject(execute.getResult());
-//        String status = jsonObject.getString("status");
-//        if("2".equals(status)){
-//            return ResultUtil.error("失败");
-//        }
-//        String merOrderId = jsonObject.getString("merOrderId");
-//        String payCode = jsonObject.getString("payCode");
-//        this.updateById(order);
-
-//        if(ToolUtil.isNotEmpty(payCode)){
-//            new Thread(new Runnable() {
-//                @Override
-//                public void run() {
-//                    try {
-//                        int num = 1;
-//                        int wait = 0;
-//                        while (num <= 10){
-//                            int min = 5000;
-//                            wait += (min * num);
-//                            Order order1 = OrderServiceImpl.this.selectById(order.getId());
-//                            if(order1.getState() != 107){
-//                                return;
-//                            }
-//                            QueryOrder queryOrder = new QueryOrder();
-//                            queryOrder.setOriginalMerOrderId(merOrderId);
-//                            queryOrder.setQueryType("1");
-//                            TrhRequest<QueryOrder> request = new TrhRequest();
-//                            InterfaceResponse execute1 = request.execute(queryOrder, QueryOrder.SERVICE_CODE);
-//                            if("0000".equals(execute1.getCode())){
-//                                JSONObject jsonObject1 = JSON.parseObject(execute1.getResult());
-//                                String status1 = jsonObject1.getString("status");
-//                                if("0".equals(status1)){//待处理
-//                                    Thread.sleep(wait);
-//                                    num++;
-//                                }
-//                                if("1".equals(status1)){//成功
-//                                    String merOrderId = jsonObject1.getString("merOrderId");
-//                                    ResultUtil resultUtil = orderPayCallback(order1.getId().toString(), merOrderId);
-
-//                                    break;
-//                                }
-//                                if("2".equals(status1) || 10 == num){//失败
-//                                    break;
-//                                }
-//                            }else{
-//                                Thread.sleep(wait);
-//                                num++;
-//                            }
-//                        }
-//                    }catch (Exception e){
-//                        e.printStackTrace();
-//                    }
-//                }
-//            }).start();
-//        }
-
-//        return ResultUtil.success(payCode);
+        return resultUtil;
     }
 
 
@@ -1495,6 +1556,18 @@
         }
         order.setState(109);
         this.updateById(order);
+        Driver driver = driverService.selectById(order.getDriverId());
+        //中台修改订单状态
+        if(null != order.getTravelId()){
+            ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest();
+            request.setOrderId(order.getTravelId());
+            request.setStatus(getState(order.getState()));
+            BranchOffice branchOffice = branchOfficeService.selectById(order.getBranchOfficeId());
+            request.setDriverId(driver.getEmpId().toString());
+            request.setSupplierShopId(branchOffice.getEnterCode());
+            OrderUtil.modifyTravelItinerary(request);
+        }
+
         Evaluate evaluate = new Evaluate();
         evaluate.setOrderId(orderId.intValue());
         evaluate.setCreateTime(new Date());
@@ -1503,7 +1576,6 @@
         evaluate.setStatus(1);
         evaluate.setUserId(uid);
         evaluateService.insert(evaluate);
-        Driver driver = driverService.selectById(order.getDriverId());
         driver.setScore(((null == driver.getScore() ? 0 : driver.getScore()) + score) / 2);
         if(score == 5){//司机积分奖励
             SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4));

--
Gitblit v1.7.1