diff --git a/app/build.gradle b/app/build.gradle
index e9986f9..96711f5 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
 android {
     compileSdkVersion 28
     defaultConfig {
-        applicationId "com.supwisdom.posa711"
+        applicationId "com.supwisdom.posa711dali"
         minSdkVersion 22
         targetSdkVersion 28
         versionCode 1
diff --git a/app/src/main/java/com/supwisdom/activities/CrashHandler.kt b/app/src/main/java/com/supwisdom/activities/CrashHandler.kt
index 48caaf3..6c60829 100644
--- a/app/src/main/java/com/supwisdom/activities/CrashHandler.kt
+++ b/app/src/main/java/com/supwisdom/activities/CrashHandler.kt
@@ -15,6 +15,7 @@
  ** create by zzq on 2019/7/23
  ** @desc
  **/
+@Suppress("DEPRECATION")
 class CrashHandler : Thread.UncaughtExceptionHandler {
     private var context: Context? = null
     private var mDefaultHandler: Thread.UncaughtExceptionHandler? = null
diff --git a/app/src/main/java/com/supwisdom/activities/SPApplication.kt b/app/src/main/java/com/supwisdom/activities/SPApplication.kt
index 61e704d..781fd44 100644
--- a/app/src/main/java/com/supwisdom/activities/SPApplication.kt
+++ b/app/src/main/java/com/supwisdom/activities/SPApplication.kt
@@ -5,7 +5,6 @@
 import android.support.multidex.MultiDex
 import android.support.multidex.MultiDexApplication
 import com.supwisdom.db.Pos
-import com.supwisdom.service.BackgroundTaskService
 import com.supwisdom.utils.CommonUtil
 import com.supwisdom.utils.PublicDef
 
@@ -60,11 +59,11 @@
 
     private fun startService() {
         if (!CommonUtil.isServiceWork(this, PublicDef.BG_SERVICE_NAME)) {
-            startService(Intent(this, BackgroundTaskService::class.java))
+            startService(Intent(this, ServiceDemo::class.java))
         }
     }
 
     fun stopService() {
-        stopService(Intent(this, BackgroundTaskService::class.java))
+        stopService(Intent(this, ServiceDemo::class.java))
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/ServiceDemo.kt b/app/src/main/java/com/supwisdom/activities/ServiceDemo.kt
index c0bc6b1..90d1564 100644
--- a/app/src/main/java/com/supwisdom/activities/ServiceDemo.kt
+++ b/app/src/main/java/com/supwisdom/activities/ServiceDemo.kt
@@ -2,14 +2,81 @@
 
 import android.app.Service
 import android.content.Intent
+import android.os.Binder
 import android.os.IBinder
+import com.supwisdom.service.BackgroundTaskService
+import com.supwisdom.utils.CommonUtil
 
 /**
  ** create by zzq on 2019/7/23
  ** @desc
  **/
 class ServiceDemo : Service() {
+    private var guardThread: Thread? = null
+    private var bind: ServiceBind? = null
+    private var bgTask: BackgroundTaskService? = null
+    private val pos = SPApplication.getInstance().getPos()
+    @Volatile
+    private var isExist = false
+
+    override fun onCreate() {
+        super.onCreate()
+    }
+
+    override fun onDestroy() {
+        closeThread()
+        super.onDestroy()
+    }
+
     override fun onBind(intent: Intent): IBinder? {
-        return null
+        if (bind == null) {
+            bind = ServiceBind()
+        }
+        return bind
+    }
+
+    override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
+        createThread()
+        return super.onStartCommand(intent, flags, startId)
+    }
+
+    private fun createThread() {
+        isExist = false
+        if (bgTask == null) {
+            bgTask = BackgroundTaskService()
+        }
+        if (guardThread == null) {
+            guardThread = GuardThread()
+            guardThread!!.start()
+        }
+    }
+
+    private fun closeThread() {
+        bgTask?.interrupt()
+        bgTask = null
+        isExist = true
+        guardThread?.interrupt()
+        guardThread = null
+    }
+
+    private inner class GuardThread : Thread() {
+        override fun run() {
+            CommonUtil.doSleep(60 * 1000)
+            while (!isExist) {
+                val hasInit = pos.getConfigPara()?.initOK ?: false
+                if (hasInit) {
+                    break
+                }
+                CommonUtil.doSleep(1000)
+            }
+            if (!isExist) {
+                bgTask!!.start()
+            }
+        }
+    }
+
+    inner class ServiceBind : Binder() {
+        val serviceDemo: ServiceDemo
+            get() = this@ServiceDemo
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt b/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt
index f64c8cb..1417fe2 100644
--- a/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt
@@ -23,7 +23,7 @@
 @Suppress("DEPRECATION")
 class CardlibActivity : BaseActivity(), ICardlibView {
     private val pos = SPApplication.getInstance().getPos()
-    private var vResult: TextView? = null
+    private lateinit var vResult: TextView
     private var vProgressBar: ProgressBar? = null
     private var presenter: CardlibPresenter? = null
     @Volatile
@@ -86,14 +86,14 @@
     override fun showInitCardlibResult(issuccess: Boolean, msg: String) {
         if (issuccess) {
             val record = pos.getConfigPara()
-            if (record != null && record.initOK) {
+            if (record != null && record.initOK && pos.getDynamicPara() != null) {
                 jumpActivity(LoadActivity::class.java)
             } else {
                 jumpActivity(InitActivity::class.java)
             }
         } else {
-            vResult!!.text = msg
-            vResult!!.visibility = View.VISIBLE
+            vResult.text = msg
+            vResult.visibility = View.VISIBLE
             AuxScreenController.getInstance().refreshTitle("卡库初始化")
             AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
             AuxScreenController.getInstance().refreshContent(listOf("请联系管理员", "加载驱动失败", "原因:", msg))
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 6308775..5a07853 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
@@ -14,6 +14,7 @@
 import com.supwisdom.R
 import com.supwisdom.activities.BaseActivity
 import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.consume.bean.CardStatus
 import com.supwisdom.activities.consume.bean.CardUserInfoBean
 import com.supwisdom.activities.menu.MenuActivity
 import com.supwisdom.activities.transdtl.TransdtlActivity
@@ -40,16 +41,15 @@
     private lateinit var presenter: ConsumePresenter
     private lateinit var vLinkstat: TextView
     private lateinit var vShopname: TextView
-    private lateinit var vCustname: TextView
-    private lateinit var vStuempno: TextView
+    private lateinit var vCitizenName: TextView
+    private lateinit var vCitizenCardno: TextView
     private lateinit var vCardstatus: TextView
-    private lateinit var vBalance: TextView
     private lateinit var vTime: TextView
     private lateinit var vLinkLogo: ImageView
     private lateinit var vLastResult: TextView
     private lateinit var vLastPayamt: TextView
+    private lateinit var vLastCardno: TextView
     private lateinit var vLastPayway: TextView
-    private lateinit var vLastPayday: TextView
     private lateinit var vLastPaytime: TextView
     private lateinit var vLastPayFailreason: TextView
     private lateinit var vLastPayFailll: LinearLayout
@@ -83,9 +83,14 @@
         presenter.start()
         beepManager = BeepManager(this)
         dialogPurchase = DialogPurchase(this, object : DialogPurchase.ICallBack {
-            override fun callback(isManualCancel: Boolean) {
-                presenter.clickNoPay()
-                amountTxt.text = ""
+            override fun callback(isManualCancel: Boolean, isPaying: Boolean) {
+                if (isPaying) {
+                    presenter.clickToInterrupt()
+                } else {
+                    presenter.clickNoPay()
+                    amountTxt.text = ""
+                    AuxScreenController.getInstance().refreshContent(Arrays.asList(" 欢迎光临!", " 请刷卡..."))
+                }
             }
 
             override fun callback(code: String) {
@@ -116,24 +121,24 @@
                 }
             }
         })
+        presenter.loadLastTransdtl()
     }
 
     private fun initView() {
-        vShopname = this.findViewById<TextView>(R.id.consume_shopname)
-        vLinkLogo = this.findViewById<ImageView>(R.id.consume_linklogo)
-        vLinkstat = this.findViewById<TextView>(R.id.consume_linkstat)
-        amountTxt = this.findViewById<TextView>(R.id.consume_amt)
-        vCustname = this.findViewById<TextView>(R.id.consume_custname)
-        vStuempno = this.findViewById<TextView>(R.id.consume_stuempno)
-        vCardstatus = this.findViewById<TextView>(R.id.consume_cardstatus)
-        vBalance = this.findViewById<TextView>(R.id.consume_balance)
-        vTime = this.findViewById<TextView>(R.id.consume_time)
-        vLastResult = this.findViewById<TextView>(R.id.consume_last_result)
-        vLastPayamt = this.findViewById<TextView>(R.id.consume_last_payamt)
-        vLastPayway = this.findViewById<TextView>(R.id.consume_last_payway)
-        vLastPayday = this.findViewById<TextView>(R.id.consume_last_payday)
-        vLastPaytime = this.findViewById<TextView>(R.id.consume_last_paytime)
-        vLastPayFailreason = this.findViewById<TextView>(R.id.consume_last_failreason)
+        vShopname = this.findViewById<TextView>(R.id.tv_shopname)
+        vLinkLogo = this.findViewById<ImageView>(R.id.tv_linklogo)
+        vLinkstat = this.findViewById<TextView>(R.id.tv_linkstat)
+        amountTxt = this.findViewById<TextView>(R.id.tv_input_amt)
+        vCitizenName = this.findViewById<TextView>(R.id.tv_citizen_name)
+        vCitizenCardno = this.findViewById<TextView>(R.id.tv_citizen_cardno)
+        vCardstatus = this.findViewById<TextView>(R.id.tv_cardstatus)
+        vTime = this.findViewById<TextView>(R.id.tv_nowtime)
+        vLastResult = this.findViewById<TextView>(R.id.tv_last_pay_result)
+        vLastCardno = this.findViewById<TextView>(R.id.tv_last_cardno)
+        vLastPayamt = this.findViewById<TextView>(R.id.tv_last_payamt)
+        vLastPayway = this.findViewById<TextView>(R.id.tv_last_payway)
+        vLastPaytime = this.findViewById<TextView>(R.id.tv_last_paytime)
+        vLastPayFailreason = this.findViewById<TextView>(R.id.tv_last_failreason)
         vLastPayFailll = this.findViewById<LinearLayout>(R.id.ll_consume_last_failreason)
         vLastPayamtll = this.findViewById<LinearLayout>(R.id.ll_consume_last_payamt)
     }
@@ -214,33 +219,22 @@
 
     override fun showUserInfo(info: CardUserInfoBean) {
         CommonUtil.acquireWakeLock(this)
-        vCustname.text = info.username
-        if (info.retcode == PublicDef.SUCCESS) {
-            vCardstatus.text = "暂未实现"//PublicDef.CARD_STAT_MAP[info.cardstat]
-            if (info.cardstatus != 0) {
-                vCardstatus.setTextColor(Color.RED)
-            } else {
-                vCardstatus.setTextColor(resources.getColor(R.color.blue))
-            }
-            if (info.balance == null) {
-                vBalance.text = null
-            } else {
-                vBalance.text = String.format("%.02f 元", info.balance!! / 100.0f)
-            }
-        } else {
-            vCardstatus.text = info.retmsg
+        vCitizenName.text = info.username
+        vCitizenCardno.text = info.cardno
+        vCardstatus.text = info.cardstatus?.toString()
+        if (info.cardstatus != CardStatus.NORMAL) {
             vCardstatus.setTextColor(Color.RED)
-            vBalance.text = null
+        } else {
+            vCardstatus.setTextColor(resources.getColor(R.color.blue))
         }
     }
 
     private var lastshowtime: String? = null
     override fun clearUserInfo(datetime: String) {
         if (!isBackRuning) {
-            vCustname.text = null
-            vStuempno.text = null
+            vCitizenName.text = null
+            vCitizenCardno.text = null
             vCardstatus.text = null
-            vBalance.text = null
             val tmptime = datetime.substring(0, 16)
             if (lastshowtime != tmptime) {
                 lastshowtime = tmptime
@@ -266,15 +260,22 @@
     }
 
     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))
+        }
         this.intent.putExtra("amount", "0")
         this.intent.putExtra("payway", "")
+        this.intent.putExtra("operation", "")
     }
 
     override fun onNewIntent(intent: Intent) {
         this.intent.putExtra("amount", intent.getStringExtra("amount"))
         this.intent.putExtra("payway", intent.getStringExtra("payway"))
+        this.intent.putExtra("operation", intent.getStringExtra("operation"))
     }
 
     private fun refresh() {
@@ -301,6 +302,7 @@
             try {
                 amount = Integer.parseInt(record.paraval)
                 amountTxt.text = String.format("%.02f", amount / 100.0f)
+                payStatusEnable = true
                 presenter.clickToPay(amount)
                 showDialogPay()
             } catch (ex: Exception) {
@@ -341,6 +343,7 @@
         }
         AuxScreenController.getInstance().refreshContent(auxList)
         SoundUtil.playMusic(applicationContext, R.raw.consume_suc)
+        refreshRecentDtl(info)
     }
 
     override fun showConsumeHint(hint: String) {
@@ -349,10 +352,23 @@
         AuxScreenController.getInstance().refreshContent(Arrays.asList(hint, amountStr))
     }
 
+    override fun showConsumeQuery(hint: String) {
+        dialogPurchase!!.showQueryProcess(hint, "请耐心等待")
+        AuxScreenController.getInstance().refreshContent(Arrays.asList(hint, "请耐心等待"))
+    }
+
+    override fun showConsumeInterrupt(info: CardUserInfoBean) {
+        showPayInterrupt(info.cardno)
+        dialogPurchase!!.showPayInterrupt()
+        AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("交易取消", "以银行交易为准"))
+        SoundUtil.playMusic(applicationContext, R.raw.pay_cancel)
+    }
+
     override fun showConsumeFail(info: CardUserInfoBean) {
         dialogPurchase!!.showPayFail(info)
-        SoundUtil.playMusic(applicationContext, R.raw.consume_fail)
         AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("消费失败", "原因:", info.retmsg))
+        SoundUtil.playMusic(applicationContext, R.raw.consume_fail)
+        refreshRecentDtl(info)
     }
 
     override fun showReverseSuc(info: CardUserInfoBean) {
@@ -360,23 +376,35 @@
         AuxScreenController.getInstance()
             .refreshContent(Arrays.asList<String>(info.retmsg, CommonUtil.showFormatAmount("金额", info.payamt)))
         SoundUtil.playMusic(applicationContext, R.raw.reversal_suc)
+        refreshRecentDtl(info)
     }
 
     override fun showReverseFail(info: CardUserInfoBean) {
         dialogPurchase!!.showReverseFail(info)
-        SoundUtil.playMusic(applicationContext, R.raw.reversal_fail)
         AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("冲正失败", "原因:", info.retmsg))
+        SoundUtil.playMusic(applicationContext, R.raw.reversal_fail)
+        refreshRecentDtl(info)
     }
 
-    private var lastShowRecentDatetime: String? = null
+    private var lastShowRecentTime: String? = null
     private fun refreshRecentDtl(info: CardUserInfoBean?) {
         if (info != null) {
+            val showtime: Long = 30 * 1000
             lastPayInfo = info
+            if (lastShowRecentTime == null) {
+                if (info.transtime != null) {
+                    val paytime = DateUtil.timeFormatConvertToLong(info.transtime!!)
+                    val nowtime = DateUtil.timeFormatConvertToLong(DateUtil.getNowTimeNoFormat())
+                    if (nowtime - paytime > showtime) {
+                        return
+                    }
+                }
+            }
             //已显示过不在显示
-            if (lastShowRecentDatetime == info.datetime) {
+            if (lastShowRecentTime == info.transtime) {
                 return
             }
-            lastShowRecentDatetime = info.datetime
+            lastShowRecentTime = info.transtime
 
             if (info.status == PayStatus.SUC) {
                 when {
@@ -399,25 +427,32 @@
                 vLastPayamtll.visibility = View.GONE
                 vLastPayFailreason.text = info.retmsg
             }
-
+            vLastCardno.text = info.cardno
             vLastPayway.text = if (info.payway == "code") {
                 "二维码"
             } else {
                 "市民卡"
             }
             val sb = StringBuilder()
-            sb.append(info.datetime!!.substring(0, 4)).append("/")
-                .append(info.datetime!!.substring(4, 6)).append("/")
-                .append(info.datetime!!.substring(6, 8))
-            vLastPayday.text = sb.toString()
-            sb.setLength(0)
-            sb.append(info.datetime!!.substring(8, 10)).append(":")
-                .append(info.datetime!!.substring(10, 12)).append(":").append(info.datetime!!.substring(12))
+            sb.append(info.transtime?.substring(0, 2)).append(":")
+                .append(info.transtime?.substring(2, 4)).append(":")
+                .append(info.transtime?.substring(4))
             vLastPaytime.text = sb.toString()
-            resetPayShowCounter(10 * 1000)
+            resetPayShowCounter(showtime)
         }
     }
 
+    private fun showPayInterrupt(cardno: String?) {
+        vLastResult.text = "交易取消"
+        vLastPayFailll.visibility = View.VISIBLE
+        vLastPayamtll.visibility = View.GONE
+        vLastPayFailreason.text = "以银行交易为准"
+        vLastCardno.text = cardno
+        vLastPayway.text = "card"
+        vLastPaytime.text = DateUtil.getNowTime()
+        resetPayShowCounter(30 * 1000)
+    }
+
     private fun delValueToEdit() {
         presenter.clickNoPay()
         val str = amountTxt.text.toString()
@@ -437,7 +472,10 @@
     private fun checkAmtToPay() {
         amount = getCurAmount() + addAmount
         if (amount > 0) {
+            AuxScreenController.getInstance()
+                .refreshContent(Arrays.asList("等待付款", CommonUtil.showFormatAmount("金额", amount)))
             amountTxt.text = String.format("%.02f", amount / 100.0f)
+            payStatusEnable = true
             presenter.clickToPay(amount)
             showDialogPay()
         } else {
@@ -472,8 +510,8 @@
                 amountTxt.text = "$str$value"
             }
         } else {
-            //限制消费金额<1000
-            if (str.length < 3) {
+            //限制消费金额<10000
+            if (str.length < 4) {
                 amountTxt.text = "$str$value"
             }
         }
@@ -482,9 +520,9 @@
 
     private fun clearLastPayResult() {
         vLastResult.text = null
+        vLastCardno.text = null
         vLastPayamt.text = null
         vLastPayway.text = null
-        vLastPayday.text = null
         vLastPaytime.text = null
         vLastPayFailreason.text = null
     }
@@ -513,8 +551,10 @@
     override fun showRecentDtl(record: TransdtlUnionRecord?) {
         if (record != null) {
             val info = CardUserInfoBean(PublicDef.SUCCESS, "")
-            info.datetime = record.transdate + record.transtime
+            info.transdate = record.transdate
+            info.transtime = record.transtime
             info.username = record.username
+            info.cardno = record.cardno
             info.payamt = record.payamt
             info.status = record.status
             info.payway = record.payway
diff --git a/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt b/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
index 268a67f..b5aeb03 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
@@ -3,9 +3,11 @@
 import android.os.Handler
 import android.os.Looper
 import android.os.Message
+import com.supwisdom.activities.SPApplication
 import com.supwisdom.activities.consume.bean.CardUserInfoBean
 import com.supwisdom.activities.consume.mode.CardPayService
 import com.supwisdom.activities.consume.mode.CodePayService
+import com.supwisdom.utils.DateUtil
 import com.supwisdom.utils.LogUtil
 import com.supwisdom.utils.PublicDef
 import com.supwisdom.utils.ThreadPool
@@ -16,6 +18,7 @@
  **/
 class ConsumePresenter constructor(iConsumeView: IConsumeView) {
     private val TAG = "ConsumePresenter"
+    private val pos = SPApplication.getInstance().getPos()
     private val iConsumeView = iConsumeView
     private val codePayRunnable = CodePayRunnable()
     private lateinit var handler: Handler
@@ -39,11 +42,17 @@
                     PublicDef.MSG_CARD_PAY_SUC -> iConsumeView.showConsumeSuc(msg.obj as CardUserInfoBean)
                     PublicDef.MSG_CARD_PAYING,
                     PublicDef.MSG_CARD_READ_AGAIN -> iConsumeView.showConsumeHint(msg.obj as String)
+                    PublicDef.MSG_CARD_PAY_QUERY -> iConsumeView.showConsumeQuery(msg.obj as String)
                     PublicDef.MSG_CARD_PAY_FAIL -> {
                         val ret = msg.obj as CardUserInfoBean
                         LogUtil.d(TAG, "pay fail,reason=${ret.retmsg}")
                         iConsumeView.showConsumeFail(ret)
                     }
+                    PublicDef.MSG_PAYING_INTERRUPT -> {
+                        val ret = msg.obj as CardUserInfoBean
+                        LogUtil.d(TAG, "pay interrupt,reason=${ret.retmsg}")
+                        iConsumeView.showConsumeInterrupt(ret)
+                    }
                     PublicDef.MSG_CARD_REVERSE_FAIL -> {
                         val ret = msg.obj as CardUserInfoBean
                         LogUtil.d(TAG, "reverse fail,reason=${ret.retmsg}")
@@ -78,6 +87,10 @@
         cardPayService.clickToReverse(amount)
     }
 
+    fun clickToInterrupt() {
+        cardPayService.clickToInterrupt()
+    }
+
     fun codeToPay(code: String, amount: Int) {
         this.code = code
         this.amount = amount
@@ -94,6 +107,17 @@
         codePayService.interruptPay()
     }
 
+    fun loadLastTransdtl() {
+        ThreadPool.getShortPool().execute(Runnable {
+            val list = pos.getTransdtlUnion(DateUtil.getNowDateNoFormat(), 0, 0, 1)
+            if (list.isNotEmpty()) {
+                iConsumeView.getActivity().runOnUiThread {
+                    iConsumeView.showRecentDtl(list[0])
+                }
+            }
+        })
+    }
+
     private inner class CodePayRunnable : Runnable {
         override fun run() {
             codePayService.pay(code!!, amount)
diff --git a/app/src/main/java/com/supwisdom/activities/consume/IConsumeView.kt b/app/src/main/java/com/supwisdom/activities/consume/IConsumeView.kt
index b633d51..608ff3f 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/IConsumeView.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/IConsumeView.kt
@@ -17,6 +17,10 @@
 
     fun showConsumeHint(hint: String)
 
+    fun showConsumeQuery(hint: String)
+
+    fun showConsumeInterrupt(info: CardUserInfoBean)
+
     fun showConsumeFail(info: CardUserInfoBean)
 
     fun showReverseSuc(info: CardUserInfoBean)
diff --git a/app/src/main/java/com/supwisdom/activities/consume/bean/CardAccountRetBean.kt b/app/src/main/java/com/supwisdom/activities/consume/bean/CardAccountRetBean.kt
index 461c16d..1cc78c1 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/bean/CardAccountRetBean.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/bean/CardAccountRetBean.kt
@@ -8,7 +8,7 @@
  **/
 class CardAccountRetBean : BaseResp() {
     var username: String? = null
-    var userid: Int = 0
-    var balance: Int = 0
+    var userid: String? = null
+    var balance: Int? = null
     var status: String? = null
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/consume/bean/CardBean.kt b/app/src/main/java/com/supwisdom/activities/consume/bean/CardBean.kt
index f68486f..e27206f 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/bean/CardBean.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/bean/CardBean.kt
@@ -12,7 +12,7 @@
     var datetime: String? = null
     var amount: Int = 0
     var username: String? = null
-    var userid: Int = 0
+    var userid: String? = null
     var balance: Int? = null
-    var cardstatus: Int = 0
+    var cardstatus: CardStatus? = null
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/consume/bean/CardUserInfoBean.kt b/app/src/main/java/com/supwisdom/activities/consume/bean/CardUserInfoBean.kt
index ebaf647..047d57b 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/bean/CardUserInfoBean.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/bean/CardUserInfoBean.kt
@@ -10,13 +10,28 @@
  **/
 class CardUserInfoBean constructor(retcode: Int, retmsg: String) : BaseResp(retcode, retmsg) {
     var username: String? = null
+    var cardno: String? = null
     var showtime: Int = 3
     var balance: Int? = null
-    var cardstatus: Int = 0
+    var cardstatus: CardStatus? = null
     var amount: Int = 0
     var payamt: Int = 0
     var status: PayStatus? = null
     var reversalFlag: ReversalFlag? = null
-    var datetime: String? = null
+    var transdate: String? = null
+    var transtime: String? = null
     var payway: String? = null //card,code
+}
+
+enum class CardStatus(val desc: String) {
+    NORMAL("正常"),
+    LOCK("已锁定"),
+    FROZEN("已冻结"),
+    LOST("已挂失"),
+    EXPIRE("已过期"),
+    LOGOUT("已注销");
+
+    override fun toString(): String {
+        return this.desc
+    }
 }
\ No newline at end of file
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 3972fe6..cde67f4 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
@@ -5,19 +5,15 @@
 import com.supwisdom.activities.SPApplication
 import com.supwisdom.activities.consume.IConsumeView
 import com.supwisdom.activities.consume.bean.*
-import com.supwisdom.entity.PayStatus
-import com.supwisdom.entity.ReversalFlag
-import com.supwisdom.entity.TransdtlOfflineRecord
-import com.supwisdom.entity.TransdtlOnlineRecord
+import com.supwisdom.entity.*
 import com.supwisdom.epaycard.Cardlib
 import com.supwisdom.exception.CardNotFoundError
 import com.supwisdom.exception.CardPayCancelFailError
 import com.supwisdom.exception.CardPayFailError
+import com.supwisdom.exception.CardPayInterruptError
 import com.supwisdom.okhttp.TransResp
-import com.supwisdom.utils.CommonUtil
-import com.supwisdom.utils.DateUtil
-import com.supwisdom.utils.GsonUtil
-import com.supwisdom.utils.PublicDef
+import com.supwisdom.service.EpayApiImpl
+import com.supwisdom.utils.*
 import org.apache.http.HttpStatus
 
 /**
@@ -37,8 +33,10 @@
     private var clickStat = ClickStat.INIT
     @Volatile
     private var amount: Int = 0
+    @Volatile
+    private var payQueryConfirm = false
     private var thread: Thread? = null
-    private lateinit var cardBean: CardBean
+    private var cardBean: CardBean? = null
 
     fun start() {
         isExist = false
@@ -69,9 +67,16 @@
         this.amount = amount
     }
 
+    fun clickToInterrupt() {
+        clickStat = ClickStat.INIT
+        payQueryConfirm = false
+    }
+
     private inner class CardPayRunnable : Runnable {
         private lateinit var onlRecord: TransdtlOnlineRecord
+        private lateinit var onlRvsRecord: TransdtlOnlineRecord
         private lateinit var offRecord: TransdtlOfflineRecord
+        private lateinit var offRvsRecord: TransdtlOfflineRecord
         private var oldcardphyid: String? = null
         private var onlineBalance = false
         private var curLinkStatus = false
@@ -92,7 +97,7 @@
                     iConsumeView.codeScannerEnable(false)
                     if (oldcardphyid != cardphyid) {
                         readCard()
-                        cardBean.cardphyid = cardphyid
+                        cardBean!!.cardphyid = cardphyid
                         oldcardphyid = cardphyid
                     }
                     when (clickStat) {
@@ -101,6 +106,15 @@
                                 doConsume()
                             } catch (ex: CardPayFailError) {
                                 sendMsg(PublicDef.MSG_CARD_PAY_FAIL, getErrorInfo(ex.message))
+                            } catch (ex: CardPayInterruptError) {
+                                sendMsg(PublicDef.MSG_PAYING_INTERRUPT, getErrorInfo(ex.message))
+                            } catch (ex: Exception) {
+                                ex.printStackTrace()
+                                LogUtil.d(
+                                    TAG, "card pay exception: cardphyid=$cardphyid"
+                                            + "exception=${CommonUtil.getExceptionStack(ex)}"
+                                )
+                                sendMsg(PublicDef.MSG_CARD_PAY_FAIL, getErrorInfo("程序异常"))
                             }
                             clickStat = ClickStat.INIT
                         }
@@ -108,7 +122,14 @@
                             try {
                                 doReverse()
                             } catch (ex: CardPayCancelFailError) {
-                                sendMsg(PublicDef.MSG_CARD_REVERSE_FAIL, getErrorInfo(ex.message))
+                                sendMsg(PublicDef.MSG_CARD_REVERSE_FAIL, getRvsErrorInfo(ex.message))
+                            } catch (ex: Exception) {
+                                ex.printStackTrace()
+                                LogUtil.d(
+                                    TAG, "card pay cancel exception: cardphyid=$cardphyid"
+                                            + "exception=${CommonUtil.getExceptionStack(ex)}"
+                                )
+                                sendMsg(PublicDef.MSG_CARD_REVERSE_FAIL, getRvsErrorInfo("程序异常"))
                             }
                             clickStat = ClickStat.INIT
                         }
@@ -139,40 +160,53 @@
         private fun getAccountInfoByCard() {
             val resp = consumeApi.accQuery(
                 pos.getConfigPara()!!.devphyid!!,
-                cardBean.cardphyid!!,
-                cardBean.cardNo!!
+                cardBean!!.cardphyid!!,
+                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
-                    cardBean.cardstatus = 1 //TODO
+                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()
                 }
             }
         }
 
         private fun showCardUserInfo() {
             val info = CardUserInfoBean(PublicDef.SUCCESS, "账户信息")
-            info.username = cardBean.username
-            info.balance = cardBean.balance
-            info.cardstatus = cardBean.cardstatus
+            if (cardBean!!.username != cardBean!!.cardNo) {
+                info.username = cardBean!!.username
+            }
+            info.cardno = cardBean!!.cardNo
+            info.cardstatus = cardBean!!.cardstatus
             sendMsg(PublicDef.MSG_USER_INFO_SHOW, info)
         }
 
         private fun readCard() {
             val cardinfo = Cardlib.instance.readCard()
             cardBean = CardBean()
-            cardBean.cardNo = cardinfo.cardNo
-            cardBean.idCard = cardinfo.idCard
-            cardBean.expireDate = cardinfo.expireDate
-            cardBean.amount = amount
-            cardBean.datetime = DateUtil.getNowDateTimeFormat()
+            cardBean!!.cardNo = cardinfo.cardNo
+            cardBean!!.idCard = cardinfo.idCard
+            cardBean!!.expireDate = cardinfo.expireDate
+            cardBean!!.amount = amount
+            cardBean!!.datetime = DateUtil.getNowDateTimeFormat()
             /**
              * 用户名默认用卡号代替,在线查询更新为用户名
              */
-            cardBean.username = cardBean.cardNo
+            cardBean!!.username = cardBean!!.cardNo
         }
 
         private fun doConsume() {
@@ -190,7 +224,109 @@
         }
 
         private fun doReverse() {
-            throw CardPayCancelFailError("暂不支持")
+            val list = pos.getTransdtlUnion(DateUtil.getNowDateNoFormat(), 0, 0, 1)
+            if (list.isEmpty()) {
+                throw CardPayCancelFailError("未找到消费记录")
+            }
+            if (list[0].payway == "offcard") {
+                doOfflineReverse(list[0])
+            } else {
+                doOnlineReverse(list[0])
+            }
+        }
+
+        private fun doOnlineReverse(unionRecord: TransdtlUnionRecord) {
+            val record = pos.getTransdtlOnlineLast() ?: throw CardPayCancelFailError("未找到联机记录")
+            checkOnlineReverseVaild(unionRecord, record)
+            saveTransdtlOnlineReverse(record)
+            showRvsOnlSucInfo()
+            asyncUpload(onlRvsRecord)
+        }
+
+        private fun doOfflineReverse(unionRecord: TransdtlUnionRecord) {
+            val record = pos.getTransdtlOfflineLast() ?: throw CardPayCancelFailError("未找到离线记录")
+            checkOfflineReverseVaild(unionRecord, record)
+            saveTransdtlOfflineReverse(record)
+            showRvsOffSucInfo()
+            asyncUpload(offRvsRecord)
+        }
+
+        private fun saveTransdtlOfflineReverse(record: TransdtlOfflineRecord) {
+            offRvsRecord = record.clone()
+            offRvsRecord.devseqno += 1
+            offRvsRecord.transdate = DateUtil.getNowDateNoFormat()
+            offRvsRecord.transtime = DateUtil.getNowTimeNoFormat()
+            offRvsRecord.reversalflag = ReversalFlag.MANUAL
+            offRvsRecord.reversalseqno = record.devseqno
+            offRvsRecord.reversaltransdate = record.transdate
+            offRvsRecord.reversaltranstime = record.transtime
+            offRvsRecord.upflag = 0
+            if (!pos.saveTransdtlOffline(offRvsRecord)) {
+                throw CardPayCancelFailError("保存流水失败")
+            }
+        }
+
+        private fun saveTransdtlOnlineReverse(record: TransdtlOnlineRecord) {
+            onlRvsRecord = record.clone()
+            onlRvsRecord.devseqno += 1
+            onlRvsRecord.transdate = DateUtil.getNowDateNoFormat()
+            onlRvsRecord.transtime = DateUtil.getNowTimeNoFormat()
+            onlRvsRecord.reversalflag = ReversalFlag.MANUAL
+            onlRvsRecord.reversalbillno = record.billno
+            onlRvsRecord.upflag = 0
+            if (!pos.saveTransdtlOnline(onlRvsRecord)) {
+                throw CardPayCancelFailError("保存流水失败")
+            }
+        }
+
+        private fun checkOnlineReverseVaild(unionRecord: TransdtlUnionRecord, record: TransdtlOnlineRecord) {
+            if (record.cardphyid != cardBean!!.cardphyid) {
+                throw CardPayCancelFailError("该卡不是最后消费")
+            }
+            if (unionRecord.transdate != record.transdate ||
+                unionRecord.transtime != record.transtime
+            ) {
+                throw CardPayCancelFailError("联机记录时间异常")
+            }
+            if (record.reversalflag == ReversalFlag.AUTO
+            ) {
+                throw CardPayCancelFailError("已撤销")
+            }
+            if (record.reversalflag == ReversalFlag.MANUAL) {
+                throw CardPayCancelFailError("已冲正")
+            }
+            if (record.status != PayStatus.SUC) {
+                throw CardPayCancelFailError("消费失败不能冲正")
+            }
+            val t1 = DateUtil.dateFormatConvertToLong(record.transdate + record.transtime)
+            val t2 = System.currentTimeMillis()
+            if (t2 - t1 > PublicDef.REVERSE_MS_GAP) {
+                throw CardPayCancelFailError("消费已过期")
+            }
+        }
+
+        private fun checkOfflineReverseVaild(unionRecord: TransdtlUnionRecord, record: TransdtlOfflineRecord) {
+            if (record.cardphyid != cardBean!!.cardphyid) {
+                throw CardPayCancelFailError("该卡不是最后消费")
+            }
+            if (unionRecord.transdate != record.transdate ||
+                unionRecord.transtime != record.transtime
+            ) {
+                throw CardPayCancelFailError("离线记录时间异常")
+            }
+            if (record.reversalflag == ReversalFlag.MANUAL ||
+                record.reversalflag == ReversalFlag.AUTO
+            ) {
+                throw CardPayCancelFailError("已冲正")
+            }
+            if (record.status != PayStatus.SUC) {
+                throw CardPayCancelFailError("消费失败不能冲正")
+            }
+            val t1 = DateUtil.dateFormatConvertToLong(record.transdate + record.transtime)
+            val t2 = System.currentTimeMillis()
+            if (t2 - t1 > PublicDef.REVERSE_MS_GAP) {
+                throw CardPayCancelFailError("消费已过期")
+            }
         }
 
         private fun doOnlineConsume(): Boolean {
@@ -202,25 +338,64 @@
             }
             resp = consumeApi.payConfirm(onlRecord)
             result = parseConfirmResult(resp)
-            if (result) {
-                showSucInfo()
+            payQueryConfirm = false
+            if (!result) {
+                payQueryConfirm = true
+                result = doOnlineConsumeQuery()
             }
             updateTransdtlOnline(result)
+            if (result) {
+                showOnlSucInfo()
+            }
             return result
         }
 
+        private fun doOnlineConsumeQuery(): Boolean {
+            var queryCnt = 1
+            sleepWithCancel(1000)
+            while (payQueryConfirm) {
+                sendMsg(PublicDef.MSG_CARD_PAY_QUERY, "消费确认中[$queryCnt]")
+                val resp = consumeApi.payQuery(onlRecord)
+                val result = parseConfirmResult(resp)
+                if (result) {
+                    return result
+                }
+                queryCnt += 1
+                sleepWithCancel(3000)
+            }
+            /**
+             * 手动取消交易
+             */
+            LogUtil.e(TAG, "manual cancel pay,cardphyid=[${onlRecord.cardphyid}],billno=[${onlRecord.billno}]")
+            throw CardPayInterruptError("交易取消")
+        }
+
+        private fun sleepWithCancel(ms: Long) {
+            var time = 0
+            while (payQueryConfirm) {
+                CommonUtil.doSleep(20)
+                time += 20
+                if (time > ms) {
+                    return
+                }
+            }
+        }
+
         private fun parseInitResult(resp: TransResp?): Boolean {
             if (resp == null || resp.retcode != HttpStatus.SC_OK) {
                 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
             onlRecord.username = retBean.username
-//            onlRecord.userid = retBean.userid
             return true
         }
 
@@ -229,17 +404,19 @@
                 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
-                throw CardPayFailError("查询未实现")
+                return false
             }
             onlRecord.payamt = retBean.amount
             onlRecord.extraamt = retBean.extraamt
-            onlRecord.balance = retBean.balance
             return true
         }
 
@@ -250,12 +427,12 @@
                 seqno = pos.getDynamicPara()?.onlineseqno ?: 0
             }
             onlRecord.devphyid = pos.getConfigPara()!!.devphyid
-            onlRecord.transdate = cardBean.datetime!!.substring(0, 8)
-            onlRecord.transtime = cardBean.datetime!!.substring(8)
+            onlRecord.transdate = cardBean!!.datetime!!.substring(0, 8)
+            onlRecord.transtime = cardBean!!.datetime!!.substring(8)
             onlRecord.devseqno = seqno + 1
-            onlRecord.cardno = cardBean.cardNo
-            onlRecord.cardphyid = cardBean.cardphyid
-            onlRecord.payamt = cardBean.amount
+            onlRecord.cardno = cardBean!!.cardNo
+            onlRecord.cardphyid = cardBean!!.cardphyid
+            onlRecord.payamt = cardBean!!.amount
             onlRecord.reversalflag = ReversalFlag.NONE
             onlRecord.extraamt = 0
             onlRecord.transtype = "card"
@@ -280,6 +457,7 @@
             initTransdtlOffline()
             checkCardValid()
             updateTransdtlOffline(true)
+            showOffSucInfo()
         }
 
         private fun checkCardValid() {
@@ -298,11 +476,16 @@
 
             val whiteRecord =
                 pos.getWhiteList(offRecord.cardphyid!!, offRecord.cardno!!) ?: throw CardPayFailError("卡无权限")
-            if (whiteRecord.flag == 1) {
-                throw CardPayFailError("卡已锁定")
-            }
-            if (whiteRecord.balance < offRecord.payamt) {
-                throw CardPayFailError("请到联机设备使用")
+            when (whiteRecord.status) {
+                "normal" -> {
+
+                }
+                "expire" -> throw CardPayFailError("卡已过期")
+                "lost" -> throw CardPayFailError("卡已挂失")
+                "logout" -> throw CardPayFailError("卡已注销")
+                "frozen" -> throw CardPayFailError("卡已冻结")
+                "lock" -> throw CardPayFailError("卡已锁定")
+                else -> throw CardPayFailError("卡状态:${whiteRecord.status}")
             }
         }
 
@@ -313,12 +496,12 @@
                 seqno = pos.getDynamicPara()?.offlineseqno ?: 0
             }
             offRecord.devphyid = pos.getConfigPara()!!.devphyid
-            offRecord.transdate = cardBean.datetime!!.substring(0, 8)
-            offRecord.transtime = cardBean.datetime!!.substring(8)
+            offRecord.transdate = cardBean!!.datetime!!.substring(0, 8)
+            offRecord.transtime = cardBean!!.datetime!!.substring(8)
             offRecord.devseqno = seqno + 1
-            offRecord.cardno = cardBean.cardNo
-            offRecord.cardphyid = cardBean.cardphyid
-            offRecord.payamt = cardBean.amount
+            offRecord.cardno = cardBean!!.cardNo
+            offRecord.cardphyid = cardBean!!.cardphyid
+            offRecord.payamt = cardBean!!.amount
             offRecord.reversalflag = ReversalFlag.NONE
             offRecord.extraamt = 0
             offRecord.managefeetype = "none"
@@ -339,6 +522,89 @@
             if (!pos.updateTransdtlOffline(offRecord)) {
                 throw CardPayFailError("更新流水失败")
             }
+            asyncUpload(offRecord)
+        }
+
+        private fun showOnlSucInfo() {
+            val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
+            info.showtime = pos.getSysPara()!!.sucShowtime
+            info.amount = onlRecord.payamt
+            info.payamt = onlRecord.payamt
+            info.username = onlRecord.username
+            info.cardno = onlRecord.cardno
+            info.transdate = onlRecord.transdate
+            info.transtime = onlRecord.transtime
+            info.payway = onlRecord.transtype
+            info.status = onlRecord.status
+            info.reversalFlag = onlRecord.reversalflag
+            sendMsg(PublicDef.MSG_CARD_PAY_SUC, info)
+        }
+
+        private fun showOffSucInfo() {
+            val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
+            info.showtime = pos.getSysPara()!!.sucShowtime
+            info.amount = offRecord.payamt
+            info.payamt = offRecord.payamt
+            info.cardno = offRecord.cardno
+            info.transdate = offRecord.transdate
+            info.transtime = offRecord.transtime
+            info.payway = "card"
+            info.status = offRecord.status
+            info.reversalFlag = offRecord.reversalflag
+            sendMsg(PublicDef.MSG_CARD_PAY_SUC, info)
+        }
+
+        private fun showRvsOnlSucInfo() {
+            val info = CardUserInfoBean(PublicDef.SUCCESS, "冲正成功")
+            info.showtime = pos.getSysPara()!!.sucShowtime
+            info.amount = onlRvsRecord.payamt
+            info.payamt = onlRvsRecord.payamt
+            info.username = onlRvsRecord.username
+            info.cardno = onlRvsRecord.cardno
+            info.transdate = onlRvsRecord.transdate
+            info.transtime = onlRvsRecord.transtime
+            info.payway = onlRvsRecord.transtype
+            info.status = onlRvsRecord.status
+            info.reversalFlag = onlRvsRecord.reversalflag
+            sendMsg(PublicDef.MSG_CARD_REVERSE_SUC, info)
+        }
+
+        private fun showRvsOffSucInfo() {
+            val info = CardUserInfoBean(PublicDef.SUCCESS, "冲正成功")
+            info.showtime = pos.getSysPara()!!.sucShowtime
+            info.amount = offRvsRecord.payamt
+            info.payamt = offRvsRecord.payamt
+            info.cardno = offRvsRecord.cardno
+            info.transdate = offRvsRecord.transdate
+            info.transtime = offRvsRecord.transtime
+            info.payway = "card"
+            info.status = offRvsRecord.status
+            info.reversalFlag = offRvsRecord.reversalflag
+            sendMsg(PublicDef.MSG_CARD_REVERSE_SUC, info)
+        }
+
+        private fun asyncUpload(dtl: TransdtlOfflineRecord) {
+            ThreadPool.getShortPool().execute(Runnable {
+                try {
+                    EpayApiImpl().uploadTransdtl(dtl)
+                    dtl.upflag = 1
+                    pos.updateTransdtlOffline(dtl)
+                } catch (ex: java.lang.Exception) {
+                    ex.printStackTrace()
+                }
+            })
+        }
+
+        private fun asyncUpload(dtl: TransdtlOnlineRecord) {
+            ThreadPool.getShortPool().execute(Runnable {
+                try {
+                    EpayApiImpl().uploadTransdtl(dtl)
+                    dtl.upflag = 1
+                    pos.updateTransdtlOnline(dtl)
+                } catch (ex: java.lang.Exception) {
+                    ex.printStackTrace()
+                }
+            })
         }
 
         private fun doClear() {
@@ -379,23 +645,30 @@
             }
         }
 
-        private fun showSucInfo() {
-            val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
-            info.showtime = pos.getSysPara()!!.sucShowtime
-            info.amount = onlRecord.payamt
-            info.payamt = onlRecord.payamt
-            info.username = onlRecord.username
-            info.datetime = onlRecord.transdate + onlRecord.transtime
-            info.payway = onlRecord.transtype
-            info.status = PayStatus.SUC
-            info.balance = onlRecord.balance
-            sendMsg(PublicDef.MSG_CARD_PAY_SUC, info)
-        }
-
         private fun getErrorInfo(errmsg: String?): CardUserInfoBean {
             val info = CardUserInfoBean(PublicDef.ERROR, errmsg ?: "null")
             info.showtime = pos.getSysPara()!!.failShowtime
             info.status = PayStatus.FAIL
+            info.amount = amount
+            info.payamt = amount
+            info.payway = "card"
+            info.cardno = cardBean?.cardNo
+            info.transdate = DateUtil.getNowDateNoFormat()
+            info.transtime = DateUtil.getNowTimeNoFormat()
+            return info
+        }
+
+        private fun getRvsErrorInfo(errmsg: String?): CardUserInfoBean {
+            val info = CardUserInfoBean(PublicDef.ERROR, errmsg ?: "null")
+            info.showtime = pos.getSysPara()!!.failShowtime
+            info.status = PayStatus.FAIL
+            info.amount = amount
+            info.payamt = amount
+            info.cardno = cardBean?.cardNo
+            info.payway = "card"
+            info.transdate = DateUtil.getNowDateNoFormat()
+            info.transtime = DateUtil.getNowTimeNoFormat()
+            info.reversalFlag = ReversalFlag.MANUAL
             return info
         }
 
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 f69e698..08b68c1 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
@@ -32,12 +33,15 @@
      */
     @Volatile
     private var interruptedPay: Boolean = false
+    @Volatile
+    private var amount = 0
 
     fun interruptPay() {
         interruptedPay = true
     }
 
     fun pay(code: String, amount: Int) {
+        this.amount = amount
         interruptedPay = false
         try {
             initTransdtlOnline(code, amount)
@@ -58,7 +62,7 @@
     }
 
     private fun payResultQuery(): Boolean {
-        sendMsg(PublicDef.MSG_CODE_PAYING_CANCEL, "谨慎操作查询取消")
+        sendMsg(PublicDef.MSG_PAYING_QUERY, "谨慎操作查询取消")
         LogUtil.d(TAG, "扫码消费确认超时,进行查询操作:billno=${codeRecord.billno}")
         sleepWithCancel(1500)
         var searchCnt = 1
@@ -92,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) {
             // 等待查询
@@ -102,7 +110,6 @@
         }
         codeRecord.payamt = retBean.amount
         codeRecord.extraamt = retBean.extraamt
-        codeRecord.balance = retBean.balance
         return true
     }
 
@@ -114,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
@@ -172,10 +183,12 @@
         info.amount = codeRecord.payamt
         info.payamt = codeRecord.payamt
         info.username = codeRecord.username
-        info.datetime = codeRecord.transdate + codeRecord.transtime
+        info.cardno = codeRecord.cardno
+        info.transdate = codeRecord.transdate
+        info.transtime = codeRecord.transtime
         info.payway = codeRecord.transtype
-        info.status = PayStatus.SUC
-        info.balance = codeRecord.balance
+        info.status = codeRecord.status
+        info.reversalFlag = codeRecord.reversalflag
         sendMsg(PublicDef.MSG_CARD_PAY_SUC, info)
     }
 
@@ -183,6 +196,11 @@
         val info = CardUserInfoBean(PublicDef.ERROR, errmsg ?: "null")
         info.showtime = pos.getSysPara()!!.failShowtime
         info.status = PayStatus.FAIL
+        info.amount = amount
+        info.payamt = amount
+        info.payway = "code"
+        info.transdate = DateUtil.getNowDateNoFormat()
+        info.transtime = DateUtil.getNowTimeNoFormat()
         return info
     }
 
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 cbfac25..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
 
@@ -108,6 +107,7 @@
         intent.putExtra("datetime", DateUtil.getNowDateNoFormat())
         intent.putExtra("amount", record.payamt.toString())
         intent.putExtra("payway", record.payway)
+        intent.putExtra("operation", "reverse")
         intent.setClass(iMenuView.getActivity(), ConsumeActivity::class.java)
         iMenuView.getActivity().startActivity(intent)
     }
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/syspara/SysparaActivity.kt b/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
index f2dba5f..160dfe3 100644
--- a/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
@@ -45,9 +45,9 @@
         kvMap[index++] = ControlParaRecord("服务器标识>>", cfgRecord.epayUri!!)
         kvMap[index++] = ControlParaRecord("服务器端口>>", "" + cfgRecord.epayPort)
         kvMap[index++] =
-            ControlParaRecord("参数版本号>>", "no:" + dyRecord!!.paraverno + ",id:" + dyRecord.paragroupid)
+            ControlParaRecord("参数版本号>>", "no:${dyRecord!!.paraverno},id:${dyRecord.paragroupid}")
         kvMap[index++] = ControlParaRecord("白名单版本>>", dyRecord.cardverno!!)
-        kvMap[index++] = ControlParaRecord("通讯超时>>", String.format("%ds", CommonUtil.getCommunicateTime()))
+        kvMap[index++] = ControlParaRecord("通讯超时>>", "${CommonUtil.getCommunicateTime()}s")
         if (sysRecord!!.returnFlag and 0x1 == 1) {
             kvMap[index++] = ControlParaRecord("冲正使能>>", "启用")
         } else {
@@ -63,17 +63,12 @@
         } else {
             kvMap[index++] = ControlParaRecord("网络状态>>", "脱机")
         }
-        kvMap[index++] = ControlParaRecord("成功显时间>>", String.format("%ds", sysRecord!!.sucShowtime))
-        kvMap[index++] = ControlParaRecord("失败显时间>>", String.format("%ds", sysRecord.failShowtime))
-        kvMap[index++] = ControlParaRecord("联机流水号>>", String.format("%d", pos.getTransdtlOnlineMaxSeqno()))
-        kvMap[index++] = ControlParaRecord("离线流水号>>", String.format("%d", pos.getTransdtlOfflineMaxSeqno()))
-        kvMap[index++] = ControlParaRecord(
-            "未上传流水>>", String.format(
-                "%d", pos.getTransdtlOnlineUnconfirm()
-                        + pos.getTransdtlOfflineUnconfirm()
-            )
-        )
-        kvMap[index++] = ControlParaRecord("定额间隔时间(s)>>", "" + sysRecord.fixpayGap)
+        kvMap[index++] = ControlParaRecord("成功显时间>>", "${sysRecord.sucShowtime}s")
+        kvMap[index++] = ControlParaRecord("失败显时间>>", "${sysRecord.failShowtime}s")
+        kvMap[index++] = ControlParaRecord("联机流水号>>", pos.getTransdtlOnlineMaxSeqno().toString())
+        kvMap[index++] = ControlParaRecord("离线流水号>>", pos.getTransdtlOfflineMaxSeqno().toString())
+        kvMap[index++] = ControlParaRecord("未上传流水>>", pos.getTransdtlUnconfirmNum().toString())
+        kvMap[index++] = ControlParaRecord("定额间隔时间(s)>>", "${sysRecord.fixpayGap}s")
         kvMap[index++] = ControlParaRecord("心跳间隔>>", "${sysRecord.heatBeat}s")
     }
 
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..336efac 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
@@ -21,7 +21,7 @@
 class EpayUpgradeApi constructor(callbackInterface: CallbackInterface) {
     private val TIMEOUT = 5 * 1000// 超时
     private val callbackInterface = callbackInterface
-    private val POSID = "chargepos"
+    private val POSID = "posa711dali"
 
     fun upgrade(versionName: String) {
         val resp = getAppVersion()
@@ -41,11 +41,9 @@
     }
 
     private fun downloadUpdateFile(downUrl: String, file: File, versionName: String): Boolean {
-//            val downStep = 1// 提示step
         var downStep = 0// 提示step
         val totalSize: Int// 文件总大小
         var downloadCount = 0// 已经下载好的大小
-        var updateCount = 0// 已经上传的文件大小
         try {
             val url = URL(downUrl)
             val urlConnection = url.openConnection() as HttpURLConnection
@@ -163,7 +161,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/bean/WhiteListItemBean.kt b/app/src/main/java/com/supwisdom/bean/WhiteListItemBean.kt
index 398667c..f74f4a5 100644
--- a/app/src/main/java/com/supwisdom/bean/WhiteListItemBean.kt
+++ b/app/src/main/java/com/supwisdom/bean/WhiteListItemBean.kt
@@ -7,6 +7,5 @@
 class WhiteListItemBean {
     var cardphyid: String? = null
     var cardno: String? = null
-    var flag: Int = 0
-    var balance: Int = 0
+    var status: String? = null
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
index 8eb7e66..a89d80e 100644
--- a/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
+++ b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
@@ -43,6 +43,7 @@
         paragroupid,
         cardverno,
         jwt,
+        jwtexpire,
         token
     }
 
@@ -64,7 +65,6 @@
         extraamt,
         managefeetype,
         username,
-        balance,
         billno,
         reversalflag,
         reversalbillno,
@@ -92,12 +92,12 @@
     enum class WhiteList {
         cardphyid,
         cardno,
-        flag,
-        balance
+        status
     }
 
     enum class TransdtlUnion {
         username,
+        cardno,
         transdate,
         transtime,
         devseqno,
diff --git a/app/src/main/java/com/supwisdom/db/DBParaHelper.kt b/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
index 17c542a..3617287 100644
--- a/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
+++ b/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
@@ -41,8 +41,7 @@
             + TABLE_NAME_WHITELIST + " ( "
             + BeanPropEnum.WhiteList.cardphyid + " varchar(32),"
             + BeanPropEnum.WhiteList.cardno + " varchar(32),"
-            + BeanPropEnum.WhiteList.flag + " integer,"
-            + BeanPropEnum.WhiteList.balance + " integer,"
+            + BeanPropEnum.WhiteList.status + " varchar(16),"
             + "primary key ("
             + BeanPropEnum.WhiteList.cardphyid + ","
             + BeanPropEnum.WhiteList.cardno + ") )")
@@ -63,8 +62,9 @@
             + BeanPropEnum.DynamicPara.offlineseqno + " integer, "
             + BeanPropEnum.DynamicPara.paraverno + " integer, "
             + BeanPropEnum.DynamicPara.paragroupid + " integer, "
-            + BeanPropEnum.DynamicPara.cardverno + " char(14),"
+            + BeanPropEnum.DynamicPara.cardverno + " varchar(32),"
             + BeanPropEnum.DynamicPara.jwt + " varchar(254),"
+            + BeanPropEnum.DynamicPara.jwtexpire + " varchar(16),"
             + BeanPropEnum.DynamicPara.token + " varchar(32) )")
     private val DROP_TABLE_NAME_DYNAMICPARA = "DROP TABLE IF EXISTS $TABLE_NAME_DYNAMICPARA"
     private val CREATE_TABLE_NAME_SYSPARA = ("create table IF NOT EXISTS "
diff --git a/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt b/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
index aadfb8d..328f06d 100644
--- a/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
+++ b/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
@@ -46,7 +46,6 @@
             + BeanPropEnum.TransdtlOnline.transtype + " varchar(8),"
             + BeanPropEnum.TransdtlOnline.payamt + " integer,"
             + BeanPropEnum.TransdtlOnline.extraamt + " integer,"
-            + BeanPropEnum.TransdtlOnline.balance + " integer,"
             + BeanPropEnum.TransdtlOnline.managefeetype + " varchar(10),"
             + BeanPropEnum.TransdtlOnline.username + " varchar(32),"
             + BeanPropEnum.TransdtlOnline.billno + " varchar(32),"
diff --git a/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt b/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt
index 20ab20d..5c6b0fb 100644
--- a/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt
+++ b/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt
@@ -93,6 +93,7 @@
         record.paragroupid = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.paragroupid.toString()))
         record.cardverno = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.cardverno.toString()))
         record.jwt = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.jwt.toString()))
+        record.jwtExpire = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.jwtexpire.toString()))
         record.token = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.token.toString()))
         return record
     }
