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 f8da627..f3203a1 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
@@ -1,10 +1,466 @@
 package com.supwisdom.activities.consume
 
+import android.annotation.SuppressLint
+import android.app.Activity
+import android.content.Intent
+import android.graphics.Color
+import android.os.Bundle
+import android.os.CountDownTimer
+import android.view.KeyEvent
+import android.view.View
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.TextView
+import com.supwisdom.R
 import com.supwisdom.activities.BaseActivity
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.consume.bean.CardUserInfoBean
+import com.supwisdom.activities.menu.MenuActivity
+import com.supwisdom.activities.transdtl.TransdtlActivity
+import com.supwisdom.auxscreen.AuxScreenController
+import com.supwisdom.entity.PayStatus
+import com.supwisdom.entity.ReversalFlag
+import com.supwisdom.entity.TransdtlUnionRecord
+import com.supwisdom.utils.CommonUtil
+import com.supwisdom.utils.DateUtil
+import com.supwisdom.utils.PublicDef
+import com.supwisdom.utils.SoundUtil
+import java.util.*
 
 /**
  ** create by zzq on 2019/7/24
  ** @desc
  **/
+@Suppress("DEPRECATION")
+@SuppressLint("NewApi")
 class ConsumeActivity : BaseActivity(), IConsumeView {
+    private lateinit var amountTxt: TextView
+    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 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 vLastPayway: TextView
+    private lateinit var vLastPayday: TextView
+    private lateinit var vLastPaytime: TextView
+    private lateinit var vLastPayFailreason: TextView
+    private lateinit var vLastPayFailll: LinearLayout
+    private lateinit var vLastPayamtll: LinearLayout
+    @Volatile
+    private var isBackRuning = false
+    private var addAmount: Int = 0
+    private var counter: LastPayShowTimer? = null
+    private var lastPayInfo: CardUserInfoBean? = null
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setContentView(R.layout.activity_consume)
+
+        initView()
+        initData()
+    }
+
+    private fun initData() {
+        presenter = ConsumePresenter(this)
+        presenter.start()
+    }
+
+    private fun initView() {
+        vShopname = findViewById<TextView>(R.id.consume_shopname)
+        vLinkLogo = findViewById<ImageView>(R.id.consume_linklogo)
+        vLinkstat = findViewById<TextView>(R.id.consume_linkstat)
+        amountTxt = findViewById<TextView>(R.id.consume_amt)
+        vCustname = findViewById<TextView>(R.id.consume_custname)
+        vStuempno = findViewById<TextView>(R.id.consume_stuempno)
+        vCardstatus = findViewById<TextView>(R.id.consume_cardstatus)
+        vBalance = findViewById<TextView>(R.id.consume_balance)
+        vTime = findViewById<TextView>(R.id.consume_time)
+        vLastResult = findViewById<TextView>(R.id.consume_last_result)
+        vLastPayamt = findViewById<TextView>(R.id.consume_last_payamt)
+        vLastPayway = findViewById<TextView>(R.id.consume_last_payway)
+        vLastPayday = findViewById<TextView>(R.id.consume_last_payday)
+        vLastPaytime = findViewById<TextView>(R.id.consume_last_paytime)
+        vLastPayFailreason = findViewById<TextView>(R.id.consume_last_failreason)
+        vLastPayFailll = findViewById<LinearLayout>(R.id.ll_consume_last_failreason)
+        vLastPayamtll = findViewById<LinearLayout>(R.id.ll_consume_last_payamt)
+    }
+
+    private fun delValueToEdit() {
+        presenter.clickNoPay()
+        val str = amountTxt.text.toString()
+        val len = str.length
+        when {
+            len == 0 ||
+                    len == 1 -> {
+                refresh()
+            }
+            len > 1 -> {
+                amountTxt.text = str.substring(0, len - 1)
+                showScreenAmount()
+            }
+        }
+    }
+
+    private fun checkAmtToPay() {
+        val amt = getCurAmount() + addAmount
+        if (amt > 0) {
+            amountTxt.text = String.format("%.02f", amt / 100.0f)
+            jumpToPay(amt)
+        } else {
+            AuxScreenController.getInstance().refreshContent(Arrays.asList("请先输入金额:", "金额不能为0"))
+        }
+    }
+
+    private fun getCurAmount(): Int {
+        return try {
+            CommonUtil.YuanToFen(java.lang.Double.parseDouble(amountTxt.text.toString().trim { it <= ' ' }))
+        } catch (ex: Exception) {
+            ex.printStackTrace()
+            0
+        }
+    }
+
+    private fun jumpToPay(amount: Int) {
+//        val intent = Intent()
+//        intent.putExtra("datetime", CommonUtil.getSystemMills())
+//        intent.putExtra("amount", amount.toString())
+//        intent.putExtra("consumeType", PublicDef.CONSUME_TYPE_PAY)
+//        intent.setClass(this@WaitActivity, PayActivity::class.java)
+//        startActivity(intent)
+    }
+
+    private fun jumpToFixpay(amount: Int) {
+//        val intent = Intent()
+//        intent.putExtra("datetime", CommonUtil.getSystemMills())
+//        intent.putExtra("amount", amount.toString())
+//        intent.putExtra("consumeType", PublicDef.CONSUME_TYPE_FIXPAY)
+//        intent.setClass(this@WaitActivity, PayActivity::class.java)
+//        startActivity(intent)
+    }
+
+    private fun addValueToEdit(value: Int) {
+        var str = amountTxt.text.toString()
+        if ("0" == str) {
+            str = ""
+        }
+        //如果已经有小数点，则小数点后面不能超过两位
+        if (str.indexOf(".") > 0) {
+            if (str.length - str.indexOf(".") <= 2) {
+                amountTxt.text = "$str$value"
+            }
+        } else {
+            //限制消费金额<1000
+            if (str.length < 3) {
+                amountTxt.text = "$str$value"
+            }
+        }
+        showScreenAmount()
+    }
+
+    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
+            vCardstatus.setTextColor(Color.RED)
+            vBalance.text = null
+        }
+    }
+
+    private var lastshowtime: String? = null
+    override fun clearUserInfo(datetime: String) {
+        if (!isBackRuning) {
+            vCustname.text = null
+            vStuempno.text = null
+            vCardstatus.text = null
+            vBalance.text = null
+            val tmptime = datetime.substring(0, 16)
+            if (lastshowtime != tmptime) {
+                lastshowtime = tmptime
+                vTime.text = tmptime
+                AuxScreenController.getInstance().refreshBottom(tmptime)
+            }
+        }
+    }
+
+    override fun onResume() {
+        super.onResume()
+        isBackRuning = false
+        refresh()
+        refreshRecentDtl()
+    }
+
+    override fun onNewIntent(intent: Intent) {
+    }
+
+    private fun refresh() {
+        addAmount = 0
+        amountTxt.text = "0"
+        var shopname = SPApplication.getInstance().getPos().getConfigPara()!!.shopname
+        if (shopname == null || shopname.length < 9) {
+            vShopname.textSize = resources.getDimension(R.dimen.consume_shopname_text_size_normal)
+        } else {
+            vShopname.textSize = resources.getDimension(R.dimen.consume_shopname_text_size_middle)
+            if (shopname.length > 10) {
+                val len = shopname.length / 2
+                shopname = shopname.substring(0, len) + "\n" + shopname.substring(len)
+            }
+        }
+        vShopname.text = shopname
+
+        refreshLinkStatus(SPApplication.getInstance().isOnline())
+        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDate().substring(0, 16))
+        AuxScreenController.getInstance().refreshContent(Arrays.asList(" 欢迎光临!", " 请刷卡..."))
+
+        val record = SPApplication.getInstance().getPos().getControlPara(PublicDef.CONTROL_FIXAMT)
+        if (record != null && PublicDef.CONTROL_NO_FIXPAY_FLAG != record.paraval) {
+            try {
+                val amount = Integer.parseInt(record.paraval)
+                amountTxt.text = String.format("%.02f", amount / 100.0f)
+                jumpToFixpay(amount)
+            } catch (ex: Exception) {
+                ex.printStackTrace()
+            }
+        }
+    }
+
+    override fun refreshLinkStatus(isOnline: Boolean) {
+        if (isOnline) {
+            vLinkLogo.setImageDrawable(getDrawable(R.drawable.wireless_on))
+            vLinkstat.text = "联机"
+            vLinkstat.setTextColor(resources.getColor(R.color.blue))
+            AuxScreenController.getInstance().refreshTitle("联机         F4查看上笔记录")
+        } else {
+            vLinkLogo.setImageDrawable(getDrawable(R.drawable.wireless_off))
+            vLinkstat.text = "脱机"
+            vLinkstat.setTextColor(Color.RED)
+            AuxScreenController.getInstance().refreshTitle("脱机         F4查看上笔记录")
+        }
+    }
+
+    override fun showConsumeSuc(info: CardUserInfoBean) {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun showConsumeHint(hint: String) {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun showConsumeFail(info: CardUserInfoBean) {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun showReverseSuc(info: CardUserInfoBean) {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    override fun showReverseFail(info: CardUserInfoBean) {
+        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+    }
+
+    private var lastShowRecentDatetime: String? = null
+    private fun refreshRecentDtl() {
+        val info = lastPayInfo
+        if (info != null) {
+            //已显示过不在显示
+            if (lastShowRecentDatetime == info.datetime) {
+                return
+            }
+            lastShowRecentDatetime = info.datetime
+
+            if (info.status == PayStatus.SUC) {
+                when {
+                    info.reversalFlag == ReversalFlag.AUTO -> vLastResult.text = "自动冲正"
+                    info.reversalFlag == ReversalFlag.MANUAL -> vLastResult.text = "手动撤销"
+                    else -> vLastResult.text = "消费成功"
+                }
+                vLastPayFailll.visibility = View.GONE
+                vLastPayamtll.visibility = View.VISIBLE
+                vLastPayamt.text = String.format("%.02f元", info.payamt / 100.0f)
+            } else {
+                if (info.reversalFlag == ReversalFlag.AUTO ||
+                    info.reversalFlag == ReversalFlag.MANUAL
+                ) {
+                    vLastResult.text = "冲正失败"
+                } else {
+                    vLastResult.text = "消费失败"
+                }
+                vLastPayFailll.visibility = View.VISIBLE
+                vLastPayamtll.visibility = View.GONE
+                vLastPayFailreason.text = info.retmsg
+            }
+
+            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))
+            vLastPaytime.text = sb.toString()
+            resetPayShowCounter(10 * 1000)
+        }
+    }
+
+    private fun clearLastPayResult() {
+        vLastResult.text = null
+        vLastPayamt.text = null
+        vLastPayway.text = null
+        vLastPayday.text = null
+        vLastPaytime.text = null
+        vLastPayFailreason.text = null
+    }
+
+    override fun onStop() {
+        super.onStop()
+        isBackRuning = true
+    }
+
+    override fun onDestroy() {
+        SoundUtil.releaseMusic()
+        presenter.stop()
+        super.onDestroy()
+    }
+
+    @SuppressLint("SetTextI18n")
+    override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+        if (event.action == KeyEvent.ACTION_DOWN) {
+            val keyCode = event.keyCode
+            when (keyCode) {
+                KeyEvent.KEYCODE_BACK -> {
+                    amountTxt.text = "0"
+                    presenter.clickNoPay()
+                }
+                KeyEvent.KEYCODE_0,
+                KeyEvent.KEYCODE_1,
+                KeyEvent.KEYCODE_2,
+                KeyEvent.KEYCODE_3,
+                KeyEvent.KEYCODE_4,
+                KeyEvent.KEYCODE_5,
+                KeyEvent.KEYCODE_6,
+                KeyEvent.KEYCODE_7,
+                KeyEvent.KEYCODE_8,
+                KeyEvent.KEYCODE_9 -> {
+                    presenter.clickNoPay()
+                    addValueToEdit(keyCode - KeyEvent.KEYCODE_0)
+                }
+                KeyEvent.KEYCODE_POUND, KeyEvent.KEYCODE_PERIOD -> {
+                    presenter.clickNoPay()
+                    val str = amountTxt.text.toString()
+                    if (str.length < 8 && str.indexOf('.') < 0) {
+                        amountTxt.text = "$str."
+                        showScreenAmount()
+                    }
+                }
+                KeyEvent.KEYCODE_NUMPAD_ADD -> {
+                    //'+'
+                    addAmount += getCurAmount()
+                    amountTxt.text = ""
+                    showScreenAmount()
+                }
+                KeyEvent.KEYCODE_DPAD_LEFT -> {
+                    //'F1'
+                    isBackRuning = true
+                    jumpActivity(MenuActivity::class.java)
+                }
+//                KeyEvent.KEYCODE_DPAD_UP ->
+                //'F2'
+//                KeyEvent.KEYCODE_DPAD_DOWN ->
+                //'F3'
+                KeyEvent.KEYCODE_DPAD_RIGHT -> {
+                    //'F4'
+                    jumpActivity(TransdtlActivity::class.java)
+                }
+                KeyEvent.KEYCODE_DEL -> {
+                    //cancel
+                    presenter.clickNoPay()
+                    delValueToEdit()
+                }
+                KeyEvent.KEYCODE_ENTER -> {
+                    checkAmtToPay()
+                }
+            }
+        }
+        return super.dispatchKeyEvent(event)
+    }
+
+    private fun showScreenAmount() {
+        if (addAmount > 0) {
+            AuxScreenController.getInstance().refreshContent(
+                Arrays.asList(
+                    "输入金额: +" + String.format("%.02f", addAmount / 100.0f),
+                    amountTxt.text.toString()
+                )
+            )
+        } else {
+            AuxScreenController.getInstance().refreshContent(Arrays.asList("输入金额:", amountTxt.text.toString()))
+        }
+    }
+
+    override fun getActivity(): Activity {
+        return this
+    }
+
+    override fun isBackRuning(): Boolean {
+        return isBackRuning
+    }
+
+    fun showFixConsume(fixamt: Int) {
+        amountTxt.text = String.format("%.02f", fixamt / 100.0f)
+    }
+
+    override fun showRecentDtl(record: TransdtlUnionRecord?) {
+        if (record != null) {
+            val info = CardUserInfoBean(PublicDef.SUCCESS, "")
+            info.datetime = record.transdate + record.transtime
+            info.username = record.username
+            info.payamt = record.payamt
+            info.status = record.status
+            info.payway = record.payway
+            info.reversalFlag = record.reversalflag
+            refreshRecentDtl()
+        }
+    }
+
+    private fun resetPayShowCounter(timems: Long) {
+        counter?.cancel()
+        counter = LastPayShowTimer(timems, 500)
+        counter?.start()
+    }
+
+    private inner class LastPayShowTimer(millisInFuture: Long, countDownInterval: Long) :
+        CountDownTimer(millisInFuture, countDownInterval) {
+
+        override fun onTick(millisUntilFinished: Long) {
+
+        }
+
+        override fun onFinish() {
+            clearLastPayResult()
+        }
+    }
 }
