From bbc64160643c4ed818eb574831dc303b0a979089 Mon Sep 17 00:00:00 2001
From: 18034727885 <973609879@qq.com>
Date: 星期五, 07 八月 2026 14:23:15 +0800
Subject: [PATCH] 修复问题 升级版本号

---
 app/src/main/java/com/driver/igotrip/ui/main/DriverPayFragment.kt              |    2 
 app/src/main/java/com/driver/igotrip/ui/main/small_cargo/SmallCargoActivity.kt |  281 ++-----
 app/src/main/java/com/driver/igotrip/utils/crash/CrashHandler.kt               |  160 +++++
 app/src/main/java/com/driver/igotrip/ui/main/GoOrderTipsFragment.kt            |    2 
 app/src/main/java/com/driver/igotrip/ui/main/ModifyAddressFragment.kt          |   13 
 app/src/main/java/com/driver/igotrip/ui/main/major/MajorSureMoney2Activity.kt  |   28 
 app/src/main/java/com/driver/igotrip/ui/mine/FeedbackRemarkActivity.kt         |    3 
 app/src/main/java/com/driver/igotrip/ui/main/TipsFragment.kt                   |    3 
 app/src/main/java/com/driver/igotrip/ui/main/ReassignActivity.kt               |  102 +-
 app/src/main/java/com/driver/igotrip/ui/mine/ChangeEmailActivity.kt            |    2 
 app/src/main/java/com/driver/igotrip/netUtls/HttpManager.java                  |   70 +-
 app/src/main/res/layout/activity_mine.xml                                      |    6 
 app/src/main/java/com/driver/igotrip/ui/pub/BecomeDriverActivity.kt            |   39 
 app/src/main/java/com/driver/igotrip/ui/main/MediaOperationActivity.kt         |    2 
 app/src/main/java/com/driver/igotrip/base/BaseRecyclerActivity.kt              |    4 
 app/src/main/java/com/driver/igotrip/netUtls/LoggingInterceptor.java           |   15 
 app/src/main/java/com/driver/igotrip/ui/main/major/MajorSureMoneyActivity.kt   |   34 
 app/src/main/java/com/driver/igotrip/netUtls/Api.java                          |    1 
 app/src/main/java/com/driver/igotrip/ui/mine/money_bag/ApplyMoneyActivity.kt   |   13 
 rxnetty/src/main/java/cn/sinata/rxnetty/CoreService.java                       |   19 
 app/build.gradle                                                               |    4 
 app/src/main/java/com/driver/igotrip/ui/main/MainActivity.kt                   |   28 
 app/src/main/java/com/driver/igotrip/utils/view/SlidingButton.kt               |    1 
 app/src/main/java/com/driver/igotrip/utils/UtilKt.kt                           |    4 
 app/src/main/java/com/driver/igotrip/ui/card/VerifyCardPwdActivity.kt          |   16 
 rxnetty/src/main/java/cn/sinata/rxnetty/LogHelper.java                         |   13 
 rxnetty/src/main/java/cn/sinata/rxnetty/NettyClient.java                       |    4 
 app/src/main/java/com/driver/igotrip/base/gaode/AMapKit.kt                     |   44 
 app/src/main/java/com/driver/igotrip/utils/crash/CrashInfo.kt                  |   39 +
 app/src/main/java/com/driver/igotrip/ui/main/ChangPhoneActivity.kt             |   58 -
 app/src/main/java/com/driver/igotrip/base/MyApplication.kt                     |  312 ++-------
 app/src/main/java/com/driver/igotrip/base/local/BasePhotoActivity.kt           |    4 
 /dev/null                                                                      |  159 ----
 app/src/main/java/com/driver/igotrip/ui/main/OrderOverActivity.kt              |    2 
 app/src/main/java/com/driver/igotrip/ui/main/GetOrderFragment.kt               |   19 
 app/src/main/java/com/driver/igotrip/base/gaode/NaviGoogleActivity.kt          |    2 
 app/src/main/java/com/driver/igotrip/ui/main/TripActivity.kt                   |  226 ++----
 app/src/main/java/com/driver/igotrip/utils/crash/LogUploader.kt                |  141 ++++
 app/src/main/java/com/driver/igotrip/netUtls/NetKit.kt                         |   33 
 app/src/main/java/com/driver/igotrip/ui/mine/DriverAttestationActivity.kt      |    2 
 40 files changed, 875 insertions(+), 1,035 deletions(-)

diff --git a/app/build.gradle b/app/build.gradle
index 6ec3f68..da72a1b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -29,8 +29,8 @@
         applicationId "com.driver.goposttrip"
         minSdkVersion 23
         targetSdkVersion 35
-        versionCode 51
-        versionName "1.7.2"
+        versionCode 52
+        versionName "1.7.3"
         multiDexEnabled true
         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
 
diff --git a/app/src/main/java/com/driver/igotrip/base/BaseRecyclerActivity.kt b/app/src/main/java/com/driver/igotrip/base/BaseRecyclerActivity.kt
index 1e5a99b..556bb8c 100644
--- a/app/src/main/java/com/driver/igotrip/base/BaseRecyclerActivity.kt
+++ b/app/src/main/java/com/driver/igotrip/base/BaseRecyclerActivity.kt
@@ -123,7 +123,7 @@
             }
             adapters!!.notifyDataSetChanged()
             noShowNothing()
-        },{
+        },{_, _ ->
             noShowNothing()
             dismissDialog()
         })
@@ -160,7 +160,7 @@
             }
             adapters!!.notifyDataSetChanged()
             noShowNothing()
-        }) {
+        }) {_, _ ->
             dismissDialog()
             noShowNothing()
         }
diff --git a/app/src/main/java/com/driver/igotrip/base/MyApplication.kt b/app/src/main/java/com/driver/igotrip/base/MyApplication.kt
index d2959b1..9ac11c8 100644
--- a/app/src/main/java/com/driver/igotrip/base/MyApplication.kt
+++ b/app/src/main/java/com/driver/igotrip/base/MyApplication.kt
@@ -18,7 +18,6 @@
 import cn.sinata.rxnetty.LogHelper.logRecord
 import cn.sinata.rxnetty.NettyClient
 import cn.sinata.xldutils.BaseApplication
-import cn.sinata.xldutils.utils.sysErr
 import com.driver.igotrip.R
 import com.driver.igotrip.bean.OrderBean
 import com.driver.igotrip.bean.OrderResData
@@ -31,23 +30,16 @@
 import com.driver.igotrip.utils.Cache.CacheKey
 import com.driver.igotrip.utils.Cache.CacheUtil
 import com.driver.igotrip.utils.LogUtils
+import com.driver.igotrip.utils.crash.CrashHandler
 import com.google.android.gms.maps.model.LatLng
 import com.google.cloud.texttospeech.v1.*
 import com.google.gson.Gson
-import com.google.protobuf.ByteString
 import com.xuexiang.xui.XUI
 import org.greenrobot.eventbus.EventBus
 import org.jetbrains.anko.startActivity
 import org.jetbrains.anko.toast
 import org.json.JSONObject
-import java.io.FileOutputStream
-import java.security.SecureRandom
-import java.security.cert.X509Certificate
 import java.util.*
-import javax.net.ssl.HttpsURLConnection
-import javax.net.ssl.SSLContext
-import javax.net.ssl.TrustManager
-import javax.net.ssl.X509TrustManager
 
 //MD5: A6:19:B7:92:10:27:61:22:BC:37:1B:98:9B:9E:1A:82
 //SHA1: B9:D3:9B:10:B1:25:77:FF:62:D2:56:83:CC:14:1B:EA:DB:BC:97:74
