diff --git a/app/build.gradle b/app/build.gradle
index cded1af..7e3ad3d 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,7 +8,7 @@
 android {
     compileSdkVersion 28
     defaultConfig {
-        applicationId "com.supwisdom.posa711dali"
+        applicationId "com.supwisdom.posa711"
         minSdkVersion 22
         targetSdkVersion 28
         versionCode 1
diff --git a/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt b/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt
index ea4b1c3..c6119a2 100644
--- a/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt
@@ -23,6 +23,7 @@
  **/
 @Suppress("DEPRECATION")
 class CardlibActivity : BaseActivity(), ICardlibView {
+    private val pos = SPApplication.getInstance().getPos()
     private var vResult: TextView? = null
     private var vProgressBar: ProgressBar? = null
     private var presenter: CardlibPresenter? = null
@@ -59,7 +60,7 @@
         if (!isLoading) {
             isLoading = true
             refresh()
-            presenter!!.doInitCardlib(this)
+            presenter!!.initCardlib(this)
         }
     }
 
@@ -85,16 +86,12 @@
 
     override fun showInitCardlibResult(issuccess: Boolean, msg: String) {
         if (issuccess) {
-            val ctlRecord = SPApplication.getInstance().getPos().getControlPara(PublicDef.CONTROL_HAS_REGISTER)
-            if (ctlRecord == null) {
-                jumpActivity(InitActivity::class.java)
+            pos.getControlPara(PublicDef.CONTROL_HAS_REGISTER) ?: jumpActivity(InitActivity::class.java)
+            val record = pos.getConfigPara()
+            if (record != null && record.initOK) {
+                jumpActivity(LoadActivity::class.java)
             } else {
-                val record = SPApplication.getInstance().getPos().getConfigPara()
-                if (record != null && record.initOK) {
-                    jumpActivity(LoadActivity::class.java)
-                } else {
-                    jumpActivity(InitActivity::class.java)
-                }
+                jumpActivity(InitActivity::class.java)
             }
         } else {
             vResult!!.text = msg
diff --git a/app/src/main/java/com/supwisdom/activities/cardlib/CardlibPresenter.kt b/app/src/main/java/com/supwisdom/activities/cardlib/CardlibPresenter.kt
index 241072e..d843183 100644
--- a/app/src/main/java/com/supwisdom/activities/cardlib/CardlibPresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/cardlib/CardlibPresenter.kt
@@ -38,7 +38,7 @@
         }
     }
 
-    fun doInitCardlib(acy: Activity) {
+    fun initCardlib(acy: Activity) {
         doProgressBar()
         AsyncInitCardlib().execute(acy)
     }
@@ -68,7 +68,7 @@
         ThreadPool.getShortPool().execute(Runnable {
             var i = 0
             while (cardlibStat == CardLibStatus.INIT) {
-                CommonUtil.doSleep(500)
+                CommonUtil.doSleep(100)
                 i++
                 if (i > 100) {
                     i = 100
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 47c6bdc..56a216d 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
@@ -56,6 +56,7 @@
     @Volatile
     private var isBackRuning = false
     private var addAmount: Int = 0
+    @Volatile
     private var amount: Int = 0
     private var counter: LastPayShowTimer? = null
     private var lastPayInfo: CardUserInfoBean? = null
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 29b489c..4534f7e 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
@@ -373,7 +373,7 @@
 
         private fun getErrorInfo(errmsg: String?): CardUserInfoBean {
             val info = CardUserInfoBean(PublicDef.ERROR, errmsg ?: "null")
-            info.showtime = pos.getSysPara()!!.consumeFailShowtime
+            info.showtime = pos.getSysPara()!!.failShowtime
             return info
         }
 
diff --git a/app/src/main/java/com/supwisdom/activities/init/InitActivity.kt b/app/src/main/java/com/supwisdom/activities/init/InitActivity.kt
index c8785d0..eee106f 100644
--- a/app/src/main/java/com/supwisdom/activities/init/InitActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/init/InitActivity.kt
@@ -43,7 +43,6 @@
     private lateinit var vRadioDepositMode: RadioButton
     private lateinit var vRadioThirdPayMode: RadioButton
     private lateinit var vRadioThirdLoginMode: RadioButton
-    private lateinit var vRadioGateMode: RadioButton
     private var nsdClient: NsdClient? = null
     private var nsdServiceIp: String? = null
     private var nsdServicePort: Int = 0
@@ -71,7 +70,7 @@
         }
         record.initOK = false
         pos.replaceConfigPara(record)
-        val cfgRecord = pos.getConfigPara()!!
+        val cfgRecord = pos.getConfigPara()
 
 //        when {
 //            cfgRecord.mode == PublicDef.TERMINAL_DEPOSIT_MODE -> vRadioDepositMode.isChecked = true
@@ -80,7 +79,7 @@
 //            cfgRecord.mode == PublicDef.TERMINAL_THIRD_LOGIN_MODE -> vRadioThirdLoginMode.isChecked = true
 //            else -> vRadioPayMode.isChecked = true
 //        }
-        vDevphyid.setText(cfgRecord.devphyid)
+        vDevphyid.setText(cfgRecord!!.devphyid)
         vServerIp.setText(cfgRecord.epayIP)
         vUri.setText(cfgRecord.epayUri)
         vPort.setText(cfgRecord.epayPort.toString())
diff --git a/app/src/main/java/com/supwisdom/activities/load/LoadActivity.kt b/app/src/main/java/com/supwisdom/activities/load/LoadActivity.kt
index dccbe29..7bd5b13 100644
--- a/app/src/main/java/com/supwisdom/activities/load/LoadActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/load/LoadActivity.kt
@@ -8,12 +8,11 @@
 import android.widget.Toast
 import com.supwisdom.R
 import com.supwisdom.activities.BaseActivity
-import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.consume.ConsumeActivity
 import com.supwisdom.activities.unregister.UnregisterActivity
 import com.supwisdom.auxscreen.AuxScreenController
 import com.supwisdom.utils.DateUtil
-import java.lang.StringBuilder
-import java.util.ArrayList
+import java.util.*
 
 /**
  ** create by zzq on 2019/7/24
@@ -77,13 +76,13 @@
     }
 
     override fun showFinish() {
-
+        jumpActivity(ConsumeActivity::class.java)
     }
 
     override fun jumpToUnregister(errmsg: String) {
         val intent = Intent()
         intent.putExtra("errmsg", errmsg)
-        intent.setClass(this, UnregisterActivity::class.java!!)
+        intent.setClass(this, UnregisterActivity::class.java)
         startActivity(intent)
     }
 
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 2ee27f4..b067352 100644
--- a/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt
@@ -82,7 +82,7 @@
 //            YktSession.getInstance().setSessionKey(pos.getDynamicPara().getSessionKey())
             try {
                 sendMessage(LOAD_PROGRESS, "加载系统参数...")
-                apiInterface.downloadSyspara(bean.paraverno, bean.paragroupid)
+                apiInterface.downloadSyspara( bean.paragroupid,bean.paraverno)
                 sendMessage(LOAD_DONE, "加载系统参数成功")
             } catch (ex: Exception) {
                 sendMessage(LOAD_DONE, "加载系统参数失败:${ex.message}")
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 890ad73..f2dba5f 100644
--- a/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
@@ -63,8 +63,8 @@
         } else {
             kvMap[index++] = ControlParaRecord("网络状态>>", "脱机")
         }
-        kvMap[index++] = ControlParaRecord("成功显时间>>", String.format("%ds", sysRecord!!.consumeShowtime))
-        kvMap[index++] = ControlParaRecord("失败显时间>>", String.format("%ds", sysRecord.consumeFailShowtime))
+        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(
diff --git a/app/src/main/java/com/supwisdom/bean/WhiteListItemBean.kt b/app/src/main/java/com/supwisdom/bean/WhiteListItemBean.kt
index 9297ac8..398667c 100644
--- a/app/src/main/java/com/supwisdom/bean/WhiteListItemBean.kt
+++ b/app/src/main/java/com/supwisdom/bean/WhiteListItemBean.kt
@@ -5,6 +5,7 @@
  ** @desc
  **/
 class WhiteListItemBean {
+    var cardphyid: String? = null
     var cardno: String? = null
     var flag: Int = 0
     var balance: Int = 0
diff --git a/app/src/main/java/com/supwisdom/db/SysParaDao.kt b/app/src/main/java/com/supwisdom/db/SysParaDao.kt
index e6676df..14872aa 100644
--- a/app/src/main/java/com/supwisdom/db/SysParaDao.kt
+++ b/app/src/main/java/com/supwisdom/db/SysParaDao.kt
@@ -90,8 +90,8 @@
         record.maxOfflineDays = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.maxOfflineDays.toString()))
         record.mngPasswd = cursor.getString(cursor.getColumnIndex(BeanPropEnum.Syspara.mngpasswd.toString()))
         record.fixpayGap = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.fixpayGap.toString()))
-        record.consumeShowtime = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.consumeShowtime.toString()))
-        record.consumeFailShowtime =
+        record.sucShowtime = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.consumeShowtime.toString()))
+        record.failShowtime =
             cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.consumeFailShowtime.toString()))
         record.commTime = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.commTime.toString()))
         return record