\ No newline at end of file
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 d42ccfc..216dfcd 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
@@ -1,8 +1,71 @@
 package com.supwisdom.activities.consume
 
+import android.os.Handler
+import android.os.Looper
+import android.os.Message
+import com.supwisdom.activities.consume.bean.CardUserInfoBean
+import com.supwisdom.activities.consume.mode.CardPayService
+import com.supwisdom.utils.LogUtil
+import com.supwisdom.utils.PublicDef
+
 /**
  ** create by zzq on 2019/7/25
  ** @desc
  **/
-class ConsumePresenter constructor(iConsumeView: IConsumeView){
+class ConsumePresenter constructor(iConsumeView: IConsumeView) {
+    private val TAG = "ConsumePresenter"
+    private val iConsumeView = iConsumeView
+    private lateinit var handler: Handler
+    private var cardPayService: CardPayService
+
+    init {
+        createHandler()
+        cardPayService = CardPayService(iConsumeView, handler)
+    }
+
+    private fun createHandler() {
+        handler = object : android.os.Handler(Looper.getMainLooper()) {
+            override fun handleMessage(msg: Message) {
+                when (msg.what) {
+                    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_FAIL -> {
+                        val ret = msg.obj as CardUserInfoBean
+                        LogUtil.d(TAG, "pay fail,reason=${ret.retmsg}")
+                        iConsumeView.showConsumeFail(ret)
+                    }
+                    PublicDef.MSG_CARD_REVERSE_FAIL -> {
+                        val ret = msg.obj as CardUserInfoBean
+                        LogUtil.d(TAG, "reverse fail,reason=${ret.retmsg}")
+                        iConsumeView.showReverseFail(msg.obj as CardUserInfoBean)
+                    }
+                    PublicDef.MSG_CARD_REVERSE_SUC -> iConsumeView.showReverseSuc(msg.obj as CardUserInfoBean)
+                    PublicDef.MSG_USER_INFO_SHOW -> iConsumeView.showUserInfo(msg.obj as CardUserInfoBean)
+                    PublicDef.MSG_USER_INFO_CLEAR -> iConsumeView.clearUserInfo(msg.obj as String)
+                    PublicDef.MSG_LINK_STATUS -> iConsumeView.refreshLinkStatus(msg.obj as Boolean)
+                }
+            }
+        }
+    }
+
+    fun start() {
+        cardPayService.start()
+    }
+
+    fun stop() {
+        cardPayService.stop()
+    }
+
+    fun clickNoPay() {
+        cardPayService.clickNoPay()
+    }
+
+    fun clickToPay(amount: Int) {
+        cardPayService.clickToPay(amount)
+    }
+
+    fun clickToReverse(amount: Int) {
+        cardPayService.clickToReverse(amount)
+    }
 }
\ No newline at end of file
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 bca0fb1..d6c53bb 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/IConsumeView.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/IConsumeView.kt
@@ -1,8 +1,33 @@
 package com.supwisdom.activities.consume
 
+import android.app.Activity
+import com.supwisdom.activities.consume.bean.CardUserInfoBean
+import com.supwisdom.entity.TransdtlUnionRecord
+
 /**
  ** create by zzq on 2019/7/24
  ** @desc
  **/
 interface IConsumeView {
+    fun getActivity(): Activity
+
+    fun isBackRuning(): Boolean
+
+    fun showConsumeSuc(info: CardUserInfoBean)
+
+    fun showConsumeHint(hint: String)
+
+    fun showConsumeFail(info: CardUserInfoBean)
+
+    fun showReverseSuc(info: CardUserInfoBean)
+
+    fun showReverseFail(info: CardUserInfoBean)
+
+    fun showUserInfo(info: CardUserInfoBean)
+
+    fun clearUserInfo(datetime: String)
+
+    fun refreshLinkStatus(isOnline: Boolean)
+
+    fun showRecentDtl(record: TransdtlUnionRecord?)
 }
\ No newline at end of file
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
new file mode 100644
index 0000000..461c16d
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/consume/bean/CardAccountRetBean.kt
@@ -0,0 +1,14 @@
+package com.supwisdom.activities.consume.bean
+
+import com.supwisdom.bean.BaseResp
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+class CardAccountRetBean : BaseResp() {
+    var username: String? = null
+    var userid: 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/activities/consume/bean/CardBean.kt b/app/src/main/java/com/supwisdom/activities/consume/bean/CardBean.kt
index 162ff9b..f68486f 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
@@ -13,4 +13,6 @@
     var amount: Int = 0
     var username: String? = null
     var userid: Int = 0
+    var balance: Int? = null
+    var cardstatus: Int = 0
 }
\ 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 1fd28f2..10acf25 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
@@ -1,6 +1,8 @@
 package com.supwisdom.activities.consume.bean
 
 import com.supwisdom.bean.BaseResp
+import com.supwisdom.entity.PayStatus
+import com.supwisdom.entity.ReversalFlag
 
 /**
  ** create by zzq on 2019/7/25
@@ -9,4 +11,11 @@
 class CardUserInfoBean constructor(retcode: Int, retmsg: String) : BaseResp(retcode, retmsg) {
     var username: String? = null
     var showtime: Int = 3
+    var balance: Int? = null
+    var cardstatus: Int = 0
+    var payamt: Int = 0
+    var status: PayStatus? = null
+    var reversalFlag: ReversalFlag? = null
+    var datetime: String? = null
+    var payway: String? = null //card,code
 }
\ 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 c11c4d8..71f7899 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
@@ -4,10 +4,9 @@
 import android.os.Message
 import com.supwisdom.activities.SPApplication
 import com.supwisdom.activities.consume.IConsumeView
-import com.supwisdom.activities.consume.bean.CardBean
-import com.supwisdom.activities.consume.bean.CardPayConfirmRetBean
-import com.supwisdom.activities.consume.bean.CardPayInitRetBean
-import com.supwisdom.activities.consume.bean.CardUserInfoBean
+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.epaycard.Cardlib
@@ -54,14 +53,44 @@
         thread = null
     }
 
+    fun clickNoPay() {
+        clickStat = ClickStat.INIT
+        amount = 0
+    }
+
+    fun clickToPay(amount: Int) {
+        clickStat = ClickStat.PAY
+        this.amount = amount
+    }
+
+    fun clickToReverse(amount: Int) {
+        clickStat = ClickStat.REVERSE
+        this.amount = amount
+    }
+
     private inner class CardPayRunnable : Runnable {
         private lateinit var onlRecord: TransdtlOnlineRecord
         private lateinit var offRecord: TransdtlOfflineRecord
+        private var oldcardphyid: String? = null
+        private var onlineBalance = false
+        private var curLinkStatus = false
+        private var lastShowTime: Long = 0
+        private var lastUserInfoTime: Long = 0
+        private var curLinkRefreshTime: Long = 0
         override fun run() {
             while (!isExist) {
+                if (iConsumeView.isBackRuning()) {
+                    CommonUtil.doSleep(1000)
+                    continue
+                }
                 CommonUtil.doSleep(100)
                 try {
-                    readCard()
+                    val cardphyid = Cardlib.instance.requestCard()
+                    if (oldcardphyid != cardphyid) {
+                        readCard()
+                        cardBean.cardphyid = cardphyid
+                        oldcardphyid = cardphyid
+                    }
                     when (clickStat) {
                         ClickStat.PAY -> {
                             try {
@@ -75,32 +104,68 @@
                             try {
                                 doReverse()
                             } catch (ex: CardPayCancelFailError) {
-                                sendMsg(PublicDef.MSG_CARD_PAYCANCEL_FAIL, getErrorInfo(ex.message))
+                                sendMsg(PublicDef.MSG_CARD_REVERSE_FAIL, getErrorInfo(ex.message))
                                 clickStat = ClickStat.INIT
                             }
                         }
                         ClickStat.INIT -> {
-
+                            if (SPApplication.getInstance().isOnline() && !onlineBalance) {
+                                onlineBalance = true
+                                getAccountInfoByCard()
+                            }
+                            val curtime = System.currentTimeMillis()
+                            if (curtime < lastUserInfoTime ||
+                                curtime - lastUserInfoTime > 1000
+                            ) {
+                                lastUserInfoTime = curtime
+                                showCardUserInfo()
+                            }
                         }
                     }
                 } catch (ex: CardNotFoundError) {
                     ex.printStackTrace()
-                    continue
+                    doClear()
                 }
-
             }
         }
 
+        private fun getAccountInfoByCard() {
+            val resp = consumeApi.accQuery(
+                pos.getConfigPara()!!.devphyid!!,
+                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
+                }
+            }
+        }
+
+        private fun showCardUserInfo() {
+            val info = CardUserInfoBean(PublicDef.SUCCESS, "账户信息")
+            info.username = cardBean.username
+            info.balance = cardBean.balance
+            info.cardstatus = cardBean.cardstatus
+            sendMsg(PublicDef.MSG_USER_INFO_SHOW, info)
+        }
+
         private fun readCard() {
-            val cardphyid = Cardlib.instance.requestCard()
             val cardinfo = Cardlib.instance.readCard()
             cardBean = CardBean()
-            cardBean.cardphyid = cardphyid
             cardBean.cardNo = cardinfo.cardNo
             cardBean.idCard = cardinfo.idCard
             cardBean.expireDate = cardinfo.expireDate
             cardBean.amount = amount
             cardBean.datetime = DateUtil.getNowDateTimeFormat()
+            /**
+             * 用户名默认用卡号代替,在线查询更新为用户名
+             */
+            cardBean.username = cardBean.cardNo
         }
 
         private fun doConsume() {
@@ -145,7 +210,7 @@
             }
             onlRecord.billno = retBean.billno
             onlRecord.username = retBean.username