@@ -112,6 +113,7 @@
         values.put(BeanPropEnum.DynamicPara.cardverno.toString(), record.cardverno)
         values.put(BeanPropEnum.DynamicPara.jwt.toString(), record.jwt)
         values.put(BeanPropEnum.DynamicPara.token.toString(), record.token)
+        values.put(BeanPropEnum.DynamicPara.jwtexpire.toString(), record.jwtExpire)
         return values
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/Pos.kt b/app/src/main/java/com/supwisdom/db/Pos.kt
index d03277b..0f36600 100644
--- a/app/src/main/java/com/supwisdom/db/Pos.kt
+++ b/app/src/main/java/com/supwisdom/db/Pos.kt
@@ -161,6 +161,15 @@
         return onlMaxSeqno
     }
 
+    fun getTransdtlOnlineLast(): TransdtlOnlineRecord? {
+        try {
+            transdtlOnlineDao.getLock().lock()
+            return transdtlOnlineDao.getLast()
+        } finally {
+            transdtlOnlineDao.getLock().unlock()
+        }
+    }
+
     fun getTransdtlOnlineUnconfirm(): List<TransdtlOnlineRecord> {
         try {
             transdtlOnlineDao.getLock().lock()
@@ -170,10 +179,31 @@
         }
     }
 
