init
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 56a216d..59a7439 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
@@ -58,6 +58,7 @@
     private var addAmount: Int = 0
     @Volatile
     private var amount: Int = 0
+    private var payWay: String? = null
     private var counter: LastPayShowTimer? = null
     private var lastPayInfo: CardUserInfoBean? = null
     private var dialogPurchase: DialogPurchase? = null
@@ -196,17 +197,27 @@
     override fun onResume() {
         super.onResume()
         isBackRuning = false
+        dealIntent()
         refresh()
         refreshRecentDtl(lastPayInfo)
     }
 
+    private fun dealIntent() {
+        amount = this.intent.getIntExtra("amount", 0)
+        payWay = this.intent.getStringExtra("payway")
+        this.intent.putExtra("amount", "0")
+        this.intent.putExtra("payway", "")
+    }
+
     override fun onNewIntent(intent: Intent) {
+        this.intent.putExtra("amount", intent.getStringExtra("amount"))
+        this.intent.putExtra("payway", intent.getStringExtra("payway"))
     }
 
     private fun refresh() {
         addAmount = 0
         amountTxt.text = "0"
-        var shopname = SPApplication.getInstance().getPos().getConfigPara()!!.shopname
+        var shopname = SPApplication.getInstance().getPos().getDynamicPara()!!.shopname
         if (shopname == null || shopname.length < 9) {
             vShopname.textSize = resources.getDimension(R.dimen.consume_shopname_text_size_normal)
         } else {
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 9bf22b9..cdef86f 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
@@ -22,7 +22,7 @@
 
 /**
  ** create by zzq on 2019/7/25
- ** @desc
+ ** @desc 刷卡消费
  **/
 class CardPayService constructor(iConsumeView: IConsumeView, handler: Handler) {
     private val TAG = "CardPayService"
@@ -196,6 +196,9 @@
             }
             resp = consumeApi.payConfirm(onlRecord)
             result = parseConfirmResult(resp)
+            if (!result) {
+                showSucInfo()
+            }
             updateTransdtlOnline(result)
             return result
         }
@@ -230,6 +233,7 @@
             }
             onlRecord.payamt = retBean.amount
             onlRecord.extraamt = retBean.extraamt
+            onlRecord.balance = retBean.balance
             return true
         }
 
@@ -262,10 +266,8 @@
             } else {
                 onlRecord.status = PayStatus.FAIL
             }
-            onlRecord.upflag = 0
-            if (!pos.updateTransdtlOnline(onlRecord)) {
-                throw CardPayFailError("更新流水失败")
-            }
+            onlRecord.upflag = 1
+            pos.updateTransdtlOnline(onlRecord)
         }
 
         private fun doOfflineConsume() {
@@ -302,7 +304,7 @@
             offRecord = TransdtlOfflineRecord()
             var seqno = pos.getTransdtlOfflineMaxSeqno()
             if (seqno == 0) {
-                seqno = pos.getDynamicPara()?.onlineseqno ?: 0
+                seqno = pos.getDynamicPara()?.offlineseqno ?: 0
             }
             offRecord.devphyid = pos.getConfigPara()!!.devphyid
             offRecord.transdate = cardBean.datetime!!.substring(0, 8)
@@ -371,9 +373,23 @@
             }
         }
 
+        private fun showSucInfo() {
+            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
+            info.balance = onlRecord.balance
+            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
+            info.status = PayStatus.FAIL
             return info
         }
 
