diff --git a/app/src/main/java/com/supwisdom/activities/checkShoppwd/CheckShoppwdActivity.kt b/app/src/main/java/com/supwisdom/activities/checkShoppwd/CheckShoppwdActivity.kt
new file mode 100644
index 0000000..5b12e29
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/checkShoppwd/CheckShoppwdActivity.kt
@@ -0,0 +1,161 @@
+package com.supwisdom.activities.checkShoppwd
+
+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.SPApplication
+import com.supwisdom.activities.consume.ConsumeActivity
+import com.supwisdom.activities.consume.bean.CardUserInfoBean
+import com.supwisdom.auxscreen.AuxScreenController
+import com.supwisdom.utils.CommonUtil
+import com.supwisdom.utils.SoundUtil
+import java.util.*
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+class CheckShoppwdActivity : BaseActivity() {
+    private var tmpPwd: String = ""
+    private lateinit var vTitle: TextView
+    private lateinit var vContent: TextView
+    private var keyActive = true
+    private var transdtlType: String? = null
+    private val pos = SPApplication.getInstance().getPos()
+
+    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)
+        vContent = findViewById<TextView>(R.id.content)
+    }
+
+    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)) {
+                            doReverse()
+                        } 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
+        transdtlType = this.intent.getStringExtra("transdtlType")
+        refresh()
+    }
+
+    override fun onNewIntent(intent: Intent) {
+        super.onNewIntent(intent)
+        this.intent.putExtra("transdtlType", intent.getStringExtra("transdtlType"))
+    }
+
+    private fun refresh() {
+        tmpPwd = ""
+        vTitle.text = "手工冲正"
+        vContent.text = ""
+        AuxScreenController.getInstance().refreshTitle("商户密码验证")
+        AuxScreenController.getInstance().refreshBottom("取消键撤销输入")
+        AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("商户密码:", " "))
+    }
+
+    private fun checkMngPwd(inputPwd: String): Boolean {
+        return inputPwd == pos.getConfigPara()!!.shopPwd
+    }
+
+    private fun doReverse() {
+
+    }
+
+    private fun showRvsSuc(info: CardUserInfoBean) {
+        val tmp = String.format("金额: %.02f元", info.payamt / 100.0f)
+        vContent.text = "冲正成功\n$tmp"
+        SoundUtil.playMusic(applicationContext, R.raw.reversal_suc)
+        AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("冲正成功", tmp))
+        jumpActivity(ConsumeActivity::class.java)
+    }
+
+    private fun showRvsFail(errmsg: String) {
+        vContent.text = "冲正失败\n$errmsg"
+        SoundUtil.playMusic(applicationContext, R.raw.reversal_fail)
+        AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("冲正失败", errmsg))
+        jumpActivity(ConsumeActivity::class.java)
+    }
+
+    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/consume/mode/ConsumeApi.kt b/app/src/main/java/com/supwisdom/activities/consume/mode/ConsumeApi.kt
index e6c49b1..e06756a 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/mode/ConsumeApi.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/mode/ConsumeApi.kt
@@ -58,4 +58,12 @@
 
         return YktSession.getInstance().sendYktRequestPost("/api/pos/accquery", "", params)
     }
