diff --git a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
index 8de47f0..b238e97 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
@@ -253,12 +253,12 @@
     }
 
     private fun dealIntent() {
-        amount = this.intent.getIntExtra("amount", 0)
+        amount = this.intent.getStringExtra("amount")?.toInt() ?: 0
         payWay = this.intent.getStringExtra("payway")
         val operation = this.intent.getStringExtra("operation")
         if (operation == "reverse") {
             presenter.clickToReverse(amount)
-            dialogPurchase!!.show("等待冲正", CommonUtil.showFormatAmount("金额:", amount))
+            dialogPurchase!!.show("等待冲正", CommonUtil.showFormatAmount("金额", amount))
         }
         this.intent.putExtra("amount", "0")
         this.intent.putExtra("payway", "")
@@ -409,7 +409,7 @@
                 .append(info.transtime?.substring(2, 4)).append(":")
                 .append(info.transtime?.substring(4))
             vLastPaytime.text = sb.toString()
-            resetPayShowCounter(10 * 1000)
+            resetPayShowCounter(30 * 1000)
         }
     }
 
diff --git a/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt b/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
index e1e2c0d..2bfb60f 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
@@ -154,19 +154,23 @@
                 cardBean.cardNo!!
             )
             if (resp != null && resp.retcode == HttpStatus.SC_OK) {
-                val retBean = GsonUtil.GsonToBean(resp.retjson!!, CardAccountRetBean::class.java)
-                if (retBean.retcode == PublicDef.SUCCESS) {
-                    cardBean.username = retBean.username
-                    cardBean.userid = retBean.userid
-                    cardBean.balance = retBean.balance
-                    when {
-                        "normal" == retBean.status -> cardBean.cardstatus = CardStatus.NORMAL
-                        "expire" == retBean.status -> cardBean.cardstatus = CardStatus.EXPIRE
-                        "lost" == retBean.status -> cardBean.cardstatus = CardStatus.LOCK
-                        "logout" == retBean.status -> cardBean.cardstatus = CardStatus.LOGOUT
-                        "frozen" == retBean.status -> cardBean.cardstatus = CardStatus.FROZEN
-                        "lock" == retBean.status -> cardBean.cardstatus = CardStatus.LOST
+                try {
+                    val retBean = GsonUtil.GsonToBean(resp.retjson!!, CardAccountRetBean::class.java)
+                    if (retBean.retcode == PublicDef.SUCCESS) {
+                        cardBean.username = retBean.username
+                        cardBean.userid = retBean.userid
+                        cardBean.balance = retBean.balance
+                        when {
+                            "normal" == retBean.status -> cardBean.cardstatus = CardStatus.NORMAL
+                            "expire" == retBean.status -> cardBean.cardstatus = CardStatus.EXPIRE
+                            "lost" == retBean.status -> cardBean.cardstatus = CardStatus.LOCK
+                            "logout" == retBean.status -> cardBean.cardstatus = CardStatus.LOGOUT
+                            "frozen" == retBean.status -> cardBean.cardstatus = CardStatus.FROZEN
+                            "lock" == retBean.status -> cardBean.cardstatus = CardStatus.LOST
+                        }
                     }
+                } catch (ex: Exception) {
+                    ex.printStackTrace()
                 }
             }
         }
@@ -336,9 +340,13 @@
                 SPApplication.getInstance().setEpayLinking(false)
                 return false
             }
-            val retBean = GsonUtil.GsonToBean(resp.retjson!!, CardPayInitRetBean::class.java)
+            val retBean = try {
+                GsonUtil.GsonToBean(resp.retjson!!, CardPayInitRetBean::class.java)
+            } catch (ex: java.lang.Exception) {
+                throw CardPayFailError("json异常:${ex.message}")
+            }
             if (retBean.retcode != PublicDef.SUCCESS) {
-                throw CardPayFailError(retBean.retmsg!!)
+                throw CardPayFailError(retBean.getErrorMsg())
             }
             onlRecord.billno = retBean.billno
             return true
@@ -349,9 +357,13 @@
                 SPApplication.getInstance().setEpayLinking(false)
                 return false
             }
