定额消费
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 aa4194b..c754d51 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
@@ -29,6 +29,7 @@
 import com.supwisdom.view.DialogPurchase
 import java.util.*
 import java.util.concurrent.locks.ReentrantLock
+import kotlin.collections.ArrayList
 
 /**
  ** create by zzq on 2019/7/24
@@ -67,6 +68,7 @@
     private var amount: Int = 0
     private var payMode: PayMode? = null
     private val hotkeyPayMap = hashMapOf<Int, Int>()
+    private val hotkeyPayList = ArrayList<String>()
     private var payWay: String? = null
     private var counter: LastPayShowTimer? = null
     private var lastPayInfo: CardUserInfoBean? = null
@@ -89,14 +91,16 @@
                 if (isPaying) {
                     presenter.clickToInterrupt()
                 } else {
-                    if (payMode == PayMode.FIXPAY) {
-                        checkAmtToPay(amount, true)
-                    } else if (payMode == PayMode.HOTKEY) {
-
-                    } else {
-                        presenter.clickNoPay()
-                        amountTxt.text = ""
-                        AuxScreenController.getInstance().refreshContent(Arrays.asList(" 欢迎光临!", " 请刷卡..."))
+                    when (payMode) {
+                        PayMode.FIXPAY -> checkAmtToPay(amount)
+                        PayMode.HOTKEY -> {
+                            AuxScreenController.getInstance().refreshContent(hotkeyPayList)
+                        }
+                        else -> {
+                            presenter.clickNoPay()
+                            amountTxt.text = ""
+                            AuxScreenController.getInstance().refreshContent(Arrays.asList(" 欢迎光临!", " 请刷卡..."))
+                        }
                     }
                 }
             }
@@ -204,9 +208,14 @@
                 val key = keyCode - KeyEvent.KEYCODE_0
                 if (hotkeyPayMap.containsKey(key)) {
                     amount = hotkeyPayMap[key]!!
-                    checkAmtToPay(amount, false)
+                    checkAmtToPay(amount)
                 }
             }
+            KeyEvent.KEYCODE_DEL -> {
+                //cancel
+                presenter.clickNoPay()
+                AuxScreenController.getInstance().refreshContent(hotkeyPayList)
+            }
             KeyEvent.KEYCODE_DPAD_LEFT -> {
                 //'F1'
                 isBackRuning = true
@@ -273,7 +282,7 @@
             KeyEvent.KEYCODE_ENTER -> {
                 amount = getCurAmount() + addAmount
                 if (amount > 0) {
-                    checkAmtToPay(amount, false)
+                    checkAmtToPay(amount)
                 } else {
                     AuxScreenController.getInstance().refreshContent(Arrays.asList("请先输入金额:", "金额不能为0"))
                 }
@@ -364,19 +373,24 @@
         SPApplication.getInstance().getPos().getControlPara(PublicDef.CONTROL_FIXAMT)?.also { mode ->
             when {
                 mode.paraval == PayMode.HOTKEY.desc -> {
+                    presenter.setFixMode(false)
                     payMode = PayMode.HOTKEY
                     hotkeyPayMap.clear()
+                    hotkeyPayList.clear()
                     SPApplication.getInstance().getPos().getHotkeyPay()?.forEach {
                         hotkeyPayMap[it.key] = it.amount
+                        hotkeyPayList.add(String.format("%d-%.02f", it.key, it.amount / 100.0f))
                     }
                 }
                 mode.paraval == PayMode.NORMAL.desc -> {
+                    presenter.setFixMode(false)
                     payMode = PayMode.NORMAL
                 }
                 else -> {
+                    presenter.setFixMode(true)
                     payMode = PayMode.FIXPAY
                     try {
-                        checkAmtToPay(Integer.parseInt(mode.paraval), true)
+                        checkAmtToPay(Integer.parseInt(mode.paraval))
                     } catch (ex: Exception) {
                         ex.printStackTrace()
                     }
@@ -543,19 +557,28 @@
         }
     }
 
-    private fun checkAmtToPay(inputAmt: Int, isFixPay: Boolean) {
-        if (isFixPay) {
-            AuxScreenController.getInstance()
-                .refreshContent(Arrays.asList("定额付款", CommonUtil.showFormatAmount("金额", inputAmt)))
-        } else {
-            AuxScreenController.getInstance()
-                .refreshContent(Arrays.asList("等待付款", CommonUtil.showFormatAmount("金额", inputAmt)))
-        }
+    private fun checkAmtToPay(inputAmt: Int) {
         amount = inputAmt
         amountTxt.text = String.format("%.02f", inputAmt / 100.0f)
         payStatusEnable = true
         presenter.clickToPay(inputAmt)
-        showDialogPay(isFixPay)
+        when (payMode) {
+            PayMode.FIXPAY -> {
+                AuxScreenController.getInstance()
+                    .refreshContent(Arrays.asList("定额付款", CommonUtil.showFormatAmount("金额", inputAmt)))
+                showDialogPay(true)
+            }
+            PayMode.HOTKEY -> {
+                AuxScreenController.getInstance()
+                    .refreshContent(Arrays.asList("热键付款", CommonUtil.showFormatAmount("金额", inputAmt)))
+                showDialogPay(false)
+            }
+            else -> {
+                AuxScreenController.getInstance()
+                    .refreshContent(Arrays.asList("等待付款", CommonUtil.showFormatAmount("金额", inputAmt)))
+                showDialogPay(false)
+            }
+        }
     }
 
     private fun showDialogPay(isFixPay: Boolean) {
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 f4fdfad..43b5ed2 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumePresenter.kt
@@ -32,7 +32,7 @@
     init {
         createHandler()
         cardPayService = CardPayService(iConsumeView, handler)
-        codePayService = CodePayService(iConsumeView, handler)
+        codePayService = CodePayService(handler)
     }
 
     private fun createHandler() {
@@ -91,6 +91,11 @@
         cardPayService.clickToInterrupt()
     }
 
+    fun setFixMode(isFixMode: Boolean) {
+        cardPayService.isFixMode = isFixMode
+        codePayService.isFixMode = isFixMode
+    }
+
     fun codeToPay(code: String, amount: Int) {
         this.code = code
         this.amount = amount
diff --git a/app/src/main/java/com/supwisdom/activities/consume/bean/LastPayBean.kt b/app/src/main/java/com/supwisdom/activities/consume/bean/LastPayBean.kt
new file mode 100644
index 0000000..5da0ba9
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/consume/bean/LastPayBean.kt
@@ -0,0 +1,11 @@
+package com.supwisdom.activities.consume.bean
+
+/**
+ ** create by zzq on 2019/9/16
+ ** @desc
+ **/
+class LastPayBean {
+    var cardphyid: String? = null
+    var code: String? = null
+    var suctime: Long = 0 //ms
+}
\ 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 4f90429..4b39eea 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
@@ -20,10 +20,8 @@
  ** create by zzq on 2019/7/25
  ** @desc 刷卡消费
  **/