@@ -110,8 +110,8 @@
         values.put(BeanPropEnum.Syspara.maxOfflineDays.toString(), record.maxOfflineDays)
         values.put(BeanPropEnum.Syspara.mngpasswd.toString(), record.mngPasswd)
         values.put(BeanPropEnum.Syspara.fixpayGap.toString(), record.fixpayGap)
-        values.put(BeanPropEnum.Syspara.consumeShowtime.toString(), record.consumeShowtime)
-        values.put(BeanPropEnum.Syspara.consumeFailShowtime.toString(), record.consumeFailShowtime)
+        values.put(BeanPropEnum.Syspara.consumeShowtime.toString(), record.sucShowtime)
+        values.put(BeanPropEnum.Syspara.consumeFailShowtime.toString(), record.failShowtime)
         values.put(BeanPropEnum.Syspara.commTime.toString(), record.commTime)
         return values
     }
diff --git a/app/src/main/java/com/supwisdom/entity/SysParaRecord.kt b/app/src/main/java/com/supwisdom/entity/SysParaRecord.kt
index adb38d9..65e1640 100644
--- a/app/src/main/java/com/supwisdom/entity/SysParaRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/SysParaRecord.kt
@@ -10,8 +10,8 @@
     var offlineEnable: Boolean = false // 脱机消费时限开关  false-关闭， true-开启
     var maxOfflineDays: Int = 0// 最大脱机天数
     var mngPasswd: String? = null// 维护密码
