init
diff --git a/app/build.gradle b/app/build.gradle
index 63e7988..cded1af 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -68,6 +68,8 @@
     compile 'org.jetbrains.kotlin:kotlin-reflect:1.3.41'
     compile 'org.springframework.android:spring-android-core:1.0.1.RELEASE'
     compile 'org.apache.httpcomponents:httpcore:4.4.10'
-//    compile files('libs/apache-httpcomponents-httpcore.jar')
+    compile("com.beust:klaxon:0.30") {
+        exclude group: 'org.jetbrains'
+    }
     compile files('libs/zxinglibsl.jar')
 }
diff --git a/app/libs/apache-httpcomponents-httpcore.jar b/app/libs/apache-httpcomponents-httpcore.jar
deleted file mode 100644
index a357c07..0000000
--- a/app/libs/apache-httpcomponents-httpcore.jar
+++ /dev/null
Binary files differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2b2b54c..301359f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -100,7 +100,7 @@
                 android:label="@string/title_activity_consume"
                 android:launchMode="singleTask"/>
         <activity
-                android:name=".activities.upgrade.UpgradeAcvitity"
+                android:name=".activities.upgrade.UpgradeActivity"
                 android:label="@string/title_activity_consume"
                 android:launchMode="singleTask"/>
         <activity
diff --git a/app/src/main/java/com/supwisdom/activities/CrashHandler.kt b/app/src/main/java/com/supwisdom/activities/CrashHandler.kt
index c400b57..784aeab 100644
--- a/app/src/main/java/com/supwisdom/activities/CrashHandler.kt
+++ b/app/src/main/java/com/supwisdom/activities/CrashHandler.kt
@@ -4,15 +4,11 @@
 import android.content.pm.PackageManager
 import android.os.Build
 import android.os.Looper
-import com.supwisdom.dcpos.utils.CommonUtil
-import com.supwisdom.dcpos.view.ToastUtil
-import com.supwisdom.utils.AppExitUtil
-import com.supwisdom.utils.DateUtil
-import com.supwisdom.utils.FileUtil
-import com.supwisdom.utils.ThreadPool
+import com.supwisdom.utils.*
+import com.supwisdom.view.ToastUtil
 import java.io.PrintWriter
 import java.io.StringWriter
