冲正
diff --git a/app/src/main/java/com/supwisdom/activities/SPApplication.kt b/app/src/main/java/com/supwisdom/activities/SPApplication.kt
index 61e704d..781fd44 100644
--- a/app/src/main/java/com/supwisdom/activities/SPApplication.kt
+++ b/app/src/main/java/com/supwisdom/activities/SPApplication.kt
@@ -5,7 +5,6 @@
 import android.support.multidex.MultiDex
 import android.support.multidex.MultiDexApplication
 import com.supwisdom.db.Pos
-import com.supwisdom.service.BackgroundTaskService
 import com.supwisdom.utils.CommonUtil
 import com.supwisdom.utils.PublicDef
 
@@ -60,11 +59,11 @@
 
     private fun startService() {
         if (!CommonUtil.isServiceWork(this, PublicDef.BG_SERVICE_NAME)) {
-            startService(Intent(this, BackgroundTaskService::class.java))
+            startService(Intent(this, ServiceDemo::class.java))
         }
     }
 
     fun stopService() {
-        stopService(Intent(this, BackgroundTaskService::class.java))
+        stopService(Intent(this, ServiceDemo::class.java))
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/ServiceDemo.kt b/app/src/main/java/com/supwisdom/activities/ServiceDemo.kt
index c0bc6b1..90d1564 100644
--- a/app/src/main/java/com/supwisdom/activities/ServiceDemo.kt
+++ b/app/src/main/java/com/supwisdom/activities/ServiceDemo.kt
@@ -2,14 +2,81 @@
 
 import android.app.Service
 import android.content.Intent
+import android.os.Binder
 import android.os.IBinder
+import com.supwisdom.service.BackgroundTaskService
+import com.supwisdom.utils.CommonUtil
 
 /**
  ** create by zzq on 2019/7/23
  ** @desc
  **/
 class ServiceDemo : Service() {
+    private var guardThread: Thread? = null
+    private var bind: ServiceBind? = null
+    private var bgTask: BackgroundTaskService? = null
+    private val pos = SPApplication.getInstance().getPos()
+    @Volatile
+    private var isExist = false
+
+    override fun onCreate() {
+        super.onCreate()
+    }
+
+    override fun onDestroy() {
+        closeThread()
+        super.onDestroy()
+    }
+
     override fun onBind(intent: Intent): IBinder? {
-        return null
+        if (bind == null) {
+            bind = ServiceBind()
+        }
+        return bind
+    }
+
+    override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int {
+        createThread()
+        return super.onStartCommand(intent, flags, startId)
+    }
+
+    private fun createThread() {
+        isExist = false
+        if (bgTask == null) {
+            bgTask = BackgroundTaskService()
+        }
+        if (guardThread == null) {
+            guardThread = GuardThread()
+            guardThread!!.start()
+        }
+    }
+
+    private fun closeThread() {
+        bgTask?.interrupt()
+        bgTask = null
+        isExist = true
+        guardThread?.interrupt()
+        guardThread = null
+    }
+
+    private inner class GuardThread : Thread() {
+        override fun run() {
+            CommonUtil.doSleep(60 * 1000)
+            while (!isExist) {
+                val hasInit = pos.getConfigPara()?.initOK ?: false
+                if (hasInit) {
+                    break
+                }
+                CommonUtil.doSleep(1000)
+            }
+            if (!isExist) {
+                bgTask!!.start()
+            }
+        }
+    }
+
+    inner class ServiceBind : Binder() {
+        val serviceDemo: ServiceDemo
+            get() = this@ServiceDemo
     }
 }
\ No newline at end of file
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 9f700d0..64f34f5 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
@@ -5,10 +5,7 @@
 import com.supwisdom.activities.SPApplication
 import com.supwisdom.activities.consume.IConsumeView
 import com.supwisdom.activities.consume.bean.*
-import com.supwisdom.entity.PayStatus
-import com.supwisdom.entity.ReversalFlag
-import com.supwisdom.entity.TransdtlOfflineRecord
-import com.supwisdom.entity.TransdtlOnlineRecord
+import com.supwisdom.entity.*
 import com.supwisdom.epaycard.Cardlib
 import com.supwisdom.exception.CardNotFoundError
 import com.supwisdom.exception.CardPayCancelFailError
@@ -69,7 +66,9 @@
 
     private inner class CardPayRunnable : Runnable {
         private lateinit var onlRecord: TransdtlOnlineRecord
+        private lateinit var onlRvsRecord: TransdtlOnlineRecord
         private lateinit var offRecord: TransdtlOfflineRecord
+        private lateinit var offRvsRecord: TransdtlOfflineRecord
         private var oldcardphyid: String? = null
         private var onlineBalance = false
         private var curLinkStatus = false
@@ -197,7 +196,113 @@
         }
 
         private fun doReverse() {
-            throw CardPayCancelFailError("暂不支持")
+            val list = pos.getTransdtlUnion(DateUtil.getNowDateNoFormat(), 0, 0, 1)
+            if (list.isEmpty()) {
+                throw CardPayCancelFailError("未找到消费记录")
+            }
+            if (list[0].payway == "offcard") {
+                doOfflineReverse(list[0])
+            } else {
+                doOnlineReverse(list[0])
+            }
+        }
+
+        private fun doOnlineReverse(unionRecord: TransdtlUnionRecord) {
+            val record = pos.getTransdtlOnlineLast() ?: throw CardPayCancelFailError("未找到联机记录")
+            checkOnlineReverseVaild(unionRecord, record)
+            saveTransdtlOnlineReverse(record)
+            showRvsSucInfo(
+                onlRvsRecord.payamt,
+                onlRvsRecord.username!!,
+                onlRvsRecord.transdate + onlRvsRecord.transtime
+            )
+            asyncUpload(onlRvsRecord)
+        }
+
+        private fun doOfflineReverse(unionRecord: TransdtlUnionRecord) {
+            val record = pos.getTransdtlOfflineLast() ?: throw CardPayCancelFailError("未找到离线记录")
+            checkOfflineReverseVaild(unionRecord, record)
+            saveTransdtlOfflineReverse(record)
+            showRvsSucInfo(offRvsRecord.payamt, offRvsRecord.cardno!!, offRvsRecord.transdate + onlRvsRecord.transtime)
+            asyncUpload(offRvsRecord)
+        }
+
+        private fun saveTransdtlOfflineReverse(record: TransdtlOfflineRecord) {
+            offRvsRecord = record.clone()
+            offRvsRecord.devseqno += 1
+            offRvsRecord.transdate = DateUtil.getNowDateNoFormat()
+            offRvsRecord.transtime = DateUtil.getNowTimeNoFormat()
+            offRvsRecord.reversalflag = ReversalFlag.MANUAL
+            offRvsRecord.reversalseqno = record.devseqno
+            offRvsRecord.reversaltransdate = record.transdate
+            offRvsRecord.reversaltranstime = record.transtime
+            offRvsRecord.upflag = 0
+            if (!pos.saveTransdtlOffline(offRvsRecord)) {
+                throw CardPayCancelFailError("保存流水失败")
+            }
+        }
+
+        private fun saveTransdtlOnlineReverse(record: TransdtlOnlineRecord) {
+            onlRvsRecord = record.clone()
+            onlRvsRecord.devseqno += 1
+            onlRvsRecord.transdate = DateUtil.getNowDateNoFormat()
+            onlRvsRecord.transtime = DateUtil.getNowTimeNoFormat()
+            onlRvsRecord.reversalflag = ReversalFlag.MANUAL
+            onlRvsRecord.reversalbillno = record.billno
+            onlRvsRecord.upflag = 0
+            if (!pos.saveTransdtlOnline(onlRvsRecord)) {
+                throw CardPayCancelFailError("保存流水失败")
+            }
+        }
+
+        private fun checkOnlineReverseVaild(unionRecord: TransdtlUnionRecord, record: TransdtlOnlineRecord) {
+            if (record.cardphyid != cardBean.cardphyid) {
+                throw CardPayCancelFailError("该卡不是最后消费")
+            }
+            if (unionRecord.transdate != record.transdate ||
+                unionRecord.transtime != record.transtime
+            ) {
+                throw CardPayCancelFailError("联机记录时间异常")
+            }
+            if (record.reversalflag == ReversalFlag.AUTO
+            ) {
+                throw CardPayCancelFailError("已撤销")
+            }
+            if (record.reversalflag == ReversalFlag.MANUAL) {
+                throw CardPayCancelFailError("已冲正")
+            }
+            if (record.status != PayStatus.SUC) {
+                throw CardPayCancelFailError("消费失败不能冲正")
+            }
+            val t1 = DateUtil.dateFormatConvertToLong(record.transdate + record.transtime)
+            val t2 = System.currentTimeMillis()
+            if (t2 - t1 > PublicDef.REVERSE_MS_GAP) {
+                throw CardPayCancelFailError("消费已过期")
+            }
+        }
+
+        private fun checkOfflineReverseVaild(unionRecord: TransdtlUnionRecord, record: TransdtlOfflineRecord) {
+            if (record.cardphyid != cardBean.cardphyid) {
+                throw CardPayCancelFailError("该卡不是最后消费")
+            }
+            if (unionRecord.transdate != record.transdate ||
+                unionRecord.transtime != record.transtime
+            ) {
+                throw CardPayCancelFailError("离线记录时间异常")
+            }
+            if (record.reversalflag == ReversalFlag.MANUAL ||
+                record.reversalflag == ReversalFlag.AUTO
+            ) {
+                throw CardPayCancelFailError("已冲正")
+            }
+            if (record.status != PayStatus.SUC) {
+                throw CardPayCancelFailError("消费失败不能冲正")
+            }
+            val t1 = DateUtil.dateFormatConvertToLong(record.transdate + record.transtime)
+            val t2 = System.currentTimeMillis()
+            if (t2 - t1 > PublicDef.REVERSE_MS_GAP) {
+                throw CardPayCancelFailError("消费已过期")
+            }
         }
 
         private fun doOnlineConsume(): Boolean {
@@ -210,7 +315,7 @@
             resp = consumeApi.payConfirm(onlRecord)
             result = parseConfirmResult(resp)
             if (result) {
-                showOnlSucInfo()
+                showRvsSucInfo(onlRecord.payamt, onlRecord.username!!, onlRecord.transdate + onlRecord.transtime)
             }
             updateTransdtlOnline(result)
             return result
@@ -286,7 +391,7 @@
             initTransdtlOffline()
             checkCardValid()
             updateTransdtlOffline(true)
-            showOffSucInfo()
+            showSucInfo(offRecord.payamt, offRecord.cardno!!, offRecord.transdate + offRecord.transtime)
         }
 
         private fun checkCardValid() {
@@ -354,18 +459,30 @@
             asyncUpload(offRecord)
         }
 
-        private fun showOffSucInfo() {
+        private fun showSucInfo(amount: Int, username: String, datetime: String) {
             val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
             info.showtime = pos.getSysPara()!!.sucShowtime
-            info.amount = offRecord.payamt
-            info.payamt = offRecord.payamt
-            info.username = offRecord.cardno
-            info.datetime = offRecord.transdate + offRecord.transtime
+            info.amount = amount
+            info.payamt = amount
+            info.username = username
+            info.datetime = datetime
             info.payway = "card"
             info.status = PayStatus.SUC
             sendMsg(PublicDef.MSG_CARD_PAY_SUC, info)
         }
 
+        private fun showRvsSucInfo(amount: Int, username: String, datetime: String) {
+            val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
+            info.showtime = pos.getSysPara()!!.sucShowtime
+            info.amount = amount
+            info.payamt = amount
+            info.username = username
+            info.datetime = datetime
+            info.payway = "card"
+            info.status = PayStatus.SUC
+            sendMsg(PublicDef.MSG_CARD_REVERSE_SUC, info)
+        }
+
         private fun asyncUpload(dtl: TransdtlOfflineRecord) {
             ThreadPool.getShortPool().execute(Runnable {
                 try {
@@ -378,6 +495,18 @@
             })
         }
 
+        private fun asyncUpload(dtl: TransdtlOnlineRecord) {
+            ThreadPool.getShortPool().execute(Runnable {
+                try {
+                    EpayApiImpl().uploadTransdtl(dtl)
+                    dtl.upflag = 1
+                    pos.updateTransdtlOnline(dtl)
+                } catch (ex: java.lang.Exception) {
+                    ex.printStackTrace()
+                }
+            })
+        }
+
         private fun doClear() {
             oldcardphyid = null
             onlineBalance = false
@@ -416,18 +545,6 @@
             }
         }
 
-        private fun showOnlSucInfo() {
-            val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
-            info.showtime = pos.getSysPara()!!.sucShowtime
-            info.amount = onlRecord.payamt
-            info.payamt = onlRecord.payamt
-            info.username = onlRecord.username
-            info.datetime = onlRecord.transdate + onlRecord.transtime
-            info.payway = onlRecord.transtype
-            info.status = PayStatus.SUC
-            sendMsg(PublicDef.MSG_CARD_PAY_SUC, info)
-        }
-
         private fun getErrorInfo(errmsg: String?): CardUserInfoBean {
             val info = CardUserInfoBean(PublicDef.ERROR, errmsg ?: "null")
             info.showtime = pos.getSysPara()!!.failShowtime
diff --git a/app/src/main/java/com/supwisdom/db/Pos.kt b/app/src/main/java/com/supwisdom/db/Pos.kt
index 6159775..d545378 100644
--- a/app/src/main/java/com/supwisdom/db/Pos.kt
+++ b/app/src/main/java/com/supwisdom/db/Pos.kt
@@ -161,6 +161,15 @@
         return onlMaxSeqno
     }
 
+    fun getTransdtlOnlineLast(): TransdtlOnlineRecord? {
+        try {
+            transdtlOnlineDao.getLock().lock()
+            return transdtlOnlineDao.getLast()
+        } finally {
+            transdtlOnlineDao.getLock().unlock()
+        }
+    }
+
     fun getTransdtlOnlineUnconfirm(): List<TransdtlOnlineRecord> {
         try {
             transdtlOnlineDao.getLock().lock()
@@ -222,6 +231,15 @@
         }
     }
 
+    fun getTransdtlOfflineLast(): TransdtlOfflineRecord? {
+        try {
+            transdtlOfflineDao.getLock().lock()
+            return transdtlOfflineDao.getLast()
+        } finally {
+            transdtlOfflineDao.getLock().unlock()
+        }
+    }
+
     fun saveTransdtlOffline(record: TransdtlOfflineRecord): Boolean {
         try {
             transdtlOfflineDao.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 20bcec1..10d2238 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
@@ -101,10 +101,25 @@
         }
     }
 
+    fun getLast(): 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, "1")
+            if (cursor != null && cursor.moveToNext()) {
+                return getRecord(cursor)
+            }
+            return null
+        } finally {
+            cursor?.close()
+        }
+    }
+
     fun clear(date: String): Boolean {
         val db = dbHelper.writableDatabase
         val selection =
-            BeanPropEnum.TransdtlOffline.upflag.toString() + "=?" + BeanPropEnum.TransdtlOffline.transdate + "<?"
+            BeanPropEnum.TransdtlOffline.upflag.toString() + "=? and " + BeanPropEnum.TransdtlOffline.transdate + "<?"
         try {
             db.beginTransaction()
             if (db.delete(TABLE, selection, arrayOf("1", date)) < 0) {
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
index 9d3d760..d4f2903 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
@@ -72,6 +72,21 @@
         }
     }
 
+    fun getLast(): 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, "1")
+            if (cursor != null && cursor.moveToNext()) {
+                return getRecord(cursor)
+            }
+            return null
+        } finally {
+            cursor?.close()
+        }
+    }
+
     fun getMaxSeqno(): Int {
         val db = dbHelper.readableDatabase
         val sql = ("select max(${BeanPropEnum.TransdtlOnline.devseqno}) as seqno from $TABLE")
@@ -104,7 +119,7 @@
     fun clear(date: String): Boolean {
         val db = dbHelper.writableDatabase
         val selection =
-            BeanPropEnum.TransdtlOnline.upflag.toString() + "=?" + BeanPropEnum.TransdtlOnline.transdate + "<?"
+            BeanPropEnum.TransdtlOnline.upflag.toString() + "=? and " + BeanPropEnum.TransdtlOnline.transdate + "<?"
         try {
             db.beginTransaction()
             if (db.delete(TABLE, selection, arrayOf("1", date)) < 0) {
diff --git a/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt b/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt
index ea0e3b4..347d10a 100644
--- a/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt
@@ -1,10 +1,12 @@
 package com.supwisdom.entity
 
+import com.supwisdom.utils.GsonUtil
+
 /**
  ** create by zzq on 2019/7/24
  ** @desc 离线流水
  **/
-class TransdtlOfflineRecord {
+class TransdtlOfflineRecord : Cloneable {
     var devphyid: String? = null
     var transdate: String? = null
     var transtime: String? = null
@@ -20,4 +22,9 @@
     var reversaltranstime: String? = null  //被冲正流水时间
     var status: PayStatus? = null // init,fail,suc
     var upflag: Int = 0 // 1已上传
+
+    public override fun clone(): TransdtlOfflineRecord {
+        val tmp = GsonUtil.GsonString(this)
+        return GsonUtil.GsonToBean(tmp, TransdtlOfflineRecord::class.java)
+    }
 }
\ 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 b2b0d6e..5eb7e1a 100644
--- a/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
@@ -1,10 +1,12 @@
 package com.supwisdom.entity
 
+import com.supwisdom.utils.GsonUtil
+
 /**
  ** create by zzq on 2019/7/24
  ** @desc 联机流水
  **/
-class TransdtlOnlineRecord {
+class TransdtlOnlineRecord : Cloneable {
     var devphyid: String? = null
     var transdate: String? = null
     var transtime: String? = null
@@ -23,4 +25,9 @@
     var reversalbillno: String? = null //被冲正交易参考号
     var status: PayStatus? = null // init,fail,suc
     var upflag: Int = 0 // 1已上传
+
+    public override fun clone(): TransdtlOnlineRecord {
+        val tmp = GsonUtil.GsonString(this)
+        return GsonUtil.GsonToBean(tmp, TransdtlOnlineRecord::class.java)
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt b/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt
index 8a7c9f7..8c8d0c5 100644
--- a/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt
+++ b/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt
@@ -15,43 +15,30 @@
  **/
 class BackgroundTaskService : Thread() {
     private val pos = SPApplication.getInstance().getPos()
-    private val websocketProcess = WebsocketProcess()
-    private var websocketHasRun = false
-    private var apiInterface: APIInterface? = null
+    private var apiInterface: APIInterface = EpayApiImpl()
     private var sysRecord: SysParaRecord? = null
     private var transdtlClearDate: String? = null
+    @Volatile
+    private var isExist = false
 
-    fun getWebsocketProcess(): WebsocketProcess {
-        return websocketProcess
+    override fun start() {
+        isExist = false
+        super.start()
+    }
+
+    override fun interrupt() {
+        isExist = true
+        super.interrupt()
     }
 
     override fun run() {
-        var heartgap = 0
-        CommonUtil.doSleep(60 * 1000)
-        while (true) {
-            val hasInit = pos.getConfigPara()?.initOK ?: false
-            if (hasInit) {
-                break
-            }
-            CommonUtil.doSleep(1000)
-        }
-        while (true) {
+        var heartgap: Int
+        while (!isExist) {
             //做一卡通心跳和流水上传
             heartAndTransdtl()
             //清除流水
             clearTransdtl()
             sysRecord = pos.getSysPara()
-//            if (sysRecord != null && sysRecord!!.getSocketSwitch() != 0) {
-//                if (!websocketHasRun) {
-//                    websocketHasRun = true
-//                    websocketProcess.start()
-//                }
-//            } else {
-//                if (websocketHasRun) {
-//                    websocketHasRun = false
-//                    websocketProcess.stop()
-//                }
-//            }
             heartgap = if (sysRecord == null || sysRecord!!.heatBeat < 10 || sysRecord!!.heatBeat > 600) {
                 60
             } else {
@@ -62,11 +49,11 @@
     }
 
     private fun heartAndTransdtl() {
-        //做一卡通的心跳以及流水上传
+        /**做一卡通的心跳以及流水上传*/
         try {
-            apiInterface!!.heartBeat()
+            apiInterface.heartBeat()
             SPApplication.getInstance().setEpayLinking(true)
-//        /*更新通讯jwt*/
+            /**更新通讯jwt*/
             refreshJwt()
             uploadTransdtl()
         } catch (ex: HeartBeatError) {
@@ -77,12 +64,12 @@
     private fun uploadTransdtl() {
         try {
             pos.getTransdtlOfflineUnconfirm().forEach {
-                apiInterface!!.uploadTransdtl(it)
+                apiInterface.uploadTransdtl(it)
                 it.upflag = 1
                 pos.updateTransdtlOffline(it)
             }
             pos.getTransdtlOnlineUnconfirm().forEach {
-                apiInterface!!.uploadTransdtl(it)
+                apiInterface.uploadTransdtl(it)
                 it.upflag = 1
                 pos.updateTransdtlOnline(it)
             }
diff --git a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
index a7fb734..5c05581 100644
--- a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
+++ b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
@@ -159,28 +159,13 @@
 
     @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("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("reversalbillno", record.reversalbillno)
+            .setParameter("reversalflag", record.reversalflag.toString())
             .setParameter("status", record.status.toString())
         val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/paycancel", "", params)
             ?: throw TransdtlUploadError("请求超时")