-    var consumeShowtime: Int = 0// 消费成功显示时间
-    var consumeFailShowtime: Int = 0 //消费失败显示时间
+    var sucShowtime: Int = 0// 消费成功显示时间
+    var failShowtime: Int = 0 //消费失败显示时间
     var commTime: Int = 0   //通讯超时时间 默认2s
     /**
      * 定额消费同卡消费间隔(s)
diff --git a/app/src/main/java/com/supwisdom/exception/AuthEpayError.kt b/app/src/main/java/com/supwisdom/exception/AuthEpayError.kt
new file mode 100644
index 0000000..7afb7cc
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/exception/AuthEpayError.kt
@@ -0,0 +1,19 @@
+package com.supwisdom.exception
+
+/**
+ ** create by zzq on 2019/7/29
+ ** @desc
+ **/
+class AuthEpayError : Exception {
+    constructor(message: String, ex: Exception) {
+        Exception(message + ex.message)
+    }
+
+    constructor(message: String) {
+        Exception(message)
+    }
+
+    constructor(ex: Exception) {
+        Exception(ex.message)
+    }
+}
\ 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 20330a5..b24df22 100644
--- a/app/src/main/java/com/supwisdom/service/APIInterface.kt
+++ b/app/src/main/java/com/supwisdom/service/APIInterface.kt
@@ -12,7 +12,7 @@
 
     fun linkCheck()
 
-    fun downloadSyspara(paraverno: Int, paragroupid: Int)
+    fun downloadSyspara(paragroupid: Int, paraverno: Int)
 
     fun downloadWhitelist(maxCardverno: String)
 
diff --git a/app/src/main/java/com/supwisdom/service/AuthEpay.kt b/app/src/main/java/com/supwisdom/service/AuthEpay.kt
index a2a3799..ebe4961 100644
--- a/app/src/main/java/com/supwisdom/service/AuthEpay.kt
+++ b/app/src/main/java/com/supwisdom/service/AuthEpay.kt
@@ -1,6 +1,12 @@
 package com.supwisdom.service
 
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.YktSession
 import com.supwisdom.bean.AuthRetBean
