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 c754d51..7febabd 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
@@ -379,8 +379,9 @@
                     hotkeyPayList.clear()
                     SPApplication.getInstance().getPos().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.NORMAL.desc -> {
                     presenter.setFixMode(false)
diff --git a/app/src/main/java/com/supwisdom/activities/consumeMode/ConsumeModeActivity.kt b/app/src/main/java/com/supwisdom/activities/consumeMode/ConsumeModeActivity.kt
index a31c8ef..3daaf82 100644
--- a/app/src/main/java/com/supwisdom/activities/consumeMode/ConsumeModeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consumeMode/ConsumeModeActivity.kt
@@ -53,9 +53,16 @@
             val item = View.inflate(this, R.layout.item_hotkey_pay, null)
             item.findViewById<TextView>(R.id.tv_hot_del).setOnClickListener {
                 llHotList.removeView(item)
+                for (loop in 0 until llHotList.childCount) {
+                    val item = llHotList.getChildAt(loop)
+                    val key = item.findViewById<TextView>(R.id.tv_hot_key)
+                    key.text = "${(loop + 1)}"
+                }
             }
             val key = item.findViewById<TextView>(R.id.tv_hot_key)
             key.text = "${llHotList.childCount + 1}"
+            val amt = item.findViewById<TextView>(R.id.tv_hot_amount)
+            amt.text = String.format("%.02f", it.amount / 100.0f)
             llHotList.addView(item)
         }
     }
@@ -299,7 +306,7 @@
     }
 
     private fun screenShowAmt() {
-        AuxScreenController.getInstance().refreshTitle("消费模式设置   F1-热键")
+        AuxScreenController.getInstance().refreshTitle("消费模式设置       F1-热键模式")
         AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
         AuxScreenController.getInstance().refreshContent(
             Arrays.asList<String>(
diff --git a/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt b/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt
index f6d0578..05a0365 100644
--- a/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt
@@ -29,7 +29,7 @@
     private val LOAD_SUCCESS = 1
     private val JUMP_TO_UNREGISTER = 2
     private val LOAD_PROGRESS = 3
-    private val LOAD_DONE = 3
+    private val LOAD_DONE = 4
 
     private var hasInit: Boolean = false
     @Volatile
diff --git a/app/src/main/java/com/supwisdom/bean/HeartBeatRetBean.kt b/app/src/main/java/com/supwisdom/bean/HeartBeatRetBean.kt
index 2c68992..da5a8f2 100644
--- a/app/src/main/java/com/supwisdom/bean/HeartBeatRetBean.kt
+++ b/app/src/main/java/com/supwisdom/bean/HeartBeatRetBean.kt
@@ -9,4 +9,5 @@
     var paragroupid: Int = 0
     var paraverno: Int = 0
     var cardverno: String? = null
+    var whitelistid: Int = 0
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
index f94037d..1c90e59 100644
--- a/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
+++ b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
@@ -42,6 +42,7 @@
         offlineseqno,
         paraverno,
         paragroupid,
+        whitelistid,
         cardverno,
         jwt,
         jwtexpire,
diff --git a/app/src/main/java/com/supwisdom/db/DBParaHelper.kt b/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
index c8e37aa..4862731 100644
--- a/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
+++ b/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
@@ -13,7 +13,7 @@
 class DBParaHelper private constructor(context: Context) : SQLiteOpenHelper(context, DB_NAME, null, VERSION) {
     companion object {
         private val DB_NAME = "db_para"
-        private val VERSION = 3
+        private val VERSION = 1
 
         val TABLE_NAME_SYSPARA = "tb_syspara"
         val TABLE_NAME_DYNAMICPARA = "tb_dynamicpara"
@@ -67,6 +67,7 @@
             + BeanPropEnum.DynamicPara.offlineseqno + " integer, "
             + BeanPropEnum.DynamicPara.paraverno + " integer, "
             + BeanPropEnum.DynamicPara.paragroupid + " integer, "
+            + BeanPropEnum.DynamicPara.whitelistid + " integer, "
             + BeanPropEnum.DynamicPara.cardverno + " varchar(32),"
             + BeanPropEnum.DynamicPara.jwt + " varchar(254),"
             + BeanPropEnum.DynamicPara.jwtexpire + " varchar(16),"
@@ -103,10 +104,7 @@
     override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
         if (oldVersion < newVersion) {
             if (oldVersion < 2 && newVersion >= 2) {
-                db.execSQL("alter table $TABLE_NAME_SYSPARA add column ${BeanPropEnum.Syspara.maxDayOfflineAmt} integer")
-            }
-            if (oldVersion < 3 && newVersion >= 3) {
-                db.execSQL(CREATE_TABLE_NAME_HOTKEY)
+//                db.execSQL("alter table $TABLE_NAME_SYSPARA add column ${BeanPropEnum.Syspara.maxDayOfflineAmt} integer")
             }
         }
     }
diff --git a/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt b/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt
index 5c6b0fb..a0fc815 100644
--- a/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt
+++ b/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt
@@ -91,6 +91,7 @@
         record.offlineseqno = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.offlineseqno.toString()))
         record.paraverno = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.paraverno.toString()))
         record.paragroupid = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.paragroupid.toString()))
