diff --git a/app/src/main/java/com/supwisdom/activities/communicate/CommunicateActivity.kt b/app/src/main/java/com/supwisdom/activities/communicate/CommunicateActivity.kt
new file mode 100644
index 0000000..e511752
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/communicate/CommunicateActivity.kt
@@ -0,0 +1,114 @@
+package com.supwisdom.activities.communicate
+
+import android.os.Bundle
+import android.text.TextUtils
+import android.view.KeyEvent
+import android.view.View
+import android.widget.EditText
+import android.widget.TextView
+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.PublicDef
+import com.supwisdom.view.SWToast
+
+/**
+ ** create by zzq on 2019/7/25
+ ** @desc 通讯参数配置
+ **/
+class CommunicateActivity : BaseActivity() {
+    private val pos = SPApplication.getInstance().getPos()
+    private lateinit var vDevphyid: TextView
+    private lateinit var vEpayUrl: EditText
+    private lateinit var vEpayUri: EditText
+    private lateinit var vEpayPort: EditText
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setContentView(R.layout.activity_communicate)
+        initView()
+        initData()
+    }
+
+    private fun initView() {
+        vDevphyid = findViewById<View>(R.id.comm_devphyid) as TextView
+        vEpayUrl = findViewById<View>(R.id.comm_epay_url) as EditText
+        vEpayUri = findViewById<View>(R.id.comm_epay_uri) as EditText
+        vEpayPort = findViewById<View>(R.id.comm_epay_port) as EditText
+
+        this.findViewById<View>(R.id.btn_cancel).setOnClickListener { finish() }
+        this.findViewById<View>(R.id.btn_confirm).setOnClickListener(View.OnClickListener {
+            val record = pos.getConfigPara()
+            val url = CommonUtil.getEditView(vEpayUrl)
+            if (TextUtils.isEmpty(url)) {
+                showSWToastInfo("服务器地址不能为空", PublicDef.TOAST_SHOW_CRY)
+                return@OnClickListener
+            }
+            record!!.epayIP = url
+
+            val uri = CommonUtil.getEditView(vEpayUri)
+            if (TextUtils.isEmpty(uri)) {
+                showSWToastInfo("服务器标识不对", PublicDef.TOAST_SHOW_CRY)
+                return@OnClickListener
+            }
+            record.epayUri = uri
+
+            try {
+                val port = Integer.valueOf(CommonUtil.getEditView(vEpayPort))
+                if (port > 0xFFFF) {
+                    showSWToastInfo("服务器端口太大", PublicDef.TOAST_SHOW_CRY)
+                    return@OnClickListener
+                }
+                record.epayPort = port
+            } catch (e: Exception) {
+                showSWToastInfo("服务器端口不对", PublicDef.TOAST_SHOW_CRY)
+                return@OnClickListener
+            }
+
+            if (!pos.replaceConfigPara(record)) {
+                showSWToastInfo("保存失败", PublicDef.TOAST_SHOW_CRY)
+                return@OnClickListener
+            }
+            showSWToastInfo("保存成功", PublicDef.TOAST_SHOW_SMILE)
+            finish()
+        })
+    }
+
+    public override fun onResume() {
+        super.onResume()
+        refresh()
+    }
+
+    private fun initData() {
+        val record = pos.getConfigPara()
+        vDevphyid.text = record!!.devphyid
+        vEpayUrl.setText(record.epayIP)
+        vEpayUri.setText(record.epayUri)
+        vEpayPort.setText(record.epayPort.toString())
+    }
+
+    private fun refresh() {
+        AuxScreenController.getInstance().refreshTitle("通讯参数设置")
+        AuxScreenController.getInstance().refreshBottom("确定键返回上页")
+        AuxScreenController.getInstance().refreshContent(listOf<String>("请到大屏进行配置"))
+    }
+
+    override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+        if (event.action == KeyEvent.ACTION_DOWN) {
+            when (event.keyCode) {
+                KeyEvent.KEYCODE_DEL -> {
+                }
+                KeyEvent.KEYCODE_ENTER -> finish()
+            }//cancel
+            //和触屏删除键冲突
+            //                    finish();
+        }
+        return super.dispatchKeyEvent(event)
+    }
+
+    private fun showSWToastInfo(msg: String, showway: Int) {
+        SWToast.show(applicationContext, msg, showway)
+    }
+}
\ 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
new file mode 100644
index 0000000..e8dacdb
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/control/ControlActivity.kt
@@ -0,0 +1,125 @@
+package com.supwisdom.activities.control
+
+import android.os.Bundle
+import android.view.KeyEvent
+import android.view.View
+import android.widget.RadioButton
+import android.widget.TextView
+import com.supwisdom.R
+import com.supwisdom.activities.BaseActivity
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.auxscreen.AuxScreenController
+import com.supwisdom.entity.ControlParaRecord
+import com.supwisdom.utils.PublicDef
+import com.supwisdom.view.SWToast
+
+/**
+ ** create by zzq on 2019/7/25
+ ** @desc
+ **/
+class ControlActivity : BaseActivity() {
+    private val pos = SPApplication.getInstance().getPos()
+    private lateinit var vDebugDisable: RadioButton
+    private lateinit var vDebugEnable: RadioButton
+    private lateinit var vOfflineEnable: RadioButton
+    private lateinit var vOfflineDisable: RadioButton
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setContentView(R.layout.activity_control)
+        initView()
+    }
+
+    private fun initData() {
+        var record = pos.getControlPara(PublicDef.CONTROL_OFFLINE_DAY_DISABLE)
+        if (record != null && "1" == record.paraval) {
+            vOfflineDisable.isChecked = true
+        } else {
+            vOfflineEnable.isChecked = true
+        }
+        record = pos.getControlPara(PublicDef.CONTROL_DEBUG_ENABLE)
+        if (record != null && "1" == record.paraval) {
+            vDebugEnable.isChecked = true
+        } else {
+            vDebugDisable.isChecked = true
+        }
+    }
+
+    private fun initView() {
+        vOfflineEnable = this.findViewById<View>(R.id.rb_offline_enable) as RadioButton
+        vOfflineDisable = this.findViewById<View>(R.id.rb_offline_disable) as RadioButton
+        vDebugDisable = this.findViewById<View>(R.id.rb_debug_enable) as RadioButton
+        vDebugEnable = this.findViewById<View>(R.id.rb_debug_disable) as RadioButton
+        val ivBtn = this.findViewById<View>(R.id.btn_cancel) as TextView
+        ivBtn.setOnClickListener { this@ControlActivity.finish() }
+        //确定按钮
+        this.findViewById<TextView>(R.id.btn_save).setOnClickListener {
+            var flag = if (vOfflineDisable.isChecked) {
+                "1"
+            } else {
+                "0"
+            }
+            if (!saveControlPara(PublicDef.CONTROL_OFFLINE_DAY_DISABLE, flag)) {
+                showSWToastInfo("脱机天数判断保存失败", PublicDef.TOAST_SHOW_CRY)
+                return@setOnClickListener
+            }
+
+            flag = if (vDebugEnable.isChecked) {
+                "1"
+            } else {
+                "0"
+            }
+            if (!saveControlPara(PublicDef.CONTROL_DEBUG_ENABLE, flag)) {
+                showSWToastInfo("日志调试保存失败", PublicDef.TOAST_SHOW_CRY)
+                return@setOnClickListener
+            }
+            showSWToastInfo("保存成功", PublicDef.TOAST_SHOW_SMILE)
+            this@ControlActivity.finish()
+        }
+
+    }
+
+    override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+        if (event.action == KeyEvent.ACTION_DOWN) {
+            when (event.keyCode) {
+                KeyEvent.KEYCODE_DEL -> {
+                }
+                KeyEvent.KEYCODE_ENTER -> finish()
+            }//cancel
+            //和触屏删除键冲突
+            //                    finish();
+        }
+        return super.dispatchKeyEvent(event)
+    }
+
+    private fun showSWToastInfo(msg: String, showway: Int) {
+        SWToast.show(applicationContext, msg, showway)
+    }
+
+    override fun onResume() {
+        super.onResume()
+        refresh()
+        initData()
+    }
+
+    override fun onStop() {
+        super.onStop()
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+    }
+
+    private fun refresh() {
+        AuxScreenController.getInstance().refreshTitle("控制参数设置")
+        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/manage/IManageView.kt b/app/src/main/java/com/supwisdom/activities/manage/IManageView.kt
new file mode 100644
index 0000000..27bb27f
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/manage/IManageView.kt
@@ -0,0 +1,11 @@
+package com.supwisdom.activities.manage
+
+/**
+ ** create by zzq on 2019/7/25
+ ** @desc
+ **/
+interface IManageView {
+    fun showOperHint(hint: String, result: String)
+
+    fun showOperResult(hint: String, result: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/manage/ManageActivity.kt b/app/src/main/java/com/supwisdom/activities/manage/ManageActivity.kt
new file mode 100644
index 0000000..1fca144
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/manage/ManageActivity.kt
@@ -0,0 +1,172 @@
+package com.supwisdom.activities.manage
+
+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.activities.communicate.CommunicateActivity
+import com.supwisdom.activities.control.ControlActivity
+import com.supwisdom.auxscreen.AuxScreenController
+import com.supwisdom.utils.DateUtil
+import java.util.*
+
+/**
+ ** create by zzq on 2019/7/25
+ ** @desc
+ **/
+class ManageActivity : BaseActivity(), IManageView {
+    private var presenter: ManagePresenter? = null
+    private var flag: Boolean = false
+    private var isRunning: Boolean = false
+    private val pos = SPApplication.getInstance().getPos()
+    @Volatile
+    private var keyActive = true
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        setContentView(R.layout.activity_manage)
+        initView()
+        initData()
+    }
+
+    private fun initView() {
+
+    }
+
+    private fun initData() {
+        presenter = ManagePresenter(this)
+    }
+
+    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 -> {
+                    flag = true
+                    showShopPassword()
+                }
+                KeyEvent.KEYCODE_2 -> jumpActivity(CommunicateActivity::class.java)
+                KeyEvent.KEYCODE_3 -> {
+                    //查询流水
+                    flag = true
+                    AuxScreenController.Companion.getInstance().refreshContent(Arrays.asList<T>("流水查询:", "暂不支持"))
+                }
+                KeyEvent.KEYCODE_4 -> {
+                    flag = true
+                    isRunning = true
+                    AuxScreenController.Companion.getInstance().refreshContent(Arrays.asList<T>("正在导出流水", "请稍等..."))
+                    presenter!!.doOutTransdtl()
+                }
+                KeyEvent.KEYCODE_5 -> jumpActivity(UpgradeActivity::class.java!!)
+                KeyEvent.KEYCODE_6 -> {
+                    CommonUtil.sendBroadcast(applicationContext, false)
+                    AuxScreenController.Companion.getInstance().refreshContent(Arrays.asList<T>("应用程序已退出", "请到大屏操作"))
+                    AppExitUtil.exit()
+                }
+                KeyEvent.KEYCODE_7 -> {
+                    CommonUtil.sendBroadcast(applicationContext, false)
+                    AuxScreenController.Companion.getInstance().refreshContent(Arrays.asList<T>("应用程序已退出", "请到大屏操作"))
+                    CommonUtil.startNetSetting(this)
+                }
+                KeyEvent.KEYCODE_8 -> {
+                    flag = true
+                    isRunning = true
+                    AuxScreenController.Companion.getInstance().refreshContent(Arrays.asList<T>("正在清空黑名单", "请稍等..."))
+                    presenter!!.doClearBlacklist()
+                }
+                KeyEvent.KEYCODE_9 -> jumpActivity(ControlActivity::class.java)
+                KeyEvent.KEYCODE_DEL ->
+                    //cancel
+                    jumpActivity(MenuActivity::class.java!!)
+            }
+        }
+        return super.dispatchKeyEvent(event)
+    }
+
+    override fun showOperHint(hint: String, result: String) {
+        AuxScreenController.getInstance().refreshContent(Arrays.asList<T>(hint, result))
+    }
+
+    override fun showOperResult(hint: String, result: String) {
+        flag = true
+        isRunning = false
+        AuxScreenController.getInstance().refreshContent(Arrays.asList<T>(hint, result))
+    }
+
+    override fun onResume() {
+        super.onResume()
+        keyActive = true
+        refresh()
+    }
+
+    private fun refresh() {
+        flag = false
+        isRunning = false
+        AuxScreenController.getInstance().refreshTitle("设备管理界面")
+        AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDate())
+        AuxScreenController.getInstance().refreshContent(
+            Arrays.asList(
+                getString(R.string.consume_menu_shop_passwd),
+                getString(R.string.consume_menu_comm_set),
+                getString(R.string.consume_menu_unconfirm_transdtl),
+                getString(R.string.consume_menu_out_dtl),
+                getString(R.string.consume_menu_upgrade),
+                getString(R.string.consume_menu_app_exit),
+                getString(R.string.consume_menu_setting),
+                getString(R.string.consume_menu_clear_blklist),
+                getString(R.string.consume_menu_control_set)
+            )
+        )
+    }
+
+    private fun showShopPassword() {
+        AuxScreenController.getInstance()
+            .refreshContent(Arrays.asList("商户密码:", pos!!.getConfigPara().getShopPwd()))
+    }
+
+    private fun showClearBlacklist() {
+        presenter!!.doClearBlacklist()
+    }
+
+    private fun showReloadTransdtl() {
+        presenter!!.doReloadTransdtl()
+    }
+
+    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/manage/ManagePresenter.kt b/app/src/main/java/com/supwisdom/activities/manage/ManagePresenter.kt
new file mode 100644
index 0000000..cfc459c
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/manage/ManagePresenter.kt
@@ -0,0 +1,93 @@
+package com.supwisdom.activities.manage
+
+import android.os.AsyncTask
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.bean.BaseResp
+import com.supwisdom.service.EpayApiImpl
+import com.supwisdom.utils.PublicDef
+
+/**
+ ** create by zzq on 2019/7/25
+ ** @desc
+ **/
+class ManagePresenter constructor(iManageView: IManageView) {
+    private val iManageView = iManageView
+    private val pos = SPApplication.getInstance().getPos()
+
+    fun clearAndUpdateWhitelist() {
+        if (!SPApplication.getInstance().isOnline()) {
+            iManageView.showOperHint("重置黑名单失败", "网络未联通")
+            return
+        }
+        ClearWhiteList().execute()
+    }
+
+    fun reloadTransdtl() {
+        if (!SPApplication.getInstance().isOnline()) {
+            iManageView.showOperHint("补采流水失败", "网络未联通")
+            return
+        }
+        iManageView.showOperHint("正在补采流水", "请稍等...")
+        ReloadTransdtl().execute()
+    }
+
+    fun outTransdtl() {
+        iManageView.showOperHint("正在导出流水", "请稍等...")
+        OutTransdtl().execute()
+    }
+
+    private inner class ReloadTransdtl : AsyncTask<Void, Int, BaseResp>() {
+        override fun onPostExecute(resp: BaseResp) {
+            if (resp.retcode == PublicDef.SUCCESS) {
+                iManageView.showOperResult("补采流水成功", resp.retmsg!!)
+            } else {
+                iManageView.showOperResult("补采流水失败", resp.retmsg!!)
+            }
+        }
+
+        override fun doInBackground(vararg params: Void): BaseResp {
+            return BaseResp(PublicDef.ERROR, "暂未实现")
+        }
+    }
+
+    private inner class ClearWhiteList : AsyncTask<Void, Int, BaseResp>() {
+        override fun onPostExecute(resp: BaseResp) {
+            if (resp.retcode == PublicDef.SUCCESS) {
+                iManageView.showOperResult("黑名单更新成功", "")
+            } else {
+                iManageView.showOperResult("黑名单更新失败", resp.retmsg!!)
+            }
+        }
+
+        override fun doInBackground(vararg params: Void): BaseResp {
+            return try {
+                EpayApiImpl().downloadWhitelist("0")
+                BaseResp(PublicDef.ERROR, "更新成功")
+            } catch (ex: Exception) {
+                BaseResp(PublicDef.ERROR, ex.message)
+            }
+        }
+    }
+
+    private inner class OutTransdtl : AsyncTask<Void, Int, BaseResp>() {
+        override fun doInBackground(vararg params: Void): BaseResp {
+            var num = 0
+//            val bm1List = pos.getTransdtlBM1(null)
+//            if (bm1List != null) {
+//                num += bm1List!!.size
+//                for (i in bm1List!!.indices) {
+//                    FileUtil.writeDtlFile(bm1List!!.get(i).toString())
+//                }
+//            }
+            return BaseResp(PublicDef.SUCCESS, "共导出" + num + "笔")
+        }
+
+        override fun onPostExecute(resp: BaseResp) {
+            if (resp.retcode == PublicDef.SUCCESS) {
+                iManageView.showOperResult("导出流水成功", resp.retmsg!!)
+            } else {
+                iManageView.showOperResult("导出流水失败", resp.retmsg!!)
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/menu/IMenuView.kt b/app/src/main/java/com/supwisdom/activities/menu/IMenuView.kt
new file mode 100644
index 0000000..eefb65f
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/menu/IMenuView.kt
@@ -0,0 +1,11 @@
+package com.supwisdom.activities.menu
+
+/**
+ ** create by zzq on 2019/7/25
+ ** @desc
+ **/
+interface IMenuView {
+    fun showOperHint(title: String, result: String)
+
+    fun showOperResult(title: String, result: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/menu/MenuActivity.kt b/app/src/main/java/com/supwisdom/activities/menu/MenuActivity.kt
new file mode 100644
index 0000000..2dd7b47
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/menu/MenuActivity.kt
@@ -0,0 +1,10 @@
+package com.supwisdom.activities.menu
+
+import com.supwisdom.activities.BaseActivity
+
+/**
+ ** create by zzq on 2019/7/25
+ ** @desc
+ **/
+class MenuActivity : BaseActivity() {
+}
\ 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
new file mode 100644
index 0000000..119018b
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/menu/MenuPresenter.kt
@@ -0,0 +1,232 @@
+package com.supwisdom.activities.menu
+
+import android.content.Intent
+import android.os.AsyncTask
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.bean.AuthRetBean
+import com.supwisdom.bean.BaseResp
+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
+
+/**
+ ** create by zzq on 2019/7/25
+ ** @desc
+ **/
+class MenuPresenter constructor(iMenuView: IMenuView) {
+    private val iMenuView = iMenuView
+    private val pos = SPApplication.getInstance().getPos()
+    fun manualAuth() {
+        iMenuView.showOperHint("正在签到", "请稍等...")
+        AsyncAuth().execute()
+    }
+
+    fun linkCheck() {
+        iMenuView.showOperHint("正在链路检测", "请稍等...")
+        AsyncLink().execute()
+    }
+
+    private inner class AsyncAuth : AsyncTask<Void, Void, AuthRetBean>() {
+        override fun doInBackground(vararg voids: Void): AuthRetBean {
+            val retBean = AuthEpay().login()
+            if (retBean.retcode == PublicDef.SUCCESS) {
+                val cfgRecord = pos.getConfigPara()
+                cfgRecord!!.deviceid = retBean.deviceid
+                cfgRecord.merchaccno = retBean.merchaccno
+                cfgRecord.shopname = retBean.shopname
+                pos.replaceConfigPara(cfgRecord)
+
+                SPApplication.getInstance().setEpayLinking(true)
+            } else {
+                SPApplication.getInstance().setEpayLinking(false)
+            }
+            return retBean
+        }
+
+        override fun onPostExecute(retBean: AuthRetBean?) {
+            if (retBean == null) {
+                iMenuView.showOperResult("签到结果", "请求超时")
+            } else {
+                iMenuView.showOperResult("签到结果", retBean.retmsg!!)
+            }
+        }
+    }
+
+    private inner class AsyncLink : AsyncTask<Void, Void, BaseResp>() {
+        override fun doInBackground(vararg voids: Void): BaseResp {
+//             EpayApiImpl().linkCheck()
+            return BaseResp(PublicDef.ERROR, "暂未实现")
+        }
+
+        override fun onPostExecute(baseResp: BaseResp) {
+            SPApplication.getInstance().setEpayLinking(baseResp.retcode == PublicDef.SUCCESS)
+            iMenuView.showOperResult("检测结果", baseResp.retmsg!!)
+        }
+    }
+
+    fun doReverse() {
+        val record = pos.getTransdtlUnionAll(DateUtil.getNowDateNoFormat(), 0)
+        if (record == null) {
+            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())
+        ) {
+            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())
+        }
+    }
+
+    fun doUploadTransdtl() {
+        iMenuView.showOperHint("正在上传流水", "请稍等...")
+        UploadTransdtl().execute()
+    }
+
+    private inner class UploadTransdtl : AsyncTask<Int, Int, BaseResp>() {
+        protected override fun doInBackground(vararg params: Int): BaseResp {
+            val apiInterface = SPApplication.getInstance().getAPIMode()
+            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, "保存流水失败")
+                    }
+                }
+            }
+
+            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, "保存流水失败")
+                    }
+                }
+            }
+
+            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) {
+            if (resp.retcode == PublicDef.SUCCESS) {
+                iMenuView.showOperResult("上传流水成功", resp.retmsg!!)
+            } else {
+                iMenuView.showOperResult("上传流水失败", resp.retmsg!!)
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
index fe6dfc9..aaac8dc 100644
--- a/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
+++ b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
@@ -88,4 +88,15 @@
         flag,
         balance
     }
+
+    enum class TransdtlUnion {
+        transdate,
+        transtime,
+        devseqno,
+        payway,
+        reversalflag,
+        payamt,
+        status,
+        upflag
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt b/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
index 04f7f6e..6fd57b1 100644
--- a/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
+++ b/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
@@ -16,9 +16,9 @@
         private val VERSION = 1
         private var instance: DBTransdtlHelper? = null
 
-        val TABLE_NAME_CONFIGPARA = "tb_configpara"
-        val TABLE_NAME_DTL_ONLINE = "tb_dtl_online"
-        val TABLE_NAME_DTL_OFFLINE = "tb_dtl_offline"
+        const val TABLE_NAME_CONFIGPARA = "tb_configpara"
+        const val TABLE_NAME_DTL_ONLINE = "tb_dtl_online"
+        const val TABLE_NAME_DTL_OFFLINE = "tb_dtl_offline"
 
         fun getInstance(context: Context): DBTransdtlHelper {
             if (null == instance) {
@@ -77,7 +77,7 @@
             + BeanPropEnum.TransdtlOffline.cardphyid + " varchar(32),"
             + BeanPropEnum.TransdtlOffline.payamt + " integer,"
             + BeanPropEnum.TransdtlOffline.extraamt + " integer,"
-            + BeanPropEnum.TransdtlOffline.reversalflag + " integer,"
+            + BeanPropEnum.TransdtlOffline.reversalflag + " varchar(8),"
             + BeanPropEnum.TransdtlOffline.reversalseqno + " integer,"
             + BeanPropEnum.TransdtlOffline.reversaltransdate + " char(8),"
             + BeanPropEnum.TransdtlOffline.reversaltranstime + " char(6),"
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
index c2f158b..20bcec1 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
@@ -3,6 +3,8 @@
 import android.content.ContentValues
 import android.content.Context
 import android.database.Cursor
+import com.supwisdom.entity.PayStatus
+import com.supwisdom.entity.ReversalFlag
 import com.supwisdom.entity.TransdtlOfflineRecord
 import java.util.concurrent.locks.Lock
 
@@ -125,15 +127,26 @@
         record.cardphyid = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.cardphyid.toString()))
         record.payamt = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.payamt.toString()))
         record.extraamt = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.extraamt.toString()))
