diff --git a/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt b/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt
index 287293c..4405f38 100644
--- a/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt
+++ b/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt
@@ -9,7 +9,6 @@
 import com.supwisdom.utils.DateUtil
 import com.supwisdom.utils.FileUtil
 import com.supwisdom.utils.LogUtil
-import java.lang.Exception
 
 /**
  ** create by zzq on 2019/7/23
@@ -55,47 +54,42 @@
     }
 
     private fun heartAndTransdtl() {
-        /**做一卡通的心跳以及流水上传*/
         try {
-            apiInterface.heartBeat()
-            SPApplication.getInstance().setEpayLinking(true)
             /**更新通讯jwt*/
             refreshJwt()
+            SPApplication.getInstance().setEpayLinking(true)
+            /**做一卡通的心跳以及流水上传*/
+            apiInterface.heartBeat()
+            SPApplication.getInstance().setEpayLinking(true)
             uploadTransdtl()
         } catch (ex: HeartBeatError) {
             SPApplication.getInstance().setEpayLinking(false)
+        } catch (ex: TransdtlUploadError) {
+            ex.printStackTrace()
+        } catch (ex: AuthEpayError) {
+            SPApplication.getInstance().setEpayLinking(false)
         }
     }
 
     private fun uploadTransdtl() {
-        try {
-            pos.getTransdtlOfflineUnconfirm().forEach {
-                apiInterface.uploadTransdtl(it)
-                it.upflag = 1
-                pos.updateTransdtlOffline(it)
-            }
-            pos.getTransdtlOnlineUnconfirm().forEach {
-                apiInterface.uploadTransdtl(it)
-                it.upflag = 1
-                pos.updateTransdtlOnline(it)
-            }
-        } catch (ex: TransdtlUploadError) {
-            ex.printStackTrace()
+        pos.getTransdtlOfflineUnconfirm().forEach {
+            apiInterface.uploadTransdtl(it)
+            it.upflag = 1
+            pos.updateTransdtlOffline(it)
+        }
+        pos.getTransdtlOnlineUnconfirm().forEach {
+            apiInterface.uploadTransdtl(it)
+            it.upflag = 1
+            pos.updateTransdtlOnline(it)
         }
     }
 
     private fun refreshJwt() {
-        try {
-            val jwtExpire = pos.getDynamicPara()?.jwtExpire ?: "0"
-            if (jwtExpire < DateUtil.getNowDateTimeNoFormat()) {
-                autoAuth()
-            } else {
-                AuthEpay().refresh()
-            }
-            SPApplication.getInstance().setEpayLinking(true)
-        } catch (ex: AuthEpayError) {
-            ex.printStackTrace()
-            SPApplication.getInstance().setEpayLinking(false)
+        val jwtExpire = pos.getDynamicPara()?.jwtExpire ?: "0"
+        if (jwtExpire < DateUtil.getNowDateTimeNoFormat()) {
+            autoAuth()
+        } else {
+            AuthEpay().refresh()
         }
     }
 
diff --git a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
index 2495ff6..0cdffea 100644
--- a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
+++ b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
@@ -59,7 +59,7 @@
             try {
                 downloadSyspara(retBean.paragroupid, retBean.paraverno)
             } catch (ex: SysParaError) {
-                throw SysParaError(ex.message ?: "null")
+                throw HeartBeatError(ex.message ?: "null")
             }
         }
         /**
@@ -108,6 +108,18 @@
                 it.paraname == "communicate_time" -> record.commTime = it.paraval!!.toInt()
             }
         }
+        if (record.heatBeat == 0) {
+            record.heatBeat = 60
+        }
+        if (record.sucShowtime == 0) {
+            record.sucShowtime = 2
+        }
+        if (record.failShowtime == 0) {
+            record.failShowtime = 3
+        }
+        if (record.commTime == 0) {
+            record.commTime = 3
+        }
         if (!pos.replaceSysPara(record)) {
             throw SysParaError("保存参数失败")
         }
