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 e7a96e8..5ae2b1a 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
@@ -103,7 +103,8 @@
                         else -> {
                             presenter.clickNoPay()
                             amountTxt.text = ""
-                            AuxScreenController.getInstance().refreshContent(Arrays.asList(" 欢迎光临!", " 请刷卡..."))
+                            AuxScreenController.getInstance()
+                                .refreshContent(Arrays.asList(" 欢迎光临!", " 请刷卡..."))
                         }
                     }
                 }
@@ -292,7 +293,8 @@
                 if (amount > 0) {
                     checkAmtToPay(amount)
                 } else {
-                    AuxScreenController.getInstance().refreshContent(Arrays.asList("请先输入金额:", "金额不能为0"))
+                    AuxScreenController.getInstance()
+                        .refreshContent(Arrays.asList("请先输入金额:", "金额不能为0"))
                 }
             }
         }
@@ -390,24 +392,30 @@
         periodFixPayEnable = false
         dialogPurchase?.dismiss()
         pos.getControlPara(PublicDef.CONTROL_FIXAMT)?.also { mode ->
-            when {
-                mode.paraval == PayMode.HOTKEY.desc -> {
+            when (mode.paraval) {
+                PayMode.HOTKEY.desc -> {
                     presenter.setFixMode(false)
                     payMode = PayMode.HOTKEY
                     hotkeyPayMap.clear()
                     hotkeyPayList.clear()
                     pos.getHotkeyPay()?.forEach {
                         hotkeyPayMap[it.key] = it.amount
-                        hotkeyPayList.add(String.format("按键%d - %.02f元", it.key, it.amount / 100.0f))
+                        hotkeyPayList.add(
+                            String.format(
+                                "按键%d - %.02f元",
+                                it.key,
+                                it.amount / 100.0f
+                            )
+                        )
                     }
                     AuxScreenController.getInstance().refreshContent(hotkeyPayList)
                 }
-                mode.paraval == PayMode.PERIODFIX.desc -> {
+                PayMode.PERIODFIX.desc -> {
                     periodFixPayEnable = true
                     periodFixPayList = pos.getPeriodFixPay()
                     parsePeriodFixPay()
                 }
-                mode.paraval == PayMode.NORMAL.desc -> {
+                PayMode.NORMAL.desc -> {
                     doNormalPay()
                 }
                 else -> {
@@ -503,7 +511,8 @@
 
     override fun showConsumeFail(info: CardUserInfoBean) {
         dialogPurchase!!.showPayFail(info)
-        AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("消费失败", "原因:", info.retmsg))
+        AuxScreenController.getInstance()
+            .refreshContent(Arrays.asList<String>("消费失败", "原因:", info.retmsg))
         SoundUtil.playMusic(applicationContext, R.raw.consume_fail)
         refreshRecentDtl(info)
     }
@@ -511,14 +520,20 @@
     override fun showReverseSuc(info: CardUserInfoBean) {
         dialogPurchase!!.showReverseSuccess(info)
         AuxScreenController.getInstance()
-            .refreshContent(Arrays.asList<String>(info.retmsg, CommonUtil.showFormatAmount("金额", info.payamt)))
+            .refreshContent(
+                Arrays.asList<String>(
+                    info.retmsg,
+                    CommonUtil.showFormatAmount("金额", info.payamt)
+                )
+            )
         SoundUtil.playMusic(applicationContext, R.raw.reversal_suc)
         refreshRecentDtl(info)
     }
 
     override fun showReverseFail(info: CardUserInfoBean) {
         dialogPurchase!!.showReverseFail(info)
-        AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("冲正失败", "原因:", info.retmsg))
+        AuxScreenController.getInstance()
+            .refreshContent(Arrays.asList<String>("冲正失败", "原因:", info.retmsg))
         SoundUtil.playMusic(applicationContext, R.raw.reversal_fail)
         refreshRecentDtl(info)
     }
@@ -614,17 +629,32 @@
         when (payMode) {
             PayMode.FIXPAY -> {
                 AuxScreenController.getInstance()
-                    .refreshContent(Arrays.asList("定额付款", CommonUtil.showFormatAmount("金额", inputAmt)))
+                    .refreshContent(
+                        Arrays.asList(
+                            "定额付款",
+                            CommonUtil.showFormatAmount("金额", inputAmt)
+                        )
+                    )
                 showDialogPay(true)
             }
             PayMode.HOTKEY -> {
                 AuxScreenController.getInstance()
-                    .refreshContent(Arrays.asList("热键付款", CommonUtil.showFormatAmount("金额", inputAmt)))
+                    .refreshContent(
+                        Arrays.asList(
+                            "热键付款",
+                            CommonUtil.showFormatAmount("金额", inputAmt)
+                        )
+                    )
                 showDialogPay(false)
             }
             else -> {
                 AuxScreenController.getInstance()
-                    .refreshContent(Arrays.asList("等待付款", CommonUtil.showFormatAmount("金额", inputAmt)))
+                    .refreshContent(
+                        Arrays.asList(
+                            "等待付款",
+                            CommonUtil.showFormatAmount("金额", inputAmt)
+                        )
+                    )
                 showDialogPay(false)
             }
         }
@@ -683,7 +713,8 @@
                 )
             )
         } else {
-            AuxScreenController.getInstance().refreshContent(Arrays.asList("输入金额:", amountTxt.text.toString()))
+            AuxScreenController.getInstance()
+                .refreshContent(Arrays.asList("输入金额:", amountTxt.text.toString()))
         }
     }
 
diff --git a/app/src/main/java/com/supwisdom/view/DialogPurchase.kt b/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
index 44d3c74..d368f60 100644
--- a/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
+++ b/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
@@ -22,9 +22,9 @@
  ** @desc 消费弹窗
  **/
 @Suppress("DEPRECATION")
-class DialogPurchase constructor(context: Context, callBack: ICallBack) : DialogBase(context), IDecoderAcquirer {
+class DialogPurchase constructor(context: Context, private val callBack: ICallBack) :
+    DialogBase(context), IDecoderAcquirer {
     private val TAG = "DialogPurchase"
-    private val callBack = callBack
     private var vCount: TextView
     private var vPayhint: TextView
     private var vPayamt: TextView
@@ -90,7 +90,7 @@
     fun show(hint: String, amount: String) {
         vPayhint.text = hint
         vPayhint.setTextColor(context.resources.getColor(R.color.blue))
-        vPayamt.text = amount
+        vPayamt.text = null//amount
         vPayamt.visibility = View.VISIBLE
 
         vUsername.visibility = View.GONE
@@ -181,7 +181,7 @@
         } else {
             val time = System.currentTimeMillis()
             if (time < lastFixpayDecoderOpenTime ||
-                time - lastFixpayDecoderOpenTime > 120000
+                time - lastFixpayDecoderOpenTime > 60000
             ) {
                 lastFixpayDecoderOpenTime = time
                 try {
@@ -236,7 +236,8 @@
      * @param countDownInterval The interval along the way to receive
      * [.onTick] callbacks.
      */
-        (millisInFuture: Long, countDownInterval: Long) : CountDownTimer(millisInFuture, countDownInterval) {
+        (millisInFuture: Long, countDownInterval: Long) :
+        CountDownTimer(millisInFuture, countDownInterval) {
 
         override fun onTick(millisUntilFinished: Long) {
             vCount.text = "${millisUntilFinished / 1000}s"
