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 20791e7..0db3e42 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
@@ -15,7 +15,6 @@
 import com.supwisdom.service.EpayApiImpl
 import com.supwisdom.utils.*
 import org.apache.http.HttpStatus
-import java.util.concurrent.locks.ReentrantLock
 
 /**
  ** create by zzq on 2019/7/25
@@ -43,13 +42,12 @@
     private var payQueryConfirm = false
     var isFixMode = false
     private var thread: Thread? = null
-    private var cardBean: CardBean? = null
+    private var cardBean = CardBean()
 
     /**
      * 防止定额连续消费
      */
     private val lastPayBean = LastPayBean()
-    private val lock = ReentrantLock()
 
     @Volatile
     private var operation = false
@@ -75,32 +73,24 @@
     }
 
     fun clickNoPay() {
-        lock.lock()
         clickStat = ClickStat.INIT
         amount = 0
-        lock.unlock()
     }
 
     fun clickToPay(amount: Int) {
-        lock.lock()
-        clickStat = ClickStat.PAY
         this.amount = amount
-        lock.unlock()
+        clickStat = ClickStat.PAY
     }
 
     fun clickToReverse(amount: Int) {
-        lock.lock()
-        clickStat = ClickStat.REVERSE
         this.amount = amount
-        lock.unlock()
+        clickStat = ClickStat.REVERSE
     }
 
     fun clickToInterrupt() {
-        lock.lock()
         clickStat = ClickStat.INIT
         this.amount = 0
         payQueryConfirm = false
-        lock.unlock()
     }
 
     fun resetOperationTime() {
@@ -112,7 +102,6 @@
         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
         private var lastShowTime: Long = 0
@@ -130,19 +119,13 @@
                 try {
                     val cardphyid = Cardlib.instance.requestCard()
                     iConsumeView.cardPayingStatus(true)
-                    if (oldcardphyid != cardphyid) {
-                        readCard()
-                        cardBean!!.cardphyid = cardphyid
-                        oldcardphyid = cardphyid
-                        operation = true
-                    }
+                    readCard()
+                    cardBean.cardphyid = cardphyid
+                    cardBean.amount = amount
+                    operation = true
                     when (clickStat) {
                         ClickStat.PAY -> {
                             try {
-                                lock.lock()
-                                if (clickStat != ClickStat.PAY) {
-                                    throw CardPayInterruptError("支付状态已改变")
-                                }
                                 doConsume()
                             } catch (ex: CardPayFailError) {
                                 sendMsg(PublicDef.MSG_CARD_PAY_FAIL, getErrorInfo(ex.message))
@@ -155,17 +138,11 @@
                                             + "exception=${CommonUtil.getExceptionStack(ex)}"
                                 )
                                 sendMsg(PublicDef.MSG_CARD_PAY_FAIL, getErrorInfo("程序异常"))
-                            } finally {
-                                clickStat = ClickStat.INIT
-                                lock.unlock()
                             }
+                            clickStat = ClickStat.INIT
                         }
                         ClickStat.REVERSE -> {
                             try {
-                                lock.lock()
-                                if (clickStat != ClickStat.REVERSE) {
-                                    throw CardPayInterruptError("支付状态已改变")
-                                }
                                 doReverse()
                             } catch (ex: CardPayCancelFailError) {
                                 sendMsg(
@@ -179,10 +156,8 @@
                                             + "exception=${CommonUtil.getExceptionStack(ex)}"
                                 )
                                 sendMsg(PublicDef.MSG_CARD_REVERSE_FAIL, getRvsErrorInfo("程序异常"))
-                            } finally {
-                                clickStat = ClickStat.INIT
-                                lock.unlock()
                             }
+                            clickStat = ClickStat.INIT
                         }
                         ClickStat.INIT -> {
                             if (SPApplication.getInstance().isOnline() && !onlineBalance) {
@@ -211,24 +186,24 @@
         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) {
                 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
+                        cardBean.username = retBean.username
+                        cardBean.userid = retBean.userid
+                        cardBean.balance = retBean.balance
                         when (retBean.status) {
-                            "normal" -> cardBean!!.cardstatus = CardStatus.NORMAL
-                            "expire" -> cardBean!!.cardstatus = CardStatus.EXPIRE
-                            "lost" -> cardBean!!.cardstatus = CardStatus.LOCK
-                            "logout" -> cardBean!!.cardstatus = CardStatus.LOGOUT
-                            "frozen" -> cardBean!!.cardstatus = CardStatus.FROZEN
-                            "lock" -> cardBean!!.cardstatus = CardStatus.LOST
+                            "normal" -> cardBean.cardstatus = CardStatus.NORMAL
+                            "expire" -> cardBean.cardstatus = CardStatus.EXPIRE
+                            "lost" -> cardBean.cardstatus = CardStatus.LOCK
+                            "logout" -> cardBean.cardstatus = CardStatus.LOGOUT
+                            "frozen" -> cardBean.cardstatus = CardStatus.FROZEN
+                            "lock" -> cardBean.cardstatus = CardStatus.LOST
                         }
                     }
                 } catch (ex: Exception) {
@@ -305,31 +280,31 @@
 
         private fun showCardUserInfo() {
             val info = CardUserInfoBean(PublicDef.SUCCESS, "账户信息")
-            if (cardBean!!.username != cardBean!!.cardNo) {
-                info.username = cardBean!!.username
+            if (cardBean.username != cardBean.cardNo) {
+                info.username = cardBean.username
             }
-            info.cardno = cardBean!!.cardNo
-            info.cardstatus = cardBean!!.cardstatus
+            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() {
             if (isFixMode) {
-                if (lastPayBean.cardphyid == cardBean!!.cardphyid) {
+                if (lastPayBean.cardphyid == cardBean.cardphyid) {
                     val gap = (pos.getSysPara()?.fixpayGap ?: 10).toLong()
                     if (System.currentTimeMillis() - lastPayBean.suctime < gap * 1000) {
                         throw CardPayFailError("${gap}s内不能连续消费")
@@ -409,7 +384,7 @@
             unionRecord: TransdtlUnionRecord,
             record: TransdtlOnlineRecord
         ) {
-            if (record.cardphyid != cardBean!!.cardphyid) {
+            if (record.cardphyid != cardBean.cardphyid) {
                 throw CardPayCancelFailError("该卡不是最后消费")
             }
             if (unionRecord.transdate != record.transdate ||
@@ -438,7 +413,7 @@
             unionRecord: TransdtlUnionRecord,
             record: TransdtlOfflineRecord
         ) {
-            if (record.cardphyid != cardBean!!.cardphyid) {
+            if (record.cardphyid != cardBean.cardphyid) {
                 throw CardPayCancelFailError("该卡不是最后消费")
             }
             if (unionRecord.transdate != record.transdate ||
@@ -565,12 +540,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"
@@ -644,12 +619,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"
@@ -674,7 +649,7 @@
         }
 
         private fun showOnlSucInfo() {
-            lastPayBean.cardphyid = cardBean!!.cardphyid
+            lastPayBean.cardphyid = cardBean.cardphyid
             lastPayBean.suctime = System.currentTimeMillis()
             val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
             info.showtime = pos.getSysPara()!!.sucShowtime
@@ -691,7 +666,7 @@
         }
 
         private fun showOffSucInfo() {
-            lastPayBean.cardphyid = cardBean!!.cardphyid
+            lastPayBean.cardphyid = cardBean.cardphyid
             lastPayBean.suctime = System.currentTimeMillis()
             val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
             info.showtime = pos.getSysPara()!!.sucShowtime
@@ -760,7 +735,6 @@
         }
 
         private fun doClear() {
-            oldcardphyid = null
             onlineBalance = false
             val curtime = System.currentTimeMillis()
             if (curtime < lastShowTime ||