-import java.util.HashMap
+import java.util.*
 
 /**
  ** create by zzq on 2019/7/23
diff --git a/app/src/main/java/com/supwisdom/activities/checkMngpwd/CheckMngpwdActivity.kt b/app/src/main/java/com/supwisdom/activities/checkMngpwd/CheckMngpwdActivity.kt
new file mode 100644
index 0000000..007c9cd
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/checkMngpwd/CheckMngpwdActivity.kt
@@ -0,0 +1,138 @@
+package com.supwisdom.activities.checkMngpwd
+
+import android.content.Intent
+import android.os.Bundle
+import android.os.CountDownTimer
+import android.view.KeyEvent
+import android.widget.TextView
+import com.supwisdom.R
+import com.supwisdom.activities.BaseActivity
+import com.supwisdom.activities.manage.ManageActivity
+import com.supwisdom.auxscreen.AuxScreenController
+import com.supwisdom.utils.CommonUtil
+import java.util.*
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+class CheckMngpwdActivity : BaseActivity() {
+    private var tmpPwd: String = ""
+    private lateinit var vTitle: TextView
+    private var password: String = ""
+    private var mode: String? = null
+    private var keyActive = true
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        this.setContentView(R.layout.activity_check_mngpwd)
+        initView()
+    }
+
+    private fun initView() {
+        vTitle = findViewById<TextView>(R.id.title)
+    }
+
+    override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+        if (event.action == KeyEvent.ACTION_DOWN) {
+            if (!keyActive) {
+                return super.dispatchKeyEvent(event)
+            }
+            resetCounter(200)
+
+            val keyCode = event.keyCode
+            when (keyCode) {
+                KeyEvent.KEYCODE_0,
+                KeyEvent.KEYCODE_1,
+                KeyEvent.KEYCODE_2,
+                KeyEvent.KEYCODE_3,
+                KeyEvent.KEYCODE_4,
+                KeyEvent.KEYCODE_5,
+                KeyEvent.KEYCODE_6,
+                KeyEvent.KEYCODE_7,
+                KeyEvent.KEYCODE_8,
+                KeyEvent.KEYCODE_9 -> {
+                    tmpPwd += keyCode - KeyEvent.KEYCODE_0
+                    if (tmpPwd.length >= 6) {
+                        if (checkMngPwd(tmpPwd)) {
+                            jumpActivity(ManageActivity::class.java)
+                        } else {
+                            AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("维护密码:", "密码错误"))
+                        }
+                        tmpPwd = ""
+                    } else {
+                        AuxScreenController.getInstance()
+                            .refreshContent(Arrays.asList("维护密码:", CommonUtil.getPasswordStar(tmpPwd.length)))
+                    }
+                }
+                KeyEvent.KEYCODE_DEL -> {
+                    //cancel
+                    val len = tmpPwd.length
+                    when {
+                        len == 1 -> {
+                            tmpPwd = ""
+                            AuxScreenController.getInstance()
+                                .refreshContent(Arrays.asList("维护密码:", CommonUtil.getPasswordStar(tmpPwd.length)))
+                        }
+                        len > 1 -> {
+                            tmpPwd = tmpPwd.substring(0, len - 1)
+                            AuxScreenController.getInstance()
+                                .refreshContent(Arrays.asList("维护密码:", CommonUtil.getPasswordStar(tmpPwd.length)))
+                        }
+                        else -> finish()
+                    }
+                }
+            }
+        }
+        return super.dispatchKeyEvent(event)
+    }
+
+    override fun onResume() {
+        super.onResume()
+        keyActive = true
+        password = this.intent.getStringExtra("password")
+        mode = this.intent.getStringExtra("mode")
+        refresh()
+    }
+
+    override fun onNewIntent(intent: Intent) {
+        super.onNewIntent(intent)
+        this.intent.putExtra("password", intent.getStringExtra("password"))
+        this.intent.putExtra("mode", intent.getStringExtra("mode"))
+    }
+
+    private fun refresh() {
+        tmpPwd = ""
+        vTitle.text = "维护密码验证"
+        AuxScreenController.getInstance().refreshTitle("维护密码验证")
+        AuxScreenController.getInstance().refreshBottom("取消键返回上页")
+        AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("维护密码:", " "))
+    }
+
+    private fun checkMngPwd(inputPwd: String): Boolean {
+        return inputPwd == password
+    }
+
+    private var counter: ContinuePressTimer? = null
+
+    private fun resetCounter(timems: Long) {
+        counter?.cancel()
+        if (counter == null) {
+            counter = ContinuePressTimer(timems, 100)
+        }
+        keyActive = false
+        counter!!.start()
+    }
+
+    private inner class ContinuePressTimer internal constructor(millisInFuture: Long, countDownInterval: Long) :
+        CountDownTimer(millisInFuture, countDownInterval) {
+
+        override fun onTick(millisUntilFinished: Long) {
+
+        }
+
+        override fun onFinish() {
+            keyActive = true
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/consumeMode/ConsumeModeActivity.kt b/app/src/main/java/com/supwisdom/activities/consumeMode/ConsumeModeActivity.kt
new file mode 100644
index 0000000..2ad9a6f
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/consumeMode/ConsumeModeActivity.kt
@@ -0,0 +1,237 @@
+package com.supwisdom.activities.consumeMode
+
+import android.annotation.SuppressLint
+import android.os.Bundle
+import android.os.CountDownTimer
+import android.view.KeyEvent
+import android.widget.TextView
+import com.supwisdom.R
+import com.supwisdom.activities.BaseActivity
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.menu.MenuActivity
+import com.supwisdom.auxscreen.AuxScreenController
+import com.supwisdom.utils.CommonUtil
+import com.supwisdom.utils.DateUtil
+import com.supwisdom.utils.PublicDef
+import java.util.*
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+class ConsumeModeActivity : BaseActivity() {
+    private lateinit var vPayamt: TextView
+    private val pos = SPApplication.getInstance().getPos()
+    private var keyActive = true
+    private var shoppwdPass = false
+    private var tmpPwd = ""
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        this.setContentView(R.layout.activity_consume_mode)
+        initView()
+    }
+
+    private fun initView() {
+        vPayamt = findViewById<TextView>(R.id.tv_consume_mode_payamt)
+    }
+
+    private fun checkShopPwd(keyCode: Int) {
+        when (keyCode) {
+            KeyEvent.KEYCODE_0,
+            KeyEvent.KEYCODE_1,
+            KeyEvent.KEYCODE_2,
+            KeyEvent.KEYCODE_3,
+            KeyEvent.KEYCODE_4,
+            KeyEvent.KEYCODE_5,
+            KeyEvent.KEYCODE_6,
+            KeyEvent.KEYCODE_7,
+            KeyEvent.KEYCODE_8,
+            KeyEvent.KEYCODE_9 -> {
+                tmpPwd += keyCode - KeyEvent.KEYCODE_0
+                if (tmpPwd.length >= 6) {
+                    if (checkShoPwdValid(tmpPwd)) {
+                        shoppwdPass = true
+                        refreshToSetAmount()
+                    } else {
+                        AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("请输入商户密码:", "密码错误"))
+                    }
+                    tmpPwd = ""
+                } else {
+                    AuxScreenController.getInstance()
+                        .refreshContent(Arrays.asList("请输入商户密码:", CommonUtil.getPasswordStar(tmpPwd.length)))
+                }
+            }
+            KeyEvent.KEYCODE_DEL -> {
+                //cancel
+                val len = tmpPwd.length
+                when {
+                    len == 1 -> {
+                        tmpPwd = ""
+                        AuxScreenController.getInstance()
+                            .refreshContent(Arrays.asList("请输入商户密码:", CommonUtil.getPasswordStar(tmpPwd.length)))
+                    }
+                    len > 1 -> {
+                        tmpPwd = tmpPwd.substring(0, len - 1)
+                        AuxScreenController.getInstance()
+                            .refreshContent(Arrays.asList("请输入商户密码:", CommonUtil.getPasswordStar(tmpPwd.length)))
+                    }
+                    else -> finish()
+                }
+            }
+        }
+    }
+
+    private fun checkShoPwdValid(inputPwd: String): Boolean {
+        return inputPwd == pos.getConfigPara()!!.shopPwd
+    }
+
+    private fun setFixAmount(keyCode: Int) {
+        when (keyCode) {
+            KeyEvent.KEYCODE_0,
+            KeyEvent.KEYCODE_1,
+            KeyEvent.KEYCODE_2,
+            KeyEvent.KEYCODE_3,
+            KeyEvent.KEYCODE_4,
+            KeyEvent.KEYCODE_5,
+            KeyEvent.KEYCODE_6,
+            KeyEvent.KEYCODE_7,
+            KeyEvent.KEYCODE_8,
+            KeyEvent.KEYCODE_9 -> addValueToEdit(keyCode - KeyEvent.KEYCODE_0)
+            KeyEvent.KEYCODE_DEL ->
+                //cancel
+                delValueToEdit()
+            KeyEvent.KEYCODE_POUND, KeyEvent.KEYCODE_PERIOD -> {
+                val str = vPayamt.text.toString()
+                if (str.length < 8 && str.indexOf('.') < 0) {
+                    vPayamt.text = "$str."
+                    screenShowAmt()
+                }
+            }
+            KeyEvent.KEYCODE_ENTER -> {
+                pos.replaceControlPara(PublicDef.CONTROL_FIXAMT, getFixAmount())
+                jumpActivity(MenuActivity::class.java)
+            }
+        }
+    }
+
+    @SuppressLint("SetTextI18n")
+    override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+        if (event.action == KeyEvent.ACTION_DOWN) {
+            if (!keyActive) {
+                return super.dispatchKeyEvent(event)
+            }
+            resetCounter(200)
+            if (shoppwdPass) {
+                setFixAmount(event.keyCode)
+            } else {
+                checkShopPwd(event.keyCode)
+            }
+        }
+        return super.dispatchKeyEvent(event)
+    }
+
+    override fun onResume() {
+        super.onResume()
+        shoppwdPass = false
+        keyActive = true
+        refreshToCheckPasswd()
+    }
+
+    private fun refreshToCheckPasswd() {
+        AuxScreenController.getInstance().refreshTitle("消费模式设置")
+        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDate())
+        AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("请输入商户密码:", " "))
+    }
+
+    private fun refreshToSetAmount() {
+        val record = pos.getControlPara(PublicDef.CONTROL_FIXAMT)
+        if (record != null && PublicDef.CONTROL_NO_FIXPAY_FLAG != record.paraval) {
+            vPayamt.text = String.format("%.02f", Integer.parseInt(record.paraval) / 100.0f)
+        } else {
+            vPayamt.text = PublicDef.CONTROL_NO_FIXPAY_FLAG
+        }
+        screenShowAmt()
+    }
+
+    private fun getFixAmount(): String {
+        try {
+            return Integer.toString(CommonUtil.YuanToFen(java.lang.Double.parseDouble(vPayamt.text.toString())))
+        } catch (e: Exception) {
+            e.printStackTrace()
+        }
+
+        return PublicDef.CONTROL_NO_FIXPAY_FLAG
+    }
+
+    private fun addValueToEdit(value: Int) {
+        var str = vPayamt.text.toString()
+        if ("0" == str || PublicDef.CONTROL_NO_FIXPAY_FLAG == str) {
+            str = ""
+        }
+        //如果已经有小数点,则小数点后面不能超过两位
+        if (str.indexOf(".") > 0) {
+            if (str.length - str.indexOf(".") <= 2) {
+                vPayamt.text = "$str$value"
+            } else {
+                vPayamt.text = value.toString()
+            }
+        } else {
+            //限制消费金额<1000
+            if (str.length < 3) {
+                vPayamt.text = "$str$value"
+            }
+        }
+        screenShowAmt()
+    }
+
+    private fun delValueToEdit() {
+        val str = vPayamt.text.toString()
+        if (PublicDef.CONTROL_NO_FIXPAY_FLAG != str) {
+            if (str.length <= 1) {
+                vPayamt.text = PublicDef.CONTROL_NO_FIXPAY_FLAG
+            } else {
+                vPayamt.text = str.substring(0, str.length - 1)
+            }
+        }
+        screenShowAmt()
+    }
+
+    private fun screenShowAmt() {
+        AuxScreenController.getInstance().refreshContent(
+            Arrays.asList<String>(
+                PublicDef.CONTROL_NO_FIXPAY_FLAG + "-普通消费",
+                "值-定额消费(元)",
+                String.format("金额:%s", vPayamt.text.toString())
+            )
+        )
+
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+    }
+
+    private var counter: ContinuePressTimer? = null
+
+    private fun resetCounter(timems: Long) {
+        counter?.cancel()
+        if (counter == null) {
+            counter = ContinuePressTimer(timems, 100)
+        }
+        keyActive = false
+        counter!!.start()
+    }
+
+    private inner class ContinuePressTimer internal constructor(millisInFuture: Long, countDownInterval: Long) :
+        CountDownTimer(millisInFuture, countDownInterval) {
+
+        override fun onTick(millisUntilFinished: Long) {
+
+        }
+
+        override fun onFinish() {
+            keyActive = true
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/control/ControlActivity.kt b/app/src/main/java/com/supwisdom/activities/control/ControlActivity.kt
index e8dacdb..0ab3436 100644
--- a/app/src/main/java/com/supwisdom/activities/control/ControlActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/control/ControlActivity.kt
@@ -59,7 +59,7 @@
             } else {
                 "0"
             }
-            if (!saveControlPara(PublicDef.CONTROL_OFFLINE_DAY_DISABLE, flag)) {
+            if (!pos.replaceControlPara(PublicDef.CONTROL_OFFLINE_DAY_DISABLE, flag)) {
                 showSWToastInfo("脱机天数判断保存失败", PublicDef.TOAST_SHOW_CRY)
                 return@setOnClickListener
             }
@@ -69,7 +69,7 @@
             } else {
                 "0"
             }
-            if (!saveControlPara(PublicDef.CONTROL_DEBUG_ENABLE, flag)) {
+            if (!pos.replaceControlPara(PublicDef.CONTROL_DEBUG_ENABLE, flag)) {
                 showSWToastInfo("日志调试保存失败", PublicDef.TOAST_SHOW_CRY)
                 return@setOnClickListener
             }
@@ -115,11 +115,4 @@
         AuxScreenController.getInstance().refreshBottom("确定键返回上页")
         AuxScreenController.getInstance().refreshContent(listOf<String>("请到大屏进行配置"))
     }
-
-    private fun saveControlPara(paraname: String, paraval: String): Boolean {
-        val record = ControlParaRecord()
-        record.paraname = paraname
-        record.paraval = paraval
-        return pos.replaceControlPara(record)
-    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/init/InitPresenter.kt b/app/src/main/java/com/supwisdom/activities/init/InitPresenter.kt
index 7f19261..86dee25 100644
--- a/app/src/main/java/com/supwisdom/activities/init/InitPresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/init/InitPresenter.kt
@@ -69,10 +69,5 @@
         iInitView.jumpToNextActivity()
     }
 
-    fun saveControlPara(name: String, value: String): Boolean {
-        val record = pos.getControlPara(name) ?: ControlParaRecord()
-        record.paraname = name
-        record.paraval = value
-        return pos.replaceControlPara(record)
-    }
+
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/init/mode/NsdClientApi.kt b/app/src/main/java/com/supwisdom/activities/init/mode/NsdClientApi.kt
index 79d8813..5b1785c 100644
--- a/app/src/main/java/com/supwisdom/activities/init/mode/NsdClientApi.kt
+++ b/app/src/main/java/com/supwisdom/activities/init/mode/NsdClientApi.kt
@@ -6,9 +6,9 @@
 import com.supwisdom.activities.init.bean.EcardConfigParamRetBean
 import com.supwisdom.activities.init.bean.NsdServerConfigRetBean
 import com.supwisdom.okhttp.NetworkHandler
-import com.supwisdom.utilities.CommonUtil
-import com.supwisdom.utilities.GsonUtil
-import com.supwisdom.utilities.PublicDef
+import com.supwisdom.utils.CommonUtil
+import com.supwisdom.utils.GsonUtil
+import com.supwisdom.utils.PublicDef
 import org.apache.http.HttpStatus
 
 /**
@@ -21,13 +21,12 @@
 
     fun getEcardConfigParam(configName: String): EcardConfigParamBean {
         val resp = NetworkHandler.getInstance().get("$url/ns/$configName", null)
-                ?: return EcardConfigParamBean(PublicDef.ERROR, "请求超时")
+            ?: return EcardConfigParamBean(PublicDef.ERROR, "请求超时")
         if (resp.retcode != HttpStatus.SC_OK) {
             return EcardConfigParamBean(resp.retcode, "错误码=${resp.retcode},${resp.retmsg}")
         }
         try {
-            val retBean = GsonUtil.GsonToBean(resp.retjson, EcardConfigParamRetBean::class.java)
-                    ?: return EcardConfigParamBean(PublicDef.ERROR, "解析为空")
+            val retBean = GsonUtil.GsonToBean(resp.retjson!!, EcardConfigParamRetBean::class.java)
             val ret = EcardConfigParamBean(PublicDef.SUCCESS, "获取成功")
             ret.systime = retBean.system
             retBean.url!!.split("&", " ").forEach {
@@ -68,7 +67,7 @@
 
     fun getNsdServerConfigList(): NsdServerConfigRetBean {
         val resp = NetworkHandler.getInstance().get("$url/list", null)
-                ?: return NsdServerConfigRetBean(PublicDef.ERROR, "请求超时")
+            ?: return NsdServerConfigRetBean(PublicDef.ERROR, "请求超时")
         if (resp.retcode != HttpStatus.SC_OK) {
             return NsdServerConfigRetBean(resp.retcode, "错误码=${resp.retcode},${resp.retmsg}")
         }
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 d72769f..2ee27f4 100644
--- a/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt
@@ -5,13 +5,11 @@
 import android.os.Message
 import com.supwisdom.activities.SPApplication
 import com.supwisdom.activities.YktSession
-import com.supwisdom.entity.ControlParaRecord
 import com.supwisdom.service.AuthEpay
 import com.supwisdom.service.EpayApiImpl
 import com.supwisdom.utils.CommonUtil
 import com.supwisdom.utils.PublicDef
 import com.supwisdom.utils.ThreadPool
-import java.lang.Exception
 
 /**
  ** create by zzq on 2019/7/24
@@ -72,8 +70,8 @@
 
                 // 保存流水号
                 if (!hasInit) {
-                    saveControlPara(PublicDef.CONTROL_TRANSDTLONL_SEQNO, bean.onlineseqno.toString())
-                    saveControlPara(PublicDef.CONTROL_TRANSDTLOFF_SEQNO, bean.offlineseqno.toString())
+                    pos.replaceControlPara(PublicDef.CONTROL_TRANSDTLONL_SEQNO, bean.onlineseqno.toString())
+                    pos.replaceControlPara(PublicDef.CONTROL_TRANSDTLOFF_SEQNO, bean.offlineseqno.toString())
                 }
 
                 SPApplication.getInstance().setEpayLinking(true)
@@ -109,23 +107,12 @@
             cfgRecord = pos.getConfigPara()
             cfgRecord!!.initOK = true
             pos.replaceConfigPara(cfgRecord!!)
-
-            val ctlRecord = pos.getControlPara(PublicDef.CONTROL_HAS_REGISTER) ?: ControlParaRecord()
-            ctlRecord.paraname = PublicDef.CONTROL_HAS_REGISTER
-            ctlRecord.paraval = "1"
-            pos.replaceControlPara(ctlRecord)
+            pos.replaceControlPara(PublicDef.CONTROL_HAS_REGISTER, "1")
 
             sendMessage(LOAD_SUCCESS, "加载成功")
         })
     }
 
-    private fun saveControlPara(paraname: String, paraval: String): Boolean {
-        val para = ControlParaRecord()
-        para.paraname = paraname
-        para.paraval = paraval
-        return pos.replaceControlPara(para)
-    }
-
     private fun createHandler() {
         handler = object : Handler(Looper.getMainLooper()) {
             override fun handleMessage(msg: Message) {
diff --git a/app/src/main/java/com/supwisdom/activities/manage/ManageActivity.kt b/app/src/main/java/com/supwisdom/activities/manage/ManageActivity.kt
index 1fca144..f5749c1 100644
--- a/app/src/main/java/com/supwisdom/activities/manage/ManageActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/manage/ManageActivity.kt
@@ -8,7 +8,11 @@
 import com.supwisdom.activities.SPApplication
 import com.supwisdom.activities.communicate.CommunicateActivity
 import com.supwisdom.activities.control.ControlActivity
+import com.supwisdom.activities.menu.MenuActivity
+import com.supwisdom.activities.upgrade.UpgradeActivity
 import com.supwisdom.auxscreen.AuxScreenController
+import com.supwisdom.utils.AppExitUtil
+import com.supwisdom.utils.CommonUtil
 import com.supwisdom.utils.DateUtil
 import java.util.*
 
@@ -64,48 +68,50 @@
                 KeyEvent.KEYCODE_3 -> {
                     //查询流水
                     flag = true
-                    AuxScreenController.Companion.getInstance().refreshContent(Arrays.asList<T>("流水查询:", "暂不支持"))
+                    AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("流水查询:", "暂不支持"))
                 }
                 KeyEvent.KEYCODE_4 -> {
                     flag = true
                     isRunning = true
-                    AuxScreenController.Companion.getInstance().refreshContent(Arrays.asList<T>("正在导出流水", "请稍等..."))
-                    presenter!!.doOutTransdtl()
+                    AuxScreenController.getInstance()
+                        .refreshContent(Arrays.asList<String>("正在导出流水", "请稍等..."))
+                    presenter!!.outTransdtl()
                 }
-                KeyEvent.KEYCODE_5 -> jumpActivity(UpgradeActivity::class.java!!)
+                KeyEvent.KEYCODE_5 -> jumpActivity(UpgradeActivity::class.java)
                 KeyEvent.KEYCODE_6 -> {
-                    CommonUtil.sendBroadcast(applicationContext, false)
-                    AuxScreenController.Companion.getInstance().refreshContent(Arrays.asList<T>("应用程序已退出", "请到大屏操作"))
+                    AuxScreenController.getInstance()
+                        .refreshContent(Arrays.asList<String>("应用程序已退出", "请到大屏操作"))
                     AppExitUtil.exit()
                 }
                 KeyEvent.KEYCODE_7 -> {
-                    CommonUtil.sendBroadcast(applicationContext, false)
-                    AuxScreenController.Companion.getInstance().refreshContent(Arrays.asList<T>("应用程序已退出", "请到大屏操作"))
+                    AuxScreenController.getInstance()
+                        .refreshContent(Arrays.asList<String>("应用程序已退出", "请到大屏操作"))
                     CommonUtil.startNetSetting(this)
                 }
                 KeyEvent.KEYCODE_8 -> {
                     flag = true
                     isRunning = true
-                    AuxScreenController.Companion.getInstance().refreshContent(Arrays.asList<T>("正在清空黑名单", "请稍等..."))
-                    presenter!!.doClearBlacklist()
+                    AuxScreenController.getInstance()
+                        .refreshContent(Arrays.asList<String>("正在清空白名单", "请稍等..."))
+                    presenter!!.clearAndUpdateWhitelist()
                 }
                 KeyEvent.KEYCODE_9 -> jumpActivity(ControlActivity::class.java)
                 KeyEvent.KEYCODE_DEL ->
                     //cancel
-                    jumpActivity(MenuActivity::class.java!!)
+                    jumpActivity(MenuActivity::class.java)
             }
         }
         return super.dispatchKeyEvent(event)
     }
 
     override fun showOperHint(hint: String, result: String) {
-        AuxScreenController.getInstance().refreshContent(Arrays.asList<T>(hint, result))
+        AuxScreenController.getInstance().refreshContent(Arrays.asList<String>(hint, result))
     }
 
     override fun showOperResult(hint: String, result: String) {
         flag = true
         isRunning = false
-        AuxScreenController.getInstance().refreshContent(Arrays.asList<T>(hint, result))
+        AuxScreenController.getInstance().refreshContent(Arrays.asList<String>(hint, result))
     }
 
     override fun onResume() {
@@ -136,24 +142,16 @@
 
     private fun showShopPassword() {
         AuxScreenController.getInstance()
-            .refreshContent(Arrays.asList("商户密码:", pos!!.getConfigPara().getShopPwd()))
-    }
-
-    private fun showClearBlacklist() {
-        presenter!!.doClearBlacklist()
-    }
-
-    private fun showReloadTransdtl() {
-        presenter!!.doReloadTransdtl()
+            .refreshContent(Arrays.asList<String>("商户密码:", pos.getConfigPara()!!.shopPwd))
     }
 
     private var counter: ContinuePressTimer? = null
 
     private fun resetCounter(timems: Long) {
+        counter?.cancel()
         if (counter == null) {
             counter = ContinuePressTimer(timems, 100)
         }
-        counter!!.cancel()
         keyActive = false
         counter!!.start()
     }
diff --git a/app/src/main/java/com/supwisdom/activities/menu/IMenuView.kt b/app/src/main/java/com/supwisdom/activities/menu/IMenuView.kt
index eefb65f..ff202b4 100644
--- a/app/src/main/java/com/supwisdom/activities/menu/IMenuView.kt
+++ b/app/src/main/java/com/supwisdom/activities/menu/IMenuView.kt
@@ -1,10 +1,14 @@
 package com.supwisdom.activities.menu
 
+import android.app.Activity
+
 /**
  ** create by zzq on 2019/7/25
  ** @desc
  **/
 interface IMenuView {
+    fun getActivity(): Activity
+
     fun showOperHint(title: String, result: String)
 
     fun showOperResult(title: String, result: String)
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 2dd7b47..e12a6eb 100644
--- a/app/src/main/java/com/supwisdom/activities/menu/MenuActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/menu/MenuActivity.kt
@@ -1,10 +1,174 @@
 package com.supwisdom.activities.menu
 
+import android.app.Activity
+import android.content.Intent
+import android.os.Bundle
+import android.os.CountDownTimer
+import android.view.KeyEvent
+import android.view.View
+import android.widget.TextView
+import com.supwisdom.R
 import com.supwisdom.activities.BaseActivity
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.checkMngpwd.CheckMngpwdActivity
+import com.supwisdom.activities.consume.ConsumeActivity
+import com.supwisdom.activities.consumeMode.ConsumeModeActivity
+import com.supwisdom.activities.passwd.PasswdActivity
+import com.supwisdom.activities.revenue.RevenueActivity
+import com.supwisdom.activities.syspara.SysparaActivity
+import com.supwisdom.auxscreen.AuxScreenController
+import com.supwisdom.utils.DateUtil
+import com.supwisdom.utils.PublicDef
+import java.util.*
 
 /**
  ** create by zzq on 2019/7/25
  ** @desc
  **/
-class MenuActivity : BaseActivity() {
+class MenuActivity : BaseActivity(), IMenuView {
+    private lateinit var presenter: MenuPresenter
+    private val pos = SPApplication.getInstance().getPos()
+    private var isRunning: Boolean = false
+    private var flag: Boolean = false
+    private lateinit var vReverse: TextView
+    private var keyActive = true
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        this.setContentView(R.layout.activity_menu)
+        initView()
+        initData()
+    }
+
+    private fun initData() {
+        presenter = MenuPresenter(this)
+    }
+
+    private fun initView() {
+        vReverse = this.findViewById<View>(R.id.tv_reverse) as TextView
+    }
+
+    override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+        if (event.action == KeyEvent.ACTION_DOWN) {
+            if (isRunning || !keyActive) {
+                return super.dispatchKeyEvent(event)
+            }
+            resetCounter(200)
+
+            val keyCode = event.keyCode
+            if (flag) {
+                return if (KeyEvent.KEYCODE_DEL == keyCode) {
+                    refresh()
+                    true
+                } else {
+                    false
+                }
+            }
+            when (keyCode) {
+                KeyEvent.KEYCODE_1 -> jumpActivity(RevenueActivity::class.java)
+                KeyEvent.KEYCODE_2 -> {
+                    isRunning = true
+                    presenter.doUploadTransdtl()
+                }
+                KeyEvent.KEYCODE_3 -> {
+                    isRunning = true
+                    presenter.linkCheck()
+                }
+                KeyEvent.KEYCODE_4 -> {
+                    isRunning = true
+                    presenter.manualAuth()
+                }
+                KeyEvent.KEYCODE_5 -> jumpActivity(SysparaActivity::class.java)
+                KeyEvent.KEYCODE_6 -> {
+                    val intent = Intent()
+                    intent.putExtra("password", pos.getSysPara()!!.mngPasswd)
+                    intent.setClass(this, CheckMngpwdActivity::class.java)
+                    startActivity(intent)
+                }
+                KeyEvent.KEYCODE_7 -> jumpActivity(PasswdActivity::class.java)
+                KeyEvent.KEYCODE_8 ->
+                    //设置消费方式
+                    jumpActivity(ConsumeModeActivity::class.java)
+                KeyEvent.KEYCODE_9 -> if (isSupportReverse()) {
+                    presenter.doReverse()
+                }
+                KeyEvent.KEYCODE_DEL ->
+                    //cancel
+                    jumpActivity(ConsumeActivity::class.java)
+                KeyEvent.KEYCODE_ENTER -> jumpActivity(ConsumeActivity::class.java)
+            }
+        }
+        return super.dispatchKeyEvent(event)
+    }
+
+    override fun onResume() {
+        super.onResume()
+        keyActive = true
+        refresh()
+    }
+
+    override fun showOperHint(title: String, result: String) {
+        AuxScreenController.getInstance().refreshContent(Arrays.asList<String>(title, result))
+    }
+
+    override fun showOperResult(title: String, result: String) {
+        flag = true
+        isRunning = false
+        AuxScreenController.getInstance().refreshContent(Arrays.asList<String>(title, result))
+    }
+
+    override fun getActivity(): Activity {
+        return this
+    }
+
+    private fun refresh() {
+        isRunning = false
+        flag = false
+        val secList = ArrayList<String>()
+        secList.add(getString(R.string.consume_menu_revenue))
+        secList.add(getString(R.string.consume_menu_transdtl_upload))
+        secList.add(getString(R.string.consume_menu_link_check))
+        secList.add(getString(R.string.consume_menu_auth))
+        secList.add(getString(R.string.consume_menu_syspara_query))
+        secList.add(getString(R.string.consume_menu_manage))
+        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
+            secList.add(getString(R.string.consume_menu_reverse))
+        } else {
+            vReverse!!.visibility = View.GONE
+        }
+        AuxScreenController.getInstance().refreshTitle("设备管理界面")
+        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDate())
+        AuxScreenController.getInstance().refreshContent(secList)
+    }
+
+    private fun isSupportReverse(): Boolean {
+        val sysRecord = SPApplication.getInstance().getPos().getSysPara()
+        return sysRecord != null && sysRecord.returnFlag and 0x1 == 1
+    }
+
+    private var counter: ContinuePressTimer? = null
+
+    private fun resetCounter(timems: Long) {
+        counter?.cancel()
+        if (counter == null) {
+            counter = ContinuePressTimer(timems, 100)
+        }
+        keyActive = false
+        counter!!.start()
+    }
+
+    private inner class ContinuePressTimer internal constructor(millisInFuture: Long, countDownInterval: Long) :
+        CountDownTimer(millisInFuture, countDownInterval) {
+
+        override fun onTick(millisUntilFinished: Long) {
+
+        }
+
+        override fun onFinish() {
+            keyActive = true
+        }
+    }
 }
