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)