+
+    fun queryRevenue(devphyid: String, date: String): TransResp? {
+        val params = WebParams()
+        params.setParameter("devphyid", devphyid)
+            .setParameter("date", date)
+
+        return YktSession.getInstance().sendYktRequestPost("/api/pos/revenue", "", params)
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/revenue/IRevenueView.kt b/app/src/main/java/com/supwisdom/activities/revenue/IRevenueView.kt
new file mode 100644
index 0000000..74b4227
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/revenue/IRevenueView.kt
@@ -0,0 +1,13 @@
+package com.supwisdom.activities.revenue
+
+import com.supwisdom.activities.revenue.bean.RevenueAmtRetBean
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+interface IRevenueView {
+    fun showRevenueFail(msg: String)
+
+    fun showRevenueSuc(record: RevenueAmtRetBean)
+}
\ 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
index 96e7754..895d5b4 100644
--- a/app/src/main/java/com/supwisdom/activities/revenue/RevenueActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/revenue/RevenueActivity.kt
@@ -1,10 +1,148 @@
 package com.supwisdom.activities.revenue
 
+import android.os.Bundle
+import android.view.KeyEvent
+import android.widget.TextView
+import com.supwisdom.R
 import com.supwisdom.activities.BaseActivity
+import com.supwisdom.activities.menu.MenuActivity
+import com.supwisdom.activities.revenue.bean.RevenueAmtRetBean
+import com.supwisdom.auxscreen.AuxScreenController
+import com.supwisdom.utils.DateUtil
+import java.util.*
 
 /**
  ** create by zzq on 2019/7/26
  ** @desc
  **/
-class RevenueActivity : BaseActivity() {
+class RevenueActivity : BaseActivity(), IRevenueView {
+    private lateinit var vContent: TextView
+    private lateinit var vSearchDate: TextView
+    private lateinit var presenter: RevenuePresenter
+    private var isSearching: Boolean = false
+
+    override fun onCreate(savedInstanceState: Bundle?) {
+        super.onCreate(savedInstanceState)
+        this.setContentView(R.layout.activity_revenue)
+        initView()
+        initData()
+    }
+
+    private fun initData() {
+        presenter = RevenuePresenter(this)
+    }
+
+    private fun initView() {
+        vContent = this.findViewById<TextView>(R.id.revenue_content)
+        vSearchDate = this.findViewById<TextView>(R.id.revenue_date)
+    }
+
+    private fun refresh() {
+        AuxScreenController.getInstance().refreshTitle("营业额查询")
+        AuxScreenController.getInstance().refreshBottom("F3/F4 切换日期")
+        AuxScreenController.getInstance()
+            .refreshContent(Arrays.asList<String>("查询日期:" + DateUtil.getNowDateSpecFormat(), "正在查询.", "请稍等...", " "))
+
+        val searchDate = DateUtil.getNowDateNoFormat()
+        vSearchDate.text = searchDate
+        isSearching = false
+        presenter.queryRevenue(searchDate)
+    }
+
+    override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+        if (event.action == KeyEvent.ACTION_DOWN) {
+            if (isSearching) {
+                return false
+            }
+            when (event.keyCode) {
+                //case KeyEvent.KEYCODE_DPAD_UP:
+                //F2
+                KeyEvent.KEYCODE_DPAD_DOWN -> {
+                    //F3
+                    movePredate()
+                    return true
+                }
+                KeyEvent.KEYCODE_DPAD_RIGHT -> {
+                    //F4
+                    moveNextDate()
+                    return true
+                }
+                KeyEvent.KEYCODE_DEL -> {
+                    //cancel
+                    jumpActivity(MenuActivity::class.java)
+                    return true
+                }
+            }//case KeyEvent.KEYCODE_ENTER:
+            //ok
+            //  return true;
+        }
+        return super.dispatchKeyEvent(event)
+    }
+
+    private fun moveNextDate() {
+        val date = getSearchDate()
+        if (date >= DateUtil.getNowDateNoFormat()) {
+            return
+        }
+        isSearching = true
+        val nextdate = DateUtil.getSpecifiedDayAfter(date)
+        vSearchDate.text = nextdate
+        AuxScreenController.getInstance()
+            .refreshContent(Arrays.asList<String>("查询日期:" + convertDateToShow(nextdate), "正在查询", "请稍等...", " "))
+        presenter.queryRevenue(nextdate)
+    }
+
+    private fun movePredate() {
+        isSearching = true
+        val predate = DateUtil.getSpecifiedDayBefore(getSearchDate())
+        vSearchDate.text = predate
+        AuxScreenController.getInstance()
+            .refreshContent(Arrays.asList<String>("查询日期:" + convertDateToShow(predate), "正在查询", "请稍等...", " "))
+        presenter.queryRevenue(predate)
+    }
+
+    private fun convertDateToShow(date: String): String {
+        return date.substring(0, 4) + "/" + date.substring(4, 6) + "/" + date.substring(6)
+    }
+
+    override fun onResume() {
+        super.onResume()
+        refresh()
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+    }
+
+    override fun showRevenueFail(msg: String) {
+        isSearching = false
+        vContent.text = "查询失败\n原因: $msg"
+        AuxScreenController.getInstance().refreshContent(
+            Arrays.asList<String>(
+                "查询日期:" + convertDateToShow(getSearchDate()),
+                "查询失败:", "原因:$msg", " "
+            )
+        )
+    }
+
+    override fun showRevenueSuc(record: RevenueAmtRetBean) {
+        isSearching = false
+        val sb = StringBuilder("查询成功\n")
+        sb.append("有效笔数 : ").append(record.salescnt).append("笔\n")
+            .append("营业汇总 : ").append(String.format("%.02f 元", record.salesamt / 100.0f))
+        vContent.text = sb.toString()
+
+        AuxScreenController.getInstance().refreshContent(
+            Arrays.asList<String>(
+                "查询日期:" + convertDateToShow(getSearchDate()),
+                "查询成功:",
+                "有效笔数:" + record.salescnt + "笔",
+                "营业汇总:" + String.format("%.02f元", record.salesamt / 100.0f)
+            )
+        )
+    }
+
+    private fun getSearchDate(): String {
+        return vSearchDate.text.toString()
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/revenue/RevenuePresenter.kt b/app/src/main/java/com/supwisdom/activities/revenue/RevenuePresenter.kt
new file mode 100644
index 0000000..4ee5bd2
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/revenue/RevenuePresenter.kt
@@ -0,0 +1,42 @@
+package com.supwisdom.activities.revenue
+
+import android.os.AsyncTask
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.consume.mode.ConsumeApi
+import com.supwisdom.activities.revenue.bean.RevenueAmtRetBean
+import com.supwisdom.utils.GsonUtil
+import com.supwisdom.utils.PublicDef
+import org.apache.http.HttpStatus
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+class RevenuePresenter constructor(iRevenueView: IRevenueView) {
+    private val iRevenueView = iRevenueView
+    private val pos = SPApplication.getInstance().getPos()
+
+    fun queryRevenue(date: String) {
+        AsyncRevenue().execute(pos.getConfigPara()!!.devphyid, date)
+    }
+
+    private inner class AsyncRevenue : AsyncTask<String, Void, RevenueAmtRetBean>() {
+        override fun onPostExecute(retBean: RevenueAmtRetBean) {
+            if (retBean.retcode != PublicDef.SUCCESS) {
+                iRevenueView.showRevenueFail(retBean.retmsg!!)
+            } else {
+                iRevenueView.showRevenueSuc(retBean)
+            }
+        }
+
+        override fun doInBackground(vararg strings: String): RevenueAmtRetBean {
+            val devphyid = strings[0]
+            val date = strings[1]
+            val resp = ConsumeApi().queryRevenue(devphyid, date) ?: return RevenueAmtRetBean(PublicDef.ERROR, "请求超时")
+            if (resp.retcode != HttpStatus.SC_OK) {
+                return RevenueAmtRetBean(resp.retcode, "错误码=" + resp.retcode)
+            }
+            return GsonUtil.GsonToBean(resp.retjson!!, RevenueAmtRetBean::class.java)
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/revenue/bean/RevenueAmtRetBean.kt b/app/src/main/java/com/supwisdom/activities/revenue/bean/RevenueAmtRetBean.kt
new file mode 100644
index 0000000..f18160c
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/revenue/bean/RevenueAmtRetBean.kt
@@ -0,0 +1,15 @@
+package com.supwisdom.activities.revenue.bean
+
+import com.supwisdom.bean.BaseResp
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc 营业额返回
+ **/
+class RevenueAmtRetBean constructor(retcode: Int, retmsg: String) : BaseResp(retcode, retmsg) {
+    var salesdate: String? = null
+    var salesamt: Int = 0
+    var salescnt: Int = 0
+    var managefeecnt: Int = 0
+    var managefeeamt: Int = 0
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/utils/DateUtil.kt b/app/src/main/java/com/supwisdom/utils/DateUtil.kt
index 786fee3..f125399 100644
--- a/app/src/main/java/com/supwisdom/utils/DateUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/DateUtil.kt
@@ -34,6 +34,10 @@
         return FORMAT_yyyy_MM_dd_HH_mm_ss.format(Date())
     }
 
+    fun getNowDateSpecFormat(): String {
+        return FORMAT_yyyy_MM_dd.format(Date())
+    }
+
     /**
      * @return yyyy-MM-dd HH:mm:ss.SSS
      */
diff --git a/app/src/main/res/layout/activity_revenue.xml b/app/src/main/res/layout/activity_revenue.xml
new file mode 100644
index 0000000..45541ba
--- /dev/null
+++ b/app/src/main/res/layout/activity_revenue.xml
@@ -0,0 +1,66 @@
+<?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:gravity="center"
+            android:padding="20dp"
+            android:text="营业额查询"
+            android:textColor="@color/light_blue2"
+            android:textSize="50sp" />
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="10dp"
+            android:orientation="horizontal"
+            android:padding="10dp">
+
+            <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="查询日期: "
+                android:textColor="@color/light_blue2"
+                android:textSize="30sp" />
+
+            <TextView
+                android:id="@+id/revenue_date"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="20180818"
+                android:textColor="@color/light_blue2"
+                android:textSize="30sp" />
+        </LinearLayout>
+
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="10dp"
+            android:padding="10dp"
+            android:text="查询结果: "
+            android:textColor="@color/light_blue2"
+            android:textSize="30sp" />
+
+        <TextView
+            android:id="@+id/revenue_content"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="10dp"
+            android:padding="10dp"
+            android:text=""
+            android:textColor="@color/light_blue2"
+            android:textSize="30sp" />
+    </LinearLayout>
+</LinearLayout>
\ No newline at end of file