-class CardPayService constructor(iConsumeView: IConsumeView, handler: Handler) {
+class CardPayService constructor(private val iConsumeView: IConsumeView, private val handler: Handler) {
     private val TAG = "CardPayService"
-    private val iConsumeView = iConsumeView
-    private val handler = handler
     private val pos = SPApplication.getInstance().getPos()
     private val runnable = CardPayRunnable()
     private val consumeApi = ConsumeApi()
@@ -35,8 +33,13 @@
     private var amount: Int = 0
     @Volatile
     private var payQueryConfirm = false
+    var isFixMode = false
     private var thread: Thread? = null
     private var cardBean: CardBean? = null
+    /**
+     * 防止定额连续消费
+     */
+    private var lastPayBean = LastPayBean()
 
     fun start() {
         isExist = false
@@ -210,6 +213,13 @@
         }
 
         private fun doConsume() {
+            if (isFixMode) {
+                if (lastPayBean.cardphyid == cardBean!!.cardphyid) {
+                    if (System.currentTimeMillis() - lastPayBean.suctime < 15000) {
+                        throw CardPayFailError("15s内不能连续消费")
+                    }
+                }
+            }
             sendMsg(PublicDef.MSG_CARD_PAYING, "正在扣款...")
             if (SPApplication.getInstance().isOnline()) {
                 if (!doOnlineConsume()) {
@@ -531,6 +541,8 @@
         }
 
         private fun showOnlSucInfo() {
+            lastPayBean.cardphyid = cardBean!!.cardphyid
+            lastPayBean.suctime = System.currentTimeMillis()
             val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
             info.showtime = pos.getSysPara()!!.sucShowtime
             info.amount = onlRecord.payamt
@@ -546,6 +558,8 @@
         }
 
         private fun showOffSucInfo() {
+            lastPayBean.cardphyid = cardBean!!.cardphyid
+            lastPayBean.suctime = System.currentTimeMillis()
             val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
             info.showtime = pos.getSysPara()!!.sucShowtime
             info.amount = offRecord.payamt
diff --git a/app/src/main/java/com/supwisdom/activities/consume/mode/CodePayService.kt b/app/src/main/java/com/supwisdom/activities/consume/mode/CodePayService.kt
index 08b68c1..eb076ea 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/mode/CodePayService.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/mode/CodePayService.kt
@@ -3,10 +3,10 @@
 import android.os.Handler
 import android.os.Message
 import com.supwisdom.activities.SPApplication
-import com.supwisdom.activities.consume.IConsumeView
 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.LastPayBean
 import com.supwisdom.entity.PayStatus
 import com.supwisdom.entity.ReversalFlag
 import com.supwisdom.entity.TransdtlOnlineRecord
@@ -14,16 +14,13 @@
 import com.supwisdom.okhttp.TransResp
 import com.supwisdom.utils.*
 import org.apache.http.HttpStatus
-import java.lang.Exception
 
 /**
  ** create by zzq on 2019/7/30
  ** @desc 二维码消费
  **/
-class CodePayService constructor(iConsumeView: IConsumeView, handler: Handler) {
+class CodePayService constructor(private val handler: Handler) {
     private val TAG = "CodePayService"
-    private val iConsumeView = iConsumeView
-    private val handler = handler
     private val pos = SPApplication.getInstance().getPos()
     private lateinit var codeRecord: TransdtlOnlineRecord
     private val consumeApi = ConsumeApi()
@@ -35,6 +32,8 @@
     private var interruptedPay: Boolean = false
     @Volatile
     private var amount = 0
+    var isFixMode = false
+    private val lastPayBean = LastPayBean()
 
     fun interruptPay() {
         interruptedPay = true
@@ -44,6 +43,13 @@
         this.amount = amount
         interruptedPay = false
         try {
+            if (isFixMode) {
+                if (lastPayBean.code == code) {
+                    if (System.currentTimeMillis() - lastPayBean.suctime < 15000) {
+                        throw CardPayFailError("15s内不能连续消费")
+                    }
+                }
+            }
             initTransdtlOnline(code, amount)
             var resp = consumeApi.payInit(codeRecord)
             parseInitResult(resp)
@@ -178,6 +184,8 @@
     }
 
     private fun showSucInfo() {
+        lastPayBean.code = codeRecord.qrcode
+        lastPayBean.suctime = System.currentTimeMillis()
         val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
         info.showtime = pos.getSysPara()!!.sucShowtime
         info.amount = codeRecord.payamt
diff --git a/app/src/main/java/com/supwisdom/view/DialogPurchase.kt b/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
index a03f510..fa71710 100644
--- a/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
+++ b/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
@@ -1,6 +1,7 @@
 package com.supwisdom.view
 
 import android.content.Context
+import android.content.Intent
 import android.graphics.Color
 import android.os.CountDownTimer
 import android.view.KeyEvent
@@ -11,6 +12,8 @@
 import com.newcapec.zxinglib.PosDecoder
 import com.supwisdom.R
 import com.supwisdom.activities.consume.bean.CardUserInfoBean
+import com.supwisdom.activities.menu.MenuActivity
+import com.supwisdom.activities.transdtl.TransdtlActivity
 import com.supwisdom.utils.CommonUtil
 import com.supwisdom.utils.LogUtil
 
@@ -73,11 +76,17 @@
                         finish(isManualCancel = true, isPaying = false)
                     }
                 }
+                KeyEvent.KEYCODE_DPAD_LEFT -> jumpActivity(MenuActivity::class.java)
+                KeyEvent.KEYCODE_DPAD_RIGHT -> jumpActivity(TransdtlActivity::class.java)
             }
         }
         return super.dispatchKeyEvent(event)
     }
 
+    private fun <T> jumpActivity(cls: Class<T>) {
+        context.startActivity(Intent(context, cls))
+    }
+
     fun show(hint: String, amount: String) {
         vPayhint.text = hint
         vPayhint.setTextColor(context.resources.getColor(R.color.blue))