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 05a0365..77ba654 100644
--- a/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt
@@ -96,7 +96,7 @@
 
             try {
                 sendMessage(LOAD_PROGRESS, "加载白名单...")
-                apiInterface.downloadWhitelist(bean.cardverno!!)
+                apiInterface.downloadWhitelist(bean.whitelistid, bean.cardverno!!)
                 sendMessage(LOAD_DONE, "加载白名单成功")
             } catch (ex: Exception) {
                 sendMessage(LOAD_DONE, "加载白名单失败:${ex.message}")
diff --git a/app/src/main/java/com/supwisdom/activities/manage/ManagePresenter.kt b/app/src/main/java/com/supwisdom/activities/manage/ManagePresenter.kt
index d7ced8c..681d57d 100644
--- a/app/src/main/java/com/supwisdom/activities/manage/ManagePresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/manage/ManagePresenter.kt
@@ -69,7 +69,7 @@
             dyRecord!!.cardverno = "0"
             pos.replaceDynamicPara(dyRecord)
             return try {
-                EpayApiImpl().downloadWhitelist("0")
+                EpayApiImpl().downloadWhitelist(dyRecord.whitelistid, "0")
                 BaseResp(PublicDef.SUCCESS, "更新成功")
             } catch (ex: Exception) {
                 BaseResp(PublicDef.ERROR, ex.message)
diff --git a/app/src/main/java/com/supwisdom/bean/AuthRetBean.kt b/app/src/main/java/com/supwisdom/bean/AuthRetBean.kt
index b488ac6..560f8fd 100644
--- a/app/src/main/java/com/supwisdom/bean/AuthRetBean.kt
+++ b/app/src/main/java/com/supwisdom/bean/AuthRetBean.kt
@@ -12,5 +12,6 @@
     var offlineseqno: Int = 0
     var paraverno: Int = 0
     var paragroupid: Int = 0
+    var whitelistid: Int = 0
     var cardverno: String? = null
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/service/APIInterface.kt b/app/src/main/java/com/supwisdom/service/APIInterface.kt
index b24df22..4c970a2 100644
--- a/app/src/main/java/com/supwisdom/service/APIInterface.kt
+++ b/app/src/main/java/com/supwisdom/service/APIInterface.kt
@@ -14,7 +14,7 @@
 
     fun downloadSyspara(paragroupid: Int, paraverno: Int)
 
-    fun downloadWhitelist(maxCardverno: String)
+    fun downloadWhitelist(whitelistid: Int, maxCardverno: String)
 
     fun uploadTransdtl(record: TransdtlOnlineRecord)
 
diff --git a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
index e523f80..8b359b0 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()
-        var cardverno = dyRecord!!.cardverno ?: "0"
+        val cardverno = dyRecord!!.cardverno ?: "0"
         val params = WebParams()
         params.setParameter("devphyid", pos.getConfigPara()!!.devphyid)
             .setParameter("termdate", DateUtil.getNowDateNoFormat())
@@ -55,23 +55,11 @@
                 throw HeartBeatError(ex.message ?: "null")
             }
         }
-        /**
-         * 白名单组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!!) {
+        if (dyRecord.whitelistid != retBean.whitelistid ||
+            cardverno < retBean.cardverno!!
+        ) {
             try {
-                downloadWhitelist(retBean.cardverno!!)
+                downloadWhitelist(retBean.whitelistid, retBean.cardverno!!)
             } catch (ex: WhiteListError) {
                 throw HeartBeatError(ex.message ?: "null")
             }
@@ -150,7 +138,21 @@
     }
 
     @Throws(WhiteListError::class)
-    override fun downloadWhitelist(maxCardverno: String) {
+    override fun downloadWhitelist(whitelistid: Int, maxCardverno: String) {
+        var dyRecord = pos.getDynamicPara()
+        /**
+         * 白名单组ID变化清空本地白名单重新下载
+         */
+        if (dyRecord!!.whitelistid != whitelistid) {
+            if (!pos.clearWhiteList()) {
+                throw WhiteListError("清空白名单失败")
+            }
+            dyRecord.cardverno = "0"
+            dyRecord.whitelistid = whitelistid
+            if (!pos.replaceDynamicPara(dyRecord)) {
+                throw WhiteListError("保存参数失败")
+            }
+        }
         val maxcount = 20
         do {
             val params = WebParams()
@@ -185,7 +187,7 @@
             if (!pos.saveWhiteList(list)) {
                 throw WhiteListError("保存白名单失败")
             }
-            val dyRecord = pos.getDynamicPara()
+            dyRecord = pos.getDynamicPara()
             dyRecord!!.cardverno = retBean.cardverno
             if (!pos.replaceDynamicPara(dyRecord)) {
                 throw WhiteListError("保存参数失败")