-        val flag = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.reversalflag.toString()))
-        record.reversalflag = flag == 1
+        var flag = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.reversalflag.toString()))
+        when (flag) {
+            ReversalFlag.NONE.toString() -> record.reversalflag = ReversalFlag.NONE
+            ReversalFlag.AUTO.toString() -> record.reversalflag = ReversalFlag.AUTO
+            ReversalFlag.MANUAL.toString() -> record.reversalflag = ReversalFlag.MANUAL
+            else -> record.reversalflag = ReversalFlag.NONE
+        }
         record.reversalseqno =
             cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.reversalseqno.toString()))
         record.reversaltransdate =
             cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.reversaltransdate.toString()))
         record.reversaltranstime =
             cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.reversaltranstime.toString()))
-        record.status = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.status.toString()))
+        flag = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.status.toString()))
+        when (flag) {
+            PayStatus.INIT.toString() -> record.status = PayStatus.INIT
+            PayStatus.FAIL.toString() -> record.status = PayStatus.FAIL
+            PayStatus.SUC.toString() -> record.status = PayStatus.SUC
+            else -> record.status = PayStatus.INIT
+        }
         record.upflag = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.upflag.toString()))
         return record
     }
@@ -148,15 +161,11 @@
         values.put(BeanPropEnum.TransdtlOffline.cardphyid.toString(), record.cardphyid)
         values.put(BeanPropEnum.TransdtlOffline.payamt.toString(), record.payamt)
         values.put(BeanPropEnum.TransdtlOffline.extraamt.toString(), record.extraamt)