+    fun getTransdtlUnconfirmNum(): Int {
+        var num = 0
+        try {
+            transdtlOnlineDao.getLock().lock()
+            num += transdtlOnlineDao.getUnconfirmNum()
+        } finally {
+            transdtlOnlineDao.getLock().unlock()
+        }
+        try {
+            transdtlOfflineDao.getLock().lock()
+            num += transdtlOfflineDao.getUnconfirmNum()
+        } finally {
+            transdtlOfflineDao.getLock().unlock()
+        }
+        return num
+    }
+
     fun saveTransdtlOnline(record: TransdtlOnlineRecord): Boolean {
         try {
             transdtlOnlineDao.getLock().lock()
-            return transdtlOnlineDao.save(record)
+            if (transdtlOnlineDao.save(record)) {
+                onlMaxSeqno = record.devseqno
+                return true
+            }
+            return false
         } finally {
             transdtlOnlineDao.getLock().unlock()
         }
@@ -218,10 +248,23 @@
         }
     }
 
+    fun getTransdtlOfflineLast(): TransdtlOfflineRecord? {
+        try {
+            transdtlOfflineDao.getLock().lock()
+            return transdtlOfflineDao.getLast()
+        } finally {
+            transdtlOfflineDao.getLock().unlock()
+        }
+    }
+
     fun saveTransdtlOffline(record: TransdtlOfflineRecord): Boolean {
         try {
             transdtlOfflineDao.getLock().lock()
-            return transdtlOfflineDao.save(record)
+            if (transdtlOfflineDao.save(record)) {
+                offMaxSeqno = record.devseqno
+                return true
+            }
+            return false
         } finally {
             transdtlOfflineDao.getLock().unlock()
         }
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
index 20bcec1..fb9d0c0 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
@@ -87,6 +87,24 @@
         return 0
     }
 
