init
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>