-        if (record.reversalflag) {
-            values.put(BeanPropEnum.TransdtlOffline.reversalflag.toString(), 1)
-        } else {
-            values.put(BeanPropEnum.TransdtlOffline.reversalflag.toString(), 0)
-        }
+        values.put(BeanPropEnum.TransdtlOffline.reversalflag.toString(), record.reversalflag.toString())
         values.put(BeanPropEnum.TransdtlOffline.reversalseqno.toString(), record.reversalseqno)
         values.put(BeanPropEnum.TransdtlOffline.reversaltransdate.toString(), record.reversaltransdate)
         values.put(BeanPropEnum.TransdtlOffline.reversaltranstime.toString(), record.reversaltranstime)
-        values.put(BeanPropEnum.TransdtlOffline.status.toString(), record.status)
+        values.put(BeanPropEnum.TransdtlOffline.status.toString(), record.status.toString())
         values.put(BeanPropEnum.TransdtlOffline.upflag.toString(), record.upflag)
         return values
     }
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
index c6a4f6d..f40b672 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
@@ -3,6 +3,8 @@
 import android.content.ContentValues
 import android.content.Context
 import android.database.Cursor
+import com.supwisdom.entity.PayStatus
+import com.supwisdom.entity.ReversalFlag
 import com.supwisdom.entity.TransdtlOnlineRecord
 import java.util.concurrent.locks.Lock
 
