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 0f2d57d..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
@@ -36,7 +36,7 @@
     @Volatile
     private var payQueryConfirm = false
     private var thread: Thread? = null
-    private lateinit var cardBean: CardBean
+    private var cardBean: CardBean? = null
 
     fun start() {
         isExist = false
@@ -97,7 +97,7 @@
                     iConsumeView.codeScannerEnable(false)
                     if (oldcardphyid != cardphyid) {
                         readCard()
-                        cardBean.cardphyid = cardphyid
+                        cardBean!!.cardphyid = cardphyid
                         oldcardphyid = cardphyid
                     }
                     when (clickStat) {
@@ -160,23 +160,23 @@
         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 {
-                            "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
+                            "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) {
@@ -187,26 +187,26 @@
 
         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() {
@@ -280,7 +280,7 @@
         }
 
         private fun checkOnlineReverseVaild(unionRecord: TransdtlUnionRecord, record: TransdtlOnlineRecord) {
-            if (record.cardphyid != cardBean.cardphyid) {
+            if (record.cardphyid != cardBean!!.cardphyid) {
                 throw CardPayCancelFailError("该卡不是最后消费")
             }
             if (unionRecord.transdate != record.transdate ||
@@ -306,7 +306,7 @@
         }
 
         private fun checkOfflineReverseVaild(unionRecord: TransdtlUnionRecord, record: TransdtlOfflineRecord) {
-            if (record.cardphyid != cardBean.cardphyid) {
+            if (record.cardphyid != cardBean!!.cardphyid) {
                 throw CardPayCancelFailError("该卡不是最后消费")
             }
             if (unionRecord.transdate != record.transdate ||
@@ -427,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"
@@ -496,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"
@@ -652,6 +652,7 @@
             info.amount = amount
             info.payamt = amount
             info.payway = "card"
+            info.cardno = cardBean?.cardNo
             info.transdate = DateUtil.getNowDateNoFormat()
             info.transtime = DateUtil.getNowTimeNoFormat()
             return info
@@ -663,6 +664,7 @@
             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()