-            val retBean = GsonUtil.GsonToBean(resp.retjson!!, CardPayConfirmRetBean::class.java)
+            val retBean = try {
+                GsonUtil.GsonToBean(resp.retjson!!, CardPayConfirmRetBean::class.java)
+            } catch (ex: Exception) {
+                throw CardPayFailError("json异常:${ex.message}")
+            }
             if (retBean.retcode != PublicDef.SUCCESS) {
-                throw CardPayFailError(retBean.retmsg!!)
+                throw CardPayFailError(retBean.getErrorMsg())
             }
             if (retBean.require_query) {
                 //TODO
diff --git a/app/src/main/java/com/supwisdom/activities/consume/mode/CodePayService.kt b/app/src/main/java/com/supwisdom/activities/consume/mode/CodePayService.kt
index 116a82b..486ff10 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/mode/CodePayService.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/mode/CodePayService.kt
@@ -14,6 +14,7 @@
 import com.supwisdom.okhttp.TransResp
 import com.supwisdom.utils.*
 import org.apache.http.HttpStatus
+import java.lang.Exception
 
 /**
  ** create by zzq on 2019/7/30
@@ -95,9 +96,13 @@
         if (resp.retcode != HttpStatus.SC_OK) {
             throw CardPayFailError("错误码=${resp.retcode}")
         }
-        val retBean = GsonUtil.GsonToBean(resp.retjson!!, CardPayConfirmRetBean::class.java)
+        val retBean = try {
+            GsonUtil.GsonToBean(resp.retjson!!, CardPayConfirmRetBean::class.java)
+        } catch (ex: Exception) {
+            throw CardPayFailError("json异常:${ex.message}")
+        }
         if (retBean.retcode != PublicDef.SUCCESS) {
-            throw CardPayFailError(retBean.retmsg!!)
+            throw CardPayFailError(retBean.getErrorMsg())
         }
         if (retBean.require_query) {
             // 等待查询
@@ -116,9 +121,13 @@
         if (resp.retcode != HttpStatus.SC_OK) {
             throw CardPayFailError("错误码=${resp.retcode}")
         }
-        val retBean = GsonUtil.GsonToBean(resp.retjson!!, CardPayInitRetBean::class.java)
+        val retBean = try {
+            GsonUtil.GsonToBean(resp.retjson!!, CardPayInitRetBean::class.java)
+        } catch (ex: Exception) {
+            throw CardPayFailError("json异常:${ex.message}")
+        }
         if (retBean.retcode != PublicDef.SUCCESS) {
-            throw CardPayFailError(retBean.retmsg!!)
+            throw CardPayFailError(retBean.getErrorMsg())
         }
         codeRecord.billno = retBean.billno
         codeRecord.username = retBean.username
diff --git a/app/src/main/java/com/supwisdom/activities/menu/MenuPresenter.kt b/app/src/main/java/com/supwisdom/activities/menu/MenuPresenter.kt
index 68b8dd6..8f49136 100644
--- a/app/src/main/java/com/supwisdom/activities/menu/MenuPresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/menu/MenuPresenter.kt
@@ -13,7 +13,6 @@
 import com.supwisdom.exception.TransdtlUploadError
 import com.supwisdom.service.AuthEpay
 import com.supwisdom.service.EpayApiImpl
-import com.supwisdom.utils.CommonUtil
 import com.supwisdom.utils.DateUtil
 import com.supwisdom.utils.PublicDef
 
diff --git a/app/src/main/java/com/supwisdom/activities/revenue/RevenuePresenter.kt b/app/src/main/java/com/supwisdom/activities/revenue/RevenuePresenter.kt
index 4ee5bd2..cbf95db 100644
--- a/app/src/main/java/com/supwisdom/activities/revenue/RevenuePresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/revenue/RevenuePresenter.kt
@@ -23,7 +23,7 @@
     private inner class AsyncRevenue : AsyncTask<String, Void, RevenueAmtRetBean>() {
         override fun onPostExecute(retBean: RevenueAmtRetBean) {
             if (retBean.retcode != PublicDef.SUCCESS) {
-                iRevenueView.showRevenueFail(retBean.retmsg!!)
+                iRevenueView.showRevenueFail(retBean.getErrorMsg())
             } else {
                 iRevenueView.showRevenueSuc(retBean)
             }
@@ -36,7 +36,11 @@
             if (resp.retcode != HttpStatus.SC_OK) {
                 return RevenueAmtRetBean(resp.retcode, "错误码=" + resp.retcode)
             }
-            return GsonUtil.GsonToBean(resp.retjson!!, RevenueAmtRetBean::class.java)
+            return try {
+                GsonUtil.GsonToBean(resp.retjson!!, RevenueAmtRetBean::class.java)
+            } catch (ex: Exception) {
+                RevenueAmtRetBean(PublicDef.ERROR, "json异常:${ex.message}")
+            }
         }
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/upgrade/mode/EpayUpgradeApi.kt b/app/src/main/java/com/supwisdom/activities/upgrade/mode/EpayUpgradeApi.kt
index 1545002..91be409 100644
--- a/app/src/main/java/com/supwisdom/activities/upgrade/mode/EpayUpgradeApi.kt
+++ b/app/src/main/java/com/supwisdom/activities/upgrade/mode/EpayUpgradeApi.kt
@@ -163,7 +163,7 @@
             }
         } catch (e: Exception) {
             e.printStackTrace()
-            UpgradeInfoRetBean(PublicDef.ERROR, "获取版本号JSON错误:${e.message}")
+            UpgradeInfoRetBean(PublicDef.ERROR, "获取版本号JSON异常:${e.message}")
         }
     }
 
diff --git a/app/src/main/java/com/supwisdom/bean/BaseResp.kt b/app/src/main/java/com/supwisdom/bean/BaseResp.kt
index ac5fb29..68e95fe 100644
--- a/app/src/main/java/com/supwisdom/bean/BaseResp.kt
+++ b/app/src/main/java/com/supwisdom/bean/BaseResp.kt
@@ -14,4 +14,7 @@
 
     var retcode: Int = 0
     var retmsg: String? = null
+    fun getErrorMsg(): String {
+        return retmsg ?: "错误码:$retcode"
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
index 973dd8d..e764afa 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
@@ -26,7 +26,6 @@
             .append(BeanPropEnum.TransdtlOffline.status).append(",")
             .append(" 'null' as ").append(BeanPropEnum.TransdtlUnion.username).append(",")
             .append(BeanPropEnum.TransdtlOffline.cardno).append(",")
-            .append(",")
             .append(BeanPropEnum.TransdtlOffline.upflag)
             .append(" from ").append(DBTransdtlHelper.TABLE_NAME_DTL_OFFLINE)
             .append(" UNION ALL select ")
diff --git a/app/src/main/java/com/supwisdom/service/AuthEpay.kt b/app/src/main/java/com/supwisdom/service/AuthEpay.kt
index 1e4ef62..8c28078 100644
--- a/app/src/main/java/com/supwisdom/service/AuthEpay.kt
+++ b/app/src/main/java/com/supwisdom/service/AuthEpay.kt
@@ -72,7 +72,7 @@
             throw AuthEpayError("token json异常:${ex.message}")
         }
         if (retBean.retcode != PublicDef.SUCCESS) {
-            throw AuthEpayError(retBean.retmsg ?: "错误码:${retBean.retcode}")
+            throw AuthEpayError(retBean.getErrorMsg())
         }
         if (TextUtils.isEmpty(retBean.token)) {
             throw AuthEpayError("token不能为空")
@@ -126,14 +126,14 @@
             throw AuthEpayError("json异常:${ex.message}")
         }
         if (retBean.retcode != PublicDef.SUCCESS) {
-            throw AuthEpayError(retBean.retmsg ?: "错误码:${retBean.retcode}")
+            throw AuthEpayError(retBean.getErrorMsg())
         }
         return retBean
     }
 
     private fun dealSession(bean: AuthJwtRetBean) {
         if (bean.retcode != PublicDef.SUCCESS) {
-            throw AuthEpayError(bean.retmsg!!)
+            throw AuthEpayError(bean.getErrorMsg())
         }
         if (TextUtils.isEmpty(bean.jwt)) {
             throw AuthEpayError("jwt不能为空")
diff --git a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
index 5c05581..2495ff6 100644
--- a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
+++ b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
@@ -46,7 +46,7 @@
             throw HeartBeatError("json异常:${ex.message}")
         }
         if (retBean.retcode != PublicDef.SUCCESS) {
-            throw HeartBeatError(retBean.retmsg ?: "错误码:${retBean.retcode}")
+            throw HeartBeatError(retBean.getErrorMsg())
         }
         if (cardverno < retBean.cardverno!!) {
             try {
@@ -92,7 +92,7 @@
             throw SysParaError("json异常:${ex.message}")
         }
         if (retBean.retcode != PublicDef.SUCCESS) {
-            throw SysParaError(retBean.retmsg ?: "错误码:${retBean.retcode}")
+            throw SysParaError(retBean.getErrorMsg())
         }
         val record = pos.getSysPara() ?: SysParaRecord()
         retBean.syspara?.forEach {
@@ -133,7 +133,7 @@
                 throw WhiteListError("json异常:${ex.message}")
             }
             if (retBean.retcode != PublicDef.SUCCESS) {
-                throw WhiteListError(retBean.retmsg ?: "错误码:${retBean.retcode}")
+                throw WhiteListError(retBean.getErrorMsg())
             }
             if (retBean.count != retBean.whitelist?.size) {
                 throw WhiteListError("白名单数量不对[${retBean.count},${retBean.whitelist?.size}]")
@@ -178,7 +178,7 @@
             throw TransdtlUploadError("json异常:${ex.message}")
         }
         if (retBean.retcode != PublicDef.SUCCESS) {
-            throw TransdtlUploadError(retBean.retmsg ?: "错误码:${retBean.retcode}")
+            throw TransdtlUploadError(retBean.getErrorMsg())
         }
         if (retBean.termseqno != record.devseqno) {
             throw TransdtlUploadError("返回流水号不一致")
@@ -220,7 +220,7 @@
             throw TransdtlUploadError("json异常:${ex.message}")
         }
         if (retBean.retcode != PublicDef.SUCCESS) {
-            throw TransdtlUploadError(retBean.retmsg ?: "错误码:${retBean.retcode}")
+            throw TransdtlUploadError(retBean.getErrorMsg())
         }
         if (retBean.termseqno != record.devseqno) {
             throw TransdtlUploadError("返回流水号不一致")