@@ -128,11 +130,22 @@
         record.billno = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.billno.toString()))
         record.payamt = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.payamt.toString()))
         record.extraamt = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.extraamt.toString()))
-        record.reversalflag =
-            cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.reversalflag.toString()))
+        var flag = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.reversalflag.toString()))
+        when (flag) {
+            ReversalFlag.NONE.toString() -> record.reversalflag = ReversalFlag.NONE
+            ReversalFlag.AUTO.toString() -> record.reversalflag = ReversalFlag.AUTO
+            ReversalFlag.MANUAL.toString() -> record.reversalflag = ReversalFlag.MANUAL
+            else -> record.reversalflag = ReversalFlag.NONE
+        }
         record.reversalbillno =
             cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.reversalbillno.toString()))
-        record.status = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.status.toString()))
+        flag = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.status.toString()))
+        when (flag) {
+            PayStatus.INIT.toString() -> record.status = PayStatus.INIT
+            PayStatus.FAIL.toString() -> record.status = PayStatus.FAIL
+            PayStatus.SUC.toString() -> record.status = PayStatus.SUC
+            else -> record.status = PayStatus.INIT
+        }
         record.upflag = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.upflag.toString()))
         return record
     }
@@ -150,9 +163,9 @@
         values.put(BeanPropEnum.TransdtlOnline.payamt.toString(), record.payamt)
         values.put(BeanPropEnum.TransdtlOnline.extraamt.toString(), record.extraamt)
         values.put(BeanPropEnum.TransdtlOnline.billno.toString(), record.billno)