-            onlRecord.userid = retBean.userid
+//            onlRecord.userid = retBean.userid
             return true
         }
 
@@ -180,9 +245,10 @@
             onlRecord.cardno = cardBean.cardNo
             onlRecord.cardphyid = cardBean.cardphyid
             onlRecord.payamt = cardBean.amount
+            onlRecord.reversalflag = ReversalFlag.NONE
             onlRecord.extraamt = 0
             onlRecord.transtype = "card"
-            onlRecord.status = "init"
+            onlRecord.status = PayStatus.INIT
             onlRecord.upflag = 1
             if (!pos.saveTransdtlOnline(onlRecord)) {
                 throw CardPayFailError("保存流水失败")
@@ -191,9 +257,9 @@
 
         private fun updateTransdtlOnline(issuccess: Boolean) {
             if (issuccess) {
-                onlRecord.status = "suc"
+                onlRecord.status = PayStatus.SUC
             } else {
-                onlRecord.status = "fail"
+                onlRecord.status = PayStatus.FAIL
             }
             onlRecord.upflag = 0
             if (!pos.updateTransdtlOnline(onlRecord)) {
@@ -212,10 +278,13 @@
             if (!sysRecord!!.offlineEnable) {
                 throw CardPayFailError("禁止离线交易")
             }
-            val offdate = DateUtil.getDayDateNoFormatBefore(sysRecord.maxOfflineDays)
-            val validdate = pos.getDynamicPara()!!.lastauthtime?.substring(0, 8) ?: "00000000"
-            if (offdate > validdate) {
-                throw CardPayFailError("设备已脱机${sysRecord.maxOfflineDays}天")
+            val ctlRecord = pos.getControlPara(PublicDef.CONTROL_OFFLINE_DAY_DISABLE)
+            if (ctlRecord == null || ctlRecord.paraval != "1") {
+                val offdate = DateUtil.getDayDateNoFormatBefore(sysRecord.maxOfflineDays)
+                val validdate = pos.getDynamicPara()!!.lastauthtime?.substring(0, 8) ?: "00000000"
+                if (offdate > validdate) {
+                    throw CardPayFailError("设备已脱机${sysRecord.maxOfflineDays}天")
+                }
             }
 
             val whiteRecord =
@@ -241,9 +310,10 @@
             offRecord.cardno = cardBean.cardNo
             offRecord.cardphyid = cardBean.cardphyid
             offRecord.payamt = cardBean.amount
+            offRecord.reversalflag = ReversalFlag.NONE
             offRecord.extraamt = 0
             offRecord.managefeetype = "none"
-            offRecord.status = "init"
+            offRecord.status = PayStatus.INIT
             offRecord.upflag = 1
             if (!pos.saveTransdtlOffline(offRecord)) {
                 throw CardPayFailError("保存流水失败")
@@ -252,9 +322,9 @@
 
         private fun updateTransdtlOffline(issuccess: Boolean) {
             if (issuccess) {
-                offRecord.status = "suc"
+                offRecord.status = PayStatus.SUC
             } else {
-                offRecord.status = "fail"
+                offRecord.status = PayStatus.FAIL
             }
             offRecord.upflag = 0
             if (!pos.updateTransdtlOffline(offRecord)) {
@@ -262,6 +332,44 @@
             }
         }
 
+        private fun doClear() {
+            oldcardphyid = null
+            onlineBalance = false
+            val curtime = System.currentTimeMillis()
+            if (curtime < lastShowTime ||
+                curtime - lastShowTime > 1000
+            ) {
+                lastShowTime = curtime
+                sendMsg(PublicDef.MSG_USER_INFO_CLEAR, DateUtil.getNowDate())
+                showLinkStatus()
+            }
+        }
+
+        private fun showLinkStatus() {
+            if (SPApplication.getInstance().isOnline()) {
+                if (!curLinkStatus) {
+                    curLinkRefreshTime = System.currentTimeMillis()
+                    curLinkStatus = true
+                    sendMsg(PublicDef.MSG_LINK_STATUS, true)
+                    return
+                }
+            } else {
+                if (curLinkStatus) {
+                    curLinkStatus = false
+                    curLinkRefreshTime = System.currentTimeMillis()
+                    sendMsg(PublicDef.MSG_LINK_STATUS, false)
+                    return
+                }
+            }
+            val t = System.currentTimeMillis()
+            if (t < curLinkRefreshTime ||
+                t - curLinkRefreshTime > 30000
+            ) {
+                curLinkRefreshTime = t
+                sendMsg(PublicDef.MSG_LINK_STATUS, SPApplication.getInstance().isOnline())
+            }
+        }
+
         private fun getErrorInfo(errmsg: String?): CardUserInfoBean {
             val info = CardUserInfoBean(PublicDef.ERROR, errmsg ?: "null")
             info.showtime = pos.getSysPara()!!.consumeFailShowtime
diff --git a/app/src/main/java/com/supwisdom/activities/consume/mode/ConsumeApi.kt b/app/src/main/java/com/supwisdom/activities/consume/mode/ConsumeApi.kt
index 54627af..e6c49b1 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/mode/ConsumeApi.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/mode/ConsumeApi.kt
@@ -49,4 +49,13 @@
 
         return YktSession.getInstance().sendYktRequestPost("/api/pos/payquery", "", params)
     }
+
+    fun accQuery(devphyid: String, cardphyid: String, cardno: String): TransResp? {
+        val params = WebParams()
+        params.setParameter("devphyid", devphyid)
+            .setParameter("cardphyid", cardphyid)
+            .setParameter("cardno", cardno)
+
+        return YktSession.getInstance().sendYktRequestPost("/api/pos/accquery", "", params)
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/transdtl/TransdtlActivity.kt b/app/src/main/java/com/supwisdom/activities/transdtl/TransdtlActivity.kt
new file mode 100644
index 0000000..b047f21
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/transdtl/TransdtlActivity.kt
@@ -0,0 +1,10 @@
+package com.supwisdom.activities.transdtl
+
+import com.supwisdom.activities.BaseActivity
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+class TransdtlActivity : BaseActivity() {
+}
\ 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 aaac8dc..347db4a 100644
--- a/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
+++ b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
@@ -58,6 +58,8 @@
         transtype,
         payamt,
         extraamt,
+        managefeetype,
+        username,
         billno,
         reversalflag,
         reversalbillno,
@@ -90,6 +92,7 @@
     }
 
     enum class TransdtlUnion {
+        username,
         transdate,
         transtime,
         devseqno,
diff --git a/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt b/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
index 6fd57b1..a814f3a 100644
--- a/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
+++ b/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
@@ -62,6 +62,8 @@
             + BeanPropEnum.TransdtlOnline.transtype + " varchar(8),"
             + BeanPropEnum.TransdtlOnline.payamt + " integer,"
             + BeanPropEnum.TransdtlOnline.extraamt + " integer,"
+            + BeanPropEnum.TransdtlOnline.managefeetype + " varchar(10),"
+            + BeanPropEnum.TransdtlOnline.username + " varchar(32),"
             + BeanPropEnum.TransdtlOnline.billno + " varchar(32),"
             + BeanPropEnum.TransdtlOnline.reversalflag + " varchar(8),"
             + BeanPropEnum.TransdtlOnline.reversalbillno + " varchar(32),"
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
index f40b672..9d3d760 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
@@ -128,6 +128,9 @@
         record.qrcode = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.qrcode.toString()))
         record.transtype = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.transtype.toString()))
         record.billno = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.billno.toString()))