@@ -55,10 +47,8 @@
  * Created by Administrator on 2018/1/17.
  */
 open class MyApplication : BaseApplication(), Application.ActivityLifecycleCallbacks {
-    //设置debug模式
-    var isDebug = false
-    var heartHandler: Handler? = null
-    var currentTime = System.currentTimeMillis()
+    private val heartHandler = Handler(Looper.getMainLooper())
+    private var currentTime = System.currentTimeMillis()
 
     override fun setSharedPreferencesName(): String {
         return "MyApplication"
@@ -83,17 +73,17 @@
 //        PlatformConfig.setQQZone("1111276329", "JuAotVjQcUiesxgp") //qq互联
 //        CrashReport.initCrashReport(this, "163c95c374", true);
         LogUtils.OpenLog(true)
-        initLogs()
+        initLogs(this)
         initSocket()
 //        JPushInterface.setDebugMode(true)
 //        JPushInterface.init(this)
         setAlisa()
+        CrashHandler.init(this)
     }
 
     public fun setAlisa() {
         if (CacheKey.getUserId().isNotEmpty()) {
-            var alisa = "DRIVER" + CacheKey.getUserId()
-            sysErr(alisa)
+            val alisa = "DRIVER" + CacheKey.getUserId()
             mHandler.sendMessage(mHandler.obtainMessage(MSG_SET_ALIAS, alisa))
         }
     }
@@ -120,8 +110,9 @@
                 MSG_ORDER_CANCEL -> {
                     val pair = msg.obj as Pair<String, OrderSimpleData>
                     val orderBean = Gson().fromJson(pair.first, OrderBean::class.java)
-                    val act = activities[activities.size - 1]
+                    val act = getTopActivity()
                     if (orderBean.data.cancelMidway == 1) {
+                        logRecord("订单被中途取消")
                         (act as PublicServiceActivity).cancelOrder(
                             pair.second.audioUrl,
                             pair.second.orderId.toString(),
@@ -131,15 +122,17 @@
                         )
                         if (act is PublicServiceDialogActivity) act.finish()
                     } else if (pair.second.status == 12) { //取消待乘客支付弹窗
+                        logRecord("订单取消待支付")
                         (act as PublicServiceActivity).cancelOrder(
-                            pair.second.audioUrl,
-                            "${orderBean.data.cancelPayMoney}"
+                            pair.second.audioUrl, "${orderBean.data.cancelPayMoney}"
                         )
                         if (act is PublicServiceDialogActivity) act.finish()
                     } else {
                         if (pair.second.status == 10 && orderBean.data.cancelPayMoney != 0.0) {
                             //乘客已支付的取消,不做处理
+                            logRecord("乘客已支付的取消")
                         } else if (orderBean.data.timeOutCancel < System.currentTimeMillis()) { //已超时弹窗
+                            logRecord("订单已超时")
                             (act as PublicServiceActivity).cancelOrder(
                                 pair.second.from,
                                 pair.second.audioUrl,
@@ -154,9 +147,8 @@
 //                                "orderId" to pair.second.orderId.toString(),
 //                                "orderType" to pair.second.orderType.toString()
 //                            )
-                            Handler(mainLooper).post {
-                                getTTsManager().setVideoText(pair.second.audioUrl)
-                            }
+                            logRecord("司机没超时,用户也无取消费用,只播语音 不做处理")
+                            getTTsManager().setVideoText(pair.second.audioUrl)
                         }
                     }
                 }
@@ -193,7 +185,6 @@
 //        }
 
     private fun initSocket() {
-        Log.e("sendLocation: ", "开始链接")
         NettyClient.getInstance().init(this, Api.SOCKET_SERVER, Api.SOCKET_PORT, true)
         NettyClient.getInstance().addOnMessageListener { message: String ->
             initnetdata(message)
@@ -201,27 +192,6 @@
         NettyClient.getInstance().setOnConnectListener {
             sendHeart()
         }
-        if (frist) {
-            /* MainScope().launch {
-                 while (true){
-                     delay(5000)
-                     var map = getMapByAny()
-                     if (getDriverOrderMessage.startsWith("api")) {
-                         map["appid"] = getAppId()
-                         var sign = DES.getSign(map)
-                         map["sign"] = sign
-                     }
-                     HttpManager.getInstance().post(getDriverOrderMessage, map, object : MyNoMsgObserver(this@MyApplication) {
-                         override fun success(responseString: String?) {
-                             Log.e("长连接接口消息: ",responseString.toString() )
-                             initnetdata(responseString.toString())
-                         }
-                     })
-                 }
-             }*/
-            frist = false
-        }
-
     }
 
 
@@ -234,24 +204,19 @@
             val json = JSONObject(message)
             val method = json.optString("method")
             if (method != "OK") {
-                Log.d("zmc-socket", message)
+                Log.d(TAG, message)
             }
             val data = json.optString("data")
             val code = json.optInt("code", -1)
             if (code == 200) {
-                Log.e(" 订单: ", method)
+                Log.e(TAG, "method: $method")
                 when (method) {
                     Const.SOCKET_METHOD.OK -> {
-                        testReceiveNum++
+
                     }
 
                     Const.SOCKET_METHOD.OFFLINE -> {
                         logRecord("socket==>账号被挤下线:$data")
-                        val simpleData =
-                            Gson().fromJson(
-                                data,
-                                OrderSimpleData::class.java
-                            )
                         CacheUtil.get().clear()
                         CacheKey.putKeyStr("isAgreen", "1")
                         NettyClient.getInstance().stopService()
@@ -265,42 +230,31 @@
 
                     Const.SOCKET_METHOD.AFTER_WORK -> {
                         logRecord("socket==>强制下线:$data")
-                        val simpleData =
-                            Gson().fromJson(
-                                data,
-                                OrderSimpleData::class.java
-                            )
+                        val simpleData = Gson().fromJson(
+                            data, OrderSimpleData::class.java
+                        )
                         EventBus.getDefault().post(BaseEvent(BaseEvent.FORCED_OFFLINE))
-                        val act = activities[activities.size - 1]
+                        val act = getTopActivity()
                         (act as PublicServiceActivity).forceOffline(
-                            simpleData.audioUrl,
-                            simpleData.msg
+                            simpleData.audioUrl, simpleData.msg
                         )
                         if (act is PublicServiceDialogActivity) act.finish()
                     }
 
                     Const.SOCKET_METHOD.ORDER_STATUS -> {
                         logRecord("socket==>订单状态改变:$data")
-                        val orderSimpleData =
-                            Gson().fromJson(
-                                data,
-                                OrderSimpleData::class.java
-                            )
-
-                        OrderTimeOutManager.instance.checkOrderManager(
-                            "${orderSimpleData.orderId}",
-                            "${orderSimpleData.orderType}",
-                            orderSimpleData.status
+                        val orderSimpleData = Gson().fromJson(
+                            data, OrderSimpleData::class.java
                         )
 
                         for (view in orderStatueViews.asReversed().indices) {
                             orderStatueViews[view].orderInfo(orderSimpleData)
                         }
                         if (orderSimpleData.status == 1) {
-                            val act = activities[activities.size - 1]
-//                                    MyApplication.getTTsManager().setVideoText("收到新的订单")
+                            val act = getTopActivity()
+//                          MyApplication.getTTsManager().setVideoText("收到新的订单")
 
-                            Log.e(" 订单: ", "showOrder")
+                            logRecord("socket==>收到新的订单")
                             when (orderSimpleData.orderType) {
 
                                 1, 2 -> {
@@ -327,20 +281,19 @@
                             }
                         }
                         if (orderSimpleData.status == 2) {
-                            val act = activities[activities.size - 1]
+                            logRecord("socket==>处理订单")
+                            val act = getTopActivity()
                             when (orderSimpleData.orderType) {
                                 1, 2 -> {
                                     (act as PublicServiceActivity).toDorderAct(
-                                        orderSimpleData.orderId.toString(),
-                                        orderSimpleData.orderType.toString()
+                                        orderSimpleData.orderId.toString(), orderSimpleData.orderType.toString()
                                     )
                                     if (act is PublicServiceDialogActivity) act.finish()
                                 }
 
                                 4, 5 -> {
                                     act?.startActivity<SmallCargoActivity>(
-                                        "orderId" to orderSimpleData.orderId.toString(),
-                                        "orderType" to orderSimpleData.orderType.toString()
+                                        "orderId" to orderSimpleData.orderId.toString(), "orderType" to orderSimpleData.orderType.toString()
                                     )
                                 }
 
@@ -350,32 +303,30 @@
                             }
                         }
                         if (orderSimpleData.status == 10 || orderSimpleData.status == 12) {
+                            logRecord("socket==>订单被取消")
                             val map = getMapByAny()
                             map["orderId"] = orderSimpleData.orderId
                             map["orderType"] = orderSimpleData.orderType
                             EventBus.getDefault().post(BaseEvent(BaseEvent.ORDER_CANCEL))
-                            callNet(this, Api.queryOrderInfo, map) {
+                            callNet1(this, Api.queryOrderInfo, map, clickAction = {
+                                logRecord("socket==>订单被取消获取订单详情成功data:$it")
                                 val message = Message().apply {
                                     what = MSG_ORDER_CANCEL
                                     obj = Pair(it, orderSimpleData)
                                 }
                                 mHandler.sendMessage(message)
-                            }
+                            }, errorAction = { code, msg ->
+                                logRecord("socket==>订单被取消获取订单详情失败code:${code} msg:${msg}")
+                            }, showError = false)
                         }
                     }
 
                     Const.SOCKET_METHOD.OFFLINE_PAYMENT -> {
                         logRecord("socket==>离线支付:$data")
-                        val orderSimpleData =
-                            Gson().fromJson(
-                                data,
-                                OrderResData::class.java
-                            )
-                        val act = activities[activities.size - 1]
+                        val orderSimpleData = Gson().fromJson(data, OrderResData::class.java)
+                        val act = getTopActivity()
                         (act as PublicServiceActivity).showDriverPayDialog(
-                            orderSimpleData.audioUrl,
-                            orderSimpleData.orderId.toString(),
-                            orderSimpleData.orderType.toString(), orderSimpleData.money
+                            orderSimpleData.audioUrl, orderSimpleData.orderId.toString(), orderSimpleData.orderType.toString(), orderSimpleData.money
                         )
                         if (act is PublicServiceDialogActivity) act.finish()
                     }
@@ -387,10 +338,6 @@
 
                     Const.SOCKET_METHOD.REASSIGN -> {
                         logRecord("socket==>改派:$data")
-                        Log.e(
-                            "zmc-socket",
-                            "EventBus.getDefault().post(BaseEvent(BaseEvent.REFREASH_MAIN))"
-                        )
                         EventBus.getDefault().post(BaseEvent(BaseEvent.REFREASH_MAIN))
 
 //                        val orderSimpleData =
@@ -398,7 +345,7 @@
 //                                data,
 //                                OrderResData::class.java
 //                            )
-//                        val act = activities[activities.size - 1]
+//                        val act = getTopActivity()
 //                        when (orderSimpleData.orderType) {
 ////                                    1, 2, 4 -> {
 ////                                        (act as PublicServiceActivity).showOrder(
@@ -431,11 +378,9 @@
                         val jsob = JSONObject(data)
 //                                if (jsob.optString("status") == "1") { // 只处理 申请订单消息
                         logRecord("socket==>修改目的地:$jsob")
-                        val act = activities[activities.size - 1]
+                        val act = getTopActivity()
                         (act as PublicServiceActivity).modifyAddress(
-                            jsob.optString("audioUrl"),
-                            jsob.optString("orderId"),
-                            jsob.optString("orderType")
+                            jsob.optString("audioUrl"), jsob.optString("orderId"), jsob.optString("orderType")
                         )
 //                                }
                         if (act is PublicServiceDialogActivity) act.finish()
@@ -444,7 +389,7 @@
                     Const.SOCKET_METHOD.ORDER_TIME_OUT -> {
                         val jsob = JSONObject(data)
                         logRecord("socket==>订单超时:$jsob")
-                        val act = activities[activities.size - 1]
+                        val act = getTopActivity()
 
                         /**
                          * 司机超时推送
@@ -465,10 +410,7 @@
                             if (act is PublicServiceDialogActivity) act.finish()
                         } else if (timeOutType == "2") { // 提示并查看订单详情
                             (act as PublicServiceActivity).goOrderTips(
-                                orderId,
-                                orderType,
-                                audioUrl,
-                                describe
+                                orderId, orderType, audioUrl, describe
                             )
                             if (act is PublicServiceDialogActivity) act.finish()
                         }
@@ -480,12 +422,11 @@
                         when (jsob.optString("status")) { // status 1=申请,2=同意,3=拒绝
                             "1" -> {}
                             "2" -> {
-                                EventBus.getDefault()
-                                    .post(BaseEvent(BaseEvent.DIFF_PRICE_AGREE))
+                                EventBus.getDefault().post(BaseEvent(BaseEvent.DIFF_PRICE_AGREE))
                             }
 
                             "3" -> {
-                                val act = activities[activities.size - 1]
+                                val act = getTopActivity()
                                 val tips = "${act!!.getString(R.string.您的包裹订单)}${
                                     jsob.optString("orderId")
                                 }\n${
@@ -493,11 +434,9 @@
                                 } ${act.getString(R.string.money)} ${jsob.optString("money")} ${
                                     act.getString(R.string.补差价被拒)
                                 }"
-                                EventBus.getDefault()
-                                    .post(BaseEvent(BaseEvent.DIFF_PRICE_REFUSE))
+                                EventBus.getDefault().post(BaseEvent(BaseEvent.DIFF_PRICE_REFUSE))
                                 (act as PublicServiceActivity).onlyTips(
-                                    jsob.optString("audioUrl"),
-                                    tips
+                                    jsob.optString("audioUrl"), tips
                                 )
                                 if (act is PublicServiceDialogActivity) act.finish()
                             }
@@ -506,7 +445,7 @@
 
                 }
             } else {
-                sysErr("socket return code ===$code")
+                Log.e(TAG, "socket return code ===$code")
             }
         } catch (e: Exception) {
             e.printStackTrace()
@@ -514,22 +453,20 @@
     }
 
     private fun getOrderWhenNoSocket() {
-        Log.e("sendLocation: ", "定时获取司机订单数据" + (getUserId() != -1).toString())
+        Log.e(TAG, "定时获取socket数据" + (getUserId() != -1).toString())
         if (getUserId() != -1) {
             val map = getMapByAny()
             callNet1(this, Api.getDriverOrderMessage, map, clickAction = {
-                logRecord("getOrderWhenNoSocket 获取订单成功 $it")
                 initnetdata(it ?: "")
-            }, {
-                logRecord("getOrderWhenNoSocket 获取订单失败")
+            }, { code, msg ->
+                Log.e(TAG, "定时获取socket数据: code:${code} msg:${msg}")
             }, false)
         }
     }
 
     private fun sendLocation() {
         Log.e(
-            "sendLocation: ",
-            "发送定位 userId = ${getUserId()}, aMapLocation = ${Gson().toJson(aMapLocation)}"
+            TAG, "发送定位 userId = ${getUserId()}, latitude = ${aMapLocation?.latitude},longitude = ${aMapLocation?.longitude}"
         )
         if (getUserId() != -1 && aMapLocation != null) {
             val map = getMapByAny()
@@ -538,11 +475,8 @@
             map["driverId"] = getUserId()
             map["lon"] = aMapLocation!!.longitude
             map["lat"] = aMapLocation!!.latitude
-            logRecord("sendLocation 发送定位参数" + Gson().toJson(map))
-            callNet1(this, Api.saveOrderPosition, map, clickAction = {
-                logRecord("sendLocation 发送定位成功")
-            }, {
-                logRecord("sendLocation 发送定位失败")
+            callNet1(this, Api.saveOrderPosition, map, clickAction = {}, { code, msg ->
+                Log.e(TAG, "saveOrderPosition失败: code:${code} msg:${msg}")
             }, false)
 
             val map1 = getMapByAny()
@@ -554,30 +488,22 @@
             map1["altitude"] = 0
             map1["directionAngle"] = 0
 
-            callNet1(this, Api.positionSocket, map1, clickAction = {
-                logRecord("positionSocket 发送定位成功")
-            }, {
-                logRecord("positionSocket 发送定位失败")
+            callNet1(this, Api.positionSocket, map1, clickAction = {}, { code, msg ->
+                Log.e(TAG, "positionSocket失败: code:${code} msg:${msg}")
             }, false)
         }
     }
 
-    val TAG = "MyApplication"
+    private val TAG = "MyApplication"
     private fun sendHeart() {
         if (getUserId() != -1) {
-            logRecord("sendHeart: userId = " + getUserId())
             val bean = HeartBean()
             bean.data = HeartBean.DataBean()
             NettyClient.getInstance().sendMessage(Gson().toJson(bean))
             sendLocation()
-            if (heartHandler == null) {
-                heartHandler = Handler(mainLooper)
-            }
-            heartHandler!!.removeCallbacksAndMessages(null)
-            testHeartNunm++
+            heartHandler.removeCallbacksAndMessages(null)
 //            if ((System.currentTimeMillis() - currentTime) / 1000 > 3) {
             // sysErr("sendHeart_websocket 重新连接")
-            logRecord("sendHeart check socket status")
             currentTime = System.currentTimeMillis()
             val nettyState = NettyClient.getInstance().checkNettyState()
             if (!nettyState) {
@@ -587,7 +513,7 @@
 //                sysErr("sendHeart_websocket 发送心跳")
 //            }
         }
-        heartHandler!!.postDelayed({ sendHeart() }, 5000)
+        heartHandler.postDelayed({ sendHeart() }, 5000)
     }
 
     interface OrderStatueView {
@@ -596,14 +522,12 @@
 
 
     companion object {
-        var frist = true
-        private const val TAG = "MyApplication"
-        public var appContext: MyApplication? = null
+        var appContext: MyApplication? = null
         var mTtsManager: AudioRecoderUtils? = null
         var isPlayVoice = true
         var lastPlayTime = 0L //上次提示播放时间
         var hasAutoGoTripping = false //true 本次启动已经自动跳转过
-        public var isLogin: Boolean = true
+        var isLogin: Boolean = true
         fun getInstance(): MyApplication? {
             if (appContext == null) {
                 appContext = MyApplication()
@@ -619,82 +543,22 @@
         }
 
         fun getLocation(): LatLng? {
-            if (aMapLocation == null) {
-                return null
-            } else {
-                return aMapLocation!!
-            }
+            return aMapLocation
         }
 
-        fun tts(content: String) {
-            Thread {
-
-                TextToSpeechClient.create().use { textToSpeechClient ->
-                    // Set the text input to be synthesized
-                    val input: SynthesisInput =
-                        SynthesisInput.newBuilder().setText(content).build()
-
-                    // Build the voice request, select the language code ("en-US") and the ssml voice gender
-                    // ("neutral")
-                    val voice: VoiceSelectionParams = VoiceSelectionParams.newBuilder()
-                        .setLanguageCode("en-US")
-                        .setSsmlGender(SsmlVoiceGender.NEUTRAL)
-                        .build()
-
-                    // Select the type of audio file you want returned
-                    val audioConfig: AudioConfig =
-                        AudioConfig.newBuilder().setAudioEncoding(AudioEncoding.MP3).build()
-
-                    // Perform the text-to-speech request on the text input with the selected voice parameters and
-                    // audio file type
-                    val response: SynthesizeSpeechResponse =
-                        textToSpeechClient.synthesizeSpeech(input, voice, audioConfig)
-
-                    // Get the audio contents from the response
-                    val audioContents: ByteString = response.getAudioContent()
-
-                    FileOutputStream("output.mp3").use { out ->
-                        out.write(audioContents.toByteArray())
-                        println("Audio content written to file \"output.mp3\"")
-                    }
-                }
-
-            }.start()
-        }
-
-        var aMapLocation: LatLng? = null
+        private var aMapLocation: LatLng? = null
         var currentOrderId: String = ""
         var currentOrderType: String = ""
-        var orderStatueViews: MutableList<OrderStatueView> =
-            mutableListOf()
-        var testHeartNunm = 0
-        var testReceiveNum = 0
-        fun handleSSLHandshake() {
-            try {
-                val trustAllCerts = arrayOf<TrustManager>(object : X509TrustManager {
-                    override fun getAcceptedIssuers(): Array<X509Certificate?> {
-                        return arrayOfNulls(0)
-                    }
+        var orderStatueViews: MutableList<OrderStatueView> = mutableListOf()
 
-                    override fun checkClientTrusted(
-                        certs: Array<X509Certificate>,
-                        authType: String,
-                    ) {
-                    }
+        //设置定位
+        fun setLocation(latLng: LatLng) {
+            setLocation(latLng.latitude, latLng.longitude)
+        }
 
-                    override fun checkServerTrusted(
-                        certs: Array<X509Certificate>,
-                        authType: String,
-                    ) {
-                    }
-                })
-                val sc = SSLContext.getInstance("TLS")
-                // trustAllCerts信任所有的证书
-                sc.init(null, trustAllCerts, SecureRandom())
-                HttpsURLConnection.setDefaultSSLSocketFactory(sc.socketFactory)
-                HttpsURLConnection.setDefaultHostnameVerifier { hostname, session -> true }
-            } catch (ignored: Exception) {
-            }
+        //设置定位
+        fun setLocation(latitude: Double, longitude: Double) {
+            this.aMapLocation = LatLng(latitude, longitude)
         }
 
         fun addOrderView(view: OrderStatueView) {
@@ -708,7 +572,13 @@
         }
     }
 
-    val activities = ArrayList<Activity?>()
+    private val activities = ArrayList<Activity?>()
+
+    //获取顶部activity
+    private fun getTopActivity(): Activity? {
+        return activities.lastOrNull()
+    }
+
     private var showNum = 0
 
     fun finishAll() {
@@ -717,36 +587,20 @@
         }
     }
 
-    fun getCurrentActivity(): Activity? {
-        var act: Activity? = try {
-            activities[activities.size - 1]
-        } catch (e: Exception) {
-            null
-        }
-        return act
-    }
-
-
     override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {
         activities.add(activity)
         logRecord("onActivityCreated: " + activity.javaClass.name)
         if (activity is MyBaseActivity) {
-            activity.supportFragmentManager.registerFragmentLifecycleCallbacks(object :
-                FragmentManager.FragmentLifecycleCallbacks() {
+            activity.supportFragmentManager.registerFragmentLifecycleCallbacks(object : FragmentManager.FragmentLifecycleCallbacks() {
                 override fun onFragmentCreated(
-                    fm: FragmentManager,
-                    f: Fragment,
-                    savedInstanceState: Bundle?
+                    fm: FragmentManager, f: Fragment, savedInstanceState: Bundle?
                 ) {
                     super.onFragmentCreated(fm, f, savedInstanceState)
                     logRecord("onFragmentCreated: " + f.javaClass.name)
                 }
 
                 override fun onFragmentViewCreated(
-                    fm: FragmentManager,
-                    f: Fragment,
-                    v: View,
-                    savedInstanceState: Bundle?
+                    fm: FragmentManager, f: Fragment, v: View, savedInstanceState: Bundle?
                 ) {
                     super.onFragmentViewCreated(fm, f, v, savedInstanceState)
                     logRecord("onFragmentViewCreated: " + f.javaClass.name)
diff --git a/app/src/main/java/com/driver/igotrip/base/OrderTimeOutManager.kt b/app/src/main/java/com/driver/igotrip/base/OrderTimeOutManager.kt
deleted file mode 100644
index f792d45..0000000
--- a/app/src/main/java/com/driver/igotrip/base/OrderTimeOutManager.kt
+++ /dev/null
@@ -1,159 +0,0 @@
-package com.driver.igotrip.base
-
-import android.os.CountDownTimer
-import android.util.ArrayMap
-import cn.sinata.xldutils.utils.SPUtils
-import com.driver.igotrip.R
-import com.driver.igotrip.base.Const.language
-import com.driver.igotrip.base.MyApplication.Companion.appContext
-import com.driver.igotrip.bean.OrderBean
-import com.driver.igotrip.bean.OrderListBean
-import com.driver.igotrip.bean.StringBean
-import com.driver.igotrip.netUtls.Api
-import com.driver.igotrip.netUtls.callNet
-import com.driver.igotrip.netUtls.getMapByAny
-import com.google.gson.Gson
-import java.text.SimpleDateFormat
-
-
-class OrderTimeOutManager {
-
-    companion object {
-
-        @Volatile
-        var manager: OrderTimeOutManager? = null
-
-        @JvmStatic
-        val instance: OrderTimeOutManager
-            get() {
-                if (manager == null) {
-                    synchronized(OrderTimeOutManager::class.java) {
-                        if (manager == null) {
-                            manager = OrderTimeOutManager()
-                        }
-                    }
-                }
-                return manager!!
-            }
-    }
-
-    // 创建日期时间格式器
-    val formatter = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
-
-    @Volatile
-    var orderMap: MutableMap<String, Pair<OrderBean.DataBean, CountDownTimer>> = ArrayMap()
-
-    @Synchronized
-    fun getSyncOrderMap() = orderMap
-
-    /**
-     * 需求改动 通过服务器消息去做超时处理 本地处理屏蔽掉
-     */
-    fun init() {
-//        val map = getMapByAny()
-//        map["state"] = 1
-//        map["size"] = 10
-//        map["pageNum"] = 1
-//        callNet(appContext!!, Api.queryOrderList, map) {
-//            val data = Gson().fromJson<OrderListBean>(it, OrderListBean::class.java)
-//            data.data.forEach {
-//                checkOrderManager("${it.id}", "${it.type}", it.state)
-//            }
-//        }
-    }
-
-    /*目前只对订单类型是 1 4 的添加倒计时*/
-    fun checkOrderManager(orderId: String, orderType: String, orderStatus: Int) {
-//        if (orderType == "1" || orderType == "4") {
-//            if (orderStatus == 2 || orderStatus == 3) { // 待出发
-//                if (getSyncOrderMap()[orderId] == null) {
-//                    val map = getMapByAny()
-//                    map["orderId"] = orderId
-//                    map["orderType"] = orderType
-//                    callNet(appContext!!, Api.queryOrderInfo, map) {
-//                        val data = Gson().fromJson<OrderBean>(it, OrderBean::class.java).data
-//                        if (data.orderState == 2 || data.orderState == 3) { // 走流程那儿传的是上次状态 所以获取到订单详情后 在判断一次状态
-//                            try {
-//                                // 解析时间字符串为 Date 对象
-//                                val date = formatter.parse(data.snatchOrderTime)
-//                                val orderTimeOut = (date?.time ?: 0) + data.timeOutCancel * 60 * 1000
-//                                val currentTime = System.currentTimeMillis()
-//                                if (orderTimeOut > currentTime) { // 未超时
-//                                    val time =
-//                                        object : CountDownTimer(orderTimeOut - currentTime, 1000) {
-//                                            override fun onTick(millisUntilFinished: Long) {}
-//                                            override fun onFinish() {
-//                                                timeOutTips(orderType,data)
-//                                            }
-//                                        }
-//                                    time.start()
-//                                    getSyncOrderMap()[orderId] = Pair(data, time)
-//                                } else {
-//                                    timeOutTips(orderType,data)
-//                                }
-//                            } catch (e: Exception) {
-//                                e.printStackTrace()
-//                            }
-//                        } else {
-//                            removeItem(orderId)
-//                        }
-//                    }
-//                }
-//            } else {
-//                removeItem(orderId)
-//            }
-//        }
-    }
-
-//    private fun timeOutTips(orderType:String,order: OrderBean.DataBean) {
-        // 订单超时提示
-//        appContext?.getCurrentActivity()?.let {
-//            val tips ="${getString(R.string.您已超时)} ${order.timeOutCancel} ${getString(R.string.免费取消订单)}"
-//            (it as MyBaseActivity).onlyTips("",tips)
-//            val map = getMapByAny()
-//            map["fileName"] = "timeout_${order.orderId}_${orderType}"
-//            map["text"] = tips
-//            map["languageCode"] = getTypeByLanguage()
-//            callNet(appContext!!, Api.queryOrderInfo, map) {
-//                val data = Gson().fromJson<StringBean>(it, StringBean::class.java).data
-//                MyApplication.getTTsManager().setVideoText(data)
-//            }
-//        }
-//        removeItem("${order.orderId}")
-//        // 修改逻辑 一分钟一次 直到状态改变
-//        val time = object : CountDownTimer(60 * 1000L, 1000) {
-//            override fun onTick(millisUntilFinished: Long) {}
-//            override fun onFinish() {
-//                checkOrderManager("${order.orderId}", order.type, order.orderState)
-//            }
-//        }
-//        time.start()
-//    }
-
-//    fun getTypeByLanguage(): String {
-//        val lang = SPUtils.getString(Const.language)
-//        var type = 0
-//        if (lang == null || lang.isEmpty() || lang == Const.Language.CHINESE || lang == "zh") {
-//            type = 1
-//        }
-//        if (lang == Const.Language.ENGLISH) {
-//            type = 2
-//        }
-//        if (lang == Const.Language.FRENCH) {
-//            type = 3
-//        }
-//        return if (type == 1) "cmn-CN" else if (type == 2) "en-US" else "fr-FR"
-//    }
-
-//    private fun getString(id: Int): String {
-//        return appContext?.getString(id) ?: ""
-//    }
-
-//    private fun removeItem(orderId: String) {
-//        getSyncOrderMap()[orderId]?.let { pair ->
-//            pair.second.cancel()
-//            getSyncOrderMap().remove(orderId)
-//        }
-//    }
-
-}
\ No newline at end of file
diff --git a/app/src/main/java/com/driver/igotrip/base/gaode/AMapKit.kt b/app/src/main/java/com/driver/igotrip/base/gaode/AMapKit.kt
index def1da1..fc39134 100644
--- a/app/src/main/java/com/driver/igotrip/base/gaode/AMapKit.kt
+++ b/app/src/main/java/com/driver/igotrip/base/gaode/AMapKit.kt
@@ -43,6 +43,7 @@
 import com.google.android.gms.maps.model.Polyline
 import com.google.android.gms.maps.model.PolylineOptions
 import com.google.gson.Gson
+import com.tbruyelle.rxpermissions2.RxPermissions
 import okhttp3.MediaType.Companion.toMediaTypeOrNull
 import okhttp3.OkHttpClient
 import okhttp3.Request
@@ -90,24 +91,31 @@
 
 
     fun initMap(mapView: SupportMapFragment, function: (GoogleMap) -> Unit) {
-        mapView.getMapAsync { p0 ->
-            val mMyLocationStyle = GoogleMapOptions()
-            p0.uiSettings.isMyLocationButtonEnabled = false
-            p0.setMinZoomPreference(6.0f);
-            p0.setMaxZoomPreference(16.0f);
-            //                mMyLocationStyle.interval(5000)
-            //                mMyLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER)
-            //                mMyLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.mipmap.gps_point))
-            //                p0.setLocationSource() = mMyLocationStyle
-            //                p0.isMyLocationEnabled = false
-            //                p0.animateCamera(CameraUpdateFactory.zoomTo(aMap.maxZoomLevel - 3))
-            // 设置定位的类型为定位模式,有定位、跟随或地图根据面向方向旋转几种
-            //                p0.setMyLocationType(GoogleMap.LOCATION_TYPE_LOCATE)
-            //                val uiSettings: UiSettings = aMap.uiSettings
-            //                uiSettings.isZoomControlsEnabled = false
-            function(p0)
-        }
-
+        val subscribe =
+            RxPermissions(mapView.requireActivity()).request(Manifest.permission.ACCESS_FINE_LOCATION)
+                .subscribe {
+                    if (it) {
+                        mapView.getMapAsync { p0 ->
+                            val mMyLocationStyle = GoogleMapOptions()
+                            p0.uiSettings.isMyLocationButtonEnabled = false
+                            p0.setMinZoomPreference(6.0f);
+                            p0.setMaxZoomPreference(16.0f);
+                            //                mMyLocationStyle.interval(5000)
+                            //                mMyLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER)
+                            //                mMyLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.mipmap.gps_point))
+                            //                p0.setLocationSource() = mMyLocationStyle
+                            //                p0.isMyLocationEnabled = false
+                            //                p0.animateCamera(CameraUpdateFactory.zoomTo(aMap.maxZoomLevel - 3))
+                            // 设置定位的类型为定位模式,有定位、跟随或地图根据面向方向旋转几种
+                            //                p0.setMyLocationType(GoogleMap.LOCATION_TYPE_LOCATE)
+                            //                val uiSettings: UiSettings = aMap.uiSettings
+                            //                uiSettings.isZoomControlsEnabled = false
+                            function(p0)
+                        }
+                    } else {
+                        Log.e("map", "没有权限")
+                    }
+                }
     }
 
     /**
diff --git a/app/src/main/java/com/driver/igotrip/base/gaode/NaviGoogleActivity.kt b/app/src/main/java/com/driver/igotrip/base/gaode/NaviGoogleActivity.kt
index 42b94a0..f9d227b 100644
--- a/app/src/main/java/com/driver/igotrip/base/gaode/NaviGoogleActivity.kt
+++ b/app/src/main/java/com/driver/igotrip/base/gaode/NaviGoogleActivity.kt
@@ -213,6 +213,6 @@
     }
 
     private val listener = RoadSnappedLocationProvider.LocationListener {
-        MyApplication.aMapLocation = LatLng(it.latitude, it.longitude)
+        MyApplication.setLocation(it.latitude, it.longitude)
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/driver/igotrip/base/local/BasePhotoActivity.kt b/app/src/main/java/com/driver/igotrip/base/local/BasePhotoActivity.kt
index f94e515..e6453cf 100644
--- a/app/src/main/java/com/driver/igotrip/base/local/BasePhotoActivity.kt
+++ b/app/src/main/java/com/driver/igotrip/base/local/BasePhotoActivity.kt
@@ -24,7 +24,6 @@
 import android.widget.TextView
 import androidx.activity.ComponentActivity
 import androidx.loader.content.CursorLoader
-import cn.sinata.xldutils.utils.sysErr
 import com.driver.igotrip.R
 import com.driver.igotrip.bean.StringBean
 import com.driver.igotrip.netUtls.Api
@@ -212,7 +211,7 @@
                 }*/
                 println("上传开始:"+filePath)
                 Log.e( "文件是否存在: 上传开始",File(filePath).exists().toString() )
-                HttpManager.getInstance().post<BaseBean<String>>(Api.upImage, File(filePath),object :MyObserver(this){
+                HttpManager.getInstance().post(Api.upImage, File(filePath),object :MyObserver(this){
                     override fun success(responseString: String?) {
                         val fromJson = gson.fromJson<StringBean>(responseString, StringBean::class.java)
                         var url = fromJson.data
@@ -221,7 +220,6 @@
                             showNum--
                             Handler(mainLooper).post {
                                 Log.d("showNum==", "showNum==========" + showNum.toString())
-                                sysErr(url)
                                 if (showNum <= 0)
                                     dismissDialog()
                                 getPhoneUrl(url!!, type, copyFile)
diff --git a/app/src/main/java/com/driver/igotrip/netUtls/Api.java b/app/src/main/java/com/driver/igotrip/netUtls/Api.java
index 8154b0c..2446c5f 100644
--- a/app/src/main/java/com/driver/igotrip/netUtls/Api.java
+++ b/app/src/main/java/com/driver/igotrip/netUtls/Api.java
@@ -165,6 +165,7 @@
     public static String completeOrder ="api/order/completeOrder";//手动确认订单完成
 
     public static String companyList ="base/driver/companyList";//获取运营公司列表
+    public static String saveLog ="api/appLog/save";//手机端日志记录
 
 
 
diff --git a/app/src/main/java/com/driver/igotrip/netUtls/HttpManager.java b/app/src/main/java/com/driver/igotrip/netUtls/HttpManager.java
index 74a5e36..c1a3106 100644
--- a/app/src/main/java/com/driver/igotrip/netUtls/HttpManager.java
+++ b/app/src/main/java/com/driver/igotrip/netUtls/HttpManager.java
@@ -17,12 +17,12 @@
 import java.io.IOException;
 import java.lang.reflect.Type;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 import cn.sinata.xldutils.utils.SPUtils;
+import io.reactivex.Observable;
 import io.reactivex.Observer;
 import io.reactivex.android.schedulers.AndroidSchedulers;
 import io.reactivex.schedulers.Schedulers;
@@ -132,9 +132,9 @@
         httpLoggingInterceptor.level(HttpLoggingInterceptor.Level.BODY);
         builder.addInterceptor(httpLoggingInterceptor);
 
-        LoggingInterceptor loggingInterceptor = new LoggingInterceptor();
-        loggingInterceptor.setLevel(BuildConfig.DEBUG ? LoggingInterceptor.Level.BODY : LoggingInterceptor.Level.NONE);
-        builder.addInterceptor(loggingInterceptor);
+        if (BuildConfig.DEBUG) {
+            builder.addInterceptor(new LoggingInterceptor());
+        }
 
         Retrofit.Builder builder1 = new Retrofit.Builder()
                 .client(builder.build())                                    // 配置监听请求
@@ -197,32 +197,27 @@
 //    public <T extends BaseBean> void post(final String action, Map<String, Object> params,
     public void post(final String action, Map<String, Object> params,
                      Observer<ResponseBody> observer) {
+        post(action, params)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(observer);
+    }
+
+    /**
+     * Post请求
+     *
+     * @param action 请求接口的尾址
+     * @param params 请求参数
+     */
+    public Observable<ResponseBody> post(final String action, Map<String, Object> params) {
         if (params == null) {
             params = new HashMap<>();
         }
         int type = getTypeByLanguage();
         params.put(Const.language, type); // 1 中文 2 英文 3 法文
-        StringBuilder pwd = new StringBuilder();
-        pwd.append(action);
-        if (params.size() != 0) {
-            pwd.append("?");
-        }
-        Iterator<Map.Entry<String, Object>> iterator = params.entrySet().iterator();
-        while (iterator.hasNext()) {
-            Map.Entry<String, Object> entry = iterator.next();
-            pwd.append(entry.getKey()).append("=").append(entry.getValue());
-            if (iterator.hasNext()) {
-                pwd.append("&");
-            }
-        }
-
-        Map<String, Object> par = new HashMap<>();
         ApiServics jsonService = initBaseData(action).create(ApiServics.class);
         LogUtils.d("post", params.toString());
-        jsonService.postResult(action, headerParams, params)
-                .subscribeOn(Schedulers.io())
-                .observeOn(AndroidSchedulers.mainThread())
-                .subscribe(observer);
+        return jsonService.postResult(action, headerParams, params);
     }
 
     /**
@@ -242,28 +237,31 @@
      * @param action   请求接口的尾址
      * @param fileName 文件名
      */
-    public <T extends BaseBean> void post(final String action, File fileName,
-                                          Observer<ResponseBody> observer) {
+    public void post(final String action, File fileName, Observer<ResponseBody> observer) {
+        post(action, fileName)
+                .subscribeOn(Schedulers.io())
+                .observeOn(AndroidSchedulers.mainThread())
+                .subscribe(observer);
+    }
 
-
+    /**
+     * Post请求
+     *
+     * @param action 请求接口的尾址
+     * @param file   文件
+     */
+    public Observable<ResponseBody> post(final String action, File file) {
         ApiServics service = initBaseData(action).create(ApiServics.class);
 
         // https://github.com/iPaulPro/aFileChooser/blob/master/aFileChooser/src/com/ipaulpro/afilechooser/utils/FileUtils.java
         // use the FileUtils to get the actual file by uri
-        File file = fileName;
 
         // create RequestBody instance from file
-        RequestBody requestFile =
-                RequestBody.create(MediaType.parse("multipart/form-data"), file);
+        RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
 
         // MultipartBody.Part is used to send also the actual file name
-        MultipartBody.Part body =
-                MultipartBody.Part.createFormData("file", file.getName(), requestFile);
-        service.upload(action, body)
-                .subscribeOn(Schedulers.io())
-                .observeOn(AndroidSchedulers.mainThread())
-                .subscribe(observer);
-
+        MultipartBody.Part body = MultipartBody.Part.createFormData("file", file.getName(), requestFile);
+        return service.upload(action, body);
     }
 
 
diff --git a/app/src/main/java/com/driver/igotrip/netUtls/LoggingInterceptor.java b/app/src/main/java/com/driver/igotrip/netUtls/LoggingInterceptor.java
index 038af8b..32a724a 100644
--- a/app/src/main/java/com/driver/igotrip/netUtls/LoggingInterceptor.java
+++ b/app/src/main/java/com/driver/igotrip/netUtls/LoggingInterceptor.java
@@ -18,21 +18,6 @@
 
     private static final String TAG = "zmc-Log";
 
-    private volatile Level level = Level.NONE;
-
-    public Level getLevel() {
-        return level;
-    }
-
-    public void setLevel(Level l) {
-        level = l;
-    }
-
-    public enum Level {
-        NONE,
-        BODY
-    }
-
     @Override
     public Response intercept(Chain chain) throws IOException {
         Request request = chain.request();
diff --git a/app/src/main/java/com/driver/igotrip/netUtls/NetKit.kt b/app/src/main/java/com/driver/igotrip/netUtls/NetKit.kt
index 61b5b5c..0832726 100644
--- a/app/src/main/java/com/driver/igotrip/netUtls/NetKit.kt
+++ b/app/src/main/java/com/driver/igotrip/netUtls/NetKit.kt
@@ -7,12 +7,10 @@
 import android.view.LayoutInflater
 import android.view.View
 import cn.sinata.xldutils.activitys.BaseActivity
-import cn.sinata.xldutils.utils.Base64
 import com.driver.igotrip.base.MyBaseActivity
 import com.driver.igotrip.base.MyBaseFragment
 import com.driver.igotrip.utils.Cache.CacheKey
 import com.driver.igotrip.utils.DES
-import kotlin.collections.HashMap
 
 fun delayTo(time: Long, clickAction: () -> Unit) {
     Handler(Looper.getMainLooper()).postDelayed({
@@ -34,6 +32,16 @@
     map: HashMap<String?, Any?>,
     clickAction: (responseString: String?) -> Unit
 ) {
+    callNet(showDialog, api, map, clickAction) { _, _ -> }
+}
+
+fun BaseActivity.callNet(
+    showDialog: Boolean,
+    api: String,
+    map: HashMap<String?, Any?>,
+    clickAction: (responseString: String?) -> Unit,
+    clickActionError: (code: Int, errorString: String?) -> Unit
+) {
     if (showDialog)
         showDialog()
     if (api.startsWith("api")) {
@@ -48,6 +56,10 @@
             clickAction(responseString)
         }
 
+        override fun onError(code: Int, msg: String?, resposeString: String?) {
+            super.onError(code, msg, resposeString)
+            clickActionError(code, msg)
+        }
     })
 }
 
@@ -73,9 +85,9 @@
 
 fun getAppId(): String {
     var appid = CacheKey.getKeyStr("appid")
-    if (appid.isEmpty()){
+    if (appid.isEmpty()) {
         return ""
-    } else{
+    } else {
         return appid
     }
 }
@@ -92,17 +104,16 @@
     return CacheKey.getKeyStr("token")
 }
 
-
 fun MyBaseActivity.callNet(
     api: String,
     map: HashMap<String?, Any?>,
     clickAction: (responseString: String?) -> Unit,
-    clickActionError: (errorString: String?) -> Unit
+    clickActionError: (code: Int, msg: String?) -> Unit
 ) {
     this.showDialog()
     if (api.startsWith("api")) {
         map["appid"] = getAppId()
-        var sign = DES.getSign(map)
+        val sign = DES.getSign(map)
         map["sign"] = sign
     }
     HttpManager.getInstance().post(api, map, object : MyObserver(this) {
@@ -113,7 +124,7 @@
 
         override fun onError(code: Int, msg: String?, resposeString: String?) {
             super.onError(code, msg, resposeString)
-            clickActionError(msg)
+            clickActionError(code, msg)
         }
     })
 
@@ -195,7 +206,7 @@
     api: String,
     map: HashMap<String?, Any?>,
     clickAction: (responseString: String?) -> Unit,
-    errorAction: () -> Unit,showError:Boolean = true
+    errorAction: (code: Int, msg: String?) -> Unit, showError: Boolean = true
 ) {
     if (api.startsWith("api")) {
         map["appid"] = getAppId()
@@ -210,7 +221,7 @@
         override fun onError(code: Int, msg: String?, resposeString: String?) {
             if (showError)
                 super.onError(code, msg, resposeString)
-            errorAction()
+            errorAction(code, msg)
         }
     })
 }
@@ -263,7 +274,7 @@
 }
 
 
-fun timeOver(timeDown:Long,click: (mill: Int) -> Unit): CountDownTimer {
+fun timeOver(timeDown: Long, click: (mill: Int) -> Unit): CountDownTimer {
     val timer by lazy {
         object : CountDownTimer(timeDown, 1000) {
             override fun onFinish() {
diff --git a/app/src/main/java/com/driver/igotrip/ui/card/VerifyCardPwdActivity.kt b/app/src/main/java/com/driver/igotrip/ui/card/VerifyCardPwdActivity.kt
index ef99df5..030cf89 100644
--- a/app/src/main/java/com/driver/igotrip/ui/card/VerifyCardPwdActivity.kt
+++ b/app/src/main/java/com/driver/igotrip/ui/card/VerifyCardPwdActivity.kt
@@ -2,6 +2,7 @@
 
 import android.widget.EditText
 import android.widget.TextView
+import cn.sinata.rxnetty.LogHelper
 import cn.sinata.xldutils.utils.setDrawableNull
 import cn.sinata.xldutils.utils.setTextChange
 import com.driver.igotrip.R
@@ -43,28 +44,33 @@
             tv_four.text = ""
             tv_fif.text = ""
             tv_six.text = ""
-            var str = it.toCharArray()
+            val str = it.toCharArray()
             for (position in str.indices) {
                 when (position) {
                     0 -> {
                         tv_one.text = "*"
                     }
+
                     1 -> {
                         tv_two.text = "*"
 
                     }
+
                     2 -> {
                         tv_three.text = "*"
 
                     }
+
                     3 -> {
                         tv_four.text = "*"
 
                     }
+
                     4 -> {
                         tv_fif.text = "*"
 
                     }
+
                     5 -> {
                         tv_six.text = "*"
                     }
@@ -72,13 +78,15 @@
                 }
             }
             if (str.size == 6) {
-                var map = getMapByAny()
+                val map = getMapByAny()
                 map["withdrawPassword"] = it
-                callNet(Api.verificationWithdrawPassword, map,{
+                callNet(Api.verificationWithdrawPassword, map, {
+                    LogHelper.logRecord("申请提现提现密码验证成功type:${intent.getStringExtra("type")}")
                     toast(getString(R.string.验证成功))
                     startActivity<ApplyMoneyActivity>("type" to intent.getStringExtra("type"))
                     finish()
-                }) {
+                }) { code, msg ->
+                    LogHelper.logRecord("申请提现提现密码验证失败type:${intent.getStringExtra("type")} code:${code} msg:${msg}")
                     onBackPressed()
                 }
             }
diff --git a/app/src/main/java/com/driver/igotrip/ui/main/ChangPhoneActivity.kt b/app/src/main/java/com/driver/igotrip/ui/main/ChangPhoneActivity.kt
index 1eaeda0..907d0f7 100644
--- a/app/src/main/java/com/driver/igotrip/ui/main/ChangPhoneActivity.kt
+++ b/app/src/main/java/com/driver/igotrip/ui/main/ChangPhoneActivity.kt
@@ -1,95 +1,37 @@
 package com.driver.igotrip.ui.main
 
-import android.Manifest
 import android.annotation.SuppressLint
 import android.app.Activity
-import android.content.ActivityNotFoundException
 import android.content.Intent
-import android.os.Bundle
-import android.os.Handler
-import android.os.Looper
-import android.os.Message
-import android.provider.Settings
-import android.util.Log
 import android.util.TypedValue
-import android.view.Gravity
-import android.view.View
 import android.widget.EditText
-import android.widget.ImageView
-import android.widget.LinearLayout
 import android.widget.TextView
-import android.widget.Toast
 import androidx.lifecycle.lifecycleScope
-import cn.sinata.rxnetty.NettyClient
 import cn.sinata.xldutils.utils.SPUtils
-import cn.sinata.xldutils.utils.Utils
 import cn.sinata.xldutils.utils.clickDelay
-import cn.sinata.xldutils.utils.doubleOne
 import cn.sinata.xldutils.utils.getAreaCode
 import cn.sinata.xldutils.utils.getContent
-import cn.sinata.xldutils.utils.gone
-import cn.sinata.xldutils.utils.setDrawableLeft
-import cn.sinata.xldutils.utils.textColor
 import com.driver.igotrip.R
 import com.driver.igotrip.base.BaseEvent
 import com.driver.igotrip.base.Const
-import com.driver.igotrip.base.MyApplication
 import com.driver.igotrip.base.MyBaseActivity
-import com.driver.igotrip.base.OrderTimeOutManager
-import com.driver.igotrip.base.gaode.AMapKit
-import com.driver.igotrip.bean.BooleanBean
-import com.driver.igotrip.bean.HomeDataBean
-import com.driver.igotrip.bean.MyCarBean
-import com.driver.igotrip.bean.OrderSimpleData
-import com.driver.igotrip.bean.SelectServerModeBean
-import com.driver.igotrip.bean.TimeBean
-import com.driver.igotrip.bean.UpCarInfo
-import com.driver.igotrip.bean.VersionBean
 import com.driver.igotrip.netUtls.Api
 import com.driver.igotrip.netUtls.callNet
 import com.driver.igotrip.netUtls.getMapByAny
-import com.driver.igotrip.ui.DialogUtil
-import com.driver.igotrip.ui.DialogUtil.getDelAndSureDialog
-import com.driver.igotrip.ui.main.event.MineEventActivity
-import com.driver.igotrip.ui.mine.ChangeCarActivity
-import com.driver.igotrip.ui.mine.DriverAttestationActivity
-import com.driver.igotrip.ui.mine.MineActivity
-import com.driver.igotrip.ui.mine.MsgActivity
-import com.driver.igotrip.ui.mine.OfflinePayActivity
-import com.driver.igotrip.ui.mine.SafeVerifyActivity.Companion.BASE_URL
-import com.driver.igotrip.ui.mine.SafeVerifyActivity.Companion.WEB_SITE_KEY
 import com.driver.igotrip.ui.pub.AreaCodeActivity
 import com.driver.igotrip.ui.pub.LoginActivity
 import com.driver.igotrip.utils.Cache.CacheKey
 import com.driver.igotrip.utils.Cache.CacheUtil
-import com.driver.igotrip.utils.DateUtil
 import com.driver.igotrip.utils.PhoneCheckUtil
-import com.driver.mask_talk.utils.toTime
-import com.driver.mask_talk.utils.toTimeEnglish
-import com.driver.mask_talk.utils.toTimeFrench
-import com.google.android.gms.maps.GoogleMap
-import com.google.android.gms.maps.SupportMapFragment
-import com.google.android.gms.maps.model.LatLng
-import com.google.gson.Gson
-import com.google.recaptcha.sample.RecaptchaVisual
 import com.google.recaptcha.sample.RecaptchaVisualException
 import com.lljjcoder.style.citylist.Toast.ToastUtils
-import com.lzf.easyfloat.EasyFloat
-import com.lzf.easyfloat.enums.ShowPattern
-import com.lzf.easyfloat.enums.SidePattern
-import com.lzf.easyfloat.interfaces.OnInvokeView
-import com.tbruyelle.rxpermissions2.RxPermissions
 import com.trello.rxlifecycle3.android.ActivityEvent
-import com.wang.avi.AVLoadingIndicatorView
 import io.reactivex.Observable
 import io.reactivex.android.schedulers.AndroidSchedulers
 import io.reactivex.disposables.Disposable
 import io.reactivex.schedulers.Schedulers
 import kotlinx.coroutines.launch
 import org.greenrobot.eventbus.EventBus
-import org.greenrobot.eventbus.Subscribe
-import org.jetbrains.anko.browse
-import org.jetbrains.anko.dip
 import org.jetbrains.anko.find
 import org.jetbrains.anko.startActivity
 import org.jetbrains.anko.startActivityForResult
diff --git a/app/src/main/java/com/driver/igotrip/ui/main/DriverPayFragment.kt b/app/src/main/java/com/driver/igotrip/ui/main/DriverPayFragment.kt
index d84f354..8e9c7e5 100644
--- a/app/src/main/java/com/driver/igotrip/ui/main/DriverPayFragment.kt
+++ b/app/src/main/java/com/driver/igotrip/ui/main/DriverPayFragment.kt
@@ -1,6 +1,7 @@
 package com.driver.igotrip.ui.main
 
 import android.widget.TextView
+import cn.sinata.rxnetty.LogHelper.logRecord
 import com.driver.igotrip.R
 import com.driver.igotrip.base.PublicServiceDialogActivity
 import org.jetbrains.anko.find
@@ -23,6 +24,7 @@
     private val close by lazy { find<TextView>(R.id.tv_close_base) }
 
     override fun initView() {
+        logRecord("确认已收到费用弹窗orderId:${orderId} orderType:${orderType}")
         price.text = getString(R.string.确认现金金额).format(money).replace(",",".")
         close.setOnClickListener { finish() }
         sure.setOnClickListener { finish() }
diff --git a/app/src/main/java/com/driver/igotrip/ui/main/GetOrderFragment.kt b/app/src/main/java/com/driver/igotrip/ui/main/GetOrderFragment.kt
index 220cc96..1a3feb7 100644
--- a/app/src/main/java/com/driver/igotrip/ui/main/GetOrderFragment.kt
+++ b/app/src/main/java/com/driver/igotrip/ui/main/GetOrderFragment.kt
@@ -6,11 +6,11 @@
 import android.view.View
 import android.widget.ImageView
 import android.widget.TextView
+import cn.sinata.rxnetty.LogHelper
 import cn.sinata.xldutils.utils.Toast
 import cn.sinata.xldutils.utils.clickDelay
 import cn.sinata.xldutils.utils.doubleTwo
 import cn.sinata.xldutils.utils.gone
-import cn.sinata.xldutils.utils.sysErr
 import cn.sinata.xldutils.utils.visible
 import com.blankj.utilcode.util.ScreenUtils
 import com.driver.igotrip.R
@@ -83,6 +83,7 @@
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
+        LogHelper.logRecord("新的订单orderId:${orderId} orderType:${orderType}")
         //实例化语音引擎
         window.setLayout(ScreenUtils.getScreenWidth(), ScreenUtils.getScreenHeight())
         rl_parent.setOnClickListener {  }
@@ -93,6 +94,7 @@
             supportFragmentManager.findFragmentById(R.id.map_view) as SupportMapFragment?
         mapFragment?.getMapAsync(this)
         MyApplication.getTTsManager().setVideoText(audioUrl)
+        LogHelper.logRecord("抢单弹窗orderId:${orderId} orderType:${orderType}")
     }
 
     override fun onPause() {
@@ -110,7 +112,7 @@
     }
 
     private fun callOrderDetail() {
-        var map = getMapByAny()
+        val map = getMapByAny()
         map["orderId"] = orderId
         map["orderType"] = orderType
         map["lat"] = MyApplication.getLocation()?.latitude ?: 0.0
@@ -118,7 +120,7 @@
         callNet(this, Api.queryPushOrder, map) {
             ll_order.visible()
             val data = Gson().fromJson<OrderBean>(it, OrderBean::class.java).data
-            sysErr(data)
+            LogHelper.logRecord("新的订单orderId:${orderId} orderType:${orderType} data:${Gson().toJson(data)}")
             val startView = createView(R.layout.item_map_market, this)
             val endView = createView(R.layout.item_map_market, this)
             startView.find<ImageView>(R.id.iv_img).setImageResource(UiUtil.getLangStartBitmap())
@@ -142,7 +144,7 @@
                 tv_cargo_num.visible()
                 tv_cargo_money.visible()
                 tv_name.text = data.nickName + "-" + data.phone
-                var cargoStrType =
+                val cargoStrType =
                     if (data.cargoType == "1") getString(R.string.普通小件X) else getString(R.string.贵重物品X)
                 tv_cargo_num.text = cargoStrType + data.peopleNumber
                 if (data.tipMoney != null && data.tipMoney > 0.0) {
@@ -204,11 +206,13 @@
     lateinit var aMap: GoogleMap
 
     fun showGetOrder() {
+        LogHelper.logRecord("开始抢单orderId:${orderId} orderType:${orderType}")
         tv_sure.isEnabled = false
-        var map = getMapByAny()
+        val map = getMapByAny()
         map["orderId"] = orderId
         map["orderType"] = orderType
         callNet1(this, Api.grabOrder, map, {
+            LogHelper.logRecord("抢单成功orderId:${orderId} orderType:${orderType}")
             Toast.create(this).show(getString(R.string.抢单成功))
 //            onBackPressed()
             when (orderType) {
@@ -233,7 +237,8 @@
             }
             // 上面 onBackPressed 会报错 改到下面finish
             finish()
-        }, {
+        }, {code,msg->
+            LogHelper.logRecord("抢单失败orderId:${orderId} orderType:${orderType} code:${code} msg:${msg}")
             tv_sure.isEnabled = true
             finish()
         })
@@ -257,6 +262,7 @@
             }
         }
         tv_close.clickDelay {
+            LogHelper.logRecord("不抢新的订单orderId:${orderId} orderType:${orderType}")
             finish()
         }
         tv_sure.setOnClickListener {
@@ -265,6 +271,7 @@
             } else if (type == 2) {
                 onBackPressed()
                 this.startActivity<TripActivity>("orderId" to orderId, "orderType" to orderType)
+                LogHelper.logRecord("抢单成功orderId:${orderId} orderType:${orderType}")
             }
 
         }
diff --git a/app/src/main/java/com/driver/igotrip/ui/main/GoOrderTipsFragment.kt b/app/src/main/java/com/driver/igotrip/ui/main/GoOrderTipsFragment.kt
index 1d2b1f6..bc2bca6 100644
--- a/app/src/main/java/com/driver/igotrip/ui/main/GoOrderTipsFragment.kt
+++ b/app/src/main/java/com/driver/igotrip/ui/main/GoOrderTipsFragment.kt
@@ -2,6 +2,7 @@
 
 import android.annotation.SuppressLint
 import android.widget.TextView
+import cn.sinata.rxnetty.LogHelper.logRecord
 import cn.sinata.xldutils.utils.clickDelay
 import com.driver.igotrip.R
 import com.driver.igotrip.base.PublicServiceDialogActivity
@@ -41,6 +42,7 @@
             finish()
         }
         desc.text = describe
+        logRecord("订单提示弹窗orderId:${orderId} orderType:${orderType}")
     }
 
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/driver/igotrip/ui/main/MainActivity.kt b/app/src/main/java/com/driver/igotrip/ui/main/MainActivity.kt
index 8afe0d7..861dc44 100644
--- a/app/src/main/java/com/driver/igotrip/ui/main/MainActivity.kt
+++ b/app/src/main/java/com/driver/igotrip/ui/main/MainActivity.kt
@@ -28,7 +28,6 @@
 import com.driver.igotrip.base.Const
 import com.driver.igotrip.base.MyApplication
 import com.driver.igotrip.base.MyBaseActivity
-import com.driver.igotrip.base.OrderTimeOutManager
 import com.driver.igotrip.base.gaode.AMapKit
 import com.driver.igotrip.bean.BooleanBean
 import com.driver.igotrip.bean.HomeDataBean
@@ -58,7 +57,6 @@
 import com.driver.mask_talk.utils.toTimeFrench
 import com.google.android.gms.maps.GoogleMap
 import com.google.android.gms.maps.SupportMapFragment
-import com.google.android.gms.maps.model.LatLng
 import com.google.gson.Gson
 import com.tbruyelle.rxpermissions2.RxPermissions
 import com.wang.avi.AVLoadingIndicatorView
@@ -232,7 +230,6 @@
     }
 
     private fun callTime(type: String) {
-        OrderTimeOutManager.instance.init()
         var map = getMapByAny()
         callNet(Api.getDriverOnlineTime, map) {
             var bean = gson.fromJson<TimeBean>(it, TimeBean::class.java)
@@ -408,21 +405,17 @@
     @SuppressLint("MissingPermission", "CheckResult")
     private fun initLocation() {
         val fragment = map_view as SupportMapFragment
-        AMapKit.initMap(fragment) {
+        AMapKit.initMap(fragment) { it ->
             // zmc-remark 测试代码 给个初始位置
 //            MyApplication.aMapLocation = LatLng(30.659221715540937,104.06676612263988)
-
             aMap = it
-            RxPermissions(this).request(Manifest.permission.ACCESS_FINE_LOCATION).subscribe {
-                if (it) {
-                    aMap.isMyLocationEnabled = true
-                    aMap.setOnMyLocationChangeListener {
-                        it.let { latlon ->
-                            Log.e("定位==============》", "${it.latitude},${it.longitude}")
-                            MyApplication.aMapLocation = LatLng(it.latitude, it.longitude)
-                        }
-                    }
-
+            aMap.isMyLocationEnabled = true
+            aMap.setOnMyLocationChangeListener {
+                it?.let {
+                    Log.e("定位==============》", "${it.latitude},${it.longitude}")
+                    MyApplication.setLocation(it.latitude, it.longitude)
+                }
+            }
 
 //                    val fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
 //                    val locationRequest = LocationRequest.create().apply {
@@ -438,11 +431,6 @@
 //                            }
 //                        }, Looper.getMainLooper()
 //                    )
-
-                } else {
-
-                }
-            }
         }
     }
 
diff --git a/app/src/main/java/com/driver/igotrip/ui/main/MediaOperationActivity.kt b/app/src/main/java/com/driver/igotrip/ui/main/MediaOperationActivity.kt
index 1fe22c4..d5e68a9 100644
--- a/app/src/main/java/com/driver/igotrip/ui/main/MediaOperationActivity.kt
+++ b/app/src/main/java/com/driver/igotrip/ui/main/MediaOperationActivity.kt
@@ -201,7 +201,7 @@
      */
     private fun saveMedia(filePath: String, block: (url: String) -> Unit) {
         HttpManager.getInstance()
-            .post<BaseBean<String>>(
+            .post(
                 Api.upImage,
                 File(filePath),
                 object : MyObserver(this@MediaOperationActivity) {
diff --git a/app/src/main/java/com/driver/igotrip/ui/main/ModifyAddressFragment.kt b/app/src/main/java/com/driver/igotrip/ui/main/ModifyAddressFragment.kt
index a035143..80dfc0d 100644
--- a/app/src/main/java/com/driver/igotrip/ui/main/ModifyAddressFragment.kt
+++ b/app/src/main/java/com/driver/igotrip/ui/main/ModifyAddressFragment.kt
@@ -1,12 +1,13 @@
 package com.driver.igotrip.ui.main
 
 import android.view.View
+import cn.sinata.rxnetty.LogHelper.logRecord
 import cn.sinata.xldutils.utils.clickDelay
 import com.driver.igotrip.R
 import com.driver.igotrip.base.BaseEvent
 import com.driver.igotrip.base.PublicServiceDialogActivity
 import com.driver.igotrip.netUtls.Api
-import com.driver.igotrip.netUtls.callNet
+import com.driver.igotrip.netUtls.callNet1
 import com.driver.igotrip.netUtls.getMapByAny
 import org.greenrobot.eventbus.EventBus
 import org.jetbrains.anko.find
@@ -30,6 +31,7 @@
         find<View>(R.id.agree).clickDelay {
             updateEndAddress(2)
         }
+        logRecord("修改目的地弹窗orderId:${orderId} orderType:${orderType}")
     }
 
     /**
@@ -40,11 +42,14 @@
         map["orderId"] = orderId
         map["orderType"] = orderType
         map["status"] = status
-        callNet(this, Api.updateEndAddress, map) {
-            if(status == 2){
+        callNet1(this, Api.updateEndAddress, map, clickAction = {
+            logRecord("修改目的地操作成功orderId:${orderId} orderType:${orderType}")
+            if (status == 2) {
                 EventBus.getDefault().post(BaseEvent(BaseEvent.MODIFY_ADDRESS_SUC))
             }
             finish()
-        }
+        }, errorAction = { code, msg ->
+            logRecord("修改目的地操作失败orderId:${orderId} orderType:${orderType} code:${code} msg:${msg}")
+        })
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/driver/igotrip/ui/main/OrderOverActivity.kt b/app/src/main/java/com/driver/igotrip/ui/main/OrderOverActivity.kt
index 6b931c4..c8cbc45 100644
--- a/app/src/main/java/com/driver/igotrip/ui/main/OrderOverActivity.kt
+++ b/app/src/main/java/com/driver/igotrip/ui/main/OrderOverActivity.kt
@@ -10,6 +10,7 @@
 import android.widget.LinearLayout
 import android.widget.TextView
 import androidx.core.view.isVisible
+import cn.sinata.rxnetty.LogHelper
 import cn.sinata.xldutils.utils.clickDelay
 import cn.sinata.xldutils.utils.doubleOne
 import cn.sinata.xldutils.utils.gone
@@ -93,6 +94,7 @@
         MyApplication.currentOrderId = ""
         ll_pay_result.gone()
         tv_show_pay_over.gone()
+        LogHelper.logRecord("订单已结束orderId:${orderId} orderType:${orderType}")
     }
 
     override fun initView() {
diff --git a/app/src/main/java/com/driver/igotrip/ui/main/ReassignActivity.kt b/app/src/main/java/com/driver/igotrip/ui/main/ReassignActivity.kt
index d923838..99aabc2 100644
--- a/app/src/main/java/com/driver/igotrip/ui/main/ReassignActivity.kt
+++ b/app/src/main/java/com/driver/igotrip/ui/main/ReassignActivity.kt
@@ -4,6 +4,7 @@
 import android.widget.EditText
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
+import cn.sinata.rxnetty.LogHelper
 import cn.sinata.xldutils.utils.clickDelay
 import cn.sinata.xldutils.utils.getContent
 import com.driver.emanagercar.ui.base.BaseWebActivity
@@ -11,8 +12,8 @@
 import com.driver.igotrip.base.BaseAlipayActivity
 import com.driver.igotrip.base.BaseEvent
 import com.driver.igotrip.bean.AgreeBean
-import com.driver.igotrip.bean.StringBean
 import com.driver.igotrip.bean.OrderBean
+import com.driver.igotrip.bean.StringBean
 import com.driver.igotrip.netUtls.Api
 import com.driver.igotrip.netUtls.callNet
 import com.driver.igotrip.netUtls.getMapByAny
@@ -57,9 +58,9 @@
         adapter.array.add(getString(R.string.car_problom))
         adapter.array.add(getString(R.string.ther))
         tv_Right.text = getString(R.string.改派说明)
-        if (orderType == "4" || orderType == "5"){
+        if (orderType == "4" || orderType == "5") {
             adapter.array.removeAt(0)
-            adapter.array.add(0,getString(R.string.客户原因))
+            adapter.array.add(0, getString(R.string.客户原因))
         }
         recycler_view.layoutManager = LinearLayoutManager(this) as RecyclerView.LayoutManager?
         recycler_view.adapter = adapter
@@ -76,7 +77,9 @@
                 toast(getString(R.string.请选择改派原因))
                 return@setOnClickListener
             }
-            if (adapter.selectPosition != -1 && adapter.array[adapter.selectPosition] == getString(R.string.其他) && et_content.getContent().isNullOrEmpty()){
+            if (adapter.selectPosition != -1 && adapter.array[adapter.selectPosition] == getString(R.string.其他) && et_content.getContent()
+                    .isNullOrEmpty()
+            ) {
                 toast(getString(R.string.请输入详细描述))
                 return@setOnClickListener
             }
@@ -89,13 +92,13 @@
 
         tv_Right.clickDelay {
             callHtml {
-                BaseWebActivity.to(mContext,it,getString(R.string.改派说明),"1")
+                BaseWebActivity.to(mContext, it, getString(R.string.改派说明), "1")
             }
         }
     }
 
     fun callHtml(click: (s: String) -> Unit) {
-        var map = getMapByAny()
+        val map = getMapByAny()
         map["type"] = 10
         callNet(Api.queryByType, map) {
             var data = gson.fromJson<AgreeBean>(it, AgreeBean::class.java)
@@ -104,7 +107,7 @@
     }
 
     private fun showPat(payType: String) {
-        if (orderType == "3"){
+        if (orderType == "3") {
             callGp(payType)
             return
         }
@@ -112,55 +115,63 @@
         map["orderId"] = orderId
         map["orderType"] = orderType
         map["reason"] = adapter.array[adapter.selectPosition]
-        if (!et_content.getContent().isNullOrEmpty()){
+        if (!et_content.getContent().isNullOrEmpty()) {
             map["remark"] = et_content.getContent()
         }
         if (!money.isNullOrEmpty()) {
             map["payType"] = payType
             map["money"] = money
         }
-        callNet(Api.reassign, map) {
+        callNet(Api.reassign, map, clickAction = {
             if (payType == "2") {
-                var data = gson.fromJson<StringBean>(it, StringBean::class.java)
+                LogHelper.logRecord("订单改派支付宝支付订单成功orderId:${orderId} orderType:${orderType} data:${it}")
+                val data = gson.fromJson<StringBean>(it, StringBean::class.java)
                 payV2(data.data)
             }
-            if (payType == "1"){
+            if (payType == "1") {
 
             }
             if (payType == "3" || payType.isEmpty()) {
+                LogHelper.logRecord("订单改派余额支付成功申请已提交orderId:${orderId} orderType:${orderType}")
                 toast(getString(R.string.改派申请已提交))
-                EventBus.getDefault().post(BaseEvent(BaseEvent.REAGASSIGN_SUCCESS,orderId!!.toString(),orderId!!.toString()))
+                EventBus.getDefault().post(BaseEvent(BaseEvent.REAGASSIGN_SUCCESS, orderId, orderType))
                 finish()
             }
 
-        }
+        }, clickActionError = { code, msg ->
+            LogHelper.logRecord("订单改派创建支付订单失败orderId:${orderId} orderType:${orderType} code:${code} msg:${msg}")
+        })
     }
 
     private fun callGp(payType: String) {
         var map = getMapByAny()
         map["orderIds"] = orderId
         map["reason"] = adapter.array[adapter.selectPosition]
-        if (!et_content.getContent().isNullOrEmpty()){
+        if (!et_content.getContent().isNullOrEmpty()) {
             map["remark"] = et_content.getContent()
         }
         if (!money.isNullOrEmpty()) {
             map["payType"] = payType
             map["money"] = money
         }
-        callNet(Api.reassignOrderCrossCityReassign,map){
+        callNet(Api.reassignOrderCrossCityReassign, map, clickAction = {
             if (payType == "2") {
-                var data = gson.fromJson<StringBean>(it, StringBean::class.java)
+                LogHelper.logRecord("订单改派支付宝支付订单成功orderId:${orderId} orderType:${orderType} data:${it}")
+                val data = gson.fromJson<StringBean>(it, StringBean::class.java)
                 payV2(data.data)
             }
-            if (payType == "1"){
+            if (payType == "1") {
 
             }
             if (payType == "3" || payType.isEmpty()) {
+                LogHelper.logRecord("订单改派余额支付成功申请已提交orderId:${orderId} orderType:${orderType}")
                 toast(getString(R.string.改派申请已提交))
-                EventBus.getDefault().post(BaseEvent(BaseEvent.REAGASSIGN_SUCCESS,orderId!!.toString(),orderId!!.toString()))
+                EventBus.getDefault().post(BaseEvent(BaseEvent.REAGASSIGN_SUCCESS, orderId, orderType))
                 finish()
             }
-        }
+        }, clickActionError = { code, msg ->
+            LogHelper.logRecord("订单改派创建支付订单失败orderId:${orderId} orderType:${orderType} code:${code} msg:${msg}")
+        })
     }
 
 
@@ -168,6 +179,7 @@
         var pop = DialogUtil.getPopupwindow(this, R.layout.pop_pay)
         pop.showDown(window.decorView)
         pop.contentView.find<View>(R.id.btn_money).clickDelay {
+            LogHelper.logRecord("订单改派余额支付orderId:${orderId} orderType:${orderType}")
             showPat("3")
             pop.dismiss()
         }
@@ -177,19 +189,22 @@
 
         pop.contentView.find<View>(R.id.btn_album).clickDelay {
 //            showPat("1")
-            val content = RemarkData("改派原因啊","这个是备注",com.driver.igotrip.utils.Cache.CacheKey.getUserId())
-            val path = "pages/appPay/appPay?orderId=$orderId&orderType=$orderType&type=3&content="+gson.toJson(content)+"&uid="+com.driver.igotrip.utils.Cache.CacheKey.getUserId()+"&userType=2"
-            WXPayEntryActivity.toWx(this,intent,path)
+            LogHelper.logRecord("订单改派跳转小程序支付orderId:${orderId} orderType:${orderType}")
+            val content = RemarkData("改派原因啊", "这个是备注", com.driver.igotrip.utils.Cache.CacheKey.getUserId())
+            val path =
+                "pages/appPay/appPay?orderId=$orderId&orderType=$orderType&type=3&content=" + gson.toJson(content) + "&uid=" + com.driver.igotrip.utils.Cache.CacheKey.getUserId() + "&userType=2"
+            WXPayEntryActivity.toWx(this, intent, path)
             pop.dismiss()
         }
 
         pop.contentView.find<View>(R.id.btn_alipay).clickDelay {
+            LogHelper.logRecord("订单改派支付宝支付orderId:${orderId} orderType:${orderType}")
             showPat("2")
             pop.dismiss()
         }
     }
 
-    public class RemarkData(reason:String,remark:String,uid:String){
+    public class RemarkData(reason: String, remark: String, uid: String) {
         //        ="+"改派原因啊"+"&remark="+"这个是备注
         var reason = reason
         var remark = remark
@@ -199,39 +214,26 @@
     override fun aliPaySuccess() {
         super.aliPaySuccess()
         toast(getString(R.string.改派申请已提交))
-        EventBus.getDefault().post(BaseEvent(BaseEvent.REAGASSIGN_SUCCESS,orderId!!.toString(),orderId!!.toString()))
+        EventBus.getDefault().post(BaseEvent(BaseEvent.REAGASSIGN_SUCCESS, orderId, orderType))
         finish()
-    }
-
-    override fun onResume() {
-        super.onResume()
-//        var map = getMapByAny()
-//        map["orderId"] = orderId
-//        map["orderType"] = orderType
-//        callNet(Api.queryOrderInfo, map) {
-//            var orderBean = gson.fromJson(it, OrderBean::class.java)
-//            if(orderBean.data.orderState == 11){
-//                toast(getString(R.string.改派申请已提交))
-//                EventBus.getDefault().post(BaseEvent(BaseEvent.REAGASSIGN_SUCCESS))
-//                finish()
-//            }
-//        }
     }
 
     override fun onRestart() {
         super.onRestart()
-        var map = getMapByAny()
+        val map = getMapByAny()
         map["orderId"] = orderId
         map["orderType"] = orderType
-        callNet(Api.queryOrderInfo, map) {
-           var orderBean = gson.fromJson(it, OrderBean::class.java)
-           if(orderBean.data.orderState == 11){
-               toast(getString(R.string.改派申请已提交))
-               EventBus.getDefault().post(BaseEvent(BaseEvent.REAGASSIGN_SUCCESS,orderId!!.toString(),orderId!!.toString()))
-               finish()
-           }
-        }
+        callNet(Api.queryOrderInfo, map, clickAction = {
+            val orderBean = gson.fromJson(it, OrderBean::class.java)
+            LogHelper.logRecord("订单改派查询订单成功orderId:${orderId} orderType:${orderType} data:${it}")
+            if (orderBean.data.orderState == 11) {
+                toast(getString(R.string.改派申请已提交))
+                LogHelper.logRecord("订单改派申请已提交成功orderId:${orderId} orderType:${orderType}")
+                EventBus.getDefault().post(BaseEvent(BaseEvent.REAGASSIGN_SUCCESS, orderId, orderType))
+                finish()
+            }
+        }, clickActionError = { code, msg ->
+            LogHelper.logRecord("订单改派查询订单失败orderId:${orderId} orderType:${orderType} code:${code} msg:${msg}")
+        })
     }
-
-
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/driver/igotrip/ui/main/TipsFragment.kt b/app/src/main/java/com/driver/igotrip/ui/main/TipsFragment.kt
index b25392e..c9fd5b2 100644
--- a/app/src/main/java/com/driver/igotrip/ui/main/TipsFragment.kt
+++ b/app/src/main/java/com/driver/igotrip/ui/main/TipsFragment.kt
@@ -3,6 +3,7 @@
 import android.annotation.SuppressLint
 import android.view.View
 import android.widget.TextView
+import cn.sinata.rxnetty.LogHelper.logRecord
 import cn.sinata.xldutils.utils.clickDelay
 import com.driver.igotrip.R
 import com.driver.igotrip.base.PublicServiceDialogActivity
@@ -22,6 +23,6 @@
         }
         find<TextView>(R.id.desc).text = tips
         find<TextView>(R.id.sure).text = getString(R.string.确认)
-
+        logRecord("提示弹窗:$tips")
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/driver/igotrip/ui/main/TripActivity.kt b/app/src/main/java/com/driver/igotrip/ui/main/TripActivity.kt
index a324e1d..1ef89a5 100644
--- a/app/src/main/java/com/driver/igotrip/ui/main/TripActivity.kt
+++ b/app/src/main/java/com/driver/igotrip/ui/main/TripActivity.kt
@@ -7,12 +7,12 @@
 import android.view.View
 import android.widget.ImageView
 import android.widget.TextView
+import cn.sinata.rxnetty.LogHelper
 import cn.sinata.xldutils.utils.*
 import com.driver.igotrip.R
 import com.driver.igotrip.base.BaseEvent
 import com.driver.igotrip.base.MyApplication
 import com.driver.igotrip.base.MyBaseActivity
-import com.driver.igotrip.base.OrderTimeOutManager
 import com.driver.igotrip.base.gaode.AMapKit
 import com.driver.igotrip.base.gaode.AMapKit.addMarker
 import com.driver.igotrip.base.gaode.AMapKit.getIcon
@@ -75,8 +75,6 @@
     var graylist = arrayListOf<LatLng>() // 灰色轨迹
     var grayline: Polyline? = null
 
-    var tripInfo: GoogleTripInfo? = null//谷歌订单信息
-
     private val iv_move by lazy { find<View>(R.id.iv_move) }
     private val remark by lazy { find<View>(R.id.remark) }
     private val iv_phone by lazy { find<View>(R.id.iv_phone) }
@@ -101,6 +99,7 @@
         initMineLocation()
         onclick()
         addSockectCancel()
+        LogHelper.logRecord("处理专车订单orderId:${orderId} orderType:${orderType}")
     }
 
     override fun initView() {
@@ -129,7 +128,7 @@
     }
     var handler: Handler? = null
     fun checkOrderStatue() {
-        var map = getMapByAny()
+        val map = getMapByAny()
         map["orderId"] = orderId
         map["orderType"] = orderType
         callNet(false, Api.orderStateSocket, map) {
@@ -168,31 +167,18 @@
     private fun onclick() {
         tv_Right.clickDelay {
             DialogUtil.getDelAndSureDialog(this, getString(R.string.确定改派吗), {}) {
-                var map = getMapByAny()
+                val map = getMapByAny()
                 map["orderId"] = orderId
                 map["orderType"] = orderType
-                callNet(Api.queryReassignMoney, map) {
+                callNet(Api.queryReassignMoney, map, clickAction = {
                     val data = gson.fromJson<RessignBean>(it, RessignBean::class.java)
+                    LogHelper.logRecord("查询订单改派金额成功orderId:${orderId} orderType:${orderType} data:${Gson().toJson(data)}")
                     startActivity<ReassignActivity>(
                         "orderId" to orderId,
                         "orderType" to orderType
                     )
-//                if (data.data.amount.isNullOrEmpty()) {
-//
-//                } else {
-//                    DialogUtil.getDelAndSureDialog(
-//                        this,
-//                        getString(R.string.现在改派将收取,data.data.amount),
-//                        {},
-//                        {
-//                            //跳转改派页面
-//                            startActivity<ReassignActivity>(
-//                                "orderId" to orderId,
-//                                "orderType" to orderType,
-//                                "money" to data.data.amount.toString()
-//                            )
-//                        })
-//                }
+                }){ code, msg ->
+                    LogHelper.logRecord("查询订单改派金额失败orderId:${orderId} orderType:${orderType} code:${code} msg:${msg}")
                 }
             }
         }
@@ -216,8 +202,8 @@
         }
 
         iv_police.clickDelay {
-            orderBean.let {
-                MyUtils.getInstans().CallPhone(this, it?.data?.emergencyCall)
+            orderBean?.data?.emergencyCall?.takeIf { it.isNotEmpty() }?.also {
+                MyUtils.getInstans().CallPhone(this, it)
             }
         }
         iv_to_gd.clickDelay {
@@ -260,7 +246,7 @@
                 orderBean?.let {
                     when (it.data.orderState) {
                         2, 3, 4 -> {
-                            var timeByLo = (DateUtil.dateToStamp(
+                            val timeByLo = (DateUtil.dateToStamp(
                                 DateUtil.TYPE0,
                                 it.data.travelTime
                             ) - System.currentTimeMillis()) / 1000L
@@ -274,16 +260,22 @@
                                 callStatue("", it.data.orderState, {
                                     showStatueMapUI(it)
                                     iv_to_gd.callOnClick()
-                                }) {
+                                    LogHelper.logRecord("乘客已上车orderId:${orderId} orderType:${orderType}")
+                                }) { code, msg ->
+                                    LogHelper.logRecord("改订单状态为乘客已上车失败orderId:${orderId} orderType:${orderType} code:${code} msg:${msg}")
                                     it.data.orderState--
                                 }
 //                            }
                             } else {
                                 it.data.orderState++
-                                callStatue(it.data.orderState) {
+                                callStatue(it.data.orderState, {
                                     if (it.data.orderState == 3) {
                                         iv_to_gd.callOnClick()
                                     }
+                                    LogHelper.logRecord("改订单状态成功orderId:${orderId} orderType:${orderType} orderState:${it.data.orderState}")
+                                }) { code, msg ->
+                                    LogHelper.logRecord("改订单状态失败orderId:${orderId} orderType:${orderType} code:${code} msg:${msg}")
+                                    it.data.orderState--
                                 }
                                 showStatueMapUI(it)
                             }
@@ -297,12 +289,13 @@
                                 }
 
                                 "1" -> {
-                                    callStatue(6) {
-                                        startActivity<MajorSureMoneyActivity>(
-                                            "orderId" to orderId,
-                                            "orderType" to orderType
-                                        )
+                                    callStatue(6, {
+                                        LogHelper.logRecord("改订单状态为已到达成功orderId:${orderId} orderType:${orderType}")
+                                        startActivity<MajorSureMoneyActivity>("orderId" to orderId, "orderType" to orderType)
                                         finish()
+                                    }) { code, msg ->
+                                        it.data.orderState = 5
+                                        LogHelper.logRecord("改订单状态为已到达失败orderId:${orderId} orderType:${orderType} code:${code} msg:${msg}")
                                     }
                                 }
                             }
@@ -313,8 +306,8 @@
         }
 
         iv_phone.clickDelay {
-            orderBean.let {
-                MyUtils.getInstans().CallPhone(this, it?.data?.phone)
+            orderBean?.data?.phone?.takeIf { it.isNotEmpty() }?.also {
+                MyUtils.getInstans().CallPhone(this, it)
             }
         }
     }
@@ -328,24 +321,24 @@
     }
 
 
-    private fun callStatue(i: Int, click: () -> Unit) {
-        var map = getMapByAny()
+    private fun callStatue(i: Int, click: () -> Unit, clickFail: (Int, String?) -> Unit) {
+        val map = getMapByAny()
         map["orderId"] = orderId
         map["orderType"] = orderType
         map["state"] = i
         map["lat"] = MyApplication.getLocation()?.latitude ?: 0.0
         map["lon"] = MyApplication.getLocation()?.longitude ?: 0.0
-        callNet(Api.process, map) {
+        callNet(Api.process, map, {
             val bean = Gson().fromJson<StringBean>(it, StringBean::class.java)
-            MyApplication.getTTsManager()
-                .setVideoText(bean.data)
-            OrderTimeOutManager.instance.checkOrderManager(orderId, orderType, i)
+            MyApplication.getTTsManager().setVideoText(bean.data)
             click()
+        }) { code, msg ->
+            clickFail(code, msg)
         }
     }
 
-    private fun callStatue(phone: String, i: Int, click: () -> Unit, clickFail: () -> Unit) {
-        var map = getMapByAny()
+    private fun callStatue(phone: String, i: Int, click: () -> Unit, clickFail: (Int, String?) -> Unit) {
+        val map = getMapByAny()
         map["orderId"] = orderId
         map["orderType"] = orderType
         map["state"] = i
@@ -353,18 +346,17 @@
         map["lat"] = MyApplication.getLocation()?.latitude ?: 0.0
         map["lon"] = MyApplication.getLocation()?.longitude ?: 0.0
         callNet(Api.process, map, {
-            OrderTimeOutManager.instance.checkOrderManager(orderId, orderType, i)
             val fromJson = gson.fromJson<StringBean>(it, StringBean::class.java)
             MyApplication.getTTsManager().setVideoText(fromJson.data)
             click()
-        }) {
-            clickFail()
+        }) { code, msg ->
+            clickFail(code, msg)
         }
     }
 
 
     private fun showMoneyTypeDialog() {
-        var pop = DialogUtil.getPopupwindow(this, R.layout.dialog_select_pay_type)
+        val pop = DialogUtil.getPopupwindow(this, R.layout.dialog_select_pay_type)
         var payType = 1 //支付方式(1=IGO平台收款,2=其他方式收款)
         pop.showDown(window.decorView)
         val tv_cancel = pop.contentView.find<TextView>(R.id.tv_cancel)
@@ -378,9 +370,11 @@
         tv_ok.setOnClickListener {
             pop.dismiss()
             if (payType == 1) {
-                callStatue(6) {
+                callStatue(6, {
                     startActivity<FillOutActivity>("orderId" to orderId, "orderType" to orderType)
                     finish()
+                }) { code, msg ->
+                    LogHelper.logRecord("平台收款改订单状态为已到达失败orderId:${orderId} orderType:${orderType} code:${code} msg:${msg}")
                 }
             } else {
                 DialogUtil.getDelAndSureDialog(this, getString(R.string.请确定是否收款), {}, {
@@ -389,10 +383,15 @@
                     map["orderId"] = orderId
                     map["orderType"] = orderType
                     map["type"] = payType
-                    callStatue(6) {
-                        callNet(Api.confirmFees, map) {
+                    callStatue(6, {
+                        callNet(Api.confirmFees, map, {
+                            LogHelper.logRecord("司机确认收费成功orderId:${orderId} orderType:${orderType}")
                             callOverOrder()
+                        }) { code, msg ->
+                            LogHelper.logRecord("司机确认收费失败orderId:${orderId} orderType:${orderType} code:${code} msg:${msg}")
                         }
+                    }) { code, msg ->
+                        LogHelper.logRecord("其他收款改订单状态为已到达失败orderId:${orderId} orderType:${orderType} code:${code} msg:${msg}")
                     }
                 })
             }
@@ -419,9 +418,9 @@
      */
     var lastMoveByGesture = 0L //上次手势操作的时间
     private fun initMineLocation() {
-        aMap.setOnMyLocationChangeListener {
-            it.let { latlon ->
-                MyApplication.aMapLocation = LatLng(it.latitude, it.longitude)
+        aMap.setOnMyLocationChangeListener { it ->
+            it?.let {
+                MyApplication.setLocation(it.latitude, it.longitude)
             }
             orderBean?.let {
                 when (it.data.orderState) {
@@ -453,6 +452,9 @@
                 makeMarker!!.position,
                 object : (MutableList<LatLng>, Float, Long) -> Unit {
                     override fun invoke(p1: MutableList<LatLng>, p2: Float, p3: Long) {
+                        if (isFinishing || isDestroyed) {
+                            return
+                        }
                         val s = AMapKit.getTance(this@TripActivity, p2)
                         val content = getString(R.string.距预约点, s)
                         val sb = SpanBuilder.content(content).colorSpan(
@@ -461,7 +463,7 @@
                             content.indexOf(s) + s.length,
                             R.color.color_5DB03D
                         ).build()
-                        var view = creatCarView(sb)
+                        val view = creatCarView(sb)
                         carMarker!!.setIcon(getIcon(view))
                         addline(p1)
                         if (isMove) {
@@ -469,80 +471,6 @@
                         }
                     }
                 })
-        }
-    }
-
-
-    private fun getTripInfo(state: Int, isMove: Boolean) {
-        var map = getMapByAny()
-        map["orderId"] = orderId
-        map["orderType"] = orderType
-        callNet(false, Api.getTripInfo, map) {
-            val bean = Gson().fromJson(it, StringBean::class.java)
-            if (bean.code == 200 && !bean.data.isNullOrEmpty()) {
-                val trip = Gson().fromJson(bean.data, GoogleTripInfo::class.java)
-                val latlon = if (trip.lastLocation == null) LocationX(
-                    MyApplication.aMapLocation!!.latitude,
-                    MyApplication.aMapLocation!!.longitude
-                ) else trip.lastLocation.location //车辆位置
-                carMarker?.position = LatLng(latlon.latitude, latlon.longitude)
-                if (state != 4) {
-                    graylist.add(LatLng(latlon.latitude, latlon.longitude))
-                    grayline?.remove()
-                    grayline = AMapKit.drawLine(this, aMap, graylist, R.color.gray)
-                    val routs = arrayListOf<LatLng>()
-                    if (!trip.route.isNullOrEmpty()) {
-                        routs.addAll(trip.route.map { LatLng(it.latitude, it.longitude) })
-                    }
-                    addline(routs)
-                } else {
-                    closeLine()
-                    graylist.clear()
-                    grayline?.remove()
-                }
-                if (state == 3) {
-                    val tance = trip.remainingDistanceMeters.toFloat()
-                    val s = AMapKit.getTance(this@TripActivity, tance)
-                    val unit = getString(if (tance > 1000) R.string.公里 else R.string.米)
-                    val content = getString(R.string.距预约点, s)
-                    val sb = SpanBuilder.content(content).colorSpan(
-                        this@TripActivity,
-                        content.indexOf(s),
-                        content.indexOf(s) + s.length - unit.length,
-                        R.color.color_5DB03D
-                    ).build()
-                    var view = creatCarView(sb)
-                    carMarker!!.setIcon(getIcon(view))
-
-                }
-                if (state == 5) {
-                    val tance =
-                        AMapKit.getTance(this@TripActivity, trip.remainingDistanceMeters.toFloat())
-                    val unit =
-                        getString(if (trip.remainingDistanceMeters.toFloat() > 1000) R.string.公里 else R.string.米)
-                    val seconds = trip.remainingWaypoints?.firstOrNull()?.duration ?: "0s"
-                    val time = (seconds.substring(0, seconds.length - 1).toDouble() / 60).toInt()
-                        .toString()
-                    val content = getString(R.string.预计还需, tance, time)
-                    val sb = SpanBuilder.content(content).colorSpan(
-                        this@TripActivity,
-                        content.indexOf(tance),
-                        content.indexOf(tance) + tance.length - unit.length,
-                        R.color.color_5DB03D
-                    )
-                        .colorSpan(
-                            this@TripActivity,
-                            content.indexOf(time),
-                            content.indexOf(time) + time.length,
-                            R.color.color_5DB03D
-                        ).build()
-                    var view = creatCarView(sb)
-                    carMarker!!.setIcon(getIcon(view))
-                }
-                if (isMove) {
-                    iv_move.callOnClick()
-                }
-            }
         }
     }
 
@@ -556,6 +484,9 @@
                 endMarker!!.position,
                 object : (MutableList<LatLng>, Float, Long) -> Unit {
                     override fun invoke(p1: MutableList<LatLng>, p2: Float, p3: Long) {
+                        if (isFinishing || isDestroyed) {
+                            return
+                        }
                         addline(p1)
                         val tance = AMapKit.getTance(this@TripActivity, p2)
                         val time = p3.toInt().toString()
@@ -572,7 +503,7 @@
                                 content.indexOf(time) + time.length,
                                 R.color.color_5DB03D
                             ).build()
-                        var view = creatCarView(sb)
+                        val view = creatCarView(sb)
                         carMarker!!.setIcon(getIcon(view))
                         if (isMove) {
                             iv_move.callOnClick()
@@ -585,20 +516,22 @@
     private fun callOrder(reNavi: Boolean = false) {
         MyApplication.currentOrderId = orderId
         MyApplication.currentOrderType = orderType
-        var map = getMapByAny()
+        val map = getMapByAny()
         map["orderId"] = orderId
         map["orderType"] = orderType
-        callNet(Api.queryOrderInfo, map) {
-            orderBean = gson.fromJson(it, OrderBean::class.java)
-            showUi(orderBean)
-            if (reNavi) {
-                EventBus.getDefault().post(
-                    BaseEvent(
-                        BaseEvent.RELOAD_NAVI,
-                        orderBean!!.data.endLat.toString(),
-                        orderBean!!.data.endLon.toString()
+        callNet(Api.queryOrderInfo, map) { it ->
+            gson.fromJson(it, OrderBean::class.java)?.also {
+                orderBean = it
+                showUi(it)
+                if (reNavi) {
+                    EventBus.getDefault().post(
+                        BaseEvent(
+                            BaseEvent.RELOAD_NAVI,
+                            it.data?.endLat?.toString(),
+                            it.data?.endLon?.toString()
+                        )
                     )
-                )
+                }
             }
         }
     }
@@ -621,7 +554,7 @@
             tv_red_money.text =
                 getString(R.string.元红包, it.data.tipMoney.toString().extClearInvalidZero())
             showStatueMapUI(it)
-            var latLngList = mutableListOf<LatLng>()
+            val latLngList = mutableListOf<LatLng>()
             for (item in orderBean.data.orderPositionList) {
                 latLngList.add(LatLng(item.lat, item.lon))
             }
@@ -633,7 +566,7 @@
 
     private fun callOverOrder() {
         showDialog()
-        var map = getMapByAny()
+        val map = getMapByAny()
         map["orderId"] = orderId
         map["orderType"] = orderType
         callNet(Api.queryOrderInfo, map) {
@@ -738,7 +671,7 @@
                     ((System.currentTimeMillis() - DateUtil.dateToStamp(
                         DateUtil.TYPE0,
                         it.data.waitTime
-                    )) / 1000).toLong()
+                    )) / 1000)
                 )
                 moveCamera(aMap, carMarker!!.position)
                 setTitleText(getString(R.string.等待客户))
@@ -764,7 +697,7 @@
         if (!isTimeStart) {
             isTimeStart = true
             refreshTime(waitTime) {
-                var view = creatCarViewHint(getString(R.string.您已等待, getTimeType(it)))
+                val view = creatCarViewHint(getString(R.string.您已等待, getTimeType(it)))
                 carMarker!!.setIcon(getIcon(view))
             }
         }
@@ -783,7 +716,7 @@
             .observeOn(AndroidSchedulers.mainThread())
             .compose(bindUntilEvent(ActivityEvent.DESTROY))
             .subscribe { aLong ->
-                var num = waitTime + aLong
+                val num = waitTime + aLong
                 click(num.toInt())
             }
     }
@@ -824,10 +757,7 @@
     @SuppressLint("MissingPermission")
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
-        var fragment = supportFragmentManager.findFragmentById(R.id.map_view) as SupportMapFragment
-
-
-
+        val fragment = supportFragmentManager.findFragmentById(R.id.map_view) as SupportMapFragment
         initMap(fragment) {
             aMap = it
             aMap.isMyLocationEnabled = true
diff --git a/app/src/main/java/com/driver/igotrip/ui/main/major/MajorSureMoney2Activity.kt b/app/src/main/java/com/driver/igotrip/ui/main/major/MajorSureMoney2Activity.kt
index 0de48dd..a2d0306 100644
--- a/app/src/main/java/com/driver/igotrip/ui/main/major/MajorSureMoney2Activity.kt
+++ b/app/src/main/java/com/driver/igotrip/ui/main/major/MajorSureMoney2Activity.kt
@@ -2,6 +2,7 @@
 
 import android.view.View
 import android.widget.TextView
+import cn.sinata.rxnetty.LogHelper
 import cn.sinata.xldutils.utils.clickDelay
 import com.driver.igotrip.R
 import com.driver.igotrip.base.BaseEvent
@@ -46,6 +47,7 @@
 
     override fun initView() {
         setTitleText(getString(R.string.确认费用))
+        LogHelper.logRecord("确认订单费用2orderId:${orderId} orderType:${orderType}")
 
     }
 
@@ -58,12 +60,12 @@
             sureMoneyCallOffLine()
         }
 
-        var map = getMapByAny()
+        val map = getMapByAny()
         map["orderId"] = orderId
         map["orderType"] = orderType
 
         callNet(false, Api.queryMoneyInfo, map) {
-            var bean = gson.fromJson<MajorMoneyBean>(it, MajorMoneyBean::class.java)
+            val bean = gson.fromJson<MajorMoneyBean>(it, MajorMoneyBean::class.java)
             tv_all_money.text = getString(R.string.money) + " " + bean.data.payMoney.toString().extClearInvalidZero()
         }
 
@@ -71,27 +73,31 @@
 
 
     private fun sureMoneyCallOnLine() {
-        var map = getMapByAny()
+        val map = getMapByAny()
         map["orderId"] = orderId
         map["orderType"] = orderType
         map["type"] = 1
 
-        callNet(true, Api.confirmFees, map) {
+        callNet(true, Api.confirmFees, map, {
+            LogHelper.logRecord("线上收款成功orderId:${orderId} orderType:${orderType}")
             EventBus.getDefault().post(BaseEvent(BaseEvent.BACK_CAR_OVER))
             if (orderType == "4")
                 callSmallOrder()
             else
                 callOrder()
+        }) { code, msg ->
+            LogHelper.logRecord("线上收款失败orderId:${orderId} orderType:${orderType} code:${code} msg:${msg}")
         }
     }
 
-    private fun sureMoneyCallOffLine(){
-        var map = getMapByAny()
+    private fun sureMoneyCallOffLine() {
+        val map = getMapByAny()
         map["orderId"] = orderId
         map["orderType"] = orderType
         map["type"] = 2
-        callNet(true, Api.confirmFees, map) {
-            var map = getMapByAny()
+        callNet(true, Api.confirmFees, map, {
+            LogHelper.logRecord("线下收款成功orderId:${orderId} orderType:${orderType}")
+            val map = getMapByAny()
             map["orderId"] = orderId
             map["orderType"] = orderType
             callNet(completeOrder, map) {
@@ -100,13 +106,15 @@
                 EventBus.getDefault().post(BaseEvent(BaseEvent.REFREASH_MAIN))
                 finish()
             }
+        }) { code, msg ->
+            LogHelper.logRecord("线下收款失败orderId:${orderId} orderType:${orderType} code:${code} msg:${msg}")
         }
     }
 
 
     private fun callSmallOrder() {
         showDialog()
-        var map = getMapByAny()
+        val map = getMapByAny()
         map["orderId"] = orderId
         map["orderType"] = orderType
         callNet(Api.queryOrderInfo, map) {
@@ -121,7 +129,7 @@
 
     private fun callOrder() {
         showDialog()
-        var map = getMapByAny()
+        val map = getMapByAny()
         map["orderId"] = orderId
         map["orderType"] = orderType
         callNet(Api.queryOrderInfo, map) {
diff --git a/app/src/main/java/com/driver/igotrip/ui/main/major/MajorSureMoneyActivity.kt b/app/src/main/java/com/driver/igotrip/ui/main/major/MajorSureMoneyActivity.kt
index 66c2869..02c1345 100644
--- a/app/src/main/java/com/driver/igotrip/ui/main/major/MajorSureMoneyActivity.kt
+++ b/app/src/main/java/com/driver/igotrip/ui/main/major/MajorSureMoneyActivity.kt
@@ -4,6 +4,7 @@
 import android.view.View
 import android.widget.EditText
 import android.widget.TextView
+import cn.sinata.rxnetty.LogHelper
 import cn.sinata.xldutils.utils.clickDelay
 import cn.sinata.xldutils.utils.getContent
 import com.driver.igotrip.R
@@ -53,43 +54,40 @@
     private val rl_coupon_price by lazy { find<View>(R.id.rl_coupon_price) }
     private val et_long_go_money by lazy { find<EditText>(R.id.et_long_go_money) }
     private val et_stop_car_money by lazy { find<EditText>(R.id.et_stop_car_money) }
-
+    private var setbean: MajorMoneyBean? = null
 
     override fun initView() {
-        setbean=null
+        setbean = null
         setTitleText(getString(R.string.确认费用))
         callorderMoney()
+        LogHelper.logRecord("确认订单费用orderId:${orderId} orderType:${orderType}")
     }
 
     private fun callorderMoney() {
-        var map = getMapByAny()
+        val map = getMapByAny()
         map["orderId"] = orderId
         map["orderType"] = orderType
         callNet(false, Api.queryMoneyInfo, map) {
-            var bean = gson.fromJson<MajorMoneyBean>(it, MajorMoneyBean::class.java)
+            val bean = gson.fromJson<MajorMoneyBean>(it, MajorMoneyBean::class.java)
             showUi(bean)
             tv_sure.isEnabled = true
             tv_sure.alpha = 1.0f
         }
     }
-    companion object
-    {
-        var setbean:MajorMoneyBean?=null
-    }
 
     private fun showUi(bean: MajorMoneyBean?) {
         bean?.let {
-            setbean=it
-            tv_start_money.text = "FCFA" +" "+ it.data.startMoney.toString().extClearInvalidZero()
+            setbean = it
+            tv_start_money.text = "FCFA" + " " + it.data.startMoney.toString().extClearInvalidZero()
             tv_wait_name.text = getString(R.string.wait_time, it.data.wait.toString())
-            tv_wait_money.text = "FCFA" +" "+ it.data.waitMoney.toString().extClearInvalidZero()
+            tv_wait_money.text = "FCFA" + " " + it.data.waitMoney.toString().extClearInvalidZero()
             tv_mileage_name.text = getString(R.string.tance_money, it.data.mileage.toString())
-            tv_mileage_money.text = "FCFA" +" "+ it.data.mileageMoney.toString().extClearInvalidZero()
+            tv_mileage_money.text = "FCFA" + " " + it.data.mileageMoney.toString().extClearInvalidZero()
             tv_time_name.text = getString(R.string.time_money, it.data.duration.toString())
-            tv_time_money.text = "FCFA" +" "+ it.data.durationMoney.toString().extClearInvalidZero()
+            tv_time_money.text = "FCFA" + " " + it.data.durationMoney.toString().extClearInvalidZero()
             tv_long_distance_name.text =
                 getString(R.string.远途费公里, it.data.longDistance.toString())
-            tv_long_distance_money.text = "FCFA" +" "+ it.data.longDistanceMoney.toString().extClearInvalidZero()
+            tv_long_distance_money.text = "FCFA" + " " + it.data.longDistanceMoney.toString().extClearInvalidZero()
             tv_all_money.text = getString(R.string.money) + " " + it.data.payMoney.toString().extClearInvalidZero()
 
             price_difference_layout.visibility =
@@ -146,11 +144,11 @@
             var map = getMapByAny()
             map["orderId"] = orderId
             map["orderType"] = orderType
-            callNet( Api.queryOrderInfo, map) {
+            callNet(Api.queryOrderInfo, map) {
                 val orderBean = Gson().fromJson(it, OrderBean::class.java)
-                val moneytype="${ this@MajorSureMoneyActivity.getString(R.string.money)} ${orderBean.data.orderMoney}".extClearInvalidZero()
-                Log.e( "onBindItem: ", moneytype)
-               this@MajorSureMoneyActivity.startActivity<MajorSureMoney2Activity>(
+                val moneytype = "${this@MajorSureMoneyActivity.getString(R.string.money)} ${orderBean.data.orderMoney}".extClearInvalidZero()
+                Log.e("onBindItem: ", moneytype)
+                this@MajorSureMoneyActivity.startActivity<MajorSureMoney2Activity>(
                     "orderId" to orderId, "orderType" to orderType,
                     "money" to moneytype
                 )
diff --git a/app/src/main/java/com/driver/igotrip/ui/main/small_cargo/SmallCargoActivity.kt b/app/src/main/java/com/driver/igotrip/ui/main/small_cargo/SmallCargoActivity.kt
index fd91a33..313913f 100644
--- a/app/src/main/java/com/driver/igotrip/ui/main/small_cargo/SmallCargoActivity.kt
+++ b/app/src/main/java/com/driver/igotrip/ui/main/small_cargo/SmallCargoActivity.kt
@@ -13,13 +13,13 @@
 import android.widget.TextView
 import androidx.activity.result.ActivityResultLauncher
 import androidx.activity.result.contract.ActivityResultContracts
+import cn.sinata.rxnetty.LogHelper
 import cn.sinata.xldutils.utils.*
 import com.driver.igotrip.R
 import com.driver.igotrip.base.BaseEvent
 import com.driver.igotrip.base.Const
 import com.driver.igotrip.base.MyApplication
 import com.driver.igotrip.base.MyBaseActivity
-import com.driver.igotrip.base.OrderTimeOutManager
 import com.driver.igotrip.base.gaode.AMapKit
 import com.driver.igotrip.base.gaode.AMapKit.addMarker
 import com.driver.igotrip.base.gaode.AMapKit.getIcon
@@ -122,11 +122,12 @@
         onclick()
         addSockectCancel()
 
-        var language = SPUtils.getString(Const.language)
+        val language = SPUtils.getString(Const.language)
         if (language == Const.Language.ENGLISH || language == Const.Language.FRENCH)
             btn_gap_money.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12f)
         else
             btn_gap_money.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14f)
+        LogHelper.logRecord("处理快件订单orderId:${orderId} orderType:${orderType}")
     }
 
     override fun initView() {
@@ -179,10 +180,10 @@
     }
     var handler: Handler? = null
     fun checkOrderStatue() {
-        var map = getMapByAny()
+        val map = getMapByAny()
         map["orderId"] = orderId
         map["orderType"] = orderType
-        callNet(false, Api.orderStateSocket, map) {
+        callNet(false, Api.orderStateSocket, map) { it ->
             val orderSimpleData =
                 Gson().fromJson(
                     it,
@@ -216,33 +217,18 @@
 
     private fun onclick() {
         tv_Right.clickDelay {
-            var map = getMapByAny()
+            val map = getMapByAny()
             map["orderId"] = orderId
             map["orderType"] = orderType
-            callNet(Api.queryReassignMoney, map) {
+            callNet(Api.queryReassignMoney, map, {
                 val data = gson.fromJson<RessignBean>(it, RessignBean::class.java)
+                LogHelper.logRecord("查询订单改派金额成功orderId:${orderId} orderType:${orderType} data:${Gson().toJson(data)}")
                 startActivity<ReassignActivity>(
                     "orderId" to orderId,
                     "orderType" to orderType
                 )
-//                if (data.data.amount.isNullOrEmpty()) {
-//
-//                } else {
-//                    DialogUtil.getDelAndSureDialog(
-//                        this,
-//                        getString(R.string.change_order_hint,data.data.amount!!),
-//                        {},
-//                        {
-//                            //跳转改派页面
-//                            startActivity<ReassignActivity>(
-//                                "orderId" to orderId,
-//                                "orderType" to orderType,
-//                                "money" to data.data.amount.toString()
-//                            )
-//                        })
-//                }
-
-
+            }) { code, msg ->
+                LogHelper.logRecord("查询订单改派金额失败orderId:${orderId} orderType:${orderType} code:${code} msg:${msg}")
             }
         }
 
@@ -252,8 +238,8 @@
                     toast(getString(R.string.用户已支付差价))
                     return@clickDelay
                 }
-                var dialog = DialogUtil.getDialog(this, R.layout.dialog_show_cha_money)
-                var viewContent = DialogUtil.getView(dialog)
+                val dialog = DialogUtil.getDialog(this, R.layout.dialog_show_cha_money)
+                val viewContent = DialogUtil.getView(dialog)
                 val view_hint_close_car_cha = viewContent.find<View>(R.id.view_hint_close_car_cha)
                 val tv_car_num_close_cha = viewContent.find<View>(R.id.tv_car_num_close_cha)
                 val tv_sure_car_num_cha = viewContent.find<View>(R.id.tv_sure_car_num_cha)
@@ -265,7 +251,7 @@
                     dialog.dismiss()
                 }
                 tv_sure_car_num_cha.setOnClickListener {
-                    var num = et_num_zg_cha.getContent()
+                    val num = et_num_zg_cha.getContent()
                     if (num.isEmpty()) {
                         toast(getString(R.string.请输入金额))
                         return@setOnClickListener
@@ -278,12 +264,15 @@
                         toast(getString(R.string.金额不能小于0元))
                         return@setOnClickListener
                     }
-                    callseatmoney(num) {
+                    callseatmoney(num, {
+                        LogHelper.logRecord("补差价操作成功orderId:${orderId} orderType:${orderType}")
                         dialog.dismiss()
                         btn_gap_money.text =
                             getString(R.string.差价待确认).format(num.extClearInvalidZero())
                         btn_gap_money.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, 0, 0)
 //                        toast(getString(R.string.set_success))
+                    }) { code, msg ->
+                        LogHelper.logRecord("补差价操作失败orderId:${orderId} orderType:${orderType} code:${code} msg:${msg}")
                     }
                 }
             }
@@ -364,16 +353,24 @@
                                 )
                             } else {
                                 it.data.orderState++
-                                callStatue("1", it.data.orderState) {
+                                callStatue("1", it.data.orderState, {
+                                    LogHelper.logRecord("更新订单状态为送件中成功orderId:${orderId} orderType:${orderType}")
                                     iv_to_gd.callOnClick()
+                                }) { code, msg ->
+                                    it.data.orderState--
+                                    LogHelper.logRecord("更新订单状态为送件中失败orderId:${orderId} orderType:${orderType} code:${code} msg:${msg}")
                                 }
                                 showStatueMapUI(it)
                             }
                         } else {
                             it.data.orderState++
-                            callStatue(it.data.orderState, "") {
+                            callStatue(it.data.orderState, "", {
+                                LogHelper.logRecord("更新订单状态成功orderId:${orderId} orderType:${orderType} state:${it.data.orderState}")
                                 if (it.data.orderState == 3)
                                     iv_to_gd.callOnClick()
+                            }) { code, msg ->
+                                it.data.orderState--
+                                LogHelper.logRecord("更新订单状态失败orderId:${orderId} orderType:${orderType} code:${code} msg:${msg}")
                             }
                             showStatueMapUI(it)
                         }
@@ -394,7 +391,11 @@
 
                     12 -> {
                         it.data.orderState = 5
-                        callStatue(it.data.orderState, "") {}
+                        callStatue(it.data.orderState, "", {
+                            LogHelper.logRecord("取消待支付订单更新状态为送件中成功orderId:${orderId} orderType:${orderType}")
+                        }) { code, msg ->
+                            LogHelper.logRecord("取消待支付订单更新状态为送件中失败orderId:${orderId} orderType:${orderType} code:${code} msg:${msg}")
+                        }
                         showStatueMapUI(it)
                     }
 
@@ -428,8 +429,7 @@
             it.data.orderState = 6
             val dialog = DialogUtil.getDialog(this, R.layout.dialog_show_cargo_money)
             val viewContent = DialogUtil.getView(dialog)
-            val view_hint_close_car =
-                viewContent.find<View>(R.id.view_hint_close_car)
+            val view_hint_close_car = viewContent.find<View>(R.id.view_hint_close_car)
             val tv_car_num_close = viewContent.find<View>(R.id.tv_car_num_close)
             val tv_money = viewContent.find<TextView>(R.id.tv_money)
             val tv_sure_car_num = viewContent.find<TextView>(R.id.tv_sure_car_num)
@@ -452,9 +452,12 @@
                     toast(getString(R.string.请输入验证码))
                     return@setOnClickListener
                 }
-                confirmDelivery(6, num, url) {
+                confirmDelivery(6, num, url, {
+                    LogHelper.logRecord("确认快件已送达成功orderId:${orderId} orderType:${orderType}")
                     dialog.dismiss()
                     finish()
+                }) { code, msg ->
+                    LogHelper.logRecord("确认快件已送达失败orderId:${orderId} orderType:${orderType} code:${code} msg:${msg}")
                 }
             }
         }
@@ -469,10 +472,13 @@
                     .replace(",", ".").extClearInvalidZero(),
                 {},
                 {
-                    confirmPickUp(url, 5) {
+                    confirmPickUp(url, 5, {
+                        LogHelper.logRecord("确认收到此订单费用成功orderId:${orderId} orderType:${orderType}")
                         it.data.orderState = 5
                         showStatueMapUI(it)
                         iv_to_gd.callOnClick()
+                    }) { code, msg ->
+                        LogHelper.logRecord("确认收到此订单费用失败orderId:${orderId} orderType:${orderType} code:${code} msg:${msg}")
                     }
                 })
         }
@@ -482,39 +488,21 @@
         AMapKit.startNavi(this, startLat, startLon, endLat, endLon)
     }
 
-    private fun sendCode(function: () -> Unit) {
-        var map = getMapByAny()
-        map["orderId"] = orderId
-        callNet(Api.sendVerificationCode, map) {
-            function()
-        }
-    }
-
-    private fun callNumberCargo(num: String, click: () -> Unit) {
-        var map = getMapByAny()
-        map["orderId"] = orderId
-        map["pickUpCode"] = num
-        callNet(Api.fillInPickUpCode, map) {
-            click()
-        }
-    }
-
-
-    private fun callseatmoney(num: String, click: () -> Unit) {
-        var map = getMapByAny()
+    private fun callseatmoney(num: String, click: () -> Unit, error: (code: Int, msg: String?) -> Unit) {
+        val map = getMapByAny()
         map["orderId"] = orderId
         map["difference"] = doubleTwo(num.toDouble())
-        callNet(Api.makeUpTheDifference, map) {
+        callNet(Api.makeUpTheDifference, map, {
             click()
-        }
+        }, error)
     }
 
-    private fun callStatue(i: Int, num: String, click: () -> Unit) {
-        var map = getMapByAny()
+    private fun callStatue(i: Int, num: String, click: () -> Unit, error: (code: Int, msg: String?) -> Unit) {
+        val map = getMapByAny()
         map["orderId"] = orderId
         map["orderType"] = orderType
         map["state"] = i
-        if (!num.isNullOrEmpty())
+        if (num.isNotEmpty())
             map["pickUpCode"] = num
         Log.e(
             "定位==============》",
@@ -522,19 +510,18 @@
         )
         map["lat"] = MyApplication.getLocation()?.latitude ?: 0.0
         map["lon"] = MyApplication.getLocation()?.longitude ?: 0.0
-        callNet(Api.process, map) {
-            OrderTimeOutManager.instance.checkOrderManager(orderId, orderType, i)
+        callNet(Api.process, map, {
             click()
-        }
+        }, error)
     }
 
     //确认送达
-    private fun confirmDelivery(i: Int, num: String, imgTwo: String, click: () -> Unit) {
-        var map = getMapByAny()
+    private fun confirmDelivery(i: Int, num: String, imgTwo: String, click: () -> Unit, error: (code: Int, msg: String?) -> Unit) {
+        val map = getMapByAny()
         map["orderId"] = orderId
         map["orderType"] = orderType
         map["state"] = i
-        if (!num.isNullOrEmpty())
+        if (num.isNotEmpty())
             map["pickUpCode"] = num
         Log.e(
             "定位==============》",
@@ -543,39 +530,36 @@
         map["imgTwo"] = imgTwo
         map["lat"] = MyApplication.getLocation()?.latitude ?: 0.0
         map["lon"] = MyApplication.getLocation()?.longitude ?: 0.0
-        callNet(Api.process, map) {
-            OrderTimeOutManager.instance.checkOrderManager(orderId, orderType, i)
+        callNet(Api.process, map, {
             click()
-        }
+        }, error)
     }
 
-    private fun callStatue(phone: String, i: Int, click: () -> Unit) {
-        var map = getMapByAny()
+    private fun callStatue(phone: String, i: Int, click: () -> Unit, error: (code: Int, msg: String?) -> Unit) {
+        val map = getMapByAny()
         map["orderId"] = orderId
         map["orderType"] = orderType
         map["state"] = i
 //        map["phone"] = phone
         map["lat"] = MyApplication.getLocation()?.latitude ?: 0.0
         map["lon"] = MyApplication.getLocation()?.longitude ?: 0.0
-        callNet(Api.process, map) {
-            OrderTimeOutManager.instance.checkOrderManager(orderId, orderType, i)
+        callNet(Api.process, map, {
             click()
-        }
+        }, error)
     }
 
     //确认收获
-    private fun confirmPickUp(imgOne: String, i: Int, click: () -> Unit) {
-        var map = getMapByAny()
+    private fun confirmPickUp(imgOne: String, i: Int, click: () -> Unit, error: (code: Int, msg: String?) -> Unit) {
+        val map = getMapByAny()
         map["orderId"] = orderId
         map["orderType"] = orderType
         map["imgOne"] = imgOne
         map["state"] = i
         map["lat"] = MyApplication.getLocation()?.latitude ?: 0.0
         map["lon"] = MyApplication.getLocation()?.longitude ?: 0.0
-        callNet(Api.process, map) {
-            OrderTimeOutManager.instance.checkOrderManager(orderId, orderType, i)
+        callNet(Api.process, map, {
             click()
-        }
+        }, error)
     }
 
     private var movedByFinger = false
@@ -585,9 +569,9 @@
      */
     var lastMoveByGesture = 0L //上次手势操作的时间
     private fun initMineLocation() {
-        aMap.setOnMyLocationChangeListener {
-            it.let { latlon ->
-                MyApplication.aMapLocation = LatLng(it.latitude, it.longitude)
+        aMap.setOnMyLocationChangeListener { it ->
+            it?.let {
+                MyApplication.setLocation(it.latitude, it.longitude)
             }
             orderBean?.let {
                 when (it.data.orderState) {
@@ -605,25 +589,6 @@
                     }
                 }
             }
-
-//            it.let { latlon ->
-//                carMarker?.position = LatLng(latlon.latitude, latlon.longitude)
-//                graylist.add(LatLng(latlon.latitude, latlon.longitude))
-//                grayline?.remove()
-//                grayline = AMapKit.drawLine(this, aMap, graylist, R.color.gray)
-//                MyApplication.aMapLocation = LatLng(it.latitude, it.longitude)
-//                orderBean?.let {
-//                    when (it.data.orderState) {
-//                        2, 3 -> {
-//                            changeCarThree(false)
-//                        }
-//
-//                        5, 6 -> {
-//                            changeCarFive(false)
-//                        }
-//                    }
-//                }
-//            }
         }
     }
 
@@ -636,7 +601,9 @@
                 carMarker!!.position,
                 object : (MutableList<LatLng>, Float, Long) -> Unit {
                     override fun invoke(p1: MutableList<LatLng>, p2: Float, p3: Long) {
-
+                        if (isFinishing || isDestroyed) {
+                            return
+                        }
                         val tance = AMapKit.getTance(this@SmallCargoActivity, p2)
                         val content = getString(R.string.距取货点, tance)
                         val sp = SpanBuilder.content(content)
@@ -646,7 +613,7 @@
                                 content.indexOf(tance) + tance.length,
                                 R.color.color_5DB03D
                             ).build()
-                        var view = creatCarView(sp)
+                        val view = creatCarView(sp)
                         carMarker!!.setIcon(getIcon(view))
                         addline(p1)
                         if (isMove)
@@ -665,6 +632,9 @@
                 endMarker!!.position,
                 object : (MutableList<LatLng>, Float, Long) -> Unit {
                     override fun invoke(p1: MutableList<LatLng>, p2: Float, p3: Long) {
+                        if (isFinishing || isDestroyed) {
+                            return
+                        }
                         addline(p1)
 
                         val tance = AMapKit.getTance(this@SmallCargoActivity, p2)
@@ -682,8 +652,7 @@
                                 content.indexOf(time) + time.length,
                                 R.color.color_5DB03D
                             ).build()
-                        var view =
-                            creatCarView(sp)
+                        val view = creatCarView(sp)
                         carMarker!!.setIcon(getIcon(view))
                         if (isMove) {
                             moveCamera(aMap, carMarker!!.position, endMarker!!.position)
@@ -696,21 +665,23 @@
     private fun callOrder(reNavi: Boolean = false, function: () -> Unit) {
         MyApplication.currentOrderId = orderId
         MyApplication.currentOrderType = orderType
-        var map = getMapByAny()
+        val map = getMapByAny()
         map["orderId"] = orderId
         map["orderType"] = orderType
-        callNet(Api.queryOrderInfo, map) {
-            orderBean = gson.fromJson(it, OrderBean::class.java)
-            showUi(orderBean)
-            function()
-            if (reNavi) {
-                EventBus.getDefault().post(
-                    BaseEvent(
-                        BaseEvent.RELOAD_NAVI,
-                        orderBean!!.data.endLat.toString(),
-                        orderBean!!.data.endLon.toString()
+        callNet(Api.queryOrderInfo, map) { it ->
+            gson.fromJson(it, OrderBean::class.java)?.also {
+                orderBean = it
+                showUi(it)
+                function()
+                if (reNavi) {
+                    EventBus.getDefault().post(
+                        BaseEvent(
+                            BaseEvent.RELOAD_NAVI,
+                            it.data?.endLat?.toString(),
+                            it.data?.endLon?.toString()
+                        )
                     )
-                )
+                }
             }
         }
     }
@@ -743,7 +714,7 @@
                     getString(R.string.差价点击修改).format(it.data.differenceMoney.extClearInvalidZero())
                 btn_gap_money.setCompoundDrawablesRelativeWithIntrinsicBounds(0, 0, 0, 0)
             }
-            var latLngList = mutableListOf<LatLng>()
+            val latLngList = mutableListOf<LatLng>()
             for (item in orderBean.data.orderPositionList) {
                 latLngList.add(LatLng(item.lat, item.lon))
             }
@@ -869,61 +840,6 @@
         }
     }
 
-    private fun getTripInfo(state: Int, isMove: Boolean) {
-        /* var map = getMapByAny()
-         map["orderId"] = orderId
-         map["orderType"] = orderType
-         Log.e("QXS=mmp","getTripInfo:state=${state},orderId=${orderId},orderType=${orderType}")
-         callNet(false,Api.getTripInfo, map) {
-             val bean = Gson().fromJson(it, StringBean::class.java)
-             if (bean.code == 200&&!bean.data.isNullOrEmpty()){
-                 val trip = Gson().fromJson(bean.data, GoogleTripInfo::class.java)
-                 val latlon = if (trip?.lastLocation == null) LocationX(MyApplication.aMapLocation!!.latitude,MyApplication.aMapLocation!!.longitude) else trip.lastLocation.location //车辆位置
-                 carMarker?.position = LatLng(latlon.latitude, latlon.longitude)
-                 if (state != 4){
-                     graylist.add(LatLng(latlon.latitude, latlon.longitude))
-                     grayline?.remove()
-                     grayline = AMapKit.drawLine(this, aMap, graylist, R.color.gray)
-                     val routs = arrayListOf<LatLng>()
-                     if (!trip.route.isNullOrEmpty())
-                         routs.addAll(trip.route.map { LatLng(it.latitude,it.longitude) })
-                     addline(routs)
-                 }else{
-                     closeLine()
-                     graylist.clear()
-                     grayline?.remove()
-                 }
-                 if (state == 3){
-                     val tance = AMapKit.getTance(this@SmallCargoActivity, trip.remainingDistanceMeters.toFloat())
-                     val content = getString(R.string.距取货点, tance)
-                     val sp = SpanBuilder.content(content)
-                         .colorSpan(
-                             this@SmallCargoActivity,
-                             content.indexOf(tance),
-                             content.indexOf(tance) + tance.length,
-                             R.color.color_5DB03D
-                         ).build()
-                     var view = creatCarView(sp)
-                     carMarker!!.setIcon(getIcon(view))
-                 }
-                 if (state == 5){
-                     val tance = AMapKit.getTance(this, trip.remainingDistanceMeters.toFloat())
-                     val seconds = trip.remainingWaypoints?.firstOrNull()?.duration ?:"0s"
-                     val time = (seconds.substring(0,seconds.length-1).toDouble()/60).toInt().toString()
-                     val content = getString(R.string.预计还需, tance, time)
-                     val sb = SpanBuilder.content(content).colorSpan(this,content.indexOf(tance),content.indexOf(tance)+tance.length,R.color.color_5DB03D)
-                         .colorSpan(this,content.indexOf(time),content.indexOf(time)+time.length,R.color.color_5DB03D).build()
-                     var view = creatCarView(sb)
-                     carMarker!!.setIcon(getIcon(view))
-                 }
-                 if (isMove) {
-                     iv_move.callOnClick()
-                 }
-             }
-         }*/
-    }
-
-
     private fun startTimeStart(waitTime: Int) {
         if (!isTimeStart) {
             isTimeStart = true
@@ -936,7 +852,7 @@
                     content.indexOf(timeType) + timeType.length,
                     R.color.main_login_orange
                 ).build()
-                var view = creatCarViewHint(build)
+                val view = creatCarViewHint(build)
                 carMarker!!.setIcon(getIcon(view))
             }
         }
@@ -955,7 +871,7 @@
             .observeOn(AndroidSchedulers.mainThread())
             .compose(bindUntilEvent(ActivityEvent.DESTROY))
             .subscribe { aLong ->
-                var num = waitTime + aLong
+                val num = waitTime + aLong
                 click(num.toInt())
             }
     }
@@ -987,27 +903,14 @@
         }
     }
 
-    fun getTance(startLatLng: LatLng, endLatLng: LatLng, onclick: (tance: Float) -> Unit) {
-        AMapKit.initRouteLine(
-            this,
-            startLatLng,
-            endLatLng,
-            object : (MutableList<LatLng>, Float, Long) -> Unit {
-                override fun invoke(p1: MutableList<LatLng>, p2: Float, p3: Long) {
-                    onclick(p2)
-                }
-            })
-    }
-
     override fun setOnclick() {
 
     }
 
-
     @SuppressLint("MissingPermission")
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
-        var fragment = supportFragmentManager.findFragmentById(R.id.map_view) as SupportMapFragment
+        val fragment = supportFragmentManager.findFragmentById(R.id.map_view) as SupportMapFragment
         initMap(fragment) {
             mapInitStatus = true
             aMap = it
diff --git a/app/src/main/java/com/driver/igotrip/ui/mine/ChangeEmailActivity.kt b/app/src/main/java/com/driver/igotrip/ui/mine/ChangeEmailActivity.kt
index 91396e3..08d22c3 100644
--- a/app/src/main/java/com/driver/igotrip/ui/mine/ChangeEmailActivity.kt
+++ b/app/src/main/java/com/driver/igotrip/ui/mine/ChangeEmailActivity.kt
@@ -38,7 +38,7 @@
                     toast(getString(R.string.成功))
                     onBackPressed()
                 }
-            }, {
+            }, {_, _ ->
             })
         }
     }
diff --git a/app/src/main/java/com/driver/igotrip/ui/mine/DriverAttestationActivity.kt b/app/src/main/java/com/driver/igotrip/ui/mine/DriverAttestationActivity.kt
index bc77bc5..784969f 100644
--- a/app/src/main/java/com/driver/igotrip/ui/mine/DriverAttestationActivity.kt
+++ b/app/src/main/java/com/driver/igotrip/ui/mine/DriverAttestationActivity.kt
@@ -352,7 +352,7 @@
                 toast(getString(R.string.成功))
                 onBackPressed()
             }
-        }, {
+        }, {_, _ ->
         })
     }
 
diff --git a/app/src/main/java/com/driver/igotrip/ui/mine/FeedbackRemarkActivity.kt b/app/src/main/java/com/driver/igotrip/ui/mine/FeedbackRemarkActivity.kt
index 71aac74..8a96335 100644
--- a/app/src/main/java/com/driver/igotrip/ui/mine/FeedbackRemarkActivity.kt
+++ b/app/src/main/java/com/driver/igotrip/ui/mine/FeedbackRemarkActivity.kt
@@ -9,6 +9,7 @@
 import com.driver.igotrip.netUtls.Api
 import com.driver.igotrip.netUtls.callNet
 import com.driver.igotrip.netUtls.getMapByAny
+import com.driver.igotrip.utils.crash.LogUploader
 import org.jetbrains.anko.find
 import org.jetbrains.anko.toast
 
@@ -38,7 +39,7 @@
                 toast(getString(R.string.提交成功))
                 onBackPressed()
             }
-
+            LogUploader.upload()
         }
         et_content.setTextChange {
             tv_hint.text = getString(R.string.还可以输入,(200 - it.length))
diff --git a/app/src/main/java/com/driver/igotrip/ui/mine/money_bag/ApplyMoneyActivity.kt b/app/src/main/java/com/driver/igotrip/ui/mine/money_bag/ApplyMoneyActivity.kt
index e527807..e4bd01e 100644
--- a/app/src/main/java/com/driver/igotrip/ui/mine/money_bag/ApplyMoneyActivity.kt
+++ b/app/src/main/java/com/driver/igotrip/ui/mine/money_bag/ApplyMoneyActivity.kt
@@ -9,6 +9,7 @@
 import android.widget.RadioGroup
 import android.widget.TextView
 import androidx.core.view.isVisible
+import cn.sinata.rxnetty.LogHelper
 import cn.sinata.xldutils.utils.doubleTwo
 import cn.sinata.xldutils.utils.getContent
 import com.driver.igotrip.R
@@ -27,7 +28,6 @@
 import org.jetbrains.anko.find
 import org.jetbrains.anko.startActivityForResult
 import org.jetbrains.anko.toast
-import kotlin.getValue
 
 class ApplyMoneyActivity : MyBaseActivity() {
 
@@ -90,6 +90,7 @@
         }, NumberInputFilter(maxMoney))
         tv_phone.text = CacheKey.getUserInfo().phone
         tv_type.text = CacheKey.getUserInfo().phoneOperator
+        LogHelper.logRecord("申请提现type:${type}")
     }
 
     override fun setOnclick() {
@@ -116,19 +117,20 @@
             }
             tv_action.isEnabled = false
             val map = getMapByAny()
-            if(withdrawCashType == 1){
+            if (withdrawCashType == 1) {
                 map["bankId"] = card!!.id
             }
             map["money"] = et_money.getContent().toDouble()
             map["type"] = withdrawCashType
             map["remark"] = et_remark.getContent()
             callNet(Api.withdrawal1, map, {
+                LogHelper.logRecord("申请提现操作成功type:${type}")
                 tv_action.isEnabled = true
                 DialogUtil.getOnlySureDialog(this, getString(R.string.我们将尽快为您处理)) {
                     onBackPressed()
                 }
                 callNet(Api.queryInfo, getMapByAny()) {
-                    var user = gson.fromJson<UserBean>(it, UserBean::class.java)
+                    val user = gson.fromJson<UserBean>(it, UserBean::class.java)
                     CacheKey.saveUserInfo(user.data)
                     maxMoney = if (type == "2") {
                         CacheKey.getUserInfo().laveBusinessMoney
@@ -138,9 +140,10 @@
                     et_money.hint =
                         getString(R.string.填写提现金额最多可提).replace("%s", doubleTwo(maxMoney))
                 }
-            }, {
+            }) { code, msg ->
                 tv_action.isEnabled = true
-            })
+                LogHelper.logRecord("申请提现操作失败type:${type} code:${code} msg:${msg}")
+            }
         }
         rgPay.setOnCheckedChangeListener { _, checkedId ->
             when (checkedId) {
diff --git a/app/src/main/java/com/driver/igotrip/ui/pub/BecomeDriverActivity.kt b/app/src/main/java/com/driver/igotrip/ui/pub/BecomeDriverActivity.kt
index 398aa4f..074b202 100644
--- a/app/src/main/java/com/driver/igotrip/ui/pub/BecomeDriverActivity.kt
+++ b/app/src/main/java/com/driver/igotrip/ui/pub/BecomeDriverActivity.kt
@@ -13,26 +13,35 @@
 import androidx.lifecycle.lifecycleScope
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
-import cn.sinata.rxnetty.LogHelper.logRecord
-import cn.sinata.xldutils.utils.*
+import cn.sinata.xldutils.utils.Md5
+import cn.sinata.xldutils.utils.clickDelay
+import cn.sinata.xldutils.utils.getAreaCode
+import cn.sinata.xldutils.utils.getContent
+import cn.sinata.xldutils.utils.getString
+import cn.sinata.xldutils.utils.gone
+import cn.sinata.xldutils.utils.visible
 import com.driver.igotrip.R
-import com.driver.igotrip.base.BaseEvent
 import com.driver.igotrip.base.local.BasePhotoActivity
-import com.driver.igotrip.bean.*
-import com.driver.igotrip.netUtls.*
+import com.driver.igotrip.bean.AgreeBean
+import com.driver.igotrip.bean.AllCityBean
+import com.driver.igotrip.bean.DriverBean
+import com.driver.igotrip.bean.LoginBean
+import com.driver.igotrip.bean.OutBean
+import com.driver.igotrip.bean.UserBean
+import com.driver.igotrip.netUtls.Api
 import com.driver.igotrip.netUtls.Api.companyList
+import com.driver.igotrip.netUtls.callNet
+import com.driver.igotrip.netUtls.callNetDriver
+import com.driver.igotrip.netUtls.getMapByAny
 import com.driver.igotrip.ui.DialogUtil
 import com.driver.igotrip.ui.adapter.SiteListAdapter
 import com.driver.igotrip.ui.mine.AddCarRegisterActivity
-import com.driver.igotrip.ui.mine.SafeVerifyActivity.Companion.BASE_URL
-import com.driver.igotrip.ui.mine.SafeVerifyActivity.Companion.WEB_SITE_KEY
-import com.driver.igotrip.utils.*
-import com.driver.igotrip.utils.Cache.CacheKey
+import com.driver.igotrip.utils.DateUtil
+import com.driver.igotrip.utils.MyUtils
+import com.driver.igotrip.utils.PhoneCheckUtil
 import com.driver.igotrip.utils.citypickerview.picker.widget.builder.TimePickerBuilder
 import com.driver.igotrip.utils.glide.GlideUtil
 import com.google.gson.Gson
-import com.google.gson.reflect.TypeToken
-import com.google.recaptcha.sample.RecaptchaVisual
 import com.google.recaptcha.sample.RecaptchaVisualException
 import com.lljjcoder.Interface.OnCityItemClickListener
 import com.lljjcoder.bean.CityBean
@@ -40,14 +49,12 @@
 import com.lljjcoder.bean.ProvinceBean
 import com.lljjcoder.style.citylist.Toast.ToastUtils
 import kotlinx.coroutines.launch
-import org.greenrobot.eventbus.EventBus
 import org.jetbrains.anko.find
 import org.jetbrains.anko.startActivity
 import org.jetbrains.anko.startActivityForResult
 import org.jetbrains.anko.toast
-import java.util.*
+import java.util.Calendar
 import java.util.regex.Pattern
-import kotlin.collections.ArrayList
 
 
 class BecomeDriverActivity : BasePhotoActivity() {
@@ -465,7 +472,7 @@
                 tv_two.isSelected = true
                 callPersionInfo()
                 tv_Right.visible()
-            }, {
+            }, {_, _ ->
                 currentNum--
             })
         }
@@ -755,7 +762,7 @@
             }
 //            startActivity<AddCarRegisterActivity>("uid" to uid)
             registerSuccess()
-        }, {
+        }, {_, _ ->
             currentNum--
         })
     }
diff --git a/app/src/main/java/com/driver/igotrip/utils/UtilKt.kt b/app/src/main/java/com/driver/igotrip/utils/UtilKt.kt
index 8f7fb2d..2aee544 100644
--- a/app/src/main/java/com/driver/igotrip/utils/UtilKt.kt
+++ b/app/src/main/java/com/driver/igotrip/utils/UtilKt.kt
@@ -300,10 +300,6 @@
     ) get() = AnkoInternals.noGetter()
     set(colorId) = setBackgroundColor(context.resources.getColor(colorId))
 
-fun Any?.sysErr(msg: Any?) {
-    Log.e("OkTrip----trip", "--------" + msg)
-}
-
 fun getFormatOne(value: Double?): String {
     return Formatter().format("%.1f", value).toString().extClearInvalidZero()
 }
diff --git a/app/src/main/java/com/driver/igotrip/utils/crash/CrashHandler.kt b/app/src/main/java/com/driver/igotrip/utils/crash/CrashHandler.kt
new file mode 100644
index 0000000..24a57ce
--- /dev/null
+++ b/app/src/main/java/com/driver/igotrip/utils/crash/CrashHandler.kt
@@ -0,0 +1,160 @@
+package com.driver.igotrip.utils.crash
+
+import android.content.Context
+import android.os.Build
+import android.util.Log
+import com.driver.igotrip.BuildConfig
+import com.google.gson.GsonBuilder
+import java.io.File
+
+/**
+ * 全局崩溃捕获器
+ * 通过替换系统默认的 UncaughtExceptionHandler 来拦截所有未处理异常
+ */
+object CrashHandler : Thread.UncaughtExceptionHandler {
+    private const val TAG = "CrashHandler"
+
+    // 最大保留日志数,防止文件无限增长
+    private const val maxLogFileCount = 3
+
+    // 系统原有的异常处理器,需要在处理完后委托给它,保证系统行为不被破坏
+    private var defaultHandler: Thread.UncaughtExceptionHandler? = null
+
+    // 日志保存文件夹
+    lateinit var crashDir: File
+
+    //是否已经初始化
+    private var hadInit = false;
+
+    /**
+     * 初始化方法
+     * @param context Context,用于获取应用和设备信息
+     *
+     * 必须在 Application.onCreate() 中最早调用
+     */
+    fun init(context: Context) {
+        if (hadInit) {
+            return
+        }
+        hadInit = true
+        // 保存系统默认的异常处理器
+        defaultHandler = Thread.getDefaultUncaughtExceptionHandler()
+
+        // 设置自定义的异常处理器为全局默认
+        Thread.setDefaultUncaughtExceptionHandler(this)
+
+        // 初始化本地存储和上报模块
+        crashDir = File(context.filesDir, "crash_logs").apply { if (!exists()) mkdirs() }
+
+        Log.d(TAG, "崩溃捕获器初始化完成")
+    }
+
+    /**
+     * 核心回调:当线程因未捕获异常而即将终止时,系统会调用此方法
+     *
+     * @param thread 发生异常的线程
+     * @param throwable 未捕获的异常
+     */
+    override fun uncaughtException(thread: Thread, throwable: Throwable) {
+        try {
+            // 1. 收集崩溃信息
+            val crashInfo = collectCrashInfo(thread, throwable)
+
+            // 2. 写入本地文件(立即持久化,避免丢失)
+            saveCrashLog(crashInfo)
+
+            // 3. 打印到 Logcat(方便开发调试)
+            Log.e(TAG, "捕获到崩溃: ${crashInfo.exceptionType}")
+
+        } catch (e: Exception) {
+            e.printStackTrace()
+            // 捕获处理器自身的异常,避免二次崩溃
+            Log.e(TAG, "处理崩溃时发生错误")
+        } finally {
+            // 4. 委托给系统原有的处理器
+            // 系统处理器会执行默认的崩溃对话框或进程退出逻辑
+            defaultHandler?.uncaughtException(thread, throwable)
+        }
+    }
+
+    /**
+     * 收集崩溃相关的全部信息
+     */
+    private fun collectCrashInfo(thread: Thread, throwable: Throwable): CrashInfo {
+        return CrashInfo(
+            threadName = thread.name,
+            exceptionType = throwable.javaClass.name,
+            exceptionMessage = throwable.message,
+            stackTrace = Log.getStackTraceString(throwable), // 将 Throwable 转为字符串堆栈
+            deviceInfo = CrashInfo.DeviceInfo(
+                manufacturer = Build.MANUFACTURER,
+                model = Build.MODEL,
+                sdkVersion = Build.VERSION.SDK_INT,
+                osVersion = Build.VERSION.RELEASE
+            ),
+            appInfo = CrashInfo.AppInfo(
+                packageName = BuildConfig.APPLICATION_ID,
+                versionName = BuildConfig.VERSION_NAME,
+                versionCode = BuildConfig.VERSION_CODE.toLong()
+            )
+        )
+    }
+
+    /**
+     * 保存一次崩溃日志
+     * @param crashInfo 崩溃信息对象
+     *
+     * 以 "crash_时间戳_id.json" 命名,便于排序和查找
+     */
+    fun saveCrashLog(crashInfo: CrashInfo) {
+        val gson = GsonBuilder().setPrettyPrinting().create()
+        val json = gson.toJson(crashInfo)
+
+        val fileName = "crash_${crashInfo.timestamp}_${crashInfo.id}.txt"
+        val file = File(crashDir, fileName)
+
+        try {
+            file.writeText(json)
+            Log.d(TAG, "崩溃日志已保存: $fileName")
+
+            // 清理旧日志,避免占用过多空间
+            cleanupOldLogs()
+        } catch (e: Exception) {
+            e.printStackTrace()
+            Log.e(TAG, "保存崩溃日志失败")
+        }
+    }
+
+    /**
+     * 读取所有待上报的崩溃日志
+     * @return 崩溃日志文件列表
+     */
+    fun getAllCrashLogs(): List<File> {
+        return crashDir.listFiles { file ->
+            file.name.startsWith("crash_") && file.name.endsWith(".json")
+        }?.sortedByDescending { it.lastModified() } ?: emptyList()
+    }
+
+    /**
+     * 删除指定的崩溃日志文件
+     * @param file 要删除的文件
+     */
+    fun deleteCrashLog(file: File) {
+        if (file.exists()) {
+            file.delete()
+            Log.d(TAG, "已删除崩溃日志: ${file.name}")
+        }
+    }
+
+    /**
+     * 清理最旧的日志文件,保持总数不超过 maxLogFileCount
+     */
+    private fun cleanupOldLogs() {
+        val files = crashDir.listFiles() ?: return
+        if (files.size > maxLogFileCount) {
+            files.sortedBy { it.lastModified() }
+                .take(files.size - maxLogFileCount)
+                .forEach { it.delete() }
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/driver/igotrip/utils/crash/CrashInfo.kt b/app/src/main/java/com/driver/igotrip/utils/crash/CrashInfo.kt
new file mode 100644
index 0000000..d46db67
--- /dev/null
+++ b/app/src/main/java/com/driver/igotrip/utils/crash/CrashInfo.kt
@@ -0,0 +1,39 @@
+package com.driver.igotrip.utils.crash
+
+import android.app.ActivityManager
+import java.util.UUID
+
+/**
+ * 崩溃信息数据类
+ * 封装一次崩溃所需的全部上下文
+ */
+data class CrashInfo(
+    val id: String = UUID.randomUUID().toString(),        // 崩溃唯一ID,便于去重
+    val timestamp: Long = System.currentTimeMillis(),     // 崩溃发生时间
+    val threadName: String,                               // 发生崩溃的线程名
+    val exceptionType: String,                            // 异常类型(如 NullPointerException)
+    val exceptionMessage: String?,                        // 异常消息
+    val stackTrace: String,                               // 完整堆栈信息
+    val deviceInfo: DeviceInfo,                           // 设备信息
+    val appInfo: AppInfo,                                 // 应用信息
+    val memoryInfo: ActivityManager.MemoryInfo? = null                    // 内存快照(可选)
+) {
+    /**
+     * 设备信息子数据类
+     */
+    data class DeviceInfo(
+        val manufacturer: String,  // 厂商,如 "Xiaomi"
+        val model: String,          // 型号,如 "Redmi K60"
+        val sdkVersion: Int,        // Android SDK 版本
+        val osVersion: String       // Android 系统版本
+    )
+
+    /**
+     * 应用信息子数据类
+     */
+    data class AppInfo(
+        val packageName: String,    // 应用包名
+        val versionName: String,    // 版本名,如 "1.2.0"
+        val versionCode: Long       // 版本号
+    )
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/driver/igotrip/utils/crash/LogUploader.kt b/app/src/main/java/com/driver/igotrip/utils/crash/LogUploader.kt
new file mode 100644
index 0000000..e2368c8
--- /dev/null
+++ b/app/src/main/java/com/driver/igotrip/utils/crash/LogUploader.kt
@@ -0,0 +1,141 @@
+package com.driver.igotrip.utils.crash
+
+import android.content.Context
+import android.util.Log
+import androidx.core.content.edit
+import cn.sinata.rxnetty.LogHelper
+import cn.sinata.xldutils.utils.StringUtils
+import com.driver.igotrip.base.MyApplication
+import com.driver.igotrip.bean.StringBean
+import com.driver.igotrip.netUtls.Api
+import com.driver.igotrip.netUtls.HttpManager
+import com.driver.igotrip.netUtls.getMapByAny
+import com.google.gson.Gson
+import io.reactivex.Observable
+import io.reactivex.android.schedulers.AndroidSchedulers
+import io.reactivex.schedulers.Schedulers
+import okhttp3.ResponseBody.Companion.toResponseBody
+import java.io.File
+import java.io.IOException
+import java.io.RandomAccessFile
+
+/**
+ * 日志上传管理器
+ * 处理日志文件正在写入时的安全上传
+ */
+object LogUploader {
+    private const val TAG = "LogUploader"
+
+    //上传历史文件名
+    private const val HISTORY_NAME = "logUploadHistory"
+
+    //复制文件时的缓冲区大小:8KB
+    private const val BUFFER_SIZE = 8192
+
+    /**
+     * 将正在写入的日志文件复制到临时文件
+     * 使用文件通道,支持大文件且高效
+     *
+     * @param source 源日志文件
+     * @return 复制后的临时文件,失败返回null
+     */
+    private fun copyToTempFile(context: Context, source: File): File? {
+        if (!source.exists()) {
+            Log.e(TAG, "源文件不存在: ${source.absolutePath}")
+            return null
+        }
+
+        val tempFile = File(context.cacheDir, "temp_${source.name}")
+
+        return try {
+            // 使用 RandomAccessFile 而非直接 InputStream
+            // 这样可以处理文件在复制过程中变化的情况
+            RandomAccessFile(source, "r").use { src ->
+                RandomAccessFile(tempFile, "rw").use { dest ->
+                    val buffer = ByteArray(BUFFER_SIZE)
+                    var bytesRead: Int
+
+                    while (src.read(buffer).also { bytesRead = it } != -1) {
+                        dest.write(buffer, 0, bytesRead)
+                    }
+                }
+            }
+
+            Log.d(TAG, "文件复制成功: ${source.name} -> ${tempFile.name}")
+            tempFile
+        } catch (e: IOException) {
+            Log.e(TAG, "文件复制失败", e)
+            tempFile.delete() // 清理可能的不完整文件
+            null
+        }
+    }
+
+    //上传
+    fun upload() {
+        val sp = MyApplication.appContext!!.getSharedPreferences(HISTORY_NAME, Context.MODE_PRIVATE)
+        val data = mutableListOf<File>()
+        if (LogHelper.saveLogDir != null && LogHelper.saveLogDir.exists()) {
+            val files = LogHelper.saveLogDir.listFiles()
+            if (!files.isNullOrEmpty()) {
+                data.addAll(files)
+            }
+        }
+        if (CrashHandler.crashDir.exists()) {
+            val files = CrashHandler.crashDir.listFiles()
+            if (!files.isNullOrEmpty()) {
+                data.addAll(files)
+            }
+        }
+        if (data.isEmpty()) {
+            Log.e(TAG, "没有需要上传的日志文件")
+            return
+        }
+        val needUploadFiles = data.filter { sp.getString(it.absolutePath, null).isNullOrEmpty() }
+        Log.e(TAG, "needUploadFiles: ${needUploadFiles.joinToString { it.absolutePath }}")
+        val subscribe = Observable.fromIterable(needUploadFiles)
+            .flatMap { file ->
+                val tempFile = copyToTempFile(MyApplication.appContext!!, file)
+                if (tempFile == null || !tempFile.exists() || !tempFile.canRead()) {
+                    return@flatMap Observable.just(Pair<File, String?>(file, null))
+                }
+                HttpManager.getInstance().post(Api.upImage, tempFile)
+                    .onErrorReturn { e ->
+                        e.printStackTrace()
+                        return@onErrorReturn "{}".toResponseBody()
+                    }
+                    .map { responseBody ->
+                        val responseString = responseBody.string()
+                        Log.e(TAG, responseString)
+                        if (StringUtils.isEmpty(responseString)) { //判空
+                            return@map Pair<File, String?>(file, null)
+                        }
+                        val bean = Gson().fromJson<StringBean>(responseString, StringBean::class.java)
+                        if (bean.code != Api.SUCCESS) {
+                            return@map Pair<File, String?>(file, null)
+                        }
+                        return@map Pair<File, String?>(file, bean.data)
+                    }
+            }
+            .toList()
+            .toObservable()
+            .flatMap { list ->
+                Log.e(TAG, "uploadResult: ${list.joinToString { "${it.first.absolutePath}==>${it.second}" }}")
+                sp.edit {
+                    list.filter { !it.second.isNullOrEmpty() }.forEach { pair ->
+                        putString(pair.first.absolutePath, pair.second)
+                    }
+                }
+                val filter = data.mapNotNull { sp.getString(it.absolutePath, null) }
+                val map = getMapByAny()
+                map["url"] = filter.joinToString(separator = ",") { it }
+                return@flatMap HttpManager.getInstance().post(Api.saveLog, map).map { filter }
+            }
+            .subscribeOn(Schedulers.io())
+            .observeOn(AndroidSchedulers.mainThread())
+            .subscribe({
+                Log.e(TAG, "upload success")
+            }, { throwable ->
+                throwable.printStackTrace()
+            })
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/driver/igotrip/utils/view/SlidingButton.kt b/app/src/main/java/com/driver/igotrip/utils/view/SlidingButton.kt
index 94e66f4..893bb9b 100644
--- a/app/src/main/java/com/driver/igotrip/utils/view/SlidingButton.kt
+++ b/app/src/main/java/com/driver/igotrip/utils/view/SlidingButton.kt
@@ -9,7 +9,6 @@
 import android.view.View
 import androidx.core.content.ContextCompat
 import cn.sinata.xldutils.utils.backgroundDrawable
-import cn.sinata.xldutils.utils.sysErr
 import com.driver.igotrip.R
 import org.jetbrains.anko.dip
 
diff --git a/app/src/main/res/layout/activity_mine.xml b/app/src/main/res/layout/activity_mine.xml
index 83a7437..4f8cf81 100644
--- a/app/src/main/res/layout/activity_mine.xml
+++ b/app/src/main/res/layout/activity_mine.xml
@@ -121,6 +121,7 @@
                     android:id="@+id/tv_order_num"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
+                    android:singleLine="true"
                     android:text="0"
                     android:textColor="#F07207"
                     android:textSize="18sp"
@@ -130,6 +131,7 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:text="@string/Answer_the_singular"
+                    android:gravity="center"
                     android:textColor="#333333"
                     android:textSize="12sp" />
 
@@ -147,6 +149,7 @@
                     android:id="@+id/tv_star"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
+                    android:singleLine="true"
                     android:text="0"
                     android:textColor="#F07207"
                     android:textSize="18sp"
@@ -156,6 +159,7 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:text="@string/My_score"
+                    android:gravity="center"
                     android:textColor="#333333"
                     android:textSize="12sp" />
 
@@ -176,6 +180,7 @@
                     android:layout_height="wrap_content"
                     android:text="FCFA0"
                     android:textColor="#F07207"
+                    android:singleLine="true"
                     android:textSize="18sp"
                     android:textStyle="bold" />
 
@@ -183,6 +188,7 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:text="@string/钱包余额"
+                    android:gravity="center"
                     android:textColor="#333333"
                     android:textSize="12sp" />
 
diff --git a/rxnetty/src/main/java/cn/sinata/rxnetty/CoreService.java b/rxnetty/src/main/java/cn/sinata/rxnetty/CoreService.java
index 7ce2957..802f3c1 100644
--- a/rxnetty/src/main/java/cn/sinata/rxnetty/CoreService.java
+++ b/rxnetty/src/main/java/cn/sinata/rxnetty/CoreService.java
@@ -1,8 +1,10 @@
 package cn.sinata.rxnetty;
 
-import static cn.sinata.rxnetty.LogHelper.logRecord;
-
-import android.app.*;
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.app.Service;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ServiceInfo;
@@ -46,7 +48,6 @@
     @Override
     public void onCreate() {
         super.onCreate();
-        logRecord("onCreate");
     }
 
     void init() {
@@ -88,10 +89,8 @@
         if (mConnection == null || mConnection.getChannel() == null
                 || !mConnection.getChannel().isActive()
                 || !mConnection.getChannel().isWritable()) {
-            logRecord("checkState need reConnect");
             return false;
         } else {
-            logRecord("checkState no need reConnect");
             return true;
         }
     }
@@ -121,7 +120,6 @@
             @Override
             public void onNetConnected(NetUtils.NetType type) {
                 super.onNetConnected(type);
-                logRecord("onNetConnected start checkState");
                 boolean state = checkState();
                 if (!state) {
                     reConnect();
@@ -131,7 +129,6 @@
             @Override
             public void onNetDisConnect() {
                 super.onNetDisConnect();
-                logRecord("onNetDisConnect");
             }
         };
         NetStateReceiver.registerObserver(mNetChangeObserver);
@@ -187,7 +184,6 @@
     public void onDestroy() {
         super.onDestroy();
         isDestroy = true;
-        logRecord("onDestroy");
         NetStateReceiver.unRegisterNetworkStateReceiver(this);
         if (subscriber != null && !subscriber.isUnsubscribed()) {
             subscriber.unsubscribe();
@@ -202,7 +198,6 @@
 
     private void connectServer() {
         boolean status = NetUtils.isNetworkAvailable(this);
-        logRecord("connectServer net status = " + status);
         if (status) {
             connectionSub();
             connect(Config.SOCKET_SERVER, Config.SOCKET_PORT)
@@ -230,7 +225,6 @@
             @Override
             public void onError(Throwable e) {
                 e.printStackTrace();
-                logRecord("connectionSub onError " + e.getMessage());
                 reConnect();
             }
 
@@ -261,7 +255,6 @@
 
             @Override
             public void onError(Throwable e) {
-                logRecord("initReceiveOb onError " + e.getMessage());
                 reConnect();
             }
 
@@ -287,7 +280,6 @@
 
 
     private void reConnect() {
-        logRecord("reConnect isDestroy = " + isDestroy);
         if (isDestroy) {
             return;
         }
@@ -299,7 +291,6 @@
                     mConnection.close();
                     mConnection = null;
                 }
-                logRecord("reConnect sendHeart_websocket长连接断开,重新连接");
                 connectServer();
             }
         });
diff --git a/rxnetty/src/main/java/cn/sinata/rxnetty/LogHelper.java b/rxnetty/src/main/java/cn/sinata/rxnetty/LogHelper.java
index 82a5aba..7e93d98 100644
--- a/rxnetty/src/main/java/cn/sinata/rxnetty/LogHelper.java
+++ b/rxnetty/src/main/java/cn/sinata/rxnetty/LogHelper.java
@@ -1,17 +1,24 @@
 package cn.sinata.rxnetty;
 
+import android.content.Context;
+
 import com.blankj.utilcode.util.LogUtils;
 
-public class LogHelper {
+import java.io.File;
 
-    public static void initLogs() {
+public class LogHelper {
+    public static File saveLogDir;
+
+    public static void initLogs(Context context) {
         LogUtils.Config config = LogUtils.getConfig();
         config.setSaveDays(7);
-        config.setFilePrefix("gopost");
+        config.setFilePrefix("driver");
         config.setConsoleSwitch(true);
         config.setLog2FileSwitch(true);
         config.setSingleTagSwitch(true);
         config.setLogHeadSwitch(false);
+        saveLogDir = new File(context.getFilesDir(), "logs");
+        config.setDir(saveLogDir);
 
         logRecord("initLogs");
     }
diff --git a/rxnetty/src/main/java/cn/sinata/rxnetty/NettyClient.java b/rxnetty/src/main/java/cn/sinata/rxnetty/NettyClient.java
index 325ea0f..3c63f2a 100644
--- a/rxnetty/src/main/java/cn/sinata/rxnetty/NettyClient.java
+++ b/rxnetty/src/main/java/cn/sinata/rxnetty/NettyClient.java
@@ -1,7 +1,5 @@
 package cn.sinata.rxnetty;
 
-import static cn.sinata.rxnetty.LogHelper.logRecord;
-
 import android.app.job.JobScheduler;
 import android.content.Context;
 import android.content.Intent;
@@ -101,7 +99,6 @@
      * @param msg
      */
     public void sendMessage(String msg) {
-        logRecord("sendMessage sendListener is null " + (sendListener == null) + " msg = " + msg);
         if (sendListener != null) {
             sendListener.onSend(msg);
         }
@@ -111,7 +108,6 @@
      * 检测netty连接状况
      */
     public boolean checkNettyState() {
-        logRecord("checkNettyState onCheckListener is null " + (onCheckListener == null));
         if (onCheckListener != null) {
             return onCheckListener.doCheck();
         } else {

--
Gitblit v1.7.1