+import com.supwisdom.exception.AuthEpayError
+import com.supwisdom.okhttp.WebParams
+import com.supwisdom.utils.DateUtil
+import com.supwisdom.utils.GsonUtil
 import com.supwisdom.utils.PublicDef
 
 /**
@@ -8,7 +14,31 @@
  ** @desc
  **/
 class AuthEpay {
+    private val pos = SPApplication.getInstance().getPos()
+
     fun login(): AuthRetBean {
         return AuthRetBean(PublicDef.ERROR, "未实行")
     }
+
+    private fun getAccessToken() {
+
+    }
+
+    private fun secureAuth() {
+        val dyRecord = pos.getDynamicPara()
+        val params = WebParams()
+        params.setParameter("devphyid", pos.getConfigPara()!!.devphyid)
+            .setParameter("termdate", DateUtil.getNowDateNoFormat())
+            .setParameter("termtime", DateUtil.getNowTimeNoFormat())
+            .setParameter("paragroupid", dyRecord!!.paragroupid)
+            .setParameter("cardverno", dyRecord.cardverno)
+
+        val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/heartbeat", "", params)
+            ?: throw AuthEpayError("请求超时")
+        val retBean = GsonUtil.GsonToBean(resp.retjson!!, AuthRetBean::class.java)
+        if (retBean.retcode != PublicDef.SUCCESS) {
+            throw AuthEpayError(retBean.retmsg!!)
+        }
+
+    }
 }
\ 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 8bdea54..45862db 100644
--- a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
+++ b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
@@ -6,9 +6,7 @@
 import com.supwisdom.bean.SystemParaRetBean
 import com.supwisdom.bean.TransdtlRetBean
 import com.supwisdom.bean.WhiteListRetBean
-import com.supwisdom.entity.ReversalFlag
-import com.supwisdom.entity.TransdtlOfflineRecord
-import com.supwisdom.entity.TransdtlOnlineRecord
+import com.supwisdom.entity.*
 import com.supwisdom.exception.HeartBeatError
 import com.supwisdom.exception.SysParaError
 import com.supwisdom.exception.TransdtlUploadError
@@ -28,12 +26,13 @@
     @Throws(HeartBeatError::class)
     override fun heartBeat() {
         val dyRecord = pos.getDynamicPara()
+        val cardverno = dyRecord!!.cardverno ?: "0"
         val params = WebParams()
         params.setParameter("devphyid", pos.getConfigPara()!!.devphyid)
             .setParameter("termdate", DateUtil.getNowDateNoFormat())
             .setParameter("termtime", DateUtil.getNowTimeNoFormat())
-            .setParameter("paragroupid", dyRecord?.paragroupid)
-            .setParameter("cardverno", dyRecord?.cardverno)
+            .setParameter("paragroupid", dyRecord.paragroupid)
+            .setParameter("cardverno", cardverno)
 
         val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/heartbeat", "", params)
             ?: throw HeartBeatError("请求超时")
@@ -41,6 +40,20 @@
         if (retBean.retcode != PublicDef.SUCCESS) {
             throw HeartBeatError(retBean.retmsg!!)
         }
+        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)
+            } catch (ex: SysParaError) {
+                throw SysParaError(ex.message ?: "null")
+            }
+        }
     }
 
     @Throws(HeartBeatError::class)
@@ -49,13 +62,12 @@
     }
 
     @Throws(SysParaError::class)