-        values.put(BeanPropEnum.TransdtlOnline.reversalflag.toString(), record.reversalflag)
+        values.put(BeanPropEnum.TransdtlOnline.reversalflag.toString(), record.reversalflag.toString())
         values.put(BeanPropEnum.TransdtlOnline.reversalbillno.toString(), record.reversalbillno)
-        values.put(BeanPropEnum.TransdtlOnline.status.toString(), record.status)
+        values.put(BeanPropEnum.TransdtlOnline.status.toString(), record.status.toString())
         values.put(BeanPropEnum.TransdtlOnline.upflag.toString(), record.upflag)
         return values
     }
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
new file mode 100644
index 0000000..62bd5d6
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
@@ -0,0 +1,117 @@
+package com.supwisdom.db
+
+import android.content.Context
+import android.database.Cursor
+import com.supwisdom.entity.PayStatus
+import com.supwisdom.entity.ReversalFlag
+import com.supwisdom.entity.TransdtlUnionRecord
+import java.util.concurrent.locks.Lock
+
+/**
+ ** create by zzq on 2019/7/25
+ ** @desc
+ **/
+class TransdtlUnionDao constructor(context: Context) {
+    private val tablesql = StringBuilder()
+    private val dbHelper = DBParaHelper.getInstance(context)
+
+    init {
+        tablesql.append("select ")
+            .append(BeanPropEnum.TransdtlOffline.transdate).append(",")
+            .append(BeanPropEnum.TransdtlOffline.transtime).append(",")
+            .append(BeanPropEnum.TransdtlOffline.devseqno).append(",")
+            .append(" 'offcard' as ").append(BeanPropEnum.TransdtlUnion.payway).append(",")
+            .append(BeanPropEnum.TransdtlOffline.reversalflag).append(",")
+            .append(BeanPropEnum.TransdtlOffline.payamt).append(",")
+            .append(BeanPropEnum.TransdtlOffline.status).append(",")
+            .append(BeanPropEnum.TransdtlOffline.upflag)
+            .append(" from ").append(DBTransdtlHelper.TABLE_NAME_DTL_OFFLINE)
+            .append(" UNION ALL select ")
+            .append(BeanPropEnum.TransdtlOnline.transdate).append(",")
+            .append(BeanPropEnum.TransdtlOnline.transtime).append(",")
+            .append(BeanPropEnum.TransdtlOnline.devseqno).append(",")
+            .append(BeanPropEnum.TransdtlOnline.transtype).append(" as ").append(BeanPropEnum.TransdtlUnion.payway)
+            .append(",")
+            .append(BeanPropEnum.TransdtlOnline.reversalflag).append(",")
+            .append(BeanPropEnum.TransdtlOffline.payamt).append(",")
+            .append(BeanPropEnum.TransdtlOffline.status).append(",")
+            .append(BeanPropEnum.TransdtlOffline.upflag)
+            .append(" from ").append(DBTransdtlHelper.TABLE_NAME_DTL_ONLINE)
+    }
+
+    fun getLock(): Lock {
+        return dbHelper.getLock()
+    }
+
+    fun get(date: String, offset: Int, flag: Int): List<TransdtlUnionRecord> {
+        val db = dbHelper.readableDatabase
+        var cursor: Cursor? = null
+        var sql = when (flag) {
+            0 -> {
+                ("select * from ("
+                        + tablesql.toString()
+                        + ") where " + BeanPropEnum.TransdtlUnion.transdate + "='" + date
+                        + "' order by " + BeanPropEnum.TransdtlUnion.transtime
+                        + " desc ")
+            }
+            1 -> {
+                ("select * from ("
+                        + tablesql.toString()
+                        + ") where " + BeanPropEnum.TransdtlUnion.transdate + "='" + date
+                        + "' and " + BeanPropEnum.TransdtlUnion.status + "='"
+                        + PayStatus.SUC.toString()
+                        + "' order by " + BeanPropEnum.TransdtlUnion.transtime
+                        + " desc ")
+            }
+            else -> {
+                ("select * from ("
+                        + tablesql.toString()
+                        + ") where " + BeanPropEnum.TransdtlUnion.transdate + "='" + date
+                        + "' and " + BeanPropEnum.TransdtlUnion.status + "='"
+                        + PayStatus.FAIL.toString()
+                        + "' order by " + BeanPropEnum.TransdtlUnion.transtime
+                        + " desc ")
+            }
+        }
+        sql += if (offset > 0) {
+            " limit 1 offset $offset"
+        } else {
+            " limit 1"
+        }
+        try {
+            cursor = db.rawQuery(sql, null)
+            val list = ArrayList<TransdtlUnionRecord>()
+            while (cursor != null && cursor.moveToNext()) {
+                list.add(getRecord(cursor))
+            }
+            return list
+        } finally {
+            cursor?.close()
+        }
+    }
+
+    private fun getRecord(cursor: Cursor): TransdtlUnionRecord {
+        val record = TransdtlUnionRecord()
+        record.transdate = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.transdate.toString()))
+        record.transtime = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.transtime.toString()))
+        record.devseqno = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.devseqno.toString()))
+        record.payway = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.payway.toString()))
+        var flag = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.reversalflag.toString()))
+        when (flag) {
+            ReversalFlag.NONE.toString() -> record.reversalflag = ReversalFlag.NONE
+            ReversalFlag.AUTO.toString() -> record.reversalflag = ReversalFlag.AUTO
+            ReversalFlag.MANUAL.toString() -> record.reversalflag = ReversalFlag.MANUAL
+            else -> record.reversalflag = ReversalFlag.NONE
+        }
+        record.payamt = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.payamt.toString()))
+        flag = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.status.toString()))
+        when (flag) {
+            PayStatus.INIT.toString() -> record.status = PayStatus.INIT
+            PayStatus.FAIL.toString() -> record.status = PayStatus.FAIL
+            PayStatus.SUC.toString() -> record.status = PayStatus.SUC
+            else -> record.status = PayStatus.INIT
+        }
+        record.upflag = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.upflag.toString()))
+        return record
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt b/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt
index 9018e4a..ea0e3b4 100644
--- a/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt
@@ -14,10 +14,10 @@
     var payamt: Int = 0
     var extraamt: Int = 0
     var managefeetype: String? = null // none,discount,mealer
