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 7e5660b..160dfe3 100644
--- a/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
@@ -45,9 +45,9 @@
         kvMap[index++] = ControlParaRecord("服务器标识>>", cfgRecord.epayUri!!)
         kvMap[index++] = ControlParaRecord("服务器端口>>", "" + cfgRecord.epayPort)
         kvMap[index++] =
-            ControlParaRecord("参数版本号>>", "no:" + dyRecord!!.paraverno + ",id:" + dyRecord.paragroupid)
+            ControlParaRecord("参数版本号>>", "no:${dyRecord!!.paraverno},id:${dyRecord.paragroupid}")
         kvMap[index++] = ControlParaRecord("白名单版本>>", dyRecord.cardverno!!)
-        kvMap[index++] = ControlParaRecord("通讯超时>>", String.format("%ds", CommonUtil.getCommunicateTime()))
+        kvMap[index++] = ControlParaRecord("通讯超时>>", "${CommonUtil.getCommunicateTime()}s")
         if (sysRecord!!.returnFlag and 0x1 == 1) {
             kvMap[index++] = ControlParaRecord("冲正使能>>", "启用")
         } else {
@@ -63,17 +63,12 @@
         } else {
             kvMap[index++] = ControlParaRecord("网络状态>>", "脱机")
         }
-        kvMap[index++] = ControlParaRecord("成功显时间>>", String.format("%ds", sysRecord.sucShowtime))
-        kvMap[index++] = ControlParaRecord("失败显时间>>", String.format("%ds", sysRecord.failShowtime))
-        kvMap[index++] = ControlParaRecord("联机流水号>>", String.format("%d", pos.getTransdtlOnlineMaxSeqno()))
-        kvMap[index++] = ControlParaRecord("离线流水号>>", String.format("%d", pos.getTransdtlOfflineMaxSeqno()))
-        kvMap[index++] = ControlParaRecord(
-            "未上传流水>>", String.format(
-                "%d", pos.getTransdtlOnlineUnconfirm()
-                        + pos.getTransdtlOfflineUnconfirm()
-            )
-        )
-        kvMap[index++] = ControlParaRecord("定额间隔时间(s)>>", "" + sysRecord.fixpayGap)
+        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("定额间隔时间(s)>>", "${sysRecord.fixpayGap}s")
         kvMap[index++] = ControlParaRecord("心跳间隔>>", "${sysRecord.heatBeat}s")
     }
 
diff --git a/app/src/main/java/com/supwisdom/db/Pos.kt b/app/src/main/java/com/supwisdom/db/Pos.kt
index d545378..0f36600 100644
--- a/app/src/main/java/com/supwisdom/db/Pos.kt
+++ b/app/src/main/java/com/supwisdom/db/Pos.kt
@@ -179,6 +179,23 @@
         }
     }
 
+    fun getTransdtlUnconfirmNum(): Int {
+        var num = 0
+        try {
+            transdtlOnlineDao.getLock().lock()
+            num += transdtlOnlineDao.getUnconfirmNum()
+        } finally {
+            transdtlOnlineDao.getLock().unlock()
+        }
+        try {
+            transdtlOfflineDao.getLock().lock()
+            num += transdtlOfflineDao.getUnconfirmNum()
+        } finally {
+            transdtlOfflineDao.getLock().unlock()
+        }
+        return num
+    }
+
     fun saveTransdtlOnline(record: TransdtlOnlineRecord): Boolean {
         try {
             transdtlOnlineDao.getLock().lock()
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
index 10d2238..fb9d0c0 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
@@ -87,6 +87,24 @@
         return 0
     }
 
+    fun getUnconfirmNum(): Int {
+        val db = dbHelper.readableDatabase
+        var cursor: Cursor? = null
+        val sql = ("select COUNT("
+                + BeanPropEnum.TransdtlOffline.devseqno
+                + ") as num from " + TABLE
+                + " where " + BeanPropEnum.TransdtlOffline.upflag + "=0")
+        try {
+            cursor = db.rawQuery(sql, null)
+            if (cursor != null && cursor.moveToNext()) {
+                return cursor.getInt(cursor.getColumnIndex("num"))
+            }
+        } finally {
+            cursor?.close()
+        }
+        return 0
+    }
+
     fun clear(): Boolean {
         val db = dbHelper.writableDatabase
         try {
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
index d4f2903..78a4328 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
@@ -87,6 +87,24 @@
         }
     }
 
+    fun getUnconfirmNum(): Int {
+        val db = dbHelper.readableDatabase
+        var cursor: Cursor? = null
+        val sql = ("select COUNT("
+                + BeanPropEnum.TransdtlOnline.devseqno
+                + ") as num from " + TABLE
+                + " where " + BeanPropEnum.TransdtlOnline.upflag + "=0")
+        try {
+            cursor = db.rawQuery(sql, null)
+            if (cursor != null && cursor.moveToNext()) {
+                return cursor.getInt(cursor.getColumnIndex("num"))
+            }
+        } finally {
+            cursor?.close()
+        }
+        return 0
+    }
+
     fun getMaxSeqno(): Int {
         val db = dbHelper.readableDatabase
         val sql = ("select max(${BeanPropEnum.TransdtlOnline.devseqno}) as seqno from $TABLE")