-    override fun downloadSyspara(paraverno: Int, paragroupid: Int) {
-        val dyRecord = pos.getDynamicPara()
+    override fun downloadSyspara(paragroupid: Int, paraverno: Int) {
         val params = WebParams()
         params.setParameter("devphyid", pos.getConfigPara()!!.devphyid)
             .setParameter("termdate", DateUtil.getNowDateNoFormat())
             .setParameter("termtime", DateUtil.getNowTimeNoFormat())
-            .setParameter("paragroupid", dyRecord?.paragroupid)
+            .setParameter("paragroupid", paragroupid)
 
         val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/systempara", "", params)
             ?: throw SysParaError("请求超时")
@@ -63,30 +75,84 @@
         if (retBean.retcode != PublicDef.SUCCESS) {
             throw SysParaError(retBean.retmsg!!)
         }
+        val record = pos.getSysPara() ?: SysParaRecord()
+        retBean.syspara?.forEach {
+            when {
+                it.paraname == "heartbeat" -> record.heatBeat = it.paraval!!.toInt()
+                it.paraname == "returnFlag" -> record.returnFlag = it.paraval!!.toInt()
+                it.paraname == "sucShowtime" -> record.sucShowtime = it.paraval!!.toInt()
+                it.paraname == "failShowtime" -> record.failShowtime = it.paraval!!.toInt()
+                it.paraname == "fixpayGap" -> record.fixpayGap = it.paraval!!.toInt()
+                it.paraname == "mngPasswd" -> record.mngPasswd = it.paraval
+                it.paraname == "offlineEnable" -> record.offlineEnable = it.paraval == "true"
+                it.paraname == "maxOfflineDays" -> record.maxOfflineDays = it.paraval!!.toInt()
+            }
+        }
+        if (!pos.replaceSysPara(record)) {
+            throw SysParaError("保存参数失败")
+        }
     }
 
     @Throws(WhiteListError::class)
     override fun downloadWhitelist(maxCardverno: String) {
-        val params = WebParams()
-        params.setParameter("devphyid", pos.getConfigPara()!!.devphyid)
-            .setParameter("cardverno", pos.getDynamicPara()!!.cardverno)
-            .setParameter("maxcount", 20)
+        val count = 20
+        do {
+            val params = WebParams()
+            params.setParameter("devphyid", pos.getConfigPara()!!.devphyid)
+                .setParameter("cardverno", pos.getDynamicPara()!!.cardverno)
+                .setParameter("maxcount", count)
 
-        val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/whitelist", "", params)
-            ?: throw WhiteListError("请求超时")
-        val retBean = GsonUtil.GsonToBean(resp.retjson!!, WhiteListRetBean::class.java)
-        if (retBean.retcode != PublicDef.SUCCESS) {
-            throw WhiteListError(retBean.retmsg!!)
-        }
+            val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/whitelist", "", params)
+                ?: throw WhiteListError("请求超时")
+            val retBean = GsonUtil.GsonToBean(resp.retjson!!, WhiteListRetBean::class.java)
+            if (retBean.retcode != PublicDef.SUCCESS) {
+                throw WhiteListError(retBean.retmsg!!)
+            }
+            val list = ArrayList<WhiteListRecord>()
+            retBean.whitelist?.forEach {
+                val record = WhiteListRecord()
+                record.cardphyid = it.cardphyid
+                record.cardno = it.cardno
+                record.flag = it.flag
+                record.balance = it.balance
+                list.add(record)
+            }
+            if (!pos.saveWhiteList(list)) {
+                throw WhiteListError("保存白名单失败")
+            }
+            val dyRecord = pos.getDynamicPara()
+            dyRecord!!.cardverno = retBean.cardverno
+            if (!pos.replaceDynamicPara(dyRecord)) {
+                throw WhiteListError("保存参数失败")
+            }
+        } while (retBean.maxcount == count)
     }
 
     @Throws(TransdtlUploadError::class)
     override fun uploadTransdtl(record: TransdtlOnlineRecord) {
+        var reversalflag = "false"
+        if (record.reversalflag == ReversalFlag.AUTO ||
+            record.reversalflag == ReversalFlag.MANUAL
+        ) {
+            reversalflag = "true"
+        }
+
         val params = WebParams()
         params.setParameter("devphyid", record.devphyid)
+            .setParameter("transdate", record.transdate)
+            .setParameter("transtime", record.transtime)
             .setParameter("termseqno", record.devseqno)
-            .setParameter("maxcount", 20)
-
+            .setParameter("cardno", record.cardno)
+            .setParameter("cardphyid", record.cardphyid)
+            .setParameter("qrcode", record.qrcode)
+            .setParameter("transtype", record.transtype)
+            .setParameter("amount", record.payamt)
+            .setParameter("extraamt", record.extraamt)
+            .setParameter("managefeetype", record.managefeetype)
+            .setParameter("managefeetype", record.managefeetype)
+            .setParameter("billno", record.billno)
+            .setParameter("reversalflag", reversalflag)
+            .setParameter("status", record.status.toString())
         val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/paycancel", "", params)
             ?: throw TransdtlUploadError("请求超时")
         val retBean = GsonUtil.GsonToBean(resp.retjson!!, TransdtlRetBean::class.java)
diff --git a/app/src/main/java/com/supwisdom/service/WebsocketProcess.kt b/app/src/main/java/com/supwisdom/service/WebsocketProcess.kt
index 5ae8a0c..53eafa3 100644
--- a/app/src/main/java/com/supwisdom/service/WebsocketProcess.kt
+++ b/app/src/main/java/com/supwisdom/service/WebsocketProcess.kt
@@ -172,7 +172,7 @@
 //                                        info.setPayamt(retData.getAmount())
 //                                        info.setAmount(retData.getAmount())
 //                                        info.setBalance(retData.getAvailbal())
-//                                        info.setShowtime(pos.getSysPara().getConsumeShowtime())
+//                                        info.setShowtime(pos.getSysPara().getSucShowtime())
 //                                        info.setFlag(PublicDef.TRANSFLAG_NORMAL_CONSUME or PublicDef.TRANSFLAG_WRITE_CARD_SUCCESS)
 //                                        info.setConsumeType(PublicDef.CONSUME_TYPE_BAR)
 //                                        SPApplication.getInstance().setLastInfo(info)