-    var reversalflag = false
+    var reversalflag: ReversalFlag? = null //消费none 手动撤销 manual
     var reversalseqno: Int = 0 //被冲正流水号
     var reversaltransdate: String? = null //被冲正流水日期
     var reversaltranstime: String? = null  //被冲正流水时间
-    var status: String? = null // init,fail,suc
+    var status: PayStatus? = null // init,fail,suc
     var upflag: Int = 0 // 1已上传
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt b/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
index 1037fb9..8114a10 100644
--- a/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
@@ -19,8 +19,8 @@
     var username: String? = null
     var userid: Int = 0
     var billno: String? = null
-    var reversalflag: String? = null //消费null 自动冲正auto 手动撤销 manual
+    var reversalflag: ReversalFlag? = null //消费none 自动冲正auto 手动撤销 manual
     var reversalbillno: String? = null //被冲正交易参考号
-    var status: String? = null // init,fail,suc
+    var status: PayStatus? = null // init,fail,suc
     var upflag: Int = 0 // 1已上传
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/entity/TransdtlUnionRecord.kt b/app/src/main/java/com/supwisdom/entity/TransdtlUnionRecord.kt
new file mode 100644
index 0000000..184265c
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlUnionRecord.kt
@@ -0,0 +1,38 @@
+package com.supwisdom.entity
+
+/**
+ ** create by zzq on 2019/7/25
+ ** @desc
+ **/
+class TransdtlUnionRecord {
+    var transdate: String? = null
+    var transtime: String? = null
+    var devseqno: Int = 0
+    var payway: String? = null //card,code,offcard
+    var reversalflag: ReversalFlag? = null //消费none 自动冲正auto 手动撤销 manual
+    var payamt: Int = 0
+    var status: PayStatus? = null // init,fail,suc
+    var upflag: Int = 0
+}
+
+/**
+ * NONE -- 正常消费
+ * AUTO -- 自动冲正
+ * MANUAL -- 手动撤销
+ */
+enum class ReversalFlag {
+    NONE,
+    AUTO,
+    MANUAL
+}
+
+/**
+ * INIT -- 初始化
+ * FAIL -- 支付失败
+ * SUC --支付成功
+ */
+enum class PayStatus {
+    INIT,
+    FAIL,
+    SUC
+}
\ 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 17cb4a6..89d6623 100644
--- a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
+++ b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
@@ -2,6 +2,7 @@
 
 import com.supwisdom.activities.SPApplication
 import com.supwisdom.activities.YktSession
+import com.supwisdom.entity.ReversalFlag
 import com.supwisdom.entity.TransdtlOfflineRecord
 import com.supwisdom.entity.TransdtlOnlineRecord
 import com.supwisdom.exception.HeartBeatError
