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 cde67f4..4f90429 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
@@ -487,6 +487,11 @@
                 "lock" -> throw CardPayFailError("卡已锁定")
                 else -> throw CardPayFailError("卡状态:${whiteRecord.status}")
             }
+
+            val payamt = pos.getTransdtlOfflineAmt(offRecord.transdate!!, offRecord.cardno!!, offRecord.cardphyid!!)
+            if ((payamt + offRecord.payamt) > sysRecord.maxDayOfflineAmt) {
+                throw CardPayFailError("已离线交易" + String.format("%.02f元", payamt / 100.0f))
+            }
         }
 
         private fun initTransdtlOffline() {
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 cfc459c..d7ced8c 100644
--- a/app/src/main/java/com/supwisdom/activities/manage/ManagePresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/manage/ManagePresenter.kt
@@ -3,7 +3,9 @@
 import android.os.AsyncTask
 import com.supwisdom.activities.SPApplication
 import com.supwisdom.bean.BaseResp
+import com.supwisdom.exception.WhiteListError
 import com.supwisdom.service.EpayApiImpl
+import com.supwisdom.utils.FileUtil
 import com.supwisdom.utils.PublicDef
 
 /**
@@ -53,16 +55,22 @@
     private inner class ClearWhiteList : AsyncTask<Void, Int, BaseResp>() {
         override fun onPostExecute(resp: BaseResp) {
             if (resp.retcode == PublicDef.SUCCESS) {
-                iManageView.showOperResult("黑名单更新成功", "")
+                iManageView.showOperResult("白名单更新成功", "")
             } else {
-                iManageView.showOperResult("黑名单更新失败", resp.retmsg!!)
+                iManageView.showOperResult("白名单更新失败", resp.retmsg!!)
             }
         }
 
         override fun doInBackground(vararg params: Void): BaseResp {
+            if (!pos.clearWhiteList()) {
+                return BaseResp(PublicDef.ERROR, "清空白名单失败")
+            }
+            val dyRecord = pos.getDynamicPara()
+            dyRecord!!.cardverno = "0"
+            pos.replaceDynamicPara(dyRecord)
             return try {
                 EpayApiImpl().downloadWhitelist("0")
-                BaseResp(PublicDef.ERROR, "更新成功")
+                BaseResp(PublicDef.SUCCESS, "更新成功")
             } catch (ex: Exception) {
                 BaseResp(PublicDef.ERROR, ex.message)
             }
@@ -72,13 +80,14 @@
     private inner class OutTransdtl : AsyncTask<Void, Int, BaseResp>() {
         override fun doInBackground(vararg params: Void): BaseResp {
             var num = 0
-//            val bm1List = pos.getTransdtlBM1(null)
-//            if (bm1List != null) {
-//                num += bm1List!!.size
-//                for (i in bm1List!!.indices) {
-//                    FileUtil.writeDtlFile(bm1List!!.get(i).toString())
-//                }
-//            }
+            pos.getTransdtlOnline().forEach {
+                num++
+                FileUtil.writeDtlFile(it.toString())
+            }
+            pos.getTransdtlOffline().forEach {
+                num++
+                FileUtil.writeDtlFile(it.toString())
+            }
             return BaseResp(PublicDef.SUCCESS, "共导出" + num + "笔")
         }
 
diff --git a/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt b/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
index 6cf2a8e..ec0c647 100644
--- a/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
@@ -58,16 +58,17 @@
 //        } else {
 //            kvMap[index++] = ControlParaRecord("长连接使能>>", "启用")
 //        }
-        if (SPApplication.getInstance().isOnline()) {
-            kvMap[index++] = ControlParaRecord("网络状态>>", "联机")
-        } else {
-            kvMap[index++] = ControlParaRecord("网络状态>>", "脱机")
-        }
+//        if (SPApplication.getInstance().isOnline()) {
+//            kvMap[index++] = ControlParaRecord("网络状态>>", "联机")
+//        } else {
+//            kvMap[index++] = ControlParaRecord("网络状态>>", "脱机")
+//        }
         kvMap[index++] = ControlParaRecord("成功显时间>>", "${sysRecord.sucShowtime}s")
         kvMap[index++] = ControlParaRecord("失败显时间>>", "${sysRecord.failShowtime}s")
         kvMap[index++] = ControlParaRecord("联机流水号>>", pos.getTransdtlOnlineMaxSeqno().toString())
         kvMap[index++] = ControlParaRecord("离线流水号>>", pos.getTransdtlOfflineMaxSeqno().toString())
         kvMap[index++] = ControlParaRecord("未上传流水>>", pos.getTransdtlUnconfirmNum().toString())
+        kvMap[index++] = ControlParaRecord("当天离线最大金额>>", String.format("%.02f元", sysRecord.maxDayOfflineAmt / 100.0f))
         kvMap[index++] = ControlParaRecord("定额间隔时间(s)>>", "${sysRecord.fixpayGap}s")
         kvMap[index++] = ControlParaRecord("心跳间隔>>", "${sysRecord.heatBeat}s")
     }
diff --git a/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
index a89d80e..5182e5f 100644
--- a/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
+++ b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
@@ -11,6 +11,7 @@
         heatBeat,
         offlineEnable,
         maxOfflineDays,
+        maxDayOfflineAmt,
         mngpasswd,
         fixpayGap,
         consumeShowtime,
diff --git a/app/src/main/java/com/supwisdom/db/DBParaHelper.kt b/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
index 3617287..d2fd01f 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 = 1
+        private val VERSION = 2
 
         val TABLE_NAME_SYSPARA = "tb_syspara"
         val TABLE_NAME_DYNAMICPARA = "tb_dynamicpara"
@@ -74,6 +74,7 @@
             + BeanPropEnum.Syspara.heatBeat + " integer, "
             + BeanPropEnum.Syspara.offlineEnable + " integer, "
             + BeanPropEnum.Syspara.maxOfflineDays + " integer, "
+            + BeanPropEnum.Syspara.maxDayOfflineAmt + " integer, "
             + BeanPropEnum.Syspara.mngpasswd + " char(6), "
             + BeanPropEnum.Syspara.fixpayGap + " integer, "
             + BeanPropEnum.Syspara.consumeShowtime + " integer, "
@@ -95,6 +96,9 @@
 
     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")
+            }
         }
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/Pos.kt b/app/src/main/java/com/supwisdom/db/Pos.kt
index 0f36600..660f201 100644
--- a/app/src/main/java/com/supwisdom/db/Pos.kt
+++ b/app/src/main/java/com/supwisdom/db/Pos.kt
@@ -149,6 +149,15 @@
         }
     }
 
+    fun clearWhiteList(): Boolean {
+        try {
+            whiteListDao.getLock().lock()
+            return whiteListDao.clear()
+        } finally {
+            whiteListDao.getLock().unlock()
+        }
+    }
+
     fun getTransdtlOnlineMaxSeqno(): Int {
         if (onlMaxSeqno == 0) {
             try {
@@ -170,6 +179,15 @@
         }
     }
 
+    fun getTransdtlOnline(): List<TransdtlOnlineRecord> {
+        try {
+            transdtlOnlineDao.getLock().lock()
+            return transdtlOnlineDao.getAll()
+        } finally {
+            transdtlOnlineDao.getLock().unlock()
+        }
+    }
+
     fun getTransdtlOnlineUnconfirm(): List<TransdtlOnlineRecord> {
         try {
             transdtlOnlineDao.getLock().lock()
@@ -248,6 +266,24 @@
         }
     }
 
+    fun getTransdtlOffline(): List<TransdtlOfflineRecord> {
+        try {
+            transdtlOfflineDao.getLock().lock()
+            return transdtlOfflineDao.getAll()
+        } finally {
+            transdtlOfflineDao.getLock().unlock()
+        }
+    }
+
+    fun getTransdtlOfflineAmt(date: String, cardno: String, cardphyid: String): Int {
+        try {
+            transdtlOfflineDao.getLock().lock()
+            return transdtlOfflineDao.getOfflineAmt(date,cardno,cardphyid)
+        } finally {
+            transdtlOfflineDao.getLock().unlock()
+        }
+    }
+
     fun getTransdtlOfflineLast(): TransdtlOfflineRecord? {
         try {
             transdtlOfflineDao.getLock().lock()
diff --git a/app/src/main/java/com/supwisdom/db/SysParaDao.kt b/app/src/main/java/com/supwisdom/db/SysParaDao.kt
index 14872aa..50de288 100644
--- a/app/src/main/java/com/supwisdom/db/SysParaDao.kt
+++ b/app/src/main/java/com/supwisdom/db/SysParaDao.kt
@@ -47,7 +47,6 @@
         } finally {
             db.endTransaction()
         }
-        return false
     }
 
     fun get(): SysParaRecord? {
@@ -88,6 +87,7 @@
         val enable = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.offlineEnable.toString()))
         record.offlineEnable = enable == 1
         record.maxOfflineDays = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.maxOfflineDays.toString()))
+        record.maxDayOfflineAmt = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.maxDayOfflineAmt.toString()))
         record.mngPasswd = cursor.getString(cursor.getColumnIndex(BeanPropEnum.Syspara.mngpasswd.toString()))
         record.fixpayGap = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.fixpayGap.toString()))
         record.sucShowtime = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.consumeShowtime.toString()))
@@ -108,6 +108,7 @@
             values.put(BeanPropEnum.Syspara.offlineEnable.toString(), 0)
         }
         values.put(BeanPropEnum.Syspara.maxOfflineDays.toString(), record.maxOfflineDays)
+        values.put(BeanPropEnum.Syspara.maxDayOfflineAmt.toString(), record.maxDayOfflineAmt)
         values.put(BeanPropEnum.Syspara.mngpasswd.toString(), record.mngPasswd)
         values.put(BeanPropEnum.Syspara.fixpayGap.toString(), record.fixpayGap)
         values.put(BeanPropEnum.Syspara.consumeShowtime.toString(), record.sucShowtime)
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
index fb9d0c0..8669aa8 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
@@ -56,6 +56,61 @@
         return false
     }
 
+    fun getAll(): List<TransdtlOfflineRecord> {
+        val db = dbHelper.readableDatabase
+        var cursor: Cursor? = null
+        val orderby = BeanPropEnum.TransdtlOffline.devseqno.toString() + " desc"
+        try {
+            cursor = db.query(TABLE, null, null, null, null, null, orderby)
+            val list = ArrayList<TransdtlOfflineRecord>()
+            while (cursor != null && cursor.moveToNext()) {
+                list.add(getRecord(cursor))
+            }
+            return list
+        } finally {
+            cursor?.close()
+        }
+    }
+
+    fun getOfflineAmt(date: String, cardno: String, cardphyid: String): Int {
+        val db = dbHelper.readableDatabase
+        var cursor: Cursor? = null
+        var sql = ("select sum(${BeanPropEnum.TransdtlOffline.payamt}) as sumamt from $TABLE where "
+                + BeanPropEnum.TransdtlOffline.transdate.toString() + "='" + date + "' and "
+                + BeanPropEnum.TransdtlOffline.cardno.toString() + "='" + cardno + "' and "
+                + BeanPropEnum.TransdtlOffline.cardphyid.toString() + "='" + cardphyid + "' and "
+                + BeanPropEnum.TransdtlOffline.reversalflag.toString() + "='" + ReversalFlag.NONE.toString() + "' and "
+                + BeanPropEnum.TransdtlOffline.status.toString() + "='" + PayStatus.SUC.toString() + "'")
+        var sumamt = 0
+        try {
+            cursor = db.rawQuery(sql, null, null)
+            if (cursor != null && cursor.moveToNext()) {
+                sumamt = cursor.getInt(cursor.getColumnIndex("sumamt"))
+            }
+        } finally {
+            cursor?.close()
+        }
+
+        sql = ("select sum(${BeanPropEnum.TransdtlOffline.payamt}) as sumamt from $TABLE where "
+                + BeanPropEnum.TransdtlOffline.transdate.toString() + "='" + date + "' and "
+                + BeanPropEnum.TransdtlOffline.cardno.toString() + "='" + cardno + "' and "
+                + BeanPropEnum.TransdtlOffline.cardphyid.toString() + "='" + cardphyid + "' and "
+                + BeanPropEnum.TransdtlOffline.reversalflag.toString() + "<>'" + ReversalFlag.NONE.toString() + "' and "
+                + BeanPropEnum.TransdtlOffline.status.toString() + "='" + PayStatus.SUC.toString() + "'")
+        try {
+            cursor = db.rawQuery(sql, null, null)
+            if (cursor != null && cursor.moveToNext()) {
+                val reverse = cursor.getInt(cursor.getColumnIndex("sumamt"))
+                if (sumamt > reverse) {
+                    return (sumamt - reverse)
+                }
+            }
+        } finally {
+            cursor?.close()
+        }
+        return 0
+    }
+
     fun getUnconfirm(): List<TransdtlOfflineRecord> {
         val db = dbHelper.readableDatabase
         var cursor: Cursor? = null
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
index 78a4328..0a76b2b 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
@@ -56,6 +56,22 @@
         return false
     }
 
+    fun getAll(): List<TransdtlOnlineRecord> {
+        val db = dbHelper.readableDatabase
+        var cursor: Cursor? = null
+        val orderby = BeanPropEnum.TransdtlOnline.devseqno.toString() + " desc"
+        try {
+            cursor = db.query(TABLE, null, null, null, null, null, orderby)
+            val list = ArrayList<TransdtlOnlineRecord>()
+            while (cursor != null && cursor.moveToNext()) {
+                list.add(getRecord(cursor))
+            }
+            return list
+        } finally {
+            cursor?.close()
+        }
+    }
+
     fun getUnconfirm(): List<TransdtlOnlineRecord> {
         val db = dbHelper.readableDatabase
         var cursor: Cursor? = null
diff --git a/app/src/main/java/com/supwisdom/entity/SysParaRecord.kt b/app/src/main/java/com/supwisdom/entity/SysParaRecord.kt
index 65e1640..8829b75 100644
--- a/app/src/main/java/com/supwisdom/entity/SysParaRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/SysParaRecord.kt
@@ -9,6 +9,7 @@
     var heatBeat: Int = 0// 心跳间隔
     var offlineEnable: Boolean = false // 脱机消费时限开关  false-关闭， true-开启
     var maxOfflineDays: Int = 0// 最大脱机天数
+    var maxDayOfflineAmt: Int = 0//同卡当天离线交易最大金额
     var mngPasswd: String? = null// 维护密码
     var sucShowtime: Int = 0// 消费成功显示时间
     var failShowtime: Int = 0 //消费失败显示时间
diff --git a/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt b/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt
index 347d10a..a471c8f 100644
--- a/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt
@@ -27,4 +27,16 @@
         val tmp = GsonUtil.GsonString(this)
         return GsonUtil.GsonToBean(tmp, TransdtlOfflineRecord::class.java)
     }
+
+    override fun toString(): String {
+        val sb = StringBuilder()
+        sb.append("离线流水:").append("devphyid=").append(devphyid).append(",transdate=").append(transdate)
+            .append(",transtime=").append(transtime).append(",seqno=").append(devseqno).append(",cardno=")
+            .append(cardno).append(",payamt=").append(payamt).append(",extraamt=").append(extraamt)
+            .append(",managefeetype=").append(managefeetype).append(",reversalflag=").append(reversalflag)
+            .append(",reversalseqno=").append(reversalseqno).append(",reversaltransdate=").append(reversaltransdate)
+            .append(",reversaltranstime=").append(reversaltranstime).append(",status=").append(status)
+            .append(",upflag=").append(upflag)
+        return sb.toString()
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt b/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
index 584e629..841ca3a 100644
--- a/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
@@ -29,4 +29,16 @@
         val tmp = GsonUtil.GsonString(this)
         return GsonUtil.GsonToBean(tmp, TransdtlOnlineRecord::class.java)
     }
+
+    override fun toString(): String {
+        val sb = StringBuilder()
+        sb.append("联机流水:").append("devphyid=").append(devphyid).append(",transdate=").append(transdate)
+            .append(",transtime=").append(transtime).append(",seqno=").append(devseqno).append(",cardno=")
+            .append(cardno).append(",code=").append(qrcode).append(",transtype=").append(transtype)
+            .append(",payamt=").append(payamt).append(",extraamt=").append(extraamt).append(",managefeetype")
+            .append(managefeetype).append(",username=").append(username).append(",billno=").append(billno)
+            .append(",reversalflag=").append(reversalflag).append(",reversalbillno=").append(reversalbillno)
+            .append(",status=").append(status).append(",upflag=").append(upflag)
+        return sb.toString()
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
index 0cdffea..75a91ab 100644
--- a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
+++ b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
@@ -105,6 +105,7 @@
                 it.paraname == "manage_passwd" -> record.mngPasswd = it.paraval
                 it.paraname == "offline_flag" -> record.offlineEnable = it.paraval == "1"
                 it.paraname == "max_offline_days" -> record.maxOfflineDays = it.paraval!!.toInt()
+                it.paraname == "max_day_offline_amt" -> record.maxDayOfflineAmt = it.paraval!!.toInt()
                 it.paraname == "communicate_time" -> record.commTime = it.paraval!!.toInt()
             }
         }
@@ -120,6 +121,9 @@
         if (record.commTime == 0) {
             record.commTime = 3
         }
+        if (record.maxDayOfflineAmt == 0) {
+            record.maxDayOfflineAmt = 10000
+        }
         if (!pos.replaceSysPara(record)) {
             throw SysParaError("保存参数失败")
         }