+    fun getUnconfirmNum(): Int {
+        val db = dbHelper.readableDatabase
+        var cursor: Cursor? = null
+        val sql = ("select COUNT("
+                + BeanPropEnum.TransdtlOffline.devseqno
+                + ") as num from " + TABLE
+                + " where " + BeanPropEnum.TransdtlOffline.upflag + "=0")
+        try {
+            cursor = db.rawQuery(sql, null)
+            if (cursor != null && cursor.moveToNext()) {
+                return cursor.getInt(cursor.getColumnIndex("num"))
+            }
+        } finally {
+            cursor?.close()
+        }
+        return 0
+    }
+
     fun clear(): Boolean {
         val db = dbHelper.writableDatabase
         try {
@@ -101,10 +119,25 @@
         }
     }
 
+    fun getLast(): TransdtlOfflineRecord? {
+        val db = dbHelper.readableDatabase
+        var cursor: Cursor? = null
+        val orderBy = BeanPropEnum.TransdtlOffline.devseqno.toString() + " desc"
+        try {
+            cursor = db.query(TABLE, null, null, null, null, null, orderBy, "1")
+            if (cursor != null && cursor.moveToNext()) {
+                return getRecord(cursor)
+            }
+            return null
+        } finally {
+            cursor?.close()
+        }
+    }
+
     fun clear(date: String): Boolean {
         val db = dbHelper.writableDatabase
         val selection =
-            BeanPropEnum.TransdtlOffline.upflag.toString() + "=?" + BeanPropEnum.TransdtlOffline.transdate + "<?"
+            BeanPropEnum.TransdtlOffline.upflag.toString() + "=? and " + BeanPropEnum.TransdtlOffline.transdate + "<?"
         try {
             db.beginTransaction()
             if (db.delete(TABLE, selection, arrayOf("1", date)) < 0) {
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
index 063c6e7..78a4328 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
@@ -72,6 +72,39 @@
         }
     }
 
+    fun getLast(): TransdtlOnlineRecord? {
+        val db = dbHelper.readableDatabase
+        var cursor: Cursor? = null
+        val orderBy = BeanPropEnum.TransdtlOnline.devseqno.toString() + " desc"
+        try {
+            cursor = db.query(TABLE, null, null, null, null, null, orderBy, "1")
+            if (cursor != null && cursor.moveToNext()) {
+                return getRecord(cursor)
+            }
+            return null
+        } finally {
+            cursor?.close()
+        }
+    }
+
+    fun getUnconfirmNum(): Int {
+        val db = dbHelper.readableDatabase
+        var cursor: Cursor? = null
+        val sql = ("select COUNT("
+                + BeanPropEnum.TransdtlOnline.devseqno
+                + ") as num from " + TABLE
+                + " where " + BeanPropEnum.TransdtlOnline.upflag + "=0")
+        try {
+            cursor = db.rawQuery(sql, null)
+            if (cursor != null && cursor.moveToNext()) {
+                return cursor.getInt(cursor.getColumnIndex("num"))
+            }
+        } finally {
+            cursor?.close()
+        }
+        return 0
+    }
+
     fun getMaxSeqno(): Int {
         val db = dbHelper.readableDatabase
         val sql = ("select max(${BeanPropEnum.TransdtlOnline.devseqno}) as seqno from $TABLE")
@@ -104,7 +137,7 @@
     fun clear(date: String): Boolean {
         val db = dbHelper.writableDatabase
         val selection =
-            BeanPropEnum.TransdtlOnline.upflag.toString() + "=?" + BeanPropEnum.TransdtlOnline.transdate + "<?"
+            BeanPropEnum.TransdtlOnline.upflag.toString() + "=? and " + BeanPropEnum.TransdtlOnline.transdate + "<?"
         try {
             db.beginTransaction()
             if (db.delete(TABLE, selection, arrayOf("1", date)) < 0) {
@@ -133,7 +166,6 @@
         record.username = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.username.toString()))
         record.payamt = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.payamt.toString()))
         record.extraamt = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.extraamt.toString()))