@@ -32,7 +33,7 @@
     }
 
     override fun linkCheck() {
-        TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+
     }
 
     @Throws(SysParaError::class)
@@ -70,6 +71,12 @@
     @Throws(TransdtlUploadError::class)
     override fun uploadTransdtl(record: TransdtlOfflineRecord) {
         val params = WebParams()
+        var reversalflag = "false"
+        if (record.reversalflag == ReversalFlag.AUTO ||
+            record.reversalflag == ReversalFlag.MANUAL
+        ) {
+            reversalflag = "true"
+        }
         params.setParameter("devphyid", record.devphyid)
             .setParameter("termseqno", record.devseqno)
             .setParameter("transdate", record.transdate)
@@ -79,11 +86,11 @@
             .setParameter("amount", record.payamt)
             .setParameter("extraamt", record.extraamt)
             .setParameter("managefeetype", record.managefeetype)
-            .setParameter("reversalflag", record.reversalflag.toString())
+            .setParameter("reversalflag", reversalflag)
             .setParameter("reversaltermseqno", record.reversalseqno)
             .setParameter("reversaltransdate", record.reversaltransdate)
             .setParameter("reversaltransdate", record.reversaltranstime)
-            .setParameter("status", record.status)
+            .setParameter("status", record.status.toString())
 
         val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/offlinetransdtl", "", params)
     }
diff --git a/app/src/main/java/com/supwisdom/utils/PublicDef.kt b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
index 7f1204d..d0cf3de 100644
--- a/app/src/main/java/com/supwisdom/utils/PublicDef.kt
+++ b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
@@ -71,6 +71,10 @@
     const val CONTROL_TRANSDTLOFF_SEQNO = "offseqno"
     const val CONTROL_FIXAMT = "fixamt"
     const val CONTROL_HAS_REGISTER = "hasregister"