+        record.managefeetype =
+            cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.managefeetype.toString()))
+        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()))
         var flag = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.reversalflag.toString()))
@@ -163,6 +166,8 @@
         values.put(BeanPropEnum.TransdtlOnline.payamt.toString(), record.payamt)
         values.put(BeanPropEnum.TransdtlOnline.extraamt.toString(), record.extraamt)
         values.put(BeanPropEnum.TransdtlOnline.billno.toString(), record.billno)
+        values.put(BeanPropEnum.TransdtlOnline.managefeetype.toString(), record.managefeetype)
+        values.put(BeanPropEnum.TransdtlOnline.username.toString(), record.username)
         values.put(BeanPropEnum.TransdtlOnline.reversalflag.toString(), record.reversalflag.toString())
         values.put(BeanPropEnum.TransdtlOnline.reversalbillno.toString(), record.reversalbillno)
         values.put(BeanPropEnum.TransdtlOnline.status.toString(), record.status.toString())
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
index 62bd5d6..99b2107 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
@@ -24,6 +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(BeanPropEnum.TransdtlOffline.upflag)
             .append(" from ").append(DBTransdtlHelper.TABLE_NAME_DTL_OFFLINE)
             .append(" UNION ALL select ")
@@ -33,9 +35,10 @@
             .append(BeanPropEnum.TransdtlOnline.transtype).append(" as ").append(BeanPropEnum.TransdtlUnion.payway)
             .append(",")
             .append(BeanPropEnum.TransdtlOnline.reversalflag).append(",")