-        record.balance = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.balance.toString()))
         var flag = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.reversalflag.toString()))
         when (flag) {
             ReversalFlag.NONE.toString() -> record.reversalflag = ReversalFlag.NONE
@@ -166,7 +198,6 @@
         values.put(BeanPropEnum.TransdtlOnline.transtype.toString(), record.transtype)
         values.put(BeanPropEnum.TransdtlOnline.payamt.toString(), record.payamt)
         values.put(BeanPropEnum.TransdtlOnline.extraamt.toString(), record.extraamt)
-        values.put(BeanPropEnum.TransdtlOnline.balance.toString(), record.balance)
         values.put(BeanPropEnum.TransdtlOnline.billno.toString(), record.billno)
         values.put(BeanPropEnum.TransdtlOnline.managefeetype.toString(), record.managefeetype)
         values.put(BeanPropEnum.TransdtlOnline.username.toString(), record.username)
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
index 78bae0c..e764afa 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
@@ -24,8 +24,8 @@
             .append(BeanPropEnum.TransdtlOffline.reversalflag).append(",")
             .append(BeanPropEnum.TransdtlOffline.payamt).append(",")
             .append(BeanPropEnum.TransdtlOffline.status).append(",")
-            .append(BeanPropEnum.TransdtlOffline.cardno).append(" as ").append(BeanPropEnum.TransdtlUnion.username)
-            .append(",")
+            .append(" 'null' as ").append(BeanPropEnum.TransdtlUnion.username).append(",")
+            .append(BeanPropEnum.TransdtlOffline.cardno).append(",")
             .append(BeanPropEnum.TransdtlOffline.upflag)
             .append(" from ").append(DBTransdtlHelper.TABLE_NAME_DTL_OFFLINE)
             .append(" UNION ALL select ")
@@ -38,6 +38,7 @@
             .append(BeanPropEnum.TransdtlOnline.payamt).append(",")
             .append(BeanPropEnum.TransdtlOnline.status).append(",")
             .append(BeanPropEnum.TransdtlOnline.username).append(",")
+            .append(BeanPropEnum.TransdtlOnline.cardno).append(",")
             .append(BeanPropEnum.TransdtlOnline.upflag)
             .append(" from ").append(DBTransdtlHelper.TABLE_NAME_DTL_ONLINE)
     }
@@ -97,6 +98,10 @@
         record.devseqno = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.devseqno.toString()))
         record.payway = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.payway.toString()))
         record.username = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.username.toString()))
+        if (record.username == "null") {
+            record.username = null
+        }
+        record.cardno = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.cardno.toString()))
         var flag = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.reversalflag.toString()))
         when (flag) {
             ReversalFlag.NONE.toString() -> record.reversalflag = ReversalFlag.NONE
diff --git a/app/src/main/java/com/supwisdom/db/WhiteListDao.kt b/app/src/main/java/com/supwisdom/db/WhiteListDao.kt
index a5dfcdd..2630c43 100644
--- a/app/src/main/java/com/supwisdom/db/WhiteListDao.kt
+++ b/app/src/main/java/com/supwisdom/db/WhiteListDao.kt
@@ -68,8 +68,7 @@
         val record = WhiteListRecord()
         record.cardphyid = cursor.getString(cursor.getColumnIndex(BeanPropEnum.WhiteList.cardphyid.toString()))
         record.cardno = cursor.getString(cursor.getColumnIndex(BeanPropEnum.WhiteList.cardno.toString()))
-        record.flag = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.WhiteList.flag.toString()))
-        record.balance = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.WhiteList.balance.toString()))
+        record.status = cursor.getString(cursor.getColumnIndex(BeanPropEnum.WhiteList.status.toString()))
         return record
     }
 
@@ -77,8 +76,7 @@
         val values = ContentValues()
         values.put(BeanPropEnum.WhiteList.cardphyid.toString(), record.cardphyid)
         values.put(BeanPropEnum.WhiteList.cardno.toString(), record.cardno)
-        values.put(BeanPropEnum.WhiteList.flag.toString(), record.flag)
-        values.put(BeanPropEnum.WhiteList.balance.toString(), record.balance)
+        values.put(BeanPropEnum.WhiteList.status.toString(), record.status)
         return values
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt b/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt
index ea0e3b4..347d10a 100644
--- a/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt
@@ -1,10 +1,12 @@
 package com.supwisdom.entity
 
+import com.supwisdom.utils.GsonUtil
+
 /**
  ** create by zzq on 2019/7/24
  ** @desc 离线流水
  **/