\ No newline at end of file
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 119018b..bf3ae4d 100644
--- a/app/src/main/java/com/supwisdom/activities/menu/MenuPresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/menu/MenuPresenter.kt
@@ -3,11 +3,15 @@
 import android.content.Intent
 import android.os.AsyncTask
 import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.consume.ConsumeActivity
 import com.supwisdom.bean.AuthRetBean
 import com.supwisdom.bean.BaseResp
+import com.supwisdom.entity.PayStatus
+import com.supwisdom.entity.ReversalFlag
+import com.supwisdom.exception.HeartBeatError
+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
 
@@ -56,8 +60,12 @@
 
     private inner class AsyncLink : AsyncTask<Void, Void, BaseResp>() {
         override fun doInBackground(vararg voids: Void): BaseResp {
-//             EpayApiImpl().linkCheck()
-            return BaseResp(PublicDef.ERROR, "暂未实现")
+            return try {
+                EpayApiImpl().linkCheck()
+                BaseResp(PublicDef.SUCCESS, "连接成功")
+            } catch (ex: HeartBeatError) {
+                BaseResp(PublicDef.ERROR, ex.message)
+            }
         }
 
         override fun onPostExecute(baseResp: BaseResp) {
@@ -67,58 +75,33 @@
     }
 
     fun doReverse() {
-        val record = pos.getTransdtlUnionAll(DateUtil.getNowDateNoFormat(), 0)
-        if (record == null) {
+        val list = pos.getTransdtlUnion(DateUtil.getNowDateNoFormat(), 0, 0, 1)
+        if (list.isEmpty()) {
             iMenuView.showOperResult("冲正失败", "未找到消费记录")
             return
         }
-        if (PublicDef.CONSUME_TYPE_BAR.equals(record!!.getConsumetype())) {
-            iMenuView.showOperResult("冲正失败", "正扫不能冲正")
-        } else if (PublicDef.CONSUME_TYPE_SCAN.equals(record!!.getConsumetype()) ||
-            PublicDef.CONSUME_TYPE_OFFBAR.equals(record!!.getConsumetype()) ||
-            PublicDef.CONSUME_TYPE_VIRTUAL.equals(record!!.getConsumetype())
+        val record = list[0]
+        if (record.reversalflag == ReversalFlag.AUTO ||
+            record.reversalflag == ReversalFlag.MANUAL
         ) {
-            if (record!!.getFlag() and 0x80 == PublicDef.TRANSFLAG_REVERSE_CONSUME) {
-                iMenuView.showOperResult("冲正失败", "已冲正")
-                return
-            }
-            if (record!!.getFlag() and PublicDef.TRANSFLAG_UNWRITE_CARD !== PublicDef.TRANSFLAG_WRITE_CARD_SUCCESS) {
-                iMenuView.showOperResult("冲正失败", "消费失败不能冲正")
-                return
-            }
-            val t1 = DateUtil.dateFormatConvertToLong(record!!.getTransdate() + record!!.getTranstime())
-            val t2 = System.currentTimeMillis()
-            if (t2 - t1 > PublicDef.REVERSE_MS_GAP) {
-                iMenuView.showOperResult("冲正失败", "消费已过期")
-                return
-            }
-            val intent = Intent()
-            intent.putExtra("datetime", CommonUtil.getSystemMills())
-            intent.putExtra("amount", record!!.getPayamt() + "")
-            intent.putExtra("consumeType", PublicDef.CONSUME_TYPE_REVERSE)
-            intent.putExtra("transdtlType", record!!.getConsumetype())
-            intent.setClass(context, CheckShoppwdActivity::class.java!!)
-            context.startActivity(intent)
-        } else if (PublicDef.CONSUME_TYPE_CRD.equals(record!!.getConsumetype()) || PublicDef.CONSUME_TYPE_ONL.equals(
-                record!!.getConsumetype()
-            )
-        ) {
-            val intent = Intent()
-            intent.putExtra("datetime", CommonUtil.getSystemMills())
-            intent.putExtra("amount", record!!.getPayamt() + "")
-            intent.putExtra("consumeType", PublicDef.CONSUME_TYPE_REVERSE)
-
-            if (pos.getConfigPara().getMode() === PublicDef.TERMINAL_THIRD_PAY_MODE) {
-                intent.setClass(context, ThirdPayActivity::class.java!!)
-            } else if (pos.getConfigPara().getMode() === PublicDef.TERMINAL_THIRD_LOGIN_MODE) {
-                intent.setClass(context, ThirdLoginActivity::class.java!!)
-            } else {
-                intent.setClass(context, PayActivity::class.java!!)
-            }
-            context.startActivity(intent)
-        } else {
-            iMenuView.showOperResult("冲正失败", "不支持类型:" + record!!.getConsumetype())
+            iMenuView.showOperResult("冲正失败", "已冲正")
+            return
         }
+        if (record.status != PayStatus.SUC) {
+            iMenuView.showOperResult("冲正失败", "消费失败不能冲正")
+            return
+        }
+        val t1 = DateUtil.dateFormatConvertToLong(record.transdate + record.transtime)
+        val t2 = System.currentTimeMillis()
+        if (t2 - t1 > PublicDef.REVERSE_MS_GAP) {
+            iMenuView.showOperResult("冲正失败", "消费已过期")
+            return
+        }
+        val intent = Intent()
+        intent.putExtra("amount", record.payamt.toString())
+        intent.putExtra("payway", record.payway)
+        intent.setClass(iMenuView.getActivity(), ConsumeActivity::class.java)
+        iMenuView.getActivity().startActivity(intent)
     }
 
     fun doUploadTransdtl() {
@@ -126,99 +109,27 @@
         UploadTransdtl().execute()
     }
 
-    private inner class UploadTransdtl : AsyncTask<Int, Int, BaseResp>() {
-        protected override fun doInBackground(vararg params: Int): BaseResp {
-            val apiInterface = SPApplication.getInstance().getAPIMode()
+    private inner class UploadTransdtl : AsyncTask<Void, Void, BaseResp>() {
+        override fun doInBackground(vararg voids: Void): BaseResp {
+            val apiInterface = EpayApiImpl()
             var num = 0
-            val onlList = pos.getTransdtlReverse(null)
-            if (onlList != null) {
-                num += onlList!!.size
-                for (i in onlList!!.indices) {
-                    val record = onlList!!.get(i)
-                    val resp = apiInterface.uploadTransdtl(record)
-                    if (resp == null) {
-                        return BaseResp(PublicDef.ERROR, "通讯超时")
-                    } else if (resp!!.retcode != PublicDef.SUCCESS) {
-                        return BaseResp(PublicDef.ERROR, resp!!.retmsg)
-                    }
-                    record.setUpflag(1)
-                    if (!pos.updateTransdtlReverse(record)) {
-                        return BaseResp(PublicDef.ERROR, "保存流水失败")
-                    }
+            try {
+                pos.getTransdtlOfflineUnconfirm().forEach {
+                    apiInterface.uploadTransdtl(it)
+                    it.upflag = 1
+                    pos.updateTransdtlOffline(it)
+                    num += 1
                 }
-            }
-
-            val crdList = pos.getTransdtlCreditUnconfirm()
-            if (crdList != null) {
-                num += crdList!!.size
-                for (i in crdList!!.indices) {
-                    val record = crdList!!.get(i)
-                    val resp = apiInterface.uploadTransdtl(record, false)
-                    if (resp == null) {
-                        return BaseResp(PublicDef.ERROR, "通讯超时")
-                    } else if (resp!!.retcode != PublicDef.SUCCESS) {
-                        return BaseResp(PublicDef.ERROR, resp!!.retmsg)
-                    }
-                    record.setUpflag(1)
-                    if (!pos.updateTransdtlCredit(record)) {
-                        return BaseResp(PublicDef.ERROR, "保存流水失败")
-                    }
+                pos.getTransdtlOnlineUnconfirm().forEach {
+                    apiInterface.uploadTransdtl(it)
+                    it.upflag = 1
+                    pos.updateTransdtlOnline(it)
+                    num += 1
                 }
+                return BaseResp(PublicDef.SUCCESS, "上传共" + num + "条")
+            } catch (ex: TransdtlUploadError) {
+                return BaseResp(PublicDef.ERROR, ex.message)
             }
-
-            val barcodeList = pos.getTransdtlBarcodeUnconfirm()
-            if (barcodeList != null) {
-                num += barcodeList!!.size
-                for (i in barcodeList!!.indices) {
-                    val record = barcodeList!!.get(i)
-                    val resp = apiInterface.uploadTransdtl(record)
-                    if (resp == null) {
-                        return BaseResp(PublicDef.ERROR, "通讯超时")
-                    } else if (resp!!.retcode != PublicDef.SUCCESS) {
-                        return BaseResp(PublicDef.ERROR, resp!!.retmsg)
-                    }
-                    record.setUpflag(1)
-                    if (!pos.updateTransdtlBarcode(record)) {
-                        return BaseResp(PublicDef.ERROR, "保存流水失败")
-                    }
-                }
-            }
-
-            val bm1List = pos.getTransdtlBM1Unconfirm()
-            if (bm1List != null) {
-                num += bm1List!!.size
-                for (i in bm1List!!.indices) {
-                    val record = bm1List!!.get(i)
-                    val resp = apiInterface.uploadTransdtl(record)
-                    if (resp == null) {
-                        return BaseResp(PublicDef.ERROR, "通讯超时")
-                    } else if (resp!!.retcode != PublicDef.SUCCESS) {
-                        return BaseResp(PublicDef.ERROR, resp!!.retmsg)
-                    }
-                    record.setUpflag(1)
-                    if (!pos.updateTransdtlBM1(record)) {
-                        return BaseResp(PublicDef.ERROR, "保存流水失败")
-                    }
-                }
-            }
-            val gateList = pos.getTransdtlGateUnconfirm()
-            if (gateList != null) {
-                num += gateList!!.size
-                for (i in gateList!!.indices) {
-                    val record = gateList!!.get(i)
-                    val resp = apiInterface.uploadTransdtl(record)
-                    if (resp == null) {
-                        return BaseResp(PublicDef.ERROR, "通讯超时")
-                    } else if (resp!!.retcode != PublicDef.SUCCESS) {
-                        return BaseResp(PublicDef.ERROR, resp!!.retmsg)
-                    }
-                    record.setUpflag(1)
-                    if (!pos.updateTransdtlGate(record)) {
-                        return BaseResp(PublicDef.ERROR, "保存流水失败")
-                    }
-                }
-            }
-            return BaseResp(PublicDef.SUCCESS, "上传共" + num + "条")
         }
 
         override fun onPostExecute(resp: BaseResp) {
diff --git a/app/src/main/java/com/supwisdom/activities/passwd/PasswdActivity.kt b/app/src/main/java/com/supwisdom/activities/passwd/PasswdActivity.kt
new file mode 100644
index 0000000..adff026
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/passwd/PasswdActivity.kt
@@ -0,0 +1,185 @@
+package com.supwisdom.activities.passwd
+
+import android.os.Bundle
+import android.os.CountDownTimer
+import android.view.KeyEvent
+import com.supwisdom.R
+import com.supwisdom.activities.BaseActivity
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.auxscreen.AuxScreenController
+import com.supwisdom.utils.CommonUtil
+import com.supwisdom.utils.DateUtil
+import java.util.*
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc 商户密码修改
+ **/
+class PasswdActivity : BaseActivity() {
+    private lateinit var oldPwd: String
+    private lateinit var newPwd: String
+    private lateinit var newPwd1: String
+    private lateinit var tmpPwd: String
+    private lateinit var passwdHint: String
+    private val pos = SPApplication.getInstance().getPos()
+    private var step = 0
+    private var keyActive = true
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        this.setContentView(R.layout.activity_password)
+    }
+
+    override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+        if (event.action == KeyEvent.ACTION_DOWN) {
+            if (!keyActive) {
+                return super.dispatchKeyEvent(event)
+            }
+            resetCounter(200)
+
+            if (step == 3) {
+                refresh()
+            }
+            val keyCode = event.keyCode
+            when (keyCode) {
+                KeyEvent.KEYCODE_0,
+                KeyEvent.KEYCODE_1,
+                KeyEvent.KEYCODE_2,
+                KeyEvent.KEYCODE_3,
+                KeyEvent.KEYCODE_4,
+                KeyEvent.KEYCODE_5,
+                KeyEvent.KEYCODE_6,
+                KeyEvent.KEYCODE_7,
+                KeyEvent.KEYCODE_8,
+                KeyEvent.KEYCODE_9 -> {
+                    if (step == 4) {
+                        step = 0
+                        passwdHint = "输入原密码:"
+                    }
+                    tmpPwd += keyCode - KeyEvent.KEYCODE_0
+                    if (tmpPwd.length == 6) {
+                        if (step == 0) {
+                            oldPwd = tmpPwd
+                            tmpPwd = ""
+                            if (checkOldPasswd()) {
+                                step = 1
+                                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>("密码修改成功", " "))
+                                step = 3
+                                return true
+                            }
+                            step = 4
+                            return true
+                        }
+                        tmpPwd = ""
+                    }
+                    AuxScreenController.getInstance()
+                        .refreshContent(Arrays.asList(passwdHint, CommonUtil.getPasswordStar(tmpPwd.length)))
+                    return true
+                }
+                KeyEvent.KEYCODE_ENTER -> {
+                }
+                KeyEvent.KEYCODE_DEL -> {
+                    val len = tmpPwd.length
+                    when {
+                        len == 1 -> {
+                            tmpPwd = ""
+                            AuxScreenController.getInstance()
+                                .refreshContent(Arrays.asList(passwdHint, CommonUtil.getPasswordStar(tmpPwd.length)))
+                        }
+                        len > 1 -> {
+                            tmpPwd = tmpPwd.substring(0, len - 1)
+                            AuxScreenController.getInstance()
+                                .refreshContent(Arrays.asList(passwdHint, CommonUtil.getPasswordStar(tmpPwd.length)))
+                        }
+                        else -> finish()
+                    }
+                    return true
+                }
+            }
+        }
+        return super.dispatchKeyEvent(event)
+    }
+
+    override fun onResume() {
+        super.onResume()
+        keyActive = true
+        refresh()
+    }
+
+    private fun refresh() {
+        step = 0
+        oldPwd = ""
+        newPwd = ""
+        newPwd1 = ""
+        tmpPwd = ""
+        passwdHint = "输入原密码"
+        AuxScreenController.getInstance().refreshTitle("商户密码修改")
+        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDate())
+        AuxScreenController.getInstance().refreshContent(Arrays.asList<String>(passwdHint, " "))
+    }
+
+    private fun checkOldPasswd(): Boolean {
+        if (oldPwd != pos.getConfigPara()!!.shopPwd) {
+            AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("修改密码错误", "原密码错误"))
+            return false
+        }
+        return true
+    }
+
+    private fun checkAndUpdate(): Boolean {
+        if (newPwd != newPwd1) {
+            AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("修改密码错误", "新密码不一致"))
+            return false
+        }
+        val record = pos.getConfigPara()
+        record!!.shopPwd = newPwd
+        if (!pos.replaceConfigPara(record)) {
+            AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("修改密码错误", "密码保存失败"))
+            return false
+        }
+        return true
+    }
+
+    private var counter: ContinuePressTimer? = null
+
+    private fun resetCounter(timems: Long) {
+        if (counter == null) {
+            counter = ContinuePressTimer(timems, 100)
+        }
+        counter!!.cancel()
+        keyActive = false
+        counter!!.start()
+    }
+
+    private inner class ContinuePressTimer internal constructor(millisInFuture: Long, countDownInterval: Long) :
+        CountDownTimer(millisInFuture, countDownInterval) {
+
+        override fun onTick(millisUntilFinished: Long) {
+
+        }
+
+        override fun onFinish() {
+            keyActive = true
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/revenue/RevenueActivity.kt b/app/src/main/java/com/supwisdom/activities/revenue/RevenueActivity.kt
new file mode 100644
index 0000000..96e7754
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/revenue/RevenueActivity.kt
@@ -0,0 +1,10 @@
+package com.supwisdom.activities.revenue
+
+import com.supwisdom.activities.BaseActivity
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+class RevenueActivity : BaseActivity() {
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt b/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
new file mode 100644
index 0000000..890ad73
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
@@ -0,0 +1,177 @@
+package com.supwisdom.activities.syspara
+
+import android.os.Bundle
+import android.os.CountDownTimer
+import android.view.KeyEvent
+import android.widget.ListView
+import com.supwisdom.R
+import com.supwisdom.activities.BaseActivity
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.menu.MenuActivity
+import com.supwisdom.activities.syspara.adapter.SysparaAdapter
+import com.supwisdom.auxscreen.AuxScreenController
+import com.supwisdom.entity.ControlParaRecord
+import com.supwisdom.utils.CommonUtil
+import java.util.*
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+class SysparaActivity : BaseActivity() {
+    private var pageno: Int = 0
+    private val PAGENUM = 3
+    private val kvMap = hashMapOf<Int, ControlParaRecord>()
+    private var index: Int = 0
+    private val pos = SPApplication.getInstance().getPos()
+    private var keyActive = true
+    private var adapter: SysparaAdapter? = null
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setContentView(R.layout.activity_syspara)
+        initView()
+        initData()
+    }
+
+    private fun initData() {
+        index = 0
+        kvMap[index++] = ControlParaRecord("软件版本>>", CommonUtil.getVersionName(applicationContext))
+        val cfgRecord = pos.getConfigPara()
+        val sysRecord = pos.getSysPara()
+        val dyRecord = pos.getDynamicPara()
+        kvMap[index++] = ControlParaRecord("物理编号>>", cfgRecord!!.devphyid!!)
+        kvMap[index++] = ControlParaRecord("服务器地址>>", cfgRecord.epayIP!!)
+        kvMap[index++] = ControlParaRecord("服务器标识>>", cfgRecord.epayUri!!)
+        kvMap[index++] = ControlParaRecord("服务器端口>>", "" + cfgRecord.epayPort)
+        kvMap[index++] =
+            ControlParaRecord("参数版本号>>", "no:" + dyRecord!!.paraverno + ",id:" + dyRecord.paragroupid)
+        kvMap[index++] = ControlParaRecord("白名单版本>>", dyRecord.cardverno!!)
+        kvMap[index++] = ControlParaRecord("通讯超时>>", String.format("%ds", CommonUtil.getCommunicateTime()))
+        if (sysRecord!!.returnFlag and 0x1 == 1) {
+            kvMap[index++] = ControlParaRecord("冲正使能>>", "启用")
+        } else {
+            kvMap[index++] = ControlParaRecord("冲正使能>>", "禁止")
+        }
+//        if (sysRecord.getSocketSwitch() === 0) {
+//            kvMap[index++] = ControlParaRecord("长连接使能>>", "禁止")
+//        } else {
+//            kvMap[index++] = ControlParaRecord("长连接使能>>", "启用")
+//        }
+        if (SPApplication.getInstance().isOnline()) {
+            kvMap[index++] = ControlParaRecord("网络状态>>", "联机")
+        } 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("%d", pos.getTransdtlOnlineMaxSeqno()))
+        kvMap[index++] = ControlParaRecord("离线流水号>>", String.format("%d", pos.getTransdtlOfflineMaxSeqno()))
+        kvMap[index++] = ControlParaRecord(
+            "未上传流水>>", String.format(
+                "%d", pos.getTransdtlOnlineUnconfirm()
+                        + pos.getTransdtlOfflineUnconfirm()
+            )
+        )
+        kvMap[index++] = ControlParaRecord("定额间隔时间(s)>>", "" + sysRecord.fixpayGap)
+        kvMap[index++] = ControlParaRecord("心跳间隔>>", "${sysRecord.heatBeat}s")
+    }
+
+    private fun initView() {
+        val vParamList = this.findViewById<ListView>(R.id.lv_param) as ListView
+        adapter = SysparaAdapter(this)
+        vParamList.adapter = adapter
+    }
+
+    override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+        if (event.action == KeyEvent.ACTION_DOWN) {
+            if (!keyActive) {
+                return super.dispatchKeyEvent(event)
+            }
+            resetCounter(200)
+
+            when (event.keyCode) {
+                KeyEvent.KEYCODE_DPAD_DOWN -> {
+                    //F3
+                    pageno++
+                    if (kvMap.size <= pageno * PAGENUM) {
+                        pageno--
+                    } else {
+                        showPara()
+                    }
+                    return true
+                }
+                KeyEvent.KEYCODE_DPAD_RIGHT -> {
+                    //F4
+                    if (pageno > 0) {
+                        pageno--
+                        showPara()
+                    }
+                    return true
+                }
+                //case KeyEvent.KEYCODE_DPAD_UP:
+                //F2
+                KeyEvent.KEYCODE_DEL -> {
+                    //cancel
+                    jumpActivity(MenuActivity::class.java)
+                    return true
+                }
+            }
+        }
+        return super.dispatchKeyEvent(event)
+    }
+
+    override fun onResume() {
+        super.onResume()
+        keyActive = true
+        pageno = 0
+        showPara()
+    }
+
+    private fun showPara() {
+        val paraList = ArrayList<ControlParaRecord>()
+        val auxList = ArrayList<String>()
+        for (i in 0 until PAGENUM) {
+            val index = pageno * PAGENUM + i
+            if (index < kvMap.size) {
+                auxList.add(kvMap[index]!!.paraname!!)
+                auxList.add(kvMap[index]!!.paraval!!)
+            } else {
+                auxList.add(" ")
+                auxList.add(" ")
+            }
+        }
+        for (i in 0 until kvMap.size) {
+            paraList.add(kvMap[i]!!)
+        }
+        adapter!!.setList(paraList)
+        adapter!!.notifyDataSetChanged()
+
+        AuxScreenController.getInstance().refreshTitle("设备参数查询")
+        AuxScreenController.getInstance().refreshBottom("F3/F4 切换翻页")
+        AuxScreenController.getInstance().refreshContent(auxList)
+    }
+
+    private var counter: ContinuePressTimer? = null
+
+    private fun resetCounter(timems: Long) {
+        counter?.cancel()
+        if (counter == null) {
+            counter = ContinuePressTimer(timems, 100)
+        }
+        keyActive = false
+        counter!!.start()
+    }
+
+    private inner class ContinuePressTimer internal constructor(millisInFuture: Long, countDownInterval: Long) :
+        CountDownTimer(millisInFuture, countDownInterval) {
+
+        override fun onTick(millisUntilFinished: Long) {
+
+        }
+
+        override fun onFinish() {
+            keyActive = true
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/syspara/adapter/SysparaAdapter.kt b/app/src/main/java/com/supwisdom/activities/syspara/adapter/SysparaAdapter.kt
new file mode 100644
index 0000000..53d7b5d
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/syspara/adapter/SysparaAdapter.kt
@@ -0,0 +1,60 @@
+package com.supwisdom.activities.syspara.adapter
+
+import android.content.Context
+import android.view.View
+import android.view.ViewGroup
+import android.widget.BaseAdapter
+import android.widget.TextView
+import com.supwisdom.R
+import com.supwisdom.entity.ControlParaRecord
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+class SysparaAdapter constructor(context: Context) : BaseAdapter() {
+    private val context = context
+    private val list = ArrayList<ControlParaRecord>()
+
+    fun setList(data: List<ControlParaRecord>?) {
+        list.clear()
+        if (data != null && data.isNotEmpty()) {
+            list.addAll(data)
+        }
+    }
+
+    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
+        val holder: Holder
+        var view = convertView
+        if (view == null) {
+            holder = Holder()
+            view = View.inflate(context, R.layout.item_syspara, null)
+            holder.paraname = view.findViewById(R.id.tv_name) as TextView
+            holder.paraval = view.findViewById(R.id.tv_value) as TextView
+
+            view.tag = holder
+        } else {
+            holder = view.tag as Holder
+        }
+        holder.paraname.text = list[position].paraname
+        holder.paraval.text = list[position].paraval
+        return view!!
+    }
+
+    override fun getItem(position: Int): ControlParaRecord {
+        return list[position]
+    }
+
+    override fun getItemId(position: Int): Long {
+        return position.toLong()
+    }
+
+    override fun getCount(): Int {
+        return list.size
+    }
+
+    private inner class Holder {
+        lateinit var paraname: TextView
+        lateinit var paraval: TextView
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/upgrade/UpgradeAcvitity.kt b/app/src/main/java/com/supwisdom/activities/upgrade/UpgradeActivity.kt
similarity index 98%
rename from app/src/main/java/com/supwisdom/activities/upgrade/UpgradeAcvitity.kt
rename to app/src/main/java/com/supwisdom/activities/upgrade/UpgradeActivity.kt
index 0e57a3b..5e7b4c8 100644
--- a/app/src/main/java/com/supwisdom/activities/upgrade/UpgradeAcvitity.kt
+++ b/app/src/main/java/com/supwisdom/activities/upgrade/UpgradeActivity.kt
@@ -24,7 +24,7 @@
  ** @desc
  **/
 @Suppress("DEPRECATION")
-class UpgradeAcvitity : BaseActivity() {
+class UpgradeActivity : BaseActivity() {
     private lateinit var vResult: TextView
     private lateinit var vUpgradeMsg: TextView
     private lateinit var vServerUrl: TextView
diff --git a/app/src/main/java/com/supwisdom/db/ControlParaDao.kt b/app/src/main/java/com/supwisdom/db/ControlParaDao.kt
index 8998aa8..d683d9c 100644
--- a/app/src/main/java/com/supwisdom/db/ControlParaDao.kt
+++ b/app/src/main/java/com/supwisdom/db/ControlParaDao.kt
@@ -24,13 +24,30 @@
         try {
             db.beginTransaction()
             if (db.replace(TABLE, null, values) > 0) {
-                db.setTransactionSuccessful()
-                return true
+                return false
             }
+            db.setTransactionSuccessful()
+            return true
         } finally {
             db.endTransaction()
         }
-        return false
+    }
+
+    fun replace(paraname: String, paraval: String): Boolean {
+        val db = dbHelper.readableDatabase
+        val values = ContentValues()
+        values.put(BeanPropEnum.ControlPara.paraname.toString(), paraname)
+        values.put(BeanPropEnum.ControlPara.paraval.toString(), paraval)
+        try {
+            db.beginTransaction()
+            if (db.replace(TABLE, null, values) < 0) {
+                return false
+            }
+            db.setTransactionSuccessful()
+            return true
+        } finally {
+            db.endTransaction()
+        }
     }
 
     fun update(record: ControlParaRecord): Boolean {
diff --git a/app/src/main/java/com/supwisdom/db/Pos.kt b/app/src/main/java/com/supwisdom/db/Pos.kt
index 205e656..5a3e1f2 100644
--- a/app/src/main/java/com/supwisdom/db/Pos.kt
+++ b/app/src/main/java/com/supwisdom/db/Pos.kt
@@ -20,6 +20,7 @@
     private val whiteListDao = WhiteListDao(context)
     private val transdtlOnlineDao = TransdtlOnlineDao(sdContext)
     private val transdtlOfflineDao = TransdtlOfflineDao(sdContext)
+    private val transdtlUnionDao = TransdtlUnionDao(sdContext)
     private var onlMaxSeqno = 0
     private var offMaxSeqno = 0
 
@@ -63,6 +64,15 @@
         }
     }
 
+    fun replaceControlPara(paraname: String, paraval: String): Boolean {
+        try {
+            controlParaDao.getLock().lock()
+            return controlParaDao.replace(paraname, paraval)
+        } finally {
+            controlParaDao.getLock().unlock()
+        }
+    }
+
     fun getControlPara(paraname: String): ControlParaRecord? {
         try {
             controlParaDao.getLock().lock()
@@ -235,4 +245,19 @@
             transdtlOfflineDao.getLock().unlock()
         }
     }
+
+    /**
+     * @param date yyyyMMdd
+     * @param offset 流水偏移量
+     * @param flag 0--全部流水 1--成功流水 2--失败流水
+     * @param num 查询数量
+     */
+    fun getTransdtlUnion(date: String, offset: Int, flag: Int, num: Int): List<TransdtlUnionRecord> {
+        try {
+            transdtlUnionDao.getLock().lock()
+            return transdtlUnionDao.get(date, offset, flag, num)
+        } finally {
+            transdtlUnionDao.getLock().unlock()
+        }
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
index 99b2107..1071836 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
@@ -46,7 +46,7 @@
         return dbHelper.getLock()
     }
 
-    fun get(date: String, offset: Int, flag: Int): List<TransdtlUnionRecord> {
+    fun get(date: String, offset: Int, flag: Int, num: Int): List<TransdtlUnionRecord> {
         val db = dbHelper.readableDatabase
         var cursor: Cursor? = null
         var sql = when (flag) {
@@ -77,9 +77,9 @@
             }
         }
         sql += if (offset > 0) {
-            " limit 1 offset $offset"
+            " limit $num offset $offset"
         } else {
-            " limit 1"
+            " limit $num"
         }
         try {
             cursor = db.rawQuery(sql, null)
diff --git a/app/src/main/java/com/supwisdom/entity/ControlParaRecord.kt b/app/src/main/java/com/supwisdom/entity/ControlParaRecord.kt
index 441d056..7e1ff12 100644
--- a/app/src/main/java/com/supwisdom/entity/ControlParaRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/ControlParaRecord.kt
@@ -5,6 +5,15 @@
  ** @desc 本地控制参数
  **/
 class ControlParaRecord {
+    constructor() {
+
+    }
+
+    constructor(paraname: String, paraval: String) {
+        this.paraname = paraname
+        this.paraval = paraval
+    }
+
     var paraname: String? = null
     var paraval: String? = null
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt b/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
index 8a163cb..f55b2bb 100644
--- a/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
+++ b/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
@@ -106,7 +106,7 @@
     }
 
 
-    fun get(url: String, params: WebParams): TransResp? {
+    fun get(url: String, params: WebParams?): TransResp? {
         val request = Request.Builder()
             .url(geturl(url, params))
             .addHeader("Accept", "application/json; q=0.5")
diff --git a/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt b/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt
index 66e1930..b1362e9 100644
--- a/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt
+++ b/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt
@@ -2,10 +2,11 @@
 
 import com.supwisdom.activities.SPApplication
 import com.supwisdom.entity.SysParaRecord
+import com.supwisdom.exception.HeartBeatError
+import com.supwisdom.exception.TransdtlUploadError
 import com.supwisdom.utils.CommonUtil
 import com.supwisdom.utils.DateUtil
 import com.supwisdom.utils.FileUtil
-import com.supwisdom.utils.PublicDef
 
 /**
  ** create by zzq on 2019/7/23
@@ -53,24 +54,33 @@
 
     private fun doYktHeartAndTransdtl() {
         //做一卡通的心跳以及流水上传
-//        val resp = apiInterface!!.heartBeat()
-//        if (resp.getRetcode() != PublicDef.SUCCESS) {
-//            SPApplication.getInstance().setEpayLinking(false)
-//            return
-//        }
-//        SPApplication.getInstance().setEpayLinking(true)
-//
+        try {
+            apiInterface!!.heartBeat()
+            SPApplication.getInstance().setEpayLinking(true)
 //        /*自动签到*/
 //        if (SPApplication.getInstance().getAuthStatus() > 2 && SPApplication.getInstance().getAuthStatus() < 5) {
 //            autoAuth()
 //        }
-        pos.getTransdtlOnlineUnconfirm().forEach {
-            apiInterface!!.uploadTransdtl(it)
-            it.upflag = 1
+            uploadTransdtl()
+        } catch (ex: HeartBeatError) {
+            SPApplication.getInstance().setEpayLinking(false)
         }
-        pos.getTransdtlOfflineUnconfirm().forEach {
-            apiInterface!!.uploadTransdtl(it)
-            it.upflag = 1
+    }
+
+    private fun uploadTransdtl() {
+        try {
+            pos.getTransdtlOfflineUnconfirm().forEach {
+                apiInterface!!.uploadTransdtl(it)
+                it.upflag = 1
+                pos.updateTransdtlOffline(it)
+            }
+            pos.getTransdtlOnlineUnconfirm().forEach {
+                apiInterface!!.uploadTransdtl(it)
+                it.upflag = 1
+                pos.updateTransdtlOnline(it)
+            }
+        } catch (ex: TransdtlUploadError) {
+            ex.printStackTrace()
         }
     }
 
@@ -96,7 +106,7 @@
 
         /*删除15天前的日志*/
         FileUtil.removeLogFile(15)
-        FileUtil.removeCrashFile(30)
-        FileUtil.removeDtlFile(3)
+        FileUtil.removeCrashFile(15)
+        FileUtil.removeDtlFile(15)
     }
 }
\ 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 89d6623..8bdea54 100644
--- a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
+++ b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
@@ -2,6 +2,10 @@
 
 import com.supwisdom.activities.SPApplication
 import com.supwisdom.activities.YktSession
+import com.supwisdom.bean.HeartBeatRetBean
+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
@@ -11,6 +15,8 @@
 import com.supwisdom.exception.WhiteListError
 import com.supwisdom.okhttp.WebParams
 import com.supwisdom.utils.DateUtil
+import com.supwisdom.utils.GsonUtil
+import com.supwisdom.utils.PublicDef
 
 /**
  ** create by zzq on 2019/7/23
@@ -30,10 +36,16 @@
             .setParameter("cardverno", dyRecord?.cardverno)
 
         val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/heartbeat", "", params)
+            ?: throw HeartBeatError("请求超时")
+        val retBean = GsonUtil.GsonToBean(resp.retjson!!, HeartBeatRetBean::class.java)
+        if (retBean.retcode != PublicDef.SUCCESS) {
+            throw HeartBeatError(retBean.retmsg!!)
+        }
     }
 
+    @Throws(HeartBeatError::class)
     override fun linkCheck() {
-
+        heartBeat()
     }
 
     @Throws(SysParaError::class)
@@ -46,6 +58,11 @@
             .setParameter("paragroupid", dyRecord?.paragroupid)
 
         val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/systempara", "", params)
+            ?: throw SysParaError("请求超时")
+        val retBean = GsonUtil.GsonToBean(resp.retjson!!, SystemParaRetBean::class.java)
+        if (retBean.retcode != PublicDef.SUCCESS) {
+            throw SysParaError(retBean.retmsg!!)
+        }
     }
 
     @Throws(WhiteListError::class)
@@ -56,6 +73,11 @@
             .setParameter("maxcount", 20)
 
         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!!)
+        }
     }
 
     @Throws(TransdtlUploadError::class)
@@ -66,6 +88,14 @@
             .setParameter("maxcount", 20)
 
         val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/paycancel", "", params)
+            ?: throw TransdtlUploadError("请求超时")
+        val retBean = GsonUtil.GsonToBean(resp.retjson!!, TransdtlRetBean::class.java)
+        if (retBean.retcode != PublicDef.SUCCESS) {
+            throw TransdtlUploadError(retBean.retmsg!!)
+        }
+        if (retBean.termseqno != record.devseqno) {
+            throw TransdtlUploadError("返回流水号不一致")
+        }
     }
 
     @Throws(TransdtlUploadError::class)
@@ -93,5 +123,13 @@
             .setParameter("status", record.status.toString())
 
         val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/offlinetransdtl", "", params)
+            ?: throw TransdtlUploadError("请求超时")
+        val retBean = GsonUtil.GsonToBean(resp.retjson!!, TransdtlRetBean::class.java)
+        if (retBean.retcode != PublicDef.SUCCESS) {
+            throw TransdtlUploadError(retBean.retmsg!!)
+        }
+        if (retBean.termseqno != record.devseqno) {
+            throw TransdtlUploadError("返回流水号不一致")
+        }
     }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/utils/CommonUtil.kt b/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
index ccd03aa..917f39c 100644
--- a/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
@@ -18,6 +18,7 @@
 import java.io.FileOutputStream
 import java.io.PrintWriter
 import java.io.StringWriter
+import java.util.regex.Pattern
 
 /**
  * @author zzq
@@ -73,6 +74,12 @@
         (context as Activity).startActivityForResult(intent, 0)
     }
 
+    fun isNumeric(str: String): Boolean {
+        val pattern = Pattern.compile("[0-9]*")
+        val isNum = pattern.matcher(str)
+        return isNum.matches()
+    }
+
     fun showFormatAmount(preHint: String, amount: Int): String {
         return String.format("%s: %.02f元", preHint, amount / 100.0f)
     }
diff --git a/app/src/main/res/drawable-mdpi/all_back_focus.png b/app/src/main/res/drawable-mdpi/all_back_focus.png
new file mode 100644
index 0000000..8f98e97
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/all_back_focus.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/all_back_normal.png b/app/src/main/res/drawable-mdpi/all_back_normal.png
new file mode 100644
index 0000000..cb831ce
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/all_back_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/all_home_focus.png b/app/src/main/res/drawable-mdpi/all_home_focus.png
new file mode 100644
index 0000000..23050ea
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/all_home_focus.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/all_home_normal.png b/app/src/main/res/drawable-mdpi/all_home_normal.png
new file mode 100644
index 0000000..db94187
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/all_home_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/arrow.png b/app/src/main/res/drawable-mdpi/arrow.png
new file mode 100644
index 0000000..24bf7da
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/arrow.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/background.jpg b/app/src/main/res/drawable-mdpi/background.jpg
new file mode 100644
index 0000000..dfeb4af
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/background.jpg
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/bak_minus_focus.png b/app/src/main/res/drawable-mdpi/bak_minus_focus.png
new file mode 100644
index 0000000..230fe76
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/bak_minus_focus.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/bak_minus_normal.png b/app/src/main/res/drawable-mdpi/bak_minus_normal.png
new file mode 100644
index 0000000..c6c9d67
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/bak_minus_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/big_picture_count_bak.png b/app/src/main/res/drawable-mdpi/big_picture_count_bak.png
new file mode 100644
index 0000000..4b3aa81
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/big_picture_count_bak.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/btn_red_click.png b/app/src/main/res/drawable-mdpi/btn_red_click.png
new file mode 100644
index 0000000..580c410
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/btn_red_click.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/btn_red_normal.png b/app/src/main/res/drawable-mdpi/btn_red_normal.png
new file mode 100644
index 0000000..f447037
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/btn_red_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/btn_rf_cancel_focus.png b/app/src/main/res/drawable-mdpi/btn_rf_cancel_focus.png
new file mode 100644
index 0000000..622b075
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/btn_rf_cancel_focus.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/btn_rf_cancel_normal.png b/app/src/main/res/drawable-mdpi/btn_rf_cancel_normal.png
new file mode 100644
index 0000000..c6dda8e
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/btn_rf_cancel_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/btn_rf_start_focus.png b/app/src/main/res/drawable-mdpi/btn_rf_start_focus.png
new file mode 100644
index 0000000..93ac164
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/btn_rf_start_focus.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/btn_rf_start_normal.png b/app/src/main/res/drawable-mdpi/btn_rf_start_normal.png
new file mode 100644
index 0000000..2565a57
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/btn_rf_start_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/consume_cancel_focus.png b/app/src/main/res/drawable-mdpi/consume_cancel_focus.png
new file mode 100644
index 0000000..b5a7293
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/consume_cancel_focus.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/consume_cancel_normal.png b/app/src/main/res/drawable-mdpi/consume_cancel_normal.png
new file mode 100644
index 0000000..0ce3a04
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/consume_cancel_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/consume_middle_background.png b/app/src/main/res/drawable-mdpi/consume_middle_background.png
new file mode 100644
index 0000000..4aabc91
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/consume_middle_background.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/consume_pay_focus.png b/app/src/main/res/drawable-mdpi/consume_pay_focus.png
new file mode 100644
index 0000000..f39b8b0
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/consume_pay_focus.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/consume_pay_normal.png b/app/src/main/res/drawable-mdpi/consume_pay_normal.png
new file mode 100644
index 0000000..3488719
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/consume_pay_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/enable_btn_cancel_focus.png b/app/src/main/res/drawable-mdpi/enable_btn_cancel_focus.png
new file mode 100644
index 0000000..80a9edb
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/enable_btn_cancel_focus.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/enable_btn_cancel_normal.png b/app/src/main/res/drawable-mdpi/enable_btn_cancel_normal.png
new file mode 100644
index 0000000..75c0087
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/enable_btn_cancel_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/enable_btn_next_focus.png b/app/src/main/res/drawable-mdpi/enable_btn_next_focus.png
new file mode 100644
index 0000000..1d0c2f4
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/enable_btn_next_focus.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/enable_btn_next_normal.png b/app/src/main/res/drawable-mdpi/enable_btn_next_normal.png
new file mode 100644
index 0000000..4db2d60
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/enable_btn_next_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/enable_btn_next_unable.png b/app/src/main/res/drawable-mdpi/enable_btn_next_unable.png
new file mode 100644
index 0000000..0247799
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/enable_btn_next_unable.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/enable_middle_bak.png b/app/src/main/res/drawable-mdpi/enable_middle_bak.png
new file mode 100644
index 0000000..5ea5683
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/enable_middle_bak.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/main_offline.png b/app/src/main/res/drawable-mdpi/main_offline.png
new file mode 100644
index 0000000..a35326c
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/main_offline.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/main_online.png b/app/src/main/res/drawable-mdpi/main_online.png
new file mode 100644
index 0000000..06aed69
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/main_online.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/main_src_cancel_consume.png b/app/src/main/res/drawable-mdpi/main_src_cancel_consume.png
new file mode 100644
index 0000000..77d3e8e
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/main_src_cancel_consume.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/main_src_consume.png b/app/src/main/res/drawable-mdpi/main_src_consume.png
new file mode 100644
index 0000000..9d94ebf
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/main_src_consume.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/main_src_device_manage.png b/app/src/main/res/drawable-mdpi/main_src_device_manage.png
new file mode 100644
index 0000000..b0d32f1
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/main_src_device_manage.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/main_src_do_transdtl.png b/app/src/main/res/drawable-mdpi/main_src_do_transdtl.png
new file mode 100644
index 0000000..4524728
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/main_src_do_transdtl.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/main_src_hotel_consume.png b/app/src/main/res/drawable-mdpi/main_src_hotel_consume.png
new file mode 100644
index 0000000..cf50434
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/main_src_hotel_consume.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/main_src_manual_auth.png b/app/src/main/res/drawable-mdpi/main_src_manual_auth.png
new file mode 100644
index 0000000..6e69685
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/main_src_manual_auth.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/main_src_net_test.png b/app/src/main/res/drawable-mdpi/main_src_net_test.png
new file mode 100644
index 0000000..7993cae
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/main_src_net_test.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/main_src_online_order.png b/app/src/main/res/drawable-mdpi/main_src_online_order.png
new file mode 100644
index 0000000..7e0e456
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/main_src_online_order.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/main_src_query_para.png b/app/src/main/res/drawable-mdpi/main_src_query_para.png
new file mode 100644
index 0000000..b992a8d
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/main_src_query_para.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/main_src_query_revenue.png b/app/src/main/res/drawable-mdpi/main_src_query_revenue.png
new file mode 100644
index 0000000..30bb3f2
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/main_src_query_revenue.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/main_src_update_blacklist.png b/app/src/main/res/drawable-mdpi/main_src_update_blacklist.png
new file mode 100644
index 0000000..686a5a6
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/main_src_update_blacklist.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/main_src_upload_transdtl.png b/app/src/main/res/drawable-mdpi/main_src_upload_transdtl.png
new file mode 100644
index 0000000..6dc721a
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/main_src_upload_transdtl.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/order_big_picture_close_btn.png b/app/src/main/res/drawable-mdpi/order_big_picture_close_btn.png
new file mode 100644
index 0000000..4a21eef
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/order_big_picture_close_btn.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/order_big_picture_out_bak.png b/app/src/main/res/drawable-mdpi/order_big_picture_out_bak.png
new file mode 100644
index 0000000..6231b4b
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/order_big_picture_out_bak.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/order_btn_purchase.png b/app/src/main/res/drawable-mdpi/order_btn_purchase.png
new file mode 100644
index 0000000..416af7b
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/order_btn_purchase.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/order_clear_focus.png b/app/src/main/res/drawable-mdpi/order_clear_focus.png
new file mode 100644
index 0000000..20699ee
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/order_clear_focus.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/order_clear_normal.png b/app/src/main/res/drawable-mdpi/order_clear_normal.png
new file mode 100644
index 0000000..4a335ec
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/order_clear_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/order_food_self_add_focus.png b/app/src/main/res/drawable-mdpi/order_food_self_add_focus.png
new file mode 100644
index 0000000..c86b446
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/order_food_self_add_focus.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/order_food_self_add_normal.png b/app/src/main/res/drawable-mdpi/order_food_self_add_normal.png
new file mode 100644
index 0000000..75788fc
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/order_food_self_add_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/order_good_add_focus.png b/app/src/main/res/drawable-mdpi/order_good_add_focus.png
new file mode 100644
index 0000000..2d6d7f5
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/order_good_add_focus.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/order_good_add_normal.png b/app/src/main/res/drawable-mdpi/order_good_add_normal.png
new file mode 100644
index 0000000..cf026ba
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/order_good_add_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/order_good_minus_focus.png b/app/src/main/res/drawable-mdpi/order_good_minus_focus.png
new file mode 100644
index 0000000..43a225c
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/order_good_minus_focus.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/order_good_minus_normal.png b/app/src/main/res/drawable-mdpi/order_good_minus_normal.png
new file mode 100644
index 0000000..ac58ec1
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/order_good_minus_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/order_picture_out_bak.png b/app/src/main/res/drawable-mdpi/order_picture_out_bak.png
new file mode 100644
index 0000000..cd2a360
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/order_picture_out_bak.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/order_picture_zoom.png b/app/src/main/res/drawable-mdpi/order_picture_zoom.png
new file mode 100644
index 0000000..07558da
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/order_picture_zoom.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/order_purchase_focus.png b/app/src/main/res/drawable-mdpi/order_purchase_focus.png
new file mode 100644
index 0000000..cbf4d7f
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/order_purchase_focus.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/order_purchase_normal.png b/app/src/main/res/drawable-mdpi/order_purchase_normal.png
new file mode 100644
index 0000000..6907626
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/order_purchase_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_delete_click.png b/app/src/main/res/drawable-mdpi/pass_delete_click.png
new file mode 100644
index 0000000..d05207d
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_delete_click.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_delete_normal.png b/app/src/main/res/drawable-mdpi/pass_delete_normal.png
new file mode 100644
index 0000000..b77fc91
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_delete_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_eight_click.png b/app/src/main/res/drawable-mdpi/pass_eight_click.png
new file mode 100644
index 0000000..c26ffd8
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_eight_click.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_eight_normal.png b/app/src/main/res/drawable-mdpi/pass_eight_normal.png
new file mode 100644
index 0000000..9b2ece0
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_eight_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_five_click.png b/app/src/main/res/drawable-mdpi/pass_five_click.png
new file mode 100644
index 0000000..c555169
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_five_click.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_five_normal.png b/app/src/main/res/drawable-mdpi/pass_five_normal.png
new file mode 100644
index 0000000..3a6460b
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_five_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_four_click.png b/app/src/main/res/drawable-mdpi/pass_four_click.png
new file mode 100644
index 0000000..8b2325f
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_four_click.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_four_normal.png b/app/src/main/res/drawable-mdpi/pass_four_normal.png
new file mode 100644
index 0000000..97bd59f
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_four_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_nine_click.png b/app/src/main/res/drawable-mdpi/pass_nine_click.png
new file mode 100644
index 0000000..0aec332
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_nine_click.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_nine_normal.png b/app/src/main/res/drawable-mdpi/pass_nine_normal.png
new file mode 100644
index 0000000..76f2f37
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_nine_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_one_click.png b/app/src/main/res/drawable-mdpi/pass_one_click.png
new file mode 100644
index 0000000..6dd704f
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_one_click.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_one_normal.png b/app/src/main/res/drawable-mdpi/pass_one_normal.png
new file mode 100644
index 0000000..ac0beaa
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_one_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_seven_click.png b/app/src/main/res/drawable-mdpi/pass_seven_click.png
new file mode 100644
index 0000000..b685327
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_seven_click.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_seven_normal.png b/app/src/main/res/drawable-mdpi/pass_seven_normal.png
new file mode 100644
index 0000000..a1431b1
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_seven_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_six_click.png b/app/src/main/res/drawable-mdpi/pass_six_click.png
new file mode 100644
index 0000000..c8501e2
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_six_click.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_six_normal.png b/app/src/main/res/drawable-mdpi/pass_six_normal.png
new file mode 100644
index 0000000..f4df1ff
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_six_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_three_click.png b/app/src/main/res/drawable-mdpi/pass_three_click.png
new file mode 100644
index 0000000..55959a7
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_three_click.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_three_normal.png b/app/src/main/res/drawable-mdpi/pass_three_normal.png
new file mode 100644
index 0000000..5a76454
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_three_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_two_click.png b/app/src/main/res/drawable-mdpi/pass_two_click.png
new file mode 100644
index 0000000..ba99d1d
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_two_click.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_two_normal.png b/app/src/main/res/drawable-mdpi/pass_two_normal.png
new file mode 100644
index 0000000..1a1e6e3
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_two_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_zero_click.png b/app/src/main/res/drawable-mdpi/pass_zero_click.png
new file mode 100644
index 0000000..2e72719
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_zero_click.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/pass_zero_normal.png b/app/src/main/res/drawable-mdpi/pass_zero_normal.png
new file mode 100644
index 0000000..7463c4a
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/pass_zero_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/password_pwd_frame.png b/app/src/main/res/drawable-mdpi/password_pwd_frame.png
new file mode 100644
index 0000000..52bfc7b
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/password_pwd_frame.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/qrcode_scan_line.png b/app/src/main/res/drawable-mdpi/qrcode_scan_line.png
new file mode 100644
index 0000000..ead6117
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/qrcode_scan_line.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/query_next_focus.png b/app/src/main/res/drawable-mdpi/query_next_focus.png
new file mode 100644
index 0000000..34c49d8
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/query_next_focus.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/query_next_normal.png b/app/src/main/res/drawable-mdpi/query_next_normal.png
new file mode 100644
index 0000000..a026ed4
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/query_next_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/query_prev_focus.png b/app/src/main/res/drawable-mdpi/query_prev_focus.png
new file mode 100644
index 0000000..e4681d0
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/query_prev_focus.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/query_prev_normal.png b/app/src/main/res/drawable-mdpi/query_prev_normal.png
new file mode 100644
index 0000000..d8415b1
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/query_prev_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/star_full.png b/app/src/main/res/drawable-mdpi/star_full.png
new file mode 100644
index 0000000..e1ee5d3
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/star_full.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/star_normal.png b/app/src/main/res/drawable-mdpi/star_normal.png
new file mode 100644
index 0000000..119768c
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/star_normal.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/test_food.png b/app/src/main/res/drawable-mdpi/test_food.png
new file mode 100644
index 0000000..dedd453
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/test_food.png
Binary files differ
diff --git a/app/src/main/res/drawable-mdpi/test_food2.png b/app/src/main/res/drawable-mdpi/test_food2.png
new file mode 100644
index 0000000..4b14037
--- /dev/null
+++ b/app/src/main/res/drawable-mdpi/test_food2.png
Binary files differ
diff --git a/app/src/main/res/drawable/order_clear_selector.xml b/app/src/main/res/drawable/order_clear_selector.xml
deleted file mode 100644
index f10f556..0000000
--- a/app/src/main/res/drawable/order_clear_selector.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/order_clear_normal" />
-    <item android:state_selected="true" android:drawable="@drawable/order_clear_focus" />
-    <item android:state_pressed="true" android:drawable="@drawable/order_clear_focus" />
-    <item android:state_pressed="false" android:drawable="@drawable/order_clear_normal" />
-</selector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/order_pay_selector.xml b/app/src/main/res/drawable/order_pay_selector.xml
deleted file mode 100644
index 4c123ac..0000000
--- a/app/src/main/res/drawable/order_pay_selector.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_selected="true" android:drawable="@drawable/order_purchase_focus" />
-    <item android:state_pressed="true" android:drawable="@drawable/order_purchase_focus" />
-    <item android:drawable="@drawable/order_purchase_normal" />
-</selector>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_check_mngpwd.xml b/app/src/main/res/layout/activity_check_mngpwd.xml
new file mode 100644
index 0000000..1394d96
--- /dev/null
+++ b/app/src/main/res/layout/activity_check_mngpwd.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    style="@style/head_title_out_style">
+
+    <LinearLayout style="@style/head_title_inner_style">
+
+        <TextView
+            android:id="@+id/title"
+            style="@style/head_title_text_style"
+            android:text="密码界面" />
+
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="20dp"
+            android:layout_marginTop="10dp"
+            android:text="等待密码校验"
+            android:textColor="@color/light_blue2"
+            android:textSize="30sp" />
+
+        <TextView
+            android:id="@+id/content"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="20dp"
+            android:layout_marginTop="10dp"
+            android:text=""
+            android:textColor="@color/light_blue2"
+            android:textSize="30sp" />
+    </LinearLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_consume_mode.xml b/app/src/main/res/layout/activity_consume_mode.xml
new file mode 100644
index 0000000..99e494f
--- /dev/null
+++ b/app/src/main/res/layout/activity_consume_mode.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    style="@style/head_title_out_style">
+
+    <LinearLayout style="@style/head_title_inner_style">
+
+        <TextView
+            style="@style/head_title_text_style"
+            android:text="消费模式" />
+
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:padding="10dp"
+            android:text="0-普通消费\n非0定额消费\n单位(分)"
+            android:textColor="@color/light_blue2"
+            android:textSize="20sp" />
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:orientation="horizontal">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:padding="10dp"
+                android:text="金额: "
+                android:textColor="@color/light_blue2"
+                android:textSize="30sp" />
+
+            <TextView
+                android:id="@+id/tv_consume_mode_payamt"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:maxLength="6"
+                android:padding="10dp"
+                android:text="0"
+                android:textColor="@color/light_blue2"
+                android:textSize="30sp" />
+        </LinearLayout>
+
+    </LinearLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_menu.xml b/app/src/main/res/layout/activity_menu.xml
new file mode 100644
index 0000000..e938845
--- /dev/null
+++ b/app/src/main/res/layout/activity_menu.xml
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/light_blue2"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_margin="20dp"
+        android:background="@drawable/corner_bg_white"
+        android:orientation="vertical">
+
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="10dp"
+            android:gravity="center"
+            android:text="管理界面"
+            android:textColor="@color/light_blue2"
+            android:textSize="45sp" />
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:layout_marginLeft="10dp"
+            android:orientation="vertical"
+            android:padding="10dp">
+
+            <TextView
+                style="@style/menu_item_text_style"
+                android:text="@string/consume_menu_revenue" />
+
+            <TextView
+                style="@style/menu_item_text_style"
+                android:text="@string/consume_menu_transdtl_upload" />
+
+            <TextView
+                style="@style/menu_item_text_style"
+                android:text="@string/consume_menu_link_check" />
+
+            <TextView
+                style="@style/menu_item_text_style"
+                android:text="@string/consume_menu_auth" />
+
+            <TextView
+                style="@style/menu_item_text_style"
+                android:text="@string/consume_menu_syspara_query" />
+
+            <TextView
+                style="@style/menu_item_text_style"
+                android:text="@string/consume_menu_manage" />
+
+            <TextView
+                style="@style/menu_item_text_style"
+                android:text="@string/consume_menu_shop_password_set" />
+
+            <TextView
+                style="@style/menu_item_text_style"
+                android:text="@string/consume_menu_consume_mode" />
+
+            <TextView
+                android:id="@+id/tv_reverse"
+                style="@style/menu_item_text_style"
+                android:text="@string/consume_menu_reverse" />
+        </LinearLayout>
+    </LinearLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_password.xml b/app/src/main/res/layout/activity_password.xml
new file mode 100644
index 0000000..f1943ea
--- /dev/null
+++ b/app/src/main/res/layout/activity_password.xml
@@ -0,0 +1,26 @@
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/light_blue2"
+    android:orientation="vertical">
+    <!--上半部分-->
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_margin="20dp"
+        android:background="@drawable/corner_bg_white"
+        android:orientation="vertical">
+        <!--提示文字-->
+        <TextView
+            android:id="@+id/passwd_title"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="10dp"
+            android:gravity="center"
+            android:text="商户密码修改"
+            android:textColor="@color/light_blue2"
+            android:textSize="@dimen/password_hint_size" />
+
+    </LinearLayout>
+</LinearLayout>
+
diff --git a/app/src/main/res/layout/activity_syspara.xml b/app/src/main/res/layout/activity_syspara.xml
new file mode 100644
index 0000000..c2f781a
--- /dev/null
+++ b/app/src/main/res/layout/activity_syspara.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/light_blue2"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:layout_margin="10dp"
+        android:background="@drawable/corner_bg_white"
+        android:orientation="vertical">
+
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginTop="10dp"
+            android:gravity="center"
+            android:text="参数查询"
+            android:textColor="@color/light_blue2"
+            android:textSize="50sp" />
+
+        <ListView
+            android:id="@+id/lv_param"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent"
+            android:divider="@null"
+            android:dividerHeight="2dp" />
+    </LinearLayout>
+</LinearLayout>
diff --git a/app/src/main/res/layout/item_syspara.xml b/app/src/main/res/layout/item_syspara.xml
new file mode 100644
index 0000000..cdaccac
--- /dev/null
+++ b/app/src/main/res/layout/item_syspara.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:layout_width="match_parent"
+              android:layout_height="match_parent"
+              android:orientation="horizontal"
+              android:weightSum="2">
+
+    <TextView
+            android:id="@+id/tv_name"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:textColor="@color/light_blue2"
+            android:textSize="30sp"/>
+
+    <TextView
+            android:id="@+id/tv_value"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:textColor="@color/light_blue2"
+            android:textSize="30sp"/>
+</LinearLayout>
\ No newline at end of file