init
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>