-class TransdtlOfflineRecord {
+class TransdtlOfflineRecord : Cloneable {
     var devphyid: String? = null
     var transdate: String? = null
     var transtime: String? = null
@@ -20,4 +22,9 @@
     var reversaltranstime: String? = null  //被冲正流水时间
     var status: PayStatus? = null // init,fail,suc
     var upflag: Int = 0 // 1已上传
+
+    public override fun clone(): TransdtlOfflineRecord {
+        val tmp = GsonUtil.GsonString(this)
+        return GsonUtil.GsonToBean(tmp, TransdtlOfflineRecord::class.java)
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt b/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
index 97cfa84..584e629 100644
--- a/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
@@ -1,10 +1,12 @@
 package com.supwisdom.entity
 
+import com.supwisdom.utils.GsonUtil
+
 /**
  ** create by zzq on 2019/7/24
  ** @desc 联机流水
  **/
-class TransdtlOnlineRecord {
+class TransdtlOnlineRecord : Cloneable {
     var devphyid: String? = null
     var transdate: String? = null
     var transtime: String? = null
@@ -16,12 +18,15 @@
     var payamt: Int = 0
     var extraamt: Int = 0
     var managefeetype: String? = null // none,discount,mealer
-    var balance: Int? = null
     var username: String? = null
-    //    var userid: Int = 0
     var billno: String? = null
     var reversalflag: ReversalFlag? = null //消费none 自动冲正auto 手动撤销 manual
     var reversalbillno: String? = null //被冲正交易参考号
     var status: PayStatus? = null // init,fail,suc
     var upflag: Int = 0 // 1已上传
+
+    public override fun clone(): TransdtlOnlineRecord {
+        val tmp = GsonUtil.GsonString(this)
+        return GsonUtil.GsonToBean(tmp, TransdtlOnlineRecord::class.java)
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/entity/TransdtlUnionRecord.kt b/app/src/main/java/com/supwisdom/entity/TransdtlUnionRecord.kt
index bc78c6f..967fbd8 100644
--- a/app/src/main/java/com/supwisdom/entity/TransdtlUnionRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlUnionRecord.kt
@@ -6,6 +6,7 @@
  **/
 class TransdtlUnionRecord {
     var username: String? = null
+    var cardno: String? = null
     var transdate: String? = null
     var transtime: String? = null
     var devseqno: Int = 0
diff --git a/app/src/main/java/com/supwisdom/entity/WhiteListRecord.kt b/app/src/main/java/com/supwisdom/entity/WhiteListRecord.kt
index bbda15c..a632753 100644
--- a/app/src/main/java/com/supwisdom/entity/WhiteListRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/WhiteListRecord.kt
@@ -7,6 +7,5 @@
 class WhiteListRecord {
     var cardphyid: String? = null
     var cardno: String? = null
-    var flag: Int = 0 // 0--白卡 1--黑卡
-    var balance: Int = 0
+    var status: String? = null
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/exception/CardPayInterruptError.kt b/app/src/main/java/com/supwisdom/exception/CardPayInterruptError.kt
new file mode 100644
index 0000000..b69aa91
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/exception/CardPayInterruptError.kt
@@ -0,0 +1,13 @@
+package com.supwisdom.exception
+
+/**
+ ** create by zzq on 2019/8/2
+ ** @desc 交易取消
+ **/
+class CardPayInterruptError : Exception {
+    constructor(message: String, ex: Exception) : super(message + ex.message)
+
+    constructor(message: String) : super(message)
+
+    constructor(ex: Exception) : super(ex.message)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt b/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
index bf93d9b..5e3f70c 100644
--- a/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
+++ b/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
@@ -121,6 +121,8 @@
     }
 
     private fun addExtentHeader(request: Request.Builder): Request.Builder {
+        request.addHeader("Accept", "application/json; q=0.5")
+            .addHeader("Connection", "close")
         if (!TextUtils.isEmpty(clientId)) {
             request.addHeader("X-TENANT-ID", clientId)
         }
@@ -133,16 +135,12 @@
     fun get(url: String, params: WebParams?): TransResp? {
         val request = Request.Builder()
             .url(geturl(url, params))
-            .addHeader("Accept", "application/json; q=0.5")
-            .addHeader("Connection", "close")
         return getTransResp(addExtentHeader(request).build())
     }
 
     fun get(url: String, params: WebParams, callback: com.supwisdom.okhttp.ICallBackok<Any?>) {
         val request = Request.Builder()
             .url(geturl(url, params))
-            .addHeader("Accept", "application/json; q=0.5")
-            .addHeader("Connection", "close")
         client!!.newCall(addExtentHeader(request).build()).enqueue(object : Callback {
             override fun onFailure(call: Call, e: IOException) {
                 callback.callback(null)
@@ -172,8 +170,6 @@
         }
         val request = Request.Builder()
             .url(url)
-            .addHeader("Accept", "application/json; q=0.5")
-            .addHeader("Connection", "close")
             .post(builder.build())
         return getTransResp(addExtentHeader(request).build())
     }
@@ -185,8 +181,6 @@
         }
         val request = Request.Builder()
             .url(url)
-            .addHeader("Accept", "application/json; q=0.5")
-            .addHeader("Connection", "close")
             .post(builder.build())
         return getLongTransResp(addExtentHeader(request).build())
     }
@@ -195,8 +189,6 @@
         val body = RequestBody.create(JSON, json)
         val request = Request.Builder()
             .url(url)
-            .addHeader("Accept", "application/json; q=0.5")
-            .addHeader("Connection", "close")
             .post(body)
         return getTransResp(addExtentHeader(request).build())
     }
@@ -205,8 +197,6 @@
         val body = RequestBody.create(JSON, json)
         val request = Request.Builder()
             .url(url)
-            .addHeader("Accept", "application/json; q=0.5")
-            .addHeader("Connection", "close")
             .post(body)
         client!!.newCall(addExtentHeader(request).build()).enqueue(object : Callback {
             override fun onFailure(call: Call, e: IOException) {
diff --git a/app/src/main/java/com/supwisdom/service/AuthEpay.kt b/app/src/main/java/com/supwisdom/service/AuthEpay.kt
index fc252ae..8c28078 100644
--- a/app/src/main/java/com/supwisdom/service/AuthEpay.kt
+++ b/app/src/main/java/com/supwisdom/service/AuthEpay.kt
@@ -35,7 +35,7 @@
         val url = StringBuilder()
         url.append(record!!.epayIP).append(":").append(record.epayPort)
             .append("/").append(record.epayUri)
-            .append("/api/auth/refresh/").append(record.devphyid).append("?")
+            .append("/api/auth/refresh")
         val resp = NetworkHandler.getInstance().get(url.toString(), null)
             ?: throw AuthEpayError("jwt刷新请求超时")
         if (resp.retcode != HttpStatus.SC_OK) {
@@ -72,7 +72,7 @@
             throw AuthEpayError("token json异常:${ex.message}")
         }
         if (retBean.retcode != PublicDef.SUCCESS) {
-            throw AuthEpayError(retBean.retmsg!!)
+            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!!)
+            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/BackgroundTaskService.kt b/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt
index 8a7c9f7..4405f38 100644
--- a/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt
+++ b/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt
@@ -8,50 +8,42 @@
 import com.supwisdom.utils.CommonUtil
 import com.supwisdom.utils.DateUtil
 import com.supwisdom.utils.FileUtil
+import com.supwisdom.utils.LogUtil
 
 /**
  ** create by zzq on 2019/7/23
  ** @desc
  **/
 class BackgroundTaskService : Thread() {
+    private val TAG = "BackgroundTaskService"
     private val pos = SPApplication.getInstance().getPos()
-    private val websocketProcess = WebsocketProcess()
-    private var websocketHasRun = false
-    private var apiInterface: APIInterface? = null
+    private var apiInterface: APIInterface = EpayApiImpl()
     private var sysRecord: SysParaRecord? = null
     private var transdtlClearDate: String? = null
+    @Volatile
+    private var isExist = false
 
-    fun getWebsocketProcess(): WebsocketProcess {
-        return websocketProcess
+    override fun start() {
+        isExist = false
+        super.start()
+    }
+
+    override fun interrupt() {
+        isExist = true
+        super.interrupt()
     }
 
     override fun run() {
-        var heartgap = 0
-        CommonUtil.doSleep(60 * 1000)
-        while (true) {
-            val hasInit = pos.getConfigPara()?.initOK ?: false
-            if (hasInit) {
-                break
+        var heartgap: Int
+        while (!isExist) {
+            try {
+                heartAndTransdtl()
+                clearTransdtl()
+            } catch (ex: Exception) {
+                ex.printStackTrace()
+                LogUtil.d(TAG, CommonUtil.getExceptionStack(ex))
             }
-            CommonUtil.doSleep(1000)
-        }
-        while (true) {
-            //做一卡通心跳和流水上传
-            heartAndTransdtl()
-            //清除流水
-            clearTransdtl()
             sysRecord = pos.getSysPara()
-//            if (sysRecord != null && sysRecord!!.getSocketSwitch() != 0) {
-//                if (!websocketHasRun) {
-//                    websocketHasRun = true
-//                    websocketProcess.start()
-//                }
-//            } else {
-//                if (websocketHasRun) {
-//                    websocketHasRun = false
-//                    websocketProcess.stop()
-//                }
-//            }
             heartgap = if (sysRecord == null || sysRecord!!.heatBeat < 10 || sysRecord!!.heatBeat > 600) {
                 60
             } else {
@@ -62,47 +54,42 @@
     }
 
     private fun heartAndTransdtl() {
-        //做一卡通的心跳以及流水上传
         try {
-            apiInterface!!.heartBeat()
-            SPApplication.getInstance().setEpayLinking(true)
-//        /*更新通讯jwt*/
+            /**更新通讯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 517819d..0cdffea 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!!)
+            throw HeartBeatError(retBean.getErrorMsg())
         }
         if (cardverno < retBean.cardverno!!) {
             try {
@@ -59,7 +59,7 @@
             try {
                 downloadSyspara(retBean.paragroupid, retBean.paraverno)
             } catch (ex: SysParaError) {
-                throw SysParaError(ex.message ?: "null")
+                throw HeartBeatError(ex.message ?: "null")
             }
         }
         /**
@@ -92,7 +92,7 @@
             throw SysParaError("json异常:${ex.message}")
         }
         if (retBean.retcode != PublicDef.SUCCESS) {
-            throw SysParaError(retBean.retmsg!!)
+            throw SysParaError(retBean.getErrorMsg())
         }
         val record = pos.getSysPara() ?: SysParaRecord()
         retBean.syspara?.forEach {
@@ -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("保存参数失败")
         }
@@ -133,7 +145,7 @@
                 throw WhiteListError("json异常:${ex.message}")
             }
             if (retBean.retcode != PublicDef.SUCCESS) {
-                throw WhiteListError(retBean.retmsg!!)
+                throw WhiteListError(retBean.getErrorMsg())
             }
             if (retBean.count != retBean.whitelist?.size) {
                 throw WhiteListError("白名单数量不对[${retBean.count},${retBean.whitelist?.size}]")
@@ -143,8 +155,7 @@
                 val record = WhiteListRecord()
                 record.cardphyid = it.cardphyid
                 record.cardno = it.cardno
-                record.flag = it.flag
-                record.balance = it.balance
+                record.status = it.status
                 list.add(record)
             }
             if (!pos.saveWhiteList(list)) {
@@ -160,28 +171,13 @@
 
     @Throws(TransdtlUploadError::class)
     override fun uploadTransdtl(record: TransdtlOnlineRecord) {
-        var reversalflag = "false"
-        if (record.reversalflag == ReversalFlag.AUTO ||
-            record.reversalflag == ReversalFlag.MANUAL
-        ) {
-            reversalflag = "true"
-        }
-
         val params = WebParams()
         params.setParameter("devphyid", record.devphyid)
             .setParameter("transdate", record.transdate)
             .setParameter("transtime", record.transtime)
             .setParameter("termseqno", record.devseqno)
-            .setParameter("cardno", record.cardno)
-            .setParameter("cardphyid", record.cardphyid)
-            .setParameter("qrcode", record.qrcode)
-            .setParameter("transtype", record.transtype)
-            .setParameter("amount", record.payamt)
-            .setParameter("extraamt", record.extraamt)
-            .setParameter("managefeetype", record.managefeetype)
-            .setParameter("managefeetype", record.managefeetype)
-            .setParameter("billno", record.billno)
-            .setParameter("reversalflag", reversalflag)
+            .setParameter("reversalbillno", record.reversalbillno)
+            .setParameter("reversalflag", record.reversalflag.toString())
             .setParameter("status", record.status.toString())
         val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/paycancel", "", params)
             ?: throw TransdtlUploadError("请求超时")
@@ -194,7 +190,7 @@
             throw TransdtlUploadError("json异常:${ex.message}")
         }
         if (retBean.retcode != PublicDef.SUCCESS) {
-            throw TransdtlUploadError(retBean.retmsg!!)
+            throw TransdtlUploadError(retBean.getErrorMsg())
         }
         if (retBean.termseqno != record.devseqno) {
             throw TransdtlUploadError("返回流水号不一致")
@@ -236,7 +232,7 @@
             throw TransdtlUploadError("json异常:${ex.message}")
         }
         if (retBean.retcode != PublicDef.SUCCESS) {
-            throw TransdtlUploadError(retBean.retmsg!!)
+            throw TransdtlUploadError(retBean.getErrorMsg())
         }
         if (retBean.termseqno != record.devseqno) {
             throw TransdtlUploadError("返回流水号不一致")
diff --git a/app/src/main/java/com/supwisdom/utils/DateUtil.kt b/app/src/main/java/com/supwisdom/utils/DateUtil.kt
index 6ce7a41..a65a9ce 100644
--- a/app/src/main/java/com/supwisdom/utils/DateUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/DateUtil.kt
@@ -218,6 +218,19 @@
     }
 
     /**
+     * @param time HHmmss
+     * @return ms
+     * @desc 将时间格式的字符串转换为长整型
+     */
+    fun timeFormatConvertToLong(time: String): Long {
+        return try {
+            FORMAT_HHmmss.parse(time).time
+        } catch (ex: ParseException) {
+            0L
+        }
+    }
+
+    /**
      * @param time ms
      * @return yyyyMMddHHmmss
      * @desc 将长整型数字转换为日期格式的字符串
diff --git a/app/src/main/java/com/supwisdom/utils/PublicDef.kt b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
index b67e05b..551a3ac 100644
--- a/app/src/main/java/com/supwisdom/utils/PublicDef.kt
+++ b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
@@ -31,7 +31,8 @@
     const val MSG_USER_INFO_SHOW = 17
     const val MSG_USER_INFO_CLEAR = 18
     const val MSG_LINK_STATUS = 19
-    const val MSG_CODE_PAYING_CANCEL = 19
+    const val MSG_PAYING_QUERY = 20
+    const val MSG_PAYING_INTERRUPT = 21
     /*************************不能重复*****************************/
     /**
      * 卡消费标志(1 byte)
diff --git a/app/src/main/java/com/supwisdom/view/BigProgressDialog.kt b/app/src/main/java/com/supwisdom/view/BigProgressDialog.kt
index 9fd9825..e05a2a0 100644
--- a/app/src/main/java/com/supwisdom/view/BigProgressDialog.kt
+++ b/app/src/main/java/com/supwisdom/view/BigProgressDialog.kt
@@ -1,3 +1,5 @@
+@file:Suppress("DEPRECATION")
+
 package com.supwisdom.view
 
 import android.app.Activity
diff --git a/app/src/main/java/com/supwisdom/view/DialogPurchase.kt b/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
index 39b5806..a03f510 100644
--- a/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
+++ b/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
@@ -18,16 +18,18 @@
  ** create by zzq on 2019/7/26
  ** @desc 消费弹窗
  **/
+@Suppress("DEPRECATION")
 class DialogPurchase constructor(context: Context, callBack: ICallBack) : DialogBase(context), IDecoderAcquirer {
     private val TAG = "DialogPurchase"
     private val callBack = callBack
     private var vCount: TextView
     private var vPayhint: TextView
     private var vPayamt: TextView
-    private var vBalance: TextView
+    private var vUsername: TextView
     private var posDec: PosDecoder? = null
     private var lastFixpayDecoderOpenTime: Long = 0
     private val waitTime = 60
+    private var payQueryConfirm = false
     var codePayingNoCancelEnable = false
     var codePaying = false
     var isFixPay = false
@@ -38,7 +40,7 @@
         vCount = this.findViewById(R.id.tv_close_count) as TextView
         vPayhint = this.findViewById(R.id.tv_pay_hint) as TextView
         vPayamt = this.findViewById(R.id.tv_pay_amount) as TextView
-        vBalance = this.findViewById(R.id.tv_pay_balance) as TextView
+        vUsername = this.findViewById(R.id.tv_pay_username) as TextView
 
         posDec = PosDecoder(this)
     }
@@ -65,7 +67,11 @@
             }
             when (event.keyCode) {
                 KeyEvent.KEYCODE_DEL -> {
-                    finish(true)
+                    if (payQueryConfirm) {
+                        finish(isManualCancel = true, isPaying = true)
+                    } else {
+                        finish(isManualCancel = true, isPaying = false)
+                    }
                 }
             }
         }
@@ -74,23 +80,28 @@
 
     fun show(hint: String, amount: String) {
         vPayhint.text = hint
-        vPayhint.setTextColor(Color.BLACK)
+        vPayhint.setTextColor(context.resources.getColor(R.color.blue))
         vPayamt.text = amount
         vPayamt.visibility = View.VISIBLE
 
-        vBalance.visibility = View.GONE
+        vUsername.visibility = View.GONE
         show()
         asyncOpenDecoder()
         resetCounter(waitTime)
     }
 
+    fun showQueryProcess(hint: String, amount: String) {
+        payQueryConfirm = true
+        showProcess(hint, amount)
+    }
+
     fun showProcess(hint: String, amount: String) {
         vPayhint.text = hint
         vPayhint.setTextColor(Color.RED)
         vPayamt.text = amount
         vPayamt.visibility = View.VISIBLE
 
-        vBalance.visibility = View.GONE
+        vUsername.visibility = View.GONE
         resetCounter(waitTime)
     }
 
@@ -99,22 +110,28 @@
         vPayhint.setTextColor(Color.GREEN)
         vPayamt.text = CommonUtil.showFormatAmount("金额", info.payamt)
         vPayamt.visibility = View.VISIBLE
-        if (info.balance == null) {
-            vBalance.visibility = View.GONE
-        } else {
-            vBalance.text = CommonUtil.showFormatAmount("余额", info.balance!!)
-            vBalance.visibility = View.VISIBLE
-        }
+        vUsername.text = "姓名: ${info.username ?: info.cardno}"
+        vUsername.visibility = View.VISIBLE
         show()
         resetCounter(info.showtime)
     }
 
+    fun showPayInterrupt() {
+        vPayhint.text = "交易取消"
+        vPayhint.setTextColor(Color.RED)
+        vPayamt.text = "以银行交易为准"
+        vPayamt.visibility = View.VISIBLE
+        vUsername.visibility = View.GONE
+        show()
+        resetCounter(3)
+    }
+
     fun showPayFail(info: CardUserInfoBean) {
         vPayhint.text = "消费失败"
         vPayhint.setTextColor(Color.RED)
         vPayamt.text = info.retmsg
         vPayamt.visibility = View.VISIBLE
-        vBalance.visibility = View.GONE
+        vUsername.visibility = View.GONE
         show()
         resetCounter(info.showtime)
     }
@@ -124,7 +141,7 @@
         vPayhint.setTextColor(Color.GREEN)
         vPayamt.text = CommonUtil.showFormatAmount("金额", info.amount)
         vPayamt.visibility = View.VISIBLE
-        vBalance.visibility = View.GONE
+        vUsername.visibility = View.GONE
         show()
         resetCounter(info.showtime)
     }
@@ -134,7 +151,7 @@
         vPayhint.setTextColor(Color.RED)
         vPayamt.text = info.retmsg
         vPayamt.visibility = View.VISIBLE
-        vBalance.visibility = View.GONE
+        vUsername.visibility = View.GONE
         show()
         resetCounter(info.showtime)
     }
@@ -180,11 +197,12 @@
         }
     }
 
-    private fun finish(isManualCancel: Boolean) {
+    private fun finish(isManualCancel: Boolean, isPaying: Boolean) {
         codePaying = false
         codePayingNoCancelEnable = false
+        payQueryConfirm = false
         dismiss()
-        callBack.callback(isManualCancel)
+        callBack.callback(isManualCancel, isPaying)
         asyncCloseDecoder()
     }
 
@@ -211,12 +229,12 @@
         }
 
         override fun onFinish() {
-            finish(false)
+            finish(false, false)
         }
     }
 
     interface ICallBack {
-        fun callback(isManualCancel: Boolean)
+        fun callback(isManualCancel: Boolean, isPaying: Boolean)
 
         fun callback(code: String)
     }
diff --git a/app/src/main/res/layout/activity_consume.xml b/app/src/main/res/layout/activity_consume.xml
index b4565e0..a1bf974 100644
--- a/app/src/main/res/layout/activity_consume.xml
+++ b/app/src/main/res/layout/activity_consume.xml
@@ -1,437 +1,424 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@color/light_blue2"
-    android:focusable="true"
-    android:orientation="vertical">
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:background="@color/light_blue2"
+              android:focusable="true"
+              android:orientation="vertical">
 
     <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginLeft="20dp"
-        android:layout_marginTop="20dp"
-        android:layout_marginRight="20dp"
-        android:background="@drawable/corner_bg_white"
-        android:orientation="vertical">
-
-        <LinearLayout
             android:layout_width="match_parent"
-            android:layout_height="304dp"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="20dp"
+            android:layout_marginTop="20dp"
+            android:layout_marginRight="20dp"
+            android:background="@drawable/corner_bg_white"
             android:orientation="vertical">
 
-            <LinearLayout
+        <LinearLayout
                 android:layout_width="match_parent"
-                android:layout_height="130dp"
-                android:orientation="horizontal"
-                android:padding="@dimen/consume_text_pad_size"
-                android:weightSum="3">
+                android:layout_height="304dp"
+                android:orientation="vertical">
+
+            <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="130dp"
+                    android:orientation="horizontal"
+                    android:padding="@dimen/consume_text_pad_size"
+                    android:weightSum="3">
 
                 <LinearLayout
-                    android:layout_width="0dp"
-                    android:layout_height="match_parent"
-                    android:layout_weight="2"
-                    android:orientation="horizontal">
+                        android:layout_width="0dp"
+                        android:layout_height="match_parent"
+                        android:layout_weight="2"
+                        android:orientation="horizontal">
 
                     <ImageView
-                        android:layout_width="60dp"
-                        android:layout_height="60dp"
-                        android:layout_gravity="center"
-                        android:scaleType="fitXY"
-                        android:src="@mipmap/shop_logo" />
+                            android:layout_width="60dp"
+                            android:layout_height="60dp"
+                            android:layout_gravity="center"
+                            android:scaleType="fitXY"
+                            android:src="@mipmap/shop_logo"/>
 
                     <LinearLayout
-                        android:layout_width="wrap_content"
-                        android:layout_height="match_parent"
-                        android:layout_gravity="center"
-                        android:layout_marginLeft="10dp"
-                        android:layout_marginTop="8dp"
-                        android:orientation="vertical"
-                        android:padding="1dp">
+                            android:layout_width="wrap_content"
+                            android:layout_height="match_parent"
+                            android:layout_gravity="center"
+                            android:layout_marginLeft="10dp"
+                            android:layout_marginTop="8dp"
+                            android:orientation="vertical"
+                            android:padding="1dp">
 
                         <TextView
-                            android:id="@+id/consume_shopname"
-                            android:layout_width="match_parent"
-                            android:layout_height="wrap_content"
-                            android:maxLines="2"
-                            android:text=""
-                            android:textColor="@color/blue"
-                            android:textSize="28sp" />
+                                android:id="@+id/tv_shopname"
+                                android:layout_width="match_parent"
+                                android:layout_height="wrap_content"
+                                android:maxLines="2"
+                                android:text=""
+                                android:textColor="@color/blue"
+                                android:textSize="28sp"/>
 
                         <TextView
-                            android:id="@+id/consume_time"
-                            android:layout_width="match_parent"
-                            android:layout_height="wrap_content"
-                            android:gravity="start"
-                            android:maxLines="1"
-                            android:text=""
-                            android:textColor="@color/blue"
-                            android:textSize="22sp" />
+                                android:id="@+id/tv_nowtime"
+                                android:layout_width="match_parent"
+                                android:layout_height="wrap_content"
+                                android:gravity="start"
+                                android:maxLines="1"
+                                android:text=""
+                                android:textColor="@color/blue"
+                                android:textSize="22sp"/>
                     </LinearLayout>
                 </LinearLayout>
 
                 <LinearLayout
-                    android:layout_width="0dp"
-                    android:layout_height="match_parent"
-                    android:layout_gravity="center"
-                    android:layout_weight="1"
-                    android:gravity="right"
-                    android:orientation="horizontal">
+                        android:layout_width="0dp"
+                        android:layout_height="match_parent"
+                        android:layout_gravity="center"
+                        android:layout_weight="1"
+                        android:gravity="end"
+                        android:orientation="horizontal">
 
                     <ImageView
-                        android:id="@+id/consume_linklogo"
-                        android:layout_width="30dp"
-                        android:layout_height="30dp"
-                        android:scaleType="fitXY"
-                        android:src="@drawable/wireless_on" />
+                            android:id="@+id/tv_linklogo"
+                            android:layout_width="30dp"
+                            android:layout_height="30dp"
+                            android:scaleType="fitXY"
+                            android:src="@drawable/wireless_on"/>
 
                     <TextView
-                        android:id="@+id/consume_linkstat"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:maxLines="1"
-                        android:text="已联网"
-                        android:textColor="@color/blue"
-                        android:textSize="22sp" />
+                            android:id="@+id/tv_linkstat"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:maxLines="1"
+                            android:text="已联网"
+                            android:textColor="@color/blue"
+                            android:textSize="22sp"/>
                 </LinearLayout>
             </LinearLayout>
 
             <View
+                    android:layout_width="match_parent"
+                    android:layout_height="1dp"
+                    android:layout_marginLeft="10dp"
+                    android:layout_marginRight="10dp"
+                    android:background="@color/black"/>
+
+            <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:orientation="horizontal"
+                    android:padding="@dimen/consume_text_pad_size">
+
+                <TextView
+                        android:layout_width="260dp"
+                        android:layout_height="match_parent"
+                        android:gravity="start|center"
+                        android:text="消费金额"
+                        android:textColor="@color/blue"
+                        android:textSize="50sp"
+                        android:textStyle="bold"/>
+
+                <TextView
+                        android:id="@+id/tv_input_amt"
+                        android:layout_width="wrap_content"
+                        android:layout_height="match_parent"
+                        android:gravity="center"
+                        android:maxLines="1"
+                        android:text="0"
+                        android:textColor="@color/orange1"
+                        android:textSize="65sp"
+                        android:textStyle="bold"/>
+            </LinearLayout>
+        </LinearLayout>
+    </LinearLayout>
+
+    <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="20dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="20dp"
+            android:background="@drawable/corner_bg_ordinary_consume_green"
+            android:orientation="vertical">
+
+        <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:padding="10dp">
+
+            <ImageView
+                    android:layout_width="40dp"
+                    android:layout_height="40dp"
+                    android:scaleType="fitXY"
+                    android:src="@mipmap/show_card_info"/>
+
+            <TextView
+                    android:id="@+id/tv_card_info"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:text="市民卡信息"
+                    android:textColor="@color/blue"
+                    android:textSize="@dimen/consume_text_size2"/>
+        </LinearLayout>
+
+        <View
                 android:layout_width="match_parent"
                 android:layout_height="1dp"
                 android:layout_marginLeft="10dp"
+                android:layout_marginTop="5dp"
                 android:layout_marginRight="10dp"
-                android:background="@color/black" />
+                android:layout_marginBottom="5dp"
+                android:background="@color/black"/>
 
-            <LinearLayout
+        <LinearLayout
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
-                android:orientation="horizontal"
-                android:padding="@dimen/consume_text_pad_size">
+                android:layout_marginLeft="10dp"
+                android:layout_marginTop="5dp"
+                android:orientation="vertical">
 
-                <TextView
-                    android:id="@+id/tv_consume_hint"
-                    android:layout_width="300dp"
-                    android:layout_height="match_parent"
-                    android:gravity="start|center"
-                    android:text="消费金额"
-                    android:textColor="@color/blue"
-                    android:textSize="50sp"
-                    android:textStyle="bold" />
+            <ImageView
+                    android:layout_width="80dp"
+                    android:layout_height="80dp"
+                    android:layout_gravity="center"
+                    android:scaleType="fitXY"
+                    android:src="@mipmap/default_photo"
+                    android:visibility="gone"/>
 
-                <TextView
-                    android:id="@+id/consume_amt"
+
+            <TextView
                     android:layout_width="wrap_content"
-                    android:layout_height="match_parent"
-                    android:gravity="center"
-                    android:maxLines="1"
-                    android:text="0"
-                    android:textColor="@color/orange1"
-                    android:textSize="65sp"
-                    android:textStyle="bold" />
+                    android:layout_height="wrap_content"
+                    android:padding="@dimen/consume_text_pad_size1"
+                    android:text="如需查询信息,请刷卡!"
+                    android:textColor="@color/blue"
+                    android:textSize="@dimen/consume_text_size2"/>
+
+            <LinearLayout style="@style/consume_wait_account_ll_style">
+
+                <TextView
+                        style="@style/consume_wait_account_paraname_style"
+                        android:text="姓         名: "/>
+
+                <TextView
+                        android:id="@+id/tv_citizen_name"
+                        style="@style/consume_wait_account_paraval_style"/>
+            </LinearLayout>
+
+            <LinearLayout style="@style/consume_wait_account_ll_style">
+
+                <TextView
+                        style="@style/consume_wait_account_paraname_style"
+                        android:text="市民卡号: "/>
+
+                <TextView
+                        android:id="@+id/tv_citizen_cardno"
+                        style="@style/consume_wait_account_paraval_style"/>
+            </LinearLayout>
+
+            <LinearLayout style="@style/consume_wait_account_ll_style">
+
+                <TextView
+                        style="@style/consume_wait_account_paraname_style"
+                        android:text="账户状态: "/>
+
+                <TextView
+                        android:id="@+id/tv_cardstatus"
+                        style="@style/consume_wait_account_paraval_style"/>
             </LinearLayout>
         </LinearLayout>
     </LinearLayout>
 
     <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginLeft="20dp"
-        android:layout_marginTop="10dp"
-        android:layout_marginRight="20dp"
-        android:background="@drawable/corner_bg_ordinary_consume_green"
-        android:orientation="vertical">
-
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            android:padding="10dp">
-
-            <ImageView
-                android:layout_width="40dp"
-                android:layout_height="40dp"
-                android:scaleType="fitXY"
-                android:src="@mipmap/show_card_info" />
-
-            <TextView
-                android:id="@+id/tv_card_info"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:text="校园卡信息"
-                android:textColor="@color/blue"
-                android:textSize="@dimen/consume_text_size2" />
-        </LinearLayout>
-
-        <View
-            android:layout_width="match_parent"
-            android:layout_height="1dp"
-            android:layout_marginLeft="10dp"
-            android:layout_marginTop="5dp"
-            android:layout_marginRight="10dp"
-            android:layout_marginBottom="5dp"
-            android:background="@color/black" />
-
-        <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:layout_marginLeft="10dp"
-            android:layout_marginTop="5dp"
+            android:layout_marginLeft="20dp"
+            android:layout_marginTop="10dp"
+            android:layout_marginRight="20dp"
+            android:layout_marginBottom="20dp"
+            android:background="@drawable/corner_bg_ordinary_consume_green"
             android:orientation="vertical">
 
-            <ImageView
-                android:layout_width="80dp"
-                android:layout_height="80dp"
-                android:layout_gravity="center"
-                android:scaleType="fitXY"
-                android:src="@mipmap/default_photo"
-                android:visibility="gone" />
-
-
-            <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:padding="@dimen/consume_text_pad_size1"
-                android:text="如需查询余额,请刷卡!"
-                android:textColor="@color/blue"
-                android:textSize="@dimen/consume_text_size2" />
-
-            <LinearLayout style="@style/consume_wait_account_ll_style">
-
-                <TextView
-                    style="@style/consume_wait_account_paraname_style"
-                    android:text="姓    名:  " />
-
-                <TextView
-                    android:id="@+id/consume_custname"
-                    style="@style/consume_wait_account_paraval_style" />
-            </LinearLayout>
-
-            <LinearLayout style="@style/consume_wait_account_ll_style">
-
-                <TextView
-                    style="@style/consume_wait_account_paraname_style"
-                    android:text="学工号:  " />
-
-                <TextView
-                    android:id="@+id/consume_stuempno"
-                    style="@style/consume_wait_account_paraval_style" />
-            </LinearLayout>
-
-            <LinearLayout style="@style/consume_wait_account_ll_style">
-
-                <TextView
-                    style="@style/consume_wait_account_paraname_style"
-                    android:text="余    额:  " />
-
-                <TextView
-                    android:id="@+id/consume_balance"
-                    style="@style/consume_wait_account_paraval_style" />
-            </LinearLayout>
-
-            <LinearLayout style="@style/consume_wait_account_ll_style">
-
-                <TextView
-                    style="@style/consume_wait_account_paraname_style"
-                    android:text="卡状态:  " />
-
-                <TextView
-                    android:id="@+id/consume_cardstatus"
-                    style="@style/consume_wait_account_paraval_style" />
-            </LinearLayout>
-        </LinearLayout>
-    </LinearLayout>
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layout_marginLeft="20dp"
-        android:layout_marginTop="10dp"
-        android:layout_marginRight="20dp"
-        android:layout_marginBottom="20dp"
-        android:background="@drawable/corner_bg_ordinary_consume_green"
-        android:orientation="vertical">
-
         <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            android:padding="@dimen/consume_text_pad_size1">
-
-            <ImageView
-                android:layout_width="40dp"
-                android:layout_height="40dp"
-                android:scaleType="fitXY"
-                android:src="@mipmap/bill_lastdtl" />
-
-            <TextView
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:text="最近一笔"
-                android:textColor="@color/blue"
-                android:textSize="@dimen/consume_text_size2" />
+                android:orientation="horizontal"
+                android:padding="@dimen/consume_text_pad_size1">
+
+            <ImageView
+                    android:layout_width="40dp"
+                    android:layout_height="40dp"
+                    android:scaleType="fitXY"
+                    android:src="@mipmap/bill_lastdtl"/>
+
+            <TextView
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:text="最近一笔"
+                    android:textColor="@color/blue"
+                    android:textSize="@dimen/consume_text_size2"/>
         </LinearLayout>
 
         <View
-            android:layout_width="match_parent"
-            android:layout_height="1dp"
-            android:layout_marginLeft="10dp"
-            android:layout_marginTop="10dp"
-            android:layout_marginRight="10dp"
-            android:layout_marginBottom="5dp"
-            android:background="@color/black" />
+                android:layout_width="match_parent"
+                android:layout_height="1dp"
+                android:layout_marginLeft="10dp"
+                android:layout_marginTop="10dp"
+                android:layout_marginRight="10dp"
+                android:layout_marginBottom="5dp"
+                android:background="@color/black"/>
 
         <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            android:paddingLeft="10dp"
-            android:paddingTop="10dp">
-
-            <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:text="支付结果:  "
-                android:textColor="@color/black"
-                android:textSize="@dimen/consume_text_size2" />
-
-            <TextView
-                android:id="@+id/consume_last_result"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:maxLines="1"
-                android:text=""
-                android:textColor="@color/blue"
-                android:textSize="@dimen/consume_text_size2"
-                android:textStyle="bold" />
+                android:orientation="horizontal"
+                android:paddingLeft="10dp"
+                android:paddingTop="10dp">
+
+            <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="match_parent"
+                    android:text="支付结果:  "
+                    android:textColor="@color/black"
+                    android:textSize="@dimen/consume_text_size2"/>
+
+            <TextView
+                    android:id="@+id/tv_last_pay_result"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:maxLines="1"
+                    android:text=""
+                    android:textColor="@color/blue"
+                    android:textSize="@dimen/consume_text_size2"
+                    android:textStyle="bold"/>
         </LinearLayout>
 
         <LinearLayout
-            android:id="@+id/ll_consume_last_failreason"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            android:paddingLeft="10dp"
-            android:paddingTop="5dp"
-            android:visibility="gone">
-
-            <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:text="失败提示:  "
-                android:textColor="@color/cl_red"
-                android:textSize="@dimen/consume_text_size2" />
-
-            <TextView
-                android:id="@+id/consume_last_failreason"
+                android:id="@+id/ll_consume_last_failreason"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:maxLines="1"
-                android:text=""
-                android:textColor="@color/cl_red"
-                android:textSize="@dimen/consume_text_size2"
-                android:textStyle="bold" />
+                android:orientation="horizontal"
+                android:paddingLeft="10dp"
+                android:paddingTop="5dp"
+                android:visibility="gone">
+
+            <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="match_parent"
+                    android:text="失败提示:  "
+                    android:textColor="@color/cl_red"
+                    android:textSize="@dimen/consume_text_size2"/>
+
+            <TextView
+                    android:id="@+id/tv_last_failreason"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:maxLines="1"
+                    android:text=""
+                    android:textColor="@color/cl_red"
+                    android:textSize="@dimen/consume_text_size2"
+                    android:textStyle="bold"/>
+        </LinearLayout>
+        <LinearLayout
+                android:id="@+id/ll_consume_cardno"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:paddingLeft="10dp"
+                android:paddingTop="5dp">
+
+            <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="match_parent"
+                    android:text="支付卡号:  "
+                    android:textColor="@color/black"
+                    android:textSize="@dimen/consume_text_size2"/>
+
+            <TextView
+                    android:id="@+id/tv_last_cardno"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:maxLines="1"
+                    android:text=""
+                    android:textColor="@color/blue"
+                    android:textSize="@dimen/consume_text_size2"
+                    android:textStyle="bold"/>
+        </LinearLayout>
+        <LinearLayout
+                android:id="@+id/ll_consume_last_payamt"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:paddingLeft="10dp"
+                android:paddingTop="5dp">
+
+            <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="match_parent"
+                    android:text="支付金额:  "
+                    android:textColor="@color/black"
+                    android:textSize="@dimen/consume_text_size2"/>
+
+            <TextView
+                    android:id="@+id/tv_last_payamt"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:maxLines="1"
+                    android:text=""
+                    android:textColor="@color/blue"
+                    android:textSize="@dimen/consume_text_size2"
+                    android:textStyle="bold"/>
         </LinearLayout>
 
         <LinearLayout
-            android:id="@+id/ll_consume_last_payamt"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            android:paddingLeft="10dp"
-            android:paddingTop="5dp">
-
-            <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:text="支付金额:  "
-                android:textColor="@color/black"
-                android:textSize="@dimen/consume_text_size2" />
-
-            <TextView
-                android:id="@+id/consume_last_payamt"
                 android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:maxLines="1"
-                android:text=""
-                android:textColor="@color/blue"
-                android:textSize="@dimen/consume_text_size2"
-                android:textStyle="bold" />
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:paddingLeft="10dp"
+                android:paddingTop="5dp">
+
+            <TextView
+                    android:layout_width="wrap_content"
+                    android:layout_height="match_parent"
+                    android:text="支付方式:  "
+                    android:textColor="@color/black"
+                    android:textSize="@dimen/consume_text_size2"/>
+
+            <TextView
+                    android:id="@+id/tv_last_payway"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:maxLines="1"
+                    android:text=""
+                    android:textColor="@color/blue"
+                    android:textSize="@dimen/consume_text_size2"
+                    android:textStyle="bold"/>
         </LinearLayout>
 
         <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            android:paddingLeft="10dp"
-            android:paddingTop="5dp">
-
-            <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:text="支付方式:  "
-                android:textColor="@color/black"
-                android:textSize="@dimen/consume_text_size2" />
-
-            <TextView
-                android:id="@+id/consume_last_payway"
                 android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:maxLines="1"
-                android:text=""
-                android:textColor="@color/blue"
-                android:textSize="@dimen/consume_text_size2"
-                android:textStyle="bold" />
-        </LinearLayout>
-
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            android:paddingLeft="10dp"
-            android:paddingTop="5dp">
+                android:layout_height="wrap_content"
+                android:orientation="horizontal"
+                android:paddingLeft="10dp"
+                android:paddingTop="5dp">
 
             <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:text="支付日期:  "
-                android:textColor="@color/black"
-                android:textSize="@dimen/consume_text_size2" />
+                    android:layout_width="wrap_content"
+                    android:layout_height="match_parent"
+                    android:text="支付时间:  "
+                    android:textColor="@color/black"
+                    android:textSize="@dimen/consume_text_size2"/>
 
             <TextView
-                android:id="@+id/consume_last_payday"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:maxLines="1"
-                android:text=""
-                android:textColor="@color/blue"
-                android:textSize="@dimen/consume_text_size2"
-                android:textStyle="bold" />
-        </LinearLayout>
-
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            android:paddingLeft="10dp"
-            android:paddingTop="5dp">
-
-            <TextView
-                android:layout_width="wrap_content"
-                android:layout_height="match_parent"
-                android:text="支付时间:  "
-                android:textColor="@color/black"
-                android:textSize="@dimen/consume_text_size2" />
-
-            <TextView
-                android:id="@+id/consume_last_paytime"
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:maxLines="1"
-                android:text=""
-                android:textColor="@color/blue"
-                android:textSize="@dimen/consume_text_size2"
-                android:textStyle="bold" />
+                    android:id="@+id/tv_last_paytime"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:maxLines="1"
+                    android:text=""
+                    android:textColor="@color/blue"
+                    android:textSize="@dimen/consume_text_size2"
+                    android:textStyle="bold"/>
         </LinearLayout>
     </LinearLayout>
 </LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_purchase.xml b/app/src/main/res/layout/dialog_purchase.xml
index e43ef15..bb9a98a 100644
--- a/app/src/main/res/layout/dialog_purchase.xml
+++ b/app/src/main/res/layout/dialog_purchase.xml
@@ -32,22 +32,20 @@
                     style="@style/purchase_tv_text_hint_style"
                     android:text="消费成功"
                     android:textColor="@color/light_green"/>
-
+            <TextView
+                    android:id="@+id/tv_pay_username"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:text="姓名:  张三"
+                    android:textColor="@color/blue"
+                    android:textSize="@dimen/ordinary_consume_text_size"/>
             <TextView
                     android:id="@+id/tv_pay_amount"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_marginTop="10dp"
                     android:text="金额:  10.00元"
-                    android:textColor="@color/black"
-                    android:textSize="@dimen/ordinary_consume_text_size"/>
-
-            <TextView
-                    android:id="@+id/tv_pay_balance"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:text="余额:  123.00元"
-                    android:textColor="@color/black"
+                    android:textColor="@color/blue"
                     android:textSize="@dimen/ordinary_consume_text_size"/>
 
         </LinearLayout>
diff --git a/app/src/main/res/raw/pay_cancel.wav b/app/src/main/res/raw/pay_cancel.wav
new file mode 100644
index 0000000..21c72d9
--- /dev/null
+++ b/app/src/main/res/raw/pay_cancel.wav
Binary files differ
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index d16cba1..123c964 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -393,6 +393,7 @@
         <item name="android:layout_height">wrap_content</item>
         <item name="android:layout_width">wrap_content</item>
         <item name="android:textColor">@color/black</item>
+        <item name="android:maxLines">1</item>
         <item name="android:textSize">@dimen/consume_text_size2</item>
     </style>
 
diff --git a/upgrade.py b/upgrade.py
index 8de756f..6a2ec3c 100644
--- a/upgrade.py
+++ b/upgrade.py
@@ -28,12 +28,12 @@
 def zip_file(apk):
 	fileDir = path.dirname(apk)
 	version = subprocess.check_output(['git', 'describe', '--abbrev=4','--dirty','--always','--tags']).strip().decode('utf-8')
-	zipFile = fileDir+'/posa711'+'-'+version+'.zip'
+	zipFile = fileDir+'/posa711dali'+'-'+version+'.zip'
 	print('zipFile = '+zipFile)
 	
 	zf = zipfile.ZipFile(zipFile,'w',zipfile.ZIP_DEFLATED)
 	zf.write(fileDir+'/'+hashFileName,hashFileName)
-	zf.write(apk,'posa711.apk')
+	zf.write(apk,'posa711dali.apk')
 	zf.close()
 
 if __name__ == '__main__':