diff --git a/app/src/main/java/com/supwisdom/activities/consume/mode/CodePayService.kt b/app/src/main/java/com/supwisdom/activities/consume/mode/CodePayService.kt
new file mode 100644
index 0000000..6ea5ced
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/consume/mode/CodePayService.kt
@@ -0,0 +1,190 @@
+package com.supwisdom.activities.consume.mode
+
+import android.os.Handler
+import android.os.Message
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.consume.IConsumeView
+import com.supwisdom.activities.consume.bean.CardPayConfirmRetBean
+import com.supwisdom.activities.consume.bean.CardPayInitRetBean
+import com.supwisdom.activities.consume.bean.CardUserInfoBean
+import com.supwisdom.entity.PayStatus
+import com.supwisdom.entity.ReversalFlag
+import com.supwisdom.entity.TransdtlOnlineRecord
+import com.supwisdom.exception.CardPayFailError
+import com.supwisdom.okhttp.TransResp
+import com.supwisdom.utils.*
+import org.apache.http.HttpStatus
+
+/**
+ ** create by zzq on 2019/7/30
+ ** @desc 二维码消费
+ **/
+class CodePayService constructor(iConsumeView: IConsumeView, handler: Handler) {
+    private val TAG = "CodePayService"
+    private val iConsumeView = iConsumeView
+    private val handler = handler
+    private val pos = SPApplication.getInstance().getPos()
+    private lateinit var codeRecord: TransdtlOnlineRecord
+    private val consumeApi = ConsumeApi()
+    /**
+     * 消费过程中可按键主动取消
+     * 手动取消后不冲正,以手机消费结果为准
+     */
+    @Volatile
+    private var interruptedPay: Boolean = false
+
+    fun pay(code: String, amount: Int) {
+        try {
+            initTransdtlOnline(code, amount)
+            var resp = consumeApi.payInit(codeRecord)
+            parseInitResult(resp)
+            resp = consumeApi.payConfirm(codeRecord)
+            var result = parseConfirmResult(resp)
+            if (!result) {
+                result = payResultQuery()
+            }
+            if (!result) {
+                showSucInfo()
+            }
+            updateTransdtlOnline(result)
+        } catch (ex: CardPayFailError) {
+            sendMsg(PublicDef.MSG_CARD_PAY_FAIL, getErrorInfo(ex.message))
+        }
+    }
+
+    private fun payResultQuery(): Boolean {
+        sendMsg(PublicDef.MSG_CODE_PAYING_CANCEL, "谨慎操作查询取消")
+        LogUtil.d(TAG, "扫码消费确认超时,进行查询操作:billno=${codeRecord.billno}")
+        sleepWithCancel(1500)
+        var searchCnt = 1
+        while (!interruptedPay) {
+            sendMsg(PublicDef.MSG_CARD_PAYING, String.format("正在%d次查询...", searchCnt))
+            val resp = consumeApi.payQuery(codeRecord)
+            if (resp != null) {
+                val result = parseConfirmResult(resp)
+                if (!result) {
+                    searchCnt++
+                    sendMsg(PublicDef.MSG_CARD_PAYING, String.format("等待%d次查询...", searchCnt))
+                    sleepWithCancel(5000)
+                    continue
+                }
+                return result
+            } else {
+                searchCnt++
+                sendMsg(PublicDef.MSG_CARD_PAYING, String.format("等待%d次查询...", searchCnt))
+                sleepWithCancel(3000)
+            }
+        }
+        LogUtil.d(TAG, "扫码消费确认超时,操作员手工取消查询:billno=${codeRecord.billno}")
+        return false
+    }
+
+    private fun parseConfirmResult(resp: TransResp?): Boolean {
+        if (resp == null) {
+            SPApplication.getInstance().setEpayLinking(false)
+            return false
+        }
+        if (resp.retcode != HttpStatus.SC_OK) {
+            throw CardPayFailError("错误码=${resp.retcode}")
+        }
+        val retBean = GsonUtil.GsonToBean(resp.retjson!!, CardPayConfirmRetBean::class.java)
+        if (retBean.retcode != PublicDef.SUCCESS) {
+            throw CardPayFailError(retBean.retmsg!!)
+        }
+        if (retBean.require_query) {
+            // 等待查询
+            return false
+        }
+        codeRecord.payamt = retBean.amount
+        codeRecord.extraamt = retBean.extraamt
+        codeRecord.balance = retBean.balance
+        return true
+    }
+
+    private fun parseInitResult(resp: TransResp?): Boolean {
+        if (resp == null) {
+            SPApplication.getInstance().setEpayLinking(false)
+            throw CardPayFailError("请求超时")
+        }
+        if (resp.retcode != HttpStatus.SC_OK) {
+            throw CardPayFailError("错误码=${resp.retcode}")
+        }
+        val retBean = GsonUtil.GsonToBean(resp.retjson!!, CardPayInitRetBean::class.java)
+        if (retBean.retcode != PublicDef.SUCCESS) {
+            throw CardPayFailError(retBean.retmsg!!)
+        }
+        codeRecord.billno = retBean.billno
+        codeRecord.username = retBean.username
+        return true
+    }
+
+    private fun initTransdtlOnline(code: String, amount: Int) {
+        codeRecord = TransdtlOnlineRecord()
+        var seqno = pos.getTransdtlOnlineMaxSeqno()
+        if (seqno == 0) {
+            seqno = pos.getDynamicPara()?.onlineseqno ?: 0
+        }
+        codeRecord.devphyid = pos.getConfigPara()!!.devphyid
+        codeRecord.transdate = DateUtil.getNowDateNoFormat()
+        codeRecord.transtime = DateUtil.getNowTimeNoFormat()
+        codeRecord.devseqno = seqno + 1
+        codeRecord.qrcode = code
+        codeRecord.payamt = amount
+        codeRecord.reversalflag = ReversalFlag.NONE
+        codeRecord.extraamt = 0
+        codeRecord.transtype = "code"
+        codeRecord.status = PayStatus.INIT
+        codeRecord.upflag = 1
+        if (!pos.saveTransdtlOnline(codeRecord)) {
+            throw CardPayFailError("保存流水失败")
+        }
+    }
+
+    private fun updateTransdtlOnline(issuccess: Boolean) {
+        if (issuccess) {
+            codeRecord.status = PayStatus.SUC
+        } else {
+            codeRecord.status = PayStatus.FAIL
+        }
+        codeRecord.upflag = 1
+        pos.updateTransdtlOnline(codeRecord)
+    }
+
+    private fun sleepWithCancel(ms: Long) {
+        var sum: Long = 0
+        while (!interruptedPay) {
+            CommonUtil.doSleep(100)
+            sum += 100
+            if (sum > ms) {
+                break
+            }
+        }
+    }
+
+    private fun showSucInfo() {
+        val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
+        info.showtime = pos.getSysPara()!!.sucShowtime
+        info.amount = codeRecord.payamt
+        info.payamt = codeRecord.payamt
+        info.username = codeRecord.username
+        info.datetime = codeRecord.transdate + codeRecord.transtime
+        info.payway = codeRecord.transtype
+        info.status = PayStatus.SUC
+        info.balance = codeRecord.balance
+        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
+        info.status = PayStatus.FAIL
+        return info
+    }
+
+    private fun sendMsg(code: Int, obj: Any) {
+        val msg = Message()
+        msg.what = code
+        msg.obj = obj
+        handler.sendMessage(msg)
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/consume/mode/ConsumeApi.kt b/app/src/main/java/com/supwisdom/activities/consume/mode/ConsumeApi.kt
index e06756a..54e6a8a 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/mode/ConsumeApi.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/mode/ConsumeApi.kt
@@ -62,8 +62,8 @@
     fun queryRevenue(devphyid: String, date: String): TransResp? {
         val params = WebParams()
         params.setParameter("devphyid", devphyid)
-            .setParameter("date", date)
+            .setParameter("termdate", date)
 
-        return YktSession.getInstance().sendYktRequestPost("/api/pos/revenue", "", params)
+        return YktSession.getInstance().sendYktRequestPost("/api/pos/querysales", "", params)
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/menu/MenuActivity.kt b/app/src/main/java/com/supwisdom/activities/menu/MenuActivity.kt
index e12a6eb..22daf3a 100644
--- a/app/src/main/java/com/supwisdom/activities/menu/MenuActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/menu/MenuActivity.kt
@@ -18,7 +18,6 @@
 import com.supwisdom.activities.syspara.SysparaActivity
 import com.supwisdom.auxscreen.AuxScreenController
 import com.supwisdom.utils.DateUtil
-import com.supwisdom.utils.PublicDef
 import java.util.*
 
 /**
@@ -68,7 +67,7 @@
                 KeyEvent.KEYCODE_1 -> jumpActivity(RevenueActivity::class.java)
                 KeyEvent.KEYCODE_2 -> {
                     isRunning = true
-                    presenter.doUploadTransdtl()
+                    presenter.uploadTransdtl()
                 }
                 KeyEvent.KEYCODE_3 -> {
                     isRunning = true
@@ -86,15 +85,14 @@
                     startActivity(intent)
                 }
                 KeyEvent.KEYCODE_7 -> jumpActivity(PasswdActivity::class.java)
-                KeyEvent.KEYCODE_8 ->
-                    //设置消费方式
-                    jumpActivity(ConsumeModeActivity::class.java)
+                KeyEvent.KEYCODE_8 -> jumpActivity(ConsumeModeActivity::class.java)
                 KeyEvent.KEYCODE_9 -> if (isSupportReverse()) {
                     presenter.doReverse()
                 }
-                KeyEvent.KEYCODE_DEL ->
+                KeyEvent.KEYCODE_DEL -> {
                     //cancel
                     jumpActivity(ConsumeActivity::class.java)
+                }
                 KeyEvent.KEYCODE_ENTER -> jumpActivity(ConsumeActivity::class.java)
             }
         }
@@ -134,10 +132,10 @@
         secList.add(getString(R.string.consume_menu_shop_password_set))
         secList.add(getString(R.string.consume_menu_consume_mode))
         if (isSupportReverse()) {
-            vReverse!!.visibility = View.VISIBLE
+            vReverse.visibility = View.VISIBLE
             secList.add(getString(R.string.consume_menu_reverse))
         } else {
-            vReverse!!.visibility = View.GONE
+            vReverse.visibility = View.GONE
         }
         AuxScreenController.getInstance().refreshTitle("设备管理界面")
         AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDate())
diff --git a/app/src/main/java/com/supwisdom/activities/menu/MenuPresenter.kt b/app/src/main/java/com/supwisdom/activities/menu/MenuPresenter.kt
index bf3ae4d..4723966 100644
--- a/app/src/main/java/com/supwisdom/activities/menu/MenuPresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/menu/MenuPresenter.kt
@@ -12,6 +12,7 @@
 import com.supwisdom.exception.TransdtlUploadError
 import com.supwisdom.service.AuthEpay
 import com.supwisdom.service.EpayApiImpl
+import com.supwisdom.utils.CommonUtil
 import com.supwisdom.utils.DateUtil
 import com.supwisdom.utils.PublicDef
 
@@ -36,11 +37,12 @@
         override fun doInBackground(vararg voids: Void): AuthRetBean {
             val retBean = AuthEpay().login()
             if (retBean.retcode == PublicDef.SUCCESS) {
-                val cfgRecord = pos.getConfigPara()
-                cfgRecord!!.deviceid = retBean.deviceid
-                cfgRecord.merchaccno = retBean.merchaccno
-                cfgRecord.shopname = retBean.shopname
-                pos.replaceConfigPara(cfgRecord)
+                val record = pos.getDynamicPara()
+                record!!.deviceid = retBean.deviceid
+                record.merchaccno = retBean.merchaccno
+                record.shopname = retBean.shopname
+                record.paragroupid = retBean.paragroupid
+                pos.replaceDynamicPara(record)
 
                 SPApplication.getInstance().setEpayLinking(true)
             } else {
@@ -98,13 +100,14 @@
             return
         }
         val intent = Intent()
+        intent.putExtra("datetime", DateUtil.getNowDateNoFormat())
         intent.putExtra("amount", record.payamt.toString())
         intent.putExtra("payway", record.payway)
         intent.setClass(iMenuView.getActivity(), ConsumeActivity::class.java)
         iMenuView.getActivity().startActivity(intent)
     }
 
-    fun doUploadTransdtl() {
+    fun uploadTransdtl() {
         iMenuView.showOperHint("正在上传流水", "请稍等...")
         UploadTransdtl().execute()
     }
diff --git a/app/src/main/java/com/supwisdom/activities/passwd/PasswdActivity.kt b/app/src/main/java/com/supwisdom/activities/passwd/PasswdActivity.kt
index adff026..f22e796 100644
--- a/app/src/main/java/com/supwisdom/activities/passwd/PasswdActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/passwd/PasswdActivity.kt
@@ -58,39 +58,43 @@
                     }
                     tmpPwd += keyCode - KeyEvent.KEYCODE_0
                     if (tmpPwd.length == 6) {
-                        if (step == 0) {
-                            oldPwd = tmpPwd
-                            tmpPwd = ""
-                            if (checkOldPasswd()) {
-                                step = 1
-                                passwdHint = "输入新密码:"
+                        when (step) {
+                            0 -> {
+                                oldPwd = tmpPwd
+                                tmpPwd = ""
+                                if (checkOldPasswd()) {
+                                    step = 1
+                                    passwdHint = "输入新密码:"
+                                    AuxScreenController.getInstance().refreshContent(Arrays.asList<String>(passwdHint, " "))
+                                    return true
+                                } else {
+                                    step = 4
+                                }
+                                return true
+                            }
+                            1 -> {
+                                newPwd = tmpPwd
+                                tmpPwd = ""
+                                step = 2
+                                passwdHint = "确认新密码:"
                                 AuxScreenController.getInstance().refreshContent(Arrays.asList<String>(passwdHint, " "))
                                 return true
-                            } else {
-                                step = 4
                             }
-                            return true
-                        } else if (step == 1) {
-                            newPwd = tmpPwd
-                            tmpPwd = ""
-                            step = 2
-                            passwdHint = "确认新密码:"
-                            AuxScreenController.getInstance().refreshContent(Arrays.asList<String>(passwdHint, " "))
-                            return true
-                        } else if (step == 2) {
-                            newPwd1 = tmpPwd
-                            step = 3
-                            tmpPwd = ""
-                            if (checkAndUpdate()) {
-                                AuxScreenController.getInstance()
-                                    .refreshContent(Arrays.asList<String>("密码修改成功", " "))
+                            2 -> {
+                                newPwd1 = tmpPwd
                                 step = 3
+                                tmpPwd = ""
+                                if (checkAndUpdate()) {
+                                    AuxScreenController.getInstance()
+                                        .refreshContent(Arrays.asList<String>("密码修改成功", " "))
+                                    step = 3
+                                    return true
+                                }
+                                step = 4
                                 return true
                             }
-                            step = 4
-                            return true
+                            else -> tmpPwd = ""
                         }
-                        tmpPwd = ""
                     }
                     AuxScreenController.getInstance()
                         .refreshContent(Arrays.asList(passwdHint, CommonUtil.getPasswordStar(tmpPwd.length)))
diff --git a/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
index 347db4a..8eb7e66 100644
--- a/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
+++ b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
@@ -21,9 +21,6 @@
     enum class ConfigPara {
         id,
         mode,
-        deviceid,
-        merchaccno,
-        shopname,
         devphyid,
         psamno,
         epayIP,
@@ -35,6 +32,13 @@
 
     enum class DynamicPara {
         id,
+        appid,
+        appsecret,
+        deviceid,
+        merchaccno,
+        shopname,
+        onlineseqno,
+        offlineseqno,
         paraverno,
         paragroupid,
         cardverno,
@@ -60,6 +64,7 @@
         extraamt,
         managefeetype,
         username,
+        balance,
         billno,
         reversalflag,
         reversalbillno,
diff --git a/app/src/main/java/com/supwisdom/db/ConfigParaDao.kt b/app/src/main/java/com/supwisdom/db/ConfigParaDao.kt
index 8402934..acaaa43 100644
--- a/app/src/main/java/com/supwisdom/db/ConfigParaDao.kt
+++ b/app/src/main/java/com/supwisdom/db/ConfigParaDao.kt
@@ -75,9 +75,6 @@
     private fun getRecord(cursor: Cursor): ConfigParaRecord {
         val record = ConfigParaRecord()
         record.mode = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.ConfigPara.mode.toString()))
-        record.deviceid = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.ConfigPara.deviceid.toString()))
-        record.merchaccno = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.ConfigPara.merchaccno.toString()))
-        record.shopname = cursor.getString(cursor.getColumnIndex(BeanPropEnum.ConfigPara.shopname.toString()))
         record.devphyid = cursor.getString(cursor.getColumnIndex(BeanPropEnum.ConfigPara.devphyid.toString()))
         record.epayIP = cursor.getString(cursor.getColumnIndex(BeanPropEnum.ConfigPara.epayIP.toString()))
         record.epayPort = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.ConfigPara.epayPort.toString()))
@@ -106,9 +103,6 @@
         val values = ContentValues()
         values.put(BeanPropEnum.ConfigPara.id.toString(), INDEX)
         values.put(BeanPropEnum.ConfigPara.mode.toString(), record.mode)
-        values.put(BeanPropEnum.ConfigPara.deviceid.toString(), record.deviceid)
-        values.put(BeanPropEnum.ConfigPara.merchaccno.toString(), record.merchaccno)
-        values.put(BeanPropEnum.ConfigPara.shopname.toString(), record.shopname)
         values.put(BeanPropEnum.ConfigPara.devphyid.toString(), record.devphyid)
         values.put(BeanPropEnum.ConfigPara.epayIP.toString(), record.epayIP)
         values.put(BeanPropEnum.ConfigPara.epayPort.toString(), record.epayPort)
diff --git a/app/src/main/java/com/supwisdom/db/DBParaHelper.kt b/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
index ebcb7d8..17c542a 100644
--- a/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
+++ b/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
@@ -54,6 +54,13 @@
     private val CREATE_TABLE_NAME_DYNAMICPARA = ("create table IF NOT EXISTS "
             + TABLE_NAME_DYNAMICPARA + " ( "
             + BeanPropEnum.DynamicPara.id + " long primary key, "
+            + BeanPropEnum.DynamicPara.appid + " varchar(16), "
+            + BeanPropEnum.DynamicPara.appsecret + " varchar(128), "
+            + BeanPropEnum.DynamicPara.deviceid + " integer, "
+            + BeanPropEnum.DynamicPara.merchaccno + " integer, "
+            + BeanPropEnum.DynamicPara.shopname + " varchar(32), "
+            + BeanPropEnum.DynamicPara.onlineseqno + " integer, "
+            + BeanPropEnum.DynamicPara.offlineseqno + " integer, "
             + BeanPropEnum.DynamicPara.paraverno + " integer, "
             + BeanPropEnum.DynamicPara.paragroupid + " integer, "
             + BeanPropEnum.DynamicPara.cardverno + " char(14),"
diff --git a/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt b/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
index a814f3a..b4ecdd1 100644
--- a/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
+++ b/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
@@ -39,9 +39,6 @@
             + TABLE_NAME_CONFIGPARA + " ( "
             + BeanPropEnum.ConfigPara.id + " long primary key, "
             + BeanPropEnum.ConfigPara.mode + " integer, "
-            + BeanPropEnum.ConfigPara.deviceid + " integer, "
-            + BeanPropEnum.ConfigPara.merchaccno + " integer, "
-            + BeanPropEnum.ConfigPara.shopname + " varchar(64), "
             + BeanPropEnum.ConfigPara.devphyid + " char(8), "
             + BeanPropEnum.ConfigPara.psamno + " char(12), "
             + BeanPropEnum.ConfigPara.epayIP + " varchar(128), "
@@ -62,6 +59,7 @@
             + BeanPropEnum.TransdtlOnline.transtype + " varchar(8),"
             + BeanPropEnum.TransdtlOnline.payamt + " integer,"
             + BeanPropEnum.TransdtlOnline.extraamt + " integer,"
+            + BeanPropEnum.TransdtlOnline.balance + " integer,"
             + BeanPropEnum.TransdtlOnline.managefeetype + " varchar(10),"
             + BeanPropEnum.TransdtlOnline.username + " varchar(32),"
             + BeanPropEnum.TransdtlOnline.billno + " varchar(32),"
diff --git a/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt b/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt
index f3b4e24..20ab20d 100644
--- a/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt
+++ b/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt
@@ -82,6 +82,13 @@
 
     private fun getRecord(cursor: Cursor): DynamicParaRecord {
         val record = DynamicParaRecord()
+        record.appid = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.appid.toString()))
+        record.appsecret = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.appsecret.toString()))
+        record.deviceid = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.deviceid.toString()))
+        record.merchaccno = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.merchaccno.toString()))
+        record.shopname = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.shopname.toString()))
+        record.onlineseqno = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.onlineseqno.toString()))
+        record.offlineseqno = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.offlineseqno.toString()))
         record.paraverno = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.paraverno.toString()))
         record.paragroupid = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.paragroupid.toString()))
         record.cardverno = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.cardverno.toString()))
@@ -93,6 +100,13 @@
     private fun getContentValues(record: DynamicParaRecord): ContentValues {
         val values = ContentValues()
         values.put(BeanPropEnum.DynamicPara.id.toString(), INDEX)
+        values.put(BeanPropEnum.DynamicPara.appid.toString(), record.appid)
+        values.put(BeanPropEnum.DynamicPara.appsecret.toString(), record.appsecret)
+        values.put(BeanPropEnum.DynamicPara.deviceid.toString(), record.deviceid)
+        values.put(BeanPropEnum.DynamicPara.merchaccno.toString(), record.merchaccno)
+        values.put(BeanPropEnum.DynamicPara.shopname.toString(), record.shopname)
+        values.put(BeanPropEnum.DynamicPara.onlineseqno.toString(), record.onlineseqno)
+        values.put(BeanPropEnum.DynamicPara.offlineseqno.toString(), record.offlineseqno)
         values.put(BeanPropEnum.DynamicPara.paraverno.toString(), record.paraverno)
         values.put(BeanPropEnum.DynamicPara.paragroupid.toString(), record.paragroupid)
         values.put(BeanPropEnum.DynamicPara.cardverno.toString(), record.cardverno)
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
index 9d3d760..063c6e7 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
@@ -133,6 +133,7 @@
         record.username = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.username.toString()))
         record.payamt = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.payamt.toString()))
         record.extraamt = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.extraamt.toString()))
+        record.balance = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.balance.toString()))
         var flag = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.reversalflag.toString()))
         when (flag) {
             ReversalFlag.NONE.toString() -> record.reversalflag = ReversalFlag.NONE
@@ -165,6 +166,7 @@
         values.put(BeanPropEnum.TransdtlOnline.transtype.toString(), record.transtype)
         values.put(BeanPropEnum.TransdtlOnline.payamt.toString(), record.payamt)
         values.put(BeanPropEnum.TransdtlOnline.extraamt.toString(), record.extraamt)
+        values.put(BeanPropEnum.TransdtlOnline.balance.toString(), record.balance)
         values.put(BeanPropEnum.TransdtlOnline.billno.toString(), record.billno)
         values.put(BeanPropEnum.TransdtlOnline.managefeetype.toString(), record.managefeetype)
         values.put(BeanPropEnum.TransdtlOnline.username.toString(), record.username)
diff --git a/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt b/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
index b2b0d6e..2345e92 100644
--- a/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
@@ -16,6 +16,7 @@
     var payamt: Int = 0
     var extraamt: Int = 0
     var managefeetype: String? = null // none,discount,mealer
+    var balance: Int = 0
     var username: String? = null
     //    var userid: Int = 0
     var billno: String? = null
diff --git a/app/src/main/java/com/supwisdom/utils/PublicDef.kt b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
index ca1da56..0ac5f89 100644
--- a/app/src/main/java/com/supwisdom/utils/PublicDef.kt
+++ b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
@@ -31,6 +31,7 @@
     const val MSG_USER_INFO_SHOW = 17
     const val MSG_USER_INFO_CLEAR = 18
     const val MSG_LINK_STATUS = 19
+    const val MSG_CODE_PAYING_CANCEL = 19
     /*************************不能重复*****************************/
     /**
      * 卡消费标志(1 byte)