diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 78ca339..2b2b54c 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -103,6 +103,26 @@
                 android:name=".activities.upgrade.UpgradeAcvitity"
                 android:label="@string/title_activity_consume"
                 android:launchMode="singleTask"/>
+        <activity
+                android:name=".activities.control.ControlActivity"
+                android:label="@string/title_activity_consume"
+                android:launchMode="singleTask"/>
+        <activity
+                android:name=".activities.manage.ManageActivity"
+                android:label="@string/title_activity_consume"
+                android:launchMode="singleTask"/>
+        <activity
+                android:name=".activities.menu.MenuActivity"
+                android:label="@string/title_activity_consume"
+                android:launchMode="singleTask"/>
+        <activity
+                android:name=".activities.transdtl.TransdtlActivity"
+                android:label="@string/title_activity_consume"
+                android:launchMode="singleTask"/>
+        <activity
+                android:name=".activities.communicate.CommunicateActivity"
+                android:label="@string/title_activity_consume"
+                android:launchMode="singleTask"/>
     </application>
 
 </manifest>
\ 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 a85fbc5..ea4b1c3 100644
--- a/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt
@@ -1,11 +1,126 @@
 package com.supwisdom.activities.cardlib
 
+import android.os.Bundle
+import android.view.KeyEvent
+import android.view.View
+import android.view.Window
+import android.widget.ProgressBar
+import android.widget.TextView
+import com.supwisdom.R
 import com.supwisdom.activities.BaseActivity
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.init.InitActivity
+import com.supwisdom.activities.load.LoadActivity
+import com.supwisdom.auxscreen.AuxScreenController
+import com.supwisdom.utils.AppExitUtil
+import com.supwisdom.utils.DateUtil
+import com.supwisdom.utils.PublicDef
+import com.supwisdom.view.BigProgressDialog
 
 /**
  ** create by zzq on 2019/7/25
  ** @desc
  **/