+        record.whitelistid = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.whitelistid.toString()))
         record.cardverno = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.cardverno.toString()))
         record.jwt = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.jwt.toString()))
         record.jwtExpire = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.jwtexpire.toString()))
@@ -110,6 +111,7 @@
         values.put(BeanPropEnum.DynamicPara.offlineseqno.toString(), record.offlineseqno)
         values.put(BeanPropEnum.DynamicPara.paraverno.toString(), record.paraverno)
         values.put(BeanPropEnum.DynamicPara.paragroupid.toString(), record.paragroupid)
+        values.put(BeanPropEnum.DynamicPara.whitelistid.toString(), record.whitelistid)
         values.put(BeanPropEnum.DynamicPara.cardverno.toString(), record.cardverno)
         values.put(BeanPropEnum.DynamicPara.jwt.toString(), record.jwt)
         values.put(BeanPropEnum.DynamicPara.token.toString(), record.token)
diff --git a/app/src/main/java/com/supwisdom/entity/DynamicParaRecord.kt b/app/src/main/java/com/supwisdom/entity/DynamicParaRecord.kt
index bee1dbe..9780e62 100644
--- a/app/src/main/java/com/supwisdom/entity/DynamicParaRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/DynamicParaRecord.kt
@@ -12,6 +12,7 @@
     var shopname: String? = null //商户名
     var paraverno: Int = 0//参数版本
     var paragroupid: Int = 0//参数组id
+    var whitelistid: Int = 0 //白名单组id
     var onlineseqno: Int = 0 //后台最大联机流水号
     var offlineseqno: Int = 0 //后台最大离线流水号
     var cardverno: String? = null // 黑名单版本号 12byte
diff --git a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
index 75a91ab..e523f80 100644
--- a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
+++ b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
@@ -27,7 +27,7 @@
     @Throws(HeartBeatError::class)
     override fun heartBeat() {
         val dyRecord = pos.getDynamicPara()
-        val cardverno = dyRecord!!.cardverno ?: "0"
+        var cardverno = dyRecord!!.cardverno ?: "0"
         val params = WebParams()
         params.setParameter("devphyid", pos.getConfigPara()!!.devphyid)
             .setParameter("termdate", DateUtil.getNowDateNoFormat())
@@ -48,13 +48,6 @@
         if (retBean.retcode != PublicDef.SUCCESS) {
             throw HeartBeatError(retBean.getErrorMsg())
         }
-        if (cardverno < retBean.cardverno!!) {
-            try {
-                downloadWhitelist(retBean.cardverno!!)
-            } catch (ex: WhiteListError) {
-                throw HeartBeatError(ex.message ?: "null")
-            }
-        }
         if (dyRecord.paraverno != retBean.paraverno) {
             try {
                 downloadSyspara(retBean.paragroupid, retBean.paraverno)
@@ -63,6 +56,27 @@
             }
         }
         /**
+         * 白名单组ID变化清空本地白名单重新下载
+         */
+        if (dyRecord.whitelistid != retBean.whitelistid) {
+            if (!pos.clearWhiteList()) {
+                throw HeartBeatError("清空白名单失败")
+            }
+            val dyRecord = pos.getDynamicPara()
+            dyRecord!!.whitelistid = retBean.whitelistid
+            if (!pos.replaceDynamicPara(dyRecord)) {
+                throw HeartBeatError("保存参数失败")
+            }
+            cardverno = "0"
+        }
+        if (cardverno < retBean.cardverno!!) {
+            try {
+                downloadWhitelist(retBean.cardverno!!)
+            } catch (ex: WhiteListError) {
+                throw HeartBeatError(ex.message ?: "null")
+            }
+        }
+        /**
          * 时钟校准
          */
         NtpClient().startCalibrateTime(retBean.systime!!)
@@ -127,6 +141,12 @@
         if (!pos.replaceSysPara(record)) {
             throw SysParaError("保存参数失败")
         }
+        val dyRecord = pos.getDynamicPara()
+        dyRecord!!.paraverno = paraverno
+        dyRecord.paragroupid = paragroupid
+        if (!pos.replaceDynamicPara(dyRecord)) {
+            throw SysParaError("保存参数失败")
+        }
     }
 
     @Throws(WhiteListError::class)