-            .append(BeanPropEnum.TransdtlOffline.payamt).append(",")
-            .append(BeanPropEnum.TransdtlOffline.status).append(",")
-            .append(BeanPropEnum.TransdtlOffline.upflag)
+            .append(BeanPropEnum.TransdtlOnline.payamt).append(",")
+            .append(BeanPropEnum.TransdtlOnline.status).append(",")
+            .append(BeanPropEnum.TransdtlOnline.username).append(",")
+            .append(BeanPropEnum.TransdtlOnline.upflag)
             .append(" from ").append(DBTransdtlHelper.TABLE_NAME_DTL_ONLINE)
     }
 
@@ -96,6 +99,7 @@
         record.transtime = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.transtime.toString()))
         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()))
         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/entity/TransdtlOnlineRecord.kt b/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
index 8114a10..b2b0d6e 100644
--- a/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
@@ -17,7 +17,7 @@
     var extraamt: Int = 0
     var managefeetype: String? = null // none,discount,mealer
     var username: String? = null
-    var userid: Int = 0
+    //    var userid: Int = 0
     var billno: String? = null
     var reversalflag: ReversalFlag? = null //消费none 自动冲正auto 手动撤销 manual
     var reversalbillno: String? = null //被冲正交易参考号
diff --git a/app/src/main/java/com/supwisdom/entity/TransdtlUnionRecord.kt b/app/src/main/java/com/supwisdom/entity/TransdtlUnionRecord.kt
index 184265c..bc78c6f 100644
--- a/app/src/main/java/com/supwisdom/entity/TransdtlUnionRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlUnionRecord.kt
@@ -5,6 +5,7 @@
  ** @desc
  **/
 class TransdtlUnionRecord {
+    var username: String? = null
     var transdate: String? = null
     var transtime: String? = null
     var devseqno: Int = 0
diff --git a/app/src/main/java/com/supwisdom/utils/PublicDef.kt b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
index d0cf3de..d5fac32 100644
--- a/app/src/main/java/com/supwisdom/utils/PublicDef.kt
+++ b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
@@ -22,11 +22,15 @@
     /**************************************************************/
     /*************************handler 状态码***********************/
     const val MSG_CARD_PAYING = 10
-    const val MSG_CARD_PAY_FAIL = 11
-    const val MSG_CARD_PAY_SUC = 12
-    const val MSG_CARD_PAY_QUERY = 13
-    const val MSG_CARD_PAYCANCEL_FAIL = 14
-    const val MSG_CARD_PAYCANCEL_SUC = 15
+    const val MSG_CARD_READ_AGAIN = 11
+    const val MSG_CARD_PAY_FAIL = 12
+    const val MSG_CARD_PAY_SUC = 13
+    const val MSG_CARD_PAY_QUERY = 14
+    const val MSG_CARD_REVERSE_FAIL = 15
+    const val MSG_CARD_REVERSE_SUC = 16
+    const val MSG_USER_INFO_SHOW = 17
+    const val MSG_USER_INFO_CLEAR = 18
+    const val MSG_LINK_STATUS = 19
     /*************************不能重复*****************************/
     /**
      * 卡消费标志(1 byte)
@@ -74,6 +78,10 @@
     const val CONTROL_OFFLINE_DAY_DISABLE = "offdaydisable"
     const val CONTROL_DEBUG_ENABLE = "debugenable"
     /**
+     * 非定额消费标识
+     */
+    const val CONTROL_NO_FIXPAY_FLAG = "none"
+    /**
      * 消费冲正时限
      */
     const val REVERSE_MS_GAP = 600000
diff --git a/app/src/main/java/com/supwisdom/utils/SoundUtil.kt b/app/src/main/java/com/supwisdom/utils/SoundUtil.kt
new file mode 100644
index 0000000..2c80655
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/utils/SoundUtil.kt
@@ -0,0 +1,70 @@
+package com.supwisdom.utils
+
+import android.content.Context
+import android.media.AudioManager
+import android.media.SoundPool
+import com.supwisdom.R
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+@Suppress("DEPRECATION")
+object SoundUtil {
+    private var soundId: Int = 0
+    private var soundPool: SoundPool? = null
+    private val soundMap = hashMapOf<Int, Int>()
+    private var keyEnable = false
+
+    fun playMusic(context: Context, mid: Int) {
+        if (!keyEnable && isKeyPlay(mid)) {
+            return
+        }
+        if (soundPool == null) {
+            soundPool = SoundPool(30, AudioManager.STREAM_MUSIC, 0) //分别对应声音池数量，AudioManager.STREAM_MUSIC 和 0
+        }
+        if (soundMap.containsKey(mid)) {
+            soundPool!!.play(soundMap[mid]!!, 1.0f, 1.0f, 1, 0, 1.0f)
+        } else {
+            soundId = soundPool!!.load(context, mid, 1)
+            soundPool!!.setOnLoadCompleteListener { pool, sampleId, status ->
+                soundMap[mid] = soundId
+                //  加载完成
+                pool.play(soundId, 1.0f, 1.0f, 1, 0, 1.0f)
+            }
+        }
+    }
+
+    fun releaseMusic() {
+        if (soundPool != null) {
+            soundPool!!.release()
+            soundPool = null
+        }
+        soundMap.clear()
+    }
+
+    fun setKeyPlay(enable: Boolean) {
+        keyEnable = enable
+    }
+
+    private fun isKeyPlay(mid: Int): Boolean {
+        return mid == R.raw.key_one ||
+                mid == R.raw.key_two ||
+                mid == R.raw.key_three ||
+                mid == R.raw.key_four ||
+                mid == R.raw.key_five ||
+                mid == R.raw.key_six ||
+                mid == R.raw.key_seven ||
+                mid == R.raw.key_eight ||
+                mid == R.raw.key_nine ||
+                mid == R.raw.key_zero ||
+                mid == R.raw.key_dot ||
+                mid == R.raw.key_add ||
+                mid == R.raw.key_clear ||
+                mid == R.raw.key_enter ||
+                mid == R.raw.key_fone ||
+                mid == R.raw.key_ftwo ||
+                mid == R.raw.key_fthree ||
+                mid == R.raw.key_ffour
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_consume.xml b/app/src/main/res/layout/activity_consume.xml
new file mode 100644
index 0000000..b4565e0
--- /dev/null
+++ b/app/src/main/res/layout/activity_consume.xml
@@ -0,0 +1,437 @@
+<?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">
+
+    <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: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">
+
+                    <ImageView
+                        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">
+
+                        <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" />
+
+                        <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" />
+                    </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">
+
+                    <ImageView
+                        android:id="@+id/consume_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" />
+                </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: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" />
+
+                <TextView
+                    android:id="@+id/consume_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: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: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" />
+        </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" />
+
+        <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" />
+        </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: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_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" />
+        </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">
+
+            <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_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" />
+        </LinearLayout>
+    </LinearLayout>
+</LinearLayout>
\ No newline at end of file