-class CardlibActivity : BaseActivity() {
+@Suppress("DEPRECATION")
+class CardlibActivity : BaseActivity(), ICardlibView {
+    private var vResult: TextView? = null
+    private var vProgressBar: ProgressBar? = null
+    private var presenter: CardlibPresenter? = null
+    @Volatile
+    private var isLoading = false
 
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        //在窗口标题上显示带进度的横向进度条
+        requestWindowFeature(Window.FEATURE_PROGRESS)
+        //显示不带进度的进度条
+        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS)
+
+        setContentView(R.layout.activity_cardlib)
+        initView()
+        initData()
+    }
+
+    private fun initData() {
+        presenter = CardlibPresenter(this)
+    }
+
+    private fun initView() {
+        vProgressBar = this.findViewById(R.id.cardlib_bar) as ProgressBar
+        vResult = this.findViewById(R.id.cardlib_result) as TextView
+    }
+
+    override fun showProgress(progress: Int) {
+        vProgressBar!!.progress = progress
+    }
+
+    override fun onResume() {
+        super.onResume()
+        if (!isLoading) {
+            isLoading = true
+            refresh()
+            presenter!!.doInitCardlib(this)
+        }
+    }
+
+    override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+        if (event.action == KeyEvent.ACTION_DOWN) {
+            if (isLoading) {
+                return false
+            }
+            when (event.keyCode) {
+                KeyEvent.KEYCODE_DEL -> {
+                    AppExitUtil.exit()
+                }
+            }
+        }
+        return super.dispatchKeyEvent(event)
+    }
+
+    private fun refresh() {
+        AuxScreenController.getInstance().refreshTitle("卡库初始化")
+        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDate())
+        AuxScreenController.getInstance().refreshContent(listOf("加载硬件驱动", "请稍等..."))
+    }
+
+    override fun showInitCardlibResult(issuccess: Boolean, msg: String) {
+        if (issuccess) {
+            val ctlRecord = SPApplication.getInstance().getPos().getControlPara(PublicDef.CONTROL_HAS_REGISTER)
+            if (ctlRecord == null) {
+                jumpActivity(InitActivity::class.java)
+            } else {
+                val record = SPApplication.getInstance().getPos().getConfigPara()
+                if (record != null && record.initOK) {
+                    jumpActivity(LoadActivity::class.java)
+                } else {
+                    jumpActivity(InitActivity::class.java)
+                }
+            }
+        } else {
+            vResult!!.text = msg
+            vResult!!.visibility = View.VISIBLE
+            AuxScreenController.getInstance().refreshTitle("卡库初始化")
+            AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDate())
+            AuxScreenController.getInstance().refreshContent(listOf("请联系管理员", "加载驱动失败", "原因:", msg))
+        }
+        isLoading = false
+    }
+
+    private var dialogProgress: BigProgressDialog? = null
+
+    override fun showProgressDialog(msg: String) {
+        if (dialogProgress == null) {
+            dialogProgress = BigProgressDialog(this, msg, false)
+        }
+        dialogProgress!!.setMsg(msg)
+        dialogProgress!!.show()
+    }
+
+    override fun closeProgressDialog() {
+        dialogProgress?.dismiss()
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/cardlib/CardlibPresenter.kt b/app/src/main/java/com/supwisdom/activities/cardlib/CardlibPresenter.kt
new file mode 100644
index 0000000..241072e
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/cardlib/CardlibPresenter.kt
@@ -0,0 +1,98 @@
+package com.supwisdom.activities.cardlib
+
+import android.app.Activity
+import android.os.AsyncTask
+import android.os.Handler
+import android.os.Looper
+import android.os.Message
+import com.supwisdom.epaycard.Cardlib
+import com.supwisdom.exception.CardlibInitError
+import com.supwisdom.utils.CommonUtil
+import com.supwisdom.utils.ThreadPool
+
+/**
+ * Created by zzq on 2017/11/7.
+ */
+class CardlibPresenter constructor(iCardlibView: ICardlibView) {
+    private val iCardlibView = iCardlibView
+    private val handler: Handler
+    @Volatile
+    private var cardlibStat = CardLibStatus.INIT
+    private var cardlibResult: String? = null
+
+    init {
+        handler = object : Handler(Looper.getMainLooper()) {
+            override fun handleMessage(msg: Message?) {
+                when (msg!!.what) {
+                    1 ->
+                        iCardlibView.showProgress(msg.obj as Int)
+                    2 -> {
+                        if (CardLibStatus.SUCCESS == cardlibStat) {
+                            iCardlibView.showInitCardlibResult(true, cardlibResult!!)
+                        } else {
+                            iCardlibView.showInitCardlibResult(false, cardlibResult!!)
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    fun doInitCardlib(acy: Activity) {
+        doProgressBar()
+        AsyncInitCardlib().execute(acy)
+    }
+
+    private inner class AsyncInitCardlib : AsyncTask<Activity, Unit, CardlibInitError?>() {
+        override fun onPostExecute(result: CardlibInitError?) {
+            if (result != null) {
+                cardlibStat = CardLibStatus.FAIL
+                cardlibResult = result.toString()
+            } else {
+                cardlibStat = CardLibStatus.SUCCESS
+                cardlibResult = "加载读卡库成功"
+            }
+        }
+
+        override fun doInBackground(vararg p0: Activity?): CardlibInitError? {
+            return try {
+                Cardlib.instance.init()
+                null
+            } catch (ex: CardlibInitError) {
+                ex
+            }
+        }
+    }
+
+    private fun doProgressBar() {
+        ThreadPool.getShortPool().execute(Runnable {
+            var i = 0
+            while (cardlibStat == CardLibStatus.INIT) {
+                CommonUtil.doSleep(500)
+                i++
+                if (i > 100) {
+                    i = 100
+                }
+                sendMsg(1, i)
+            }
+            while (i < 100) {
+                CommonUtil.doSleep(20)
+                sendMsg(1, i++)
+            }
+            sendMsg(2, 100)
+        })
+    }
+
+    private fun sendMsg(retcode: Int, retmsg: Any) {
+        val msg = Message()
+        msg.what = retcode
+        msg.obj = retmsg
+        handler.sendMessage(msg)
+    }
+}
+
+private enum class CardLibStatus(num: Int) {
+    INIT(0),
+    SUCCESS(1),
+    FAIL(2)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/cardlib/ICardlibView.kt b/app/src/main/java/com/supwisdom/activities/cardlib/ICardlibView.kt
new file mode 100644
index 0000000..bdb8c6c
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/cardlib/ICardlibView.kt
@@ -0,0 +1,14 @@
+package com.supwisdom.activities.cardlib
+
+/**
+ * Created by zzq on 2017/11/7.
+ */
+interface ICardlibView {
+    fun showProgressDialog(msg: String)
+
+    fun closeProgressDialog()
+
+    fun showInitCardlibResult(issuccess: Boolean, msg: String)
+
+    fun showProgress(progress: Int)
+}
\ No newline at end of file
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 f3203a1..47c6bdc 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
@@ -25,6 +25,7 @@
 import com.supwisdom.utils.DateUtil
 import com.supwisdom.utils.PublicDef
 import com.supwisdom.utils.SoundUtil
+import com.supwisdom.view.DialogPurchase
 import java.util.*
 
 /**
@@ -55,8 +56,10 @@
     @Volatile
     private var isBackRuning = false
     private var addAmount: Int = 0
+    private var amount: Int = 0
     private var counter: LastPayShowTimer? = null
     private var lastPayInfo: CardUserInfoBean? = null
+    private var dialogPurchase: DialogPurchase? = null
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
@@ -69,26 +72,31 @@
     private fun initData() {
         presenter = ConsumePresenter(this)
         presenter.start()
+        dialogPurchase = DialogPurchase(this, object : DialogPurchase.ICallBack {
+            override fun callback(isManualCancel: Boolean) {
+                presenter.clickNoPay()
+            }
+        })
     }
 
     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)
+        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)
+        vLastPayFailll = this.findViewById<LinearLayout>(R.id.ll_consume_last_failreason)
+        vLastPayamtll = this.findViewById<LinearLayout>(R.id.ll_consume_last_payamt)
     }
 
     private fun delValueToEdit() {
@@ -108,10 +116,11 @@
     }
 
     private fun checkAmtToPay() {
-        val amt = getCurAmount() + addAmount
-        if (amt > 0) {
-            amountTxt.text = String.format("%.02f", amt / 100.0f)
-            jumpToPay(amt)
+        amount = getCurAmount() + addAmount
+        if (amount > 0) {
+            amountTxt.text = String.format("%.02f", amount / 100.0f)
+            presenter.clickToPay(amount)
+            dialogPurchase!!.showProcess("请刷卡", CommonUtil.showFormatAmount("金额", amount))
         } else {
             AuxScreenController.getInstance().refreshContent(Arrays.asList("请先输入金额:", "金额不能为0"))
         }
@@ -126,24 +135,6 @@
         }
     }
 
-    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) {
@@ -205,7 +196,7 @@
         super.onResume()
         isBackRuning = false
         refresh()
-        refreshRecentDtl()
+        refreshRecentDtl(lastPayInfo)
     }
 
     override fun onNewIntent(intent: Intent) {
@@ -233,9 +224,10 @@
         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)
+                amount = Integer.parseInt(record.paraval)
                 amountTxt.text = String.format("%.02f", amount / 100.0f)
-                jumpToFixpay(amount)
+                presenter.clickToPay(amount)
+                dialogPurchase!!.showProcess("请刷卡", CommonUtil.showFormatAmount("金额", amount))
             } catch (ex: Exception) {
                 ex.printStackTrace()
             }
@@ -257,29 +249,54 @@
     }
 
     override fun showConsumeSuc(info: CardUserInfoBean) {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+        dialogPurchase!!.showPaySuccess(info)
+        val auxList = ArrayList<String>()
+        auxList.add(info.retmsg!!)
+        auxList.add(CommonUtil.showFormatAmount("金额", info.payamt))
+        when {
+            info.amount > info.payamt -> {
+                auxList.add(CommonUtil.showFormatAmount("折扣", info.amount - info.payamt))
+            }
+            info.amount < info.payamt -> {
+                auxList.add(CommonUtil.showFormatAmount("搭伙", info.payamt - info.amount))
+            }
+        }
+        if (info.balance != null) {
+            auxList.add(CommonUtil.showFormatAmount("余额", info.balance!!))
+        }
+        AuxScreenController.getInstance().refreshContent(auxList)
+        SoundUtil.playMusic(applicationContext, R.raw.consume_suc)
     }
 
     override fun showConsumeHint(hint: String) {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+        val amountStr = CommonUtil.showFormatAmount("金额", amount)
+        dialogPurchase!!.showProcess(hint, amountStr)
+        AuxScreenController.getInstance().refreshContent(Arrays.asList(hint, amountStr))
     }
 
     override fun showConsumeFail(info: CardUserInfoBean) {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+        dialogPurchase!!.showPayFail(info)
+        SoundUtil.playMusic(applicationContext, R.raw.consume_fail)
+        AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("消费失败", "原因:", info.retmsg))
     }
 
     override fun showReverseSuc(info: CardUserInfoBean) {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+        dialogPurchase!!.showReverseSuccess(info)
+        AuxScreenController.getInstance()
+            .refreshContent(Arrays.asList<String>(info.retmsg, CommonUtil.showFormatAmount("金额", info.payamt)))
+        SoundUtil.playMusic(applicationContext, R.raw.reversal_suc)
     }
 
     override fun showReverseFail(info: CardUserInfoBean) {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+        dialogPurchase!!.showReverseFail(info)
+        SoundUtil.playMusic(applicationContext, R.raw.reversal_fail)
+        AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("冲正失败", "原因:", info.retmsg))
     }
 
     private var lastShowRecentDatetime: String? = null
-    private fun refreshRecentDtl() {
-        val info = lastPayInfo
+    private fun refreshRecentDtl(info: CardUserInfoBean?) {
         if (info != null) {
+            lastPayInfo = info
             //已显示过不在显示
             if (lastShowRecentDatetime == info.datetime) {
                 return
@@ -442,7 +459,7 @@
             info.status = record.status
             info.payway = record.payway
             info.reversalFlag = record.reversalflag
-            refreshRecentDtl()
+            refreshRecentDtl(info)
         }
     }
 
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 10acf25..ebaf647 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
@@ -13,6 +13,7 @@
     var showtime: Int = 3
     var balance: Int? = null
     var cardstatus: Int = 0
+    var amount: Int = 0
     var payamt: Int = 0
     var status: PayStatus? = null
     var reversalFlag: ReversalFlag? = null
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 71f7899..29b489c 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
@@ -25,6 +25,7 @@
  ** @desc
  **/
 class CardPayService constructor(iConsumeView: IConsumeView, handler: Handler) {
+    private val TAG = "CardPayService"
     private val iConsumeView = iConsumeView
     private val handler = handler
     private val pos = SPApplication.getInstance().getPos()
diff --git a/app/src/main/java/com/supwisdom/bean/HeartBeatRetBean.kt b/app/src/main/java/com/supwisdom/bean/HeartBeatRetBean.kt
new file mode 100644
index 0000000..2c68992
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/bean/HeartBeatRetBean.kt
@@ -0,0 +1,12 @@
+package com.supwisdom.bean
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+class HeartBeatRetBean : BaseResp() {
+    var systime: String? = null
+    var paragroupid: Int = 0
+    var paraverno: Int = 0
+    var cardverno: String? = null
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/bean/SystemParaItemBean.kt b/app/src/main/java/com/supwisdom/bean/SystemParaItemBean.kt
new file mode 100644
index 0000000..09beb47
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/bean/SystemParaItemBean.kt
@@ -0,0 +1,10 @@
+package com.supwisdom.bean
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+class SystemParaItemBean {
+    var paraname: String? = null
+    var paraval: String? = null
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/bean/SystemParaRetBean.kt b/app/src/main/java/com/supwisdom/bean/SystemParaRetBean.kt
new file mode 100644
index 0000000..16ed4e0
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/bean/SystemParaRetBean.kt
@@ -0,0 +1,11 @@
+package com.supwisdom.bean
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+class SystemParaRetBean : BaseResp() {
+    var paragroupid: Int = 0
+    var paraverno: Int = 0
+    var syspara: List<SystemParaItemBean>? = null
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/bean/TransdtlRetBean.kt b/app/src/main/java/com/supwisdom/bean/TransdtlRetBean.kt
new file mode 100644
index 0000000..2aded07
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/bean/TransdtlRetBean.kt
@@ -0,0 +1,9 @@
+package com.supwisdom.bean
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+class TransdtlRetBean : BaseResp() {
+    var termseqno: Int = 0
+}
\ 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
new file mode 100644
index 0000000..9297ac8
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/bean/WhiteListItemBean.kt
@@ -0,0 +1,11 @@
+package com.supwisdom.bean
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+class WhiteListItemBean {
+    var cardno: String? = null
+    var flag: Int = 0
+    var balance: Int = 0
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/bean/WhiteListRetBean.kt b/app/src/main/java/com/supwisdom/bean/WhiteListRetBean.kt
new file mode 100644
index 0000000..3ce0ec9
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/bean/WhiteListRetBean.kt
@@ -0,0 +1,11 @@
+package com.supwisdom.bean
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+class WhiteListRetBean : BaseResp() {
+    var cardverno: String? = null
+    var maxcount: Int = 0
+    var whitelist: List<WhiteListItemBean>? = null
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/epaycard/EpayCardlib.kt b/app/src/main/java/com/supwisdom/epaycard/EpayCardlib.kt
index 6c68cb9..65c313d 100644
--- a/app/src/main/java/com/supwisdom/epaycard/EpayCardlib.kt
+++ b/app/src/main/java/com/supwisdom/epaycard/EpayCardlib.kt
@@ -11,10 +11,14 @@
  **/
 class EpayCardlib {
     private var reader = DaliReader()
+    private var hasInit = false
 
     @Throws(CardlibInitError::class)
     fun init() {
-        reader.init()
+        if (!hasInit) {
+            reader.init()
+            hasInit = true
+        }
     }
 
     @Throws(CardNotFoundError::class)
diff --git a/app/src/main/java/com/supwisdom/utils/CommonUtil.kt b/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
index 5891662..ccd03aa 100644
--- a/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
@@ -73,6 +73,10 @@
         (context as Activity).startActivityForResult(intent, 0)
     }
 
+    fun showFormatAmount(preHint: String, amount: Int): String {
+        return String.format("%s: %.02f元", preHint, amount / 100.0f)
+    }
+
     /*优化a811扫码*/
     fun writeLinnuuxParams() {
         try {
diff --git a/app/src/main/java/com/supwisdom/view/DialogPurchase.kt b/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
new file mode 100644
index 0000000..8ae1fc0
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
@@ -0,0 +1,143 @@
+package com.supwisdom.view
+
+import android.content.Context
+import android.graphics.Color
+import android.os.CountDownTimer
+import android.view.KeyEvent
+import android.view.View
+import android.widget.TextView
+import com.supwisdom.R
+import com.supwisdom.activities.consume.bean.CardUserInfoBean
+import com.supwisdom.utils.CommonUtil
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc 消费弹窗
+ **/
+class DialogPurchase constructor(context: Context, callBack: ICallBack) : DialogBase(context) {
+    private val callBack = callBack
+    private var vCount: TextView
+    private var vPayhint: TextView
+    private var vPayamt: TextView
+    private var vBalance: TextView
+    private val waitTime = 60
+    var qrcodePayingNoCancelEnable = false
+    var barcodePaying = false
+
+    init {
+        setContentView(R.layout.dialog_purchase)
+
+        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
+    }
+
+    override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+        if (event.action == KeyEvent.ACTION_DOWN) {
+            if (qrcodePayingNoCancelEnable) {
+                return super.dispatchKeyEvent(event)
+            }
+            when (event.keyCode) {
+                KeyEvent.KEYCODE_DEL -> {
+                    finish(true)
+                }
+            }
+        }
+        return super.dispatchKeyEvent(event)
+    }
+
+    fun showProcess(hint: String, amount: String) {
+        vPayhint.text = hint
+        vPayhint.setTextColor(Color.BLACK)
+        vPayamt.text = amount
+        vPayamt.visibility = View.VISIBLE
+
+        vBalance.visibility = View.GONE
+        show()
+        resetCounter(waitTime)
+    }
+
+    fun showPaySuccess(info: CardUserInfoBean) {
+        vPayhint.text = info.retmsg
+        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
+        }
+        show()
+        resetCounter(info.showtime)
+    }
+
+    fun showPayFail(info: CardUserInfoBean) {
+        vPayhint.text = "消费失败"
+        vPayhint.setTextColor(Color.RED)
+        vPayamt.text = info.retmsg
+        vPayamt.visibility = View.VISIBLE
+        vBalance.visibility = View.GONE
+        show()
+        resetCounter(info.showtime)
+    }
+
+    fun showReverseSuccess(info: CardUserInfoBean) {
+        vPayhint.text = info.retmsg
+        vPayhint.setTextColor(Color.GREEN)
+        vPayamt.text = CommonUtil.showFormatAmount("金额", info.amount)
+        vPayamt.visibility = View.VISIBLE
+        vBalance.visibility = View.GONE
+        show()
+        resetCounter(info.showtime)
+    }
+
+    fun showReverseFail(info: CardUserInfoBean) {
+        vPayhint.text = "冲正失败"
+        vPayhint.setTextColor(Color.RED)
+        vPayamt.text = info.retmsg
+        vPayamt.visibility = View.VISIBLE
+        vBalance.visibility = View.GONE
+        show()
+        resetCounter(info.showtime)
+    }
+
+    private fun finish(isManualCancel: Boolean) {
+        barcodePaying = false
+        qrcodePayingNoCancelEnable = false
+        dismiss()
+        callBack.callback(isManualCancel)
+    }
+
+    private var counter: ConsumeHintCount? = null
+
+    private fun resetCounter(times: Int) {
+        counter?.cancel()
+        counter = ConsumeHintCount((times * 1000).toLong(), 200)
+        counter?.start()
+    }
+
+    private inner class ConsumeHintCount
+    /**
+     * @param millisInFuture    The number of millis in the future from the call
+     * to [.login] until the countdown is done and [.onFinish]
+     * is called.
+     * @param countDownInterval The interval along the way to receive
+     * [.onTick] callbacks.
+     */
+        (millisInFuture: Long, countDownInterval: Long) : CountDownTimer(millisInFuture, countDownInterval) {
+
+        override fun onTick(millisUntilFinished: Long) {
+            vCount.text = "${millisUntilFinished / 1000}s"
+        }
+
+        override fun onFinish() {
+            finish(false)
+        }
+    }
+
+    interface ICallBack {
+        fun callback(isManualCancel: Boolean)
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable-xxhdpi/bar_progress_style.xml b/app/src/main/res/drawable-xxhdpi/bar_progress_style.xml
new file mode 100644
index 0000000..82dcdae
--- /dev/null
+++ b/app/src/main/res/drawable-xxhdpi/bar_progress_style.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <!--  设置背景色（蓝色）  -->
+    <item android:id="@android:id/background">
+        <shape>
+            <corners android:radius="6dp" />
+            <gradient
+                android:endColor="@color/light_gray"
+                android:startColor="@color/light_gray" />
+        </shape>
+    </item>
+
+    <!--  设置进度条颜色（红色）  -->
+    <item android:id="@android:id/progress">
+        <clip>
+            <shape>
+                <corners android:radius="6dp" />
+                <gradient
+                    android:endColor="@color/light_green2"
+                    android:startColor="@color/light_green2" />
+            </shape>
+        </clip>
+    </item>
+</layer-list>
\ No newline at end of file
diff --git a/app/src/main/res/drawable-xxhdpi/numbers/1.png b/app/src/main/res/drawable-xxhdpi/numbers/1.png
new file mode 100644
index 0000000..b1bb49f
--- /dev/null
+++ b/app/src/main/res/drawable-xxhdpi/numbers/1.png
Binary files differ
diff --git a/app/src/main/res/layout/activity_cardlib.xml b/app/src/main/res/layout/activity_cardlib.xml
new file mode 100644
index 0000000..f15e962
--- /dev/null
+++ b/app/src/main/res/layout/activity_cardlib.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    style="@style/head_title_out_style">
+
+    <LinearLayout style="@style/head_title_inner_style">
+
+        <TextView
+            style="@style/head_title_text_style"
+            android:text="欢迎使用智能设备" />
+
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="30dp"
+            android:gravity="center"
+            android:text="加载卡库资源"
+            android:textColor="@color/light_blue2"
+            android:textSize="30sp"
+            android:visibility="visible" />
+
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="10dp"
+            android:gravity="center"
+            android:text="请耐心等待..."
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:textColor="@color/light_blue2"
+            android:textSize="30sp" />
+
+        <ProgressBar
+            android:id="@+id/cardlib_bar"
+            style="?android:attr/progressBarStyleHorizontal"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="10dp"
+            android:layout_marginRight="10dp"
+            android:layout_marginTop="10dp"
+            android:max="100"
+            android:progress="5"
+            android:progressDrawable="@drawable/bar_progress_style" />
+
+        <TextView
+            android:id="@+id/cardlib_result"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="30dp"
+            android:gravity="center"
+            android:text="加载失败:原因"
+            android:textColor="@color/light_blue2"
+            android:textSize="30sp"
+            android:visibility="gone" />
+
+    </LinearLayout>
+
+</LinearLayout>
diff --git a/app/src/main/res/layout/dialog_purchase.xml b/app/src/main/res/layout/dialog_purchase.xml
new file mode 100644
index 0000000..e43ef15
--- /dev/null
+++ b/app/src/main/res/layout/dialog_purchase.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:layout_width="450dp"
+              android:layout_height="300dp"
+              android:background="@color/light_blue2"
+              android:layout_gravity="center"
+              android:orientation="vertical">
+    <RelativeLayout android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:layout_gravity="center"
+                    android:layout_margin="10dp"
+                    android:background="@drawable/corner_bg_white"
+                    android:gravity="center_horizontal"
+                    android:orientation="vertical">
+        <!--倒计时-->
+        <TextView
+                android:id="@+id/tv_close_count"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_marginLeft="15dp"
+                android:layout_marginTop="10dp"
+                android:gravity="start|center"
+                android:text="30s"
+                android:textColor="@color/blue"
+                android:textSize="30sp"/>
+        <LinearLayout
+                style="@style/purchase_ll_text_style"
+                android:layout_below="@+id/tv_close_count">
+
+            <TextView
+                    android:id="@+id/tv_pay_hint"
+                    style="@style/purchase_tv_text_hint_style"
+                    android:text="消费成功"
+                    android:textColor="@color/light_green"/>
+
+            <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:textSize="@dimen/ordinary_consume_text_size"/>
+
+        </LinearLayout>
+    </RelativeLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 7f993f9..d16cba1 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -495,4 +495,17 @@
         <item name="android:layout_marginLeft">10dp</item>
         <item name="android:padding">10dp</item>
     </style>
+    <style name="purchase_ll_text_style">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:layout_marginLeft">80dp</item>
+        <item name="android:layout_marginTop">10dp</item>
+        <item name="android:orientation">vertical</item>
+    </style>
+    <style name="purchase_tv_text_hint_style">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:textSize">50sp</item>
+        <item name="android:textStyle">bold</item>
+    </style>
 </resources>