-    const val CONTROL_GATEMODE_FLAG = "gatemodeflag"
-    const val CONTROL_REVENUE_WAY = "revenueway"
+    const val CONTROL_OFFLINE_DAY_DISABLE = "offdaydisable"
+    const val CONTROL_DEBUG_ENABLE = "debugenable"
+    /**
+     * 消费冲正时限
+     */
+    const val REVERSE_MS_GAP = 600000
 }
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_communicate.xml b/app/src/main/res/layout/activity_communicate.xml
new file mode 100644
index 0000000..d66e4ca
--- /dev/null
+++ b/app/src/main/res/layout/activity_communicate.xml
@@ -0,0 +1,170 @@
+<?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="通讯参数设置"/>
+
+        <ScrollView
+                android:layout_width="match_parent"
+                android:layout_height="match_parent">
+
+            <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:orientation="vertical">
+
+                <LinearLayout style="@style/comm_ll_para_style">
+
+                    <TextView
+                            style="@style/init_param_name_style"
+                            android:text="终端MODE"/>
+
+                    <RadioGroup
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content">
+
+                        <RadioButton
+                                android:id="@+id/rb_pay_mode"
+                                style="@style/comm_rb_para_style"
+                                android:checked="true"
+                                android:text="消费模式"/>
+
+                        <RadioButton
+                                android:id="@+id/rb_deposit_mode"
+                                style="@style/comm_rb_para_style"
+                                android:text="充值模式"
+                                android:visibility="gone"/>
+
+                        <RadioButton
+                                android:id="@+id/rb_third_pay_mode"
+                                style="@style/comm_rb_para_style"
+                                android:text="对接消费模式"
+                                android:visibility="gone"/>
+
+                        <RadioButton
+                                android:id="@+id/rb_third_login_mode"
+                                style="@style/comm_rb_para_style"
+                                android:text="对接签到模式"
+                                android:visibility="gone"/>
+
+                        <RadioButton
+                                android:id="@+id/rb_gate_mode"
+                                style="@style/comm_rb_para_style"
+                                android:visibility="gone"/>
+                    </RadioGroup>
+                </LinearLayout>
+
+                <LinearLayout style="@style/comm_ll_para_style">
+
+                    <TextView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:gravity="start|center"
+                            android:text="设备编号"
+                            android:textColor="@color/light_blue2"
+                            android:textSize="@dimen/enable_devphyid_font_size"/>
+
+                    <TextView
+                            android:id="@+id/comm_devphyid"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:gravity="start|center"
+                            android:inputType="numberDecimal"
+                            android:lines="1"
+                            android:maxLength="8"
+                            android:text="00000000"
+                            android:textColor="@color/light_blue2"
+                            android:textSize="@dimen/enable_devphyid_font_size"/>
+                </LinearLayout>
+                <!--第一行-->
+                <LinearLayout style="@style/comm_ll_para_style">
+
+                    <TextView
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:gravity="start|center"
+                            android:text="服务器地址"
+                            android:textColor="@color/light_blue2"
+                            android:textSize="@dimen/enable_devphyid_font_size"/>
+
+                    <EditText
+                            android:id="@+id/comm_epay_url"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:layout_marginLeft="10dp"
+                            android:gravity="start|center"
+                            android:text="172.28.201.101"
+                            android:textColor="@color/light_blue2"
+                            android:textSize="@dimen/enable_devphyid_font_size"/>
+                </LinearLayout>
+
+                <LinearLayout style="@style/comm_ll_para_style">
+
+                    <TextView
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:gravity="start|center"
+                            android:text="服务器标识"
+                            android:textColor="@color/light_blue2"
+                            android:textSize="@dimen/enable_devphyid_font_size"/>
+
+                    <EditText
+                            android:id="@+id/comm_epay_uri"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:text="epayapi"
+                            android:textColor="@color/light_blue2"
+                            android:textSize="@dimen/enable_devphyid_font_size"/>
+                </LinearLayout>
+                <!--第二行-->
+                <LinearLayout style="@style/comm_ll_para_style">
+
+                    <TextView
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:text="服务器端口"
+                            android:textColor="@color/light_blue2"
+                            android:textSize="@dimen/enable_devphyid_font_size"/>
+
+                    <EditText
+                            android:id="@+id/comm_epay_port"
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content"
+                            android:inputType="numberDecimal"
+                            android:lines="1"
+                            android:maxLength="5"
+                            android:text="9116"
+                            android:textColor="@color/light_blue2"
+                            android:textSize="@dimen/enable_devphyid_font_size"/>
+                </LinearLayout>
+
+                <LinearLayout
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:orientation="horizontal"
+                        android:padding="10dp"
+                        android:weightSum="2">
+
+                    <TextView
+                            android:id="@+id/btn_cancel"
+                            style="@style/param_item_text_btn_style"
+                            android:text="取消"/>
+
+                    <TextView
+                            android:id="@+id/btn_confirm"
+                            style="@style/param_item_text_btn_style"
+                            android:layout_marginLeft="10dp"
+                            android:text="保存"/>
+                </LinearLayout>
+
+                <TextView
+                        android:layout_width="match_parent"
+                        android:layout_height="500dp"/>
+            </LinearLayout>
+        </ScrollView>
+    </LinearLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_control.xml b/app/src/main/res/layout/activity_control.xml
new file mode 100644
index 0000000..e1168df
--- /dev/null
+++ b/app/src/main/res/layout/activity_control.xml
@@ -0,0 +1,84 @@
+<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="本地参数设置"/>
+        <ScrollView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:scrollbars="none">
+
+            <LinearLayout android:layout_width="match_parent"
+                          android:layout_height="match_parent"
+                          android:orientation="vertical">
+
+                <LinearLayout style="@style/control_item_ll_style">
+
+                    <TextView
+                            style="@style/init_param_name_style"
+                            android:text="脱机天数判断"/>
+
+                    <RadioGroup
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content">
+
+                        <RadioButton
+                                android:id="@+id/rb_offline_enable"
+                                style="@style/comm_rb_para_style"
+                                android:checked="true"
+                                android:text="开启"/>
+
+                        <RadioButton
+                                android:id="@+id/rb_offline_disable"
+                                style="@style/comm_rb_para_style"
+                                android:text="关闭"/>
+                    </RadioGroup>
+                </LinearLayout>
+
+                <LinearLayout style="@style/control_item_ll_style">
+
+                    <TextView
+                            style="@style/init_param_name_style"
+                            android:text="调试模式"/>
+
+                    <RadioGroup
+                            android:layout_width="match_parent"
+                            android:layout_height="wrap_content">
+
+                        <RadioButton
+                                android:id="@+id/rb_debug_enable"
+                                style="@style/comm_rb_para_style"
+                                android:text="开启"/>
+
+                        <RadioButton
+                                android:id="@+id/rb_debug_disable"
+                                style="@style/comm_rb_para_style"
+                                android:checked="true"
+                                android:text="关闭"/>
+                    </RadioGroup>
+
+                </LinearLayout>
+            </LinearLayout>
+        </ScrollView>
+
+        <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginTop="20dp"
+                android:orientation="horizontal"
+                android:weightSum="2">
+
+            <TextView
+                    android:id="@+id/btn_cancel"
+                    style="@style/control_text_btn_style"
+                    android:text="取消"/>
+
+            <TextView
+                    android:id="@+id/btn_save"
+                    style="@style/control_text_btn_style"
+                    android:text="保存"/>
+        </LinearLayout>
+    </LinearLayout>
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_manage.xml b/app/src/main/res/layout/activity_manage.xml
new file mode 100644
index 0000000..7537388
--- /dev/null
+++ b/app/src/main/res/layout/activity_manage.xml
@@ -0,0 +1,54 @@
+<?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="维护管理界面"/>
+
+        <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_shop_passwd"/>
+
+            <TextView
+                    style="@style/menu_item_text_style"
+                    android:text="@string/consume_menu_comm_set"/>
+
+            <TextView
+                    style="@style/menu_item_text_style"
+                    android:text="@string/consume_menu_unconfirm_transdtl"/>
+
+            <TextView
+                    style="@style/menu_item_text_style"
+                    android:text="@string/consume_menu_out_dtl"/>
+
+            <TextView
+                    style="@style/menu_item_text_style"
+                    android:text="@string/consume_menu_upgrade"/>
+
+            <TextView
+                    style="@style/menu_item_text_style"
+                    android:text="@string/consume_menu_app_exit"/>
+
+            <TextView
+                    style="@style/menu_item_text_style"
+                    android:text="@string/consume_menu_setting"/>
+
+            <TextView
+                    style="@style/menu_item_text_style"
+                    android:text="@string/consume_menu_clear_blklist"/>
+
+            <TextView
+                    style="@style/menu_item_text_style"
+                    android:text="@string/consume_menu_control_set"/>
+        </LinearLayout>
+    </LinearLayout>
+</LinearLayout>
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
index 6b58d35..2d50789 100644
--- a/app/src/main/res/values/dimens.xml
+++ b/app/src/main/res/values/dimens.xml
@@ -175,7 +175,7 @@
     <dimen name="all_back_img_padtop">60dp</dimen>
     <dimen name="all_back_img_padleft">20dp</dimen>
     <!--本地控制参数-->
-    <dimen name="control_para_gap">20dp</dimen>
+    <dimen name="control_para_gap">10dp</dimen>
     <dimen name="control_para_text_size">28dp</dimen>
     <!--行间间隔-->
     <dimen name="line_divide">20dp</dimen>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 0e8c119..7f993f9 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -335,6 +335,7 @@
         <item name="android:layout_width">match_parent</item>
         <item name="android:layout_height">wrap_content</item>
         <item name="android:layout_gravity">center_horizontal</item>
+        <item name="android:layout_marginLeft">10dp</item>
         <item name="android:layout_marginTop">@dimen/control_para_gap</item>
         <item name="android:orientation">vertical</item>
     </style>
@@ -480,4 +481,18 @@
         <item name="android:textSize">30sp</item>
         <item name="android:maxLines">1</item>
     </style>
+    <style name="comm_rb_para_style">
+        <item name="android:layout_width">wrap_content</item>
+        <item name="android:layout_height">match_parent</item>
+        <item name="android:gravity">center|start</item>
+        <item name="android:textColor">@color/light_blue2</item>
+        <item name="android:textSize">28sp</item>
+    </style>
+    <style name="comm_ll_para_style">
+        <item name="android:layout_width">match_parent</item>
+        <item name="android:layout_height">wrap_content</item>
+        <item name="android:orientation">vertical</item>
+        <item name="android:layout_marginLeft">10dp</item>
+        <item name="android:padding">10dp</item>
+    </style>
 </resources>
