Merge tag '1.1.0' into develop
tag 1.1.0
diff --git a/app/build.gradle b/app/build.gradle
index d919594..3debf66 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,80 +1,93 @@
-plugins {
- id 'com.gladed.androidgitversion' version '0.4.9'
-}
-apply plugin: 'com.android.application'
-apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
-
-android {
- compileSdkVersion 28
- defaultConfig {
- applicationId "com.supwisdom.posa711"
- minSdkVersion 22
- targetSdkVersion 28
- versionName androidGitVersion.name()
- versionCode androidGitVersion.code()
- ndk {
- abiFilters "arm64-v8a"
- }
- multiDexEnabled true
- }
- signingConfigs {
- release {
- storeFile file("$rootDir/keys-app.jks")
- storePassword "123456"
- keyAlias "sup"
- keyPassword "123456"
- v1SigningEnabled true
- v2SigningEnabled true
- }
- }
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
- signingConfig signingConfigs.release
- }
- }
- compileOptions {
- sourceCompatibility 1.8
- targetCompatibility 1.8
- }
- packagingOptions {
- exclude 'META-INF/DEPENDENCIES'
- exclude 'META-INF/LICENSE'
- exclude 'META-INF/LICENSE.txt'
- exclude 'META-INF/license.txt'
- exclude 'META-INF/NOTICE'
- exclude 'META-INF/NOTICE.txt'
- exclude 'META-INF/notice.txt'
- exclude 'META-INF/ASL2.0'
- }
-}
-
-dependencies {
-// implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61'
- implementation group: 'org.jetbrains.kotlin', name: 'kotlin-reflect', version: '1.3.61'
- implementation 'com.android.support:appcompat-v7:28.0.0'
- implementation 'com.android.support.constraint:constraint-layout:1.1.3'
- testImplementation 'junit:junit:4.12'
- androidTestImplementation 'com.android.support.test:runner:1.0.2'
- androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
-
-// compile 'com.alibaba:fastjson:1.1.70.android'
- implementation 'com.google.code.gson:gson:2.8.6'
- implementation 'com.nineoldandroids:parent:2.4.0'
- implementation 'com.squareup.okhttp3:okhttp:4.2.2'
- implementation 'net.java.dev.jna:jna:5.5.0@aar'
- implementation 'com.koushikdutta.async:androidasync:2.2.1'
- implementation group: 'com.android.support', name: 'recyclerview-v7', version: '28.0.0'
- implementation 'org.apache.commons:commons-lang3:3.9'
- implementation 'com.android.support:multidex:1.0.3'
- implementation 'org.jetbrains.kotlin:kotlin-reflect:1.3.61'
- implementation 'org.springframework.android:spring-android-core:1.0.1.RELEASE'
- implementation 'org.apache.httpcomponents:httpcore:4.4.13'
- implementation("com.beust:klaxon:0.30") {
- exclude group: 'org.jetbrains'
- }
- compile files('libs/zxinglibsl.jar')
-}
+plugins {
+ id 'com.gladed.androidgitversion' version '0.4.9'
+}
+apply plugin: 'com.android.application'
+apply plugin: 'kotlin-android'
+apply plugin: 'kotlin-android-extensions'
+
+android {
+ compileSdkVersion 28
+ defaultConfig {
+ applicationId "com.supwisdom.posa711"
+ minSdkVersion 22
+ targetSdkVersion 28
+ versionName androidGitVersion.name()
+ versionCode androidGitVersion.code()
+ ndk {
+ abiFilters "arm64-v8a"
+ }
+ multiDexEnabled true
+ }
+ signingConfigs {
+ release {
+ storeFile file("$rootDir/keys-app.jks")
+ storePassword "123456"
+ keyAlias "sup"
+ keyPassword "123456"
+ v1SigningEnabled true
+ v2SigningEnabled true
+ }
+ sign {
+ storeFile file("$rootDir/keys-sign.jks")
+ storePassword "123456"
+ keyAlias "sup"
+ keyPassword "android"
+ v1SigningEnabled true
+ v2SigningEnabled true
+ }
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ signingConfig signingConfigs.release
+ }
+ debug {
+ signingConfig signingConfigs.sign
+ }
+ }
+ compileOptions {
+ sourceCompatibility 1.8
+ targetCompatibility 1.8
+ }
+ packagingOptions {
+ exclude 'META-INF/DEPENDENCIES'
+ exclude 'META-INF/LICENSE'
+ exclude 'META-INF/LICENSE.txt'
+ exclude 'META-INF/license.txt'
+ exclude 'META-INF/NOTICE'
+ exclude 'META-INF/NOTICE.txt'
+ exclude 'META-INF/notice.txt'
+ exclude 'META-INF/ASL2.0'
+ }
+}
+
+dependencies {
+// implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61'
+ implementation group: 'org.jetbrains.kotlin', name: 'kotlin-reflect', version: '1.3.61'
+ implementation 'com.android.support:appcompat-v7:28.0.0'
+ implementation 'com.android.support.constraint:constraint-layout:1.1.3'
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'com.android.support.test:runner:1.0.2'
+ androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+
+// compile 'com.alibaba:fastjson:1.1.70.android'
+ implementation 'com.google.code.gson:gson:2.8.6'
+ implementation 'com.nineoldandroids:parent:2.4.0'
+ implementation 'com.squareup.okhttp3:okhttp:4.2.2'
+ implementation 'net.java.dev.jna:jna:5.5.0@aar'
+ implementation 'com.koushikdutta.async:androidasync:2.2.1'
+ implementation group: 'com.android.support', name: 'recyclerview-v7', version: '28.0.0'
+ implementation 'org.apache.commons:commons-lang3:3.9'
+ implementation 'com.android.support:multidex:1.0.3'
+ implementation 'org.jetbrains.kotlin:kotlin-reflect:1.3.61'
+ implementation 'org.springframework.android:spring-android-core:1.0.1.RELEASE'
+ implementation 'org.apache.httpcomponents:httpcore:4.4.13'
+ implementation("com.beust:klaxon:0.30") {
+ exclude group: 'org.jetbrains'
+ }
+ implementation files('libs/zxinglibsl.jar')
+ implementation files('libs/codelib_3.0.2_release.jar')
+ implementation files('libs/bcprov-jdk16-145.jar')
+}
diff --git a/app/libs/bcprov-jdk16-145.jar b/app/libs/bcprov-jdk16-145.jar
new file mode 100644
index 0000000..38685d5
--- /dev/null
+++ b/app/libs/bcprov-jdk16-145.jar
Binary files differ
diff --git a/app/libs/codelib_3.0.2_release.jar b/app/libs/codelib_3.0.2_release.jar
new file mode 100644
index 0000000..0ae8e33
--- /dev/null
+++ b/app/libs/codelib_3.0.2_release.jar
Binary files differ
diff --git a/app/src/main/java/com/supwisdom/activities/SPApplication.kt b/app/src/main/java/com/supwisdom/activities/SPApplication.kt
index 781fd44..c8cf58f 100644
--- a/app/src/main/java/com/supwisdom/activities/SPApplication.kt
+++ b/app/src/main/java/com/supwisdom/activities/SPApplication.kt
@@ -1,69 +1,86 @@
-package com.supwisdom.activities
-
-import android.content.Context
-import android.content.Intent
-import android.support.multidex.MultiDex
-import android.support.multidex.MultiDexApplication
-import com.supwisdom.db.Pos
-import com.supwisdom.utils.CommonUtil
-import com.supwisdom.utils.PublicDef
-
-/**
- ** create by zzq on 2019/7/23
- ** @desc
- **/
-class SPApplication : MultiDexApplication() {
- private var mPos: Pos? = null
- @Volatile
- private var epayLinking: Boolean = false //链路状态 true 联机
-
- companion object {
- @Volatile
- private var mInstance: SPApplication? = null
-
- fun getInstance(): SPApplication {
- return mInstance!!
- }
- }
-
- fun getPos(): Pos {
- if (mPos == null) {
- synchronized(SPApplication::class.java) {
- if (mPos == null) {
- mPos = Pos(applicationContext)
- }
- }
- }
- return mPos!!
- }
-
- fun setEpayLinking(isOnline: Boolean) {
- epayLinking = isOnline
- }
-
- fun isOnline(): Boolean {
- return epayLinking
- }
-
- override fun onCreate() {
- super.onCreate()
- mInstance = this
- startService()
- CrashHandler.getInstance().init(applicationContext)
- }
-
- override fun attachBaseContext(base: Context) {
- super.attachBaseContext(base)
- MultiDex.install(this)
- }
-
- private fun startService() {
- if (!CommonUtil.isServiceWork(this, PublicDef.BG_SERVICE_NAME)) {
- startService(Intent(this, ServiceDemo::class.java))
- }
- }
-
- fun stopService() {
- stopService(Intent(this, ServiceDemo::class.java))
- }
+package com.supwisdom.activities
+
+import android.content.Context
+import android.content.Intent
+import android.support.multidex.MultiDex
+import android.support.multidex.MultiDexApplication
+import com.supwisdom.db.Pos
+import com.supwisdom.utils.CommonUtil
+import com.supwisdom.utils.DateUtil
+import com.supwisdom.utils.PublicDef
+
+/**
+ ** create by zzq on 2019/7/23
+ ** @desc
+ **/
+class SPApplication : MultiDexApplication() {
+ private var mPos: Pos? = null
+
+ @Volatile
+ private var epayLinking: Boolean = false //链路状态 true 联机
+ private var synoCodeActive: Boolean = false // true-激活
+
+ companion object {
+ @Volatile
+ private var mInstance: SPApplication? = null
+
+ fun getInstance(): SPApplication {
+ return mInstance!!
+ }
+ }
+
+ fun getPos(): Pos {
+ if (mPos == null) {
+ synchronized(SPApplication::class.java) {
+ if (mPos == null) {
+ mPos = Pos(applicationContext)
+ }
+ }
+ }
+ return mPos!!
+ }
+
+ fun isSynoCodeActive(): Boolean {
+ return synoCodeActive
+ }
+
+ fun setSynoCodeActive(active: Boolean) {
+ this.synoCodeActive = active
+ }
+
+ fun setEpayLinking(isOnline: Boolean) {
+ epayLinking = isOnline
+ }
+
+ fun isOnline(): Boolean {
+ return epayLinking
+ }
+
+ private val startime: String = DateUtil.getNowDateTime()
+
+ fun getStartime(): String {
+ return startime
+ }
+
+ override fun onCreate() {
+ super.onCreate()
+ mInstance = this
+ startService()
+ CrashHandler.getInstance().init(applicationContext)
+ }
+
+ override fun attachBaseContext(base: Context) {
+ super.attachBaseContext(base)
+ MultiDex.install(this)
+ }
+
+ private fun startService() {
+ if (!CommonUtil.isServiceWork(this, PublicDef.BG_SERVICE_NAME)) {
+ startService(Intent(this, ServiceDemo::class.java))
+ }
+ }
+
+ fun stopService() {
+ stopService(Intent(this, ServiceDemo::class.java))
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/auxscreen/AuxScreenController.kt b/app/src/main/java/com/supwisdom/activities/auxscreen/AuxScreenController.kt
index 2e81b1c..9f9ebc8 100644
--- a/app/src/main/java/com/supwisdom/activities/auxscreen/AuxScreenController.kt
+++ b/app/src/main/java/com/supwisdom/activities/auxscreen/AuxScreenController.kt
@@ -1,263 +1,297 @@
-package com.supwisdom.auxscreen
-
-import android.graphics.Color
-import com.newcapec.jni.AuxScreen
-import com.supwisdom.utils.CommonUtil
-import java.util.concurrent.locks.ReentrantLock
-
-/**
- * @author gqy
- * @version 1.0.1
- * @date 2018/7/11
- * @desc 小屏控制器
- */
-class AuxScreenController private constructor() {
- private var auxScreen = AuxScreen()
- private val xStart = 15
- private val xSecStart = 240
- private val sTitle = "refreshTitle"
- private val sContent = "refreshContent"
- private val sBottom = "refreshBottom"
- private val lock = ReentrantLock()
- private val refreshMap = hashMapOf<String, Any>()
- private val auxRunnable = AuxRunnable()
- private var isExit = false
- private var taskThread: Thread? = null
-
- companion object {
- @Volatile
- private var auxController: AuxScreenController? = null
-
- fun getInstance(): AuxScreenController {
- if (null == auxController) {
- synchronized(AuxScreenController::class.java) {
- if (null == auxController) {
- auxController = AuxScreenController()
- }
- }
- }
- return auxController!!
- }
- }
-
- /**
- * 刷新标题栏
- * @param title 标题
- */
- fun refreshTitle(title: String) {
- lock.lock()
- refreshMap[sTitle] = title
- lock.unlock()
- }
-
- private fun localRefreshTitle(title: String) {
- auxScreen.setBgcolor(Color.parseColor("#FFFFFF"))
- auxScreen.clrLine(0, 50)
- auxScreen.setBgcolor(Color.parseColor("#FFFFFF"))
- auxScreen.setFontSize(20)
- auxScreen.setFgcolor(Color.parseColor("#000000"))
- auxScreen.textOut(xStart, 15, title)
- }
-
- /**
- * 内容显示
- * @param list 显示内容 size<=5
- */
- fun refreshContent(list: List<String>) {
- lock.lock()
- refreshMap[sContent] = list
- lock.unlock()
- }
-
- private fun localRefreshContent(list: List<String>) {
- auxScreen.setBgcolor(Color.parseColor("#F2F2F2"))
- clearCenterContent()
-
- val size = list.size
- auxScreen.setFgcolor(Color.parseColor("#000000"))
- when (size) {
- 0 -> {
-
- }
- 1 -> {
- auxScreen.setFontSize(40)
- auxScreen.textOut(xStart, 140, getNotEmptyString(list[0]))
- }
- 2 -> {
- auxScreen.setFontSize(35)
- for (index in 0 until size) {
- auxScreen.textOut(xStart, 120 + 60 * index, getNotEmptyString(list[index]))
- }
- }
- 3 -> {
- auxScreen.setFontSize(30)
- for (index in 0 until size) {
- auxScreen.textOut(xStart, 100 + 50 * index, getNotEmptyString(list[index]))
- }
- }
- 4 -> {
- auxScreen.setFontSize(25)
- for (index in 0 until size) {
- auxScreen.textOut(xStart, 80 + 45 * index, getNotEmptyString(list[index]))
- }
- }
- 5 -> {
- auxScreen.setFontSize(20)
- for (index in 0 until size) {
- auxScreen.textOut(xStart, 70 + 40 * index, getNotEmptyString(list[index]))
- }
- }
- 6 -> {
- auxScreen.setFontSize(15)
- for (index in 0 until size) {
- auxScreen.textOut(xStart, 60 + 35 * index, getNotEmptyString(list[index]))
- }
- }
- 7, 8 -> {
- auxScreen.setFontSize(25)
- for (index in 0 until (size + 1) / 2) {
- auxScreen.textOut(xStart, 80 + 45 * index, getNotEmptyString(list[2 * index]))
- if (2 * index + 1 < size) {
- auxScreen.textOut(xSecStart, 80 + 45 * index, getNotEmptyString(list[2 * index + 1]))
- }
- }
- }
- 9, 10 -> {
- auxScreen.setFontSize(20)
- for (index in 0 until (size + 1) / 2) {
- auxScreen.textOut(xStart, 70 + 40 * index, getNotEmptyString(list[2 * index]))
- if (2 * index + 1 < size) {
- auxScreen.textOut(xSecStart, 70 + 40 * index, getNotEmptyString(list[2 * index + 1]))
- }
- }
- }
- else -> {
- auxScreen.setFontSize(15)
- for (index in 0 until (size + 1) / 2) {
- auxScreen.textOut(xStart, 60 + 35 * index, getNotEmptyString(list[2 * index]))
- if (2 * index + 1 < size) {
- auxScreen.textOut(xSecStart, 60 + 35 * index, getNotEmptyString(list[2 * index + 1]))
- }
- }
- }
- }
- }
-
- /**
- * 处理输入的空字符串
- */
- private fun getNotEmptyString(input: String?): String {
- if (input == null || input.isEmpty()) {
- return " "
- }
- return input
- }
-
- /**
- * 刷新底部状态
- * @param bottom 提示
- */
- fun refreshBottom(bottom: String) {
- lock.lock()
- refreshMap[sBottom] = bottom
- lock.unlock()
- }
-
- private fun localRefreshBootom(bottom: String) {
- auxScreen.setBgcolor(Color.parseColor("#FFFFFF"))
- auxScreen.clrLine(269, 319)
-
- auxScreen.setFontSize(20)
- auxScreen.setFgcolor(Color.parseColor("#000000"))
- auxScreen.textOut(15, 284, bottom)
- }
-
- /**
- * 清空中间的内容
- * @注意:此处必须一行一行的清除,底层bug
- */
- private fun clearCenterContent() {
- auxScreen.clrLine(50, 100)
- auxScreen.clrLine(100, 150)
- auxScreen.clrLine(150, 200)
- auxScreen.clrLine(200, 250)
- auxScreen.clrLine(250, 269)
- auxScreen.setFontSize(50)
- }
-
- /**
- * 打开小屏
- */
- fun open() {
- auxScreen.open()
- if (taskThread == null) {
- isExit = false
- taskThread = Thread(auxRunnable)
- taskThread!!.start()
- }
- }
-
- /**
- * 关闭小屏
- */
- fun close() {
- auxScreen.close()
- isExit = true
- taskThread?.interrupt()
- taskThread = null
- }
-
- /**
- * 初始化小屏
- */
- private fun init() {
- auxScreen.setBgcolor(Color.parseColor("#F2F2F2"))
- auxScreen.cls()
- auxScreen.setSpace(5, 5)
- auxScreen.selectFont(AuxScreen.FONT_CODE_UTF8)
- }
-
- inner class AuxRunnable : Runnable {
- override fun run() {
- init()
- while (!isExit) {
- try {
- try {
- lock.lock()
- val title = refreshMap[sTitle]
- if (title != null) {
- localRefreshTitle(title as String)
- refreshMap.remove(sTitle)
- }
- } finally {
- lock.unlock()
- }
- try {
- lock.lock()
- val content = refreshMap[sContent]
- if (content != null) {
- localRefreshContent(content as List<String>)
- refreshMap.remove(sContent)
- }
- } finally {
- lock.unlock()
- }
- try {
- lock.lock()
- val bottom = refreshMap[sBottom]
- if (bottom != null) {
- localRefreshBootom(bottom as String)
- refreshMap.remove(sBottom)
- }
- } finally {
- lock.unlock()
- }
- } catch (ex: Exception) {
- ex.printStackTrace()
- }
- CommonUtil.doSleep(25)
- }
- }
- }
-}
-
+package com.supwisdom.activities.auxscreen
+
+import android.graphics.Color
+import com.newcapec.jni.AuxScreen
+import com.supwisdom.utils.CommonUtil
+import com.supwisdom.utils.LogUtil
+import java.util.concurrent.locks.ReentrantLock
+
+/**
+ * @author gqy
+ * @version 1.0.1
+ * @date 2018/7/11
+ * @desc 小屏控制器
+ */
+class AuxScreenController private constructor() {
+ private val TAG = "AuxScreenController"
+ private var auxScreen = AuxScreen()
+ private val xStart = 15
+ private val xSecStart = 240
+ private val sTitle = "refreshTitle"
+ private val sContent = "refreshContent"
+ private val sBottom = "refreshBottom"
+ private val lock = ReentrantLock()
+ private val refreshMap = hashMapOf<String, Any>()
+ private val auxRunnable = AuxRunnable()
+ private var taskThread: Thread? = null
+
+ companion object {
+ @Volatile
+ private var auxController: AuxScreenController? = null
+
+ fun getInstance(): AuxScreenController {
+ if (null == auxController) {
+ synchronized(AuxScreenController::class.java) {
+ if (null == auxController) {
+ auxController = AuxScreenController()
+ }
+ }
+ }
+ return auxController!!
+ }
+ }
+
+ /**
+ * 刷新标题栏
+ * @param title 标题
+ */
+ fun refreshTitle(title: String) {
+ lock.lock()
+ refreshMap[sTitle] = title
+ lock.unlock()
+ }
+
+ private fun localRefreshTitle(title: String) {
+ auxScreen.setBgcolor(Color.parseColor("#FFFFFF"))
+ auxScreen.clrLine(0, 50)
+ auxScreen.setBgcolor(Color.parseColor("#FFFFFF"))
+ auxScreen.setFontSize(20)
+ auxScreen.setFgcolor(Color.parseColor("#000000"))
+ auxScreen.textOut(xStart, 15, title)
+ }
+
+ /**
+ * 内容显示
+ * @param list 显示内容 size<=5
+ */
+ fun refreshContent(list: List<String>) {
+ lock.lock()
+ refreshMap[sContent] = list
+ lock.unlock()
+ }
+
+ private fun localRefreshContent(list: List<String>) {
+ auxScreen.setBgcolor(Color.parseColor("#F2F2F2"))
+ clearCenterContent()
+
+ val size = list.size
+ auxScreen.setFgcolor(Color.parseColor("#000000"))
+ when (size) {
+ 0 -> {
+
+ }
+ 1 -> {
+ auxScreen.setFontSize(40)
+ auxScreen.textOut(xStart, 140, getNotEmptyString(list[0]))
+ }
+ 2 -> {
+ auxScreen.setFontSize(35)
+ for (index in 0 until size) {
+ auxScreen.textOut(xStart, 120 + 60 * index, getNotEmptyString(list[index]))
+ }
+ }
+ 3 -> {
+ auxScreen.setFontSize(30)
+ for (index in 0 until size) {
+ auxScreen.textOut(xStart, 100 + 50 * index, getNotEmptyString(list[index]))
+ }
+ }
+ 4 -> {
+ auxScreen.setFontSize(25)
+ for (index in 0 until size) {
+ auxScreen.textOut(xStart, 80 + 45 * index, getNotEmptyString(list[index]))
+ }
+ }
+ 5 -> {
+ auxScreen.setFontSize(20)
+ for (index in 0 until size) {
+ auxScreen.textOut(xStart, 70 + 40 * index, getNotEmptyString(list[index]))
+ }
+ }
+ 6 -> {
+ auxScreen.setFontSize(15)
+ for (index in 0 until size) {
+ auxScreen.textOut(xStart, 60 + 35 * index, getNotEmptyString(list[index]))
+ }
+ }
+ 7, 8 -> {
+ auxScreen.setFontSize(25)
+ for (index in 0 until (size + 1) / 2) {
+ auxScreen.textOut(xStart, 80 + 45 * index, getNotEmptyString(list[2 * index]))
+ if (2 * index + 1 < size) {
+ auxScreen.textOut(
+ xSecStart,
+ 80 + 45 * index,
+ getNotEmptyString(list[2 * index + 1])
+ )
+ }
+ }
+ }
+ 9, 10 -> {
+ auxScreen.setFontSize(20)
+ for (index in 0 until (size + 1) / 2) {
+ auxScreen.textOut(xStart, 70 + 40 * index, getNotEmptyString(list[2 * index]))
+ if (2 * index + 1 < size) {
+ auxScreen.textOut(
+ xSecStart,
+ 70 + 40 * index,
+ getNotEmptyString(list[2 * index + 1])
+ )
+ }
+ }
+ }
+ else -> {
+ auxScreen.setFontSize(15)
+ for (index in 0 until (size + 1) / 2) {
+ auxScreen.textOut(xStart, 60 + 35 * index, getNotEmptyString(list[2 * index]))
+ if (2 * index + 1 < size) {
+ auxScreen.textOut(
+ xSecStart,
+ 60 + 35 * index,
+ getNotEmptyString(list[2 * index + 1])
+ )
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * 处理输入的空字符串
+ */
+ private fun getNotEmptyString(input: String?): String {
+ if (input == null || input.isEmpty()) {
+ return " "
+ }
+ return input
+ }
+
+ /**
+ * 刷新底部状态
+ * @param bottom 提示
+ */
+ fun refreshBottom(bottom: String) {
+ lock.lock()
+ refreshMap[sBottom] = bottom
+ lock.unlock()
+ }
+
+ private fun localRefreshBootom(bottom: String) {
+ auxScreen.setBgcolor(Color.parseColor("#FFFFFF"))
+ auxScreen.clrLine(269, 319)
+
+ auxScreen.setFontSize(20)
+ auxScreen.setFgcolor(Color.parseColor("#000000"))
+ auxScreen.textOut(15, 284, bottom)
+ }
+
+ /**
+ * 清空中间的内容
+ * @注意:此处必须一行一行的清除,底层bug
+ */
+ private fun clearCenterContent() {
+ auxScreen.clrLine(50, 100)
+ auxScreen.clrLine(100, 150)
+ auxScreen.clrLine(150, 200)
+ auxScreen.clrLine(200, 250)
+ auxScreen.clrLine(250, 269)
+ auxScreen.setFontSize(50)
+ }
+
+ /**
+ * 打开小屏
+ */
+ @Synchronized
+ fun open() {
+ auxScreen.open()
+ if (taskThread == null) {
+ taskThread = Thread(auxRunnable)
+ taskThread!!.start()
+ }
+ }
+
+ /**
+ * 关闭小屏
+ */
+ @Synchronized
+ fun close() {
+ auxScreen.close()
+ taskThread?.interrupt()
+ taskThread = null
+ }
+
+ /**
+ * 初始化小屏
+ */
+ private fun init() {
+ auxScreen.setBgcolor(Color.parseColor("#F2F2F2"))
+ auxScreen.cls()
+ auxScreen.setSpace(5, 5)
+ auxScreen.selectFont(AuxScreen.FONT_CODE_UTF8)
+ }
+
+ private inner class AuxRunnable : Runnable {
+ override fun run() {
+ init()
+ var lastTitle = ""
+ var lastBottom = ""
+ while (!Thread.currentThread().isInterrupted) {
+ try {
+ if (lock.tryLock()) {
+ val title = refreshMap[sTitle]
+ if (title != null) {
+ if (lastTitle != title) {
+ localRefreshTitle(title as String)
+ lastTitle = title
+ }
+ refreshMap.remove(sTitle)
+ }
+ lock.unlock()
+ }
+ if (lock.tryLock()) {
+ val content = refreshMap[sContent]
+ if (content != null) {
+ localRefreshContent(content as List<String>)
+ refreshMap.remove(sContent)
+ }
+ lock.unlock()
+ }
+ if (lock.tryLock()) {
+ val bottom = refreshMap[sBottom]
+ if (bottom != null) {
+ if (lastBottom != bottom) {
+ localRefreshBootom(bottom as String)
+ lastBottom = bottom
+ }
+ refreshMap.remove(sBottom)
+ }
+ lock.unlock()
+ }
+ } catch (ex: InterruptedException) {
+ ex.printStackTrace()
+ LogUtil.e(
+ TAG,
+ "aux screen AuxRunnable InterruptedException,ex=${
+ CommonUtil.getExceptionStack(ex)
+ }"
+ )
+ return
+ }
+ try {
+ Thread.sleep(22)
+ } catch (ex: InterruptedException) {
+ ex.printStackTrace()
+ LogUtil.e(
+ TAG,
+ "aux screen AuxRunnable InterruptedException,ex=${
+ CommonUtil.getExceptionStack(ex)
+ }"
+ )
+ return
+ }
+ }
+ LogUtil.e(TAG, "aux screen runnable is close!!!!")
+ }
+ }
+}
+
diff --git a/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt b/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt
index 1417fe2..8aa0cd7 100644
--- a/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt
@@ -1,121 +1,122 @@
-package com.supwisdom.activities.cardlib
-
-import android.os.Bundle
-import android.view.KeyEvent
-import android.view.View
-import android.view.Window
-import android.widget.ProgressBar
-import android.widget.TextView
-import com.supwisdom.R
-import com.supwisdom.activities.BaseActivity
-import com.supwisdom.activities.SPApplication
-import com.supwisdom.activities.init.InitActivity
-import com.supwisdom.activities.load.LoadActivity
-import com.supwisdom.auxscreen.AuxScreenController
-import com.supwisdom.utils.AppExitUtil
-import com.supwisdom.utils.DateUtil
-import com.supwisdom.view.BigProgressDialog
-
-/**
- ** create by zzq on 2019/7/25
- ** @desc
- **/
-@Suppress("DEPRECATION")
-class CardlibActivity : BaseActivity(), ICardlibView {
- private val pos = SPApplication.getInstance().getPos()
- private lateinit var vResult: TextView
- private var vProgressBar: ProgressBar? = null
- private var presenter: CardlibPresenter? = null
- @Volatile
- private var isLoading = false
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- //在窗口标题上显示带进度的横向进度条
- requestWindowFeature(Window.FEATURE_PROGRESS)
- //显示不带进度的进度条
- requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS)
-
- setContentView(R.layout.activity_cardlib)
- initView()
- initData()
- }
-
- private fun initData() {
- presenter = CardlibPresenter(this)
- }
-
- private fun initView() {
- vProgressBar = this.findViewById(R.id.cardlib_bar) as ProgressBar
- vResult = this.findViewById(R.id.cardlib_result) as TextView
- }
-
- override fun showProgress(progress: Int) {
- vProgressBar!!.progress = progress
- }
-
- override fun onResume() {
- super.onResume()
- if (!isLoading) {
- isLoading = true
- refresh()
- presenter!!.initCardlib(this)
- }
- }
-
- override fun dispatchKeyEvent(event: KeyEvent): Boolean {
- if (event.action == KeyEvent.ACTION_DOWN) {
- if (isLoading) {
- return false
- }
- when (event.keyCode) {
- KeyEvent.KEYCODE_DEL -> {
- AppExitUtil.exit()
- }
- }
- }
- return super.dispatchKeyEvent(event)
- }
-
- private fun refresh() {
- AuxScreenController.getInstance().refreshTitle("卡库初始化")
- AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
- AuxScreenController.getInstance().refreshContent(listOf("加载硬件驱动", "请稍等..."))
- }
-
- override fun showInitCardlibResult(issuccess: Boolean, msg: String) {
- if (issuccess) {
- val record = pos.getConfigPara()
- if (record != null && record.initOK && pos.getDynamicPara() != null) {
- jumpActivity(LoadActivity::class.java)
- } else {
- jumpActivity(InitActivity::class.java)
- }
- } else {
- vResult.text = msg
- vResult.visibility = View.VISIBLE
- AuxScreenController.getInstance().refreshTitle("卡库初始化")
- AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
- AuxScreenController.getInstance().refreshContent(listOf("请联系管理员", "加载驱动失败", "原因:", msg))
- }
- isLoading = false
- }
-
- private var dialogProgress: BigProgressDialog? = null
-
- override fun showProgressDialog(msg: String) {
- if (dialogProgress == null) {
- dialogProgress = BigProgressDialog(this, msg, false)
- }
- dialogProgress!!.setMsg(msg)
- dialogProgress!!.show()
- }
-
- override fun closeProgressDialog() {
- dialogProgress?.dismiss()
- }
-
- override fun onDestroy() {
- super.onDestroy()
- }
+package com.supwisdom.activities.cardlib
+
+import android.os.Bundle
+import android.view.KeyEvent
+import android.view.View
+import android.view.Window
+import android.widget.ProgressBar
+import android.widget.TextView
+import com.supwisdom.R
+import com.supwisdom.activities.BaseActivity
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.auxscreen.AuxScreenController
+import com.supwisdom.activities.init.InitActivity
+import com.supwisdom.activities.load.LoadActivity
+import com.supwisdom.utils.AppExitUtil
+import com.supwisdom.utils.DateUtil
+import com.supwisdom.view.BigProgressDialog
+
+/**
+ ** create by zzq on 2019/7/25
+ ** @desc
+ **/
+@Suppress("DEPRECATION")
+class CardlibActivity : BaseActivity(), ICardlibView {
+ private val pos = SPApplication.getInstance().getPos()
+ private lateinit var vResult: TextView
+ private var vProgressBar: ProgressBar? = null
+ private var presenter: CardlibPresenter? = null
+
+ @Volatile
+ private var isLoading = false
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ //在窗口标题上显示带进度的横向进度条
+ requestWindowFeature(Window.FEATURE_PROGRESS)
+ //显示不带进度的进度条
+ requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS)
+
+ setContentView(R.layout.activity_cardlib)
+ initView()
+ initData()
+ }
+
+ private fun initData() {
+ presenter = CardlibPresenter(this)
+ }
+
+ private fun initView() {
+ vProgressBar = this.findViewById(R.id.cardlib_bar) as ProgressBar
+ vResult = this.findViewById(R.id.cardlib_result) as TextView
+ }
+
+ override fun showProgress(progress: Int) {
+ vProgressBar!!.progress = progress
+ }
+
+ override fun onResume() {
+ super.onResume()
+ if (!isLoading) {
+ isLoading = true
+ refresh()
+ presenter!!.initCardlib(this)
+ }
+ }
+
+ override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+ if (event.action == KeyEvent.ACTION_DOWN) {
+ if (isLoading) {
+ return false
+ }
+ when (event.keyCode) {
+ KeyEvent.KEYCODE_DEL -> {
+ AppExitUtil.exit()
+ }
+ }
+ }
+ return super.dispatchKeyEvent(event)
+ }
+
+ private fun refresh() {
+ AuxScreenController.getInstance().refreshTitle("卡库初始化")
+ AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime1())
+ AuxScreenController.getInstance().refreshContent(listOf("加载硬件驱动", "请稍等..."))
+ }
+
+ override fun showInitCardlibResult(issuccess: Boolean, msg: String) {
+ if (issuccess) {
+ val record = pos.getConfigPara()
+ if (record != null && record.initOK && pos.getDynamicPara() != null) {
+ jumpActivity(LoadActivity::class.java)
+ } else {
+ jumpActivity(InitActivity::class.java)
+ }
+ } else {
+ vResult.text = msg
+ vResult.visibility = View.VISIBLE
+ AuxScreenController.getInstance().refreshTitle("卡库初始化")
+ AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime1())
+ AuxScreenController.getInstance().refreshContent(listOf("请联系管理员", "加载驱动失败", "原因:", msg))
+ }
+ isLoading = false
+ }
+
+ private var dialogProgress: BigProgressDialog? = null
+
+ override fun showProgressDialog(msg: String) {
+ if (dialogProgress == null) {
+ dialogProgress = BigProgressDialog(this, msg, false)
+ }
+ dialogProgress!!.setMsg(msg)
+ dialogProgress!!.show()
+ }
+
+ override fun closeProgressDialog() {
+ dialogProgress?.dismiss()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/checkMngpwd/CheckMngpwdActivity.kt b/app/src/main/java/com/supwisdom/activities/checkMngpwd/CheckMngpwdActivity.kt
index 007c9cd..6ca021f 100644
--- a/app/src/main/java/com/supwisdom/activities/checkMngpwd/CheckMngpwdActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/checkMngpwd/CheckMngpwdActivity.kt
@@ -1,138 +1,138 @@
-package com.supwisdom.activities.checkMngpwd
-
-import android.content.Intent
-import android.os.Bundle
-import android.os.CountDownTimer
-import android.view.KeyEvent
-import android.widget.TextView
-import com.supwisdom.R
-import com.supwisdom.activities.BaseActivity
-import com.supwisdom.activities.manage.ManageActivity
-import com.supwisdom.auxscreen.AuxScreenController
-import com.supwisdom.utils.CommonUtil
-import java.util.*
-
-/**
- ** create by zzq on 2019/7/26
- ** @desc
- **/
-class CheckMngpwdActivity : BaseActivity() {
- private var tmpPwd: String = ""
- private lateinit var vTitle: TextView
- private var password: String = ""
- private var mode: String? = null
- private var keyActive = true
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- this.setContentView(R.layout.activity_check_mngpwd)
- initView()
- }
-
- private fun initView() {
- vTitle = findViewById<TextView>(R.id.title)
- }
-
- override fun dispatchKeyEvent(event: KeyEvent): Boolean {
- if (event.action == KeyEvent.ACTION_DOWN) {
- if (!keyActive) {
- return super.dispatchKeyEvent(event)
- }
- resetCounter(200)
-
- val keyCode = event.keyCode
- when (keyCode) {
- KeyEvent.KEYCODE_0,
- KeyEvent.KEYCODE_1,
- KeyEvent.KEYCODE_2,
- KeyEvent.KEYCODE_3,
- KeyEvent.KEYCODE_4,
- KeyEvent.KEYCODE_5,
- KeyEvent.KEYCODE_6,
- KeyEvent.KEYCODE_7,
- KeyEvent.KEYCODE_8,
- KeyEvent.KEYCODE_9 -> {
- tmpPwd += keyCode - KeyEvent.KEYCODE_0
- if (tmpPwd.length >= 6) {
- if (checkMngPwd(tmpPwd)) {
- jumpActivity(ManageActivity::class.java)
- } else {
- AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("维护密码:", "密码错误"))
- }
- tmpPwd = ""
- } else {
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList("维护密码:", CommonUtil.getPasswordStar(tmpPwd.length)))
- }
- }
- KeyEvent.KEYCODE_DEL -> {
- //cancel
- val len = tmpPwd.length
- when {
- len == 1 -> {
- tmpPwd = ""
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList("维护密码:", CommonUtil.getPasswordStar(tmpPwd.length)))
- }
- len > 1 -> {
- tmpPwd = tmpPwd.substring(0, len - 1)
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList("维护密码:", CommonUtil.getPasswordStar(tmpPwd.length)))
- }
- else -> finish()
- }
- }
- }
- }
- return super.dispatchKeyEvent(event)
- }
-
- override fun onResume() {
- super.onResume()
- keyActive = true
- password = this.intent.getStringExtra("password")
- mode = this.intent.getStringExtra("mode")
- refresh()
- }
-
- override fun onNewIntent(intent: Intent) {
- super.onNewIntent(intent)
- this.intent.putExtra("password", intent.getStringExtra("password"))
- this.intent.putExtra("mode", intent.getStringExtra("mode"))
- }
-
- private fun refresh() {
- tmpPwd = ""
- vTitle.text = "维护密码验证"
- AuxScreenController.getInstance().refreshTitle("维护密码验证")
- AuxScreenController.getInstance().refreshBottom("取消键返回上页")
- AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("维护密码:", " "))
- }
-
- private fun checkMngPwd(inputPwd: String): Boolean {
- return inputPwd == password
- }
-
- private var counter: ContinuePressTimer? = null
-
- private fun resetCounter(timems: Long) {
- counter?.cancel()
- if (counter == null) {
- counter = ContinuePressTimer(timems, 100)
- }
- keyActive = false
- counter!!.start()
- }
-
- private inner class ContinuePressTimer internal constructor(millisInFuture: Long, countDownInterval: Long) :
- CountDownTimer(millisInFuture, countDownInterval) {
-
- override fun onTick(millisUntilFinished: Long) {
-
- }
-
- override fun onFinish() {
- keyActive = true
- }
- }
+package com.supwisdom.activities.checkMngpwd
+
+import android.content.Intent
+import android.os.Bundle
+import android.os.CountDownTimer
+import android.view.KeyEvent
+import android.widget.TextView
+import com.supwisdom.R
+import com.supwisdom.activities.BaseActivity
+import com.supwisdom.activities.auxscreen.AuxScreenController
+import com.supwisdom.activities.manage.ManageActivity
+import com.supwisdom.utils.CommonUtil
+import java.util.*
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+class CheckMngpwdActivity : BaseActivity() {
+ private var tmpPwd: String = ""
+ private lateinit var vTitle: TextView
+ private var password: String = ""
+ private var mode: String? = null
+ private var keyActive = true
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ this.setContentView(R.layout.activity_check_mngpwd)
+ initView()
+ }
+
+ private fun initView() {
+ vTitle = findViewById<TextView>(R.id.title)
+ }
+
+ override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+ if (event.action == KeyEvent.ACTION_DOWN) {
+ if (!keyActive) {
+ return super.dispatchKeyEvent(event)
+ }
+ resetCounter(200)
+
+ val keyCode = event.keyCode
+ when (keyCode) {
+ KeyEvent.KEYCODE_0,
+ KeyEvent.KEYCODE_1,
+ KeyEvent.KEYCODE_2,
+ KeyEvent.KEYCODE_3,
+ KeyEvent.KEYCODE_4,
+ KeyEvent.KEYCODE_5,
+ KeyEvent.KEYCODE_6,
+ KeyEvent.KEYCODE_7,
+ KeyEvent.KEYCODE_8,
+ KeyEvent.KEYCODE_9 -> {
+ tmpPwd += keyCode - KeyEvent.KEYCODE_0
+ if (tmpPwd.length >= 6) {
+ if (checkMngPwd(tmpPwd)) {
+ jumpActivity(ManageActivity::class.java)
+ } else {
+ AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("维护密码:", "密码错误"))
+ }
+ tmpPwd = ""
+ } else {
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList("维护密码:", CommonUtil.getPasswordStar(tmpPwd.length)))
+ }
+ }
+ KeyEvent.KEYCODE_DEL -> {
+ //cancel
+ val len = tmpPwd.length
+ when {
+ len == 1 -> {
+ tmpPwd = ""
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList("维护密码:", CommonUtil.getPasswordStar(tmpPwd.length)))
+ }
+ len > 1 -> {
+ tmpPwd = tmpPwd.substring(0, len - 1)
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList("维护密码:", CommonUtil.getPasswordStar(tmpPwd.length)))
+ }
+ else -> finish()
+ }
+ }
+ }
+ }
+ return super.dispatchKeyEvent(event)
+ }
+
+ override fun onResume() {
+ super.onResume()
+ keyActive = true
+ password = this.intent.getStringExtra("password")
+ mode = this.intent.getStringExtra("mode")
+ refresh()
+ }
+
+ override fun onNewIntent(intent: Intent) {
+ super.onNewIntent(intent)
+ this.intent.putExtra("password", intent.getStringExtra("password"))
+ this.intent.putExtra("mode", intent.getStringExtra("mode"))
+ }
+
+ private fun refresh() {
+ tmpPwd = ""
+ vTitle.text = "维护密码验证"
+ AuxScreenController.getInstance().refreshTitle("维护密码验证")
+ AuxScreenController.getInstance().refreshBottom("取消键返回上页")
+ AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("维护密码:", " "))
+ }
+
+ private fun checkMngPwd(inputPwd: String): Boolean {
+ return inputPwd == password
+ }
+
+ private var counter: ContinuePressTimer? = null
+
+ private fun resetCounter(timems: Long) {
+ counter?.cancel()
+ if (counter == null) {
+ counter = ContinuePressTimer(timems, 100)
+ }
+ keyActive = false
+ counter!!.start()
+ }
+
+ private inner class ContinuePressTimer internal constructor(millisInFuture: Long, countDownInterval: Long) :
+ CountDownTimer(millisInFuture, countDownInterval) {
+
+ override fun onTick(millisUntilFinished: Long) {
+
+ }
+
+ override fun onFinish() {
+ keyActive = true
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/checkShoppwd/CheckShoppwdActivity.kt b/app/src/main/java/com/supwisdom/activities/checkShoppwd/CheckShoppwdActivity.kt
index 5b12e29..0df7c50 100644
--- a/app/src/main/java/com/supwisdom/activities/checkShoppwd/CheckShoppwdActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/checkShoppwd/CheckShoppwdActivity.kt
@@ -1,161 +1,179 @@
-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
- }
- }
+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.auxscreen.AuxScreenController
+import com.supwisdom.activities.consume.ConsumeActivity
+import com.supwisdom.activities.consume.bean.CardUserInfoBean
+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)
+
+ when (event.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 += event.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/communicate/CommunicateActivity.kt b/app/src/main/java/com/supwisdom/activities/communicate/CommunicateActivity.kt
index a591170..81af282 100644
--- a/app/src/main/java/com/supwisdom/activities/communicate/CommunicateActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/communicate/CommunicateActivity.kt
@@ -1,117 +1,117 @@
-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 vTenantid: TextView
- 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() {
- vTenantid = findViewById<View>(R.id.comm_tenantid) as TextView
- 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()
- vTenantid.text = record!!.tenantId
- 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)
- }
+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.activities.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 vTenantid: TextView
+ 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() {
+ vTenantid = findViewById<View>(R.id.comm_tenantid) as TextView
+ 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()
+ vTenantid.text = record!!.tenantId
+ 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/consume/ConsumeActivity.kt b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
index 5ae2b1a..39de86e 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/ConsumeActivity.kt
@@ -1,765 +1,785 @@
-package com.supwisdom.activities.consume
-
-import android.annotation.SuppressLint
-import android.app.Activity
-import android.content.Intent
-import android.graphics.Color
-import android.os.Bundle
-import android.os.CountDownTimer
-import android.view.KeyEvent
-import android.view.View
-import android.widget.ImageView
-import android.widget.LinearLayout
-import android.widget.TextView
-import com.supwisdom.R
-import com.supwisdom.activities.BaseActivity
-import com.supwisdom.activities.SPApplication
-import com.supwisdom.activities.consume.bean.CardStatus
-import com.supwisdom.activities.consume.bean.CardUserInfoBean
-import com.supwisdom.activities.menu.MenuActivity
-import com.supwisdom.activities.transdtl.TransdtlActivity
-import com.supwisdom.auxscreen.AuxScreenController
-import com.supwisdom.entity.PayStatus
-import com.supwisdom.entity.PeriodFixPayRecord
-import com.supwisdom.entity.ReversalFlag
-import com.supwisdom.entity.TransdtlUnionRecord
-import com.supwisdom.utils.CommonUtil
-import com.supwisdom.utils.DateUtil
-import com.supwisdom.utils.PublicDef
-import com.supwisdom.utils.SoundUtil
-import com.supwisdom.view.DialogPurchase
-import java.util.*
-import java.util.concurrent.locks.ReentrantLock
-import kotlin.collections.ArrayList
-
-/**
- ** create by zzq on 2019/7/24
- ** @desc
- **/
-@Suppress("DEPRECATION")
-@SuppressLint("NewApi")
-class ConsumeActivity : BaseActivity(), IConsumeView {
- private lateinit var amountTxt: TextView
- private lateinit var presenter: ConsumePresenter
- private lateinit var vLinkstat: TextView
- private lateinit var vShopname: TextView
- private lateinit var vCitizenName: TextView
- private lateinit var vCitizenCardno: TextView
- private lateinit var vCardstatus: TextView
- private lateinit var vTime: TextView
- private lateinit var vLinkLogo: ImageView
- private lateinit var vLastResult: TextView
- private lateinit var vLastPayamt: TextView
- private lateinit var vLastCardno: TextView
- private lateinit var vLastPayway: TextView
- private lateinit var vLastPaytime: TextView
- private lateinit var vLastPayFailreason: TextView
- private lateinit var vLastPayFailll: LinearLayout
- private lateinit var vLastPayamtll: LinearLayout
- private val pos = SPApplication.getInstance().getPos()
- private var beepManager: BeepManager? = null
- private val scanLock = ReentrantLock()
- @Volatile
- private var cardPaying = false
- @Volatile
- private var payStatusEnable = false
- @Volatile
- private var isBackRunning = false
- private var addAmount: Int = 0
- @Volatile
- private var amount: Int = 0
- private var payMode: PayMode? = null
- private val hotkeyPayMap = hashMapOf<Int, Int>()
- private val hotkeyPayList = ArrayList<String>()
- private var payWay: String? = null
- private var counter: LastPayShowTimer? = null
- private var lastPayInfo: CardUserInfoBean? = null
- private var dialogPurchase: DialogPurchase? = null
- private var periodFixPayList: List<PeriodFixPayRecord>? = null
- private var periodFixPayEnable = false
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_consume)
-
- initView()
- initData()
- }
-
- private fun initData() {
- presenter = ConsumePresenter(this)
- presenter.start()
- beepManager = BeepManager(this)
- dialogPurchase = DialogPurchase(this, object : DialogPurchase.ICallBack {
- override fun callback(isManualCancel: Boolean, isPaying: Boolean) {
- if (isPaying) {
- presenter.clickToInterrupt()
- } else {
- when (payMode) {
- PayMode.FIXPAY -> checkAmtToPay(amount)
- PayMode.HOTKEY -> {
- AuxScreenController.getInstance().refreshContent(hotkeyPayList)
- }
- else -> {
- presenter.clickNoPay()
- amountTxt.text = ""
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList(" 欢迎光临!", " 请刷卡..."))
- }
- }
- }
- }
-
- override fun callback(code: String) {
- if (!scanLock.tryLock()) {
- return
- }
- try {
- //正在扣款
- if (someWayPaying()) {
- return
- }
- //已扣款
- if (!payStatusEnable) {
- return
- }
- beepManager!!.playBeepSoundAndVibrate()
- presenter.clickNoPay()
- dialogPurchase!!.codePaying = true
- dialogPurchase!!.codePayingNoCancelEnable = true
- payStatusEnable = false
- presenter.codeToPay(code, amount)
- } finally {
- scanLock.unlock()
- }
- }
- })
- presenter.loadLastTransdtl()
- }
-
- private fun someWayPaying(): Boolean {
- if (cardPaying || dialogPurchase!!.codePaying || isBackRunning) {
- return true
- }
- return false
- }
-
- private fun initView() {
- vShopname = this.findViewById<TextView>(R.id.tv_shopname)
- vLinkLogo = this.findViewById<ImageView>(R.id.tv_linklogo)
- vLinkstat = this.findViewById<TextView>(R.id.tv_linkstat)
- amountTxt = this.findViewById<TextView>(R.id.tv_input_amt)
- vCitizenName = this.findViewById<TextView>(R.id.tv_citizen_name)
- vCitizenCardno = this.findViewById<TextView>(R.id.tv_citizen_cardno)
- vCardstatus = this.findViewById<TextView>(R.id.tv_cardstatus)
- vTime = this.findViewById<TextView>(R.id.tv_nowtime)
- vLastResult = this.findViewById<TextView>(R.id.tv_last_pay_result)
- vLastCardno = this.findViewById<TextView>(R.id.tv_last_cardno)
- vLastPayamt = this.findViewById<TextView>(R.id.tv_last_payamt)
- vLastPayway = this.findViewById<TextView>(R.id.tv_last_payway)
- vLastPaytime = this.findViewById<TextView>(R.id.tv_last_paytime)
- vLastPayFailreason = this.findViewById<TextView>(R.id.tv_last_failreason)
- vLastPayFailll = this.findViewById<LinearLayout>(R.id.ll_consume_last_failreason)
- vLastPayamtll = this.findViewById<LinearLayout>(R.id.ll_consume_last_payamt)
- }
-
- override fun onStop() {
- super.onStop()
- isBackRunning = true
- }
-
- override fun onDestroy() {
- SoundUtil.releaseMusic()
- presenter.stop()
- beepManager!!.close()
- super.onDestroy()
- }
-
- @SuppressLint("SetTextI18n")
- override fun dispatchKeyEvent(event: KeyEvent): Boolean {
- if (event.action == KeyEvent.ACTION_DOWN) {
- presenter.resetOperationTime()
- when (payMode) {
- PayMode.FIXPAY -> fixInputPay(event.keyCode)
- PayMode.HOTKEY -> hotkeyInputPay(event.keyCode)
- else -> normalInputPay(event.keyCode)
- }
- }
- return super.dispatchKeyEvent(event)
- }
-
- private fun fixInputPay(keyCode: Int) {
- when (keyCode) {
- KeyEvent.KEYCODE_DPAD_LEFT -> {
- //'F1'
- isBackRunning = true
- jumpActivity(MenuActivity::class.java)
- }
- KeyEvent.KEYCODE_DPAD_RIGHT -> {
- //'F4'
- jumpActivity(TransdtlActivity::class.java)
- }
- }
- }
-
- private fun hotkeyInputPay(keyCode: Int) {
- when (keyCode) {
- KeyEvent.KEYCODE_0,
- KeyEvent.KEYCODE_1,
- KeyEvent.KEYCODE_2,
- KeyEvent.KEYCODE_3,
- KeyEvent.KEYCODE_4,
- KeyEvent.KEYCODE_5,
- KeyEvent.KEYCODE_6,
- KeyEvent.KEYCODE_7,
- KeyEvent.KEYCODE_8,
- KeyEvent.KEYCODE_9 -> {
- val key = keyCode - KeyEvent.KEYCODE_0
- if (hotkeyPayMap.containsKey(key)) {
- amount = hotkeyPayMap[key]!!
- checkAmtToPay(amount)
- }
- }
- KeyEvent.KEYCODE_DEL -> {
- //cancel
- presenter.clickNoPay()
- AuxScreenController.getInstance().refreshContent(hotkeyPayList)
- }
- KeyEvent.KEYCODE_DPAD_LEFT -> {
- //'F1'
- isBackRunning = true
- jumpActivity(MenuActivity::class.java)
- }
- KeyEvent.KEYCODE_DPAD_RIGHT -> {
- //'F4'
- jumpActivity(TransdtlActivity::class.java)
- }
- }
- }
-
- private fun normalInputPay(keyCode: Int) {
- when (keyCode) {
- KeyEvent.KEYCODE_BACK -> {
- amountTxt.text = "0"
- presenter.clickNoPay()
- }
- 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 -> {
- presenter.clickNoPay()
- addValueToEdit(keyCode - KeyEvent.KEYCODE_0)
- }
- KeyEvent.KEYCODE_POUND, KeyEvent.KEYCODE_PERIOD -> {
- presenter.clickNoPay()
- val str = amountTxt.text.toString()
- if (str.length < 8 && str.indexOf('.') < 0) {
- amountTxt.text = "$str."
- showScreenAmount()
- }
- }
- KeyEvent.KEYCODE_NUMPAD_ADD -> {
- //'+'
- addAmount += getCurAmount()
- amountTxt.text = ""
- showScreenAmount()
- }
- KeyEvent.KEYCODE_DPAD_LEFT -> {
- //'F1'
- isBackRunning = true
- jumpActivity(MenuActivity::class.java)
- }
-// KeyEvent.KEYCODE_DPAD_UP ->
- //'F2'
-// KeyEvent.KEYCODE_DPAD_DOWN ->
- //'F3'
- KeyEvent.KEYCODE_DPAD_RIGHT -> {
- //'F4'
- jumpActivity(TransdtlActivity::class.java)
- }
- KeyEvent.KEYCODE_DEL -> {
- //cancel
- presenter.clickNoPay()
- delValueToEdit()
- }
- KeyEvent.KEYCODE_ENTER -> {
- amount = getCurAmount() + addAmount
- if (amount > 0) {
- checkAmtToPay(amount)
- } else {
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList("请先输入金额:", "金额不能为0"))
- }
- }
- }
- }
-
- override fun showUserInfo(info: CardUserInfoBean) {
- CommonUtil.acquireWakeLock(this)
- vCitizenName.text = info.username
- vCitizenCardno.text = info.cardno
- vCardstatus.text = info.cardstatus?.toString()
- if (info.cardstatus != CardStatus.NORMAL) {
- vCardstatus.setTextColor(Color.RED)
- } else {
- vCardstatus.setTextColor(resources.getColor(R.color.blue))
- }
- }
-
- override fun screenSaver(flag: Boolean) {
- if (flag) {
- CommonUtil.setAppBrightness(this, PublicDef.SCREEN_SAVER_BRIGHTNESS)
- } else {
- CommonUtil.setAppBrightness(this, PublicDef.SCREEN_NORMAL_BRIGHTNESS)
- }
- }
-
- private var lastshowtime: String? = null
- override fun clearUserInfo(datetime: String) {
- vCitizenName.text = null
- vCitizenCardno.text = null
- vCardstatus.text = null
- val tmptime = datetime.substring(0, 16)
- if (lastshowtime != tmptime) {
- lastshowtime = tmptime
- vTime.text = tmptime
- AuxScreenController.getInstance().refreshBottom(tmptime)
- if (periodFixPayEnable) {
- parsePeriodFixPay()
- }
- }
- if (dialogPurchase!!.isShowing &&
- !dialogPurchase!!.isFixPay &&
- payStatusEnable
- ) {
- beepManager!!.playBeepSoundAndVibrate()
- }
- }
-
- override fun onResume() {
- super.onResume()
- isBackRunning = false
- beepManager!!.updatePrefs()
- dealIntent()
- refresh()
- refreshRecentDtl(lastPayInfo)
- }
-
- private fun dealIntent() {
- amount = this.intent.getStringExtra("amount")?.toInt() ?: 0
- payWay = this.intent.getStringExtra("payway")
- val operation = this.intent.getStringExtra("operation")
- if (operation == "reverse") {
- presenter.clickToReverse(amount)
- dialogPurchase!!.show("等待冲正", CommonUtil.showFormatAmount("金额", amount))
- }
- this.intent.putExtra("amount", "0")
- this.intent.putExtra("payway", "")
- this.intent.putExtra("operation", "")
- }
-
- override fun onNewIntent(intent: Intent) {
- this.intent.putExtra("amount", intent.getStringExtra("amount"))
- this.intent.putExtra("payway", intent.getStringExtra("payway"))
- this.intent.putExtra("operation", intent.getStringExtra("operation"))
- }
-
- private fun refresh() {
- addAmount = 0
- amountTxt.text = "0"
- var shopname = pos.getDynamicPara()!!.shopname
- if (shopname == null || shopname.length < 9) {
- vShopname.textSize = resources.getDimension(R.dimen.consume_shopname_text_size_normal)
- } else {
- vShopname.textSize = resources.getDimension(R.dimen.consume_shopname_text_size_middle)
- if (shopname.length > 10) {
- val len = shopname.length / 2
- shopname = shopname.substring(0, len) + "\n" + shopname.substring(len)
- }
- }
- vShopname.text = shopname
-
- refreshLinkStatus(SPApplication.getInstance().isOnline())
- AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime().substring(0, 16))
- AuxScreenController.getInstance().refreshContent(Arrays.asList(" 欢迎光临!", " 请刷卡..."))
-
- periodFixPayEnable = false
- dialogPurchase?.dismiss()
- pos.getControlPara(PublicDef.CONTROL_FIXAMT)?.also { mode ->
- when (mode.paraval) {
- PayMode.HOTKEY.desc -> {
- presenter.setFixMode(false)
- payMode = PayMode.HOTKEY
- hotkeyPayMap.clear()
- hotkeyPayList.clear()
- pos.getHotkeyPay()?.forEach {
- hotkeyPayMap[it.key] = it.amount
- hotkeyPayList.add(
- String.format(
- "按键%d - %.02f元",
- it.key,
- it.amount / 100.0f
- )
- )
- }
- AuxScreenController.getInstance().refreshContent(hotkeyPayList)
- }
- PayMode.PERIODFIX.desc -> {
- periodFixPayEnable = true
- periodFixPayList = pos.getPeriodFixPay()
- parsePeriodFixPay()
- }
- PayMode.NORMAL.desc -> {
- doNormalPay()
- }
- else -> {
- try {
- doFixPay(Integer.parseInt(mode.paraval))
- } catch (ex: Exception) {
- ex.printStackTrace()
- }
- }
- }
- }
- }
-
- private fun parsePeriodFixPay() {
- val nowtime = DateUtil.getNowTimeNoFormat().substring(0, 4)
- periodFixPayList?.forEach {
- if (it.beginTime!! <= nowtime && nowtime < it.endTime!!) {
- if (payMode != PayMode.FIXPAY || amount != it.amount) {
- doFixPay(it.amount)
- }
- return
- }
- }
- if (payMode != PayMode.NORMAL) {
- doNormalPay()
- }
- }
-
- private fun doFixPay(fixamt: Int) {
- presenter.setFixMode(true)
- payMode = PayMode.FIXPAY
- checkAmtToPay(fixamt)
- }
-
- private fun doNormalPay() {
- amount = 0
- presenter.setFixMode(false)
- payMode = PayMode.NORMAL
- }
-
- override fun refreshLinkStatus(isOnline: Boolean) {
- if (isOnline) {
- vLinkLogo.setImageDrawable(getDrawable(R.drawable.wireless_on))
- vLinkstat.text = "联机"
- vLinkstat.setTextColor(resources.getColor(R.color.blue))
- AuxScreenController.getInstance().refreshTitle("联机 F4查看上笔记录")
- } else {
- vLinkLogo.setImageDrawable(getDrawable(R.drawable.wireless_off))
- vLinkstat.text = "脱机"
- vLinkstat.setTextColor(Color.RED)
- AuxScreenController.getInstance().refreshTitle("脱机 F4查看上笔记录")
- }
- }
-
- override fun showConsumeSuc(info: CardUserInfoBean) {
- dialogPurchase!!.showPaySuccess(info)
- val auxList = ArrayList<String>()
- auxList.add(info.retmsg!!)
- auxList.add(CommonUtil.showFormatAmount("金额", info.payamt))
- when {
- info.amount > info.payamt -> {
- auxList.add(CommonUtil.showFormatAmount("折扣", info.amount - info.payamt))
- }
- info.amount < info.payamt -> {
- auxList.add(CommonUtil.showFormatAmount("搭伙", info.payamt - info.amount))
- }
- }
- if (info.balance != null) {
- auxList.add(CommonUtil.showFormatAmount("余额", info.balance!!))
- }
- AuxScreenController.getInstance().refreshContent(auxList)
- SoundUtil.playMusic(applicationContext, R.raw.consume_suc)
- refreshRecentDtl(info)
- }
-
- override fun showConsumeHint(hint: String) {
- val amountStr = CommonUtil.showFormatAmount("金额", amount)
- dialogPurchase!!.showProcess(hint, amountStr)
- AuxScreenController.getInstance().refreshContent(Arrays.asList(hint, amountStr))
- }
-
- override fun showConsumeQuery(hint: String) {
- dialogPurchase!!.showQueryProcess(hint, "请耐心等待")
- AuxScreenController.getInstance().refreshContent(Arrays.asList(hint, "请耐心等待"))
- }
-
- override fun showConsumeInterrupt(info: CardUserInfoBean) {
- showPayInterrupt(info.cardno)
- dialogPurchase!!.showPayInterrupt()
- AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("交易取消", "以银行交易为准"))
- SoundUtil.playMusic(applicationContext, R.raw.pay_cancel)
- }
-
- override fun showConsumeFail(info: CardUserInfoBean) {
- dialogPurchase!!.showPayFail(info)
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList<String>("消费失败", "原因:", info.retmsg))
- SoundUtil.playMusic(applicationContext, R.raw.consume_fail)
- refreshRecentDtl(info)
- }
-
- override fun showReverseSuc(info: CardUserInfoBean) {
- dialogPurchase!!.showReverseSuccess(info)
- AuxScreenController.getInstance()
- .refreshContent(
- Arrays.asList<String>(
- info.retmsg,
- CommonUtil.showFormatAmount("金额", info.payamt)
- )
- )
- SoundUtil.playMusic(applicationContext, R.raw.reversal_suc)
- refreshRecentDtl(info)
- }
-
- override fun showReverseFail(info: CardUserInfoBean) {
- dialogPurchase!!.showReverseFail(info)
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList<String>("冲正失败", "原因:", info.retmsg))
- SoundUtil.playMusic(applicationContext, R.raw.reversal_fail)
- refreshRecentDtl(info)
- }
-
- private var lastShowRecentTime: String? = null
- private fun refreshRecentDtl(info: CardUserInfoBean?) {
- if (info != null) {
- val showtime: Long = 30 * 1000
- lastPayInfo = info
- if (lastShowRecentTime == null) {
- if (info.transtime != null) {
- val paytime = DateUtil.timeFormatConvertToLong(info.transtime!!)
- val nowtime = DateUtil.timeFormatConvertToLong(DateUtil.getNowTimeNoFormat())
- if (nowtime - paytime > showtime) {
- return
- }
- }
- }
- //已显示过不在显示
- if (lastShowRecentTime == info.transtime) {
- return
- }
- lastShowRecentTime = info.transtime
-
- if (info.status == PayStatus.SUC) {
- when {
- info.reversalFlag == ReversalFlag.AUTO -> vLastResult.text = "自动冲正"
- info.reversalFlag == ReversalFlag.MANUAL -> vLastResult.text = "手动撤销"
- else -> vLastResult.text = "消费成功"
- }
- vLastPayFailll.visibility = View.GONE
- vLastPayamtll.visibility = View.VISIBLE
- vLastPayamt.text = String.format("%.02f元", info.payamt / 100.0f)
- } else {
- if (info.reversalFlag == ReversalFlag.AUTO ||
- info.reversalFlag == ReversalFlag.MANUAL
- ) {
- vLastResult.text = "冲正失败"
- } else {
- vLastResult.text = "消费失败"
- }
- vLastPayFailll.visibility = View.VISIBLE
- vLastPayamtll.visibility = View.GONE
- vLastPayFailreason.text = info.retmsg
- }
- vLastCardno.text = info.cardno
- vLastPayway.text = if (info.payway == "code") {
- "二维码"
- } else {
- "市民卡"
- }
- val sb = StringBuilder()
- sb.append(info.transtime?.substring(0, 2)).append(":")
- .append(info.transtime?.substring(2, 4)).append(":")
- .append(info.transtime?.substring(4))
- vLastPaytime.text = sb.toString()
- resetPayShowCounter(showtime)
- }
- }
-
- private fun showPayInterrupt(cardno: String?) {
- vLastResult.text = "交易取消"
- vLastPayFailll.visibility = View.VISIBLE
- vLastPayamtll.visibility = View.GONE
- vLastPayFailreason.text = "以银行交易为准"
- vLastCardno.text = cardno
- vLastPayway.text = "card"
- vLastPaytime.text = DateUtil.getNowTime()
- resetPayShowCounter(30 * 1000)
- }
-
- private fun delValueToEdit() {
- presenter.clickNoPay()
- val str = amountTxt.text.toString()
- val len = str.length
- when {
- len == 0 ||
- len == 1 -> {
- refresh()
- }
- len > 1 -> {
- amountTxt.text = str.substring(0, len - 1)
- showScreenAmount()
- }
- }
- }
-
- private fun checkAmtToPay(inputAmt: Int) {
- amount = inputAmt
- amountTxt.text = String.format("%.02f", inputAmt / 100.0f)
- payStatusEnable = true
- presenter.clickToPay(inputAmt)
- when (payMode) {
- PayMode.FIXPAY -> {
- AuxScreenController.getInstance()
- .refreshContent(
- Arrays.asList(
- "定额付款",
- CommonUtil.showFormatAmount("金额", inputAmt)
- )
- )
- showDialogPay(true)
- }
- PayMode.HOTKEY -> {
- AuxScreenController.getInstance()
- .refreshContent(
- Arrays.asList(
- "热键付款",
- CommonUtil.showFormatAmount("金额", inputAmt)
- )
- )
- showDialogPay(false)
- }
- else -> {
- AuxScreenController.getInstance()
- .refreshContent(
- Arrays.asList(
- "等待付款",
- CommonUtil.showFormatAmount("金额", inputAmt)
- )
- )
- showDialogPay(false)
- }
- }
- }
-
- private fun showDialogPay(isFixPay: Boolean) {
- dialogPurchase!!.codePaying = false
- dialogPurchase!!.isFixPay = isFixPay
- dialogPurchase!!.codePayingNoCancelEnable = false
- dialogPurchase!!.show("请刷卡", CommonUtil.showFormatAmount("金额", amount))
- }
-
- private fun getCurAmount(): Int {
- return try {
- CommonUtil.YuanToFen(java.lang.Double.parseDouble(amountTxt.text.toString().trim { it <= ' ' }))
- } catch (ex: Exception) {
- ex.printStackTrace()
- 0
- }
- }
-
- private fun addValueToEdit(value: Int) {
- var str = amountTxt.text.toString()
- if ("0" == str) {
- str = ""
- }
- //如果已经有小数点,则小数点后面不能超过两位
- if (str.indexOf(".") > 0) {
- if (str.length - str.indexOf(".") <= 2) {
- amountTxt.text = "$str$value"
- }
- } else {
- //限制消费金额<10000
- if (str.length < 4) {
- amountTxt.text = "$str$value"
- }
- }
- showScreenAmount()
- }
-
- private fun clearLastPayResult() {
- vLastResult.text = null
- vLastCardno.text = null
- vLastPayamt.text = null
- vLastPayway.text = null
- vLastPaytime.text = null
- vLastPayFailreason.text = null
- }
-
- private fun showScreenAmount() {
- if (addAmount > 0) {
- AuxScreenController.getInstance().refreshContent(
- Arrays.asList(
- "输入金额: +" + String.format("%.02f", addAmount / 100.0f),
- amountTxt.text.toString()
- )
- )
- } else {
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList("输入金额:", amountTxt.text.toString()))
- }
- }
-
- override fun getActivity(): Activity {
- return this
- }
-
- override fun isBackRunning(): Boolean {
- return isBackRunning
- }
-
- override fun showRecentDtl(record: TransdtlUnionRecord?) {
- if (record != null) {
- val info = CardUserInfoBean(PublicDef.SUCCESS, "")
- info.transdate = record.transdate
- info.transtime = record.transtime
- info.username = record.username
- info.cardno = record.cardno
- info.payamt = record.payamt
- info.status = record.status
- info.payway = record.payway
- info.reversalFlag = record.reversalflag
- refreshRecentDtl(info)
- }
- }
-
- override fun cardPayingStatus(isPaying: Boolean) {
- cardPaying = isPaying
- }
-
- private fun resetPayShowCounter(timems: Long) {
- counter?.cancel()
- counter = LastPayShowTimer(timems, 500)
- counter?.start()
- }
-
- private inner class LastPayShowTimer(millisInFuture: Long, countDownInterval: Long) :
- CountDownTimer(millisInFuture, countDownInterval) {
-
- override fun onTick(millisUntilFinished: Long) {
-
- }
-
- override fun onFinish() {
- clearLastPayResult()
- }
- }
+package com.supwisdom.activities.consume
+
+import android.annotation.SuppressLint
+import android.app.Activity
+import android.content.Intent
+import android.graphics.Color
+import android.os.Bundle
+import android.os.CountDownTimer
+import android.view.KeyEvent
+import android.view.View
+import android.widget.ImageView
+import android.widget.LinearLayout
+import android.widget.TextView
+import com.supwisdom.R
+import com.supwisdom.activities.BaseActivity
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.auxscreen.AuxScreenController
+import com.supwisdom.activities.consume.bean.CardStatus
+import com.supwisdom.activities.consume.bean.CardUserInfoBean
+import com.supwisdom.activities.menu.MenuActivity
+import com.supwisdom.activities.transdtl.TransdtlActivity
+import com.supwisdom.entity.PayStatus
+import com.supwisdom.entity.PeriodFixPayRecord
+import com.supwisdom.entity.ReversalFlag
+import com.supwisdom.entity.TransdtlUnionRecord
+import com.supwisdom.utils.CommonUtil
+import com.supwisdom.utils.DateUtil
+import com.supwisdom.utils.PublicDef
+import com.supwisdom.utils.SoundUtil
+import com.supwisdom.view.DialogPurchase
+import java.util.*
+import java.util.concurrent.locks.ReentrantLock
+import kotlin.collections.ArrayList
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+@Suppress("DEPRECATION")
+@SuppressLint("NewApi")
+class ConsumeActivity : BaseActivity(), IConsumeView {
+ private lateinit var amountTxt: TextView
+ private lateinit var presenter: ConsumePresenter
+ private lateinit var vLinkstat: TextView
+ private lateinit var vShopname: TextView
+ private lateinit var vCitizenName: TextView
+ private lateinit var vCitizenCardno: TextView
+ private lateinit var vCardstatus: TextView
+ private lateinit var vTime: TextView
+ private lateinit var vLinkLogo: ImageView
+ private lateinit var vLastResult: TextView
+ private lateinit var vLastPayamt: TextView
+ private lateinit var vLastCardno: TextView
+ private lateinit var vLastPayway: TextView
+ private lateinit var vLastPaytime: TextView
+ private lateinit var vLastPayFailreason: TextView
+ private lateinit var vSynoFlag: TextView
+ private lateinit var vLastPayFailll: LinearLayout
+ private lateinit var vLastPayamtll: LinearLayout
+ private val pos = SPApplication.getInstance().getPos()
+ private var beepManager: BeepManager? = null
+ private val scanLock = ReentrantLock()
+
+ @Volatile
+ private var cardPaying = false
+
+ @Volatile
+ private var payStatusEnable = false
+
+ @Volatile
+ private var isBackRunning = false
+ private var addAmount: Int = 0
+
+ @Volatile
+ private var amount: Int = 0
+ private var payMode: PayMode? = null
+ private val hotkeyPayMap = hashMapOf<Int, Int>()
+ private val hotkeyPayList = ArrayList<String>()
+ private var payWay: String? = null
+ private var counter: LastPayShowTimer? = null
+ private var lastPayInfo: CardUserInfoBean? = null
+ private var dialogPurchase: DialogPurchase? = null
+ private var periodFixPayList: List<PeriodFixPayRecord>? = null
+ private var periodFixPayEnable = false
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_consume)
+
+ initView()
+ initData()
+ }
+
+ private fun initData() {
+ presenter = ConsumePresenter(this)
+ presenter.start()
+ beepManager = BeepManager(this)
+ dialogPurchase = DialogPurchase(this, object : DialogPurchase.ICallBack {
+ override fun callback(isManualCancel: Boolean, isPaying: Boolean) {
+ if (isPaying) {
+ presenter.clickToInterrupt()
+ } else {
+ when (payMode) {
+ PayMode.FIXPAY -> checkAmtToPay(amount)
+ PayMode.HOTKEY -> {
+ AuxScreenController.getInstance().refreshContent(hotkeyPayList)
+ }
+ else -> {
+ presenter.clickNoPay()
+ amountTxt.text = ""
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList(" 欢迎光临!", " 请刷卡..."))
+ }
+ }
+ }
+ }
+
+ override fun callback(code: String) {
+ if (!scanLock.tryLock()) {
+ return
+ }
+ try {
+ //正在扣款
+ if (someWayPaying()) {
+ return
+ }
+ //已扣款
+ if (!payStatusEnable) {
+ return
+ }
+ beepManager!!.playBeepSoundAndVibrate()
+ presenter.clickNoPay()
+ dialogPurchase!!.codePaying = true
+ dialogPurchase!!.codePayingNoCancelEnable = true
+ payStatusEnable = false
+ presenter.codeToPay(code, amount)
+ } finally {
+ scanLock.unlock()
+ }
+ }
+ })
+ presenter.loadLastTransdtl()
+ }
+
+ private fun someWayPaying(): Boolean {
+ if (cardPaying || dialogPurchase!!.codePaying || isBackRunning) {
+ return true
+ }
+ return false
+ }
+
+ private fun initView() {
+ vShopname = this.findViewById<TextView>(R.id.tv_shopname)
+ vLinkLogo = this.findViewById<ImageView>(R.id.tv_linklogo)
+ vLinkstat = this.findViewById<TextView>(R.id.tv_linkstat)
+ amountTxt = this.findViewById<TextView>(R.id.tv_input_amt)
+ vCitizenName = this.findViewById<TextView>(R.id.tv_citizen_name)
+ vCitizenCardno = this.findViewById<TextView>(R.id.tv_citizen_cardno)
+ vCardstatus = this.findViewById<TextView>(R.id.tv_cardstatus)
+ vTime = this.findViewById<TextView>(R.id.tv_nowtime)
+ vLastResult = this.findViewById<TextView>(R.id.tv_last_pay_result)
+ vLastCardno = this.findViewById<TextView>(R.id.tv_last_cardno)
+ vLastPayamt = this.findViewById<TextView>(R.id.tv_last_payamt)
+ vLastPayway = this.findViewById<TextView>(R.id.tv_last_payway)
+ vLastPaytime = this.findViewById<TextView>(R.id.tv_last_paytime)
+ vLastPayFailreason = this.findViewById<TextView>(R.id.tv_last_failreason)
+ vLastPayFailll = this.findViewById<LinearLayout>(R.id.ll_consume_last_failreason)
+ vLastPayamtll = this.findViewById<LinearLayout>(R.id.ll_consume_last_payamt)
+ vSynoFlag = findViewById<TextView>(R.id.tv_syno_flag)
+ }
+
+ override fun onStop() {
+ super.onStop()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ isBackRunning = true
+ }
+
+ override fun onDestroy() {
+ SoundUtil.releaseMusic()
+ presenter.stop()
+ beepManager!!.close()
+ super.onDestroy()
+ }
+
+ @SuppressLint("SetTextI18n")
+ override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+ if (event.action == KeyEvent.ACTION_DOWN) {
+ presenter.resetOperationTime()
+ when (payMode) {
+ PayMode.FIXPAY -> fixInputPay(event.keyCode)
+ PayMode.HOTKEY -> hotkeyInputPay(event.keyCode)
+ else -> normalInputPay(event.keyCode)
+ }
+ }
+ if (event.action == KeyEvent.ACTION_UP &&
+ event.keyCode == KeyEvent.KEYCODE_DPAD_LEFT
+ ) {
+ //'F1'
+ jumpActivity(MenuActivity::class.java)
+ }
+ return super.dispatchKeyEvent(event)
+ }
+
+ private fun fixInputPay(keyCode: Int) {
+ when (keyCode) {
+ KeyEvent.KEYCODE_DPAD_LEFT -> {
+ //'F1'
+ jumpActivity(MenuActivity::class.java)
+ }
+ KeyEvent.KEYCODE_DPAD_RIGHT -> {
+ //'F4'
+ jumpActivity(TransdtlActivity::class.java)
+ }
+ }
+ }
+
+ private fun hotkeyInputPay(keyCode: Int) {
+ when (keyCode) {
+ KeyEvent.KEYCODE_0,
+ KeyEvent.KEYCODE_1,
+ KeyEvent.KEYCODE_2,
+ KeyEvent.KEYCODE_3,
+ KeyEvent.KEYCODE_4,
+ KeyEvent.KEYCODE_5,
+ KeyEvent.KEYCODE_6,
+ KeyEvent.KEYCODE_7,
+ KeyEvent.KEYCODE_8,
+ KeyEvent.KEYCODE_9 -> {
+ val key = keyCode - KeyEvent.KEYCODE_0
+ if (hotkeyPayMap.containsKey(key)) {
+ amount = hotkeyPayMap[key]!!
+ checkAmtToPay(amount)
+ }
+ }
+ KeyEvent.KEYCODE_DEL -> {
+ //cancel
+ presenter.clickNoPay()
+ AuxScreenController.getInstance().refreshContent(hotkeyPayList)
+ }
+ KeyEvent.KEYCODE_DPAD_LEFT -> {
+ //'F1'
+ jumpActivity(MenuActivity::class.java)
+ }
+ KeyEvent.KEYCODE_DPAD_RIGHT -> {
+ //'F4'
+ jumpActivity(TransdtlActivity::class.java)
+ }
+ }
+ }
+
+ private fun normalInputPay(keyCode: Int) {
+ when (keyCode) {
+ KeyEvent.KEYCODE_BACK -> {
+ amountTxt.text = "0"
+ presenter.clickNoPay()
+ }
+ 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 -> {
+ presenter.clickNoPay()
+ addValueToEdit(keyCode - KeyEvent.KEYCODE_0)
+ }
+ KeyEvent.KEYCODE_POUND, KeyEvent.KEYCODE_PERIOD -> {
+ presenter.clickNoPay()
+ val str = amountTxt.text.toString()
+ if (str.length < 8 && str.indexOf('.') < 0) {
+ amountTxt.text = "$str."
+ showScreenAmount()
+ }
+ }
+ KeyEvent.KEYCODE_NUMPAD_ADD -> {
+ //'+'
+ addAmount += getCurAmount()
+ amountTxt.text = ""
+ showScreenAmount()
+ }
+ KeyEvent.KEYCODE_DPAD_LEFT -> {
+ //'F1'
+ jumpActivity(MenuActivity::class.java)
+ }
+// KeyEvent.KEYCODE_DPAD_UP ->
+ //'F2'
+// KeyEvent.KEYCODE_DPAD_DOWN ->
+ //'F3'
+ KeyEvent.KEYCODE_DPAD_RIGHT -> {
+ //'F4'
+ jumpActivity(TransdtlActivity::class.java)
+ }
+ KeyEvent.KEYCODE_DEL -> {
+ //cancel
+ presenter.clickNoPay()
+ delValueToEdit()
+ }
+ KeyEvent.KEYCODE_ENTER -> {
+ amount = getCurAmount() + addAmount
+ if (amount > 0) {
+ checkAmtToPay(amount)
+ } else {
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList("请先输入金额:", "金额不能为0"))
+ }
+ }
+ }
+ }
+
+ override fun showUserInfo(info: CardUserInfoBean) {
+ CommonUtil.acquireWakeLock(this)
+ vCitizenName.text = info.username
+ vCitizenCardno.text = info.cardno
+ vCardstatus.text = info.cardstatus?.toString()
+ if (info.cardstatus != CardStatus.NORMAL) {
+ vCardstatus.setTextColor(Color.RED)
+ } else {
+ vCardstatus.setTextColor(resources.getColor(R.color.blue))
+ }
+ }
+
+ override fun screenSaver(flag: Boolean) {
+ if (flag) {
+ CommonUtil.setAppBrightness(this, PublicDef.SCREEN_SAVER_BRIGHTNESS)
+ } else {
+ CommonUtil.setAppBrightness(this, PublicDef.SCREEN_NORMAL_BRIGHTNESS)
+ }
+ }
+
+ private var lastshowtime: String? = null
+ override fun clearUserInfo(datetime: String) {
+ vCitizenName.text = null
+ vCitizenCardno.text = null
+ vCardstatus.text = null
+ if (lastshowtime != datetime) {
+ lastshowtime = datetime
+ vTime.text = datetime
+ AuxScreenController.getInstance().refreshBottom(datetime)
+ if (periodFixPayEnable) {
+ parsePeriodFixPay()
+ }
+ }
+ if (dialogPurchase!!.isShowing &&
+ !dialogPurchase!!.isFixPay &&
+ payStatusEnable
+ ) {
+ beepManager!!.playBeepSoundAndVibrate()
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ isBackRunning = false
+ beepManager!!.updatePrefs()
+ dealIntent()
+ refresh()
+ refreshRecentDtl(lastPayInfo)
+ }
+
+ private fun dealIntent() {
+ amount = this.intent.getStringExtra("amount")?.toInt() ?: 0
+ payWay = this.intent.getStringExtra("payway")
+ val operation = this.intent.getStringExtra("operation")
+ if (operation == "reverse") {
+ presenter.clickToReverse(amount)
+ dialogPurchase!!.show("等待冲正", CommonUtil.showFormatAmount("金额", amount))
+ }
+ this.intent.putExtra("amount", "0")
+ this.intent.putExtra("payway", "")
+ this.intent.putExtra("operation", "")
+ }
+
+ override fun onNewIntent(intent: Intent) {
+ this.intent.putExtra("amount", intent.getStringExtra("amount"))
+ this.intent.putExtra("payway", intent.getStringExtra("payway"))
+ this.intent.putExtra("operation", intent.getStringExtra("operation"))
+ }
+
+ private fun refresh() {
+ addAmount = 0
+ amountTxt.text = "0"
+ var shopname = pos.getDynamicPara()!!.shopname
+ if (shopname == null || shopname.length < 9) {
+ vShopname.textSize = resources.getDimension(R.dimen.consume_shopname_text_size_normal)
+ } else {
+ vShopname.textSize = resources.getDimension(R.dimen.consume_shopname_text_size_middle)
+ if (shopname.length > 10) {
+ val len = shopname.length / 2
+ shopname = shopname.substring(0, len) + "\n" + shopname.substring(len)
+ }
+ }
+ vShopname.text = shopname
+ if (SPApplication.getInstance().isSynoCodeActive()) {
+ vSynoFlag.visibility = View.VISIBLE
+ } else {
+ vSynoFlag.visibility = View.GONE
+ }
+
+ refreshLinkStatus(SPApplication.getInstance().isOnline())
+ AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime1())
+ AuxScreenController.getInstance().refreshContent(Arrays.asList(" 欢迎光临!", " 请刷卡..."))
+
+ periodFixPayEnable = false
+ dialogPurchase?.dismiss()
+ pos.getControlPara(PublicDef.CONTROL_FIXAMT)?.also { mode ->
+ when (mode.paraval) {
+ PayMode.HOTKEY.desc -> {
+ presenter.setFixMode(false)
+ payMode = PayMode.HOTKEY
+ hotkeyPayMap.clear()
+ hotkeyPayList.clear()
+ pos.getHotkeyPay()?.forEach {
+ hotkeyPayMap[it.key] = it.amount
+ hotkeyPayList.add(
+ String.format(
+ "按键%d - %.02f元",
+ it.key,
+ it.amount / 100.0f
+ )
+ )
+ }
+ AuxScreenController.getInstance().refreshContent(hotkeyPayList)
+ }
+ PayMode.PERIODFIX.desc -> {
+ periodFixPayEnable = true
+ periodFixPayList = pos.getPeriodFixPay()
+ parsePeriodFixPay()
+ }
+ PayMode.NORMAL.desc -> {
+ doNormalPay()
+ }
+ else -> {
+ try {
+ doFixPay(Integer.parseInt(mode.paraval))
+ } catch (ex: Exception) {
+ ex.printStackTrace()
+ }
+ }
+ }
+ }
+ }
+
+ private fun parsePeriodFixPay() {
+ val nowtime = DateUtil.getNowTimeNoFormat().substring(0, 4)
+ periodFixPayList?.forEach {
+ if (it.beginTime!! <= nowtime && nowtime < it.endTime!!) {
+ if (payMode != PayMode.FIXPAY || amount != it.amount) {
+ doFixPay(it.amount)
+ }
+ return
+ }
+ }
+ if (payMode != PayMode.NORMAL) {
+ doNormalPay()
+ }
+ }
+
+ private fun doFixPay(fixamt: Int) {
+ presenter.setFixMode(true)
+ payMode = PayMode.FIXPAY
+ checkAmtToPay(fixamt)
+ }
+
+ private fun doNormalPay() {
+ amount = 0
+ presenter.setFixMode(false)
+ payMode = PayMode.NORMAL
+ }
+
+ override fun refreshLinkStatus(isOnline: Boolean) {
+ if (isOnline) {
+ vLinkLogo.setImageDrawable(getDrawable(R.drawable.wireless_on))
+ vLinkstat.text = "联机"
+ vLinkstat.setTextColor(resources.getColor(R.color.blue))
+ AuxScreenController.getInstance().refreshTitle("联机 F4查看上笔记录")
+ } else {
+ vLinkLogo.setImageDrawable(getDrawable(R.drawable.wireless_off))
+ vLinkstat.text = "脱机"
+ vLinkstat.setTextColor(Color.RED)
+ AuxScreenController.getInstance().refreshTitle("脱机 F4查看上笔记录")
+ }
+ }
+
+ override fun showConsumeSuc(info: CardUserInfoBean) {
+ dialogPurchase!!.showPaySuccess(info)
+ val auxList = ArrayList<String>()
+ auxList.add(info.getErrorMsg())
+ auxList.add(CommonUtil.showFormatAmount("金额", info.payamt))
+ when {
+ info.amount > info.payamt -> {
+ auxList.add(CommonUtil.showFormatAmount("折扣", info.amount - info.payamt))
+ }
+ info.amount < info.payamt -> {
+ auxList.add(CommonUtil.showFormatAmount("搭伙", info.payamt - info.amount))
+ }
+ }
+ if (info.balance != null) {
+ auxList.add(CommonUtil.showFormatAmount("余额", info.balance!!))
+ }
+ AuxScreenController.getInstance().refreshContent(auxList)
+ SoundUtil.playMusic(applicationContext, R.raw.consume_suc)
+ refreshRecentDtl(info)
+ }
+
+ override fun showConsumeHint(hint: String) {
+ val amountStr = CommonUtil.showFormatAmount("金额", amount)
+ dialogPurchase!!.showProcess(hint, amountStr)
+ AuxScreenController.getInstance().refreshContent(Arrays.asList(hint, amountStr))
+ }
+
+ override fun showConsumeQuery(hint: String) {
+ dialogPurchase!!.showQueryProcess(hint, "请耐心等待")
+ AuxScreenController.getInstance().refreshContent(Arrays.asList(hint, "请耐心等待"))
+ }
+
+ override fun showConsumeInterrupt(info: CardUserInfoBean) {
+ showPayInterrupt(info.cardno)
+ dialogPurchase!!.showPayInterrupt()
+ AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("交易取消", "以银行交易为准"))
+ SoundUtil.playMusic(applicationContext, R.raw.pay_cancel)
+ }
+
+ override fun showConsumeFail(info: CardUserInfoBean) {
+ dialogPurchase!!.showPayFail(info)
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList<String>("消费失败", "原因:", info.getErrorMsg()))
+ SoundUtil.playMusic(applicationContext, R.raw.consume_fail)
+ refreshRecentDtl(info)
+ }
+
+ override fun showReverseSuc(info: CardUserInfoBean) {
+ dialogPurchase!!.showReverseSuccess(info)
+ AuxScreenController.getInstance()
+ .refreshContent(
+ Arrays.asList<String>(
+ info.getErrorMsg(),
+ CommonUtil.showFormatAmount("金额", info.payamt)
+ )
+ )
+ SoundUtil.playMusic(applicationContext, R.raw.reversal_suc)
+ refreshRecentDtl(info)
+ }
+
+ override fun showReverseFail(info: CardUserInfoBean) {
+ dialogPurchase!!.showReverseFail(info)
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList<String>("冲正失败", "原因:", info.getErrorMsg()))
+ SoundUtil.playMusic(applicationContext, R.raw.reversal_fail)
+ refreshRecentDtl(info)
+ }
+
+ private var lastShowRecentTime: String? = null
+ private fun refreshRecentDtl(info: CardUserInfoBean?) {
+ if (info != null) {
+ val showtime: Long = 30 * 1000
+ lastPayInfo = info
+ if (lastShowRecentTime == null) {
+ if (info.transtime != null) {
+ val paytime = DateUtil.timeFormatConvertToLong(info.transtime!!)
+ val nowtime = DateUtil.timeFormatConvertToLong(DateUtil.getNowTimeNoFormat())
+ if (nowtime - paytime > showtime) {
+ return
+ }
+ }
+ }
+ //已显示过不在显示
+ if (lastShowRecentTime == info.transtime) {
+ return
+ }
+ lastShowRecentTime = info.transtime
+
+ if (info.status == PayStatus.SUC) {
+ when {
+ info.reversalFlag == ReversalFlag.AUTO -> vLastResult.text = "自动冲正"
+ info.reversalFlag == ReversalFlag.MANUAL -> vLastResult.text = "手动撤销"
+ else -> vLastResult.text = "消费成功"
+ }
+ vLastPayFailll.visibility = View.GONE
+ vLastPayamtll.visibility = View.VISIBLE
+ vLastPayamt.text = String.format("%.02f元", info.payamt / 100.0f)
+ } else {
+ if (info.reversalFlag == ReversalFlag.AUTO ||
+ info.reversalFlag == ReversalFlag.MANUAL
+ ) {
+ vLastResult.text = "冲正失败"
+ } else {
+ vLastResult.text = "消费失败"
+ }
+ vLastPayFailll.visibility = View.VISIBLE
+ vLastPayamtll.visibility = View.GONE
+ vLastPayFailreason.text = info.getErrorMsg()
+ }
+ vLastCardno.text = info.cardno
+ vLastPayway.text = if (info.payway == "code") {
+ "二维码"
+ } else {
+ "市民卡"
+ }
+ val sb = StringBuilder()
+ sb.append(info.transtime?.substring(0, 2)).append(":")
+ .append(info.transtime?.substring(2, 4)).append(":")
+ .append(info.transtime?.substring(4))
+ vLastPaytime.text = sb.toString()
+ resetPayShowCounter(showtime)
+ }
+ }
+
+ private fun showPayInterrupt(cardno: String?) {
+ vLastResult.text = "交易取消"
+ vLastPayFailll.visibility = View.VISIBLE
+ vLastPayamtll.visibility = View.GONE
+ vLastPayFailreason.text = "以银行交易为准"
+ vLastCardno.text = cardno
+ vLastPayway.text = "card"
+ vLastPaytime.text = DateUtil.getNowTime()
+ resetPayShowCounter(30 * 1000)
+ }
+
+ private fun delValueToEdit() {
+ presenter.clickNoPay()
+ val str = amountTxt.text.toString()
+ val len = str.length
+ when {
+ len == 0 ||
+ len == 1 -> {
+ refresh()
+ }
+ len > 1 -> {
+ amountTxt.text = str.substring(0, len - 1)
+ showScreenAmount()
+ }
+ }
+ }
+
+ private fun checkAmtToPay(inputAmt: Int) {
+ amount = inputAmt
+ amountTxt.text = String.format("%.02f", inputAmt / 100.0f)
+ payStatusEnable = true
+ presenter.clickToPay(inputAmt)
+ when (payMode) {
+ PayMode.FIXPAY -> {
+ AuxScreenController.getInstance()
+ .refreshContent(
+ Arrays.asList(
+ "定额付款",
+ CommonUtil.showFormatAmount("金额", inputAmt)
+ )
+ )
+ showDialogPay(true)
+ }
+ PayMode.HOTKEY -> {
+ AuxScreenController.getInstance()
+ .refreshContent(
+ Arrays.asList(
+ "热键付款",
+ CommonUtil.showFormatAmount("金额", inputAmt)
+ )
+ )
+ showDialogPay(false)
+ }
+ else -> {
+ AuxScreenController.getInstance()
+ .refreshContent(
+ Arrays.asList(
+ "等待付款",
+ CommonUtil.showFormatAmount("金额", inputAmt)
+ )
+ )
+ showDialogPay(false)
+ }
+ }
+ }
+
+ private fun showDialogPay(isFixPay: Boolean) {
+ dialogPurchase!!.codePaying = false
+ dialogPurchase!!.isFixPay = isFixPay
+ dialogPurchase!!.codePayingNoCancelEnable = false
+ dialogPurchase!!.show("请刷卡", CommonUtil.showFormatAmount("金额", amount))
+ }
+
+ private fun getCurAmount(): Int {
+ return try {
+ CommonUtil.YuanToFen(
+ java.lang.Double.parseDouble(
+ amountTxt.text.toString().trim { it <= ' ' })
+ )
+ } catch (ex: Exception) {
+ ex.printStackTrace()
+ 0
+ }
+ }
+
+ private fun addValueToEdit(value: Int) {
+ var str = amountTxt.text.toString()
+ if ("0" == str) {
+ str = ""
+ }
+ //如果已经有小数点,则小数点后面不能超过两位
+ if (str.indexOf(".") > 0) {
+ if (str.length - str.indexOf(".") <= 2) {
+ amountTxt.text = "$str$value"
+ }
+ } else {
+ //限制消费金额<10000
+ if (str.length < 4) {
+ amountTxt.text = "$str$value"
+ }
+ }
+ showScreenAmount()
+ }
+
+ private fun clearLastPayResult() {
+ vLastResult.text = null
+ vLastCardno.text = null
+ vLastPayamt.text = null
+ vLastPayway.text = null
+ vLastPaytime.text = null
+ vLastPayFailreason.text = null
+ }
+
+ private fun showScreenAmount() {
+ if (addAmount > 0) {
+ AuxScreenController.getInstance().refreshContent(
+ Arrays.asList(
+ "输入金额: +" + String.format("%.02f", addAmount / 100.0f),
+ amountTxt.text.toString()
+ )
+ )
+ } else {
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList("输入金额:", amountTxt.text.toString()))
+ }
+ }
+
+ override fun getActivity(): Activity {
+ return this
+ }
+
+ override fun isBackRunning(): Boolean {
+ return isBackRunning
+ }
+
+ override fun showRecentDtl(record: TransdtlUnionRecord?) {
+ if (record != null) {
+ val info = CardUserInfoBean(PublicDef.SUCCESS, "")
+ info.transdate = record.transdate
+ info.transtime = record.transtime
+ info.username = record.username
+ info.cardno = record.cardno
+ info.payamt = record.payamt
+ info.status = record.status
+ info.payway = record.payway
+ info.reversalFlag = record.reversalflag
+ refreshRecentDtl(info)
+ }
+ }
+
+ override fun cardPayingStatus(isPaying: Boolean) {
+ cardPaying = isPaying
+ }
+
+ private fun resetPayShowCounter(timems: Long) {
+ counter?.cancel()
+ counter = LastPayShowTimer(timems, 500)
+ counter?.start()
+ }
+
+ private inner class LastPayShowTimer(millisInFuture: Long, countDownInterval: Long) :
+ CountDownTimer(millisInFuture, countDownInterval) {
+
+ override fun onTick(millisUntilFinished: Long) {
+
+ }
+
+ override fun onFinish() {
+ clearLastPayResult()
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt b/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
index 11f8580..6ebab3c 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
@@ -1,748 +1,748 @@
-package com.supwisdom.activities.consume.mode
-
-import android.os.Handler
-import android.os.Message
-import com.supwisdom.activities.SPApplication
-import com.supwisdom.activities.consume.IConsumeView
-import com.supwisdom.activities.consume.bean.*
-import com.supwisdom.entity.*
-import com.supwisdom.epaycard.Cardlib
-import com.supwisdom.exception.CardNotFoundError
-import com.supwisdom.exception.CardPayCancelFailError
-import com.supwisdom.exception.CardPayFailError
-import com.supwisdom.exception.CardPayInterruptError
-import com.supwisdom.okhttp.TransResp
-import com.supwisdom.service.EpayApiImpl
-import com.supwisdom.utils.*
-import org.apache.http.HttpStatus
-
-/**
- ** create by zzq on 2019/7/25
- ** @desc 刷卡消费
- **/
-class CardPayService constructor(private val iConsumeView: IConsumeView, private val handler: Handler) {
- private val TAG = "CardPayService"
- private val pos = SPApplication.getInstance().getPos()
- private val runnable = CardPayRunnable()
- private val consumeApi = ConsumeApi()
- @Volatile
- private var isExist = false
- @Volatile
- private var clickStat = ClickStat.INIT
- @Volatile
- private var amount: Int = 0
- @Volatile
- private var payQueryConfirm = false
- var isFixMode = false
- private var thread: Thread? = null
- private var cardBean: CardBean? = null
- /**
- * 防止定额连续消费
- */
- private val lastPayBean = LastPayBean()
- @Volatile
- private var operation = false
- private val screenSaverBean = ScreenSaverBean()
-
- init {
- screenSaverBean.operationTime = System.currentTimeMillis()
- }
-
- fun start() {
- isExist = false
- if (thread == null) {
- thread = Thread(runnable)
- thread!!.start()
- }
- }
-
- fun stop() {
- isExist = true
- thread?.interrupt()
- thread = null
- }
-
- fun clickNoPay() {
- clickStat = ClickStat.INIT
- amount = 0
- }
-
- fun clickToPay(amount: Int) {
- clickStat = ClickStat.PAY
- this.amount = amount
- }
-
- fun clickToReverse(amount: Int) {
- clickStat = ClickStat.REVERSE
- this.amount = amount
- }
-
- fun clickToInterrupt() {
- clickStat = ClickStat.INIT
- payQueryConfirm = false
- }
-
- fun resetOperationTime() {
- operation = true
- }
-
- private inner class CardPayRunnable : Runnable {
- private lateinit var onlRecord: TransdtlOnlineRecord
- private lateinit var onlRvsRecord: TransdtlOnlineRecord
- private lateinit var offRecord: TransdtlOfflineRecord
- private lateinit var offRvsRecord: TransdtlOfflineRecord
- private var oldcardphyid: String? = null
- private var onlineBalance = false
- private var curLinkStatus = false
- private var lastShowTime: Long = 0
- private var lastUserInfoTime: Long = 0
- private var curLinkRefreshTime: Long = 0
- override fun run() {
- while (!isExist) {
- iConsumeView.cardPayingStatus(false)
- checkShowScreen()
- if (iConsumeView.isBackRunning()) {
- CommonUtil.doSleep(1000)
- continue
- }
- CommonUtil.doSleep(100)
- try {
- val cardphyid = Cardlib.instance.requestCard()
- iConsumeView.cardPayingStatus(true)
- if (oldcardphyid != cardphyid) {
- readCard()
- cardBean!!.cardphyid = cardphyid
- oldcardphyid = cardphyid
- operation = true
- }
- when (clickStat) {
- ClickStat.PAY -> {
- try {
- doConsume()
- } catch (ex: CardPayFailError) {
- sendMsg(PublicDef.MSG_CARD_PAY_FAIL, getErrorInfo(ex.message))
- } catch (ex: CardPayInterruptError) {
- sendMsg(PublicDef.MSG_PAYING_INTERRUPT, getErrorInfo(ex.message))
- } catch (ex: Exception) {
- ex.printStackTrace()
- LogUtil.d(
- TAG, "card pay exception: cardphyid=$cardphyid"
- + "exception=${CommonUtil.getExceptionStack(ex)}"
- )
- sendMsg(PublicDef.MSG_CARD_PAY_FAIL, getErrorInfo("程序异常"))
- }
- clickStat = ClickStat.INIT
- }
- ClickStat.REVERSE -> {
- try {
- doReverse()
- } catch (ex: CardPayCancelFailError) {
- sendMsg(PublicDef.MSG_CARD_REVERSE_FAIL, getRvsErrorInfo(ex.message))
- } catch (ex: Exception) {
- ex.printStackTrace()
- LogUtil.d(
- TAG, "card pay cancel exception: cardphyid=$cardphyid"
- + "exception=${CommonUtil.getExceptionStack(ex)}"
- )
- sendMsg(PublicDef.MSG_CARD_REVERSE_FAIL, getRvsErrorInfo("程序异常"))
- }
- clickStat = ClickStat.INIT
- }
- ClickStat.INIT -> {
- if (SPApplication.getInstance().isOnline() && !onlineBalance) {
- onlineBalance = true
- getAccountInfoByCard()
- }
- val curtime = System.currentTimeMillis()
- if (curtime < lastUserInfoTime ||
- curtime - lastUserInfoTime > 1000
- ) {
- lastUserInfoTime = curtime
- showCardUserInfo()
- }
- }
- }
- } catch (ex: CardNotFoundError) {
- ex.printStackTrace()
- doClear()
- } catch (ex: Exception) {
- ex.printStackTrace()
- doClear()
- }
- }
- }
-
- private fun getAccountInfoByCard() {
- val resp = consumeApi.accQuery(
- pos.getConfigPara()!!.devphyid!!,
- cardBean!!.cardphyid!!,
- cardBean!!.cardNo!!
- )
- if (resp != null && resp.retcode == HttpStatus.SC_OK) {
- try {
- val retBean = GsonUtil.GsonToBean(resp.retjson!!, CardAccountRetBean::class.java)
- if (retBean.retcode == PublicDef.SUCCESS) {
- cardBean!!.username = retBean.username
- cardBean!!.userid = retBean.userid
- cardBean!!.balance = retBean.balance
- when {
- "normal" == retBean.status -> cardBean!!.cardstatus = CardStatus.NORMAL
- "expire" == retBean.status -> cardBean!!.cardstatus = CardStatus.EXPIRE
- "lost" == retBean.status -> cardBean!!.cardstatus = CardStatus.LOCK
- "logout" == retBean.status -> cardBean!!.cardstatus = CardStatus.LOGOUT
- "frozen" == retBean.status -> cardBean!!.cardstatus = CardStatus.FROZEN
- "lock" == retBean.status -> cardBean!!.cardstatus = CardStatus.LOST
- }
- }
- } catch (ex: Exception) {
- ex.printStackTrace()
- }
- }
- }
-
- private fun checkShowScreen() {
- val tt = System.currentTimeMillis()
- if (operation) {
- operation = false
- screenSaverBean.operationTime = tt
- screenSaverBean.operationFlag = true
- }
- if (tt > screenSaverBean.operationTime &&
- tt - screenSaverBean.operationTime > PublicDef.SCREEN_SAVER_GAP
- ) {
- /**
- * 连续半小时无操作屏保
- */
- screenSaverBean.operationTime = tt
- screenSaverBean.flag = true
- screenSaverBean.operationFlag = false
- sendMsg(PublicDef.MSG_SCREEN_SAVER, "on")
- } else {
- if (screenSaverBean.operationFlag && screenSaverBean.flag) {
- screenSaverBean.flag = false
- sendMsg(PublicDef.MSG_SCREEN_SAVER, "off")
- }
- }
- }
-
- private fun showCardUserInfo() {
- val info = CardUserInfoBean(PublicDef.SUCCESS, "账户信息")
- if (cardBean!!.username != cardBean!!.cardNo) {
- info.username = cardBean!!.username
- }
- info.cardno = cardBean!!.cardNo
- info.cardstatus = cardBean!!.cardstatus
- sendMsg(PublicDef.MSG_USER_INFO_SHOW, info)
- }
-
- private fun readCard() {
- val cardinfo = Cardlib.instance.readCard()
- cardBean = CardBean()
- cardBean!!.cardNo = cardinfo.cardNo
- cardBean!!.idCard = cardinfo.idCard
- cardBean!!.expireDate = cardinfo.expireDate
- cardBean!!.amount = amount
- cardBean!!.datetime = DateUtil.getNowDateTimeFormat()
- /**
- * 用户名默认用卡号代替,在线查询更新为用户名
- */
- cardBean!!.username = cardBean!!.cardNo
- }
-
- private fun doConsume() {
- if (isFixMode) {
- if (lastPayBean.cardphyid == cardBean!!.cardphyid) {
- val gap = (pos.getSysPara()?.fixpayGap ?: 10).toLong()
- if (System.currentTimeMillis() - lastPayBean.suctime < gap * 1000) {
- throw CardPayFailError("${gap}s内不能连续消费")
- }
- }
- }
- sendMsg(PublicDef.MSG_CARD_PAYING, "正在扣款...")
- if (SPApplication.getInstance().isOnline()) {
- if (!doOnlineConsume()) {
- /**
- * 由于不写卡,联机消费失败直接转离线
- */
- doOfflineConsume()
- }
- } else {
- doOfflineConsume()
- }
- }
-
- private fun doReverse() {
- val list = pos.getTransdtlUnion(DateUtil.getNowDateNoFormat(), 0, 0, 1)
- if (list.isEmpty()) {
- throw CardPayCancelFailError("未找到消费记录")
- }
- if (list[0].payway == "offcard") {
- doOfflineReverse(list[0])
- } else {
- doOnlineReverse(list[0])
- }
- }
-
- private fun doOnlineReverse(unionRecord: TransdtlUnionRecord) {
- val record = pos.getTransdtlOnlineLast() ?: throw CardPayCancelFailError("未找到联机记录")
- checkOnlineReverseVaild(unionRecord, record)
- saveTransdtlOnlineReverse(record)
- showRvsOnlSucInfo()
- asyncUpload(onlRvsRecord)
- }
-
- private fun doOfflineReverse(unionRecord: TransdtlUnionRecord) {
- val record = pos.getTransdtlOfflineLast() ?: throw CardPayCancelFailError("未找到离线记录")
- checkOfflineReverseVaild(unionRecord, record)
- saveTransdtlOfflineReverse(record)
- showRvsOffSucInfo()
- asyncUpload(offRvsRecord)
- }
-
- private fun saveTransdtlOfflineReverse(record: TransdtlOfflineRecord) {
- offRvsRecord = record.clone()
- offRvsRecord.devseqno += 1
- offRvsRecord.transdate = DateUtil.getNowDateNoFormat()
- offRvsRecord.transtime = DateUtil.getNowTimeNoFormat()
- offRvsRecord.reversalflag = ReversalFlag.MANUAL
- offRvsRecord.reversalseqno = record.devseqno
- offRvsRecord.reversaltransdate = record.transdate
- offRvsRecord.reversaltranstime = record.transtime
- offRvsRecord.upflag = 0
- if (!pos.saveTransdtlOffline(offRvsRecord)) {
- throw CardPayCancelFailError("保存流水失败")
- }
- }
-
- private fun saveTransdtlOnlineReverse(record: TransdtlOnlineRecord) {
- onlRvsRecord = record.clone()
- onlRvsRecord.devseqno += 1
- onlRvsRecord.transdate = DateUtil.getNowDateNoFormat()
- onlRvsRecord.transtime = DateUtil.getNowTimeNoFormat()
- onlRvsRecord.reversalflag = ReversalFlag.MANUAL
- onlRvsRecord.reversalbillno = record.billno
- onlRvsRecord.upflag = 0
- if (!pos.saveTransdtlOnline(onlRvsRecord)) {
- throw CardPayCancelFailError("保存流水失败")
- }
- }
-
- private fun checkOnlineReverseVaild(unionRecord: TransdtlUnionRecord, record: TransdtlOnlineRecord) {
- if (record.cardphyid != cardBean!!.cardphyid) {
- throw CardPayCancelFailError("该卡不是最后消费")
- }
- if (unionRecord.transdate != record.transdate ||
- unionRecord.transtime != record.transtime
- ) {
- throw CardPayCancelFailError("联机记录时间异常")
- }
- if (record.reversalflag == ReversalFlag.AUTO
- ) {
- throw CardPayCancelFailError("已撤销")
- }
- if (record.reversalflag == ReversalFlag.MANUAL) {
- throw CardPayCancelFailError("已冲正")
- }
- if (record.status != PayStatus.SUC) {
- throw CardPayCancelFailError("消费失败不能冲正")
- }
- val t1 = DateUtil.dateFormatConvertToLong(record.transdate + record.transtime)
- val t2 = System.currentTimeMillis()
- if (t2 - t1 > PublicDef.REVERSE_MS_GAP) {
- throw CardPayCancelFailError("消费已过期")
- }
- }
-
- private fun checkOfflineReverseVaild(unionRecord: TransdtlUnionRecord, record: TransdtlOfflineRecord) {
- if (record.cardphyid != cardBean!!.cardphyid) {
- throw CardPayCancelFailError("该卡不是最后消费")
- }
- if (unionRecord.transdate != record.transdate ||
- unionRecord.transtime != record.transtime
- ) {
- throw CardPayCancelFailError("离线记录时间异常")
- }
- if (record.reversalflag == ReversalFlag.MANUAL ||
- record.reversalflag == ReversalFlag.AUTO
- ) {
- throw CardPayCancelFailError("已冲正")
- }
- if (record.status != PayStatus.SUC) {
- throw CardPayCancelFailError("消费失败不能冲正")
- }
- val t1 = DateUtil.dateFormatConvertToLong(record.transdate + record.transtime)
- val t2 = System.currentTimeMillis()
- if (t2 - t1 > PublicDef.REVERSE_MS_GAP) {
- throw CardPayCancelFailError("消费已过期")
- }
- }
-
- private fun doOnlineConsume(): Boolean {
- initTransdtlOnline()
- var resp = consumeApi.payInit(onlRecord)
- var result = parseInitResult(resp)
- if (!result) {
- return result
- }
- resp = consumeApi.payConfirm(onlRecord)
- result = parseConfirmResult(resp)
- payQueryConfirm = false
- if (!result) {
- payQueryConfirm = true
- result = doOnlineConsumeQuery()
- }
- updateTransdtlOnline(result)
- if (result) {
- showOnlSucInfo()
- }
- return result
- }
-
- private fun doOnlineConsumeQuery(): Boolean {
- var queryCnt = 1
- LogUtil.e(
- TAG,
- "pay timeout and query result,cardphyid=[${onlRecord.cardphyid}],billno=[${onlRecord.billno}]"
- )
- sleepWithCancel(1000)
- while (payQueryConfirm) {
- sendMsg(PublicDef.MSG_CARD_PAY_QUERY, "消费确认中[$queryCnt]")
- val resp = consumeApi.payQuery(onlRecord)
- val result = parseConfirmResult(resp)
- if (result) {
- return result
- }
- queryCnt += 1
- sleepWithCancel(3000)
- }
- /**
- * 手动取消交易
- */
- LogUtil.e(TAG, "manual cancel pay,cardphyid=[${onlRecord.cardphyid}],billno=[${onlRecord.billno}]")
- throw CardPayInterruptError("交易取消")
- }
-
- private fun sleepWithCancel(ms: Long) {
- var time = 0
- while (payQueryConfirm) {
- CommonUtil.doSleep(20)
- time += 20
- if (time > ms) {
- return
- }
- }
- }
-
- private fun parseInitResult(resp: TransResp?): Boolean {
- if (resp == null || resp.retcode != HttpStatus.SC_OK) {
- SPApplication.getInstance().setEpayLinking(false)
- return false
- }
- val retBean = try {
- GsonUtil.GsonToBean(resp.retjson!!, CardPayInitRetBean::class.java)
- } catch (ex: java.lang.Exception) {
- throw CardPayFailError("json异常:${ex.message}")
- }
- if (retBean.retcode != PublicDef.SUCCESS) {
- throw CardPayFailError(retBean.getErrorMsg())
- }
- onlRecord.billno = retBean.billno
- onlRecord.username = retBean.username
- return true
- }
-
- private fun parseConfirmResult(resp: TransResp?): Boolean {
- if (resp == null || resp.retcode != HttpStatus.SC_OK) {
- return false
- }
- val retBean = try {
- GsonUtil.GsonToBean(resp.retjson!!, CardPayConfirmRetBean::class.java)
- } catch (ex: Exception) {
- throw CardPayFailError("json异常:${ex.message}")
- }
- if (retBean.retcode != PublicDef.SUCCESS) {
- throw CardPayFailError(retBean.getErrorMsg())
- }
- if (retBean.require_query) {
- return false
- }
- onlRecord.payamt = retBean.amount
- onlRecord.extraamt = retBean.extraamt
- return true
- }
-
- private fun initTransdtlOnline() {
- onlRecord = TransdtlOnlineRecord()
- var seqno = pos.getTransdtlOnlineMaxSeqno()
- if (seqno == 0) {
- seqno = pos.getDynamicPara()?.onlineseqno ?: 0
- }
- onlRecord.devphyid = pos.getConfigPara()!!.devphyid
- onlRecord.transdate = cardBean!!.datetime!!.substring(0, 8)
- onlRecord.transtime = cardBean!!.datetime!!.substring(8)
- onlRecord.devseqno = seqno + 1
- onlRecord.cardno = cardBean!!.cardNo
- onlRecord.cardphyid = cardBean!!.cardphyid
- onlRecord.payamt = cardBean!!.amount
- onlRecord.reversalflag = ReversalFlag.NONE
- onlRecord.extraamt = 0
- onlRecord.transtype = "card"
- onlRecord.status = PayStatus.INIT
- onlRecord.upflag = 1
- if (!pos.saveTransdtlOnline(onlRecord)) {
- throw CardPayFailError("保存流水失败")
- }
- }
-
- private fun updateTransdtlOnline(issuccess: Boolean) {
- if (issuccess) {
- onlRecord.status = PayStatus.SUC
- } else {
- onlRecord.status = PayStatus.FAIL
- }
- onlRecord.upflag = 1
- pos.updateTransdtlOnline(onlRecord)
- }
-
- private fun doOfflineConsume() {
- initTransdtlOffline()
- checkCardValid()
- updateTransdtlOffline(true)
- showOffSucInfo()
- }
-
- private fun checkCardValid() {
- val sysRecord = pos.getSysPara()
- if (!sysRecord!!.offlineEnable) {
- throw CardPayFailError("禁止离线交易")
- }
- val ctlRecord = pos.getControlPara(PublicDef.CONTROL_OFFLINE_DAY_DISABLE)
- if (ctlRecord == null || ctlRecord.paraval != "1") {
- val offdate = DateUtil.getDayDateNoFormatBefore(sysRecord.maxOfflineDays)
- val validdate = pos.getDynamicPara()!!.jwtExpire?.substring(0, 8) ?: "00000000"
- if (offdate > validdate) {
- throw CardPayFailError("设备已脱机${sysRecord.maxOfflineDays}天")
- }
- }
-
- val whiteRecord =
- pos.getWhiteList(offRecord.cardphyid!!, offRecord.cardno!!) ?: throw CardPayFailError("卡无权限")
- when (whiteRecord.status) {
- "normal" -> {
-
- }
- "expire" -> throw CardPayFailError("卡已过期")
- "lost" -> throw CardPayFailError("卡已挂失")
- "logout" -> throw CardPayFailError("卡已注销")
- "frozen" -> throw CardPayFailError("卡已冻结")
- "lock" -> throw CardPayFailError("卡已锁定")
- else -> throw CardPayFailError("卡状态:${whiteRecord.status}")
- }
-
- val payamt = pos.getTransdtlOfflineAmt(offRecord.transdate!!, offRecord.cardno!!, offRecord.cardphyid!!)
- if ((payamt + offRecord.payamt) > sysRecord.maxDayOfflineAmt) {
- throw CardPayFailError("已离线交易" + String.format("%.02f元", payamt / 100.0f))
- }
- }
-
- private fun initTransdtlOffline() {
- offRecord = TransdtlOfflineRecord()
- var seqno = pos.getTransdtlOfflineMaxSeqno()
- if (seqno == 0) {
- seqno = pos.getDynamicPara()?.offlineseqno ?: 0
- }
- offRecord.devphyid = pos.getConfigPara()!!.devphyid
- offRecord.transdate = cardBean!!.datetime!!.substring(0, 8)
- offRecord.transtime = cardBean!!.datetime!!.substring(8)
- offRecord.devseqno = seqno + 1
- offRecord.cardno = cardBean!!.cardNo
- offRecord.cardphyid = cardBean!!.cardphyid
- offRecord.payamt = cardBean!!.amount
- offRecord.reversalflag = ReversalFlag.NONE
- offRecord.extraamt = 0
- offRecord.managefeetype = "none"
- offRecord.status = PayStatus.INIT
- offRecord.upflag = 1
- if (!pos.saveTransdtlOffline(offRecord)) {
- throw CardPayFailError("保存流水失败")
- }
- }
-
- private fun updateTransdtlOffline(issuccess: Boolean) {
- if (issuccess) {
- offRecord.status = PayStatus.SUC
- } else {
- offRecord.status = PayStatus.FAIL
- }
- offRecord.upflag = 0
- if (!pos.updateTransdtlOffline(offRecord)) {
- throw CardPayFailError("更新流水失败")
- }
- asyncUpload(offRecord)
- }
-
- private fun showOnlSucInfo() {
- lastPayBean.cardphyid = cardBean!!.cardphyid
- lastPayBean.suctime = System.currentTimeMillis()
- val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
- info.showtime = pos.getSysPara()!!.sucShowtime
- info.amount = onlRecord.payamt
- info.payamt = onlRecord.payamt
- info.username = onlRecord.username
- info.cardno = onlRecord.cardno
- info.transdate = onlRecord.transdate
- info.transtime = onlRecord.transtime
- info.payway = onlRecord.transtype
- info.status = onlRecord.status
- info.reversalFlag = onlRecord.reversalflag
- sendMsg(PublicDef.MSG_CARD_PAY_SUC, info)
- }
-
- private fun showOffSucInfo() {
- lastPayBean.cardphyid = cardBean!!.cardphyid
- lastPayBean.suctime = System.currentTimeMillis()
- val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
- info.showtime = pos.getSysPara()!!.sucShowtime
- info.amount = offRecord.payamt
- info.payamt = offRecord.payamt
- info.cardno = offRecord.cardno
- info.transdate = offRecord.transdate
- info.transtime = offRecord.transtime
- info.payway = "card"
- info.status = offRecord.status
- info.reversalFlag = offRecord.reversalflag
- sendMsg(PublicDef.MSG_CARD_PAY_SUC, info)
- }
-
- private fun showRvsOnlSucInfo() {
- val info = CardUserInfoBean(PublicDef.SUCCESS, "冲正成功")
- info.showtime = pos.getSysPara()!!.sucShowtime
- info.amount = onlRvsRecord.payamt
- info.payamt = onlRvsRecord.payamt
- info.username = onlRvsRecord.username
- info.cardno = onlRvsRecord.cardno
- info.transdate = onlRvsRecord.transdate
- info.transtime = onlRvsRecord.transtime
- info.payway = onlRvsRecord.transtype
- info.status = onlRvsRecord.status
- info.reversalFlag = onlRvsRecord.reversalflag
- sendMsg(PublicDef.MSG_CARD_REVERSE_SUC, info)
- }
-
- private fun showRvsOffSucInfo() {
- val info = CardUserInfoBean(PublicDef.SUCCESS, "冲正成功")
- info.showtime = pos.getSysPara()!!.sucShowtime
- info.amount = offRvsRecord.payamt
- info.payamt = offRvsRecord.payamt
- info.cardno = offRvsRecord.cardno
- info.transdate = offRvsRecord.transdate
- info.transtime = offRvsRecord.transtime
- info.payway = "card"
- info.status = offRvsRecord.status
- info.reversalFlag = offRvsRecord.reversalflag
- sendMsg(PublicDef.MSG_CARD_REVERSE_SUC, info)
- }
-
- private fun asyncUpload(dtl: TransdtlOfflineRecord) {
- ThreadPool.getShortPool().execute(Runnable {
- try {
- EpayApiImpl().uploadTransdtl(dtl)
- dtl.upflag = 1
- pos.updateTransdtlOffline(dtl)
- } catch (ex: java.lang.Exception) {
- ex.printStackTrace()
- }
- })
- }
-
- private fun asyncUpload(dtl: TransdtlOnlineRecord) {
- ThreadPool.getShortPool().execute(Runnable {
- try {
- EpayApiImpl().uploadTransdtl(dtl)
- dtl.upflag = 1
- pos.updateTransdtlOnline(dtl)
- } catch (ex: java.lang.Exception) {
- ex.printStackTrace()
- }
- })
- }
-
- private fun doClear() {
- oldcardphyid = null
- onlineBalance = false
- val curtime = System.currentTimeMillis()
- if (curtime < lastShowTime ||
- curtime - lastShowTime > 1000
- ) {
- lastShowTime = curtime
- sendMsg(PublicDef.MSG_USER_INFO_CLEAR, DateUtil.getNowDateTime())
- showLinkStatus()
- }
- }
-
- private fun showLinkStatus() {
- if (SPApplication.getInstance().isOnline()) {
- if (!curLinkStatus) {
- curLinkRefreshTime = System.currentTimeMillis()
- curLinkStatus = true
- sendMsg(PublicDef.MSG_LINK_STATUS, true)
- return
- }
- } else {
- if (curLinkStatus) {
- curLinkStatus = false
- curLinkRefreshTime = System.currentTimeMillis()
- sendMsg(PublicDef.MSG_LINK_STATUS, false)
- return
- }
- }
- val t = System.currentTimeMillis()
- if (t < curLinkRefreshTime ||
- t - curLinkRefreshTime > 30000
- ) {
- curLinkRefreshTime = t
- sendMsg(PublicDef.MSG_LINK_STATUS, SPApplication.getInstance().isOnline())
- }
- }
-
- private fun getErrorInfo(errmsg: String?): CardUserInfoBean {
- val info = CardUserInfoBean(PublicDef.ERROR, errmsg ?: "null")
- info.showtime = pos.getSysPara()!!.failShowtime
- info.status = PayStatus.FAIL
- info.amount = amount
- info.payamt = amount
- info.payway = "card"
- info.cardno = cardBean?.cardNo
- info.transdate = DateUtil.getNowDateNoFormat()
- info.transtime = DateUtil.getNowTimeNoFormat()
- return info
- }
-
- private fun getRvsErrorInfo(errmsg: String?): CardUserInfoBean {
- val info = CardUserInfoBean(PublicDef.ERROR, errmsg ?: "null")
- info.showtime = pos.getSysPara()!!.failShowtime
- info.status = PayStatus.FAIL
- info.amount = amount
- info.payamt = amount
- info.cardno = cardBean?.cardNo
- info.payway = "card"
- info.transdate = DateUtil.getNowDateNoFormat()
- info.transtime = DateUtil.getNowTimeNoFormat()
- info.reversalFlag = ReversalFlag.MANUAL
- return info
- }
-
- private fun sendMsg(code: Int, obj: Any) {
- val msg = Message()
- msg.what = code
- msg.obj = obj
- handler.sendMessage(msg)
- }
- }
-}
-
-enum class ClickStat {
- INIT,
- PAY,
- REVERSE
+package com.supwisdom.activities.consume.mode
+
+import android.os.Handler
+import android.os.Message
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.consume.IConsumeView
+import com.supwisdom.activities.consume.bean.*
+import com.supwisdom.entity.*
+import com.supwisdom.epaycard.Cardlib
+import com.supwisdom.exception.CardNotFoundError
+import com.supwisdom.exception.CardPayCancelFailError
+import com.supwisdom.exception.CardPayFailError
+import com.supwisdom.exception.CardPayInterruptError
+import com.supwisdom.okhttp.TransResp
+import com.supwisdom.service.EpayApiImpl
+import com.supwisdom.utils.*
+import org.apache.http.HttpStatus
+
+/**
+ ** create by zzq on 2019/7/25
+ ** @desc 刷卡消费
+ **/
+class CardPayService constructor(private val iConsumeView: IConsumeView, private val handler: Handler) {
+ private val TAG = "CardPayService"
+ private val pos = SPApplication.getInstance().getPos()
+ private val runnable = CardPayRunnable()
+ private val consumeApi = ConsumeApi()
+ @Volatile
+ private var isExist = false
+ @Volatile
+ private var clickStat = ClickStat.INIT
+ @Volatile
+ private var amount: Int = 0
+ @Volatile
+ private var payQueryConfirm = false
+ var isFixMode = false
+ private var thread: Thread? = null
+ private var cardBean: CardBean? = null
+ /**
+ * 防止定额连续消费
+ */
+ private val lastPayBean = LastPayBean()
+ @Volatile
+ private var operation = false
+ private val screenSaverBean = ScreenSaverBean()
+
+ init {
+ screenSaverBean.operationTime = System.currentTimeMillis()
+ }
+
+ fun start() {
+ isExist = false
+ if (thread == null) {
+ thread = Thread(runnable)
+ thread!!.start()
+ }
+ }
+
+ fun stop() {
+ isExist = true
+ thread?.interrupt()
+ thread = null
+ }
+
+ fun clickNoPay() {
+ clickStat = ClickStat.INIT
+ amount = 0
+ }
+
+ fun clickToPay(amount: Int) {
+ clickStat = ClickStat.PAY
+ this.amount = amount
+ }
+
+ fun clickToReverse(amount: Int) {
+ clickStat = ClickStat.REVERSE
+ this.amount = amount
+ }
+
+ fun clickToInterrupt() {
+ clickStat = ClickStat.INIT
+ payQueryConfirm = false
+ }
+
+ fun resetOperationTime() {
+ operation = true
+ }
+
+ private inner class CardPayRunnable : Runnable {
+ private lateinit var onlRecord: TransdtlOnlineRecord
+ private lateinit var onlRvsRecord: TransdtlOnlineRecord
+ private lateinit var offRecord: TransdtlOfflineRecord
+ private lateinit var offRvsRecord: TransdtlOfflineRecord
+ private var oldcardphyid: String? = null
+ private var onlineBalance = false
+ private var curLinkStatus = false
+ private var lastShowTime: Long = 0
+ private var lastUserInfoTime: Long = 0
+ private var curLinkRefreshTime: Long = 0
+ override fun run() {
+ while (!isExist) {
+ iConsumeView.cardPayingStatus(false)
+ checkShowScreen()
+ if (iConsumeView.isBackRunning()) {
+ CommonUtil.doSleep(1000)
+ continue
+ }
+ CommonUtil.doSleep(100)
+ try {
+ val cardphyid = Cardlib.instance.requestCard()
+ iConsumeView.cardPayingStatus(true)
+ if (oldcardphyid != cardphyid) {
+ readCard()
+ cardBean!!.cardphyid = cardphyid
+ oldcardphyid = cardphyid
+ operation = true
+ }
+ when (clickStat) {
+ ClickStat.PAY -> {
+ try {
+ doConsume()
+ } catch (ex: CardPayFailError) {
+ sendMsg(PublicDef.MSG_CARD_PAY_FAIL, getErrorInfo(ex.message))
+ } catch (ex: CardPayInterruptError) {
+ sendMsg(PublicDef.MSG_PAYING_INTERRUPT, getErrorInfo(ex.message))
+ } catch (ex: Exception) {
+ ex.printStackTrace()
+ LogUtil.d(
+ TAG, "card pay exception: cardphyid=$cardphyid"
+ + "exception=${CommonUtil.getExceptionStack(ex)}"
+ )
+ sendMsg(PublicDef.MSG_CARD_PAY_FAIL, getErrorInfo("程序异常"))
+ }
+ clickStat = ClickStat.INIT
+ }
+ ClickStat.REVERSE -> {
+ try {
+ doReverse()
+ } catch (ex: CardPayCancelFailError) {
+ sendMsg(PublicDef.MSG_CARD_REVERSE_FAIL, getRvsErrorInfo(ex.message))
+ } catch (ex: Exception) {
+ ex.printStackTrace()
+ LogUtil.d(
+ TAG, "card pay cancel exception: cardphyid=$cardphyid"
+ + "exception=${CommonUtil.getExceptionStack(ex)}"
+ )
+ sendMsg(PublicDef.MSG_CARD_REVERSE_FAIL, getRvsErrorInfo("程序异常"))
+ }
+ clickStat = ClickStat.INIT
+ }
+ ClickStat.INIT -> {
+ if (SPApplication.getInstance().isOnline() && !onlineBalance) {
+ onlineBalance = true
+ getAccountInfoByCard()
+ }
+ val curtime = System.currentTimeMillis()
+ if (curtime < lastUserInfoTime ||
+ curtime - lastUserInfoTime > 1000
+ ) {
+ lastUserInfoTime = curtime
+ showCardUserInfo()
+ }
+ }
+ }
+ } catch (ex: CardNotFoundError) {
+ ex.printStackTrace()
+ doClear()
+ } catch (ex: Exception) {
+ ex.printStackTrace()
+ doClear()
+ }
+ }
+ }
+
+ private fun getAccountInfoByCard() {
+ val resp = consumeApi.accQuery(
+ pos.getConfigPara()!!.devphyid!!,
+ cardBean!!.cardphyid!!,
+ cardBean!!.cardNo!!
+ )
+ if (resp != null && resp.retcode == HttpStatus.SC_OK) {
+ try {
+ val retBean = GsonUtil.GsonToBean(resp.retjson!!, CardAccountRetBean::class.java)
+ if (retBean.retcode == PublicDef.SUCCESS) {
+ cardBean!!.username = retBean.username
+ cardBean!!.userid = retBean.userid
+ cardBean!!.balance = retBean.balance
+ when {
+ "normal" == retBean.status -> cardBean!!.cardstatus = CardStatus.NORMAL
+ "expire" == retBean.status -> cardBean!!.cardstatus = CardStatus.EXPIRE
+ "lost" == retBean.status -> cardBean!!.cardstatus = CardStatus.LOCK
+ "logout" == retBean.status -> cardBean!!.cardstatus = CardStatus.LOGOUT
+ "frozen" == retBean.status -> cardBean!!.cardstatus = CardStatus.FROZEN
+ "lock" == retBean.status -> cardBean!!.cardstatus = CardStatus.LOST
+ }
+ }
+ } catch (ex: Exception) {
+ ex.printStackTrace()
+ }
+ }
+ }
+
+ private fun checkShowScreen() {
+ val tt = System.currentTimeMillis()
+ if (operation) {
+ operation = false
+ screenSaverBean.operationTime = tt
+ screenSaverBean.operationFlag = true
+ }
+ if (tt > screenSaverBean.operationTime &&
+ tt - screenSaverBean.operationTime > PublicDef.SCREEN_SAVER_GAP
+ ) {
+ /**
+ * 连续半小时无操作屏保
+ */
+ screenSaverBean.operationTime = tt
+ screenSaverBean.flag = true
+ screenSaverBean.operationFlag = false
+ sendMsg(PublicDef.MSG_SCREEN_SAVER, "on")
+ } else {
+ if (screenSaverBean.operationFlag && screenSaverBean.flag) {
+ screenSaverBean.flag = false
+ sendMsg(PublicDef.MSG_SCREEN_SAVER, "off")
+ }
+ }
+ }
+
+ private fun showCardUserInfo() {
+ val info = CardUserInfoBean(PublicDef.SUCCESS, "账户信息")
+ if (cardBean!!.username != cardBean!!.cardNo) {
+ info.username = cardBean!!.username
+ }
+ info.cardno = cardBean!!.cardNo
+ info.cardstatus = cardBean!!.cardstatus
+ sendMsg(PublicDef.MSG_USER_INFO_SHOW, info)
+ }
+
+ private fun readCard() {
+ val cardinfo = Cardlib.instance.readCard()
+ cardBean = CardBean()
+ cardBean!!.cardNo = cardinfo.cardNo
+ cardBean!!.idCard = cardinfo.idCard
+ cardBean!!.expireDate = cardinfo.expireDate
+ cardBean!!.amount = amount
+ cardBean!!.datetime = DateUtil.getNowDateTimeFormat()
+ /**
+ * 用户名默认用卡号代替,在线查询更新为用户名
+ */
+ cardBean!!.username = cardBean!!.cardNo
+ }
+
+ private fun doConsume() {
+ if (isFixMode) {
+ if (lastPayBean.cardphyid == cardBean!!.cardphyid) {
+ val gap = (pos.getSysPara()?.fixpayGap ?: 10).toLong()
+ if (System.currentTimeMillis() - lastPayBean.suctime < gap * 1000) {
+ throw CardPayFailError("${gap}s内不能连续消费")
+ }
+ }
+ }
+ sendMsg(PublicDef.MSG_CARD_PAYING, "正在扣款...")
+ if (SPApplication.getInstance().isOnline()) {
+ if (!doOnlineConsume()) {
+ /**
+ * 由于不写卡,联机消费失败直接转离线
+ */
+ doOfflineConsume()
+ }
+ } else {
+ doOfflineConsume()
+ }
+ }
+
+ private fun doReverse() {
+ val list = pos.getTransdtlUnion(DateUtil.getNowDateNoFormat(), 0, 0, 1)
+ if (list.isEmpty()) {
+ throw CardPayCancelFailError("未找到消费记录")
+ }
+ if (list[0].payway == "offcard") {
+ doOfflineReverse(list[0])
+ } else {
+ doOnlineReverse(list[0])
+ }
+ }
+
+ private fun doOnlineReverse(unionRecord: TransdtlUnionRecord) {
+ val record = pos.getTransdtlOnlineLast() ?: throw CardPayCancelFailError("未找到联机记录")
+ checkOnlineReverseVaild(unionRecord, record)
+ saveTransdtlOnlineReverse(record)
+ showRvsOnlSucInfo()
+ asyncUpload(onlRvsRecord)
+ }
+
+ private fun doOfflineReverse(unionRecord: TransdtlUnionRecord) {
+ val record = pos.getTransdtlOfflineLast() ?: throw CardPayCancelFailError("未找到离线记录")
+ checkOfflineReverseVaild(unionRecord, record)
+ saveTransdtlOfflineReverse(record)
+ showRvsOffSucInfo()
+ asyncUpload(offRvsRecord)
+ }
+
+ private fun saveTransdtlOfflineReverse(record: TransdtlOfflineRecord) {
+ offRvsRecord = record.clone()
+ offRvsRecord.devseqno += 1
+ offRvsRecord.transdate = DateUtil.getNowDateNoFormat()
+ offRvsRecord.transtime = DateUtil.getNowTimeNoFormat()
+ offRvsRecord.reversalflag = ReversalFlag.MANUAL
+ offRvsRecord.reversalseqno = record.devseqno
+ offRvsRecord.reversaltransdate = record.transdate
+ offRvsRecord.reversaltranstime = record.transtime
+ offRvsRecord.upflag = 0
+ if (!pos.saveTransdtlOffline(offRvsRecord)) {
+ throw CardPayCancelFailError("保存流水失败")
+ }
+ }
+
+ private fun saveTransdtlOnlineReverse(record: TransdtlOnlineRecord) {
+ onlRvsRecord = record.clone()
+ onlRvsRecord.devseqno += 1
+ onlRvsRecord.transdate = DateUtil.getNowDateNoFormat()
+ onlRvsRecord.transtime = DateUtil.getNowTimeNoFormat()
+ onlRvsRecord.reversalflag = ReversalFlag.MANUAL
+ onlRvsRecord.reversalbillno = record.billno
+ onlRvsRecord.upflag = 0
+ if (!pos.saveTransdtlOnline(onlRvsRecord)) {
+ throw CardPayCancelFailError("保存流水失败")
+ }
+ }
+
+ private fun checkOnlineReverseVaild(unionRecord: TransdtlUnionRecord, record: TransdtlOnlineRecord) {
+ if (record.cardphyid != cardBean!!.cardphyid) {
+ throw CardPayCancelFailError("该卡不是最后消费")
+ }
+ if (unionRecord.transdate != record.transdate ||
+ unionRecord.transtime != record.transtime
+ ) {
+ throw CardPayCancelFailError("联机记录时间异常")
+ }
+ if (record.reversalflag == ReversalFlag.AUTO
+ ) {
+ throw CardPayCancelFailError("已撤销")
+ }
+ if (record.reversalflag == ReversalFlag.MANUAL) {
+ throw CardPayCancelFailError("已冲正")
+ }
+ if (record.status != PayStatus.SUC) {
+ throw CardPayCancelFailError("消费失败不能冲正")
+ }
+ val t1 = DateUtil.dateFormatConvertToLong(record.transdate + record.transtime)
+ val t2 = System.currentTimeMillis()
+ if (t2 - t1 > PublicDef.REVERSE_MS_GAP) {
+ throw CardPayCancelFailError("消费已过期")
+ }
+ }
+
+ private fun checkOfflineReverseVaild(unionRecord: TransdtlUnionRecord, record: TransdtlOfflineRecord) {
+ if (record.cardphyid != cardBean!!.cardphyid) {
+ throw CardPayCancelFailError("该卡不是最后消费")
+ }
+ if (unionRecord.transdate != record.transdate ||
+ unionRecord.transtime != record.transtime
+ ) {
+ throw CardPayCancelFailError("离线记录时间异常")
+ }
+ if (record.reversalflag == ReversalFlag.MANUAL ||
+ record.reversalflag == ReversalFlag.AUTO
+ ) {
+ throw CardPayCancelFailError("已冲正")
+ }
+ if (record.status != PayStatus.SUC) {
+ throw CardPayCancelFailError("消费失败不能冲正")
+ }
+ val t1 = DateUtil.dateFormatConvertToLong(record.transdate + record.transtime)
+ val t2 = System.currentTimeMillis()
+ if (t2 - t1 > PublicDef.REVERSE_MS_GAP) {
+ throw CardPayCancelFailError("消费已过期")
+ }
+ }
+
+ private fun doOnlineConsume(): Boolean {
+ initTransdtlOnline()
+ var resp = consumeApi.payInit(onlRecord)
+ var result = parseInitResult(resp)
+ if (!result) {
+ return result
+ }
+ resp = consumeApi.payConfirm(onlRecord)
+ result = parseConfirmResult(resp)
+ payQueryConfirm = false
+ if (!result) {
+ payQueryConfirm = true
+ result = doOnlineConsumeQuery()
+ }
+ updateTransdtlOnline(result)
+ if (result) {
+ showOnlSucInfo()
+ }
+ return result
+ }
+
+ private fun doOnlineConsumeQuery(): Boolean {
+ var queryCnt = 1
+ LogUtil.e(
+ TAG,
+ "pay timeout and query result,cardphyid=[${onlRecord.cardphyid}],billno=[${onlRecord.billno}]"
+ )
+ sleepWithCancel(1000)
+ while (payQueryConfirm) {
+ sendMsg(PublicDef.MSG_CARD_PAY_QUERY, "消费确认中[$queryCnt]")
+ val resp = consumeApi.payQuery(onlRecord)
+ val result = parseConfirmResult(resp)
+ if (result) {
+ return result
+ }
+ queryCnt += 1
+ sleepWithCancel(3000)
+ }
+ /**
+ * 手动取消交易
+ */
+ LogUtil.e(TAG, "manual cancel pay,cardphyid=[${onlRecord.cardphyid}],billno=[${onlRecord.billno}]")
+ throw CardPayInterruptError("交易取消")
+ }
+
+ private fun sleepWithCancel(ms: Long) {
+ var time = 0
+ while (payQueryConfirm) {
+ CommonUtil.doSleep(20)
+ time += 20
+ if (time > ms) {
+ return
+ }
+ }
+ }
+
+ private fun parseInitResult(resp: TransResp?): Boolean {
+ if (resp == null || resp.retcode != HttpStatus.SC_OK) {
+ SPApplication.getInstance().setEpayLinking(false)
+ return false
+ }
+ val retBean = try {
+ GsonUtil.GsonToBean(resp.retjson!!, CardPayInitRetBean::class.java)
+ } catch (ex: java.lang.Exception) {
+ throw CardPayFailError("json异常:${ex.message}")
+ }
+ if (retBean.retcode != PublicDef.SUCCESS) {
+ throw CardPayFailError(retBean.getErrorMsg())
+ }
+ onlRecord.billno = retBean.billno
+ onlRecord.username = retBean.username
+ return true
+ }
+
+ private fun parseConfirmResult(resp: TransResp?): Boolean {
+ if (resp == null || resp.retcode != HttpStatus.SC_OK) {
+ return false
+ }
+ val retBean = try {
+ GsonUtil.GsonToBean(resp.retjson!!, CardPayConfirmRetBean::class.java)
+ } catch (ex: Exception) {
+ throw CardPayFailError("json异常:${ex.message}")
+ }
+ if (retBean.retcode != PublicDef.SUCCESS) {
+ throw CardPayFailError(retBean.getErrorMsg())
+ }
+ if (retBean.require_query) {
+ return false
+ }
+ onlRecord.payamt = retBean.amount
+ onlRecord.extraamt = retBean.extraamt
+ return true
+ }
+
+ private fun initTransdtlOnline() {
+ onlRecord = TransdtlOnlineRecord()
+ var seqno = pos.getTransdtlOnlineMaxSeqno()
+ if (seqno == 0) {
+ seqno = pos.getDynamicPara()?.onlineseqno ?: 0
+ }
+ onlRecord.devphyid = pos.getConfigPara()!!.devphyid
+ onlRecord.transdate = cardBean!!.datetime!!.substring(0, 8)
+ onlRecord.transtime = cardBean!!.datetime!!.substring(8)
+ onlRecord.devseqno = seqno + 1
+ onlRecord.cardno = cardBean!!.cardNo
+ onlRecord.cardphyid = cardBean!!.cardphyid
+ onlRecord.payamt = cardBean!!.amount
+ onlRecord.reversalflag = ReversalFlag.NONE
+ onlRecord.extraamt = 0
+ onlRecord.transtype = "card"
+ onlRecord.status = PayStatus.INIT
+ onlRecord.upflag = 1
+ if (!pos.saveTransdtlOnline(onlRecord)) {
+ throw CardPayFailError("保存流水失败")
+ }
+ }
+
+ private fun updateTransdtlOnline(issuccess: Boolean) {
+ if (issuccess) {
+ onlRecord.status = PayStatus.SUC
+ } else {
+ onlRecord.status = PayStatus.FAIL
+ }
+ onlRecord.upflag = 1
+ pos.updateTransdtlOnline(onlRecord)
+ }
+
+ private fun doOfflineConsume() {
+ initTransdtlOffline()
+ checkCardValid()
+ updateTransdtlOffline(true)
+ showOffSucInfo()
+ }
+
+ private fun checkCardValid() {
+ val sysRecord = pos.getSysPara()
+ if (!sysRecord!!.offlineEnable) {
+ throw CardPayFailError("禁止离线交易")
+ }
+ val ctlRecord = pos.getControlPara(PublicDef.CONTROL_OFFLINE_DAY_DISABLE)
+ if (ctlRecord == null || ctlRecord.paraval != "1") {
+ val offdate = DateUtil.getDayDateNoFormatBefore(sysRecord.maxOfflineDays)
+ val validdate = pos.getDynamicPara()!!.jwtExpire?.substring(0, 8) ?: "00000000"
+ if (offdate > validdate) {
+ throw CardPayFailError("设备已脱机${sysRecord.maxOfflineDays}天")
+ }
+ }
+
+ val whiteRecord =
+ pos.getWhiteList(offRecord.cardphyid!!, offRecord.cardno!!) ?: throw CardPayFailError("卡无权限")
+ when (whiteRecord.status) {
+ "normal" -> {
+
+ }
+ "expire" -> throw CardPayFailError("卡已过期")
+ "lost" -> throw CardPayFailError("卡已挂失")
+ "logout" -> throw CardPayFailError("卡已注销")
+ "frozen" -> throw CardPayFailError("卡已冻结")
+ "lock" -> throw CardPayFailError("卡已锁定")
+ else -> throw CardPayFailError("卡状态:${whiteRecord.status}")
+ }
+
+ val payamt = pos.getTransdtlOfflineAmt(offRecord.transdate!!, offRecord.cardno!!, offRecord.cardphyid!!)
+ if ((payamt + offRecord.payamt) > sysRecord.maxDayOfflineAmt) {
+ throw CardPayFailError("已离线交易" + String.format("%.02f元", payamt / 100.0f))
+ }
+ }
+
+ private fun initTransdtlOffline() {
+ offRecord = TransdtlOfflineRecord()
+ var seqno = pos.getTransdtlOfflineMaxSeqno()
+ if (seqno == 0) {
+ seqno = pos.getDynamicPara()?.offlineseqno ?: 0
+ }
+ offRecord.devphyid = pos.getConfigPara()!!.devphyid
+ offRecord.transdate = cardBean!!.datetime!!.substring(0, 8)
+ offRecord.transtime = cardBean!!.datetime!!.substring(8)
+ offRecord.devseqno = seqno + 1
+ offRecord.cardno = cardBean!!.cardNo
+ offRecord.cardphyid = cardBean!!.cardphyid
+ offRecord.payamt = cardBean!!.amount
+ offRecord.reversalflag = ReversalFlag.NONE
+ offRecord.extraamt = 0
+ offRecord.managefeetype = "none"
+ offRecord.status = PayStatus.INIT
+ offRecord.upflag = 1
+ if (!pos.saveTransdtlOffline(offRecord)) {
+ throw CardPayFailError("保存流水失败")
+ }
+ }
+
+ private fun updateTransdtlOffline(issuccess: Boolean) {
+ if (issuccess) {
+ offRecord.status = PayStatus.SUC
+ } else {
+ offRecord.status = PayStatus.FAIL
+ }
+ offRecord.upflag = 0
+ if (!pos.updateTransdtlOffline(offRecord)) {
+ throw CardPayFailError("更新流水失败")
+ }
+ asyncUpload(offRecord)
+ }
+
+ private fun showOnlSucInfo() {
+ lastPayBean.cardphyid = cardBean!!.cardphyid
+ lastPayBean.suctime = System.currentTimeMillis()
+ val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
+ info.showtime = pos.getSysPara()!!.sucShowtime
+ info.amount = onlRecord.payamt
+ info.payamt = onlRecord.payamt
+ info.username = onlRecord.username
+ info.cardno = onlRecord.cardno
+ info.transdate = onlRecord.transdate
+ info.transtime = onlRecord.transtime
+ info.payway = onlRecord.transtype
+ info.status = onlRecord.status
+ info.reversalFlag = onlRecord.reversalflag
+ sendMsg(PublicDef.MSG_CARD_PAY_SUC, info)
+ }
+
+ private fun showOffSucInfo() {
+ lastPayBean.cardphyid = cardBean!!.cardphyid
+ lastPayBean.suctime = System.currentTimeMillis()
+ val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
+ info.showtime = pos.getSysPara()!!.sucShowtime
+ info.amount = offRecord.payamt
+ info.payamt = offRecord.payamt
+ info.cardno = offRecord.cardno
+ info.transdate = offRecord.transdate
+ info.transtime = offRecord.transtime
+ info.payway = "card"
+ info.status = offRecord.status
+ info.reversalFlag = offRecord.reversalflag
+ sendMsg(PublicDef.MSG_CARD_PAY_SUC, info)
+ }
+
+ private fun showRvsOnlSucInfo() {
+ val info = CardUserInfoBean(PublicDef.SUCCESS, "冲正成功")
+ info.showtime = pos.getSysPara()!!.sucShowtime
+ info.amount = onlRvsRecord.payamt
+ info.payamt = onlRvsRecord.payamt
+ info.username = onlRvsRecord.username
+ info.cardno = onlRvsRecord.cardno
+ info.transdate = onlRvsRecord.transdate
+ info.transtime = onlRvsRecord.transtime
+ info.payway = onlRvsRecord.transtype
+ info.status = onlRvsRecord.status
+ info.reversalFlag = onlRvsRecord.reversalflag
+ sendMsg(PublicDef.MSG_CARD_REVERSE_SUC, info)
+ }
+
+ private fun showRvsOffSucInfo() {
+ val info = CardUserInfoBean(PublicDef.SUCCESS, "冲正成功")
+ info.showtime = pos.getSysPara()!!.sucShowtime
+ info.amount = offRvsRecord.payamt
+ info.payamt = offRvsRecord.payamt
+ info.cardno = offRvsRecord.cardno
+ info.transdate = offRvsRecord.transdate
+ info.transtime = offRvsRecord.transtime
+ info.payway = "card"
+ info.status = offRvsRecord.status
+ info.reversalFlag = offRvsRecord.reversalflag
+ sendMsg(PublicDef.MSG_CARD_REVERSE_SUC, info)
+ }
+
+ private fun asyncUpload(dtl: TransdtlOfflineRecord) {
+ ThreadPool.getShortPool().execute(Runnable {
+ try {
+ EpayApiImpl().uploadTransdtl(dtl)
+ dtl.upflag = 1
+ pos.updateTransdtlOffline(dtl)
+ } catch (ex: java.lang.Exception) {
+ ex.printStackTrace()
+ }
+ })
+ }
+
+ private fun asyncUpload(dtl: TransdtlOnlineRecord) {
+ ThreadPool.getShortPool().execute(Runnable {
+ try {
+ EpayApiImpl().uploadTransdtl(dtl)
+ dtl.upflag = 1
+ pos.updateTransdtlOnline(dtl)
+ } catch (ex: java.lang.Exception) {
+ ex.printStackTrace()
+ }
+ })
+ }
+
+ private fun doClear() {
+ oldcardphyid = null
+ onlineBalance = false
+ val curtime = System.currentTimeMillis()
+ if (curtime < lastShowTime ||
+ curtime - lastShowTime > 1000
+ ) {
+ lastShowTime = curtime
+ sendMsg(PublicDef.MSG_USER_INFO_CLEAR, DateUtil.getNowDateTime1())
+ showLinkStatus()
+ }
+ }
+
+ private fun showLinkStatus() {
+ if (SPApplication.getInstance().isOnline()) {
+ if (!curLinkStatus) {
+ curLinkRefreshTime = System.currentTimeMillis()
+ curLinkStatus = true
+ sendMsg(PublicDef.MSG_LINK_STATUS, true)
+ return
+ }
+ } else {
+ if (curLinkStatus) {
+ curLinkStatus = false
+ curLinkRefreshTime = System.currentTimeMillis()
+ sendMsg(PublicDef.MSG_LINK_STATUS, false)
+ return
+ }
+ }
+ val t = System.currentTimeMillis()
+ if (t < curLinkRefreshTime ||
+ t - curLinkRefreshTime > 30000
+ ) {
+ curLinkRefreshTime = t
+ sendMsg(PublicDef.MSG_LINK_STATUS, SPApplication.getInstance().isOnline())
+ }
+ }
+
+ private fun getErrorInfo(errmsg: String?): CardUserInfoBean {
+ val info = CardUserInfoBean(PublicDef.ERROR, errmsg ?: "null")
+ info.showtime = pos.getSysPara()!!.failShowtime
+ info.status = PayStatus.FAIL
+ info.amount = amount
+ info.payamt = amount
+ info.payway = "card"
+ info.cardno = cardBean?.cardNo
+ info.transdate = DateUtil.getNowDateNoFormat()
+ info.transtime = DateUtil.getNowTimeNoFormat()
+ return info
+ }
+
+ private fun getRvsErrorInfo(errmsg: String?): CardUserInfoBean {
+ val info = CardUserInfoBean(PublicDef.ERROR, errmsg ?: "null")
+ info.showtime = pos.getSysPara()!!.failShowtime
+ info.status = PayStatus.FAIL
+ info.amount = amount
+ info.payamt = amount
+ info.cardno = cardBean?.cardNo
+ info.payway = "card"
+ info.transdate = DateUtil.getNowDateNoFormat()
+ info.transtime = DateUtil.getNowTimeNoFormat()
+ info.reversalFlag = ReversalFlag.MANUAL
+ return info
+ }
+
+ private fun sendMsg(code: Int, obj: Any) {
+ val msg = Message()
+ msg.what = code
+ msg.obj = obj
+ handler.sendMessage(msg)
+ }
+ }
+}
+
+enum class ClickStat {
+ INIT,
+ PAY,
+ REVERSE
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/consume/mode/CodePayService.kt b/app/src/main/java/com/supwisdom/activities/consume/mode/CodePayService.kt
index 989ef92..4485976 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/mode/CodePayService.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/mode/CodePayService.kt
@@ -1,222 +1,236 @@
-package com.supwisdom.activities.consume.mode
-
-import android.os.Handler
-import android.os.Message
-import com.supwisdom.activities.SPApplication
-import com.supwisdom.activities.consume.bean.CardPayConfirmRetBean
-import com.supwisdom.activities.consume.bean.CardPayInitRetBean
-import com.supwisdom.activities.consume.bean.CardUserInfoBean
-import com.supwisdom.activities.consume.bean.LastPayBean
-import com.supwisdom.entity.PayStatus
-import com.supwisdom.entity.ReversalFlag
-import com.supwisdom.entity.TransdtlOnlineRecord
-import com.supwisdom.exception.CardPayFailError
-import com.supwisdom.okhttp.TransResp
-import com.supwisdom.utils.*
-import org.apache.http.HttpStatus
-
-/**
- ** create by zzq on 2019/7/30
- ** @desc 二维码消费
- **/
-class CodePayService constructor(private val handler: Handler) {
- private val TAG = "CodePayService"
- private val pos = SPApplication.getInstance().getPos()
- private lateinit var codeRecord: TransdtlOnlineRecord
- private val consumeApi = ConsumeApi()
- /**
- * 消费过程中可按键主动取消
- * 手动取消后不冲正,以手机消费结果为准
- */
- @Volatile
- private var interruptedPay: Boolean = false
- @Volatile
- private var amount = 0
- var isFixMode = false
- private val lastPayBean = LastPayBean()
-
- fun interruptPay() {
- interruptedPay = true
- }
-
- fun pay(code: String, amount: Int) {
- this.amount = amount
- interruptedPay = false
- try {
- if (isFixMode) {
- if (lastPayBean.code == code) {
- val gap = (pos.getSysPara()?.fixpayGap ?: 10).toLong()
- if (System.currentTimeMillis() - lastPayBean.suctime < gap * 1000) {
- throw CardPayFailError("${gap}s内不能连续消费")
- }
- }
- }
- initTransdtlOnline(code, amount)
- var resp = consumeApi.payInit(codeRecord)
- parseInitResult(resp)
- resp = consumeApi.payConfirm(codeRecord)
- var result = parseConfirmResult(resp)
- if (!result) {
- result = payResultQuery()
- }
- updateTransdtlOnline(result)
- if (result) {
- showSucInfo()
- }
- } catch (ex: CardPayFailError) {
- sendMsg(PublicDef.MSG_CARD_PAY_FAIL, getErrorInfo(ex.message))
- }
- }
-
- private fun payResultQuery(): Boolean {
- sendMsg(PublicDef.MSG_PAYING_QUERY, "谨慎操作查询取消")
- LogUtil.d(TAG, "扫码消费确认超时,进行查询操作:billno=${codeRecord.billno}")
- sleepWithCancel(1500)
- var searchCnt = 1
- while (!interruptedPay) {
- sendMsg(PublicDef.MSG_CARD_PAYING, String.format("正在%d次查询...", searchCnt))
- val resp = consumeApi.payQuery(codeRecord)
- if (resp != null) {
- val result = parseConfirmResult(resp)
- if (!result) {
- searchCnt++
- sendMsg(PublicDef.MSG_CARD_PAYING, String.format("等待%d次查询...", searchCnt))
- sleepWithCancel(5000)
- continue
- }
- return result
- } else {
- searchCnt++
- sendMsg(PublicDef.MSG_CARD_PAYING, String.format("等待%d次查询...", searchCnt))
- sleepWithCancel(3000)
- }
- }
- LogUtil.d(TAG, "扫码消费确认超时,操作员手工取消查询:billno=${codeRecord.billno}")
- return false
- }
-
- private fun parseConfirmResult(resp: TransResp?): Boolean {
- if (resp == null) {
- SPApplication.getInstance().setEpayLinking(false)
- return false
- }
- if (resp.retcode != HttpStatus.SC_OK) {
- throw CardPayFailError("错误码=${resp.retcode}")
- }
- val retBean = try {
- GsonUtil.GsonToBean(resp.retjson!!, CardPayConfirmRetBean::class.java)
- } catch (ex: Exception) {
- throw CardPayFailError("json异常:${ex.message}")
- }
- if (retBean.retcode != PublicDef.SUCCESS) {
- throw CardPayFailError(retBean.getErrorMsg())
- }
- if (retBean.require_query) {
- // 等待查询
- return false
- }
- codeRecord.payamt = retBean.amount
- codeRecord.extraamt = retBean.extraamt
- return true
- }
-
- private fun parseInitResult(resp: TransResp?): Boolean {
- if (resp == null) {
- SPApplication.getInstance().setEpayLinking(false)
- throw CardPayFailError("请求超时")
- }
- if (resp.retcode != HttpStatus.SC_OK) {
- throw CardPayFailError("错误码=${resp.retcode}")
- }
- val retBean = try {
- GsonUtil.GsonToBean(resp.retjson!!, CardPayInitRetBean::class.java)
- } catch (ex: Exception) {
- throw CardPayFailError("json异常:${ex.message}")
- }
- if (retBean.retcode != PublicDef.SUCCESS) {
- throw CardPayFailError(retBean.getErrorMsg())
- }
- codeRecord.billno = retBean.billno
- codeRecord.username = retBean.username
- return true
- }
-
- private fun initTransdtlOnline(code: String, amount: Int) {
- codeRecord = TransdtlOnlineRecord()
- var seqno = pos.getTransdtlOnlineMaxSeqno()
- if (seqno == 0) {
- seqno = pos.getDynamicPara()?.onlineseqno ?: 0
- }
- codeRecord.devphyid = pos.getConfigPara()!!.devphyid
- codeRecord.transdate = DateUtil.getNowDateNoFormat()
- codeRecord.transtime = DateUtil.getNowTimeNoFormat()
- codeRecord.devseqno = seqno + 1
- codeRecord.qrcode = code
- codeRecord.payamt = amount
- codeRecord.reversalflag = ReversalFlag.NONE
- codeRecord.extraamt = 0
- codeRecord.transtype = "code"
- codeRecord.status = PayStatus.INIT
- codeRecord.upflag = 1
- if (!pos.saveTransdtlOnline(codeRecord)) {
- throw CardPayFailError("保存流水失败")
- }
- }
-
- private fun updateTransdtlOnline(issuccess: Boolean) {
- if (issuccess) {
- codeRecord.status = PayStatus.SUC
- } else {
- codeRecord.status = PayStatus.FAIL
- }
- codeRecord.upflag = 1
- pos.updateTransdtlOnline(codeRecord)
- }
-
- private fun sleepWithCancel(ms: Long) {
- var sum: Long = 0
- while (!interruptedPay) {
- CommonUtil.doSleep(100)
- sum += 100
- if (sum > ms) {
- break
- }
- }
- }
-
- private fun showSucInfo() {
- lastPayBean.code = codeRecord.qrcode
- lastPayBean.suctime = System.currentTimeMillis()
- val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
- info.showtime = pos.getSysPara()!!.sucShowtime
- info.amount = codeRecord.payamt
- info.payamt = codeRecord.payamt
- info.username = codeRecord.username
- info.cardno = codeRecord.cardno
- info.transdate = codeRecord.transdate
- info.transtime = codeRecord.transtime
- info.payway = codeRecord.transtype
- info.status = codeRecord.status
- info.reversalFlag = codeRecord.reversalflag
- sendMsg(PublicDef.MSG_CARD_PAY_SUC, info)
- }
-
- private fun getErrorInfo(errmsg: String?): CardUserInfoBean {
- val info = CardUserInfoBean(PublicDef.ERROR, errmsg ?: "null")
- info.showtime = pos.getSysPara()!!.failShowtime
- info.status = PayStatus.FAIL
- info.amount = amount
- info.payamt = amount
- info.payway = "code"
- info.transdate = DateUtil.getNowDateNoFormat()
- info.transtime = DateUtil.getNowTimeNoFormat()
- return info
- }
-
- private fun sendMsg(code: Int, obj: Any) {
- val msg = Message()
- msg.what = code
- msg.obj = obj
- handler.sendMessage(msg)
- }
+package com.supwisdom.activities.consume.mode
+
+import android.os.Handler
+import android.os.Message
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.consume.bean.CardPayConfirmRetBean
+import com.supwisdom.activities.consume.bean.CardPayInitRetBean
+import com.supwisdom.activities.consume.bean.CardUserInfoBean
+import com.supwisdom.activities.consume.bean.LastPayBean
+import com.supwisdom.entity.PayStatus
+import com.supwisdom.entity.ReversalFlag
+import com.supwisdom.entity.TransdtlOnlineRecord
+import com.supwisdom.exception.CardPayFailError
+import com.supwisdom.okhttp.TransResp
+import com.supwisdom.utils.*
+import org.apache.http.HttpStatus
+
+/**
+ ** create by zzq on 2019/7/30
+ ** @desc 二维码消费
+ **/
+class CodePayService constructor(private val handler: Handler) {
+ private val TAG = "CodePayService"
+ private val pos = SPApplication.getInstance().getPos()
+ private lateinit var codeRecord: TransdtlOnlineRecord
+ private val consumeApi = ConsumeApi()
+
+ /**
+ * 消费过程中可按键主动取消
+ * 手动取消后不冲正,以手机消费结果为准
+ */
+ @Volatile
+ private var interruptedPay: Boolean = false
+
+ @Volatile
+ private var amount = 0
+ var isFixMode = false
+ private val lastPayBean = LastPayBean()
+
+ fun interruptPay() {
+ interruptedPay = true
+ }
+
+ fun pay(code: String, amount: Int) {
+ this.amount = amount
+ interruptedPay = false
+ try {
+ if (isFixMode) {
+ if (lastPayBean.code == code) {
+ val gap = (pos.getSysPara()?.fixpayGap ?: 10).toLong()
+ if (System.currentTimeMillis() - lastPayBean.suctime < gap * 1000) {
+ throw CardPayFailError("${gap}s内不能连续消费")
+ }
+ }
+ }
+ initTransdtlOnline(code, amount)
+ var resp = consumeApi.payInit(codeRecord)
+ parseInitResult(resp)
+ resp = consumeApi.payConfirm(codeRecord)
+ var result = parseConfirmResult(resp)
+ if (!result) {
+ result = payResultQuery()
+ updateTransdtlOnlineHalfBreak(result)
+ } else {
+ updateTransdtlOnline(result)
+ }
+ if (result) {
+ showSucInfo()
+ }
+ } catch (ex: CardPayFailError) {
+ sendMsg(PublicDef.MSG_CARD_PAY_FAIL, getErrorInfo(ex.message))
+ }
+ }
+
+ private fun payResultQuery(): Boolean {
+ sendMsg(PublicDef.MSG_PAYING_QUERY, "谨慎操作查询取消")
+ LogUtil.d(TAG, "扫码消费确认超时,进行查询操作:billno=${codeRecord.billno}")
+ sleepWithCancel(1500)
+ var searchCnt = 1
+ while (!interruptedPay) {
+ sendMsg(PublicDef.MSG_CARD_PAYING, String.format("正在%d次查询...", searchCnt))
+ val resp = consumeApi.payQuery(codeRecord)
+ if (resp != null) {
+ val result = parseConfirmResult(resp)
+ if (!result) {
+ searchCnt++
+ sendMsg(PublicDef.MSG_CARD_PAYING, String.format("等待%d次查询...", searchCnt))
+ sleepWithCancel(3000)
+ continue
+ }
+ return result
+ } else {
+ searchCnt++
+ sendMsg(PublicDef.MSG_CARD_PAYING, String.format("等待%d次查询...", searchCnt))
+ sleepWithCancel(3000)
+ }
+ }
+ LogUtil.d(TAG, "扫码消费确认超时,操作员手工取消查询:billno=${codeRecord.billno}")
+ return false
+ }
+
+ private fun parseConfirmResult(resp: TransResp?): Boolean {
+ if (resp == null) {
+ SPApplication.getInstance().setEpayLinking(false)
+ return false
+ }
+ if (resp.retcode != HttpStatus.SC_OK) {
+ throw CardPayFailError("错误码=${resp.retcode}")
+ }
+ val retBean = try {
+ GsonUtil.GsonToBean(resp.retjson!!, CardPayConfirmRetBean::class.java)
+ } catch (ex: Exception) {
+ throw CardPayFailError("json异常:${ex.message}")
+ }
+ if (retBean.retcode != PublicDef.SUCCESS) {
+ throw CardPayFailError(retBean.getErrorMsg())
+ }
+ if (retBean.require_query) {
+ // 等待查询
+ return false
+ }
+ codeRecord.payamt = retBean.amount
+ codeRecord.extraamt = retBean.extraamt
+ return true
+ }
+
+ private fun parseInitResult(resp: TransResp?): Boolean {
+ if (resp == null) {
+ SPApplication.getInstance().setEpayLinking(false)
+ throw CardPayFailError("请求超时")
+ }
+ if (resp.retcode != HttpStatus.SC_OK) {
+ throw CardPayFailError("错误码=${resp.retcode}")
+ }
+ val retBean = try {
+ GsonUtil.GsonToBean(resp.retjson!!, CardPayInitRetBean::class.java)
+ } catch (ex: Exception) {
+ throw CardPayFailError("json异常:${ex.message}")
+ }
+ if (retBean.retcode != PublicDef.SUCCESS) {
+ throw CardPayFailError(retBean.getErrorMsg())
+ }
+ codeRecord.billno = retBean.billno
+ codeRecord.username = retBean.username
+ return true
+ }
+
+ private fun initTransdtlOnline(code: String, amount: Int) {
+ codeRecord = TransdtlOnlineRecord()
+ var seqno = pos.getTransdtlOnlineMaxSeqno()
+ if (seqno == 0) {
+ seqno = pos.getDynamicPara()?.onlineseqno ?: 0
+ }
+ codeRecord.devphyid = pos.getConfigPara()!!.devphyid
+ codeRecord.transdate = DateUtil.getNowDateNoFormat()
+ codeRecord.transtime = DateUtil.getNowTimeNoFormat()
+ codeRecord.devseqno = seqno + 1
+ codeRecord.qrcode = code
+ codeRecord.payamt = amount
+ codeRecord.reversalflag = ReversalFlag.NONE
+ codeRecord.extraamt = 0
+ codeRecord.transtype = "code"
+ codeRecord.status = PayStatus.INIT
+ codeRecord.upflag = 1
+ if (!pos.saveTransdtlOnline(codeRecord)) {
+ throw CardPayFailError("保存流水失败")
+ }
+ }
+
+ private fun updateTransdtlOnline(issuccess: Boolean) {
+ if (issuccess) {
+ codeRecord.status = PayStatus.SUC
+ } else {
+ codeRecord.status = PayStatus.FAIL
+ }
+ codeRecord.upflag = 1
+ pos.updateTransdtlOnline(codeRecord)
+ }
+
+ private fun updateTransdtlOnlineHalfBreak(issuccess: Boolean) {
+ if (issuccess) {
+ codeRecord.status = PayStatus.SUC
+ } else {
+ codeRecord.status = PayStatus.UNCONFIRM
+ }
+ codeRecord.upflag = 1
+ pos.updateTransdtlOnline(codeRecord)
+ }
+
+ private fun sleepWithCancel(ms: Long) {
+ var sum: Long = 0
+ while (!interruptedPay) {
+ CommonUtil.doSleep(100)
+ sum += 100
+ if (sum > ms) {
+ break
+ }
+ }
+ }
+
+ private fun showSucInfo() {
+ lastPayBean.code = codeRecord.qrcode
+ lastPayBean.suctime = System.currentTimeMillis()
+ val info = CardUserInfoBean(PublicDef.SUCCESS, "消费成功")
+ info.showtime = pos.getSysPara()!!.sucShowtime
+ info.amount = codeRecord.payamt
+ info.payamt = codeRecord.payamt
+ info.username = codeRecord.username
+ info.cardno = codeRecord.cardno
+ info.transdate = codeRecord.transdate
+ info.transtime = codeRecord.transtime
+ info.payway = codeRecord.transtype
+ info.status = codeRecord.status
+ info.reversalFlag = codeRecord.reversalflag
+ sendMsg(PublicDef.MSG_CARD_PAY_SUC, info)
+ }
+
+ private fun getErrorInfo(errmsg: String?): CardUserInfoBean {
+ val info = CardUserInfoBean(PublicDef.ERROR, errmsg ?: "null")
+ info.showtime = pos.getSysPara()!!.failShowtime
+ info.status = PayStatus.FAIL
+ info.amount = amount
+ info.payamt = amount
+ info.payway = "code"
+ info.transdate = DateUtil.getNowDateNoFormat()
+ info.transtime = DateUtil.getNowTimeNoFormat()
+ return info
+ }
+
+ private fun sendMsg(code: Int, obj: Any) {
+ val msg = Message()
+ msg.what = code
+ msg.obj = obj
+ handler.sendMessage(msg)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/consumeMode/ConsumeModeActivity.kt b/app/src/main/java/com/supwisdom/activities/consumeMode/ConsumeModeActivity.kt
index 7ce5604..3accf97 100644
--- a/app/src/main/java/com/supwisdom/activities/consumeMode/ConsumeModeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/consumeMode/ConsumeModeActivity.kt
@@ -1,554 +1,554 @@
-package com.supwisdom.activities.consumeMode
-
-import android.annotation.SuppressLint
-import android.os.Bundle
-import android.os.CountDownTimer
-import android.text.TextUtils
-import android.view.KeyEvent
-import android.view.View
-import android.widget.*
-import com.supwisdom.R
-import com.supwisdom.activities.BaseActivity
-import com.supwisdom.activities.SPApplication
-import com.supwisdom.activities.consume.PayMode
-import com.supwisdom.auxscreen.AuxScreenController
-import com.supwisdom.entity.HotKeyPayRecord
-import com.supwisdom.entity.PeriodFixPayRecord
-import com.supwisdom.utils.CommonUtil
-import com.supwisdom.utils.DateUtil
-import com.supwisdom.utils.PublicDef
-import com.supwisdom.view.SWToast
-import java.util.*
-import kotlin.collections.ArrayList
-
-/**
- ** create by zzq on 2019/7/26
- ** @desc
- **/
-class ConsumeModeActivity : BaseActivity() {
- private lateinit var vPayamt: TextView
- private lateinit var vSpecialDesc: TextView
- private lateinit var rbHotkeyMode: RadioButton
- private lateinit var rbPeriodMode: RadioButton
- private lateinit var rbNormalMode: RadioButton
- private lateinit var rbFixMode: RadioButton
- private lateinit var llSpecialList: LinearLayout
- private lateinit var llFixMode: LinearLayout
- private lateinit var llSpecialMode: LinearLayout
- private val pos = SPApplication.getInstance().getPos()
- private var keyActive = true
- private var shoppwdPass = false
- private var specialMode = false
- private var tmpPwd = ""
- private var configMode = ConfigMode.NORMAL_FIX
- private val MAX_CHILD_COUNT = 6
-
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- this.setContentView(R.layout.activity_consume_mode)
- initView()
- initData()
- }
-
- private fun initData() {
-
- }
-
- private fun initView() {
- vPayamt = findViewById<TextView>(R.id.tv_consume_mode_payamt)
- llSpecialList = findViewById<LinearLayout>(R.id.ll_special_list)
- this.findViewById<TextView>(R.id.tv_hot_add).setOnClickListener {
- if (!shoppwdPass) {
- return@setOnClickListener
- }
- if (llSpecialList.childCount >= MAX_CHILD_COUNT) {
- SWToast.show(
- applicationContext,
- "最大支持${MAX_CHILD_COUNT}条规则",
- PublicDef.TOAST_SHOW_DOUBT
- )
- return@setOnClickListener
- }
- if (configMode == ConfigMode.PERIOD_FIX) {
- addPeriodFixRule()
- } else if (configMode == ConfigMode.HOT_KEY) {
- addHotkeyRule()
- }
- }
- this.findViewById<TextView>(R.id.tv_save).setOnClickListener {
- if (!shoppwdPass) {
- return@setOnClickListener
- }
- when (configMode) {
- ConfigMode.PERIOD_FIX -> {
- if (llSpecialList.childCount == 0) {
- SWToast.show(applicationContext, "请先添加波段规则", PublicDef.TOAST_SHOW_DOUBT)
- return@setOnClickListener
- }
- if (!savePeriodFixRule()) {
- return@setOnClickListener
- }
- }
- ConfigMode.HOT_KEY -> {
- if (llSpecialList.childCount == 0) {
- SWToast.show(applicationContext, "请先添加热键规则", PublicDef.TOAST_SHOW_DOUBT)
- return@setOnClickListener
- }
- if (!saveHotkeyRule()) {
- return@setOnClickListener
- }
- }
- ConfigMode.NORMAL_FIX -> {
- pos.replaceControlPara(PublicDef.CONTROL_FIXAMT, getFixAmount())
- }
- ConfigMode.NORMAL -> {
- pos.replaceControlPara(PublicDef.CONTROL_FIXAMT, PayMode.NORMAL.desc)
- }
- }
- finish()
- }
- this.findViewById<TextView>(R.id.tv_return).setOnClickListener {
- //showCurrentMode(ConfigMode.NORMAL_FIX)
- //refreshToSetAmount()
- finish()
- }
- this.findViewById<RadioGroup>(R.id.rg_special_mode)
- .setOnCheckedChangeListener { _, checkedId ->
- if (!shoppwdPass) {
- return@setOnCheckedChangeListener
- }
- when (checkedId) {
- R.id.rb_normal -> showCurrentMode(ConfigMode.NORMAL)
- R.id.rb_normal_fix -> showCurrentMode(ConfigMode.NORMAL_FIX)
- R.id.rb_hot_mode -> showCurrentMode(ConfigMode.HOT_KEY)
- R.id.rb_period_fix_mode -> showCurrentMode(ConfigMode.PERIOD_FIX)
- }
- }
- rbNormalMode = this.findViewById<RadioButton>(R.id.rb_normal)
- rbFixMode = this.findViewById<RadioButton>(R.id.rb_normal_fix)
- rbPeriodMode = this.findViewById<RadioButton>(R.id.rb_period_fix_mode)
- rbHotkeyMode = this.findViewById<RadioButton>(R.id.rb_hot_mode)
-
- llFixMode = this.findViewById<LinearLayout>(R.id.ll_fix_mode)
- llSpecialMode = this.findViewById<LinearLayout>(R.id.ll_hot_mode)
-
- vSpecialDesc = this.findViewById<TextView>(R.id.tv_special_desc)
- }
-
- private fun addHotkeyRule() {
- val item = View.inflate(this, R.layout.item_hotkey_pay, null)
- item.findViewById<TextView>(R.id.tv_hot_del).setOnClickListener {
- llSpecialList.removeView(item)
- for (loop in 0 until llSpecialList.childCount) {
- val item = llSpecialList.getChildAt(loop)
- val key = item.findViewById<TextView>(R.id.tv_hot_key)
- key.text = "${(loop + 1)}"
- }
- }
- val key = item.findViewById<TextView>(R.id.tv_hot_key)
- key.text = "${llSpecialList.childCount + 1}"
- llSpecialList.addView(item)
- }
-
- private fun addPeriodFixRule() {
- val item = View.inflate(this, R.layout.item_period_fix_pay, null)
- item.findViewById<TextView>(R.id.tv_del).setOnClickListener {
- llSpecialList.removeView(item)
- for (loop in 0 until llSpecialList.childCount) {
- val item = llSpecialList.getChildAt(loop)
- val key = item.findViewById<TextView>(R.id.tv_config)
- key.text = "规则${(loop + 1)}:"
- }
- }
- val key = item.findViewById<TextView>(R.id.tv_config)
- key.text = "规则${llSpecialList.childCount + 1}:"
- llSpecialList.addView(item)
- }
-
- private fun saveHotkeyRule(): Boolean {
- val list = ArrayList<HotKeyPayRecord>()
- for (loop in 0 until llSpecialList.childCount) {
- val record = HotKeyPayRecord()
- val item = llSpecialList.getChildAt(loop)
- var temp = item.findViewById<TextView>(R.id.tv_hot_key)
- record.key = Integer.parseInt(temp.text.toString())
- temp = item.findViewById<EditText>(R.id.tv_hot_amount)
- record.amount =
- CommonUtil.YuanToFen(java.lang.Double.parseDouble(CommonUtil.getEditView(temp)))
- list.add(record)
- }
- pos.replaceControlPara(PublicDef.CONTROL_FIXAMT, PayMode.HOTKEY.desc)
- if (!pos.saveHotkeyPay(list)) {
- SWToast.show(applicationContext, "保持配置失败", PublicDef.TOAST_SHOW_CRY)
- return false
- }
- return true
- }
-
- private fun savePeriodFixRule(): Boolean {
- val list = ArrayList<PeriodFixPayRecord>()
- for (loop in 0 until llSpecialList.childCount) {
- val record = PeriodFixPayRecord()
- val item = llSpecialList.getChildAt(loop)
- record.beginTime =
- CommonUtil.getEditView(item.findViewById<EditText>(R.id.tv_period_start))
- record.endTime = CommonUtil.getEditView(item.findViewById<EditText>(R.id.tv_period_end))
- val temp = item.findViewById<EditText>(R.id.tv_amount)
- record.amount =
- CommonUtil.YuanToFen(java.lang.Double.parseDouble(CommonUtil.getEditView(temp)))
- if (TextUtils.isEmpty(record.beginTime) || TextUtils.isEmpty(record.endTime)) {
- SWToast.show(applicationContext, "时间段不为空", PublicDef.TOAST_SHOW_CRY)
- return false
- }
- if (record.beginTime!!.length != 4 || record.endTime!!.length != 4) {
- SWToast.show(applicationContext, "时间段长度不对", PublicDef.TOAST_SHOW_CRY)
- return false
- }
- if (!("0000" <= record.beginTime!! && record.beginTime!! < record.endTime!! && record.endTime!! <= "2400")) {
- SWToast.show(applicationContext, "时间段不合法", PublicDef.TOAST_SHOW_CRY)
- return false
- }
- list.add(record)
- }
- pos.replaceControlPara(PublicDef.CONTROL_FIXAMT, PayMode.PERIODFIX.desc)
- if (!pos.savePeriodFixPay(list)) {
- SWToast.show(applicationContext, "保持配置失败", PublicDef.TOAST_SHOW_CRY)
- return false
- }
- return true
- }
-
- private fun loadHotkeyRule() {
- llSpecialList.removeAllViews()
- pos.getHotkeyPay()?.forEach {
- val item = View.inflate(this, R.layout.item_hotkey_pay, null)
- item.findViewById<TextView>(R.id.tv_hot_del).setOnClickListener {
- llSpecialList.removeView(item)
- for (loop in 0 until llSpecialList.childCount) {
- val item = llSpecialList.getChildAt(loop)
- val key = item.findViewById<TextView>(R.id.tv_hot_key)
- key.text = "${(loop + 1)}"
- }
- }
- val key = item.findViewById<TextView>(R.id.tv_hot_key)
- key.text = "${llSpecialList.childCount + 1}"
- val amt = item.findViewById<TextView>(R.id.tv_hot_amount)
- amt.text = String.format("%.02f", it.amount / 100.0f)
- llSpecialList.addView(item)
- }
- }
-
- private fun loadPeriodFixRule() {
- llSpecialList.removeAllViews()
- pos.getPeriodFixPay()?.forEach {
- val item = View.inflate(this, R.layout.item_period_fix_pay, null)
- item.findViewById<TextView>(R.id.tv_del).setOnClickListener {
- llSpecialList.removeView(item)
- for (loop in 0 until llSpecialList.childCount) {
- val item = llSpecialList.getChildAt(loop)
- val key = item.findViewById<TextView>(R.id.tv_config)
- key.text = "规则${(loop + 1)}:"
- }
- }
- val beginTime = item.findViewById<EditText>(R.id.tv_period_start)
- beginTime.setText(it.beginTime)
- val endTime = item.findViewById<EditText>(R.id.tv_period_end)
- endTime.setText(it.endTime)
- val amt = item.findViewById<EditText>(R.id.tv_amount)
- amt.setText(String.format("%.02f", it.amount / 100.0f))
- val key = item.findViewById<TextView>(R.id.tv_config)
- key.text = "规则${llSpecialList.childCount + 1}:"
- llSpecialList.addView(item)
- }
- }
-
-
- @SuppressLint("SetTextI18n")
- override fun dispatchKeyEvent(event: KeyEvent): Boolean {
- if (event.action == KeyEvent.ACTION_DOWN) {
- if (!keyActive) {
- return super.dispatchKeyEvent(event)
- }
- resetCounter(200)
- if (shoppwdPass) {
- setFixAmount(event.keyCode)
- } else {
- checkShopPwd(event.keyCode)
- }
- }
- return super.dispatchKeyEvent(event)
- }
-
- override fun onResume() {
- super.onResume()
- shoppwdPass = false
- keyActive = true
- showCurrentMode(ConfigMode.NORMAL_FIX)
- refreshToCheckPasswd()
- }
-
- private fun showCurrentMode(mode: ConfigMode) {
- configMode = mode
- when (mode) {
- ConfigMode.HOT_KEY -> {
- specialMode = true
- rbHotkeyMode.isChecked = true
- llFixMode.visibility = View.GONE
- llSpecialMode.visibility = View.VISIBLE
- vSpecialDesc.text = "设置快捷按键(单位:元)"
- loadHotkeyRule()
- }
- ConfigMode.PERIOD_FIX -> {
- specialMode = true
- rbPeriodMode.isChecked = true
- llFixMode.visibility = View.GONE
- llSpecialMode.visibility = View.VISIBLE
- vSpecialDesc.text = "设置波段定额(单位:元)"
- loadPeriodFixRule()
- }
- ConfigMode.NORMAL_FIX -> {
- specialMode = false
- rbFixMode.isChecked = true
- llSpecialMode.visibility = View.GONE
- llFixMode.visibility = View.VISIBLE
- }
- else -> {
- rbNormalMode.isChecked = true
- llSpecialMode.visibility = View.GONE
- llFixMode.visibility = View.VISIBLE
- specialMode = false
- }
- }
- }
-
- private fun checkShopPwd(keyCode: Int) {
- when (keyCode) {
- KeyEvent.KEYCODE_0,
- KeyEvent.KEYCODE_1,
- KeyEvent.KEYCODE_2,
- KeyEvent.KEYCODE_3,
- KeyEvent.KEYCODE_4,
- KeyEvent.KEYCODE_5,
- KeyEvent.KEYCODE_6,
- KeyEvent.KEYCODE_7,
- KeyEvent.KEYCODE_8,
- KeyEvent.KEYCODE_9 -> {
- tmpPwd += keyCode - KeyEvent.KEYCODE_0
- if (tmpPwd.length >= 6) {
- if (checkShoPwdValid(tmpPwd)) {
- shoppwdPass = true
- refreshToSetAmount()
- } else {
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList<String>("请输入商户密码:", "密码错误"))
- }
- tmpPwd = ""
- } else {
- AuxScreenController.getInstance()
- .refreshContent(
- Arrays.asList(
- "请输入商户密码:",
- CommonUtil.getPasswordStar(tmpPwd.length)
- )
- )
- }
- }
- KeyEvent.KEYCODE_DEL -> {
- //cancel
- val len = tmpPwd.length
- when {
- len == 1 -> {
- tmpPwd = ""
- AuxScreenController.getInstance()
- .refreshContent(
- Arrays.asList(
- "请输入商户密码:",
- CommonUtil.getPasswordStar(tmpPwd.length)
- )
- )
- }
- len > 1 -> {
- tmpPwd = tmpPwd.substring(0, len - 1)
- AuxScreenController.getInstance()
- .refreshContent(
- Arrays.asList(
- "请输入商户密码:",
- CommonUtil.getPasswordStar(tmpPwd.length)
- )
- )
- }
- else -> finish()
- }
- }
- }
- }
-
- private fun checkShoPwdValid(inputPwd: String): Boolean {
- return inputPwd == pos.getConfigPara()!!.shopPwd
- }
-
- private fun setFixAmount(keyCode: Int) {
- if (specialMode) {
- AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("请到大屏设置"))
- return
- }
- when (keyCode) {
- KeyEvent.KEYCODE_0,
- KeyEvent.KEYCODE_1,
- KeyEvent.KEYCODE_2,
- KeyEvent.KEYCODE_3,
- KeyEvent.KEYCODE_4,
- KeyEvent.KEYCODE_5,
- KeyEvent.KEYCODE_6,
- KeyEvent.KEYCODE_7,
- KeyEvent.KEYCODE_8,
- KeyEvent.KEYCODE_9 -> addValueToEdit(keyCode - KeyEvent.KEYCODE_0)
- KeyEvent.KEYCODE_DEL -> delValueToEdit()
- KeyEvent.KEYCODE_POUND,
- KeyEvent.KEYCODE_PERIOD -> addDotToEdit()
- KeyEvent.KEYCODE_ENTER -> {
- pos.replaceControlPara(PublicDef.CONTROL_FIXAMT, getFixAmount())
-// jumpActivity(MenuActivity::class.java)
- finish()
- }
- KeyEvent.KEYCODE_DPAD_LEFT -> {
- //F1
- showCurrentMode(ConfigMode.HOT_KEY)
- AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("请到大屏设置"))
- }
- }
- }
-
- private fun refreshToCheckPasswd() {
- AuxScreenController.getInstance().refreshTitle("消费模式设置")
- AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
- AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("请输入商户密码:", " "))
- }
-
- private fun refreshToSetAmount() {
- vPayamt.text = PayMode.NORMAL.desc
- pos.getControlPara(PublicDef.CONTROL_FIXAMT)?.also {
- when {
- PayMode.FIXPAY.desc == it.paraval -> {
- vPayamt.text = String.format("%.02f", Integer.parseInt(it.paraval) / 100.0f)
- screenShowAmt()
- }
- PayMode.HOTKEY.desc == it.paraval -> {
- showCurrentMode(ConfigMode.HOT_KEY)
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList<String>("请到大屏设置"))
- return
- }
- PayMode.PERIODFIX.desc == it.paraval -> {
- showCurrentMode(ConfigMode.PERIOD_FIX)
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList<String>("请到大屏设置"))
- return
- }
- PayMode.NORMAL.desc == it.paraval -> {
-
- }
- }
- } ?: screenShowAmt()
- }
-
- private fun getFixAmount(): String {
- try {
- return Integer.toString(CommonUtil.YuanToFen(java.lang.Double.parseDouble(vPayamt.text.toString())))
- } catch (e: Exception) {
- e.printStackTrace()
- }
- return PayMode.NORMAL.desc
- }
-
- private fun addValueToEdit(value: Int) {
- var str = vPayamt.text.toString()
- if ("0" == str || PayMode.NORMAL.desc == str) {
- str = ""
- }
- //如果已经有小数点,则小数点后面不能超过两位
- if (str.indexOf(".") > 0) {
- if (str.length - str.indexOf(".") <= 2) {
- vPayamt.text = "$str$value"
- } else {
- vPayamt.text = value.toString()
- }
- } else {
- //限制消费金额<1000
- if (str.length < 3) {
- vPayamt.text = "$str$value"
- }
- }
- screenShowAmt()
- }
-
- private fun delValueToEdit() {
- val str = vPayamt.text.toString()
- if (PayMode.NORMAL.desc != str) {
- if (str.length <= 1) {
- vPayamt.text = PayMode.NORMAL.desc
- } else {
- vPayamt.text = str.substring(0, str.length - 1)
- }
- }
- screenShowAmt()
- }
-
- private fun addDotToEdit() {
- val str = vPayamt.text.toString()
- if (PayMode.NORMAL.desc == str) {
- vPayamt.text = "0."
- } else {
- if (str.length < 8 && str.indexOf('.') < 0) {
- vPayamt.text = "$str."
- }
- }
- screenShowAmt()
- }
-
- private fun screenShowAmt() {
- AuxScreenController.getInstance().refreshTitle("消费模式设置 F1-特殊模式")
- AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
- AuxScreenController.getInstance().refreshContent(
- Arrays.asList<String>(
- PayMode.NORMAL.desc + "-普通消费",
- "值-定额消费(元)",
- String.format("金额:%s", vPayamt.text.toString())
- )
- )
- }
-
- 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
- }
- }
-}
-
-enum class ConfigMode {
- NORMAL,
- NORMAL_FIX,
- HOT_KEY,
- PERIOD_FIX,
+package com.supwisdom.activities.consumeMode
+
+import android.annotation.SuppressLint
+import android.os.Bundle
+import android.os.CountDownTimer
+import android.text.TextUtils
+import android.view.KeyEvent
+import android.view.View
+import android.widget.*
+import com.supwisdom.R
+import com.supwisdom.activities.BaseActivity
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.auxscreen.AuxScreenController
+import com.supwisdom.activities.consume.PayMode
+import com.supwisdom.entity.HotKeyPayRecord
+import com.supwisdom.entity.PeriodFixPayRecord
+import com.supwisdom.utils.CommonUtil
+import com.supwisdom.utils.DateUtil
+import com.supwisdom.utils.PublicDef
+import com.supwisdom.view.SWToast
+import java.util.*
+import kotlin.collections.ArrayList
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+class ConsumeModeActivity : BaseActivity() {
+ private lateinit var vPayamt: TextView
+ private lateinit var vSpecialDesc: TextView
+ private lateinit var rbHotkeyMode: RadioButton
+ private lateinit var rbPeriodMode: RadioButton
+ private lateinit var rbNormalMode: RadioButton
+ private lateinit var rbFixMode: RadioButton
+ private lateinit var llSpecialList: LinearLayout
+ private lateinit var llFixMode: LinearLayout
+ private lateinit var llSpecialMode: LinearLayout
+ private val pos = SPApplication.getInstance().getPos()
+ private var keyActive = true
+ private var shoppwdPass = false
+ private var specialMode = false
+ private var tmpPwd = ""
+ private var configMode = ConfigMode.NORMAL_FIX
+ private val MAX_CHILD_COUNT = 6
+
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ this.setContentView(R.layout.activity_consume_mode)
+ initView()
+ initData()
+ }
+
+ private fun initData() {
+
+ }
+
+ private fun initView() {
+ vPayamt = findViewById<TextView>(R.id.tv_consume_mode_payamt)
+ llSpecialList = findViewById<LinearLayout>(R.id.ll_special_list)
+ this.findViewById<TextView>(R.id.tv_hot_add).setOnClickListener {
+ if (!shoppwdPass) {
+ return@setOnClickListener
+ }
+ if (llSpecialList.childCount >= MAX_CHILD_COUNT) {
+ SWToast.show(
+ applicationContext,
+ "最大支持${MAX_CHILD_COUNT}条规则",
+ PublicDef.TOAST_SHOW_DOUBT
+ )
+ return@setOnClickListener
+ }
+ if (configMode == ConfigMode.PERIOD_FIX) {
+ addPeriodFixRule()
+ } else if (configMode == ConfigMode.HOT_KEY) {
+ addHotkeyRule()
+ }
+ }
+ this.findViewById<TextView>(R.id.tv_save).setOnClickListener {
+ if (!shoppwdPass) {
+ return@setOnClickListener
+ }
+ when (configMode) {
+ ConfigMode.PERIOD_FIX -> {
+ if (llSpecialList.childCount == 0) {
+ SWToast.show(applicationContext, "请先添加波段规则", PublicDef.TOAST_SHOW_DOUBT)
+ return@setOnClickListener
+ }
+ if (!savePeriodFixRule()) {
+ return@setOnClickListener
+ }
+ }
+ ConfigMode.HOT_KEY -> {
+ if (llSpecialList.childCount == 0) {
+ SWToast.show(applicationContext, "请先添加热键规则", PublicDef.TOAST_SHOW_DOUBT)
+ return@setOnClickListener
+ }
+ if (!saveHotkeyRule()) {
+ return@setOnClickListener
+ }
+ }
+ ConfigMode.NORMAL_FIX -> {
+ pos.replaceControlPara(PublicDef.CONTROL_FIXAMT, getFixAmount())
+ }
+ ConfigMode.NORMAL -> {
+ pos.replaceControlPara(PublicDef.CONTROL_FIXAMT, PayMode.NORMAL.desc)
+ }
+ }
+ finish()
+ }
+ this.findViewById<TextView>(R.id.tv_return).setOnClickListener {
+ //showCurrentMode(ConfigMode.NORMAL_FIX)
+ //refreshToSetAmount()
+ finish()
+ }
+ this.findViewById<RadioGroup>(R.id.rg_special_mode)
+ .setOnCheckedChangeListener { _, checkedId ->
+ if (!shoppwdPass) {
+ return@setOnCheckedChangeListener
+ }
+ when (checkedId) {
+ R.id.rb_normal -> showCurrentMode(ConfigMode.NORMAL)
+ R.id.rb_normal_fix -> showCurrentMode(ConfigMode.NORMAL_FIX)
+ R.id.rb_hot_mode -> showCurrentMode(ConfigMode.HOT_KEY)
+ R.id.rb_period_fix_mode -> showCurrentMode(ConfigMode.PERIOD_FIX)
+ }
+ }
+ rbNormalMode = this.findViewById<RadioButton>(R.id.rb_normal)
+ rbFixMode = this.findViewById<RadioButton>(R.id.rb_normal_fix)
+ rbPeriodMode = this.findViewById<RadioButton>(R.id.rb_period_fix_mode)
+ rbHotkeyMode = this.findViewById<RadioButton>(R.id.rb_hot_mode)
+
+ llFixMode = this.findViewById<LinearLayout>(R.id.ll_fix_mode)
+ llSpecialMode = this.findViewById<LinearLayout>(R.id.ll_hot_mode)
+
+ vSpecialDesc = this.findViewById<TextView>(R.id.tv_special_desc)
+ }
+
+ private fun addHotkeyRule() {
+ val item = View.inflate(this, R.layout.item_hotkey_pay, null)
+ item.findViewById<TextView>(R.id.tv_hot_del).setOnClickListener {
+ llSpecialList.removeView(item)
+ for (loop in 0 until llSpecialList.childCount) {
+ val item = llSpecialList.getChildAt(loop)
+ val key = item.findViewById<TextView>(R.id.tv_hot_key)
+ key.text = "${(loop + 1)}"
+ }
+ }
+ val key = item.findViewById<TextView>(R.id.tv_hot_key)
+ key.text = "${llSpecialList.childCount + 1}"
+ llSpecialList.addView(item)
+ }
+
+ private fun addPeriodFixRule() {
+ val item = View.inflate(this, R.layout.item_period_fix_pay, null)
+ item.findViewById<TextView>(R.id.tv_del).setOnClickListener {
+ llSpecialList.removeView(item)
+ for (loop in 0 until llSpecialList.childCount) {
+ val item = llSpecialList.getChildAt(loop)
+ val key = item.findViewById<TextView>(R.id.tv_config)
+ key.text = "规则${(loop + 1)}:"
+ }
+ }
+ val key = item.findViewById<TextView>(R.id.tv_config)
+ key.text = "规则${llSpecialList.childCount + 1}:"
+ llSpecialList.addView(item)
+ }
+
+ private fun saveHotkeyRule(): Boolean {
+ val list = ArrayList<HotKeyPayRecord>()
+ for (loop in 0 until llSpecialList.childCount) {
+ val record = HotKeyPayRecord()
+ val item = llSpecialList.getChildAt(loop)
+ var temp = item.findViewById<TextView>(R.id.tv_hot_key)
+ record.key = Integer.parseInt(temp.text.toString())
+ temp = item.findViewById<EditText>(R.id.tv_hot_amount)
+ record.amount =
+ CommonUtil.YuanToFen(java.lang.Double.parseDouble(CommonUtil.getEditView(temp)))
+ list.add(record)
+ }
+ pos.replaceControlPara(PublicDef.CONTROL_FIXAMT, PayMode.HOTKEY.desc)
+ if (!pos.saveHotkeyPay(list)) {
+ SWToast.show(applicationContext, "保持配置失败", PublicDef.TOAST_SHOW_CRY)
+ return false
+ }
+ return true
+ }
+
+ private fun savePeriodFixRule(): Boolean {
+ val list = ArrayList<PeriodFixPayRecord>()
+ for (loop in 0 until llSpecialList.childCount) {
+ val record = PeriodFixPayRecord()
+ val item = llSpecialList.getChildAt(loop)
+ record.beginTime =
+ CommonUtil.getEditView(item.findViewById<EditText>(R.id.tv_period_start))
+ record.endTime = CommonUtil.getEditView(item.findViewById<EditText>(R.id.tv_period_end))
+ val temp = item.findViewById<EditText>(R.id.tv_amount)
+ record.amount =
+ CommonUtil.YuanToFen(java.lang.Double.parseDouble(CommonUtil.getEditView(temp)))
+ if (TextUtils.isEmpty(record.beginTime) || TextUtils.isEmpty(record.endTime)) {
+ SWToast.show(applicationContext, "时间段不为空", PublicDef.TOAST_SHOW_CRY)
+ return false
+ }
+ if (record.beginTime!!.length != 4 || record.endTime!!.length != 4) {
+ SWToast.show(applicationContext, "时间段长度不对", PublicDef.TOAST_SHOW_CRY)
+ return false
+ }
+ if (!("0000" <= record.beginTime!! && record.beginTime!! < record.endTime!! && record.endTime!! <= "2400")) {
+ SWToast.show(applicationContext, "时间段不合法", PublicDef.TOAST_SHOW_CRY)
+ return false
+ }
+ list.add(record)
+ }
+ pos.replaceControlPara(PublicDef.CONTROL_FIXAMT, PayMode.PERIODFIX.desc)
+ if (!pos.savePeriodFixPay(list)) {
+ SWToast.show(applicationContext, "保持配置失败", PublicDef.TOAST_SHOW_CRY)
+ return false
+ }
+ return true
+ }
+
+ private fun loadHotkeyRule() {
+ llSpecialList.removeAllViews()
+ pos.getHotkeyPay()?.forEach {
+ val item = View.inflate(this, R.layout.item_hotkey_pay, null)
+ item.findViewById<TextView>(R.id.tv_hot_del).setOnClickListener {
+ llSpecialList.removeView(item)
+ for (loop in 0 until llSpecialList.childCount) {
+ val item = llSpecialList.getChildAt(loop)
+ val key = item.findViewById<TextView>(R.id.tv_hot_key)
+ key.text = "${(loop + 1)}"
+ }
+ }
+ val key = item.findViewById<TextView>(R.id.tv_hot_key)
+ key.text = "${llSpecialList.childCount + 1}"
+ val amt = item.findViewById<TextView>(R.id.tv_hot_amount)
+ amt.text = String.format("%.02f", it.amount / 100.0f)
+ llSpecialList.addView(item)
+ }
+ }
+
+ private fun loadPeriodFixRule() {
+ llSpecialList.removeAllViews()
+ pos.getPeriodFixPay()?.forEach {
+ val item = View.inflate(this, R.layout.item_period_fix_pay, null)
+ item.findViewById<TextView>(R.id.tv_del).setOnClickListener {
+ llSpecialList.removeView(item)
+ for (loop in 0 until llSpecialList.childCount) {
+ val item = llSpecialList.getChildAt(loop)
+ val key = item.findViewById<TextView>(R.id.tv_config)
+ key.text = "规则${(loop + 1)}:"
+ }
+ }
+ val beginTime = item.findViewById<EditText>(R.id.tv_period_start)
+ beginTime.setText(it.beginTime)
+ val endTime = item.findViewById<EditText>(R.id.tv_period_end)
+ endTime.setText(it.endTime)
+ val amt = item.findViewById<EditText>(R.id.tv_amount)
+ amt.setText(String.format("%.02f", it.amount / 100.0f))
+ val key = item.findViewById<TextView>(R.id.tv_config)
+ key.text = "规则${llSpecialList.childCount + 1}:"
+ llSpecialList.addView(item)
+ }
+ }
+
+
+ @SuppressLint("SetTextI18n")
+ override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+ if (event.action == KeyEvent.ACTION_DOWN) {
+ if (!keyActive) {
+ return super.dispatchKeyEvent(event)
+ }
+ resetCounter(200)
+ if (shoppwdPass) {
+ setFixAmount(event.keyCode)
+ } else {
+ checkShopPwd(event.keyCode)
+ }
+ }
+ return super.dispatchKeyEvent(event)
+ }
+
+ override fun onResume() {
+ super.onResume()
+ shoppwdPass = false
+ keyActive = true
+ showCurrentMode(ConfigMode.NORMAL_FIX)
+ refreshToCheckPasswd()
+ }
+
+ private fun showCurrentMode(mode: ConfigMode) {
+ configMode = mode
+ when (mode) {
+ ConfigMode.HOT_KEY -> {
+ specialMode = true
+ rbHotkeyMode.isChecked = true
+ llFixMode.visibility = View.GONE
+ llSpecialMode.visibility = View.VISIBLE
+ vSpecialDesc.text = "设置快捷按键(单位:元)"
+ loadHotkeyRule()
+ }
+ ConfigMode.PERIOD_FIX -> {
+ specialMode = true
+ rbPeriodMode.isChecked = true
+ llFixMode.visibility = View.GONE
+ llSpecialMode.visibility = View.VISIBLE
+ vSpecialDesc.text = "设置波段定额(单位:元)"
+ loadPeriodFixRule()
+ }
+ ConfigMode.NORMAL_FIX -> {
+ specialMode = false
+ rbFixMode.isChecked = true
+ llSpecialMode.visibility = View.GONE
+ llFixMode.visibility = View.VISIBLE
+ }
+ else -> {
+ rbNormalMode.isChecked = true
+ llSpecialMode.visibility = View.GONE
+ llFixMode.visibility = View.VISIBLE
+ specialMode = false
+ }
+ }
+ }
+
+ private fun checkShopPwd(keyCode: Int) {
+ when (keyCode) {
+ KeyEvent.KEYCODE_0,
+ KeyEvent.KEYCODE_1,
+ KeyEvent.KEYCODE_2,
+ KeyEvent.KEYCODE_3,
+ KeyEvent.KEYCODE_4,
+ KeyEvent.KEYCODE_5,
+ KeyEvent.KEYCODE_6,
+ KeyEvent.KEYCODE_7,
+ KeyEvent.KEYCODE_8,
+ KeyEvent.KEYCODE_9 -> {
+ tmpPwd += keyCode - KeyEvent.KEYCODE_0
+ if (tmpPwd.length >= 6) {
+ if (checkShoPwdValid(tmpPwd)) {
+ shoppwdPass = true
+ refreshToSetAmount()
+ } else {
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList<String>("请输入商户密码:", "密码错误"))
+ }
+ tmpPwd = ""
+ } else {
+ AuxScreenController.getInstance()
+ .refreshContent(
+ Arrays.asList(
+ "请输入商户密码:",
+ CommonUtil.getPasswordStar(tmpPwd.length)
+ )
+ )
+ }
+ }
+ KeyEvent.KEYCODE_DEL -> {
+ //cancel
+ val len = tmpPwd.length
+ when {
+ len == 1 -> {
+ tmpPwd = ""
+ AuxScreenController.getInstance()
+ .refreshContent(
+ Arrays.asList(
+ "请输入商户密码:",
+ CommonUtil.getPasswordStar(tmpPwd.length)
+ )
+ )
+ }
+ len > 1 -> {
+ tmpPwd = tmpPwd.substring(0, len - 1)
+ AuxScreenController.getInstance()
+ .refreshContent(
+ Arrays.asList(
+ "请输入商户密码:",
+ CommonUtil.getPasswordStar(tmpPwd.length)
+ )
+ )
+ }
+ else -> finish()
+ }
+ }
+ }
+ }
+
+ private fun checkShoPwdValid(inputPwd: String): Boolean {
+ return inputPwd == pos.getConfigPara()!!.shopPwd
+ }
+
+ private fun setFixAmount(keyCode: Int) {
+ if (specialMode) {
+ AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("请到大屏设置"))
+ return
+ }
+ when (keyCode) {
+ KeyEvent.KEYCODE_0,
+ KeyEvent.KEYCODE_1,
+ KeyEvent.KEYCODE_2,
+ KeyEvent.KEYCODE_3,
+ KeyEvent.KEYCODE_4,
+ KeyEvent.KEYCODE_5,
+ KeyEvent.KEYCODE_6,
+ KeyEvent.KEYCODE_7,
+ KeyEvent.KEYCODE_8,
+ KeyEvent.KEYCODE_9 -> addValueToEdit(keyCode - KeyEvent.KEYCODE_0)
+ KeyEvent.KEYCODE_DEL -> delValueToEdit()
+ KeyEvent.KEYCODE_POUND,
+ KeyEvent.KEYCODE_PERIOD -> addDotToEdit()
+ KeyEvent.KEYCODE_ENTER -> {
+ pos.replaceControlPara(PublicDef.CONTROL_FIXAMT, getFixAmount())
+// jumpActivity(MenuActivity::class.java)
+ finish()
+ }
+ KeyEvent.KEYCODE_DPAD_LEFT -> {
+ //F1
+ showCurrentMode(ConfigMode.HOT_KEY)
+ AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("请到大屏设置"))
+ }
+ }
+ }
+
+ private fun refreshToCheckPasswd() {
+ AuxScreenController.getInstance().refreshTitle("消费模式设置")
+ AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime1())
+ AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("请输入商户密码:", " "))
+ }
+
+ private fun refreshToSetAmount() {
+ vPayamt.text = PayMode.NORMAL.desc
+ pos.getControlPara(PublicDef.CONTROL_FIXAMT)?.also {
+ when {
+ PayMode.FIXPAY.desc == it.paraval -> {
+ vPayamt.text = String.format("%.02f", Integer.parseInt(it.paraval) / 100.0f)
+ screenShowAmt()
+ }
+ PayMode.HOTKEY.desc == it.paraval -> {
+ showCurrentMode(ConfigMode.HOT_KEY)
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList<String>("请到大屏设置"))
+ return
+ }
+ PayMode.PERIODFIX.desc == it.paraval -> {
+ showCurrentMode(ConfigMode.PERIOD_FIX)
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList<String>("请到大屏设置"))
+ return
+ }
+ PayMode.NORMAL.desc == it.paraval -> {
+
+ }
+ }
+ } ?: screenShowAmt()
+ }
+
+ private fun getFixAmount(): String {
+ try {
+ return Integer.toString(CommonUtil.YuanToFen(java.lang.Double.parseDouble(vPayamt.text.toString())))
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ return PayMode.NORMAL.desc
+ }
+
+ private fun addValueToEdit(value: Int) {
+ var str = vPayamt.text.toString()
+ if ("0" == str || PayMode.NORMAL.desc == str) {
+ str = ""
+ }
+ //如果已经有小数点,则小数点后面不能超过两位
+ if (str.indexOf(".") > 0) {
+ if (str.length - str.indexOf(".") <= 2) {
+ vPayamt.text = "$str$value"
+ } else {
+ vPayamt.text = value.toString()
+ }
+ } else {
+ //限制消费金额<1000
+ if (str.length < 3) {
+ vPayamt.text = "$str$value"
+ }
+ }
+ screenShowAmt()
+ }
+
+ private fun delValueToEdit() {
+ val str = vPayamt.text.toString()
+ if (PayMode.NORMAL.desc != str) {
+ if (str.length <= 1) {
+ vPayamt.text = PayMode.NORMAL.desc
+ } else {
+ vPayamt.text = str.substring(0, str.length - 1)
+ }
+ }
+ screenShowAmt()
+ }
+
+ private fun addDotToEdit() {
+ val str = vPayamt.text.toString()
+ if (PayMode.NORMAL.desc == str) {
+ vPayamt.text = "0."
+ } else {
+ if (str.length < 8 && str.indexOf('.') < 0) {
+ vPayamt.text = "$str."
+ }
+ }
+ screenShowAmt()
+ }
+
+ private fun screenShowAmt() {
+ AuxScreenController.getInstance().refreshTitle("消费模式设置 F1-特殊模式")
+ AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime1())
+ AuxScreenController.getInstance().refreshContent(
+ Arrays.asList<String>(
+ PayMode.NORMAL.desc + "-普通消费",
+ "值-定额消费(元)",
+ String.format("金额:%s", vPayamt.text.toString())
+ )
+ )
+ }
+
+ 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
+ }
+ }
+}
+
+enum class ConfigMode {
+ NORMAL,
+ NORMAL_FIX,
+ HOT_KEY,
+ PERIOD_FIX,
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/control/ControlActivity.kt b/app/src/main/java/com/supwisdom/activities/control/ControlActivity.kt
index 0ab3436..7d4f566 100644
--- a/app/src/main/java/com/supwisdom/activities/control/ControlActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/control/ControlActivity.kt
@@ -1,118 +1,117 @@
-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 (!pos.replaceControlPara(PublicDef.CONTROL_OFFLINE_DAY_DISABLE, flag)) {
- showSWToastInfo("脱机天数判断保存失败", PublicDef.TOAST_SHOW_CRY)
- return@setOnClickListener
- }
-
- flag = if (vDebugEnable.isChecked) {
- "1"
- } else {
- "0"
- }
- if (!pos.replaceControlPara(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>("请到大屏进行配置"))
- }
+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.activities.auxscreen.AuxScreenController
+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 (!pos.replaceControlPara(PublicDef.CONTROL_OFFLINE_DAY_DISABLE, flag)) {
+ showSWToastInfo("脱机天数判断保存失败", PublicDef.TOAST_SHOW_CRY)
+ return@setOnClickListener
+ }
+
+ flag = if (vDebugEnable.isChecked) {
+ "1"
+ } else {
+ "0"
+ }
+ if (!pos.replaceControlPara(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>("请到大屏进行配置"))
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/init/InitActivity.kt b/app/src/main/java/com/supwisdom/activities/init/InitActivity.kt
index 1c83abd..79845f9 100644
--- a/app/src/main/java/com/supwisdom/activities/init/InitActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/init/InitActivity.kt
@@ -1,245 +1,237 @@
-package com.supwisdom.activities.init
-
-import android.app.Activity
-import android.net.nsd.NsdServiceInfo
-import android.os.Bundle
-import android.support.v7.widget.LinearLayoutManager
-import android.support.v7.widget.RecyclerView
-import android.widget.Button
-import android.widget.EditText
-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.activities.init.adapter.NsdServerConfigAdapter
-import com.supwisdom.activities.init.mode.NsdClient
-import com.supwisdom.activities.init.mode.NsdClientApi
-import com.supwisdom.activities.load.LoadActivity
-import com.supwisdom.auxscreen.AuxScreenController
-import com.supwisdom.entity.ConfigParaRecord
-import com.supwisdom.service.NtpClient
-import com.supwisdom.utils.CommonUtil
-import com.supwisdom.utils.DateUtil
-import com.supwisdom.utils.PublicDef
-import com.supwisdom.utils.ThreadPool
-import com.supwisdom.view.BigSwDialog
-import com.supwisdom.view.SWToast
-import java.util.*
-
-/**
- ** create by zzq on 2019/7/24
- ** @desc
- **/
-@Suppress("DEPRECATION")
-class InitActivity : BaseActivity(), IInitView {
- private lateinit var presenter: InitPresenter
- private lateinit var vDevphyid: EditText
- private lateinit var vTenantId: EditText
- private lateinit var vServerIp: EditText
- private lateinit var vUri: EditText
- private lateinit var vPort: EditText
- private lateinit var vNsdResult: TextView
- private lateinit var vRadioPayMode: RadioButton
- private lateinit var vRadioDepositMode: RadioButton
- private lateinit var vRadioThirdPayMode: RadioButton
- private lateinit var vRadioThirdLoginMode: RadioButton
- private var nsdClient: NsdClient? = null
- private var nsdServiceIp: String? = null
- private var nsdServicePort: Int = 0
- private var dialogNsdConfig: BigSwDialog? = null
- private var nsdConfigAdapter: NsdServerConfigAdapter? = null
- private val pos = SPApplication.getInstance().getPos()
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_init)
- initView()
- initData()
- }
-
- private fun initData() {
- presenter = InitPresenter(this)
- var record = pos.getConfigPara()
- if (record == null) {
- record = ConfigParaRecord()
- record.mode = 0
- record.tenantId = "schema"
- record.devphyid = "12345678"
- record.epayIP = "127.0.0.1"
- record.epayPort = 8080
- record.epayUri = "restaurant"
- }
- record.initOK = false
- pos.replaceConfigPara(record)
- val cfgRecord = pos.getConfigPara()
-
-// when {
-// cfgRecord.mode == PublicDef.TERMINAL_DEPOSIT_MODE -> vRadioDepositMode.isChecked = true
-// cfgRecord.mode == PublicDef.TERMINAL_THIRD_PAY_MODE -> vRadioThirdPayMode.isChecked = true
-// cfgRecord.mode == PublicDef.TERMINAL_GATE_MODE -> vRadioGateMode.isChecked = true
-// cfgRecord.mode == PublicDef.TERMINAL_THIRD_LOGIN_MODE -> vRadioThirdLoginMode.isChecked = true
-// else -> vRadioPayMode.isChecked = true
-// }
- vTenantId.setText(cfgRecord!!.tenantId)
- vDevphyid.setText(cfgRecord.devphyid)
- vServerIp.setText(cfgRecord.epayIP)
- vUri.setText(cfgRecord.epayUri)
- vPort.setText(cfgRecord.epayPort.toString())
-
- nsdClient = NsdClient(this, "epay-reg-server", object : NsdClient.IServerFound {
- override fun onServerFound(serviceInfo: NsdServiceInfo) {
- nsdServiceIp = serviceInfo.host?.hostAddress
- nsdServicePort = serviceInfo.port
- if (nsdServiceIp != null) {
- asyncGetConfigName()
- }
- }
-
- override fun onServerFail() {
-
- }
- })
- }
-
- private fun initView() {
- this.findViewById<Button>(R.id.tv_settings).setOnClickListener {
- CommonUtil.startNetSetting(this@InitActivity)
- }
- this.findViewById<TextView>(R.id.btn_save).setOnClickListener {
- presenter.saveConfigParam(
- 0,
- CommonUtil.getEditView(vTenantId),
- CommonUtil.getEditView(vDevphyid), CommonUtil.getEditView(vServerIp),
- CommonUtil.getEditView(vUri), CommonUtil.getEditView(vPort)
- )
- }
- this.findViewById<Button>(R.id.tv_nsd_query).setOnClickListener {
- if (nsdServiceIp == null) {
- showSWToastInfo("nsd未连接", PublicDef.TOAST_SHOW_DOUBT)
- return@setOnClickListener
- }
- asyncGetConfigName()
- }
- vNsdResult = this.findViewById(R.id.tv_nsd_result) as TextView
- vRadioPayMode = this.findViewById(R.id.rb_pay_mode) as RadioButton
- vRadioDepositMode = this.findViewById(R.id.rb_deposit_mode) as RadioButton
- vRadioThirdPayMode = this.findViewById(R.id.rb_third_pay_mode) as RadioButton
- vRadioThirdLoginMode = this.findViewById(R.id.rb_third_login_mode) as RadioButton
- vTenantId = this.findViewById(R.id.tv_tenantid) as EditText
- vDevphyid = this.findViewById(R.id.tv_devphyid) as EditText
- vServerIp = this.findViewById(R.id.tv_server_ip) as EditText
- vUri = this.findViewById(R.id.tv_uri_root) as EditText
- vPort = this.findViewById(R.id.tv_server_port) as EditText
- }
-
- override fun onResume() {
- super.onResume()
- nsdClient!!.start()
- refresh()
- }
-
- override fun onStop() {
- super.onStop()
- nsdClient!!.stop()
- }
-
- private fun refresh() {
- AuxScreenController.getInstance().refreshTitle("通讯参数设置")
- AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList("设备第一次使用", "请联系管理员", "在大屏配置参数"))
- }
-
- private fun asyncGetConfigName() {
- ThreadPool.getShortPool().execute(Runnable {
- try {
- val ret = NsdClientApi(nsdServiceIp!!, nsdServicePort).getNsdServerConfigList()
- runOnUiThread {
- vNsdResult.text = ret.retmsg
- if (ret.retcode == PublicDef.SUCCESS) {
- if (ret.list!!.isEmpty()) {
- vNsdResult.text = "未找到配置项"
- return@runOnUiThread
- } else if (ret.list!!.size == 1) {
- asyncGetConfigFromNsdServer(ret.list!![0])
- return@runOnUiThread
- }
- vNsdResult.setTextColor(resources.getColor(R.color.light_blue2))
- if (dialogNsdConfig == null) {
- dialogNsdConfig = BigSwDialog(this, PublicDef.DIALOG_TYPE_NSD_CONFIG)
- val vConfigList =
- dialogNsdConfig!!.findViewById(R.id.rv_config_list) as RecyclerView
- vConfigList.layoutManager = LinearLayoutManager(this)
- vConfigList.addItemDecoration(NsdServerConfigAdapter.ItemDecoration(10))
- nsdConfigAdapter =
- NsdServerConfigAdapter(
- this,
- object : NsdServerConfigAdapter.ConfigNameListener {
- override fun callback(configName: String) {
- asyncGetConfigFromNsdServer(configName)
- dialogNsdConfig!!.dismiss()
- }
- })
- vConfigList.adapter = nsdConfigAdapter
- }
- nsdConfigAdapter!!.setList(ret.list)
- nsdConfigAdapter!!.notifyDataSetChanged()
- dialogNsdConfig!!.show()
- } else {
- vNsdResult.setTextColor(resources.getColor(R.color.cl_red))
- }
- }
- } catch (ex: Exception) {
- runOnUiThread {
- vNsdResult.text = "异常:${ex.message}"
- vNsdResult.setTextColor(resources.getColor(R.color.cl_red))
- }
- }
- })
- }
-
- private fun asyncGetConfigFromNsdServer(configName: String) {
- ThreadPool.getShortPool().execute(Runnable {
- try {
- val ret =
- NsdClientApi(nsdServiceIp!!, nsdServicePort).getEcardConfigParam(configName)
- NtpClient().startCalibrateTime(ret.systime)
- runOnUiThread {
- vNsdResult.text = ret.retmsg
- if (ret.retcode == PublicDef.SUCCESS) {
- vNsdResult.setTextColor(resources.getColor(R.color.light_blue2))
- if (ret.mode == 0) {
- vRadioPayMode.isChecked = true
- } else {
- vRadioDepositMode.isChecked = true
- }
- vDevphyid.setText(ret.devphyid)
- vServerIp.setText(ret.epayIP)
- vUri.setText(ret.epayUri)
- vPort.setText(ret.epayPort.toString())
- } else {
- vNsdResult.setTextColor(resources.getColor(R.color.cl_red))
- }
- }
- } catch (ex: Exception) {
- runOnUiThread {
- vNsdResult.text = "异常:${ex.message}"
- vNsdResult.setTextColor(resources.getColor(R.color.cl_red))
- }
- }
- })
- }
-
- override fun jumpToNextActivity() {
- jumpActivity(LoadActivity::class.java)
- }
-
- override fun getActivity(): Activity {
- return this
- }
-
- override fun showSWToastInfo(msg: String, showway: Int) {
- SWToast.show(applicationContext, msg, showway)
- }
+package com.supwisdom.activities.init
+
+import android.app.Activity
+import android.net.nsd.NsdServiceInfo
+import android.os.Bundle
+import android.support.v7.widget.LinearLayoutManager
+import android.support.v7.widget.RecyclerView
+import android.widget.Button
+import android.widget.EditText
+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.activities.auxscreen.AuxScreenController
+import com.supwisdom.activities.init.adapter.NsdServerConfigAdapter
+import com.supwisdom.activities.init.mode.NsdClient
+import com.supwisdom.activities.init.mode.NsdClientApi
+import com.supwisdom.activities.load.LoadActivity
+import com.supwisdom.entity.ConfigParaRecord
+import com.supwisdom.service.NtpClient
+import com.supwisdom.utils.CommonUtil
+import com.supwisdom.utils.DateUtil
+import com.supwisdom.utils.PublicDef
+import com.supwisdom.utils.ThreadPool
+import com.supwisdom.view.BigSwDialog
+import com.supwisdom.view.SWToast
+import java.util.*
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+@Suppress("DEPRECATION")
+class InitActivity : BaseActivity(), IInitView {
+ private lateinit var presenter: InitPresenter
+ private lateinit var vDevphyid: EditText
+ private lateinit var vTenantId: EditText
+ private lateinit var vServerIp: EditText
+ private lateinit var vUri: EditText
+ private lateinit var vPort: EditText
+ private lateinit var vNsdResult: TextView
+ private lateinit var vRadioPayMode: RadioButton
+ private lateinit var vRadioDepositMode: RadioButton
+ private lateinit var vRadioThirdPayMode: RadioButton
+ private lateinit var vRadioThirdLoginMode: RadioButton
+ private var nsdClient: NsdClient? = null
+ private var nsdServiceIp: String? = null
+ private var nsdServicePort: Int = 0
+ private var dialogNsdConfig: BigSwDialog? = null
+ private var nsdConfigAdapter: NsdServerConfigAdapter? = null
+ private val pos = SPApplication.getInstance().getPos()
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_init)
+ initView()
+ initData()
+ }
+
+ private fun initData() {
+ presenter = InitPresenter(this)
+ var record = pos.getConfigPara()
+ if (record == null) {
+ record = ConfigParaRecord()
+ record.mode = 0
+ record.tenantId = "schema"
+ record.devphyid = "12345678"
+ record.epayIP = "127.0.0.1"
+ record.epayPort = 8080
+ record.epayUri = "restaurant"
+ }
+ record.initOK = false
+ pos.replaceConfigPara(record)
+ val cfgRecord = pos.getConfigPara()
+ vTenantId.setText(cfgRecord!!.tenantId)
+ vDevphyid.setText(cfgRecord.devphyid)
+ vServerIp.setText(cfgRecord.epayIP)
+ vUri.setText(cfgRecord.epayUri)
+ vPort.setText(cfgRecord.epayPort.toString())
+
+ nsdClient = NsdClient(this, "epay-reg-server", object : NsdClient.IServerFound {
+ override fun onServerFound(serviceInfo: NsdServiceInfo) {
+ nsdServiceIp = serviceInfo.host?.hostAddress
+ nsdServicePort = serviceInfo.port
+ if (nsdServiceIp != null) {
+ asyncGetConfigName()
+ }
+ }
+
+ override fun onServerFail() {
+
+ }
+ })
+ }
+
+ private fun initView() {
+ this.findViewById<Button>(R.id.tv_settings).setOnClickListener {
+ CommonUtil.startNetSetting(this@InitActivity)
+ }
+ this.findViewById<TextView>(R.id.btn_save).setOnClickListener {
+ presenter.saveConfigParam(
+ 0,
+ CommonUtil.getEditView(vTenantId),
+ CommonUtil.getEditView(vDevphyid), CommonUtil.getEditView(vServerIp),
+ CommonUtil.getEditView(vUri), CommonUtil.getEditView(vPort)
+ )
+ }
+ this.findViewById<Button>(R.id.tv_nsd_query).setOnClickListener {
+ if (nsdServiceIp == null) {
+ showSWToastInfo("nsd未连接", PublicDef.TOAST_SHOW_DOUBT)
+ return@setOnClickListener
+ }
+ asyncGetConfigName()
+ }
+ vNsdResult = this.findViewById(R.id.tv_nsd_result) as TextView
+ vRadioPayMode = this.findViewById(R.id.rb_pay_mode) as RadioButton
+ vRadioDepositMode = this.findViewById(R.id.rb_deposit_mode) as RadioButton
+ vRadioThirdPayMode = this.findViewById(R.id.rb_third_pay_mode) as RadioButton
+ vRadioThirdLoginMode = this.findViewById(R.id.rb_third_login_mode) as RadioButton
+ vTenantId = this.findViewById(R.id.tv_tenantid) as EditText
+ vDevphyid = this.findViewById(R.id.tv_devphyid) as EditText
+ vServerIp = this.findViewById(R.id.tv_server_ip) as EditText
+ vUri = this.findViewById(R.id.tv_uri_root) as EditText
+ vPort = this.findViewById(R.id.tv_server_port) as EditText
+ }
+
+ override fun onResume() {
+ super.onResume()
+ nsdClient!!.start()
+ refresh()
+ }
+
+ override fun onStop() {
+ super.onStop()
+ nsdClient!!.stop()
+ }
+
+ private fun refresh() {
+ AuxScreenController.getInstance().refreshTitle("通讯参数设置")
+ AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime1())
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList("设备第一次使用", "请联系管理员", "在大屏配置参数"))
+ }
+
+ private fun asyncGetConfigName() {
+ ThreadPool.getShortPool().execute(Runnable {
+ try {
+ val ret = NsdClientApi(nsdServiceIp!!, nsdServicePort).getNsdServerConfigList()
+ runOnUiThread {
+ vNsdResult.text = ret.getErrorMsg()
+ if (ret.retcode == PublicDef.SUCCESS) {
+ if (ret.list!!.isEmpty()) {
+ vNsdResult.text = "未找到配置项"
+ return@runOnUiThread
+ } else if (ret.list!!.size == 1) {
+ asyncGetConfigFromNsdServer(ret.list!![0])
+ return@runOnUiThread
+ }
+ vNsdResult.setTextColor(resources.getColor(R.color.light_blue2))
+ if (dialogNsdConfig == null) {
+ dialogNsdConfig = BigSwDialog(this, PublicDef.DIALOG_TYPE_NSD_CONFIG)
+ val vConfigList =
+ dialogNsdConfig!!.findViewById(R.id.rv_config_list) as RecyclerView
+ vConfigList.layoutManager = LinearLayoutManager(this)
+ vConfigList.addItemDecoration(NsdServerConfigAdapter.ItemDecoration(10))
+ nsdConfigAdapter =
+ NsdServerConfigAdapter(
+ this,
+ object : NsdServerConfigAdapter.ConfigNameListener {
+ override fun callback(configName: String) {
+ asyncGetConfigFromNsdServer(configName)
+ dialogNsdConfig!!.dismiss()
+ }
+ })
+ vConfigList.adapter = nsdConfigAdapter
+ }
+ nsdConfigAdapter!!.setList(ret.list)
+ nsdConfigAdapter!!.notifyDataSetChanged()
+ dialogNsdConfig!!.show()
+ } else {
+ vNsdResult.setTextColor(resources.getColor(R.color.cl_red))
+ }
+ }
+ } catch (ex: Exception) {
+ runOnUiThread {
+ vNsdResult.text = "异常:${ex.message}"
+ vNsdResult.setTextColor(resources.getColor(R.color.cl_red))
+ }
+ }
+ })
+ }
+
+ private fun asyncGetConfigFromNsdServer(configName: String) {
+ ThreadPool.getShortPool().execute(Runnable {
+ try {
+ val ret =
+ NsdClientApi(nsdServiceIp!!, nsdServicePort).getEcardConfigParam(configName)
+ NtpClient().startCalibrateTime(ret.systime)
+ runOnUiThread {
+ vNsdResult.text = ret.getErrorMsg()
+ if (ret.retcode == PublicDef.SUCCESS) {
+ vNsdResult.setTextColor(resources.getColor(R.color.light_blue2))
+ if (ret.mode == 0) {
+ vRadioPayMode.isChecked = true
+ } else {
+ vRadioDepositMode.isChecked = true
+ }
+ vDevphyid.setText(ret.devphyid)
+ vServerIp.setText(ret.epayIP)
+ vUri.setText(ret.epayUri)
+ vPort.setText(ret.epayPort.toString())
+ } else {
+ vNsdResult.setTextColor(resources.getColor(R.color.cl_red))
+ }
+ }
+ } catch (ex: Exception) {
+ runOnUiThread {
+ vNsdResult.text = "异常:${ex.message}"
+ vNsdResult.setTextColor(resources.getColor(R.color.cl_red))
+ }
+ }
+ })
+ }
+
+ override fun jumpToNextActivity() {
+ jumpActivity(LoadActivity::class.java)
+ }
+
+ override fun getActivity(): Activity {
+ return this
+ }
+
+ override 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/load/LoadActivity.kt b/app/src/main/java/com/supwisdom/activities/load/LoadActivity.kt
index 1e71cf2..f3c6bb3 100644
--- a/app/src/main/java/com/supwisdom/activities/load/LoadActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/load/LoadActivity.kt
@@ -1,100 +1,100 @@
-package com.supwisdom.activities.load
-
-import android.app.Activity
-import android.content.Intent
-import android.os.Bundle
-import android.view.View
-import android.widget.TextView
-import android.widget.Toast
-import com.supwisdom.R
-import com.supwisdom.activities.BaseActivity
-import com.supwisdom.activities.consume.ConsumeActivity
-import com.supwisdom.activities.unregister.UnregisterActivity
-import com.supwisdom.auxscreen.AuxScreenController
-import com.supwisdom.utils.DateUtil
-import java.util.*
-
-/**
- ** create by zzq on 2019/7/24
- ** @desc
- **/
-class LoadActivity : BaseActivity(), ILoadView {
- private lateinit var presenter: LoadPresenter
- private lateinit var vLoadPro: TextView
- private val procontent = StringBuilder()
- private val auxList = ArrayList<String>()
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_load)
-
- initView()
- initData()
- }
-
- override fun onResume() {
- super.onResume()
- presenter.start()
- refresh()
- }
-
- private fun refresh() {
- procontent.setLength(0)
- auxList.clear()
- AuxScreenController.getInstance().refreshTitle("设备参数加载")
- AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
- AuxScreenController.getInstance().refreshContent(auxList)
- }
-
- private fun initData() {
- presenter = LoadPresenter(this)
- }
-
- private fun initView() {
- this.findViewById<View>(R.id.btn_back).setOnClickListener {
- if (presenter.isLoading()) {
- Toast.makeText(applicationContext, "正在加载信息", Toast.LENGTH_SHORT).show()
- } else {
- this@LoadActivity.finish()
- }
- }
- vLoadPro = findViewById<View>(R.id.tv_load_pro) as TextView
- }
-
- override fun getActivity(): Activity {
- return this
- }
-
- override fun showProgress(hint: String, clearlast: Boolean) {
- procontent.append("\n").append(hint)
- vLoadPro.text = procontent.toString()
- if (clearlast) {
- if (auxList.size > 0) {
- auxList.removeAt(auxList.size - 1)
- }
- }
- auxList.add(hint)
- AuxScreenController.getInstance().refreshContent(showFormatAux())
- }
-
- override fun showFinish() {
- jumpActivity(ConsumeActivity::class.java)
- }
-
- override fun jumpToUnregister(errmsg: String) {
- val intent = Intent()
- intent.putExtra("errmsg", errmsg)
- intent.setClass(this, UnregisterActivity::class.java)
- startActivity(intent)
- }
-
- private fun showFormatAux(): List<String> {
- val list = ArrayList<String>()
- val size = auxList.size
- list.addAll(auxList)
- for (i in size..4) {
- list.add(" ")
- }
- return list
- }
+package com.supwisdom.activities.load
+
+import android.app.Activity
+import android.content.Intent
+import android.os.Bundle
+import android.view.View
+import android.widget.TextView
+import android.widget.Toast
+import com.supwisdom.R
+import com.supwisdom.activities.BaseActivity
+import com.supwisdom.activities.auxscreen.AuxScreenController
+import com.supwisdom.activities.consume.ConsumeActivity
+import com.supwisdom.activities.unregister.UnregisterActivity
+import com.supwisdom.utils.DateUtil
+import java.util.*
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class LoadActivity : BaseActivity(), ILoadView {
+ private lateinit var presenter: LoadPresenter
+ private lateinit var vLoadPro: TextView
+ private val procontent = StringBuilder()
+ private val auxList = ArrayList<String>()
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_load)
+
+ initView()
+ initData()
+ }
+
+ override fun onResume() {
+ super.onResume()
+ presenter.start()
+ refresh()
+ }
+
+ private fun refresh() {
+ procontent.setLength(0)
+ auxList.clear()
+ AuxScreenController.getInstance().refreshTitle("设备参数加载")
+ AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime1())
+ AuxScreenController.getInstance().refreshContent(auxList)
+ }
+
+ private fun initData() {
+ presenter = LoadPresenter(this)
+ }
+
+ private fun initView() {
+ this.findViewById<View>(R.id.btn_back).setOnClickListener {
+ if (presenter.isLoading()) {
+ Toast.makeText(applicationContext, "正在加载信息", Toast.LENGTH_SHORT).show()
+ } else {
+ this@LoadActivity.finish()
+ }
+ }
+ vLoadPro = findViewById<View>(R.id.tv_load_pro) as TextView
+ }
+
+ override fun getActivity(): Activity {
+ return this
+ }
+
+ override fun showProgress(hint: String, clearlast: Boolean) {
+ procontent.append("\n").append(hint)
+ vLoadPro.text = procontent.toString()
+ if (clearlast) {
+ if (auxList.size > 0) {
+ auxList.removeAt(auxList.size - 1)
+ }
+ }
+ auxList.add(hint)
+ AuxScreenController.getInstance().refreshContent(showFormatAux())
+ }
+
+ override fun showFinish() {
+ jumpActivity(ConsumeActivity::class.java)
+ }
+
+ override fun jumpToUnregister(errmsg: String) {
+ val intent = Intent()
+ intent.putExtra("errmsg", errmsg)
+ intent.setClass(this, UnregisterActivity::class.java)
+ startActivity(intent)
+ }
+
+ private fun showFormatAux(): List<String> {
+ val list = ArrayList<String>()
+ val size = auxList.size
+ list.addAll(auxList)
+ for (i in size..4) {
+ list.add(" ")
+ }
+ return list
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt b/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt
index 823c8ca..1ce8330 100644
--- a/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt
@@ -1,138 +1,152 @@
-package com.supwisdom.activities.load
-
-import android.os.Handler
-import android.os.Looper
-import android.os.Message
-import com.supwisdom.activities.SPApplication
-import com.supwisdom.activities.YktSession
-import com.supwisdom.bean.AuthRetBean
-import com.supwisdom.exception.AuthEpayError
-import com.supwisdom.service.AuthEpay
-import com.supwisdom.service.EpayApiImpl
-import com.supwisdom.utils.CommonUtil
-import com.supwisdom.utils.PublicDef
-import com.supwisdom.utils.ThreadPool
-
-/**
- ** create by zzq on 2019/7/24
- ** @desc
- **/
-class LoadPresenter constructor(iLoadView: ILoadView) {
- private val iLoadView = iLoadView
- private val pos = SPApplication.getInstance().getPos()
- private lateinit var handler: Handler
-
- init {
- createHandler()
- }
-
- private val LOAD_SUCCESS = 1
- private val JUMP_TO_UNREGISTER = 2
- private val LOAD_PROGRESS = 3
- private val LOAD_DONE = 4
-
- private var hasInit: Boolean = false
- @Volatile
- private var loading: Boolean = false
-
- fun isLoading(): Boolean {
- return loading
- }
-
- fun start() {
- loading = true
- var cfgRecord = pos.getConfigPara()
- hasInit = cfgRecord?.initOK ?: false
-
- YktSession.getInstance().setWebAPISession(
- cfgRecord!!.epayIP!!,
- cfgRecord.epayPort,
- cfgRecord.epayUri!!,
- cfgRecord.tenantId!!,
- CommonUtil.getCommunicateTime()
- )
-
- ThreadPool.getShortPool().execute(Runnable {
- sendMessage(LOAD_PROGRESS, "正在系统签到...")
- val bean = try {
- AuthEpay().login()
- } catch (ex: AuthEpayError) {
- AuthRetBean(PublicDef.ERROR, ex.message ?: "null")
- }
- if (bean.retcode != PublicDef.SUCCESS) {
- sendMessage(LOAD_DONE, bean.retmsg!!)
- loading = false
- if (!hasInit) {
- sendMessage(JUMP_TO_UNREGISTER, "签到失败:${bean.retmsg}")
- return@Runnable
- }
- } else {
- val dyRecord = pos.getDynamicPara()
- dyRecord!!.deviceid = bean.deviceid
- dyRecord.merchaccno = bean.merchaccno
- dyRecord.shopname = bean.shopname
- dyRecord.onlineseqno = bean.onlineseqno
- dyRecord.offlineseqno = bean.offlineseqno
- dyRecord.paragroupid = bean.paragroupid
- pos.replaceDynamicPara(dyRecord)
-
- SPApplication.getInstance().setEpayLinking(true)
- sendMessage(LOAD_DONE, "系统签到成功")
- }
-
- // 设置通讯参数
- val apiInterface = EpayApiImpl()
- try {
- sendMessage(LOAD_PROGRESS, "加载系统参数...")
- apiInterface.downloadSyspara(bean.paragroupid, bean.paraverno)
- sendMessage(LOAD_DONE, "加载系统参数成功")
- } catch (ex: Exception) {
- sendMessage(LOAD_DONE, "加载系统参数失败:${ex.message}")
- if (!hasInit) {
- loading = false
- return@Runnable
- }
- }
-
- try {
- sendMessage(LOAD_PROGRESS, "加载白名单...")
- apiInterface.downloadWhitelist(bean.whitelistid, bean.cardverno!!)
- sendMessage(LOAD_DONE, "加载白名单成功")
- } catch (ex: Exception) {
- sendMessage(LOAD_DONE, "加载白名单失败:${ex.message}")
- if (!hasInit) {
- loading = false
- return@Runnable
- }
- }
-
- cfgRecord = pos.getConfigPara()
- cfgRecord!!.initOK = true
- pos.replaceConfigPara(cfgRecord!!)
- sendMessage(LOAD_SUCCESS, "加载成功")
- })
- }
-
- private fun createHandler() {
- handler = object : Handler(Looper.getMainLooper()) {
- override fun handleMessage(msg: Message) {
- when (msg.what) {
- LOAD_DONE -> iLoadView.showProgress(msg.obj as String, true)
- LOAD_PROGRESS -> iLoadView.showProgress(msg.obj as String, false)
- JUMP_TO_UNREGISTER -> iLoadView.jumpToUnregister(msg.obj as String)
- LOAD_SUCCESS -> {
- CommonUtil.doSleep(3000)
- iLoadView.showFinish()
- }
- }
- }
- }
- }
-
- private fun sendMessage(code: Int, info: String) {
- val msg = Message()
- msg.what = code
- msg.obj = info
- handler.sendMessage(msg)
- }
+package com.supwisdom.activities.load
+
+import android.os.Handler
+import android.os.Looper
+import android.os.Message
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.YktSession
+import com.supwisdom.bean.AuthRetBean
+import com.supwisdom.exception.AuthEpayError
+import com.supwisdom.service.AuthEpay
+import com.supwisdom.service.EpayApiImpl
+import com.supwisdom.service.SynoCodeService
+import com.supwisdom.utils.CommonUtil
+import com.supwisdom.utils.PublicDef
+import com.supwisdom.utils.ThreadPool
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class LoadPresenter constructor(iLoadView: ILoadView) {
+ private val iLoadView = iLoadView
+ private val pos = SPApplication.getInstance().getPos()
+ private lateinit var handler: Handler
+
+ init {
+ createHandler()
+ }
+
+ private val LOAD_SUCCESS = 1
+ private val JUMP_TO_UNREGISTER = 2
+ private val LOAD_PROGRESS = 3
+ private val LOAD_DONE = 4
+
+ private var hasInit: Boolean = false
+
+ @Volatile
+ private var loading: Boolean = false
+
+ fun isLoading(): Boolean {
+ return loading
+ }
+
+ fun start() {
+ loading = true
+ var cfgRecord = pos.getConfigPara()
+ hasInit = cfgRecord?.initOK ?: false
+
+ YktSession.getInstance().setWebAPISession(
+ cfgRecord!!.epayIP!!,
+ cfgRecord.epayPort,
+ cfgRecord.epayUri!!,
+ cfgRecord.tenantId!!,
+ CommonUtil.getCommunicateTime()
+ )
+
+ ThreadPool.getShortPool().execute(Runnable {
+ sendMessage(LOAD_PROGRESS, "正在系统签到...")
+ val bean = try {
+ AuthEpay().login()
+ } catch (ex: AuthEpayError) {
+ AuthRetBean(PublicDef.ERROR, ex.message ?: "null")
+ }
+ if (bean.retcode != PublicDef.SUCCESS) {
+ sendMessage(LOAD_DONE, bean.getErrorMsg())
+ loading = false
+ if (!hasInit) {
+ sendMessage(JUMP_TO_UNREGISTER, "签到失败:${bean.getErrorMsg()}")
+ return@Runnable
+ }
+ } else {
+ val dyRecord = pos.getDynamicPara()
+ dyRecord!!.deviceid = bean.deviceid
+ dyRecord.merchaccno = bean.merchaccno
+ dyRecord.shopname = bean.shopname
+ dyRecord.onlineseqno = bean.onlineseqno
+ dyRecord.offlineseqno = bean.offlineseqno
+ dyRecord.paragroupid = bean.paragroupid
+ pos.replaceDynamicPara(dyRecord)
+
+ SPApplication.getInstance().setEpayLinking(true)
+ sendMessage(LOAD_DONE, "系统签到成功")
+ }
+
+ // 设置通讯参数
+ val apiInterface = EpayApiImpl()
+ try {
+ sendMessage(LOAD_PROGRESS, "加载系统参数...")
+ apiInterface.downloadSyspara(bean.paragroupid, bean.paraverno)
+ sendMessage(LOAD_DONE, "加载系统参数成功")
+ } catch (ex: Exception) {
+ sendMessage(LOAD_DONE, "加载系统参数失败:${ex.message}")
+ if (!hasInit) {
+ loading = false
+ return@Runnable
+ }
+ }
+
+ try {
+ sendMessage(LOAD_PROGRESS, "加载白名单...")
+ apiInterface.downloadWhitelist(bean.whitelistid, bean.cardverno!!)
+ sendMessage(LOAD_DONE, "加载白名单成功")
+ } catch (ex: Exception) {
+ sendMessage(LOAD_DONE, "加载白名单失败:${ex.message}")
+ if (!hasInit) {
+ loading = false
+ return@Runnable
+ }
+ }
+ if (pos.getSysPara()!!.synoCode) {
+ sendMessage(LOAD_PROGRESS, "激活扫码算法...")
+ if (SynoCodeService().activeByLocalLicense(iLoadView.getActivity().applicationContext)) {
+ SPApplication.getInstance().setSynoCodeActive(true)
+ sendMessage(LOAD_DONE, "晟元算法激活成功")
+ } else {
+ sendMessage(LOAD_DONE, "晟元算法激活失败")
+ SPApplication.getInstance().setSynoCodeActive(false)
+ }
+ } else {
+ SPApplication.getInstance().setSynoCodeActive(false)
+ }
+
+ cfgRecord = pos.getConfigPara()
+ cfgRecord!!.initOK = true
+ pos.replaceConfigPara(cfgRecord!!)
+ sendMessage(LOAD_SUCCESS, "加载成功")
+ })
+ }
+
+ private fun createHandler() {
+ handler = object : Handler(Looper.getMainLooper()) {
+ override fun handleMessage(msg: Message) {
+ when (msg.what) {
+ LOAD_DONE -> iLoadView.showProgress(msg.obj as String, true)
+ LOAD_PROGRESS -> iLoadView.showProgress(msg.obj as String, false)
+ JUMP_TO_UNREGISTER -> iLoadView.jumpToUnregister(msg.obj as String)
+ LOAD_SUCCESS -> {
+ CommonUtil.doSleep(3000)
+ iLoadView.showFinish()
+ }
+ }
+ }
+ }
+ }
+
+ private fun sendMessage(code: Int, info: String) {
+ val msg = Message()
+ msg.what = code
+ msg.obj = info
+ handler.sendMessage(msg)
+ }
}
\ 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
index 27bb27f..08627b1 100644
--- a/app/src/main/java/com/supwisdom/activities/manage/IManageView.kt
+++ b/app/src/main/java/com/supwisdom/activities/manage/IManageView.kt
@@ -1,11 +1,15 @@
-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)
+package com.supwisdom.activities.manage
+
+import android.app.Activity
+
+/**
+ ** create by zzq on 2019/7/25
+ ** @desc
+ **/
+interface IManageView {
+ fun getActivity(): Activity
+
+ 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
index ec4b7be..d07836b 100644
--- a/app/src/main/java/com/supwisdom/activities/manage/ManageActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/manage/ManageActivity.kt
@@ -1,170 +1,182 @@
-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.activities.menu.MenuActivity
-import com.supwisdom.activities.upgrade.UpgradeActivity
-import com.supwisdom.auxscreen.AuxScreenController
-import com.supwisdom.utils.AppExitUtil
-import com.supwisdom.utils.CommonUtil
-import com.supwisdom.utils.DateUtil
-import java.util.*
-
-/**
- ** 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.getInstance().refreshContent(Arrays.asList<String>("流水查询:", "暂不支持"))
- }
- KeyEvent.KEYCODE_4 -> {
- flag = true
- isRunning = true
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList<String>("正在导出流水", "请稍等..."))
- presenter!!.outTransdtl()
- }
- KeyEvent.KEYCODE_5 -> jumpActivity(UpgradeActivity::class.java)
- KeyEvent.KEYCODE_6 -> {
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList<String>("应用程序已退出", "请到大屏操作"))
- AppExitUtil.exit()
- }
- KeyEvent.KEYCODE_7 -> {
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList<String>("应用程序已退出", "请到大屏操作"))
- CommonUtil.startNetSetting(this)
- }
- KeyEvent.KEYCODE_8 -> {
- flag = true
- isRunning = true
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList<String>("正在清空白名单", "请稍等..."))
- presenter!!.clearAndUpdateWhitelist()
- }
- 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<String>(hint, result))
- }
-
- override fun showOperResult(hint: String, result: String) {
- flag = true
- isRunning = false
- AuxScreenController.getInstance().refreshContent(Arrays.asList<String>(hint, result))
- }
-
- override fun onResume() {
- super.onResume()
- keyActive = true
- refresh()
- }
-
- private fun refresh() {
- flag = false
- isRunning = false
- AuxScreenController.getInstance().refreshTitle("设备管理界面")
- AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
- 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<String>("商户密码:", pos.getConfigPara()!!.shopPwd))
- }
-
- 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
- }
- }
+package com.supwisdom.activities.manage
+
+import android.app.Activity
+import android.os.Bundle
+import android.os.CountDownTimer
+import android.view.KeyEvent
+import android.view.View
+import android.widget.LinearLayout
+import android.widget.TextView
+import com.supwisdom.R
+import com.supwisdom.activities.BaseActivity
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.auxscreen.AuxScreenController
+import com.supwisdom.activities.communicate.CommunicateActivity
+import com.supwisdom.activities.control.ControlActivity
+import com.supwisdom.activities.menu.MenuActivity
+import com.supwisdom.activities.upgrade.UpgradeActivity
+import com.supwisdom.utils.AppExitUtil
+import com.supwisdom.utils.CommonUtil
+import com.supwisdom.utils.DateUtil
+import com.supwisdom.utils.PublicDef
+import java.util.*
+
+/**
+ ** create by zzq on 2019/7/25
+ ** @desc
+ **/
+class ManageActivity : BaseActivity(), IManageView {
+ private lateinit var presenter: ManagePresenter
+ private var flag: Boolean = false
+ private var isRunning: Boolean = false
+ private val pos = SPApplication.getInstance().getPos()
+ private lateinit var vOperateHint: TextView
+ private lateinit var vOperateResult: TextView
+ private lateinit var llOperate: LinearLayout
+ private lateinit var llMenu: LinearLayout
+ private var keyActive = true
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_manage)
+ initView()
+ initData()
+ }
+
+ private fun initView() {
+ llOperate = findViewById<View>(R.id.ll_operate) as LinearLayout
+ llMenu = findViewById<View>(R.id.ll_menu) as LinearLayout
+ vOperateHint = findViewById<View>(R.id.tv_operate_hint) as TextView
+ vOperateResult = findViewById<View>(R.id.tv_operate_result) as TextView
+ }
+
+ 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 -> {
+ showOperHint(
+ "商户密码:",
+ pos.getConfigPara()!!.shopPwd ?: PublicDef.PASSWD_SHOP_DEFAULT
+ )
+ }
+ KeyEvent.KEYCODE_2 -> jumpActivity(CommunicateActivity::class.java)
+ KeyEvent.KEYCODE_3 -> {
+ //查询流水
+ showOperHint("流水查询:", "暂不支持")
+ }
+ KeyEvent.KEYCODE_4 -> {
+ presenter.doSynoActive()
+ }
+ KeyEvent.KEYCODE_5 -> jumpActivity(UpgradeActivity::class.java)
+ KeyEvent.KEYCODE_6 -> {
+ showOperHint("应用程序已退出", "请到大屏操作")
+ AppExitUtil.exit()
+ }
+ KeyEvent.KEYCODE_7 -> {
+ showOperHint("应用程序已退出", "请到大屏操作")
+ CommonUtil.startNetSetting(this)
+ }
+ KeyEvent.KEYCODE_8 -> {
+ presenter.clearAndUpdateWhitelist()
+ }
+ 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) {
+ flag = true
+ isRunning = false
+ llOperate.visibility = View.VISIBLE
+ llMenu.visibility = View.GONE
+ vOperateHint.text = hint
+ vOperateResult.text = result
+ AuxScreenController.getInstance().refreshContent(Arrays.asList<String>(hint, result))
+ }
+
+ override fun showOperResult(hint: String, result: String) {
+ vOperateHint.text = hint
+ vOperateResult.text = result
+ AuxScreenController.getInstance().refreshContent(Arrays.asList<String>(hint, result))
+ }
+
+ override fun onResume() {
+ super.onResume()
+ keyActive = true
+ refresh()
+ }
+
+ private fun refresh() {
+ flag = false
+ isRunning = false
+ llMenu.visibility = View.VISIBLE
+ llOperate.visibility = View.GONE
+ AuxScreenController.getInstance().refreshTitle("设备管理界面")
+ AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime1())
+ 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_syno_active),
+ 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)
+ )
+ )
+ }
+
+ override fun getActivity(): Activity {
+ return this
+ }
+
+ 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/manage/ManagePresenter.kt b/app/src/main/java/com/supwisdom/activities/manage/ManagePresenter.kt
index 681d57d..9e3be40 100644
--- a/app/src/main/java/com/supwisdom/activities/manage/ManagePresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/manage/ManagePresenter.kt
@@ -1,102 +1,134 @@
-package com.supwisdom.activities.manage
-
-import android.os.AsyncTask
-import com.supwisdom.activities.SPApplication
-import com.supwisdom.bean.BaseResp
-import com.supwisdom.exception.WhiteListError
-import com.supwisdom.service.EpayApiImpl
-import com.supwisdom.utils.FileUtil
-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 {
- if (!pos.clearWhiteList()) {
- return BaseResp(PublicDef.ERROR, "清空白名单失败")
- }
- val dyRecord = pos.getDynamicPara()
- dyRecord!!.cardverno = "0"
- pos.replaceDynamicPara(dyRecord)
- return try {
- EpayApiImpl().downloadWhitelist(dyRecord.whitelistid, "0")
- BaseResp(PublicDef.SUCCESS, "更新成功")
- } 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
- pos.getTransdtlOnline().forEach {
- num++
- FileUtil.writeDtlFile(it.toString())
- }
- pos.getTransdtlOffline().forEach {
- num++
- FileUtil.writeDtlFile(it.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!!)
- }
- }
- }
+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.service.SynoCodeService
+import com.supwisdom.utils.FileUtil
+import com.supwisdom.utils.PublicDef
+
+/**
+ ** create by zzq on 2019/7/25
+ ** @desc
+ **/
+class ManagePresenter constructor(private val iManageView: IManageView) {
+ private val pos = SPApplication.getInstance().getPos()
+
+ fun doSynoActive() {
+ if (pos.getSysPara()!!.synoCode) {
+ //晟元激活
+ iManageView.showOperHint("晟元激活", "请连外网激活")
+ SynoActive().execute()
+ } else {
+ SPApplication.getInstance().setSynoCodeActive(false)
+ iManageView.showOperResult("晟元激活结果:", "前台未开启")
+ }
+ }
+
+ private inner class SynoActive : AsyncTask<Void, Int, BaseResp>() {
+ override fun onPostExecute(resp: BaseResp) {
+ if (resp.retcode == PublicDef.SUCCESS) {
+ iManageView.showOperResult("晟元激活结果", resp.getErrorMsg())
+ } else {
+ iManageView.showOperResult("晟元激活失败", resp.getErrorMsg())
+ }
+ }
+
+ override fun doInBackground(vararg params: Void): BaseResp {
+ val resp = SynoCodeService().synoCodeActive(iManageView.getActivity())
+ return if (resp.retcode == PublicDef.SUCCESS) {
+ SPApplication.getInstance().setSynoCodeActive(true)
+ SynoCodeService().uploadActiveLicense()
+ } else {
+ SPApplication.getInstance().setSynoCodeActive(false)
+ resp
+ }
+ }
+ }
+
+ fun clearAndUpdateWhitelist() {
+ if (!SPApplication.getInstance().isOnline()) {
+ iManageView.showOperHint("重置黑名单失败", "网络未联通")
+ return
+ }
+ iManageView.showOperHint("正在清空白名单", "请稍等...")
+ 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.getErrorMsg())
+ } else {
+ iManageView.showOperResult("补采流水失败", resp.getErrorMsg())
+ }
+ }
+
+ 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.getErrorMsg())
+ }
+ }
+
+ override fun doInBackground(vararg params: Void): BaseResp {
+ if (!pos.clearWhiteList()) {
+ return BaseResp(PublicDef.ERROR, "清空白名单失败")
+ }
+ val dyRecord = pos.getDynamicPara()
+ dyRecord!!.cardverno = "0"
+ pos.replaceDynamicPara(dyRecord)
+ return try {
+ EpayApiImpl().downloadWhitelist(dyRecord.whitelistid, "0")
+ BaseResp(PublicDef.SUCCESS, "更新成功")
+ } 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
+ pos.getTransdtlOnline().forEach {
+ num++
+ FileUtil.writeDtlFile(it.toString())
+ }
+ pos.getTransdtlOffline().forEach {
+ num++
+ FileUtil.writeDtlFile(it.toString())
+ }
+ return BaseResp(PublicDef.SUCCESS, "共导出" + num + "笔")
+ }
+
+ override fun onPostExecute(resp: BaseResp) {
+ if (resp.retcode == PublicDef.SUCCESS) {
+ iManageView.showOperResult("导出流水成功", resp.getErrorMsg())
+ } else {
+ iManageView.showOperResult("导出流水失败", resp.getErrorMsg())
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/menu/MenuActivity.kt b/app/src/main/java/com/supwisdom/activities/menu/MenuActivity.kt
index 4c92368..43f1bc9 100644
--- a/app/src/main/java/com/supwisdom/activities/menu/MenuActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/menu/MenuActivity.kt
@@ -1,172 +1,192 @@
-package com.supwisdom.activities.menu
-
-import android.app.Activity
-import android.content.Intent
-import android.os.Bundle
-import android.os.CountDownTimer
-import android.view.KeyEvent
-import android.view.View
-import android.widget.TextView
-import com.supwisdom.R
-import com.supwisdom.activities.BaseActivity
-import com.supwisdom.activities.SPApplication
-import com.supwisdom.activities.checkMngpwd.CheckMngpwdActivity
-import com.supwisdom.activities.consume.ConsumeActivity
-import com.supwisdom.activities.consumeMode.ConsumeModeActivity
-import com.supwisdom.activities.passwd.PasswdActivity
-import com.supwisdom.activities.revenue.RevenueActivity
-import com.supwisdom.activities.syspara.SysparaActivity
-import com.supwisdom.auxscreen.AuxScreenController
-import com.supwisdom.utils.DateUtil
-import java.util.*
-
-/**
- ** create by zzq on 2019/7/25
- ** @desc
- **/
-class MenuActivity : BaseActivity(), IMenuView {
- private lateinit var presenter: MenuPresenter
- private val pos = SPApplication.getInstance().getPos()
- private var isRunning: Boolean = false
- private var flag: Boolean = false
- private lateinit var vReverse: TextView
- private var keyActive = true
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- this.setContentView(R.layout.activity_menu)
- initView()
- initData()
- }
-
- private fun initData() {
- presenter = MenuPresenter(this)
- }
-
- private fun initView() {
- vReverse = this.findViewById<View>(R.id.tv_reverse) as TextView
- }
-
- override fun dispatchKeyEvent(event: KeyEvent): Boolean {
- if (event.action == KeyEvent.ACTION_DOWN) {
- if (isRunning || !keyActive) {
- return super.dispatchKeyEvent(event)
- }
- resetCounter(200)
-
- val keyCode = event.keyCode
- if (flag) {
- return if (KeyEvent.KEYCODE_DEL == keyCode) {
- refresh()
- true
- } else {
- false
- }
- }
- when (keyCode) {
- KeyEvent.KEYCODE_1 -> jumpActivity(RevenueActivity::class.java)
- KeyEvent.KEYCODE_2 -> {
- isRunning = true
- presenter.uploadTransdtl()
- }
- KeyEvent.KEYCODE_3 -> {
- isRunning = true
- presenter.linkCheck()
- }
- KeyEvent.KEYCODE_4 -> {
- isRunning = true
- presenter.manualAuth()
- }
- KeyEvent.KEYCODE_5 -> jumpActivity(SysparaActivity::class.java)
- KeyEvent.KEYCODE_6 -> {
- val intent = Intent()
- intent.putExtra("password", pos.getSysPara()!!.mngPasswd)
- intent.setClass(this, CheckMngpwdActivity::class.java)
- startActivity(intent)
- }
- KeyEvent.KEYCODE_7 -> jumpActivity(PasswdActivity::class.java)
- KeyEvent.KEYCODE_8 -> jumpActivity(ConsumeModeActivity::class.java)
- KeyEvent.KEYCODE_9 -> if (isSupportReverse()) {
- presenter.doReverse()
- }
- KeyEvent.KEYCODE_DEL -> {
- //cancel
- jumpActivity(ConsumeActivity::class.java)
- }
- KeyEvent.KEYCODE_ENTER -> jumpActivity(ConsumeActivity::class.java)
- }
- }
- return super.dispatchKeyEvent(event)
- }
-
- override fun onResume() {
- super.onResume()
- keyActive = true
- refresh()
- }
-
- override fun showOperHint(title: String, result: String) {
- AuxScreenController.getInstance().refreshContent(Arrays.asList<String>(title, result))
- }
-
- override fun showOperResult(title: String, result: String) {
- flag = true
- isRunning = false
- AuxScreenController.getInstance().refreshContent(Arrays.asList<String>(title, result))
- }
-
- override fun getActivity(): Activity {
- return this
- }
-
- private fun refresh() {
- isRunning = false
- flag = false
- val secList = ArrayList<String>()
- secList.add(getString(R.string.consume_menu_revenue))
- secList.add(getString(R.string.consume_menu_transdtl_upload))
- secList.add(getString(R.string.consume_menu_link_check))
- secList.add(getString(R.string.consume_menu_auth))
- secList.add(getString(R.string.consume_menu_syspara_query))
- secList.add(getString(R.string.consume_menu_manage))
- secList.add(getString(R.string.consume_menu_shop_password_set))
- secList.add(getString(R.string.consume_menu_consume_mode))
- if (isSupportReverse()) {
- vReverse.visibility = View.VISIBLE
- secList.add(getString(R.string.consume_menu_reverse))
- } else {
- vReverse.visibility = View.GONE
- }
- AuxScreenController.getInstance().refreshTitle("设备管理界面")
- AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
- AuxScreenController.getInstance().refreshContent(secList)
- }
-
- private fun isSupportReverse(): Boolean {
- val sysRecord = SPApplication.getInstance().getPos().getSysPara()
- return sysRecord != null && sysRecord.returnFlag and 0x1 == 1
- }
-
- private var counter: ContinuePressTimer? = null
-
- private fun resetCounter(timems: Long) {
- counter?.cancel()
- if (counter == null) {
- counter = ContinuePressTimer(timems, 100)
- }
- keyActive = false
- counter!!.start()
- }
-
- private inner class ContinuePressTimer internal constructor(millisInFuture: Long, countDownInterval: Long) :
- CountDownTimer(millisInFuture, countDownInterval) {
-
- override fun onTick(millisUntilFinished: Long) {
-
- }
-
- override fun onFinish() {
- keyActive = true
- }
- }
+package com.supwisdom.activities.menu
+
+import android.app.Activity
+import android.content.Intent
+import android.os.Bundle
+import android.os.CountDownTimer
+import android.view.KeyEvent
+import android.view.View
+import android.widget.LinearLayout
+import android.widget.TextView
+import com.supwisdom.R
+import com.supwisdom.activities.BaseActivity
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.auxscreen.AuxScreenController
+import com.supwisdom.activities.checkMngpwd.CheckMngpwdActivity
+import com.supwisdom.activities.consume.ConsumeActivity
+import com.supwisdom.activities.consumeMode.ConsumeModeActivity
+import com.supwisdom.activities.passwd.PasswdActivity
+import com.supwisdom.activities.revenue.RevenueActivity
+import com.supwisdom.activities.syspara.SysparaActivity
+import com.supwisdom.utils.DateUtil
+import java.util.*
+
+/**
+ ** create by zzq on 2019/7/25
+ ** @desc
+ **/
+class MenuActivity : BaseActivity(), IMenuView {
+ private lateinit var presenter: MenuPresenter
+ private val pos = SPApplication.getInstance().getPos()
+ private var isRunning: Boolean = false
+ private var flag: Boolean = false
+ private lateinit var vReverse: TextView
+ private lateinit var vOperateHint: TextView
+ private lateinit var vOperateResult: TextView
+ private lateinit var llOperate: LinearLayout
+ private lateinit var llMenu: LinearLayout
+ private var keyActive = true
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ this.setContentView(R.layout.activity_menu)
+ initView()
+ initData()
+ }
+
+ private fun initData() {
+ presenter = MenuPresenter(this)
+ }
+
+ private fun initView() {
+ llOperate = findViewById<View>(R.id.ll_operate) as LinearLayout
+ llMenu = findViewById<View>(R.id.ll_menu) as LinearLayout
+ vReverse = this.findViewById<View>(R.id.tv_reverse) as TextView
+ vOperateHint = findViewById<View>(R.id.tv_operate_hint) as TextView
+ vOperateResult = findViewById<View>(R.id.tv_operate_result) as TextView
+ }
+
+ override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+ if (event.action == KeyEvent.ACTION_DOWN) {
+ if (isRunning || !keyActive) {
+ return super.dispatchKeyEvent(event)
+ }
+ resetCounter(200)
+
+ val keyCode = event.keyCode
+ if (flag) {
+ return if (KeyEvent.KEYCODE_DEL == keyCode) {
+ refresh()
+ true
+ } else {
+ false
+ }
+ }
+ when (keyCode) {
+ KeyEvent.KEYCODE_1 -> jumpActivity(RevenueActivity::class.java)
+ KeyEvent.KEYCODE_2 -> {
+ isRunning = true
+ presenter.uploadTransdtl()
+ }
+ KeyEvent.KEYCODE_3 -> {
+ isRunning = true
+ presenter.linkCheck()
+ }
+ KeyEvent.KEYCODE_4 -> {
+ isRunning = true
+ presenter.manualAuth()
+ }
+ KeyEvent.KEYCODE_5 -> jumpActivity(SysparaActivity::class.java)
+ KeyEvent.KEYCODE_6 -> {
+ val intent = Intent()
+ intent.putExtra("password", pos.getSysPara()!!.mngPasswd)
+ intent.setClass(this, CheckMngpwdActivity::class.java)
+ startActivity(intent)
+ }
+ KeyEvent.KEYCODE_7 -> jumpActivity(PasswdActivity::class.java)
+ KeyEvent.KEYCODE_8 -> jumpActivity(ConsumeModeActivity::class.java)
+ KeyEvent.KEYCODE_9 -> if (isSupportReverse()) {
+ presenter.doReverse()
+ }
+ KeyEvent.KEYCODE_DEL -> {
+ //cancel
+ jumpActivity(ConsumeActivity::class.java)
+ }
+ KeyEvent.KEYCODE_ENTER -> jumpActivity(ConsumeActivity::class.java)
+ }
+ }
+ return super.dispatchKeyEvent(event)
+ }
+
+ override fun onResume() {
+ super.onResume()
+ keyActive = true
+ refresh()
+ }
+
+ override fun showOperHint(hint: String, result: String) {
+ flag = true
+ isRunning = false
+ llOperate.visibility = View.VISIBLE
+ llMenu.visibility = View.GONE
+ vOperateHint.text = hint
+ vOperateResult.text = result
+ AuxScreenController.getInstance().refreshContent(Arrays.asList<String>(hint, result))
+ }
+
+ override fun showOperResult(hint: String, result: String) {
+ vOperateHint.text = hint
+ vOperateResult.text = result
+ AuxScreenController.getInstance().refreshContent(Arrays.asList<String>(hint, result))
+ }
+
+ override fun getActivity(): Activity {
+ return this
+ }
+
+ private fun refresh() {
+ isRunning = false
+ flag = false
+ llMenu.visibility = View.VISIBLE
+ llOperate.visibility = View.GONE
+ val secList = ArrayList<String>()
+ secList.add(getString(R.string.consume_menu_revenue))
+ secList.add(getString(R.string.consume_menu_transdtl_upload))
+ secList.add(getString(R.string.consume_menu_link_check))
+ secList.add(getString(R.string.consume_menu_auth))
+ secList.add(getString(R.string.consume_menu_syspara_query))
+ secList.add(getString(R.string.consume_menu_manage))
+ secList.add(getString(R.string.consume_menu_shop_password_set))
+ secList.add(getString(R.string.consume_menu_consume_mode))
+ if (isSupportReverse()) {
+ vReverse.visibility = View.VISIBLE
+ secList.add(getString(R.string.consume_menu_reverse))
+ } else {
+ vReverse.visibility = View.GONE
+ }
+ AuxScreenController.getInstance().refreshTitle("设备管理界面")
+ AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime1())
+ AuxScreenController.getInstance().refreshContent(secList)
+ }
+
+ private fun isSupportReverse(): Boolean {
+ val sysRecord = SPApplication.getInstance().getPos().getSysPara()
+ return sysRecord != null && sysRecord.returnFlag and 0x1 == 1
+ }
+
+ private var counter: ContinuePressTimer? = null
+
+ private fun resetCounter(timems: Long) {
+ counter?.cancel()
+ if (counter == null) {
+ counter = ContinuePressTimer(timems, 100)
+ }
+ keyActive = false
+ counter!!.start()
+ }
+
+ private inner class ContinuePressTimer internal constructor(
+ millisInFuture: Long,
+ countDownInterval: Long
+ ) :
+ CountDownTimer(millisInFuture, countDownInterval) {
+
+ override fun onTick(millisUntilFinished: Long) {
+
+ }
+
+ override fun onFinish() {
+ keyActive = true
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/menu/MenuPresenter.kt b/app/src/main/java/com/supwisdom/activities/menu/MenuPresenter.kt
index 8f49136..0171852 100644
--- a/app/src/main/java/com/supwisdom/activities/menu/MenuPresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/menu/MenuPresenter.kt
@@ -1,151 +1,154 @@
-package com.supwisdom.activities.menu
-
-import android.content.Intent
-import android.os.AsyncTask
-import com.supwisdom.activities.SPApplication
-import com.supwisdom.activities.consume.ConsumeActivity
-import com.supwisdom.bean.AuthRetBean
-import com.supwisdom.bean.BaseResp
-import com.supwisdom.entity.PayStatus
-import com.supwisdom.entity.ReversalFlag
-import com.supwisdom.exception.AuthEpayError
-import com.supwisdom.exception.HeartBeatError
-import com.supwisdom.exception.TransdtlUploadError
-import com.supwisdom.service.AuthEpay
-import com.supwisdom.service.EpayApiImpl
-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 = try {
- AuthEpay().login()
- } catch (ex: AuthEpayError) {
- AuthRetBean(PublicDef.ERROR, ex.message ?: "null")
- }
- if (retBean.retcode == PublicDef.SUCCESS) {
- val record = pos.getDynamicPara()
- record!!.deviceid = retBean.deviceid
- record.merchaccno = retBean.merchaccno
- record.shopname = retBean.shopname
- record.paragroupid = retBean.paragroupid
- pos.replaceDynamicPara(record)
-
- SPApplication.getInstance().setEpayLinking(true)
- } else {
- SPApplication.getInstance().setEpayLinking(false)
- }
- return retBean
- }
-
- override fun onPostExecute(retBean: AuthRetBean?) {
- when {
- retBean == null -> iMenuView.showOperResult("签到失败", "请求超时")
- retBean.retcode != PublicDef.SUCCESS -> iMenuView.showOperResult("签到失败", retBean.retmsg ?: "null")
- else -> iMenuView.showOperResult("签到成功", " ")
- }
- }
- }
-
- private inner class AsyncLink : AsyncTask<Void, Void, BaseResp>() {
- override fun doInBackground(vararg voids: Void): BaseResp {
- return try {
- EpayApiImpl().linkCheck()
- BaseResp(PublicDef.SUCCESS, "连接成功")
- } catch (ex: HeartBeatError) {
- BaseResp(PublicDef.ERROR, ex.message)
- }
- }
-
- override fun onPostExecute(baseResp: BaseResp) {
- SPApplication.getInstance().setEpayLinking(baseResp.retcode == PublicDef.SUCCESS)
- iMenuView.showOperResult("检测结果", baseResp.retmsg!!)
- }
- }
-
- fun doReverse() {
- val list = pos.getTransdtlUnion(DateUtil.getNowDateNoFormat(), 0, 0, 1)
- if (list.isEmpty()) {
- iMenuView.showOperResult("冲正失败", "未找到消费记录")
- return
- }
- val record = list[0]
- if (record.reversalflag == ReversalFlag.AUTO ||
- record.reversalflag == ReversalFlag.MANUAL
- ) {
- iMenuView.showOperResult("冲正失败", "已冲正")
- return
- }
- if (record.status != PayStatus.SUC) {
- iMenuView.showOperResult("冲正失败", "消费失败不能冲正")
- return
- }
- val t1 = DateUtil.dateFormatConvertToLong(record.transdate + record.transtime)
- val t2 = System.currentTimeMillis()
- if (t2 - t1 > PublicDef.REVERSE_MS_GAP) {
- iMenuView.showOperResult("冲正失败", "消费已过期")
- return
- }
- val intent = Intent()
- intent.putExtra("datetime", DateUtil.getNowDateNoFormat())
- intent.putExtra("amount", record.payamt.toString())
- intent.putExtra("payway", record.payway)
- intent.putExtra("operation", "reverse")
- intent.setClass(iMenuView.getActivity(), ConsumeActivity::class.java)
- iMenuView.getActivity().startActivity(intent)
- }
-
- fun uploadTransdtl() {
- iMenuView.showOperHint("正在上传流水", "请稍等...")
- UploadTransdtl().execute()
- }
-
- private inner class UploadTransdtl : AsyncTask<Void, Void, BaseResp>() {
- override fun doInBackground(vararg voids: Void): BaseResp {
- val apiInterface = EpayApiImpl()
- var num = 0
- try {
- pos.getTransdtlOfflineUnconfirm().forEach {
- apiInterface.uploadTransdtl(it)
- it.upflag = 1
- pos.updateTransdtlOffline(it)
- num += 1
- }
- pos.getTransdtlOnlineUnconfirm().forEach {
- apiInterface.uploadTransdtl(it)
- it.upflag = 1
- pos.updateTransdtlOnline(it)
- num += 1
- }
- return BaseResp(PublicDef.SUCCESS, "上传共" + num + "条")
- } catch (ex: TransdtlUploadError) {
- return BaseResp(PublicDef.ERROR, ex.message)
- }
- }
-
- override fun onPostExecute(resp: BaseResp) {
- if (resp.retcode == PublicDef.SUCCESS) {
- iMenuView.showOperResult("上传流水成功", resp.retmsg!!)
- } else {
- iMenuView.showOperResult("上传流水失败", resp.retmsg!!)
- }
- }
- }
+package com.supwisdom.activities.menu
+
+import android.content.Intent
+import android.os.AsyncTask
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.consume.ConsumeActivity
+import com.supwisdom.bean.AuthRetBean
+import com.supwisdom.bean.BaseResp
+import com.supwisdom.entity.PayStatus
+import com.supwisdom.entity.ReversalFlag
+import com.supwisdom.exception.AuthEpayError
+import com.supwisdom.exception.HeartBeatError
+import com.supwisdom.exception.TransdtlUploadError
+import com.supwisdom.service.AuthEpay
+import com.supwisdom.service.EpayApiImpl
+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 = try {
+ AuthEpay().login()
+ } catch (ex: AuthEpayError) {
+ AuthRetBean(PublicDef.ERROR, ex.message ?: "null")
+ }
+ if (retBean.retcode == PublicDef.SUCCESS) {
+ val record = pos.getDynamicPara()
+ record!!.deviceid = retBean.deviceid
+ record.merchaccno = retBean.merchaccno
+ record.shopname = retBean.shopname
+ record.paragroupid = retBean.paragroupid
+ pos.replaceDynamicPara(record)
+
+ SPApplication.getInstance().setEpayLinking(true)
+ } else {
+ SPApplication.getInstance().setEpayLinking(false)
+ }
+ return retBean
+ }
+
+ override fun onPostExecute(retBean: AuthRetBean?) {
+ when {
+ retBean == null -> iMenuView.showOperResult("签到失败", "请求超时")
+ retBean.retcode != PublicDef.SUCCESS -> iMenuView.showOperResult(
+ "签到失败",
+ retBean.getErrorMsg()
+ )
+ else -> iMenuView.showOperResult("签到成功", " ")
+ }
+ }
+ }
+
+ private inner class AsyncLink : AsyncTask<Void, Void, BaseResp>() {
+ override fun doInBackground(vararg voids: Void): BaseResp {
+ return try {
+ EpayApiImpl().linkCheck()
+ BaseResp(PublicDef.SUCCESS, "连接成功")
+ } catch (ex: HeartBeatError) {
+ BaseResp(PublicDef.ERROR, ex.message)
+ }
+ }
+
+ override fun onPostExecute(baseResp: BaseResp) {
+ SPApplication.getInstance().setEpayLinking(baseResp.retcode == PublicDef.SUCCESS)
+ iMenuView.showOperResult("检测结果", baseResp.getErrorMsg())
+ }
+ }
+
+ fun doReverse() {
+ val list = pos.getTransdtlUnion(DateUtil.getNowDateNoFormat(), 0, 0, 1)
+ if (list.isEmpty()) {
+ iMenuView.showOperResult("冲正失败", "未找到消费记录")
+ return
+ }
+ val record = list[0]
+ if (record.reversalflag == ReversalFlag.AUTO ||
+ record.reversalflag == ReversalFlag.MANUAL
+ ) {
+ iMenuView.showOperResult("冲正失败", "已冲正")
+ return
+ }
+ if (record.status != PayStatus.SUC) {
+ iMenuView.showOperResult("冲正失败", "消费失败不能冲正")
+ return
+ }
+ val t1 = DateUtil.dateFormatConvertToLong(record.transdate + record.transtime)
+ val t2 = System.currentTimeMillis()
+ if (t2 - t1 > PublicDef.REVERSE_MS_GAP) {
+ iMenuView.showOperResult("冲正失败", "消费已过期")
+ return
+ }
+ val intent = Intent()
+ intent.putExtra("datetime", DateUtil.getNowDateNoFormat())
+ intent.putExtra("amount", record.payamt.toString())
+ intent.putExtra("payway", record.payway)
+ intent.putExtra("operation", "reverse")
+ intent.setClass(iMenuView.getActivity(), ConsumeActivity::class.java)
+ iMenuView.getActivity().startActivity(intent)
+ }
+
+ fun uploadTransdtl() {
+ iMenuView.showOperHint("正在上传流水", "请稍等...")
+ UploadTransdtl().execute()
+ }
+
+ private inner class UploadTransdtl : AsyncTask<Void, Void, BaseResp>() {
+ override fun doInBackground(vararg voids: Void): BaseResp {
+ val apiInterface = EpayApiImpl()
+ var num = 0
+ try {
+ pos.getTransdtlOfflineUnconfirm().forEach {
+ apiInterface.uploadTransdtl(it)
+ it.upflag = 1
+ pos.updateTransdtlOffline(it)
+ num += 1
+ }
+ pos.getTransdtlOnlineUnconfirm().forEach {
+ apiInterface.uploadTransdtl(it)
+ it.upflag = 1
+ pos.updateTransdtlOnline(it)
+ num += 1
+ }
+ return BaseResp(PublicDef.SUCCESS, "上传共" + num + "条")
+ } catch (ex: TransdtlUploadError) {
+ return BaseResp(PublicDef.ERROR, ex.message)
+ }
+ }
+
+ override fun onPostExecute(resp: BaseResp) {
+ if (resp.retcode == PublicDef.SUCCESS) {
+ iMenuView.showOperResult("上传流水成功", resp.getErrorMsg())
+ } else {
+ iMenuView.showOperResult("上传流水失败", resp.getErrorMsg())
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/passwd/PasswdActivity.kt b/app/src/main/java/com/supwisdom/activities/passwd/PasswdActivity.kt
index a288b3f..4fd3122 100644
--- a/app/src/main/java/com/supwisdom/activities/passwd/PasswdActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/passwd/PasswdActivity.kt
@@ -1,189 +1,212 @@
-package com.supwisdom.activities.passwd
-
-import android.os.Bundle
-import android.os.CountDownTimer
-import android.view.KeyEvent
-import com.supwisdom.R
-import com.supwisdom.activities.BaseActivity
-import com.supwisdom.activities.SPApplication
-import com.supwisdom.auxscreen.AuxScreenController
-import com.supwisdom.utils.CommonUtil
-import com.supwisdom.utils.DateUtil
-import java.util.*
-
-/**
- ** create by zzq on 2019/7/26
- ** @desc 商户密码修改
- **/
-class PasswdActivity : BaseActivity() {
- private lateinit var oldPwd: String
- private lateinit var newPwd: String
- private lateinit var newPwd1: String
- private lateinit var tmpPwd: String
- private lateinit var passwdHint: String
- private val pos = SPApplication.getInstance().getPos()
- private var step = 0
- private var keyActive = true
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- this.setContentView(R.layout.activity_password)
- }
-
- override fun dispatchKeyEvent(event: KeyEvent): Boolean {
- if (event.action == KeyEvent.ACTION_DOWN) {
- if (!keyActive) {
- return super.dispatchKeyEvent(event)
- }
- resetCounter(200)
-
- if (step == 3) {
- refresh()
- }
- val keyCode = event.keyCode
- when (keyCode) {
- KeyEvent.KEYCODE_0,
- KeyEvent.KEYCODE_1,
- KeyEvent.KEYCODE_2,
- KeyEvent.KEYCODE_3,
- KeyEvent.KEYCODE_4,
- KeyEvent.KEYCODE_5,
- KeyEvent.KEYCODE_6,
- KeyEvent.KEYCODE_7,
- KeyEvent.KEYCODE_8,
- KeyEvent.KEYCODE_9 -> {
- if (step == 4) {
- step = 0
- passwdHint = "输入原密码:"
- }
- tmpPwd += keyCode - KeyEvent.KEYCODE_0
- if (tmpPwd.length == 6) {
- when (step) {
- 0 -> {
- oldPwd = tmpPwd
- tmpPwd = ""
- if (checkOldPasswd()) {
- step = 1
- passwdHint = "输入新密码:"
- AuxScreenController.getInstance().refreshContent(Arrays.asList<String>(passwdHint, " "))
- return true
- } else {
- step = 4
- }
- return true
- }
- 1 -> {
- newPwd = tmpPwd
- tmpPwd = ""
- step = 2
- passwdHint = "确认新密码:"
- AuxScreenController.getInstance().refreshContent(Arrays.asList<String>(passwdHint, " "))
- return true
- }
- 2 -> {
- newPwd1 = tmpPwd
- step = 3
- tmpPwd = ""
- if (checkAndUpdate()) {
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList<String>("密码修改成功", " "))
- step = 3
- return true
- }
- step = 4
- return true
- }
- else -> tmpPwd = ""
- }
- }
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList(passwdHint, CommonUtil.getPasswordStar(tmpPwd.length)))
- return true
- }
- KeyEvent.KEYCODE_ENTER -> {
- }
- KeyEvent.KEYCODE_DEL -> {
- val len = tmpPwd.length
- when {
- len == 1 -> {
- tmpPwd = ""
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList(passwdHint, CommonUtil.getPasswordStar(tmpPwd.length)))
- }
- len > 1 -> {
- tmpPwd = tmpPwd.substring(0, len - 1)
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList(passwdHint, CommonUtil.getPasswordStar(tmpPwd.length)))
- }
- else -> finish()
- }
- return true
- }
- }
- }
- return super.dispatchKeyEvent(event)
- }
-
- override fun onResume() {
- super.onResume()
- keyActive = true
- refresh()
- }
-
- private fun refresh() {
- step = 0
- oldPwd = ""
- newPwd = ""
- newPwd1 = ""
- tmpPwd = ""
- passwdHint = "输入原密码"
- AuxScreenController.getInstance().refreshTitle("商户密码修改")
- AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
- AuxScreenController.getInstance().refreshContent(Arrays.asList<String>(passwdHint, " "))
- }
-
- private fun checkOldPasswd(): Boolean {
- if (oldPwd != pos.getConfigPara()!!.shopPwd) {
- AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("修改密码错误", "原密码错误"))
- return false
- }
- return true
- }
-
- private fun checkAndUpdate(): Boolean {
- if (newPwd != newPwd1) {
- AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("修改密码错误", "新密码不一致"))
- return false
- }
- val record = pos.getConfigPara()
- record!!.shopPwd = newPwd
- if (!pos.replaceConfigPara(record)) {
- AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("修改密码错误", "密码保存失败"))
- return false
- }
- return true
- }
-
- private var counter: ContinuePressTimer? = null
-
- private fun resetCounter(timems: Long) {
- if (counter == null) {
- counter = ContinuePressTimer(timems, 100)
- }
- counter!!.cancel()
- keyActive = false
- counter!!.start()
- }
-
- private inner class ContinuePressTimer internal constructor(millisInFuture: Long, countDownInterval: Long) :
- CountDownTimer(millisInFuture, countDownInterval) {
-
- override fun onTick(millisUntilFinished: Long) {
-
- }
-
- override fun onFinish() {
- keyActive = true
- }
- }
+package com.supwisdom.activities.passwd
+
+import android.os.Bundle
+import android.os.CountDownTimer
+import android.view.KeyEvent
+import com.supwisdom.R
+import com.supwisdom.activities.BaseActivity
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.auxscreen.AuxScreenController
+import com.supwisdom.utils.CommonUtil
+import com.supwisdom.utils.DateUtil
+import java.util.*
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc 商户密码修改
+ **/
+class PasswdActivity : BaseActivity() {
+ private lateinit var oldPwd: String
+ private lateinit var newPwd: String
+ private lateinit var newPwd1: String
+ private lateinit var tmpPwd: String
+ private lateinit var passwdHint: String
+ private val pos = SPApplication.getInstance().getPos()
+ private var step = 0
+ private var keyActive = true
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ this.setContentView(R.layout.activity_password)
+ }
+
+ override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+ if (event.action == KeyEvent.ACTION_DOWN) {
+ if (!keyActive) {
+ return super.dispatchKeyEvent(event)
+ }
+ resetCounter(200)
+
+ if (step == 3) {
+ refresh()
+ }
+ val keyCode = event.keyCode
+ when (keyCode) {
+ KeyEvent.KEYCODE_0,
+ KeyEvent.KEYCODE_1,
+ KeyEvent.KEYCODE_2,
+ KeyEvent.KEYCODE_3,
+ KeyEvent.KEYCODE_4,
+ KeyEvent.KEYCODE_5,
+ KeyEvent.KEYCODE_6,
+ KeyEvent.KEYCODE_7,
+ KeyEvent.KEYCODE_8,
+ KeyEvent.KEYCODE_9 -> {
+ if (step == 4) {
+ step = 0
+ passwdHint = "输入原密码:"
+ }
+ tmpPwd += keyCode - KeyEvent.KEYCODE_0
+ if (tmpPwd.length == 6) {
+ when (step) {
+ 0 -> {
+ oldPwd = tmpPwd
+ tmpPwd = ""
+ if (checkOldPasswd()) {
+ step = 1
+ passwdHint = "输入新密码:"
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList<String>(passwdHint, " "))
+ return true
+ } else {
+ step = 4
+ }
+ return true
+ }
+ 1 -> {
+ newPwd = tmpPwd
+ tmpPwd = ""
+ step = 2
+ passwdHint = "确认新密码:"
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList<String>(passwdHint, " "))
+ return true
+ }
+ 2 -> {
+ newPwd1 = tmpPwd
+ step = 3
+ tmpPwd = ""
+ if (checkAndUpdate()) {
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList<String>("密码修改成功", " "))
+ step = 3
+ return true
+ }
+ step = 4
+ return true
+ }
+ else -> tmpPwd = ""
+ }
+ }
+ AuxScreenController.getInstance()
+ .refreshContent(
+ Arrays.asList(
+ passwdHint,
+ CommonUtil.getPasswordStar(tmpPwd.length)
+ )
+ )
+ return true
+ }
+ KeyEvent.KEYCODE_ENTER -> {
+ }
+ KeyEvent.KEYCODE_DEL -> {
+ val len = tmpPwd.length
+ when {
+ len == 1 -> {
+ tmpPwd = ""
+ AuxScreenController.getInstance()
+ .refreshContent(
+ Arrays.asList(
+ passwdHint,
+ CommonUtil.getPasswordStar(tmpPwd.length)
+ )
+ )
+ }
+ len > 1 -> {
+ tmpPwd = tmpPwd.substring(0, len - 1)
+ AuxScreenController.getInstance()
+ .refreshContent(
+ Arrays.asList(
+ passwdHint,
+ CommonUtil.getPasswordStar(tmpPwd.length)
+ )
+ )
+ }
+ else -> finish()
+ }
+ return true
+ }
+ }
+ }
+ return super.dispatchKeyEvent(event)
+ }
+
+ override fun onResume() {
+ super.onResume()
+ keyActive = true
+ refresh()
+ }
+
+ private fun refresh() {
+ step = 0
+ oldPwd = ""
+ newPwd = ""
+ newPwd1 = ""
+ tmpPwd = ""
+ passwdHint = "输入原密码"
+ AuxScreenController.getInstance().refreshTitle("商户密码修改")
+ AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime1())
+ AuxScreenController.getInstance().refreshContent(Arrays.asList<String>(passwdHint, " "))
+ }
+
+ private fun checkOldPasswd(): Boolean {
+ if (oldPwd != pos.getConfigPara()!!.shopPwd) {
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList<String>("修改密码错误", "原密码错误"))
+ return false
+ }
+ return true
+ }
+
+ private fun checkAndUpdate(): Boolean {
+ if (newPwd != newPwd1) {
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList<String>("修改密码错误", "新密码不一致"))
+ return false
+ }
+ val record = pos.getConfigPara()
+ record!!.shopPwd = newPwd
+ if (!pos.replaceConfigPara(record)) {
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList<String>("修改密码错误", "密码保存失败"))
+ return false
+ }
+ return true
+ }
+
+ private var counter: ContinuePressTimer? = null
+
+ private fun resetCounter(timems: Long) {
+ if (counter == null) {
+ counter = ContinuePressTimer(timems, 100)
+ }
+ counter!!.cancel()
+ keyActive = false
+ counter!!.start()
+ }
+
+ private inner class ContinuePressTimer internal constructor(
+ millisInFuture: Long,
+ countDownInterval: Long
+ ) :
+ CountDownTimer(millisInFuture, countDownInterval) {
+
+ override fun onTick(millisUntilFinished: Long) {
+
+ }
+
+ override fun onFinish() {
+ keyActive = true
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/revenue/RevenueActivity.kt b/app/src/main/java/com/supwisdom/activities/revenue/RevenueActivity.kt
index 895d5b4..34516e4 100644
--- a/app/src/main/java/com/supwisdom/activities/revenue/RevenueActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/revenue/RevenueActivity.kt
@@ -1,148 +1,169 @@
-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(), 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()
- }
+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.auxscreen.AuxScreenController
+import com.supwisdom.activities.menu.MenuActivity
+import com.supwisdom.activities.revenue.bean.RevenueAmtRetBean
+import com.supwisdom.utils.DateUtil
+import java.util.*
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+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/splash/SplashActivity.kt b/app/src/main/java/com/supwisdom/activities/splash/SplashActivity.kt
index fd80a3a..1446525 100644
--- a/app/src/main/java/com/supwisdom/activities/splash/SplashActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/splash/SplashActivity.kt
@@ -1,84 +1,89 @@
-package com.supwisdom.activities.splash
-
-import android.Manifest
-import android.content.pm.PackageManager
-import android.os.Build
-import android.os.Bundle
-import android.view.View
-import android.widget.TextView
-import com.supwisdom.R
-import com.supwisdom.activities.BaseActivity
-import com.supwisdom.activities.cardlib.CardlibActivity
-import com.supwisdom.auxscreen.AuxScreenController
-import com.supwisdom.utils.CommonUtil
-import com.supwisdom.utils.DateUtil
-
-/**
- ** create by zzq on 2019/7/25
- ** @desc
- **/
-class SplashActivity : BaseActivity() {
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_splash)
- initView()
- }
-
- override fun onResume() {
- super.onResume()
- refresh()
- if (hasSdcardPermession()) {
- processStart()
- }
- }
-
- private fun processStart() {
- CommonUtil.writeLinnuuxParams()
- jumpActivity(CardlibActivity::class.java)
- }
-
- private fun refresh() {
- AuxScreenController.getInstance().refreshTitle("新开普智能设备")
- AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
- AuxScreenController.getInstance().refreshContent(listOf<String>("欢迎使用智能设备"))
- }
-
- private fun initView() {
- val tv = findViewById<View>(R.id.versionNumber) as TextView
- tv.text = CommonUtil.getVersionName(applicationContext)
- AuxScreenController.getInstance().open()
- }
-
- private val REQUEST_RETCODE = 99
-
- private fun hasSdcardPermession(): Boolean {
- /**
- * 动态获取权限,Android 6.0 新特性,一些保护权限,除了要在AndroidManifest中声明权限,还要使用如下代码动态获取
- */
- if (Build.VERSION.SDK_INT >= 23) {
- val permissions = arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA)
- //验证是否许可权限
- for (str in permissions) {
- if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {
- //申请权限
- this.requestPermissions(permissions, REQUEST_RETCODE)
- return false
- }
- }
- }
- return true
- }
-
- override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<String>, grantResults: IntArray) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults)
- if (requestCode == REQUEST_RETCODE) {
- for (i in grantResults.indices) {
- if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
- return
- }
- }
- // 请求权限的结果 true代表用户同意了
- processStart()
- }
- }
+package com.supwisdom.activities.splash
+
+import android.Manifest
+import android.content.pm.PackageManager
+import android.os.Build
+import android.os.Bundle
+import android.view.View
+import android.widget.TextView
+import com.supwisdom.R
+import com.supwisdom.activities.BaseActivity
+import com.supwisdom.activities.auxscreen.AuxScreenController
+import com.supwisdom.activities.cardlib.CardlibActivity
+import com.supwisdom.utils.CommonUtil
+import com.supwisdom.utils.DateUtil
+
+/**
+ ** create by zzq on 2019/7/25
+ ** @desc
+ **/
+class SplashActivity : BaseActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_splash)
+ initView()
+ }
+
+ override fun onResume() {
+ super.onResume()
+ refresh()
+ if (hasSdcardPermession()) {
+ processStart()
+ }
+ }
+
+ private fun processStart() {
+ CommonUtil.writeLinnuuxParams()
+ jumpActivity(CardlibActivity::class.java)
+ }
+
+ private fun refresh() {
+ AuxScreenController.getInstance().refreshTitle("新开普智能设备")
+ AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime1())
+ AuxScreenController.getInstance().refreshContent(listOf<String>("欢迎使用智能设备"))
+ }
+
+ private fun initView() {
+ val tv = findViewById<View>(R.id.versionNumber) as TextView
+ tv.text = CommonUtil.getVersionName(applicationContext)
+ AuxScreenController.getInstance().open()
+ }
+
+ private val REQUEST_RETCODE = 99
+
+ private fun hasSdcardPermession(): Boolean {
+ /**
+ * 动态获取权限,Android 6.0 新特性,一些保护权限,除了要在AndroidManifest中声明权限,还要使用如下代码动态获取
+ */
+ if (Build.VERSION.SDK_INT >= 23) {
+ val permissions =
+ arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA)
+ //验证是否许可权限
+ for (str in permissions) {
+ if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {
+ //申请权限
+ this.requestPermissions(permissions, REQUEST_RETCODE)
+ return false
+ }
+ }
+ }
+ return true
+ }
+
+ override fun onRequestPermissionsResult(
+ requestCode: Int,
+ permissions: Array<String>,
+ grantResults: IntArray
+ ) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+ if (requestCode == REQUEST_RETCODE) {
+ for (i in grantResults.indices) {
+ if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
+ return
+ }
+ }
+ // 请求权限的结果 true代表用户同意了
+ processStart()
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt b/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
index 82d0bf8..c3a16c7 100644
--- a/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/syspara/SysparaActivity.kt
@@ -1,175 +1,192 @@
-package com.supwisdom.activities.syspara
-
-import android.os.Bundle
-import android.os.CountDownTimer
-import android.view.KeyEvent
-import android.widget.ListView
-import com.supwisdom.R
-import com.supwisdom.activities.BaseActivity
-import com.supwisdom.activities.SPApplication
-import com.supwisdom.activities.menu.MenuActivity
-import com.supwisdom.activities.syspara.adapter.SysparaAdapter
-import com.supwisdom.auxscreen.AuxScreenController
-import com.supwisdom.entity.ControlParaRecord
-import com.supwisdom.utils.CommonUtil
-import java.util.*
-
-/**
- ** create by zzq on 2019/7/26
- ** @desc
- **/
-class SysparaActivity : BaseActivity() {
- private var pageno: Int = 0
- private val PAGENUM = 3
- private val kvMap = hashMapOf<Int, ControlParaRecord>()
- private var index: Int = 0
- private val pos = SPApplication.getInstance().getPos()
- private var keyActive = true
- private var adapter: SysparaAdapter? = null
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_syspara)
- initView()
- initData()
- }
-
- private fun initData() {
- index = 0
- kvMap[index++] = ControlParaRecord("软件版本>>", CommonUtil.getVersionName(applicationContext))
- val cfgRecord = pos.getConfigPara()
- val sysRecord = pos.getSysPara()
- val dyRecord = pos.getDynamicPara()
- kvMap[index++] = ControlParaRecord("租户名>>", cfgRecord!!.tenantId!!)
- kvMap[index++] = ControlParaRecord("物理编号>>", cfgRecord.devphyid!!)
- kvMap[index++] = ControlParaRecord("服务器地址>>", cfgRecord.epayIP!!)
- kvMap[index++] = ControlParaRecord("服务器标识>>", cfgRecord.epayUri!!)
- kvMap[index++] = ControlParaRecord("服务器端口>>", "" + cfgRecord.epayPort)
- kvMap[index++] =
- ControlParaRecord("参数版本号>>", "no:${dyRecord!!.paraverno},id:${dyRecord.paragroupid}")
- kvMap[index++] = ControlParaRecord("白名单版本>>", dyRecord.cardverno ?: "null")
- kvMap[index++] = ControlParaRecord("通讯超时>>", "${CommonUtil.getCommunicateTime()}s")
- if (sysRecord!!.returnFlag and 0x1 == 1) {
- kvMap[index++] = ControlParaRecord("冲正使能>>", "启用")
- } else {
- kvMap[index++] = ControlParaRecord("冲正使能>>", "禁止")
- }
-// if (sysRecord.getSocketSwitch() === 0) {
-// kvMap[index++] = ControlParaRecord("长连接使能>>", "禁止")
-// } else {
-// kvMap[index++] = ControlParaRecord("长连接使能>>", "启用")
-// }
-// if (SPApplication.getInstance().isOnline()) {
-// kvMap[index++] = ControlParaRecord("网络状态>>", "联机")
-// } else {
-// kvMap[index++] = ControlParaRecord("网络状态>>", "脱机")
-// }
- kvMap[index++] = ControlParaRecord("成功显时间>>", "${sysRecord.sucShowtime}s")
- kvMap[index++] = ControlParaRecord("失败显时间>>", "${sysRecord.failShowtime}s")
- kvMap[index++] = ControlParaRecord("联机流水号>>", pos.getTransdtlOnlineMaxSeqno().toString())
- kvMap[index++] = ControlParaRecord("离线流水号>>", pos.getTransdtlOfflineMaxSeqno().toString())
- kvMap[index++] = ControlParaRecord("未上传流水>>", pos.getTransdtlUnconfirmNum().toString())
- kvMap[index++] = ControlParaRecord("最大脱机天数>>", String.format("%d天", sysRecord.maxOfflineDays))
- kvMap[index++] = ControlParaRecord("当天离线最大金额>>", String.format("%.02f元", sysRecord.maxDayOfflineAmt / 100.0f))
- kvMap[index++] = ControlParaRecord("定额间隔时间(s)>>", "${sysRecord.fixpayGap}s")
- kvMap[index++] = ControlParaRecord("心跳间隔>>", "${sysRecord.heatBeat}s")
- }
-
- private fun initView() {
- val vParamList = this.findViewById<ListView>(R.id.lv_param) as ListView
- adapter = SysparaAdapter(this)
- vParamList.adapter = adapter
- }
-
- override fun dispatchKeyEvent(event: KeyEvent): Boolean {
- if (event.action == KeyEvent.ACTION_DOWN) {
- if (!keyActive) {
- return super.dispatchKeyEvent(event)
- }
- resetCounter(200)
-
- when (event.keyCode) {
- KeyEvent.KEYCODE_DPAD_DOWN -> {
- //F3
- pageno++
- if (kvMap.size <= pageno * PAGENUM) {
- pageno--
- } else {
- showPara()
- }
- return true
- }
- KeyEvent.KEYCODE_DPAD_RIGHT -> {
- //F4
- if (pageno > 0) {
- pageno--
- showPara()
- }
- return true
- }
- //case KeyEvent.KEYCODE_DPAD_UP:
- //F2
- KeyEvent.KEYCODE_DEL -> {
- //cancel
- jumpActivity(MenuActivity::class.java)
- return true
- }
- }
- }
- return super.dispatchKeyEvent(event)
- }
-
- override fun onResume() {
- super.onResume()
- keyActive = true
- pageno = 0
- showPara()
- }
-
- private fun showPara() {
- val paraList = ArrayList<ControlParaRecord>()
- val auxList = ArrayList<String>()
- for (i in 0 until PAGENUM) {
- val index = pageno * PAGENUM + i
- if (index < kvMap.size) {
- auxList.add(kvMap[index]!!.paraname!!)
- auxList.add(kvMap[index]!!.paraval!!)
- } else {
- auxList.add(" ")
- auxList.add(" ")
- }
- }
- for (i in 0 until kvMap.size) {
- paraList.add(kvMap[i]!!)
- }
- adapter!!.setList(paraList)
- adapter!!.notifyDataSetChanged()
-
- AuxScreenController.getInstance().refreshTitle("设备参数查询")
- AuxScreenController.getInstance().refreshBottom("F3/F4 切换翻页")
- AuxScreenController.getInstance().refreshContent(auxList)
- }
-
- private var counter: ContinuePressTimer? = null
-
- private fun resetCounter(timems: Long) {
- counter?.cancel()
- if (counter == null) {
- counter = ContinuePressTimer(timems, 100)
- }
- keyActive = false
- counter!!.start()
- }
-
- private inner class ContinuePressTimer internal constructor(millisInFuture: Long, countDownInterval: Long) :
- CountDownTimer(millisInFuture, countDownInterval) {
-
- override fun onTick(millisUntilFinished: Long) {
-
- }
-
- override fun onFinish() {
- keyActive = true
- }
- }
+package com.supwisdom.activities.syspara
+
+import android.os.Bundle
+import android.os.CountDownTimer
+import android.view.KeyEvent
+import android.widget.ListView
+import com.supwisdom.R
+import com.supwisdom.activities.BaseActivity
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.auxscreen.AuxScreenController
+import com.supwisdom.activities.menu.MenuActivity
+import com.supwisdom.activities.syspara.adapter.SysparaAdapter
+import com.supwisdom.entity.ControlParaRecord
+import com.supwisdom.utils.CommonUtil
+import com.supwisdom.utils.PublicDef
+import java.util.*
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+class SysparaActivity : BaseActivity() {
+ private var pageno: Int = 0
+ private val PAGENUM = 3
+ private val kvMap = hashMapOf<Int, ControlParaRecord>()
+ private var index: Int = 0
+ private val pos = SPApplication.getInstance().getPos()
+ private var keyActive = true
+ private var adapter: SysparaAdapter? = null
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_syspara)
+ initView()
+ initData()
+ }
+
+ private fun initData() {
+ index = 0
+ kvMap[index++] = ControlParaRecord("软件版本>>", CommonUtil.getVersionName(applicationContext))
+ kvMap[index++] = ControlParaRecord("启动时间>>", SPApplication.getInstance().getStartime())
+ kvMap[index++] = ControlParaRecord("设备序列号>>", CommonUtil.getSerialNumber())
+ val cfgRecord = pos.getConfigPara()
+ val sysRecord = pos.getSysPara()
+ val dyRecord = pos.getDynamicPara()
+ kvMap[index++] = ControlParaRecord("租户名>>", cfgRecord!!.tenantId!!)
+ kvMap[index++] = ControlParaRecord("物理编号>>", cfgRecord.devphyid!!)
+ kvMap[index++] = ControlParaRecord("服务器地址>>", cfgRecord.epayIP!!)
+ kvMap[index++] = ControlParaRecord("服务器标识>>", cfgRecord.epayUri!!)
+ kvMap[index++] = ControlParaRecord("服务器端口>>", "" + cfgRecord.epayPort)
+ kvMap[index++] =
+ ControlParaRecord("参数版本号>>", "no:${dyRecord!!.paraverno},id:${dyRecord.paragroupid}")
+ kvMap[index++] = ControlParaRecord("白名单版本>>", dyRecord.cardverno ?: "null")
+ kvMap[index++] = ControlParaRecord("通讯超时>>", "${CommonUtil.getCommunicateTime()}s")
+ if (sysRecord!!.returnFlag and 0x1 == 1) {
+ kvMap[index++] = ControlParaRecord("冲正使能>>", "启用")
+ } else {
+ kvMap[index++] = ControlParaRecord("冲正使能>>", "禁止")
+ }
+ if (sysRecord.synoCode) {
+ kvMap[index++] = ControlParaRecord("晟元扫码>>", "开启")
+ val ctlRecord = pos.getControlPara(PublicDef.CONTROL_SYNOCODE_ACTIVE)
+ if (ctlRecord != null) {
+ kvMap[index++] = ControlParaRecord("晟元扫码>>", ctlRecord.paraval ?: "null")
+ } else {
+ kvMap[index++] = ControlParaRecord("晟元扫码>>", "未使用")
+ }
+ } else {
+ kvMap[index++] = ControlParaRecord("晟元扫码>>", "关闭")
+ }
+ kvMap[index++] = ControlParaRecord("成功显时间>>", "${sysRecord.sucShowtime}s")
+ kvMap[index++] = ControlParaRecord("失败显时间>>", "${sysRecord.failShowtime}s")
+ kvMap[index++] = ControlParaRecord("联机流水号>>", pos.getTransdtlOnlineMaxSeqno().toString())
+ kvMap[index++] = ControlParaRecord("离线流水号>>", pos.getTransdtlOfflineMaxSeqno().toString())
+ kvMap[index++] = ControlParaRecord("未上传流水>>", pos.getTransdtlUnconfirmNum().toString())
+ kvMap[index++] = ControlParaRecord(
+ "最大脱机天数>>", String.format(
+ "%d天",
+ sysRecord.maxOfflineDays
+ )
+ )
+ kvMap[index++] = ControlParaRecord(
+ "当天离线最大金额>>", String.format(
+ "%.02f元",
+ sysRecord.maxDayOfflineAmt / 100.0f
+ )
+ )
+ kvMap[index++] = ControlParaRecord("定额间隔时间(s)>>", "${sysRecord.fixpayGap}s")
+ kvMap[index++] = ControlParaRecord("心跳间隔>>", "${sysRecord.heatBeat}s")
+ }
+
+ private fun initView() {
+ val vParamList = this.findViewById<ListView>(R.id.lv_param) as ListView
+ adapter = SysparaAdapter(this)
+ vParamList.adapter = adapter
+ }
+
+ override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+ if (event.action == KeyEvent.ACTION_DOWN) {
+ if (!keyActive) {
+ return super.dispatchKeyEvent(event)
+ }
+ resetCounter(200)
+
+ when (event.keyCode) {
+ KeyEvent.KEYCODE_DPAD_DOWN -> {
+ //F3
+ pageno++
+ if (kvMap.size <= pageno * PAGENUM) {
+ pageno--
+ } else {
+ showPara()
+ }
+ return true
+ }
+ KeyEvent.KEYCODE_DPAD_RIGHT -> {
+ //F4
+ if (pageno > 0) {
+ pageno--
+ showPara()
+ }
+ return true
+ }
+ //case KeyEvent.KEYCODE_DPAD_UP:
+ //F2
+ KeyEvent.KEYCODE_DEL -> {
+ //cancel
+ jumpActivity(MenuActivity::class.java)
+ return true
+ }
+ }
+ }
+ return super.dispatchKeyEvent(event)
+ }
+
+ override fun onResume() {
+ super.onResume()
+ keyActive = true
+ pageno = 0
+ showPara()
+ }
+
+ private fun showPara() {
+ val paraList = ArrayList<ControlParaRecord>()
+ val auxList = ArrayList<String>()
+ for (i in 0 until PAGENUM) {
+ val index = pageno * PAGENUM + i
+ if (index < kvMap.size) {
+ auxList.add(kvMap[index]!!.paraname!!)
+ auxList.add(kvMap[index]!!.paraval!!)
+ } else {
+ auxList.add(" ")
+ auxList.add(" ")
+ }
+ }
+ for (i in 0 until kvMap.size) {
+ paraList.add(kvMap[i]!!)
+ }
+ adapter!!.setList(paraList)
+ adapter!!.notifyDataSetChanged()
+
+ AuxScreenController.getInstance().refreshTitle("设备参数查询")
+ AuxScreenController.getInstance().refreshBottom("F3/F4 切换翻页")
+ AuxScreenController.getInstance().refreshContent(auxList)
+ }
+
+ private var counter: ContinuePressTimer? = null
+
+ private fun resetCounter(timems: Long) {
+ counter?.cancel()
+ if (counter == null) {
+ counter = ContinuePressTimer(timems, 100)
+ }
+ keyActive = false
+ counter!!.start()
+ }
+
+ private inner class ContinuePressTimer internal constructor(
+ millisInFuture: Long,
+ countDownInterval: Long
+ ) :
+ CountDownTimer(millisInFuture, countDownInterval) {
+
+ override fun onTick(millisUntilFinished: Long) {
+
+ }
+
+ override fun onFinish() {
+ keyActive = true
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/transdtl/TransdtlActivity.kt b/app/src/main/java/com/supwisdom/activities/transdtl/TransdtlActivity.kt
index 35a0be7..e76c109 100644
--- a/app/src/main/java/com/supwisdom/activities/transdtl/TransdtlActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/transdtl/TransdtlActivity.kt
@@ -1,234 +1,241 @@
-package com.supwisdom.activities.transdtl
-
-import android.os.AsyncTask
-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.auxscreen.AuxScreenController
-import com.supwisdom.entity.PayStatus
-import com.supwisdom.entity.ReversalFlag
-import com.supwisdom.entity.TransdtlUnionRecord
-import com.supwisdom.utils.DateUtil
-import java.util.*
-
-/**
- ** create by zzq on 2019/7/26
- ** @desc
- **/
-class TransdtlActivity : BaseActivity() {
- private val pos = SPApplication.getInstance().getPos()
- private lateinit var vSeqno: TextView
- private lateinit var vContent: TextView
- private var isSearching: Boolean = false
- @Volatile
- private var keyActive = true
- private var hasdtlFlag = true
- private val MAX_SEARCH_NUM = 19
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- this.setContentView(R.layout.activity_transdtl)
- initView()
- }
-
- private fun initView() {
- vSeqno = findViewById<TextView>(R.id.transdtl_seqno)
- vContent = findViewById<TextView>(R.id.transdtl_content)
- }
-
- private fun refresh() {
- setShowSeqno(1)
- doSearch(1)
- }
-
- private fun showCustomQuery(seqno: Int) {
- AuxScreenController.getInstance().refreshTitle("流水记录查询")
- AuxScreenController.getInstance().refreshBottom("F3/F4 切换记录")
- AuxScreenController.getInstance()
- .refreshContent(Arrays.asList<String>("流水索引号:$seqno", "正在查询", "请稍等...", " ", " ", " "))
- }
-
- override fun dispatchKeyEvent(event: KeyEvent): Boolean {
- if (event.action == KeyEvent.ACTION_DOWN) {
- if (isSearching || !keyActive) {
- return super.dispatchKeyEvent(event)
- }
- resetCounter(200)
-
- when (event.keyCode) {
- KeyEvent.KEYCODE_DPAD_UP -> {
- }
- KeyEvent.KEYCODE_DPAD_DOWN ->
- //F3
- movePreSeqno()
- KeyEvent.KEYCODE_DPAD_RIGHT ->
- //F4
- moveNextSeqno()
- KeyEvent.KEYCODE_DEL ->
- //cancel
- jumpActivity(ConsumeActivity::class.java)
- }//F2
- }
- return super.dispatchKeyEvent(event)
- }
-
- private fun moveNextSeqno() {
- if (!hasdtlFlag) {
- return
- }
- var seqno = getShowSeqno()
- if (seqno > MAX_SEARCH_NUM) {
- return
- }
- seqno += 1
- setShowSeqno(seqno)
- doSearch(seqno)
- }
-
- private fun movePreSeqno() {
- var seqno = getShowSeqno()
- if (seqno > 1) {
- seqno -= 1
- setShowSeqno(seqno)
- doSearch(seqno)
- }
- }
-
- private fun doSearch(seqno: Int) {
- isSearching = true
- showCustomQuery(seqno)
- queryTransdtl(seqno - 1)
- }
-
- override fun onDestroy() {
- super.onDestroy()
- }
-
- override fun onResume() {
- super.onResume()
- hasdtlFlag = true
- keyActive = true
- refresh()
- }
-
- fun showTransdtlResult(record: TransdtlUnionRecord?) {
- isSearching = false
- if (record == null) {
- hasdtlFlag = false
- vContent.text = "未找到消费记录"
- AuxScreenController.getInstance().refreshContent(
- Arrays.asList<String>(
- "流水索引号:" + getShowSeqno(),
- "查询失败:", "未找到消费记录", " ", " ", " "
- )
- )
- } else {
- hasdtlFlag = true
- val transdatetime = StringBuilder()
- transdatetime.append(record.transdate!!.substring(0, 4)).append("-")
- .append(record.transdate!!.substring(4, 6)).append("-")
- .append(record.transdate!!.substring(6)).append(" ")
- .append(record.transtime!!.substring(0, 2)).append(":")
- .append(record.transtime!!.substring(2, 4)).append(":")
- .append(record.transtime!!.substring(4))
- val result = if (record.status == PayStatus.SUC) {
- if (record.reversalflag == ReversalFlag.AUTO ||
- record.reversalflag == ReversalFlag.MANUAL
- ) {
- "已退款"
- } else {
- "消费成功"
- }
- } else {
- if (record.reversalflag == ReversalFlag.AUTO ||
- record.reversalflag == ReversalFlag.MANUAL
- ) {
- "冲正失败"
- } else {
- "消费失败"
- }
- }
- val payWay = if (record.payway == "code") {
- "二维码"
- } else {
- "市民卡"
- }
- val sb = StringBuilder("查询成功 \n")
- if (record.username != null) {
- sb.append("姓名: ").append(record.username)
- } else {
- sb.append("卡号: ").append(record.cardno)
- }
- sb.append("\n").append("支付方式: ").append(payWay).append("\n")
- .append(String.format("支付金额: %.02f元", record.payamt / 100.0f)).append("\n")
- .append("支付时间: ").append(transdatetime.toString()).append("\n")
- .append("支付结果: ").append(result)
- vContent.text = sb.toString()
-
- AuxScreenController.getInstance().refreshContent(
- Arrays.asList(
- "时间:$transdatetime",
- "姓名:" + record.username,
- String.format("金额:%.02f元", record.payamt / 100.0f),
- "方式:$payWay", "结果:$result"
- )
- )
- }
- }
-
- private fun getShowSeqno(): Int {
- return Integer.parseInt(vSeqno.text.toString())
- }
-
- private fun setShowSeqno(seqno: Int) {
- vSeqno.text = seqno.toString()
- }
-
- private fun queryTransdtl(seqno: Int) {
- AsyncTransdtl().execute(seqno)
- }
-
- private inner class AsyncTransdtl : AsyncTask<Int, Void, TransdtlUnionRecord?>() {
- override fun onPostExecute(record: TransdtlUnionRecord?) {
- showTransdtlResult(record)
- }
-
- override fun doInBackground(vararg integers: Int?): TransdtlUnionRecord? {
- val searchSeqno = integers[0]!!
- val list = pos.getTransdtlUnion(DateUtil.getNowDateNoFormat(), searchSeqno, 1, 1)
- return if (list.isNotEmpty()) {
- list[0]
- } else {
- null
- }
- }
- }
-
- 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
- }
- }
+package com.supwisdom.activities.transdtl
+
+import android.os.AsyncTask
+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.auxscreen.AuxScreenController
+import com.supwisdom.activities.consume.ConsumeActivity
+import com.supwisdom.entity.PayStatus
+import com.supwisdom.entity.ReversalFlag
+import com.supwisdom.entity.TransdtlUnionRecord
+import com.supwisdom.utils.DateUtil
+import java.util.*
+
+/**
+ ** create by zzq on 2019/7/26
+ ** @desc
+ **/
+class TransdtlActivity : BaseActivity() {
+ private val pos = SPApplication.getInstance().getPos()
+ private lateinit var vSeqno: TextView
+ private lateinit var vContent: TextView
+ private var isSearching: Boolean = false
+
+ @Volatile
+ private var keyActive = true
+ private var hasdtlFlag = true
+ private val MAX_SEARCH_NUM = 19
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ this.setContentView(R.layout.activity_transdtl)
+ initView()
+ }
+
+ private fun initView() {
+ vSeqno = findViewById<TextView>(R.id.transdtl_seqno)
+ vContent = findViewById<TextView>(R.id.transdtl_content)
+ }
+
+ private fun refresh() {
+ setShowSeqno(1)
+ doSearch(1)
+ }
+
+ private fun showCustomQuery(seqno: Int) {
+ AuxScreenController.getInstance().refreshTitle("流水记录查询")
+ AuxScreenController.getInstance().refreshBottom("F3/F4 切换记录")
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList<String>("流水索引号:$seqno", "正在查询", "请稍等...", " ", " ", " "))
+ }
+
+ override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+ if (event.action == KeyEvent.ACTION_DOWN) {
+ if (isSearching || !keyActive) {
+ return super.dispatchKeyEvent(event)
+ }
+ resetCounter(200)
+
+ when (event.keyCode) {
+ KeyEvent.KEYCODE_DPAD_UP -> {
+ }
+ KeyEvent.KEYCODE_DPAD_DOWN ->
+ //F3
+ movePreSeqno()
+ KeyEvent.KEYCODE_DPAD_RIGHT ->
+ //F4
+ moveNextSeqno()
+ KeyEvent.KEYCODE_DEL ->
+ //cancel
+ jumpActivity(ConsumeActivity::class.java)
+ }//F2
+ }
+ return super.dispatchKeyEvent(event)
+ }
+
+ private fun moveNextSeqno() {
+ if (!hasdtlFlag) {
+ return
+ }
+ var seqno = getShowSeqno()
+ if (seqno > MAX_SEARCH_NUM) {
+ return
+ }
+ seqno += 1
+ setShowSeqno(seqno)
+ doSearch(seqno)
+ }
+
+ private fun movePreSeqno() {
+ var seqno = getShowSeqno()
+ if (seqno > 1) {
+ seqno -= 1
+ setShowSeqno(seqno)
+ doSearch(seqno)
+ }
+ }
+
+ private fun doSearch(seqno: Int) {
+ isSearching = true
+ showCustomQuery(seqno)
+ queryTransdtl(seqno - 1)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ }
+
+ override fun onResume() {
+ super.onResume()
+ hasdtlFlag = true
+ keyActive = true
+ refresh()
+ }
+
+ fun showTransdtlResult(record: TransdtlUnionRecord?) {
+ isSearching = false
+ if (record == null) {
+ hasdtlFlag = false
+ vContent.text = "未找到消费记录"
+ AuxScreenController.getInstance().refreshContent(
+ Arrays.asList<String>(
+ "流水索引号:" + getShowSeqno(),
+ "查询失败:", "未找到消费记录", " ", " ", " "
+ )
+ )
+ } else {
+ hasdtlFlag = true
+ val transdatetime = StringBuilder()
+ transdatetime.append(record.transdate!!.substring(0, 4)).append("-")
+ .append(record.transdate!!.substring(4, 6)).append("-")
+ .append(record.transdate!!.substring(6)).append(" ")
+ .append(record.transtime!!.substring(0, 2)).append(":")
+ .append(record.transtime!!.substring(2, 4)).append(":")
+ .append(record.transtime!!.substring(4))
+ val result = if (record.status == PayStatus.SUC) {
+ if (record.reversalflag == ReversalFlag.AUTO ||
+ record.reversalflag == ReversalFlag.MANUAL
+ ) {
+ "已退款"
+ } else {
+ "消费成功"
+ }
+ } else if (record.status == PayStatus.UNCONFIRM) {
+ //反扫消费查询超时
+ "以手机结果为准"
+ } else {
+ if (record.reversalflag == ReversalFlag.AUTO ||
+ record.reversalflag == ReversalFlag.MANUAL
+ ) {
+ "冲正失败"
+ } else {
+ "消费失败"
+ }
+ }
+ val payWay = if (record.payway == "code") {
+ "二维码"
+ } else {
+ "市民卡"
+ }
+ val sb = StringBuilder("查询成功 \n")
+ if (record.username != null) {
+ sb.append("姓名: ").append(record.username)
+ } else {
+ sb.append("卡号: ").append(record.cardno)
+ }
+ sb.append("\n").append("支付方式: ").append(payWay).append("\n")
+ .append(String.format("支付金额: %.02f元", record.payamt / 100.0f)).append("\n")
+ .append("支付时间: ").append(transdatetime.toString()).append("\n")
+ .append("支付结果: ").append(result)
+ vContent.text = sb.toString()
+
+ AuxScreenController.getInstance().refreshContent(
+ Arrays.asList(
+ "时间:$transdatetime",
+ "姓名:" + record.username,
+ String.format("金额:%.02f元", record.payamt / 100.0f),
+ "方式:$payWay", "结果:$result"
+ )
+ )
+ }
+ }
+
+ private fun getShowSeqno(): Int {
+ return Integer.parseInt(vSeqno.text.toString())
+ }
+
+ private fun setShowSeqno(seqno: Int) {
+ vSeqno.text = seqno.toString()
+ }
+
+ private fun queryTransdtl(seqno: Int) {
+ AsyncTransdtl().execute(seqno)
+ }
+
+ private inner class AsyncTransdtl : AsyncTask<Int, Void, TransdtlUnionRecord?>() {
+ override fun onPostExecute(record: TransdtlUnionRecord?) {
+ showTransdtlResult(record)
+ }
+
+ override fun doInBackground(vararg integers: Int?): TransdtlUnionRecord? {
+ val searchSeqno = integers[0]!!
+ val list = pos.getTransdtlUnion(DateUtil.getNowDateNoFormat(), searchSeqno, 1, 1)
+ return if (list.isNotEmpty()) {
+ list[0]
+ } else {
+ null
+ }
+ }
+ }
+
+ 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/unregister/UnregisterActivity.kt b/app/src/main/java/com/supwisdom/activities/unregister/UnregisterActivity.kt
index 14e8c6f..ecbf57a 100644
--- a/app/src/main/java/com/supwisdom/activities/unregister/UnregisterActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/unregister/UnregisterActivity.kt
@@ -1,60 +1,60 @@
-package com.supwisdom.activities.unregister
-
-import android.content.Intent
-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.init.InitActivity
-import com.supwisdom.auxscreen.AuxScreenController
-import com.supwisdom.utils.DateUtil
-
-/**
- ** create by zzq on 2019/7/24
- ** @desc
- **/
-class UnregisterActivity:BaseActivity() {
- private lateinit var vErrmsg: TextView
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- this.setContentView(R.layout.activity_unregister)
-
- initView()
- }
-
- private fun initView() {
- val backBtn = this.findViewById(R.id.tv_back) as TextView
- backBtn.setOnClickListener {
- jumpActivity(InitActivity::class.java)
- }
- vErrmsg = this.findViewById(R.id.tv_errmsg) as TextView
- }
-
- override fun dispatchKeyEvent(event: KeyEvent?): Boolean {
- return super.dispatchKeyEvent(event)
- }
-
- override fun onDestroy() {
- super.onDestroy()
- }
-
- override fun onResume() {
- super.onResume()
- val errmsg = intent.getStringExtra("errmsg")
- refresh(errmsg)
- vErrmsg.text = errmsg
- }
-
- private fun refresh(errmsg: String) {
- AuxScreenController.getInstance().refreshTitle("设备注册状态")
- AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
- AuxScreenController.getInstance().refreshContent(listOf("设备未注册", errmsg))
- }
-
- override fun onNewIntent(intent: Intent) {
- super.onNewIntent(intent)
- this.intent.putExtra("errmsg", intent.getStringExtra("errmsg"))
- }
+package com.supwisdom.activities.unregister
+
+import android.content.Intent
+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.auxscreen.AuxScreenController
+import com.supwisdom.activities.init.InitActivity
+import com.supwisdom.utils.DateUtil
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class UnregisterActivity : BaseActivity() {
+ private lateinit var vErrmsg: TextView
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ this.setContentView(R.layout.activity_unregister)
+
+ initView()
+ }
+
+ private fun initView() {
+ val backBtn = this.findViewById(R.id.tv_back) as TextView
+ backBtn.setOnClickListener {
+ jumpActivity(InitActivity::class.java)
+ }
+ vErrmsg = this.findViewById(R.id.tv_errmsg) as TextView
+ }
+
+ override fun dispatchKeyEvent(event: KeyEvent?): Boolean {
+ return super.dispatchKeyEvent(event)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ }
+
+ override fun onResume() {
+ super.onResume()
+ val errmsg = intent.getStringExtra("errmsg")
+ refresh(errmsg)
+ vErrmsg.text = errmsg
+ }
+
+ private fun refresh(errmsg: String) {
+ AuxScreenController.getInstance().refreshTitle("设备注册状态")
+ AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime1())
+ AuxScreenController.getInstance().refreshContent(listOf("设备未注册", errmsg))
+ }
+
+ override fun onNewIntent(intent: Intent) {
+ super.onNewIntent(intent)
+ this.intent.putExtra("errmsg", intent.getStringExtra("errmsg"))
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/upgrade/UpgradeActivity.kt b/app/src/main/java/com/supwisdom/activities/upgrade/UpgradeActivity.kt
index 91f304d..5449f29 100644
--- a/app/src/main/java/com/supwisdom/activities/upgrade/UpgradeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/upgrade/UpgradeActivity.kt
@@ -1,187 +1,196 @@
-package com.supwisdom.activities.upgrade
-
-import android.content.Intent
-import android.net.Uri
-import android.os.Build
-import android.os.Bundle
-import android.os.CountDownTimer
-import android.support.v4.content.FileProvider
-import android.view.KeyEvent
-import android.widget.Button
-import android.widget.TextView
-import com.supwisdom.R
-import com.supwisdom.activities.BaseActivity
-import com.supwisdom.activities.SPApplication
-import com.supwisdom.activities.upgrade.mode.EpayUpgradeApi
-import com.supwisdom.auxscreen.AuxScreenController
-import com.supwisdom.utils.CommonUtil
-import com.supwisdom.utils.DateUtil
-import com.supwisdom.utils.ThreadPool
-import java.io.File
-import java.util.*
-
-/**
- ** create by zzq on 2019/7/24
- ** @desc
- **/
-@Suppress("DEPRECATION")
-class UpgradeActivity : BaseActivity() {
- private val pos = SPApplication.getInstance().getPos()
- private lateinit var vResult: TextView
- private lateinit var vUpgradeMsg: TextView
- private lateinit var vServerUrl: TextView
- private lateinit var vPosOldVersion: TextView
- private lateinit var vPosVersion: TextView
- @Volatile
- private var isUpgrading = false
- @Volatile
- private var keyActive = true
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_upgrade)
- initView()
- initData()
- }
-
- private fun initData() {
- vPosOldVersion.text = CommonUtil.getVersionName(this)
- }
-
- private fun initView() {
- vResult = this.findViewById(R.id.tv_result) as TextView
- vUpgradeMsg = this.findViewById(R.id.tv_upgrade_msg) as TextView
-
- vServerUrl = this.findViewById(R.id.tv_server_url) as TextView
- vPosOldVersion = this.findViewById(R.id.tv_old_version) as TextView
- vPosVersion = this.findViewById(R.id.tv_pos_version) as TextView
- this.findViewById<Button>(R.id.tv_upgrade).setOnClickListener {
- asyncUpgrade()
- }
- }
-
- override fun dispatchKeyEvent(event: KeyEvent): Boolean {
- if (event.action == KeyEvent.ACTION_DOWN) {
- if (isUpgrading || !keyActive) {
- return super.dispatchKeyEvent(event)
- }
- resetCounter(200)
-
- when (event.keyCode) {
- KeyEvent.KEYCODE_DEL ->
- //cancel
- finish()
- KeyEvent.KEYCODE_ENTER -> {
- //ok
- asyncUpgrade()
- }
- }
- }
- return super.dispatchKeyEvent(event)
- }
-
- override fun onResume() {
- super.onResume()
- keyActive = true
- refresh()
- }
-
- private fun refresh() {
- isUpgrading = false
- AuxScreenController.getInstance().refreshTitle("应用在线升级")
- AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime())
- AuxScreenController.getInstance().refreshContent(
- Arrays.asList(
- "当前版本>>", CommonUtil.getVersionName(applicationContext),
- "确认 --应用升级", "取消 --退出"
- )
- )
- }
-
- private val upgradeApiCallback = object : EpayUpgradeApi.CallbackInterface {
- override fun progresss(pro: Int) {
- runOnUiThread {
- vUpgradeMsg.text = "$pro%"
- vUpgradeMsg.setTextColor(resources.getColor(R.color.black))
- AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("正在下载", "$pro%"))
- }
- }
-
- override fun success(filepath: String) {
- runOnUiThread {
- isUpgrading = false
- vUpgradeMsg.text = "下载成功"
- vUpgradeMsg.setTextColor(resources.getColor(R.color.black))
- AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("下载应用成功", "请在大屏确认升级"))
- val apkFile = File(filepath)
- installAPK(apkFile)
- }
- }
-
- override fun failed(errmsg: String) {
- runOnUiThread {
- isUpgrading = false
- vUpgradeMsg.text = errmsg
- vUpgradeMsg.setTextColor(resources.getColor(R.color.cl_red))
- AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("升级失败", "原因:", errmsg))
- }
- }
- }
-
- /**
- * 开始下载apk
- */
- fun asyncUpgrade() {
- if (!isUpgrading) {
- isUpgrading = true
- AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("正在升级", "请稍等..."))
- ThreadPool.getDownloadPool().execute(Runnable {
- EpayUpgradeApi(upgradeApiCallback).upgrade(
- pos.getConfigPara()!!.devphyid!!,
- CommonUtil.getVersionName(this)
- )
- })
- }
- }
-
- /**
- * 安装apk
- */
- private fun installAPK(apkFile: File) {
- val intent = Intent(Intent.ACTION_VIEW)
- intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- intent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
- val contentUri = FileProvider.getUriForFile(
- this, "com.supwisdom.charge.fileprovider", apkFile
- )
- intent.setDataAndType(contentUri, "application/vnd.android.package-archive")
- } else {
- intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive")
- }
- startActivity(intent)
- }
-
- 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
- }
- }
+package com.supwisdom.activities.upgrade
+
+import android.content.Intent
+import android.net.Uri
+import android.os.Build
+import android.os.Bundle
+import android.os.CountDownTimer
+import android.support.v4.content.FileProvider
+import android.view.KeyEvent
+import android.widget.Button
+import android.widget.TextView
+import com.supwisdom.R
+import com.supwisdom.activities.BaseActivity
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.auxscreen.AuxScreenController
+import com.supwisdom.activities.upgrade.mode.EpayUpgradeApi
+import com.supwisdom.utils.CommonUtil
+import com.supwisdom.utils.DateUtil
+import com.supwisdom.utils.ThreadPool
+import java.io.File
+import java.util.*
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+@Suppress("DEPRECATION")
+class UpgradeActivity : BaseActivity() {
+ private val pos = SPApplication.getInstance().getPos()
+ private lateinit var vResult: TextView
+ private lateinit var vUpgradeMsg: TextView
+ private lateinit var vServerUrl: TextView
+ private lateinit var vPosOldVersion: TextView
+ private lateinit var vPosVersion: TextView
+
+ @Volatile
+ private var isUpgrading = false
+
+ @Volatile
+ private var keyActive = true
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_upgrade)
+ initView()
+ initData()
+ }
+
+ private fun initData() {
+ vPosOldVersion.text = CommonUtil.getVersionName(this)
+ }
+
+ private fun initView() {
+ vResult = this.findViewById(R.id.tv_result) as TextView
+ vUpgradeMsg = this.findViewById(R.id.tv_upgrade_msg) as TextView
+
+ vServerUrl = this.findViewById(R.id.tv_server_url) as TextView
+ vPosOldVersion = this.findViewById(R.id.tv_old_version) as TextView
+ vPosVersion = this.findViewById(R.id.tv_pos_version) as TextView
+ this.findViewById<Button>(R.id.tv_upgrade).setOnClickListener {
+ asyncUpgrade()
+ }
+ }
+
+ override fun dispatchKeyEvent(event: KeyEvent): Boolean {
+ if (event.action == KeyEvent.ACTION_DOWN) {
+ if (isUpgrading || !keyActive) {
+ return super.dispatchKeyEvent(event)
+ }
+ resetCounter(200)
+
+ when (event.keyCode) {
+ KeyEvent.KEYCODE_DEL ->
+ //cancel
+ finish()
+ KeyEvent.KEYCODE_ENTER -> {
+ //ok
+ asyncUpgrade()
+ }
+ }
+ }
+ return super.dispatchKeyEvent(event)
+ }
+
+ override fun onResume() {
+ super.onResume()
+ keyActive = true
+ refresh()
+ }
+
+ private fun refresh() {
+ isUpgrading = false
+ AuxScreenController.getInstance().refreshTitle("应用在线升级")
+ AuxScreenController.getInstance().refreshBottom(DateUtil.getNowDateTime1())
+ AuxScreenController.getInstance().refreshContent(
+ Arrays.asList(
+ "当前版本>>", CommonUtil.getVersionName(applicationContext),
+ "确认 --应用升级", "取消 --退出"
+ )
+ )
+ }
+
+ private val upgradeApiCallback = object : EpayUpgradeApi.CallbackInterface {
+ override fun progresss(pro: Int) {
+ runOnUiThread {
+ vUpgradeMsg.text = "$pro%"
+ vUpgradeMsg.setTextColor(resources.getColor(R.color.black))
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList<String>("正在下载", "$pro%"))
+ }
+ }
+
+ override fun success(filepath: String) {
+ runOnUiThread {
+ isUpgrading = false
+ vUpgradeMsg.text = "下载成功"
+ vUpgradeMsg.setTextColor(resources.getColor(R.color.black))
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList<String>("下载应用成功", "请在大屏确认升级"))
+ val apkFile = File(filepath)
+ installAPK(apkFile)
+ }
+ }
+
+ override fun failed(errmsg: String) {
+ runOnUiThread {
+ isUpgrading = false
+ vUpgradeMsg.text = errmsg
+ vUpgradeMsg.setTextColor(resources.getColor(R.color.cl_red))
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList<String>("升级失败", "原因:", errmsg))
+ }
+ }
+ }
+
+ /**
+ * 开始下载apk
+ */
+ fun asyncUpgrade() {
+ if (!isUpgrading) {
+ isUpgrading = true
+ AuxScreenController.getInstance()
+ .refreshContent(Arrays.asList<String>("正在升级", "请稍等..."))
+ ThreadPool.getDownloadPool().execute(Runnable {
+ EpayUpgradeApi(upgradeApiCallback).upgrade(
+ pos.getConfigPara()!!.devphyid!!,
+ CommonUtil.getVersionName(this)
+ )
+ })
+ }
+ }
+
+ /**
+ * 安装apk
+ */
+ private fun installAPK(apkFile: File) {
+ val intent = Intent(Intent.ACTION_VIEW)
+ intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+ intent.flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
+ val contentUri = FileProvider.getUriForFile(
+ this, "com.supwisdom.charge.fileprovider", apkFile
+ )
+ intent.setDataAndType(contentUri, "application/vnd.android.package-archive")
+ } else {
+ intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive")
+ }
+ startActivity(intent)
+ }
+
+ 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/upgrade/mode/EpayUpgradeApi.kt b/app/src/main/java/com/supwisdom/activities/upgrade/mode/EpayUpgradeApi.kt
index 110f204..d593610 100644
--- a/app/src/main/java/com/supwisdom/activities/upgrade/mode/EpayUpgradeApi.kt
+++ b/app/src/main/java/com/supwisdom/activities/upgrade/mode/EpayUpgradeApi.kt
@@ -1,178 +1,185 @@
-package com.supwisdom.activities.upgrade.mode
-
-import android.text.TextUtils
-import com.supwisdom.activities.YktSession
-import com.supwisdom.bean.UpgradeInfoRetBean
-import com.supwisdom.okhttp.WebParams
-import com.supwisdom.utils.*
-import org.apache.http.HttpStatus
-import java.io.File
-import java.io.FileInputStream
-import java.io.FileOutputStream
-import java.net.HttpURLConnection
-import java.net.URL
-import java.util.*
-
-/**
- * @author zzq
- * @date 2019/4/9
- * @desc 在线升级
- */
-class EpayUpgradeApi constructor(private val callback: CallbackInterface) {
- private val TIMEOUT = 5 * 1000// 超时
- private val POSID = "posa711dali"
-
- fun upgrade(devphyid: String, version: String) {
- val resp = getAppVersion(devphyid, version)
- if (resp.retcode != PublicDef.SUCCESS) {
- callback.failed(resp.retmsg!!)
- return
- }
- val updateFile = FileUtil.getUpdateFile("$POSID.zip")
- if (updateFile == null) {
- callback.failed("创建本地文件失败")
- return
- }
- if (!downloadUpdateFile(resp.upgrade_url!!, updateFile, resp.upgrade_version!!)) {
- return
- }
- parseDownloadFile(updateFile.absolutePath, resp.upgrade_version!!)
- }
-
- private fun downloadUpdateFile(downUrl: String, file: File, versionName: String): Boolean {
- var downStep = 0// 提示step
- val totalSize: Int// 文件总大小
- var downloadCount = 0// 已经下载好的大小
- try {
- val url = URL(downUrl)
- val urlConnection = url.openConnection() as HttpURLConnection
- urlConnection.connectTimeout = TIMEOUT
- urlConnection.readTimeout = TIMEOUT
- urlConnection.doOutput = true
- urlConnection.doInput = true
- urlConnection.useCaches = false
- // setting serialized
- urlConnection.setRequestProperty("Content-type", "application/x-java-serialized-object")
- //default is GET
- urlConnection.requestMethod = "POST"
- urlConnection.setRequestProperty("Charsert", "UTF-8")
- urlConnection.setRequestProperty("connection", "Keep-Alive")
- urlConnection.addRequestProperty("version", versionName)
-
- urlConnection.addRequestProperty("username", "supwisdom")
- urlConnection.addRequestProperty("password", "supwisdom")
- urlConnection.addRequestProperty("filename", "$POSID.apk")
-
- //connect to server (tcp)
- urlConnection.connect()
- // 获取下载文件的size
- totalSize = urlConnection.contentLength
- if (urlConnection.responseCode != HttpStatus.SC_OK) {
- urlConnection.disconnect()
- callback.failed("下载文件失败:错误码=${urlConnection.responseCode}")
- return false
- }
- val inputStream = urlConnection.inputStream
- val outputStream = FileOutputStream(file, false)// 文件存在则覆盖掉
- val buffer = ByteArray(1024)
- while (true) {
- val readSize = inputStream.read(buffer)
- if (readSize < 0) {
- break
- }
- outputStream.write(buffer, 0, readSize)
- downloadCount += readSize// 实时获取下载到的大小
-
- val progress = downloadCount * 1.0 / totalSize
- val pro = Math.round(progress * 100).toInt()
- if (pro - downStep >= 1) {
- downStep++
- CommonUtil.doSleep(100)
- callback.progresss(pro)
- }
- }
- urlConnection.disconnect()
- inputStream.close()
- outputStream.close()
- return true
- } catch (e: Exception) {
- e.printStackTrace()
- callback.failed("下载文件异常:${e.message}")
- return false
- }
- }
-
- private fun parseDownloadFile(zipFilePath: String, versionName: String): Boolean {
- try {
- val index = zipFilePath.lastIndexOf("/")
- val unZipFilePath = zipFilePath.substring(0, index)
- ZipUtil.unzip(zipFilePath, unZipFilePath, false)
- val apkFile = File("$unZipFilePath/$POSID.apk")
- if (!apkFile.exists()) {
- callback.failed("未找到文件$POSID.apk")
- return false
- }
-
- val fileHash256 = CryptUtil.HASH256(FileInputStream(apkFile), "nzoqPYMIu91VViA/mEIG5FtJXi8=")
- if (fileHash256 == null) {
- callback.failed("计算文件校验数据错误")
- return false
- }
- val signFile = FileInputStream("$unZipFilePath/hash256.sign")
- val buffer = ByteArray(1024)
- val length = signFile.read(buffer, 0, buffer.size)
- if (length < 0) {
- callback.failed("读取校验文件失败")
- return false
- }
- signFile.close()
- val signHash256 = String(Arrays.copyOfRange(buffer, 0, length))
- if (!fileHash256.equals(signHash256, ignoreCase = true)) {
- callback.failed("文件校验错误")
- return false
- }
- callback.success("$unZipFilePath/$POSID.apk")
- return true
- } catch (e: Exception) {
- e.printStackTrace()
- callback.failed("文件校验异常:${e.message}")
- return false
- }
- }
-
- private fun getAppVersion(devphyid: String, version: String): UpgradeInfoRetBean {
- val params = WebParams()
- params.setParameter("upgrade_url", POSID)
- .setParameter("upgrade_version", version)
- .setParameter("devphyid", devphyid)
- .setParameter("sourcetype", "pos")
-
- val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/globalparam", "", params)
- ?: return UpgradeInfoRetBean(PublicDef.ERROR, "获取版本超时")
- if (resp.retcode != HttpStatus.SC_OK) {
- return UpgradeInfoRetBean(resp.retcode, "获取版本错误码=${resp.retcode}")
- }
- return try {
- val bean = GsonUtil.GsonToBean(resp.retjson!!, UpgradeInfoRetBean::class.java)
- if (bean.retcode != PublicDef.SUCCESS) {
- return UpgradeInfoRetBean(resp.retcode, "获取版本错误=" + bean.retmsg)
- }
- when {
- TextUtils.isEmpty(bean.upgrade_version) -> UpgradeInfoRetBean(PublicDef.ERROR, "获取版本为空")
- TextUtils.isEmpty(bean.upgrade_url) -> UpgradeInfoRetBean(PublicDef.ERROR, "获取升级地址为空")
- else -> bean
- }
- } catch (e: Exception) {
- e.printStackTrace()
- UpgradeInfoRetBean(PublicDef.ERROR, "获取版本JSON异常:${e.message}")
- }
- }
-
- interface CallbackInterface {
- fun progresss(pro: Int)
-
- fun success(filepath: String)
-
- fun failed(errmsg: String)
- }
+package com.supwisdom.activities.upgrade.mode
+
+import android.text.TextUtils
+import com.supwisdom.activities.YktSession
+import com.supwisdom.bean.UpgradeInfoRetBean
+import com.supwisdom.okhttp.WebParams
+import com.supwisdom.utils.*
+import org.apache.http.HttpStatus
+import java.io.File
+import java.io.FileInputStream
+import java.io.FileOutputStream
+import java.net.HttpURLConnection
+import java.net.URL
+import java.util.*
+
+/**
+ * @author zzq
+ * @date 2019/4/9
+ * @desc 在线升级
+ */
+class EpayUpgradeApi constructor(private val callback: CallbackInterface) {
+ private val TIMEOUT = 5 * 1000// 超时
+ private val POSID = "posa711dali"
+
+ fun upgrade(devphyid: String, version: String) {
+ val resp = getAppVersion(devphyid, version)
+ if (resp.retcode != PublicDef.SUCCESS) {
+ callback.failed(resp.getErrorMsg())
+ return
+ }
+ val updateFile = FileUtil.getUpdateFile("$POSID.zip")
+ if (updateFile == null) {
+ callback.failed("创建本地文件失败")
+ return
+ }
+ if (!downloadUpdateFile(resp.upgrade_url!!, updateFile, resp.upgrade_version!!)) {
+ return
+ }
+ parseDownloadFile(updateFile.absolutePath, resp.upgrade_version!!)
+ }
+
+ private fun downloadUpdateFile(downUrl: String, file: File, versionName: String): Boolean {
+ var downStep = 0// 提示step
+ val totalSize: Int// 文件总大小
+ var downloadCount = 0// 已经下载好的大小
+ try {
+ val url = URL(downUrl)
+ val urlConnection = url.openConnection() as HttpURLConnection
+ urlConnection.connectTimeout = TIMEOUT
+ urlConnection.readTimeout = TIMEOUT
+ urlConnection.doOutput = true
+ urlConnection.doInput = true
+ urlConnection.useCaches = false
+ // setting serialized
+ urlConnection.setRequestProperty("Content-type", "application/x-java-serialized-object")
+ //default is GET
+ urlConnection.requestMethod = "POST"
+ urlConnection.setRequestProperty("Charsert", "UTF-8")
+ urlConnection.setRequestProperty("connection", "Keep-Alive")
+ urlConnection.addRequestProperty("version", versionName)
+
+ urlConnection.addRequestProperty("username", "supwisdom")
+ urlConnection.addRequestProperty("password", "supwisdom")
+ urlConnection.addRequestProperty("filename", "$POSID.apk")
+
+ //connect to server (tcp)
+ urlConnection.connect()
+ // 获取下载文件的size
+ totalSize = urlConnection.contentLength
+ if (urlConnection.responseCode != HttpStatus.SC_OK) {
+ urlConnection.disconnect()
+ callback.failed("下载文件失败:错误码=${urlConnection.responseCode}")
+ return false
+ }
+ val inputStream = urlConnection.inputStream
+ val outputStream = FileOutputStream(file, false)// 文件存在则覆盖掉
+ val buffer = ByteArray(1024)
+ while (true) {
+ val readSize = inputStream.read(buffer)
+ if (readSize < 0) {
+ break
+ }
+ outputStream.write(buffer, 0, readSize)
+ downloadCount += readSize// 实时获取下载到的大小
+
+ val progress = downloadCount * 1.0 / totalSize
+ val pro = Math.round(progress * 100).toInt()
+ if (pro - downStep >= 1) {
+ downStep++
+ CommonUtil.doSleep(100)
+ callback.progresss(pro)
+ }
+ }
+ urlConnection.disconnect()
+ inputStream.close()
+ outputStream.close()
+ return true
+ } catch (e: Exception) {
+ e.printStackTrace()
+ callback.failed("下载文件异常:${e.message}")
+ return false
+ }
+ }
+
+ private fun parseDownloadFile(zipFilePath: String, versionName: String): Boolean {
+ try {
+ val index = zipFilePath.lastIndexOf("/")
+ val unZipFilePath = zipFilePath.substring(0, index)
+ ZipUtil.unzip(zipFilePath, unZipFilePath, false)
+ val apkFile = File("$unZipFilePath/$POSID.apk")
+ if (!apkFile.exists()) {
+ callback.failed("未找到文件$POSID.apk")
+ return false
+ }
+
+ val fileHash256 =
+ CryptUtil.HASH256(FileInputStream(apkFile), "nzoqPYMIu91VViA/mEIG5FtJXi8=")
+ if (fileHash256 == null) {
+ callback.failed("计算文件校验数据错误")
+ return false
+ }
+ val signFile = FileInputStream("$unZipFilePath/hash256.sign")
+ val buffer = ByteArray(1024)
+ val length = signFile.read(buffer, 0, buffer.size)
+ if (length < 0) {
+ callback.failed("读取校验文件失败")
+ return false
+ }
+ signFile.close()
+ val signHash256 = String(Arrays.copyOfRange(buffer, 0, length))
+ if (!fileHash256.equals(signHash256, ignoreCase = true)) {
+ callback.failed("文件校验错误")
+ return false
+ }
+ callback.success("$unZipFilePath/$POSID.apk")
+ return true
+ } catch (e: Exception) {
+ e.printStackTrace()
+ callback.failed("文件校验异常:${e.message}")
+ return false
+ }
+ }
+
+ private fun getAppVersion(devphyid: String, version: String): UpgradeInfoRetBean {
+ val params = WebParams()
+ params.setParameter("upgrade_url", POSID)
+ .setParameter("upgrade_version", version)
+ .setParameter("devphyid", devphyid)
+ .setParameter("sourcetype", "pos")
+
+ val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/globalparam", "", params)
+ ?: return UpgradeInfoRetBean(PublicDef.ERROR, "获取版本超时")
+ if (resp.retcode != HttpStatus.SC_OK) {
+ return UpgradeInfoRetBean(resp.retcode, "获取版本错误码=${resp.retcode}")
+ }
+ return try {
+ val bean = GsonUtil.GsonToBean(resp.retjson!!, UpgradeInfoRetBean::class.java)
+ if (bean.retcode != PublicDef.SUCCESS) {
+ return UpgradeInfoRetBean(resp.retcode, "获取版本错误=" + bean.getErrorMsg())
+ }
+ when {
+ TextUtils.isEmpty(bean.upgrade_version) -> UpgradeInfoRetBean(
+ PublicDef.ERROR,
+ "获取版本为空"
+ )
+ TextUtils.isEmpty(bean.upgrade_url) -> UpgradeInfoRetBean(
+ PublicDef.ERROR,
+ "获取升级地址为空"
+ )
+ else -> bean
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
+ UpgradeInfoRetBean(PublicDef.ERROR, "获取版本JSON异常:${e.message}")
+ }
+ }
+
+ interface CallbackInterface {
+ fun progresss(pro: Int)
+
+ fun success(filepath: String)
+
+ fun failed(errmsg: String)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/bean/EpaySynoActiveReqBean.java b/app/src/main/java/com/supwisdom/bean/EpaySynoActiveReqBean.java
new file mode 100644
index 0000000..0cc0280
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/bean/EpaySynoActiveReqBean.java
@@ -0,0 +1,17 @@
+package com.supwisdom.bean;
+
+/**
+ * * create by zzq on 2020/8/24
+ * * @desc
+ **/
+public class EpaySynoActiveReqBean {
+ private String license;
+
+ public String getLicense() {
+ return license;
+ }
+
+ public void setLicense(String license) {
+ this.license = license;
+ }
+}
diff --git a/app/src/main/java/com/supwisdom/bean/EpaySynoActiveRetBean.java b/app/src/main/java/com/supwisdom/bean/EpaySynoActiveRetBean.java
new file mode 100644
index 0000000..ec06e46
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/bean/EpaySynoActiveRetBean.java
@@ -0,0 +1,26 @@
+package com.supwisdom.bean;
+
+/**
+ * * create by zzq on 2020/8/24
+ * * @desc
+ **/
+public class EpaySynoActiveRetBean {
+ private String license; // 授权文件
+ private String timestamp; // 时间戳
+
+ public String getLicense() {
+ return license;
+ }
+
+ public void setLicense(String license) {
+ this.license = license;
+ }
+
+ public String getTimestamp() {
+ return timestamp;
+ }
+
+ public void setTimestamp(String timestamp) {
+ this.timestamp = timestamp;
+ }
+}
diff --git a/app/src/main/java/com/supwisdom/bean/EpaySynoLicenseUploadRetBean.java b/app/src/main/java/com/supwisdom/bean/EpaySynoLicenseUploadRetBean.java
new file mode 100644
index 0000000..554b4ec
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/bean/EpaySynoLicenseUploadRetBean.java
@@ -0,0 +1,35 @@
+package com.supwisdom.bean;
+
+/**
+ * * create by zzq on 2020/8/24
+ * * @desc
+ **/
+public class EpaySynoLicenseUploadRetBean {
+ private int code;
+ private String message;
+ private String timestamp;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getMessage() {
+ return message;
+ }
+
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ public String getTimestamp() {
+ return timestamp;
+ }
+
+ public void setTimestamp(String timestamp) {
+ this.timestamp = timestamp;
+ }
+}
diff --git a/app/src/main/java/com/supwisdom/bean/EpaySynoRegisterReqBean.java b/app/src/main/java/com/supwisdom/bean/EpaySynoRegisterReqBean.java
new file mode 100644
index 0000000..920551b
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/bean/EpaySynoRegisterReqBean.java
@@ -0,0 +1,26 @@
+package com.supwisdom.bean;
+
+/**
+ * * create by zzq on 2020/8/24
+ * * @desc
+ **/
+public class EpaySynoRegisterReqBean {
+ private String schoolCode;
+ private String termDateTime;
+
+ public String getSchoolCode() {
+ return schoolCode;
+ }
+
+ public void setSchoolCode(String schoolCode) {
+ this.schoolCode = schoolCode;
+ }
+
+ public String getTermDateTime() {
+ return termDateTime;
+ }
+
+ public void setTermDateTime(String termDateTime) {
+ this.termDateTime = termDateTime;
+ }
+}
diff --git a/app/src/main/java/com/supwisdom/bean/EpaySynoRegisterStatusRetBean.java b/app/src/main/java/com/supwisdom/bean/EpaySynoRegisterStatusRetBean.java
new file mode 100644
index 0000000..bb51445
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/bean/EpaySynoRegisterStatusRetBean.java
@@ -0,0 +1,26 @@
+package com.supwisdom.bean;
+
+/**
+ * * create by zzq on 2020/8/24
+ * * @desc
+ **/
+public class EpaySynoRegisterStatusRetBean {
+ private String timestamp;
+ private String status; //可选值:unregister , unauthorized , authorized , activated
+
+ public String getTimestamp() {
+ return timestamp;
+ }
+
+ public void setTimestamp(String timestamp) {
+ this.timestamp = timestamp;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+}
diff --git a/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
index 66047bc..57adf5a 100644
--- a/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
+++ b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
@@ -1,124 +1,125 @@
-package com.supwisdom.db
-
-/**
- ** create by zzq on 2019/7/24
- ** @desc
- **/
-object BeanPropEnum {
- enum class Syspara {
- id,
- returnFlag,
- heatBeat,
- offlineEnable,
- maxOfflineDays,
- maxDayOfflineAmt,
- mngpasswd,
- fixpayGap,
- consumeShowtime,
- consumeFailShowtime,
- commTime
- }
-
- enum class ConfigPara {
- id,
- mode,
- tenantid,
- devphyid,
- psamno,
- epayIP,
- epayPort,
- epayUri,
- managePwd,
- initOK
- }
-
- enum class DynamicPara {
- id,
- appid,
- appsecret,
- deviceid,
- merchaccno,
- shopname,
- onlineseqno,
- offlineseqno,
- paraverno,
- paragroupid,
- whitelistid,
- cardverno,
- jwt,
- jwtexpire,
- token
- }
-
- enum class ControlPara {
- paraname,
- paraval
- }
-
- enum class TransdtlOnline {
- devphyid,
- transdate,
- transtime,
- devseqno,
- cardno,
- cardphyid,
- qrcode,
- transtype,
- payamt,
- extraamt,
- managefeetype,
- username,
- billno,
- reversalflag,
- reversalbillno,
- status,
- upflag
- }
-
- enum class TransdtlOffline {
- devphyid,
- transdate,
- transtime,
- devseqno,
- cardno,
- cardphyid,
- payamt,
- extraamt,
- reversalflag,
- reversalseqno,
- reversaltransdate,
- reversaltranstime,
- status,
- upflag
- }
-
- enum class WhiteList {
- cardphyid,
- cardno,
- status
- }
-
- enum class TransdtlUnion {
- username,
- cardno,
- transdate,
- transtime,
- devseqno,
- payway,
- reversalflag,
- payamt,
- status,
- upflag
- }
-
- enum class HotkeyPay {
- key,
- amount
- }
- enum class PeriodFixPay{
- id,
- begintime,
- endtime,
- amount
- }
+package com.supwisdom.db
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+object BeanPropEnum {
+ enum class Syspara {
+ id,
+ returnFlag,
+ heatBeat,
+ offlineEnable,
+ maxOfflineDays,
+ maxDayOfflineAmt,
+ mngpasswd,
+ fixpayGap,
+ consumeShowtime,
+ consumeFailShowtime,
+ commTime,
+ synoCode
+ }
+
+ enum class ConfigPara {
+ id,
+ mode,
+ tenantid,
+ devphyid,
+ psamno,
+ epayIP,
+ epayPort,
+ epayUri,
+ managePwd,
+ initOK
+ }
+
+ enum class DynamicPara {
+ id,
+ appid,
+ appsecret,
+ deviceid,
+ merchaccno,
+ shopname,
+ onlineseqno,
+ offlineseqno,
+ paraverno,
+ paragroupid,
+ whitelistid,
+ cardverno,
+ jwt,
+ jwtexpire,
+ token
+ }
+
+ enum class ControlPara {
+ paraname,
+ paraval
+ }
+
+ enum class TransdtlOnline {
+ devphyid,
+ transdate,
+ transtime,
+ devseqno,
+ cardno,
+ cardphyid,
+ qrcode,
+ transtype,
+ payamt,
+ extraamt,
+ managefeetype,
+ username,
+ billno,
+ reversalflag,
+ reversalbillno,
+ status,
+ upflag
+ }
+
+ enum class TransdtlOffline {
+ devphyid,
+ transdate,
+ transtime,
+ devseqno,
+ cardno,
+ cardphyid,
+ payamt,
+ extraamt,
+ reversalflag,
+ reversalseqno,
+ reversaltransdate,
+ reversaltranstime,
+ status,
+ upflag
+ }
+
+ enum class WhiteList {
+ cardphyid,
+ cardno,
+ status
+ }
+
+ enum class TransdtlUnion {
+ username,
+ cardno,
+ transdate,
+ transtime,
+ devseqno,
+ payway,
+ reversalflag,
+ payamt,
+ status,
+ upflag
+ }
+
+ enum class HotkeyPay {
+ key,
+ amount
+ }
+ enum class PeriodFixPay{
+ id,
+ begintime,
+ endtime,
+ amount
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/ConfigParaDao.kt b/app/src/main/java/com/supwisdom/db/ConfigParaDao.kt
index 1b7df2d..4d6a35b 100644
--- a/app/src/main/java/com/supwisdom/db/ConfigParaDao.kt
+++ b/app/src/main/java/com/supwisdom/db/ConfigParaDao.kt
@@ -1,120 +1,122 @@
-package com.supwisdom.db
-
-import android.content.ContentValues
-import android.content.Context
-import android.database.Cursor
-import com.supwisdom.entity.ConfigParaRecord
-import java.util.concurrent.locks.Lock
-
-/**
- ** create by zzq on 2019/7/24
- ** @desc
- **/
-class ConfigParaDao constructor(context: Context) {
- private val INDEX = "1"
- private val TABLE = DBLocalHelper.TABLE_NAME_CONFIGPARA
- private val dbHelper = DBLocalHelper.getInstance(context)
-
- fun getLock(): Lock {
- return dbHelper.getLock()
- }
-
- fun replace(record: ConfigParaRecord): Boolean {
- val db = dbHelper.readableDatabase
- val values = getContentValues(record)
- try {
- db.beginTransaction()
- if (db.replace(TABLE, null, values) > 0) {
- db.setTransactionSuccessful()
- return true
- }
- } finally {
- db.endTransaction()
- }
- return false
- }
-
- fun update(record: ConfigParaRecord): Boolean {
- val db = dbHelper.writableDatabase
- val values = getContentValues(record)
- try {
- db.beginTransaction()
- if (db.update(
- TABLE,
- values,
- BeanPropEnum.ConfigPara.id.toString() + "=?",
- arrayOf(INDEX)
- ) > 0
- ) {
- db.setTransactionSuccessful()
- return true
- }
- } finally {
- db.endTransaction()
- }
- return false
- }
-
- fun get(): ConfigParaRecord? {
- val db = dbHelper.readableDatabase
- var cursor: Cursor? = null
- try {
- cursor = db.query(
- TABLE, null, BeanPropEnum.ConfigPara.id.toString() + "=?",
- arrayOf(INDEX), null, null, null
- )
- if (cursor != null && cursor.moveToNext()) {
- return getRecord(cursor)
- }
- } finally {
- cursor?.close()
- }
- return null
- }
-
- private fun getRecord(cursor: Cursor): ConfigParaRecord {
- val record = ConfigParaRecord()
- record.mode = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.ConfigPara.mode.toString()))
- record.tenantId = cursor.getString(cursor.getColumnIndex(BeanPropEnum.ConfigPara.tenantid.toString()))
- record.devphyid = cursor.getString(cursor.getColumnIndex(BeanPropEnum.ConfigPara.devphyid.toString()))
- record.epayIP = cursor.getString(cursor.getColumnIndex(BeanPropEnum.ConfigPara.epayIP.toString()))
- record.epayPort = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.ConfigPara.epayPort.toString()))
- record.epayUri = cursor.getString(cursor.getColumnIndex(BeanPropEnum.ConfigPara.epayUri.toString()))
- record.shopPwd = cursor.getString(cursor.getColumnIndex(BeanPropEnum.ConfigPara.managePwd.toString()))
- val value = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.ConfigPara.initOK.toString()))
- record.initOK = value == 1
- return record
- }
-
- fun clear(): Boolean {
- val db = dbHelper.writableDatabase
- try {
- db.beginTransaction()
- if (db.delete(TABLE, null, null) < 0) {
- return false
- }
- db.setTransactionSuccessful()
- return true
- } finally {
- db.endTransaction()
- }
- }
-
- private fun getContentValues(record: ConfigParaRecord): ContentValues {
- val values = ContentValues()
- values.put(BeanPropEnum.ConfigPara.id.toString(), INDEX)
- values.put(BeanPropEnum.ConfigPara.mode.toString(), record.mode)
- values.put(BeanPropEnum.ConfigPara.tenantid.toString(), record.tenantId)
- values.put(BeanPropEnum.ConfigPara.devphyid.toString(), record.devphyid)
- values.put(BeanPropEnum.ConfigPara.epayIP.toString(), record.epayIP)
- values.put(BeanPropEnum.ConfigPara.epayPort.toString(), record.epayPort)
- values.put(BeanPropEnum.ConfigPara.epayUri.toString(), record.epayUri)
- values.put(BeanPropEnum.ConfigPara.managePwd.toString(), record.shopPwd)
- if (record.initOK) {
- values.put(BeanPropEnum.ConfigPara.initOK.toString(), 1)
- } else {
- values.put(BeanPropEnum.ConfigPara.initOK.toString(), 0)
- }
- return values
- }
+package com.supwisdom.db
+
+import android.content.ContentValues
+import android.content.Context
+import android.database.Cursor
+import com.supwisdom.entity.ConfigParaRecord
+import java.util.concurrent.locks.Lock
+import java.util.concurrent.locks.ReentrantLock
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class ConfigParaDao constructor(context: Context) {
+ private val INDEX = "1"
+ private val TABLE = DBLocalHelper.TABLE_NAME_CONFIGPARA
+ private val dbHelper = DBLocalHelper.getInstance(context)
+
+ private val lock = ReentrantLock()
+ fun getLock(): Lock {
+ return lock
+ }
+
+ fun replace(record: ConfigParaRecord): Boolean {
+ val db = dbHelper.readableDatabase
+ val values = getContentValues(record)
+ try {
+ db.beginTransaction()
+ if (db.replace(TABLE, null, values) > 0) {
+ db.setTransactionSuccessful()
+ return true
+ }
+ } finally {
+ db.endTransaction()
+ }
+ return false
+ }
+
+ fun update(record: ConfigParaRecord): Boolean {
+ val db = dbHelper.writableDatabase
+ val values = getContentValues(record)
+ try {
+ db.beginTransaction()
+ if (db.update(
+ TABLE,
+ values,
+ BeanPropEnum.ConfigPara.id.toString() + "=?",
+ arrayOf(INDEX)
+ ) > 0
+ ) {
+ db.setTransactionSuccessful()
+ return true
+ }
+ } finally {
+ db.endTransaction()
+ }
+ return false
+ }
+
+ fun get(): ConfigParaRecord? {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ try {
+ cursor = db.query(
+ TABLE, null, BeanPropEnum.ConfigPara.id.toString() + "=?",
+ arrayOf(INDEX), null, null, null
+ )
+ if (cursor != null && cursor.moveToNext()) {
+ return getRecord(cursor)
+ }
+ } finally {
+ cursor?.close()
+ }
+ return null
+ }
+
+ private fun getRecord(cursor: Cursor): ConfigParaRecord {
+ val record = ConfigParaRecord()
+ record.mode = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.ConfigPara.mode.toString()))
+ record.tenantId = cursor.getString(cursor.getColumnIndex(BeanPropEnum.ConfigPara.tenantid.toString()))
+ record.devphyid = cursor.getString(cursor.getColumnIndex(BeanPropEnum.ConfigPara.devphyid.toString()))
+ record.epayIP = cursor.getString(cursor.getColumnIndex(BeanPropEnum.ConfigPara.epayIP.toString()))
+ record.epayPort = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.ConfigPara.epayPort.toString()))
+ record.epayUri = cursor.getString(cursor.getColumnIndex(BeanPropEnum.ConfigPara.epayUri.toString()))
+ record.shopPwd = cursor.getString(cursor.getColumnIndex(BeanPropEnum.ConfigPara.managePwd.toString()))
+ val value = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.ConfigPara.initOK.toString()))
+ record.initOK = value == 1
+ return record
+ }
+
+ fun clear(): Boolean {
+ val db = dbHelper.writableDatabase
+ try {
+ db.beginTransaction()
+ if (db.delete(TABLE, null, null) < 0) {
+ return false
+ }
+ db.setTransactionSuccessful()
+ return true
+ } finally {
+ db.endTransaction()
+ }
+ }
+
+ private fun getContentValues(record: ConfigParaRecord): ContentValues {
+ val values = ContentValues()
+ values.put(BeanPropEnum.ConfigPara.id.toString(), INDEX)
+ values.put(BeanPropEnum.ConfigPara.mode.toString(), record.mode)
+ values.put(BeanPropEnum.ConfigPara.tenantid.toString(), record.tenantId)
+ values.put(BeanPropEnum.ConfigPara.devphyid.toString(), record.devphyid)
+ values.put(BeanPropEnum.ConfigPara.epayIP.toString(), record.epayIP)
+ values.put(BeanPropEnum.ConfigPara.epayPort.toString(), record.epayPort)
+ values.put(BeanPropEnum.ConfigPara.epayUri.toString(), record.epayUri)
+ values.put(BeanPropEnum.ConfigPara.managePwd.toString(), record.shopPwd)
+ if (record.initOK) {
+ values.put(BeanPropEnum.ConfigPara.initOK.toString(), 1)
+ } else {
+ values.put(BeanPropEnum.ConfigPara.initOK.toString(), 0)
+ }
+ return values
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/ControlParaDao.kt b/app/src/main/java/com/supwisdom/db/ControlParaDao.kt
index d683d9c..6e92af4 100644
--- a/app/src/main/java/com/supwisdom/db/ControlParaDao.kt
+++ b/app/src/main/java/com/supwisdom/db/ControlParaDao.kt
@@ -1,118 +1,120 @@
-package com.supwisdom.db
-
-import android.content.ContentValues
-import android.content.Context
-import android.database.Cursor
-import com.supwisdom.entity.ControlParaRecord
-import java.util.concurrent.locks.Lock
-
-/**
- ** create by zzq on 2019/7/24
- ** @desc
- **/
-class ControlParaDao constructor(context: Context) {
- private val dbHelper = DBParaHelper.getInstance(context)
- private val TABLE = DBParaHelper.TABLE_NAME_CONTROLPARA
-
- fun getLock(): Lock {
- return dbHelper.getLock()
- }
-
- fun replace(record: ControlParaRecord): Boolean {
- val db = dbHelper.readableDatabase
- val values = getContentValues(record)
- try {
- db.beginTransaction()
- if (db.replace(TABLE, null, values) > 0) {
- return false
- }
- db.setTransactionSuccessful()
- return true
- } finally {
- db.endTransaction()
- }
- }
-
- fun replace(paraname: String, paraval: String): Boolean {
- val db = dbHelper.readableDatabase
- val values = ContentValues()
- values.put(BeanPropEnum.ControlPara.paraname.toString(), paraname)
- values.put(BeanPropEnum.ControlPara.paraval.toString(), paraval)
- try {
- db.beginTransaction()
- if (db.replace(TABLE, null, values) < 0) {
- return false
- }
- db.setTransactionSuccessful()
- return true
- } finally {
- db.endTransaction()
- }
- }
-
- fun update(record: ControlParaRecord): Boolean {
- val db = dbHelper.writableDatabase
- val values = getContentValues(record)
- try {
- db.beginTransaction()
- if (db.update(
- TABLE,
- values,
- BeanPropEnum.ControlPara.paraname.toString() + "=?",
- arrayOf(record.paraname)
- ) > 0
- ) {
- db.setTransactionSuccessful()
- return true
- }
- } finally {
- db.endTransaction()
- }
- return false
- }
-
- fun get(paraname: String): ControlParaRecord? {
- val db = dbHelper.readableDatabase
- var cursor: Cursor? = null
- try {
- cursor = db.query(
- TABLE, null, BeanPropEnum.ControlPara.paraname.toString() + "=?",
- arrayOf(paraname), null, null, null
- )
- if (cursor != null && cursor.moveToNext()) {
- return getRecord(cursor)
- }
- } finally {
- cursor?.close()
- }
- return null
- }
-
- fun clear(): Boolean {
- val db = dbHelper.writableDatabase
- try {
- db.beginTransaction()
- if (db.delete(TABLE, null, null) < 0) {
- return false
- }
- db.setTransactionSuccessful()
- return true
- } finally {
- db.endTransaction()
- }
- }
-
- private fun getRecord(cursor: Cursor): ControlParaRecord {
- val record = ControlParaRecord()
- record.paraname = cursor.getString(cursor.getColumnIndex(BeanPropEnum.ControlPara.paraname.toString()))
- record.paraval = cursor.getString(cursor.getColumnIndex(BeanPropEnum.ControlPara.paraval.toString()))
- return record
- }
-
- private fun getContentValues(record: ControlParaRecord): ContentValues {
- val values = ContentValues()
- values.put(BeanPropEnum.ControlPara.paraname.toString(), record.paraname)
- values.put(BeanPropEnum.ControlPara.paraval.toString(), record.paraval)
- return values
- }
+package com.supwisdom.db
+
+import android.content.ContentValues
+import android.content.Context
+import android.database.Cursor
+import com.supwisdom.entity.ControlParaRecord
+import java.util.concurrent.locks.Lock
+import java.util.concurrent.locks.ReentrantLock
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class ControlParaDao constructor(context: Context) {
+ private val dbHelper = DBParaHelper.getInstance(context)
+ private val TABLE = DBParaHelper.TABLE_NAME_CONTROLPARA
+
+ private val lock = ReentrantLock()
+ fun getLock(): Lock {
+ return lock
+ }
+
+ fun replace(record: ControlParaRecord): Boolean {
+ val db = dbHelper.readableDatabase
+ val values = getContentValues(record)
+ try {
+ db.beginTransaction()
+ if (db.replace(TABLE, null, values) > 0) {
+ return false
+ }
+ db.setTransactionSuccessful()
+ return true
+ } finally {
+ db.endTransaction()
+ }
+ }
+
+ fun replace(paraname: String, paraval: String): Boolean {
+ val db = dbHelper.readableDatabase
+ val values = ContentValues()
+ values.put(BeanPropEnum.ControlPara.paraname.toString(), paraname)
+ values.put(BeanPropEnum.ControlPara.paraval.toString(), paraval)
+ try {
+ db.beginTransaction()
+ if (db.replace(TABLE, null, values) < 0) {
+ return false
+ }
+ db.setTransactionSuccessful()
+ return true
+ } finally {
+ db.endTransaction()
+ }
+ }
+
+ fun update(record: ControlParaRecord): Boolean {
+ val db = dbHelper.writableDatabase
+ val values = getContentValues(record)
+ try {
+ db.beginTransaction()
+ if (db.update(
+ TABLE,
+ values,
+ BeanPropEnum.ControlPara.paraname.toString() + "=?",
+ arrayOf(record.paraname)
+ ) > 0
+ ) {
+ db.setTransactionSuccessful()
+ return true
+ }
+ } finally {
+ db.endTransaction()
+ }
+ return false
+ }
+
+ fun get(paraname: String): ControlParaRecord? {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ try {
+ cursor = db.query(
+ TABLE, null, BeanPropEnum.ControlPara.paraname.toString() + "=?",
+ arrayOf(paraname), null, null, null
+ )
+ if (cursor != null && cursor.moveToNext()) {
+ return getRecord(cursor)
+ }
+ } finally {
+ cursor?.close()
+ }
+ return null
+ }
+
+ fun clear(): Boolean {
+ val db = dbHelper.writableDatabase
+ try {
+ db.beginTransaction()
+ if (db.delete(TABLE, null, null) < 0) {
+ return false
+ }
+ db.setTransactionSuccessful()
+ return true
+ } finally {
+ db.endTransaction()
+ }
+ }
+
+ private fun getRecord(cursor: Cursor): ControlParaRecord {
+ val record = ControlParaRecord()
+ record.paraname = cursor.getString(cursor.getColumnIndex(BeanPropEnum.ControlPara.paraname.toString()))
+ record.paraval = cursor.getString(cursor.getColumnIndex(BeanPropEnum.ControlPara.paraval.toString()))
+ return record
+ }
+
+ private fun getContentValues(record: ControlParaRecord): ContentValues {
+ val values = ContentValues()
+ values.put(BeanPropEnum.ControlPara.paraname.toString(), record.paraname)
+ values.put(BeanPropEnum.ControlPara.paraval.toString(), record.paraval)
+ return values
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/DBLocalHelper.kt b/app/src/main/java/com/supwisdom/db/DBLocalHelper.kt
index 6b11ddf..39dedd6 100644
--- a/app/src/main/java/com/supwisdom/db/DBLocalHelper.kt
+++ b/app/src/main/java/com/supwisdom/db/DBLocalHelper.kt
@@ -1,67 +1,60 @@
-package com.supwisdom.db
-
-import android.content.Context
-import android.database.sqlite.SQLiteDatabase
-import android.database.sqlite.SQLiteOpenHelper
-import java.util.concurrent.locks.Lock
-import java.util.concurrent.locks.ReentrantLock
-
-/**
- ** create by zzq on 2019/7/31
- ** @desc 本地配置文件
- **/
-class DBLocalHelper private constructor(context: Context) :
- SQLiteOpenHelper(context, DB_NAME, null, VERSION) {
- companion object {
- private val DB_NAME = "db_local_config"
- private val VERSION = 2
- private var instance: DBLocalHelper? = null
-
- const val TABLE_NAME_CONFIGPARA = "tb_configpara"
-
- fun getInstance(context: Context): DBLocalHelper {
- if (null == instance) {
- synchronized(DBLocalHelper::class.java) {
- if (null == instance) {
- instance = DBLocalHelper(context)
- }
- }
- }
- return instance!!
- }
- }
-
- /**
- * SQL for create table
- */
- private val CREATE_TABLE_NAME_CONFIGPARA = ("create table IF NOT EXISTS "
- + TABLE_NAME_CONFIGPARA + " ( "
- + BeanPropEnum.ConfigPara.id + " long primary key, "
- + BeanPropEnum.ConfigPara.mode + " integer, "
- + BeanPropEnum.ConfigPara.tenantid + " varchar(64), "
- + BeanPropEnum.ConfigPara.devphyid + " varchar(8), "
- + BeanPropEnum.ConfigPara.psamno + " varchar(12), "
- + BeanPropEnum.ConfigPara.epayIP + " varchar(128), "
- + BeanPropEnum.ConfigPara.epayPort + " integer, "
- + BeanPropEnum.ConfigPara.epayUri + " varchar(128), "
- + BeanPropEnum.ConfigPara.managePwd + " varchar(6),"
- + BeanPropEnum.ConfigPara.initOK + " integer ) ")
- private val DROP_TABLE_NAME_CONFIGPARA = "DROP TABLE IF EXISTS $TABLE_NAME_CONFIGPARA"
-
- private val lock = ReentrantLock()
- fun getLock(): Lock {
- return lock
- }
-
- override fun onCreate(db: SQLiteDatabase) {
- db.execSQL(CREATE_TABLE_NAME_CONFIGPARA)
- }
-
- override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
- if (oldVersion < newVersion) {
- if (2 <= newVersion && oldVersion < 2) {
- db.execSQL("alter table $TABLE_NAME_CONFIGPARA add column ${BeanPropEnum.ConfigPara.tenantid} varchar(64)")
- }
- }
- }
+package com.supwisdom.db
+
+import android.content.Context
+import android.database.sqlite.SQLiteDatabase
+import android.database.sqlite.SQLiteOpenHelper
+
+/**
+ ** create by zzq on 2019/7/31
+ ** @desc 本地配置文件
+ **/
+class DBLocalHelper private constructor(context: Context) :
+ SQLiteOpenHelper(context, DB_NAME, null, VERSION) {
+ companion object {
+ private val DB_NAME = "db_local_config"
+ private val VERSION = 2
+ private var instance: DBLocalHelper? = null
+
+ const val TABLE_NAME_CONFIGPARA = "tb_configpara"
+
+ fun getInstance(context: Context): DBLocalHelper {
+ if (null == instance) {
+ synchronized(DBLocalHelper::class.java) {
+ if (null == instance) {
+ instance = DBLocalHelper(context)
+ }
+ }
+ }
+ return instance!!
+ }
+ }
+
+ /**
+ * SQL for create table
+ */
+ private val CREATE_TABLE_NAME_CONFIGPARA = ("create table IF NOT EXISTS "
+ + TABLE_NAME_CONFIGPARA + " ( "
+ + BeanPropEnum.ConfigPara.id + " long primary key, "
+ + BeanPropEnum.ConfigPara.mode + " integer, "
+ + BeanPropEnum.ConfigPara.tenantid + " varchar(64), "
+ + BeanPropEnum.ConfigPara.devphyid + " varchar(8), "
+ + BeanPropEnum.ConfigPara.psamno + " varchar(12), "
+ + BeanPropEnum.ConfigPara.epayIP + " varchar(128), "
+ + BeanPropEnum.ConfigPara.epayPort + " integer, "
+ + BeanPropEnum.ConfigPara.epayUri + " varchar(128), "
+ + BeanPropEnum.ConfigPara.managePwd + " varchar(6),"
+ + BeanPropEnum.ConfigPara.initOK + " integer ) ")
+ private val DROP_TABLE_NAME_CONFIGPARA = "DROP TABLE IF EXISTS $TABLE_NAME_CONFIGPARA"
+
+ override fun onCreate(db: SQLiteDatabase) {
+ db.execSQL(CREATE_TABLE_NAME_CONFIGPARA)
+ }
+
+ override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
+ if (oldVersion < newVersion) {
+ if (2 <= newVersion && oldVersion < 2) {
+ db.execSQL("alter table $TABLE_NAME_CONFIGPARA add column ${BeanPropEnum.ConfigPara.tenantid} varchar(64)")
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/DBParaHelper.kt b/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
index 8a0f51d..0743d76 100644
--- a/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
+++ b/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
@@ -1,119 +1,119 @@
-package com.supwisdom.db
-
-import android.content.Context
-import android.database.sqlite.SQLiteDatabase
-import android.database.sqlite.SQLiteOpenHelper
-import java.util.concurrent.locks.Lock
-import java.util.concurrent.locks.ReentrantLock
-
-/**
- ** create by zzq on 2019/7/24
- ** @desc
- **/
-class DBParaHelper private constructor(context: Context) : SQLiteOpenHelper(context, DB_NAME, null, VERSION) {
- companion object {
- private val DB_NAME = "db_para"
- private val VERSION = 2
-
- val TABLE_NAME_SYSPARA = "tb_syspara"
- val TABLE_NAME_DYNAMICPARA = "tb_dynamicpara"
- val TABLE_NAME_CONTROLPARA = "tb_controlpara"
- val TABLE_NAME_WHITELIST = "tb_whitelist"
- val TABLE_NAME_HOTKEY = "tb_hotkey"
- val TABLE_NAME_PERIOD_FIX = "tb_period_fix"
-
- private var instance: DBParaHelper? = null
- fun getInstance(context: Context): DBParaHelper {
- if (null == instance) {
- synchronized(DBParaHelper::class.java) {
- if (null == instance) {
- instance = DBParaHelper(context)
- }
- }
- }
- return instance!!
- }
- }
-
-
- /**
- * SQL for create table
- */
- private val CREATE_TABLE_NAME_PERIOD_FIX = ("create table IF NOT EXISTS "
- + TABLE_NAME_PERIOD_FIX + " ( "
- + BeanPropEnum.PeriodFixPay.id + " integer primary key autoincrement,"
- + BeanPropEnum.PeriodFixPay.begintime + " varchar(4),"
- + BeanPropEnum.PeriodFixPay.endtime + " varchar(4),"
- + BeanPropEnum.PeriodFixPay.amount + " integer )")
- private val CREATE_TABLE_NAME_HOTKEY = ("create table IF NOT EXISTS "
- + TABLE_NAME_HOTKEY + " ( "
- + BeanPropEnum.HotkeyPay.key + " long primary key,"
- + BeanPropEnum.HotkeyPay.amount + " integer)")
- private val CREATE_TABLE_NAME_WHITELIST = ("create table IF NOT EXISTS "
- + TABLE_NAME_WHITELIST + " ( "
- + BeanPropEnum.WhiteList.cardphyid + " varchar(32),"
- + BeanPropEnum.WhiteList.cardno + " varchar(32),"
- + BeanPropEnum.WhiteList.status + " varchar(16),"
- + "primary key ("
- + BeanPropEnum.WhiteList.cardphyid + ","
- + BeanPropEnum.WhiteList.cardno + ") )")
-
- private val CREATE_TABLE_NAME_CONTROLPARA = ("create table IF NOT EXISTS "
- + TABLE_NAME_CONTROLPARA + " ( "
- + BeanPropEnum.ControlPara.paraname + " varchar(64) primary key,"
- + BeanPropEnum.ControlPara.paraval + " varchar(64) )")
- private val CREATE_TABLE_NAME_DYNAMICPARA = ("create table IF NOT EXISTS "
- + TABLE_NAME_DYNAMICPARA + " ( "
- + BeanPropEnum.DynamicPara.id + " long primary key, "
- + BeanPropEnum.DynamicPara.appid + " varchar(16), "
- + BeanPropEnum.DynamicPara.appsecret + " varchar(128), "
- + BeanPropEnum.DynamicPara.deviceid + " integer, "
- + BeanPropEnum.DynamicPara.merchaccno + " integer, "
- + BeanPropEnum.DynamicPara.shopname + " varchar(32), "
- + BeanPropEnum.DynamicPara.onlineseqno + " integer, "
- + BeanPropEnum.DynamicPara.offlineseqno + " integer, "
- + BeanPropEnum.DynamicPara.paraverno + " integer, "
- + BeanPropEnum.DynamicPara.paragroupid + " integer, "
- + BeanPropEnum.DynamicPara.whitelistid + " integer, "
- + BeanPropEnum.DynamicPara.cardverno + " varchar(32),"
- + BeanPropEnum.DynamicPara.jwt + " varchar(254),"
- + BeanPropEnum.DynamicPara.jwtexpire + " varchar(16),"
- + BeanPropEnum.DynamicPara.token + " varchar(32) )")
- private val DROP_TABLE_NAME_DYNAMICPARA = "DROP TABLE IF EXISTS $TABLE_NAME_DYNAMICPARA"
- private val CREATE_TABLE_NAME_SYSPARA = ("create table IF NOT EXISTS "
- + TABLE_NAME_SYSPARA + " ( "
- + BeanPropEnum.Syspara.id + " long primary key, "
- + BeanPropEnum.Syspara.returnFlag + " integer, "
- + BeanPropEnum.Syspara.heatBeat + " integer, "
- + BeanPropEnum.Syspara.offlineEnable + " integer, "
- + BeanPropEnum.Syspara.maxOfflineDays + " integer, "
- + BeanPropEnum.Syspara.maxDayOfflineAmt + " integer, "
- + BeanPropEnum.Syspara.mngpasswd + " char(6), "
- + BeanPropEnum.Syspara.fixpayGap + " integer, "
- + BeanPropEnum.Syspara.consumeShowtime + " integer, "
- + BeanPropEnum.Syspara.consumeFailShowtime + " integer, "
- + BeanPropEnum.Syspara.commTime + " integer )")
- private val DROP_TABLE_NAME_SYSPARA = "DROP TABLE IF EXISTS $TABLE_NAME_SYSPARA"
-
- private val lock = ReentrantLock()
- fun getLock(): Lock {
- return lock
- }
-
- override fun onCreate(db: SQLiteDatabase) {
- db.execSQL(CREATE_TABLE_NAME_SYSPARA)
- db.execSQL(CREATE_TABLE_NAME_DYNAMICPARA)
- db.execSQL(CREATE_TABLE_NAME_CONTROLPARA)
- db.execSQL(CREATE_TABLE_NAME_WHITELIST)
- db.execSQL(CREATE_TABLE_NAME_HOTKEY)
- db.execSQL(CREATE_TABLE_NAME_PERIOD_FIX)
- }
-
- override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
- if (oldVersion < newVersion) {
- if (oldVersion < 2 && newVersion >= 2) {
- db.execSQL(CREATE_TABLE_NAME_PERIOD_FIX)
- }
- }
- }
+package com.supwisdom.db
+
+import android.content.Context
+import android.database.sqlite.SQLiteDatabase
+import android.database.sqlite.SQLiteOpenHelper
+import java.util.concurrent.locks.Lock
+import java.util.concurrent.locks.ReentrantLock
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class DBParaHelper private constructor(context: Context) :
+ SQLiteOpenHelper(context, DB_NAME, null, VERSION) {
+ companion object {
+ private val DB_NAME = "db_para"
+ private val VERSION = 3
+
+ val TABLE_NAME_SYSPARA = "tb_syspara"
+ val TABLE_NAME_DYNAMICPARA = "tb_dynamicpara"
+ val TABLE_NAME_CONTROLPARA = "tb_controlpara"
+ val TABLE_NAME_WHITELIST = "tb_whitelist"
+ val TABLE_NAME_HOTKEY = "tb_hotkey"
+ val TABLE_NAME_PERIOD_FIX = "tb_period_fix"
+
+ private var instance: DBParaHelper? = null
+ fun getInstance(context: Context): DBParaHelper {
+ if (null == instance) {
+ synchronized(DBParaHelper::class.java) {
+ if (null == instance) {
+ instance = DBParaHelper(context)
+ }
+ }
+ }
+ return instance!!
+ }
+ }
+
+
+ /**
+ * SQL for create table
+ */
+ private val CREATE_TABLE_NAME_PERIOD_FIX = ("create table IF NOT EXISTS "
+ + TABLE_NAME_PERIOD_FIX + " ( "
+ + BeanPropEnum.PeriodFixPay.id + " integer primary key autoincrement,"
+ + BeanPropEnum.PeriodFixPay.begintime + " varchar(4) default 0,"
+ + BeanPropEnum.PeriodFixPay.endtime + " varchar(4) default 0,"
+ + BeanPropEnum.PeriodFixPay.amount + " integer default 0 )")
+ private val CREATE_TABLE_NAME_HOTKEY = ("create table IF NOT EXISTS "
+ + TABLE_NAME_HOTKEY + " ( "
+ + BeanPropEnum.HotkeyPay.key + " long primary key,"
+ + BeanPropEnum.HotkeyPay.amount + " integer)")
+ private val CREATE_TABLE_NAME_WHITELIST = ("create table IF NOT EXISTS "
+ + TABLE_NAME_WHITELIST + " ( "
+ + BeanPropEnum.WhiteList.cardphyid + " varchar(32) default 0,"
+ + BeanPropEnum.WhiteList.cardno + " varchar(32) default 0,"
+ + BeanPropEnum.WhiteList.status + " varchar(16) default 0,"
+ + "primary key ("
+ + BeanPropEnum.WhiteList.cardphyid + ","
+ + BeanPropEnum.WhiteList.cardno + ") )")
+
+ private val CREATE_TABLE_NAME_CONTROLPARA = ("create table IF NOT EXISTS "
+ + TABLE_NAME_CONTROLPARA + " ( "
+ + BeanPropEnum.ControlPara.paraname + " varchar(64) primary key,"
+ + BeanPropEnum.ControlPara.paraval + " varchar(64) default 0)")
+ private val CREATE_TABLE_NAME_DYNAMICPARA = ("create table IF NOT EXISTS "
+ + TABLE_NAME_DYNAMICPARA + " ( "
+ + BeanPropEnum.DynamicPara.id + " long primary key, "
+ + BeanPropEnum.DynamicPara.appid + " varchar(16) default 0, "
+ + BeanPropEnum.DynamicPara.appsecret + " varchar(128) default 0, "
+ + BeanPropEnum.DynamicPara.deviceid + " integer default 0, "
+ + BeanPropEnum.DynamicPara.merchaccno + " integer default 0, "
+ + BeanPropEnum.DynamicPara.shopname + " varchar(32) default 0, "
+ + BeanPropEnum.DynamicPara.onlineseqno + " integer default 0, "
+ + BeanPropEnum.DynamicPara.offlineseqno + " integer default 0, "
+ + BeanPropEnum.DynamicPara.paraverno + " integer default 0, "
+ + BeanPropEnum.DynamicPara.paragroupid + " integer default 0, "
+ + BeanPropEnum.DynamicPara.whitelistid + " integer default 0, "
+ + BeanPropEnum.DynamicPara.cardverno + " varchar(32) default 0,"
+ + BeanPropEnum.DynamicPara.jwt + " varchar(254) default 0,"
+ + BeanPropEnum.DynamicPara.jwtexpire + " varchar(16) default 0,"
+ + BeanPropEnum.DynamicPara.token + " varchar(32) default 0)")
+ private val DROP_TABLE_NAME_DYNAMICPARA = "DROP TABLE IF EXISTS $TABLE_NAME_DYNAMICPARA"
+ private val CREATE_TABLE_NAME_SYSPARA = ("create table IF NOT EXISTS "
+ + TABLE_NAME_SYSPARA + " ( "
+ + BeanPropEnum.Syspara.id + " long primary key, "
+ + BeanPropEnum.Syspara.returnFlag + " integer default 0, "
+ + BeanPropEnum.Syspara.heatBeat + " integer default 0, "
+ + BeanPropEnum.Syspara.offlineEnable + " integer default 0, "
+ + BeanPropEnum.Syspara.maxOfflineDays + " integer default 0,"
+ + BeanPropEnum.Syspara.maxDayOfflineAmt + " integer default 0,"
+ + BeanPropEnum.Syspara.mngpasswd + " varchar(6) default 0, "
+ + BeanPropEnum.Syspara.fixpayGap + " integer default 0,"
+ + BeanPropEnum.Syspara.consumeShowtime + " integer default 0,"
+ + BeanPropEnum.Syspara.synoCode + " integer default 0,"
+ + BeanPropEnum.Syspara.consumeFailShowtime + " integer default 0,"
+ + BeanPropEnum.Syspara.commTime + " integer default 0)")
+ private val DROP_TABLE_NAME_SYSPARA = "DROP TABLE IF EXISTS $TABLE_NAME_SYSPARA"
+
+ override fun onCreate(db: SQLiteDatabase) {
+ db.execSQL(CREATE_TABLE_NAME_SYSPARA)
+ db.execSQL(CREATE_TABLE_NAME_DYNAMICPARA)
+ db.execSQL(CREATE_TABLE_NAME_CONTROLPARA)
+ db.execSQL(CREATE_TABLE_NAME_WHITELIST)
+ db.execSQL(CREATE_TABLE_NAME_HOTKEY)
+ db.execSQL(CREATE_TABLE_NAME_PERIOD_FIX)
+ }
+
+ override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
+ if (oldVersion < newVersion) {
+ if (oldVersion < 2 && newVersion >= 2) {
+ db.execSQL(CREATE_TABLE_NAME_PERIOD_FIX)
+ }
+ if (oldVersion < 3 && newVersion >= 3) {
+ db.execSQL("alter table add column ${BeanPropEnum.Syspara.synoCode} integer default 0")
+ }
+ }
+ }
}
\ 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 328f06d..790a7fb 100644
--- a/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
+++ b/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
@@ -1,87 +1,91 @@
-package com.supwisdom.db
-
-import android.content.Context
-import android.database.sqlite.SQLiteDatabase
-import android.database.sqlite.SQLiteOpenHelper
-import java.util.concurrent.locks.Lock
-import java.util.concurrent.locks.ReentrantLock
-
-/**
- ** create by zzq on 2019/7/24
- ** @desc
- **/
-class DBTransdtlHelper private constructor(context: Context) : SQLiteOpenHelper(context, DB_NAME, null, VERSION) {
- companion object {
- private val DB_NAME = "db_transdtl"
- private val VERSION = 1
- private var instance: DBTransdtlHelper? = null
-
- 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) {
- synchronized(DBTransdtlHelper::class.java) {
- if (null == instance) {
- instance = DBTransdtlHelper(context)
- }
- }
- }
- return instance!!
- }
- }
-
- /**
- * SQL for create table
- */
- private val CRAETE_TABLE_NAME_DTL_ONLINE = ("create table IF NOT EXISTS "
- + TABLE_NAME_DTL_ONLINE + " ( "
- + BeanPropEnum.TransdtlOnline.devphyid + " char(8),"
- + BeanPropEnum.TransdtlOnline.transdate + " char(8),"
- + BeanPropEnum.TransdtlOnline.transtime + " char(6),"
- + BeanPropEnum.TransdtlOnline.devseqno + " long primary key,"
- + BeanPropEnum.TransdtlOnline.cardno + " varchar(32),"
- + BeanPropEnum.TransdtlOnline.cardphyid + " varchar(32),"
- + BeanPropEnum.TransdtlOnline.qrcode + " varchar(254),"
- + BeanPropEnum.TransdtlOnline.transtype + " varchar(8),"
- + BeanPropEnum.TransdtlOnline.payamt + " integer,"
- + BeanPropEnum.TransdtlOnline.extraamt + " integer,"
- + BeanPropEnum.TransdtlOnline.managefeetype + " varchar(10),"
- + BeanPropEnum.TransdtlOnline.username + " varchar(32),"
- + BeanPropEnum.TransdtlOnline.billno + " varchar(32),"
- + BeanPropEnum.TransdtlOnline.reversalflag + " varchar(8),"
- + BeanPropEnum.TransdtlOnline.reversalbillno + " varchar(32),"
- + BeanPropEnum.TransdtlOnline.status + " varchar(8),"
- + BeanPropEnum.TransdtlOnline.upflag + " integer )")
- private val CRAETE_TABLE_NAME_DTL_OFFLINE = ("create table IF NOT EXISTS "
- + TABLE_NAME_DTL_OFFLINE + " ( "
- + BeanPropEnum.TransdtlOffline.devphyid + " char(8),"
- + BeanPropEnum.TransdtlOffline.transdate + " char(8),"
- + BeanPropEnum.TransdtlOffline.transtime + " char(6),"
- + BeanPropEnum.TransdtlOffline.devseqno + " long primary key,"
- + BeanPropEnum.TransdtlOffline.cardno + " varchar(32),"
- + BeanPropEnum.TransdtlOffline.cardphyid + " varchar(32),"
- + BeanPropEnum.TransdtlOffline.payamt + " integer,"
- + BeanPropEnum.TransdtlOffline.extraamt + " integer,"
- + BeanPropEnum.TransdtlOffline.reversalflag + " varchar(8),"
- + BeanPropEnum.TransdtlOffline.reversalseqno + " integer,"
- + BeanPropEnum.TransdtlOffline.reversaltransdate + " char(8),"
- + BeanPropEnum.TransdtlOffline.reversaltranstime + " char(6),"
- + BeanPropEnum.TransdtlOffline.status + " varchar(8),"
- + BeanPropEnum.TransdtlOffline.upflag + " integer )")
-
- private val lock = ReentrantLock()
- fun getLock(): Lock {
- return lock
- }
-
- override fun onCreate(db: SQLiteDatabase) {
- db.execSQL(CRAETE_TABLE_NAME_DTL_ONLINE)
- db.execSQL(CRAETE_TABLE_NAME_DTL_OFFLINE)
- }
-
- override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
- if (oldVersion < newVersion) {
- }
- }
+package com.supwisdom.db
+
+import android.content.Context
+import android.database.sqlite.SQLiteDatabase
+import android.database.sqlite.SQLiteOpenHelper
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class DBTransdtlHelper private constructor(context: Context) :
+ SQLiteOpenHelper(context, DB_NAME, null, VERSION) {
+ companion object {
+ private val DB_NAME = "db_transdtl"
+ private val VERSION = 2
+ private var instance: DBTransdtlHelper? = null
+
+ 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) {
+ synchronized(DBTransdtlHelper::class.java) {
+ if (null == instance) {
+ instance = DBTransdtlHelper(context)
+ }
+ }
+ }
+ return instance!!
+ }
+ }
+
+ /**
+ * SQL for create table
+ */
+ private val CRAETE_TABLE_NAME_DTL_ONLINE = ("create table IF NOT EXISTS "
+ + TABLE_NAME_DTL_ONLINE + " ( "
+ + BeanPropEnum.TransdtlOnline.devphyid + " varchar(8) default 0,"
+ + BeanPropEnum.TransdtlOnline.transdate + " varchar(8) default 0,"
+ + BeanPropEnum.TransdtlOnline.transtime + " varchar(6) default 0,"
+ + BeanPropEnum.TransdtlOnline.devseqno + " long primary key,"
+ + BeanPropEnum.TransdtlOnline.cardno + " varchar(32) default 0,"
+ + BeanPropEnum.TransdtlOnline.cardphyid + " varchar(32) default 0,"
+ + BeanPropEnum.TransdtlOnline.qrcode + " varchar(254) default 0,"
+ + BeanPropEnum.TransdtlOnline.transtype + " varchar(8) default 0,"
+ + BeanPropEnum.TransdtlOnline.payamt + " integer default 0,"
+ + BeanPropEnum.TransdtlOnline.extraamt + " integer default 0,"
+ + BeanPropEnum.TransdtlOnline.managefeetype + " varchar(10) default 0,"
+ + BeanPropEnum.TransdtlOnline.username + " varchar(32) default 0,"
+ + BeanPropEnum.TransdtlOnline.billno + " varchar(32) default 0,"
+ + BeanPropEnum.TransdtlOnline.reversalflag + " varchar(8) default 0,"
+ + BeanPropEnum.TransdtlOnline.reversalbillno + " varchar(32) default 0,"
+ + BeanPropEnum.TransdtlOnline.status + " varchar(8) default 0,"
+ + BeanPropEnum.TransdtlOnline.upflag + " integer default 0)")
+ private val CREATE_INDEX_NAME_DTLONL_TRANSDATE = ("create index idx_dtlonl_transdate on "
+ + TABLE_NAME_DTL_ONLINE + " (" + BeanPropEnum.TransdtlOnline.transdate + ")")
+ private val CRAETE_TABLE_NAME_DTL_OFFLINE = ("create table IF NOT EXISTS "
+ + TABLE_NAME_DTL_OFFLINE + " ( "
+ + BeanPropEnum.TransdtlOffline.devphyid + " varchar(8) default 0,"
+ + BeanPropEnum.TransdtlOffline.transdate + " varchar(8) default 0,"
+ + BeanPropEnum.TransdtlOffline.transtime + " varchar(6) default 0,"
+ + BeanPropEnum.TransdtlOffline.devseqno + " long primary key,"
+ + BeanPropEnum.TransdtlOffline.cardno + " varchar(32) default 0,"
+ + BeanPropEnum.TransdtlOffline.cardphyid + " varchar(32) default 0,"
+ + BeanPropEnum.TransdtlOffline.payamt + " integer default 0,"
+ + BeanPropEnum.TransdtlOffline.extraamt + " integer default 0,"
+ + BeanPropEnum.TransdtlOffline.reversalflag + " varchar(8) default 0,"
+ + BeanPropEnum.TransdtlOffline.reversalseqno + " integer default 0,"
+ + BeanPropEnum.TransdtlOffline.reversaltransdate + " varchar(8) default 0,"
+ + BeanPropEnum.TransdtlOffline.reversaltranstime + " varchar(6) default 0,"
+ + BeanPropEnum.TransdtlOffline.status + " varchar(8) default 0,"
+ + BeanPropEnum.TransdtlOffline.upflag + " integer default 0)")
+ private val CREATE_INDEX_NAME_DTLOFF_TRANSDATE = ("create index idx_dtloff_transdate on "
+ + TABLE_NAME_DTL_OFFLINE + " ( " + BeanPropEnum.TransdtlOffline.transdate + ")")
+
+ override fun onCreate(db: SQLiteDatabase) {
+ db.execSQL(CRAETE_TABLE_NAME_DTL_ONLINE)
+ db.execSQL(CRAETE_TABLE_NAME_DTL_OFFLINE)
+ db.execSQL(CREATE_INDEX_NAME_DTLONL_TRANSDATE)
+ db.execSQL(CREATE_INDEX_NAME_DTLOFF_TRANSDATE)
+ }
+
+ override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
+ if (oldVersion < newVersion) {
+ if (oldVersion < 2 && newVersion >= 2) {
+ db.execSQL(CREATE_INDEX_NAME_DTLONL_TRANSDATE)
+ db.execSQL(CREATE_INDEX_NAME_DTLOFF_TRANSDATE)
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt b/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt
index a0fc815..077a290 100644
--- a/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt
+++ b/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt
@@ -1,121 +1,143 @@
-package com.supwisdom.db
-
-import android.content.ContentValues
-import android.content.Context
-import android.database.Cursor
-import com.supwisdom.entity.DynamicParaRecord
-import java.util.concurrent.locks.Lock
-
-/**
- ** create by zzq on 2019/7/24
- ** @desc
- **/
-class DynamicParaDao constructor(context: Context) {
- private val INDEX = "1" // 主键
- private val dbHelper = DBParaHelper.getInstance(context)
- private val TABLE = DBParaHelper.TABLE_NAME_DYNAMICPARA
-
- fun getLock(): Lock {
- return dbHelper.getLock()
- }
-
- fun replace(record: DynamicParaRecord): Boolean {
- val db = dbHelper.readableDatabase
- val values = getContentValues(record)
- try {
- db.beginTransaction()
- if (db.replace(TABLE, null, values) > 0) {
- db.setTransactionSuccessful()
- return true
- }
- } finally {
- db.endTransaction()
- }
- return false
- }
-
- fun update(record: DynamicParaRecord): Boolean {
- val db = dbHelper.writableDatabase
- val values = getContentValues(record)
- try {
- db.beginTransaction()
- if (db.update(TABLE, values, BeanPropEnum.DynamicPara.id.toString() + "=?", arrayOf(INDEX)) > 0) {
- db.setTransactionSuccessful()
- return true
- }
- } finally {
- db.endTransaction()
- }
- return false
- }
-
- fun get(): DynamicParaRecord? {
- val db = dbHelper.readableDatabase
- var cursor: Cursor? = null
- try {
- cursor = db.query(
- TABLE, null, BeanPropEnum.DynamicPara.id.toString() + "=?",
- arrayOf(INDEX), null, null, null
- )
- if (cursor != null && cursor.moveToNext()) {
- return getRecord(cursor)
- }
- } finally {
- cursor?.close()
- }
- return null
- }
-
- fun clear(): Boolean {
- val db = dbHelper.writableDatabase
- try {
- db.beginTransaction()
- if (db.delete(TABLE, null, null) < 0) {
- return false
- }
- db.setTransactionSuccessful()
- return true
- } finally {
- db.endTransaction()
- }
- }
-
- private fun getRecord(cursor: Cursor): DynamicParaRecord {
- val record = DynamicParaRecord()
- record.appid = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.appid.toString()))
- record.appsecret = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.appsecret.toString()))
- record.deviceid = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.deviceid.toString()))
- record.merchaccno = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.merchaccno.toString()))
- record.shopname = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.shopname.toString()))
- record.onlineseqno = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.onlineseqno.toString()))
- record.offlineseqno = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.offlineseqno.toString()))
- record.paraverno = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.paraverno.toString()))
- record.paragroupid = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.paragroupid.toString()))
- record.whitelistid = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.whitelistid.toString()))
- record.cardverno = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.cardverno.toString()))
- record.jwt = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.jwt.toString()))
- record.jwtExpire = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.jwtexpire.toString()))
- record.token = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.token.toString()))
- return record
- }
-
- private fun getContentValues(record: DynamicParaRecord): ContentValues {
- val values = ContentValues()
- values.put(BeanPropEnum.DynamicPara.id.toString(), INDEX)
- values.put(BeanPropEnum.DynamicPara.appid.toString(), record.appid)
- values.put(BeanPropEnum.DynamicPara.appsecret.toString(), record.appsecret)
- values.put(BeanPropEnum.DynamicPara.deviceid.toString(), record.deviceid)
- values.put(BeanPropEnum.DynamicPara.merchaccno.toString(), record.merchaccno)
- values.put(BeanPropEnum.DynamicPara.shopname.toString(), record.shopname)
- values.put(BeanPropEnum.DynamicPara.onlineseqno.toString(), record.onlineseqno)
- values.put(BeanPropEnum.DynamicPara.offlineseqno.toString(), record.offlineseqno)
- values.put(BeanPropEnum.DynamicPara.paraverno.toString(), record.paraverno)
- values.put(BeanPropEnum.DynamicPara.paragroupid.toString(), record.paragroupid)
- values.put(BeanPropEnum.DynamicPara.whitelistid.toString(), record.whitelistid)
- values.put(BeanPropEnum.DynamicPara.cardverno.toString(), record.cardverno)
- values.put(BeanPropEnum.DynamicPara.jwt.toString(), record.jwt)
- values.put(BeanPropEnum.DynamicPara.token.toString(), record.token)
- values.put(BeanPropEnum.DynamicPara.jwtexpire.toString(), record.jwtExpire)
- return values
- }
+package com.supwisdom.db
+
+import android.content.ContentValues
+import android.content.Context
+import android.database.Cursor
+import com.supwisdom.entity.DynamicParaRecord
+import java.util.concurrent.locks.Lock
+import java.util.concurrent.locks.ReentrantLock
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class DynamicParaDao constructor(context: Context) {
+ private val INDEX = "1" // 主键
+ private val dbHelper = DBParaHelper.getInstance(context)
+ private val TABLE = DBParaHelper.TABLE_NAME_DYNAMICPARA
+
+ private val lock = ReentrantLock()
+ fun getLock(): Lock {
+ return lock
+ }
+
+ fun replace(record: DynamicParaRecord): Boolean {
+ val db = dbHelper.readableDatabase
+ val values = getContentValues(record)
+ try {
+ db.beginTransaction()
+ if (db.replace(TABLE, null, values) > 0) {
+ db.setTransactionSuccessful()
+ return true
+ }
+ } finally {
+ db.endTransaction()
+ }
+ return false
+ }
+
+ fun update(record: DynamicParaRecord): Boolean {
+ val db = dbHelper.writableDatabase
+ val values = getContentValues(record)
+ try {
+ db.beginTransaction()
+ if (db.update(
+ TABLE,
+ values,
+ BeanPropEnum.DynamicPara.id.toString() + "=?",
+ arrayOf(INDEX)
+ ) > 0
+ ) {
+ db.setTransactionSuccessful()
+ return true
+ }
+ } finally {
+ db.endTransaction()
+ }
+ return false
+ }
+
+ fun get(): DynamicParaRecord? {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ try {
+ cursor = db.query(
+ TABLE, null, BeanPropEnum.DynamicPara.id.toString() + "=?",
+ arrayOf(INDEX), null, null, null
+ )
+ if (cursor != null && cursor.moveToNext()) {
+ return getRecord(cursor)
+ }
+ } finally {
+ cursor?.close()
+ }
+ return null
+ }
+
+ fun clear(): Boolean {
+ val db = dbHelper.writableDatabase
+ try {
+ db.beginTransaction()
+ if (db.delete(TABLE, null, null) < 0) {
+ return false
+ }
+ db.setTransactionSuccessful()
+ return true
+ } finally {
+ db.endTransaction()
+ }
+ }
+
+ private fun getRecord(cursor: Cursor): DynamicParaRecord {
+ val record = DynamicParaRecord()
+ record.appid =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.appid.toString()))
+ record.appsecret =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.appsecret.toString()))
+ record.deviceid =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.deviceid.toString()))
+ record.merchaccno =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.merchaccno.toString()))
+ record.shopname =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.shopname.toString()))
+ record.onlineseqno =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.onlineseqno.toString()))
+ record.offlineseqno =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.offlineseqno.toString()))
+ record.paraverno =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.paraverno.toString()))
+ record.paragroupid =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.paragroupid.toString()))
+ record.whitelistid =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.whitelistid.toString()))
+ record.cardverno =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.cardverno.toString()))
+ record.jwt =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.jwt.toString()))
+ record.jwtExpire =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.jwtexpire.toString()))
+ record.token =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.token.toString()))
+ return record
+ }
+
+ private fun getContentValues(record: DynamicParaRecord): ContentValues {
+ val values = ContentValues()
+ values.put(BeanPropEnum.DynamicPara.id.toString(), INDEX)
+ values.put(BeanPropEnum.DynamicPara.appid.toString(), record.appid)
+ values.put(BeanPropEnum.DynamicPara.appsecret.toString(), record.appsecret)
+ values.put(BeanPropEnum.DynamicPara.deviceid.toString(), record.deviceid)
+ values.put(BeanPropEnum.DynamicPara.merchaccno.toString(), record.merchaccno)
+ values.put(BeanPropEnum.DynamicPara.shopname.toString(), record.shopname)
+ values.put(BeanPropEnum.DynamicPara.onlineseqno.toString(), record.onlineseqno)
+ values.put(BeanPropEnum.DynamicPara.offlineseqno.toString(), record.offlineseqno)
+ values.put(BeanPropEnum.DynamicPara.paraverno.toString(), record.paraverno)
+ values.put(BeanPropEnum.DynamicPara.paragroupid.toString(), record.paragroupid)
+ values.put(BeanPropEnum.DynamicPara.whitelistid.toString(), record.whitelistid)
+ values.put(BeanPropEnum.DynamicPara.cardverno.toString(), record.cardverno)
+ values.put(BeanPropEnum.DynamicPara.jwt.toString(), record.jwt)
+ values.put(BeanPropEnum.DynamicPara.token.toString(), record.token)
+ values.put(BeanPropEnum.DynamicPara.jwtexpire.toString(), record.jwtExpire)
+ return values
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/HotkeyPayDao.kt b/app/src/main/java/com/supwisdom/db/HotkeyPayDao.kt
index 3826967..925992d 100644
--- a/app/src/main/java/com/supwisdom/db/HotkeyPayDao.kt
+++ b/app/src/main/java/com/supwisdom/db/HotkeyPayDao.kt
@@ -1,98 +1,101 @@
-package com.supwisdom.db
-
-import android.content.ContentValues
-import android.content.Context
-import android.database.Cursor
-import com.supwisdom.entity.HotKeyPayRecord
-import java.util.concurrent.locks.Lock
-
-/**
- ** create by zzq on 2019/9/4
- ** @desc
- **/
-class HotkeyPayDao constructor(context: Context) {
- private val dbHelper = DBParaHelper.getInstance(context)
- private val TABLE = DBParaHelper.TABLE_NAME_HOTKEY
-
- fun getLock(): Lock {
- return dbHelper.getLock()
- }
-
- fun replace(record: HotKeyPayRecord): Boolean {
- val db = dbHelper.readableDatabase
- val values = getContentValues(record)
- try {
- db.beginTransaction()
- if (db.replace(TABLE, null, values) > 0) {
- db.setTransactionSuccessful()
- return true
- }
- } finally {
- db.endTransaction()
- }
- return false
- }
-
- fun save(list: List<HotKeyPayRecord>): Boolean {
- val db = dbHelper.writableDatabase
- try {
- db.beginTransaction()
- if (db.delete(TABLE, null, null) < 0) {
- return false
- }
- list.forEach {
- val values = getContentValues(it)
- if (db.insert(TABLE, null, values) <= 0) {
- return false
- }
- }
- db.setTransactionSuccessful()
- return true
- } finally {
- db.endTransaction()
- }
- }
-
- fun get(): List<HotKeyPayRecord>? {
- val db = dbHelper.readableDatabase
- var cursor: Cursor? = null
- try {
- cursor = db.query(TABLE, null, null, null, null, null, null)
- val list = ArrayList<HotKeyPayRecord>()
- while (cursor != null && cursor.moveToNext()) {
- list.add(getRecord(cursor))
- }
- return list
- } finally {
- cursor?.close()
- }
- }
-
- fun clear(): Boolean {
- val db = dbHelper.writableDatabase
- try {
- db.beginTransaction()
- if (db.delete(TABLE, null, null) < 0) {
- return false
- }
- db.setTransactionSuccessful()
- return true
- } finally {
- db.endTransaction()
- }
- }
-
- private fun getRecord(cursor: Cursor): HotKeyPayRecord {
- val record = HotKeyPayRecord()
- record.key = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.HotkeyPay.key.toString()))
- record.amount = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.HotkeyPay.amount.toString()))
- return record
- }
-
- private fun getContentValues(record: HotKeyPayRecord): ContentValues {
- val values = ContentValues()
- values.put(BeanPropEnum.HotkeyPay.key.toString(), record.key)
- values.put(BeanPropEnum.HotkeyPay.amount.toString(), record.amount)
- return values
- }
+package com.supwisdom.db
+
+import android.content.ContentValues
+import android.content.Context
+import android.database.Cursor
+import com.supwisdom.entity.HotKeyPayRecord
+import java.util.concurrent.locks.Lock
+import java.util.concurrent.locks.ReentrantLock
+
+/**
+ ** create by zzq on 2019/9/4
+ ** @desc
+ **/
+class HotkeyPayDao constructor(context: Context) {
+ private val dbHelper = DBParaHelper.getInstance(context)
+ private val TABLE = DBParaHelper.TABLE_NAME_HOTKEY
+
+ private val lock = ReentrantLock()
+ fun getLock(): Lock {
+ return lock
+ }
+
+ fun replace(record: HotKeyPayRecord): Boolean {
+ val db = dbHelper.readableDatabase
+ val values = getContentValues(record)
+ try {
+ db.beginTransaction()
+ if (db.replace(TABLE, null, values) > 0) {
+ db.setTransactionSuccessful()
+ return true
+ }
+ } finally {
+ db.endTransaction()
+ }
+ return false
+ }
+
+ fun save(list: List<HotKeyPayRecord>): Boolean {
+ val db = dbHelper.writableDatabase
+ try {
+ db.beginTransaction()
+ if (db.delete(TABLE, null, null) < 0) {
+ return false
+ }
+ list.forEach {
+ val values = getContentValues(it)
+ if (db.insert(TABLE, null, values) <= 0) {
+ return false
+ }
+ }
+ db.setTransactionSuccessful()
+ return true
+ } finally {
+ db.endTransaction()
+ }
+ }
+
+ fun get(): List<HotKeyPayRecord>? {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ try {
+ cursor = db.query(TABLE, null, null, null, null, null, null)
+ val list = ArrayList<HotKeyPayRecord>()
+ while (cursor != null && cursor.moveToNext()) {
+ list.add(getRecord(cursor))
+ }
+ return list
+ } finally {
+ cursor?.close()
+ }
+ }
+
+ fun clear(): Boolean {
+ val db = dbHelper.writableDatabase
+ try {
+ db.beginTransaction()
+ if (db.delete(TABLE, null, null) < 0) {
+ return false
+ }
+ db.setTransactionSuccessful()
+ return true
+ } finally {
+ db.endTransaction()
+ }
+ }
+
+ private fun getRecord(cursor: Cursor): HotKeyPayRecord {
+ val record = HotKeyPayRecord()
+ record.key = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.HotkeyPay.key.toString()))
+ record.amount =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.HotkeyPay.amount.toString()))
+ return record
+ }
+
+ private fun getContentValues(record: HotKeyPayRecord): ContentValues {
+ val values = ContentValues()
+ values.put(BeanPropEnum.HotkeyPay.key.toString(), record.key)
+ values.put(BeanPropEnum.HotkeyPay.amount.toString(), record.amount)
+ return values
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/PeriodFixPayDao.kt b/app/src/main/java/com/supwisdom/db/PeriodFixPayDao.kt
index dce63c0..ab34216 100644
--- a/app/src/main/java/com/supwisdom/db/PeriodFixPayDao.kt
+++ b/app/src/main/java/com/supwisdom/db/PeriodFixPayDao.kt
@@ -1,100 +1,104 @@
-package com.supwisdom.db
-
-import android.content.ContentValues
-import android.content.Context
-import android.database.Cursor
-import com.supwisdom.entity.PeriodFixPayRecord
-import java.util.concurrent.locks.Lock
-
-/**
- ** create by zzq on 2019/11/20
- ** @desc
- **/
-class PeriodFixPayDao constructor(context: Context) {
- private val dbHelper = DBParaHelper.getInstance(context)
- private val TABLE = DBParaHelper.TABLE_NAME_PERIOD_FIX
-
- fun getLock(): Lock {
- return dbHelper.getLock()
- }
-
- fun replace(record: PeriodFixPayRecord): Boolean {
- val db = dbHelper.readableDatabase
- val values = getContentValues(record)
- try {
- db.beginTransaction()
- if (db.replace(TABLE, null, values) > 0) {
- db.setTransactionSuccessful()
- return true
- }
- } finally {
- db.endTransaction()
- }
- return false
- }
-
- fun save(list: List<PeriodFixPayRecord>): Boolean {
- val db = dbHelper.writableDatabase
- try {
- db.beginTransaction()
- if (db.delete(TABLE, null, null) < 0) {
- return false
- }
- list.forEach {
- val values = getContentValues(it)
- if (db.insert(TABLE, null, values) <= 0) {
- return false
- }
- }
- db.setTransactionSuccessful()
- return true
- } finally {
- db.endTransaction()
- }
- }
-
- fun get(): List<PeriodFixPayRecord>? {
- val db = dbHelper.readableDatabase
- var cursor: Cursor? = null
- try {
- cursor = db.query(TABLE, null, null, null, null, null, null)
- val list = ArrayList<PeriodFixPayRecord>()
- while (cursor != null && cursor.moveToNext()) {
- list.add(getRecord(cursor))
- }
- return list
- } finally {
- cursor?.close()
- }
- }
-
- fun clear(): Boolean {
- val db = dbHelper.writableDatabase
- try {
- db.beginTransaction()
- if (db.delete(TABLE, null, null) < 0) {
- return false
- }
- db.setTransactionSuccessful()
- return true
- } finally {
- db.endTransaction()
- }
- }
-
- private fun getRecord(cursor: Cursor): PeriodFixPayRecord {
- val record = PeriodFixPayRecord()
- record.beginTime = cursor.getString(cursor.getColumnIndex(BeanPropEnum.PeriodFixPay.begintime.toString()))
- record.endTime = cursor.getString(cursor.getColumnIndex(BeanPropEnum.PeriodFixPay.endtime.toString()))
- record.amount = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.PeriodFixPay.amount.toString()))
- return record
- }
-
- private fun getContentValues(record: PeriodFixPayRecord): ContentValues {
- val values = ContentValues()
- values.put(BeanPropEnum.PeriodFixPay.begintime.toString(), record.beginTime)
- values.put(BeanPropEnum.PeriodFixPay.endtime.toString(), record.endTime)
- values.put(BeanPropEnum.PeriodFixPay.amount.toString(), record.amount)
- return values
- }
+package com.supwisdom.db
+
+import android.content.ContentValues
+import android.content.Context
+import android.database.Cursor
+import com.supwisdom.entity.PeriodFixPayRecord
+import java.util.concurrent.locks.Lock
+import java.util.concurrent.locks.ReentrantLock
+
+/**
+ ** create by zzq on 2019/11/20
+ ** @desc
+ **/
+class PeriodFixPayDao constructor(context: Context) {
+ private val dbHelper = DBParaHelper.getInstance(context)
+ private val TABLE = DBParaHelper.TABLE_NAME_PERIOD_FIX
+ private val lock = ReentrantLock()
+ fun getLock(): Lock {
+ return lock
+ }
+
+ fun replace(record: PeriodFixPayRecord): Boolean {
+ val db = dbHelper.readableDatabase
+ val values = getContentValues(record)
+ try {
+ db.beginTransaction()
+ if (db.replace(TABLE, null, values) > 0) {
+ db.setTransactionSuccessful()
+ return true
+ }
+ } finally {
+ db.endTransaction()
+ }
+ return false
+ }
+
+ fun save(list: List<PeriodFixPayRecord>): Boolean {
+ val db = dbHelper.writableDatabase
+ try {
+ db.beginTransaction()
+ if (db.delete(TABLE, null, null) < 0) {
+ return false
+ }
+ list.forEach {
+ val values = getContentValues(it)
+ if (db.insert(TABLE, null, values) <= 0) {
+ return false
+ }
+ }
+ db.setTransactionSuccessful()
+ return true
+ } finally {
+ db.endTransaction()
+ }
+ }
+
+ fun get(): List<PeriodFixPayRecord>? {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ try {
+ cursor = db.query(TABLE, null, null, null, null, null, null)
+ val list = ArrayList<PeriodFixPayRecord>()
+ while (cursor != null && cursor.moveToNext()) {
+ list.add(getRecord(cursor))
+ }
+ return list
+ } finally {
+ cursor?.close()
+ }
+ }
+
+ fun clear(): Boolean {
+ val db = dbHelper.writableDatabase
+ try {
+ db.beginTransaction()
+ if (db.delete(TABLE, null, null) < 0) {
+ return false
+ }
+ db.setTransactionSuccessful()
+ return true
+ } finally {
+ db.endTransaction()
+ }
+ }
+
+ private fun getRecord(cursor: Cursor): PeriodFixPayRecord {
+ val record = PeriodFixPayRecord()
+ record.beginTime =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.PeriodFixPay.begintime.toString()))
+ record.endTime =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.PeriodFixPay.endtime.toString()))
+ record.amount =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.PeriodFixPay.amount.toString()))
+ return record
+ }
+
+ private fun getContentValues(record: PeriodFixPayRecord): ContentValues {
+ val values = ContentValues()
+ values.put(BeanPropEnum.PeriodFixPay.begintime.toString(), record.beginTime)
+ values.put(BeanPropEnum.PeriodFixPay.endtime.toString(), record.endTime)
+ values.put(BeanPropEnum.PeriodFixPay.amount.toString(), record.amount)
+ return values
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/Pos.kt b/app/src/main/java/com/supwisdom/db/Pos.kt
index 9972af0..883f8dc 100644
--- a/app/src/main/java/com/supwisdom/db/Pos.kt
+++ b/app/src/main/java/com/supwisdom/db/Pos.kt
@@ -1,379 +1,379 @@
-package com.supwisdom.db
-
-import android.content.Context
-import com.supwisdom.entity.*
-
-/**
- ** create by zzq on 2019/7/24
- ** @desc
- **/
-class Pos constructor(context: Context) {
- private val sdContext = SDContext(context)
- private val configParaDao = ConfigParaDao(sdContext)
- private var cfgRecord: ConfigParaRecord? = null
- private val dynamicParaDao = DynamicParaDao(context)
- private var dyRecord: DynamicParaRecord? = null
- private val sysParaDao = SysParaDao(context)
- private var sysRecord: SysParaRecord? = null
- private val controlParaDao = ControlParaDao(context)
- private val whiteListDao = WhiteListDao(context)
- private val hotkeyPayDao = HotkeyPayDao(context)
- private val periodFixPayDao = PeriodFixPayDao(context)
- private val transdtlOnlineDao = TransdtlOnlineDao(sdContext)
- private val transdtlOfflineDao = TransdtlOfflineDao(sdContext)
- private val transdtlUnionDao = TransdtlUnionDao(sdContext)
- private var onlMaxSeqno = 0
- private var offMaxSeqno = 0
-
- init {
- }
-
- /**
- * 设备参数
- */
- fun replaceConfigPara(record: ConfigParaRecord): Boolean {
- try {
- configParaDao.getLock().lock()
- if (configParaDao.replace(record)) {
- cfgRecord = record
- return true
- }
- } finally {
- configParaDao.getLock().unlock()
- }
- return false
- }
-
- fun getConfigPara(): ConfigParaRecord? {
- if (cfgRecord == null) {
- try {
- configParaDao.getLock().lock()
- cfgRecord = configParaDao.get()
- } finally {
- configParaDao.getLock().unlock()
- }
- }
- return cfgRecord
- }
-
- fun saveHotkeyPay(list: List<HotKeyPayRecord>): Boolean {
- try {
- hotkeyPayDao.getLock().lock()
- return hotkeyPayDao.save(list)
- } finally {
- hotkeyPayDao.getLock().unlock()
- }
- }
-
- fun getHotkeyPay(): List<HotKeyPayRecord>? {
- try {
- hotkeyPayDao.getLock().lock()
- return hotkeyPayDao.get()
- } finally {
- hotkeyPayDao.getLock().unlock()
- }
- }
-
- fun savePeriodFixPay(list: List<PeriodFixPayRecord>): Boolean {
- try {
- periodFixPayDao.getLock().lock()
- return periodFixPayDao.save(list)
- } finally {
- periodFixPayDao.getLock().unlock()
- }
- }
-
- fun getPeriodFixPay(): List<PeriodFixPayRecord>? {
- try {
- periodFixPayDao.getLock().lock()
- return periodFixPayDao.get()
- } finally {
- periodFixPayDao.getLock().unlock()
- }
- }
-
- fun replaceControlPara(record: ControlParaRecord): Boolean {
- try {
- controlParaDao.getLock().lock()
- return controlParaDao.replace(record)
- } finally {
- controlParaDao.getLock().unlock()
- }
- }
-
- fun replaceControlPara(paraname: String, paraval: String): Boolean {
- try {
- controlParaDao.getLock().lock()
- return controlParaDao.replace(paraname, paraval)
- } finally {
- controlParaDao.getLock().unlock()
- }
- }
-
- fun getControlPara(paraname: String): ControlParaRecord? {
- try {
- controlParaDao.getLock().lock()
- return controlParaDao.get(paraname)
- } finally {
- controlParaDao.getLock().unlock()
- }
- }
-
- fun replaceDynamicPara(record: DynamicParaRecord): Boolean {
- try {
- dynamicParaDao.getLock().lock()
- if (dynamicParaDao.replace(record)) {
- dyRecord = record
- return true
- }
- } finally {
- dynamicParaDao.getLock().unlock()
- }
- return false
- }
-
- fun getDynamicPara(): DynamicParaRecord? {
- if (dyRecord == null) {
- try {
- dynamicParaDao.getLock().lock()
- dyRecord = dynamicParaDao.get()
- } finally {
- dynamicParaDao.getLock().unlock()
- }
- }
- return dyRecord
- }
-
- fun replaceSysPara(record: SysParaRecord): Boolean {
- try {
- sysParaDao.getLock().lock()
- if (sysParaDao.replace(record)) {
- sysRecord = record
- return true
- }
- } finally {
- sysParaDao.getLock().unlock()
- }
- return false
- }
-
- fun getSysPara(): SysParaRecord? {
- if (sysRecord == null) {
- try {
- sysParaDao.getLock().lock()
- sysRecord = sysParaDao.get()
- } finally {
- sysParaDao.getLock().unlock()
- }
- }
- return sysRecord
- }
-
- fun saveWhiteList(list: List<WhiteListRecord>): Boolean {
- try {
- whiteListDao.getLock().lock()
- return whiteListDao.replace(list)
- } finally {
- whiteListDao.getLock().unlock()
- }
- }
-
- fun getWhiteList(cardphyid: String, cardno: String): WhiteListRecord? {
- try {
- whiteListDao.getLock().lock()
- return whiteListDao.get(cardphyid, cardno)
- } finally {
- whiteListDao.getLock().unlock()
- }
- }
-
- fun clearWhiteList(): Boolean {
- try {
- whiteListDao.getLock().lock()
- return whiteListDao.clear()
- } finally {
- whiteListDao.getLock().unlock()
- }
- }
-
- fun getTransdtlOnlineMaxSeqno(): Int {
- if (onlMaxSeqno == 0) {
- try {
- transdtlOnlineDao.getLock().lock()
- onlMaxSeqno = transdtlOnlineDao.getMaxSeqno()
- } finally {
- transdtlOnlineDao.getLock().unlock()
- }
- }
- return onlMaxSeqno
- }
-
- fun getTransdtlOnlineLast(): TransdtlOnlineRecord? {
- try {
- transdtlOnlineDao.getLock().lock()
- return transdtlOnlineDao.getLast()
- } finally {
- transdtlOnlineDao.getLock().unlock()
- }
- }
-
- fun getTransdtlOnline(): List<TransdtlOnlineRecord> {
- try {
- transdtlOnlineDao.getLock().lock()
- return transdtlOnlineDao.getAll()
- } finally {
- transdtlOnlineDao.getLock().unlock()
- }
- }
-
- fun getTransdtlOnlineUnconfirm(): List<TransdtlOnlineRecord> {
- try {
- transdtlOnlineDao.getLock().lock()
- return transdtlOnlineDao.getUnconfirm()
- } finally {
- transdtlOnlineDao.getLock().unlock()
- }
- }
-
- fun getTransdtlUnconfirmNum(): Int {
- var num = 0
- try {
- transdtlOnlineDao.getLock().lock()
- num += transdtlOnlineDao.getUnconfirmNum()
- } finally {
- transdtlOnlineDao.getLock().unlock()
- }
- try {
- transdtlOfflineDao.getLock().lock()
- num += transdtlOfflineDao.getUnconfirmNum()
- } finally {
- transdtlOfflineDao.getLock().unlock()
- }
- return num
- }
-
- fun saveTransdtlOnline(record: TransdtlOnlineRecord): Boolean {
- try {
- transdtlOnlineDao.getLock().lock()
- if (transdtlOnlineDao.save(record)) {
- onlMaxSeqno = record.devseqno
- return true
- }
- return false
- } finally {
- transdtlOnlineDao.getLock().unlock()
- }
- }
-
- fun updateTransdtlOnline(record: TransdtlOnlineRecord): Boolean {
- try {
- transdtlOnlineDao.getLock().lock()
- return transdtlOnlineDao.update(record)
- } finally {
- transdtlOnlineDao.getLock().unlock()
- }
- }
-
- fun clearTransdtlOnline(date: String): Boolean {
- try {
- transdtlOnlineDao.getLock().lock()
- return transdtlOnlineDao.clear(date)
- } finally {
- transdtlOnlineDao.getLock().unlock()
- }
- }
-
- fun getTransdtlOfflineMaxSeqno(): Int {
- if (offMaxSeqno == 0) {
- try {
- transdtlOfflineDao.getLock().lock()
- offMaxSeqno = transdtlOfflineDao.getMaxSeqno()
- } finally {
- transdtlOfflineDao.getLock().unlock()
- }
- }
- return offMaxSeqno
- }
-
- fun getTransdtlOfflineUnconfirm(): List<TransdtlOfflineRecord> {
- try {
- transdtlOfflineDao.getLock().lock()
- return transdtlOfflineDao.getUnconfirm()
- } finally {
- transdtlOfflineDao.getLock().unlock()
- }
- }
-
- fun getTransdtlOffline(): List<TransdtlOfflineRecord> {
- try {
- transdtlOfflineDao.getLock().lock()
- return transdtlOfflineDao.getAll()
- } finally {
- transdtlOfflineDao.getLock().unlock()
- }
- }
-
- fun getTransdtlOfflineAmt(date: String, cardno: String, cardphyid: String): Int {
- try {
- transdtlOfflineDao.getLock().lock()
- return transdtlOfflineDao.getOfflineAmt(date, cardno, cardphyid)
- } finally {
- transdtlOfflineDao.getLock().unlock()
- }
- }
-
- fun getTransdtlOfflineLast(): TransdtlOfflineRecord? {
- try {
- transdtlOfflineDao.getLock().lock()
- return transdtlOfflineDao.getLast()
- } finally {
- transdtlOfflineDao.getLock().unlock()
- }
- }
-
- fun saveTransdtlOffline(record: TransdtlOfflineRecord): Boolean {
- try {
- transdtlOfflineDao.getLock().lock()
- if (transdtlOfflineDao.save(record)) {
- offMaxSeqno = record.devseqno
- return true
- }
- return false
- } finally {
- transdtlOfflineDao.getLock().unlock()
- }
- }
-
- fun updateTransdtlOffline(record: TransdtlOfflineRecord): Boolean {
- try {
- transdtlOfflineDao.getLock().lock()
- return transdtlOfflineDao.update(record)
- } finally {
- transdtlOfflineDao.getLock().unlock()
- }
- }
-
- fun clearTransdtlOffline(date: String): Boolean {
- try {
- transdtlOfflineDao.getLock().lock()
- return transdtlOfflineDao.clear(date)
- } finally {
- transdtlOfflineDao.getLock().unlock()
- }
- }
-
- /**
- * @param date yyyyMMdd
- * @param offset 流水偏移量
- * @param flag 0--全部流水 1--成功流水 2--失败流水
- * @param num 查询数量
- */
- fun getTransdtlUnion(date: String, offset: Int, flag: Int, num: Int): List<TransdtlUnionRecord> {
- try {
- transdtlUnionDao.getLock().lock()
- return transdtlUnionDao.get(date, offset, flag, num)
- } finally {
- transdtlUnionDao.getLock().unlock()
- }
- }
+package com.supwisdom.db
+
+import android.content.Context
+import com.supwisdom.entity.*
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class Pos constructor(context: Context) {
+ private val sdContext = SDContext(context)
+ private val configParaDao = ConfigParaDao(sdContext)
+ private var cfgRecord: ConfigParaRecord? = null
+ private val dynamicParaDao = DynamicParaDao(context)
+ private var dyRecord: DynamicParaRecord? = null
+ private val sysParaDao = SysParaDao(context)
+ private var sysRecord: SysParaRecord? = null
+ private val controlParaDao = ControlParaDao(context)
+ private val whiteListDao = WhiteListDao(context)
+ private val hotkeyPayDao = HotkeyPayDao(context)
+ private val periodFixPayDao = PeriodFixPayDao(context)
+ private val transdtlOnlineDao = TransdtlOnlineDao(sdContext)
+ private val transdtlOfflineDao = TransdtlOfflineDao(sdContext)
+ private val transdtlUnionDao = TransdtlUnionDao(sdContext)
+ private var onlMaxSeqno = 0
+ private var offMaxSeqno = 0
+
+ init {
+ }
+
+ /**
+ * 设备参数
+ */
+ fun replaceConfigPara(record: ConfigParaRecord): Boolean {
+ try {
+ configParaDao.getLock().lock()
+ if (configParaDao.replace(record)) {
+ cfgRecord = record
+ return true
+ }
+ } finally {
+ configParaDao.getLock().unlock()
+ }
+ return false
+ }
+
+ fun getConfigPara(): ConfigParaRecord? {
+ if (cfgRecord == null) {
+ try {
+ configParaDao.getLock().lock()
+ cfgRecord = configParaDao.get()
+ } finally {
+ configParaDao.getLock().unlock()
+ }
+ }
+ return cfgRecord
+ }
+
+ fun saveHotkeyPay(list: List<HotKeyPayRecord>): Boolean {
+ try {
+ hotkeyPayDao.getLock().lock()
+ return hotkeyPayDao.save(list)
+ } finally {
+ hotkeyPayDao.getLock().unlock()
+ }
+ }
+
+ fun getHotkeyPay(): List<HotKeyPayRecord>? {
+ try {
+ hotkeyPayDao.getLock().lock()
+ return hotkeyPayDao.get()
+ } finally {
+ hotkeyPayDao.getLock().unlock()
+ }
+ }
+
+ fun savePeriodFixPay(list: List<PeriodFixPayRecord>): Boolean {
+ try {
+ periodFixPayDao.getLock().lock()
+ return periodFixPayDao.save(list)
+ } finally {
+ periodFixPayDao.getLock().unlock()
+ }
+ }
+
+ fun getPeriodFixPay(): List<PeriodFixPayRecord>? {
+ try {
+ periodFixPayDao.getLock().lock()
+ return periodFixPayDao.get()
+ } finally {
+ periodFixPayDao.getLock().unlock()
+ }
+ }
+
+ fun replaceControlPara(record: ControlParaRecord): Boolean {
+ try {
+ controlParaDao.getLock().lock()
+ return controlParaDao.replace(record)
+ } finally {
+ controlParaDao.getLock().unlock()
+ }
+ }
+
+ fun replaceControlPara(paraname: String, paraval: String): Boolean {
+ try {
+ controlParaDao.getLock().lock()
+ return controlParaDao.replace(paraname, paraval)
+ } finally {
+ controlParaDao.getLock().unlock()
+ }
+ }
+
+ fun getControlPara(paraname: String): ControlParaRecord? {
+ try {
+ controlParaDao.getLock().lock()
+ return controlParaDao.get(paraname)
+ } finally {
+ controlParaDao.getLock().unlock()
+ }
+ }
+
+ fun replaceDynamicPara(record: DynamicParaRecord): Boolean {
+ try {
+ dynamicParaDao.getLock().lock()
+ if (dynamicParaDao.replace(record)) {
+ dyRecord = record
+ return true
+ }
+ } finally {
+ dynamicParaDao.getLock().unlock()
+ }
+ return false
+ }
+
+ fun getDynamicPara(): DynamicParaRecord? {
+ if (dyRecord == null) {
+ try {
+ dynamicParaDao.getLock().lock()
+ dyRecord = dynamicParaDao.get()
+ } finally {
+ dynamicParaDao.getLock().unlock()
+ }
+ }
+ return dyRecord
+ }
+
+ fun replaceSysPara(record: SysParaRecord): Boolean {
+ try {
+ sysParaDao.getLock().lock()
+ if (sysParaDao.replace(record)) {
+ sysRecord = record
+ return true
+ }
+ } finally {
+ sysParaDao.getLock().unlock()
+ }
+ return false
+ }
+
+ fun getSysPara(): SysParaRecord? {
+ if (sysRecord == null) {
+ try {
+ sysParaDao.getLock().lock()
+ sysRecord = sysParaDao.get()
+ } finally {
+ sysParaDao.getLock().unlock()
+ }
+ }
+ return sysRecord
+ }
+
+ fun saveWhiteList(list: List<WhiteListRecord>): Boolean {
+ try {
+ whiteListDao.getLock().lock()
+ return whiteListDao.replace(list)
+ } finally {
+ whiteListDao.getLock().unlock()
+ }
+ }
+
+ fun getWhiteList(cardphyid: String, cardno: String): WhiteListRecord? {
+ try {
+ whiteListDao.getLock().lock()
+ return whiteListDao.get(cardphyid, cardno)
+ } finally {
+ whiteListDao.getLock().unlock()
+ }
+ }
+
+ fun clearWhiteList(): Boolean {
+ try {
+ whiteListDao.getLock().lock()
+ return whiteListDao.clear()
+ } finally {
+ whiteListDao.getLock().unlock()
+ }
+ }
+
+ fun getTransdtlOnlineMaxSeqno(): Int {
+ if (onlMaxSeqno == 0) {
+ try {
+ transdtlOnlineDao.getLock().lock()
+ onlMaxSeqno = transdtlOnlineDao.getMaxSeqno()
+ } finally {
+ transdtlOnlineDao.getLock().unlock()
+ }
+ }
+ return onlMaxSeqno
+ }
+
+ fun getTransdtlOnlineLast(): TransdtlOnlineRecord? {
+ try {
+ transdtlOnlineDao.getLock().lock()
+ return transdtlOnlineDao.getLast()
+ } finally {
+ transdtlOnlineDao.getLock().unlock()
+ }
+ }
+
+ fun getTransdtlOnline(): List<TransdtlOnlineRecord> {
+ try {
+ transdtlOnlineDao.getLock().lock()
+ return transdtlOnlineDao.getAll()
+ } finally {
+ transdtlOnlineDao.getLock().unlock()
+ }
+ }
+
+ fun getTransdtlOnlineUnconfirm(): List<TransdtlOnlineRecord> {
+ try {
+ transdtlOnlineDao.getLock().lock()
+ return transdtlOnlineDao.getUnconfirm()
+ } finally {
+ transdtlOnlineDao.getLock().unlock()
+ }
+ }
+
+ fun getTransdtlUnconfirmNum(): Int {
+ var num = 0
+ try {
+ transdtlOnlineDao.getLock().lock()
+ num += transdtlOnlineDao.getUnconfirmNum()
+ } finally {
+ transdtlOnlineDao.getLock().unlock()
+ }
+ try {
+ transdtlOfflineDao.getLock().lock()
+ num += transdtlOfflineDao.getUnconfirmNum()
+ } finally {
+ transdtlOfflineDao.getLock().unlock()
+ }
+ return num
+ }
+
+ fun saveTransdtlOnline(record: TransdtlOnlineRecord): Boolean {
+ try {
+ transdtlOnlineDao.getLock().lock()
+ if (transdtlOnlineDao.save(record)) {
+ onlMaxSeqno = record.devseqno
+ return true
+ }
+ return false
+ } finally {
+ transdtlOnlineDao.getLock().unlock()
+ }
+ }
+
+ fun updateTransdtlOnline(record: TransdtlOnlineRecord): Boolean {
+ try {
+ transdtlOnlineDao.getLock().lock()
+ return transdtlOnlineDao.update(record)
+ } finally {
+ transdtlOnlineDao.getLock().unlock()
+ }
+ }
+
+ fun clearTransdtlOnline(date: String): Boolean {
+ try {
+ transdtlOnlineDao.getLock().lock()
+ return transdtlOnlineDao.clear(date)
+ } finally {
+ transdtlOnlineDao.getLock().unlock()
+ }
+ }
+
+ fun getTransdtlOfflineMaxSeqno(): Int {
+ if (offMaxSeqno == 0) {
+ try {
+ transdtlOfflineDao.getLock().lock()
+ offMaxSeqno = transdtlOfflineDao.getMaxSeqno()
+ } finally {
+ transdtlOfflineDao.getLock().unlock()
+ }
+ }
+ return offMaxSeqno
+ }
+
+ fun getTransdtlOfflineUnconfirm(): List<TransdtlOfflineRecord> {
+ try {
+ transdtlOfflineDao.getLock().lock()
+ return transdtlOfflineDao.getUnconfirm()
+ } finally {
+ transdtlOfflineDao.getLock().unlock()
+ }
+ }
+
+ fun getTransdtlOffline(): List<TransdtlOfflineRecord> {
+ try {
+ transdtlOfflineDao.getLock().lock()
+ return transdtlOfflineDao.getAll()
+ } finally {
+ transdtlOfflineDao.getLock().unlock()
+ }
+ }
+
+ fun getTransdtlOfflineAmt(date: String, cardno: String, cardphyid: String): Int {
+ try {
+ transdtlOfflineDao.getLock().lock()
+ return transdtlOfflineDao.getOfflineAmt(date, cardno, cardphyid)
+ } finally {
+ transdtlOfflineDao.getLock().unlock()
+ }
+ }
+
+ fun getTransdtlOfflineLast(): TransdtlOfflineRecord? {
+ try {
+ transdtlOfflineDao.getLock().lock()
+ return transdtlOfflineDao.getLast()
+ } finally {
+ transdtlOfflineDao.getLock().unlock()
+ }
+ }
+
+ fun saveTransdtlOffline(record: TransdtlOfflineRecord): Boolean {
+ try {
+ transdtlOfflineDao.getLock().lock()
+ if (transdtlOfflineDao.save(record)) {
+ offMaxSeqno = record.devseqno
+ return true
+ }
+ return false
+ } finally {
+ transdtlOfflineDao.getLock().unlock()
+ }
+ }
+
+ fun updateTransdtlOffline(record: TransdtlOfflineRecord): Boolean {
+ try {
+ transdtlOfflineDao.getLock().lock()
+ return transdtlOfflineDao.update(record)
+ } finally {
+ transdtlOfflineDao.getLock().unlock()
+ }
+ }
+
+ fun clearTransdtlOffline(date: String): Boolean {
+ try {
+ transdtlOfflineDao.getLock().lock()
+ return transdtlOfflineDao.clear(date)
+ } finally {
+ transdtlOfflineDao.getLock().unlock()
+ }
+ }
+
+ /**
+ * @param date yyyyMMdd
+ * @param offset 流水偏移量
+ * @param flag 0--全部流水 1--成功流水 2--失败流水
+ * @param num 查询数量
+ */
+ fun getTransdtlUnion(
+ date: String,
+ offset: Int,
+ flag: Int,
+ num: Int
+ ): List<TransdtlUnionRecord> {
+ return transdtlUnionDao.get(date, offset, flag, num)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/SysParaDao.kt b/app/src/main/java/com/supwisdom/db/SysParaDao.kt
index 50de288..6d34422 100644
--- a/app/src/main/java/com/supwisdom/db/SysParaDao.kt
+++ b/app/src/main/java/com/supwisdom/db/SysParaDao.kt
@@ -1,119 +1,143 @@
-package com.supwisdom.db
-
-import android.content.ContentValues
-import android.content.Context
-import android.database.Cursor
-import com.supwisdom.entity.SysParaRecord
-import java.util.concurrent.locks.Lock
-
-/**
- ** create by zzq on 2019/7/24
- ** @desc
- **/
-class SysParaDao constructor(context: Context) {
- private val INDEX = "1" // 主键
- private val dbHelper = DBParaHelper.getInstance(context)
- private val TABLE = DBParaHelper.TABLE_NAME_SYSPARA
-
- fun getLock(): Lock {
- return dbHelper.getLock()
- }
-
- fun replace(record: SysParaRecord): Boolean {
- val db = dbHelper.readableDatabase
- val values = getContentValues(record)
- try {
- db.beginTransaction()
- if (db.replace(TABLE, null, values) > 0) {
- db.setTransactionSuccessful()
- return true
- }
- } finally {
- db.endTransaction()
- }
- return false
- }
-
- fun update(record: SysParaRecord): Boolean {
- val db = dbHelper.writableDatabase
- val values = getContentValues(record)
- try {
- db.beginTransaction()
- if (db.update(TABLE, values, BeanPropEnum.Syspara.id.toString() + "=?", arrayOf(INDEX)) < 0) {
- return false
- }
- db.setTransactionSuccessful()
- return true
- } finally {
- db.endTransaction()
- }
- }
-
- fun get(): SysParaRecord? {
- val db = dbHelper.readableDatabase
- var cursor: Cursor? = null
- try {
- cursor = db.query(
- TABLE, null, BeanPropEnum.Syspara.id.toString() + "=?",
- arrayOf(INDEX), null, null, null
- )
- if (cursor != null && cursor.moveToNext()) {
- return getRecord(cursor)
- }
- } finally {
- cursor?.close()
- }
- return null
- }
-
- fun clear(): Boolean {
- val db = dbHelper.writableDatabase
- try {
- db.beginTransaction()
- if (db.delete(TABLE, null, null) < 0) {
- return false
- }
- db.setTransactionSuccessful()
- return true
- } finally {
- db.endTransaction()
- }
- }
-
- private fun getRecord(cursor: Cursor): SysParaRecord {
- val record = SysParaRecord()
- record.returnFlag = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.returnFlag.toString()))
- record.heatBeat = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.heatBeat.toString()))
- val enable = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.offlineEnable.toString()))
- record.offlineEnable = enable == 1
- record.maxOfflineDays = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.maxOfflineDays.toString()))
- record.maxDayOfflineAmt = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.maxDayOfflineAmt.toString()))
- record.mngPasswd = cursor.getString(cursor.getColumnIndex(BeanPropEnum.Syspara.mngpasswd.toString()))
- record.fixpayGap = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.fixpayGap.toString()))
- record.sucShowtime = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.consumeShowtime.toString()))
- record.failShowtime =
- cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.consumeFailShowtime.toString()))
- record.commTime = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.commTime.toString()))
- return record
- }
-
- private fun getContentValues(record: SysParaRecord): ContentValues {
- val values = ContentValues()
- values.put(BeanPropEnum.Syspara.id.toString(), INDEX)
- values.put(BeanPropEnum.Syspara.returnFlag.toString(), record.returnFlag)
- values.put(BeanPropEnum.Syspara.heatBeat.toString(), record.heatBeat)
- if (record.offlineEnable) {
- values.put(BeanPropEnum.Syspara.offlineEnable.toString(), 1)
- } else {
- values.put(BeanPropEnum.Syspara.offlineEnable.toString(), 0)
- }
- values.put(BeanPropEnum.Syspara.maxOfflineDays.toString(), record.maxOfflineDays)
- values.put(BeanPropEnum.Syspara.maxDayOfflineAmt.toString(), record.maxDayOfflineAmt)
- values.put(BeanPropEnum.Syspara.mngpasswd.toString(), record.mngPasswd)
- values.put(BeanPropEnum.Syspara.fixpayGap.toString(), record.fixpayGap)
- values.put(BeanPropEnum.Syspara.consumeShowtime.toString(), record.sucShowtime)
- values.put(BeanPropEnum.Syspara.consumeFailShowtime.toString(), record.failShowtime)
- values.put(BeanPropEnum.Syspara.commTime.toString(), record.commTime)
- return values
- }
+package com.supwisdom.db
+
+import android.content.ContentValues
+import android.content.Context
+import android.database.Cursor
+import com.supwisdom.entity.SysParaRecord
+import java.util.concurrent.locks.Lock
+import java.util.concurrent.locks.ReentrantLock
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class SysParaDao constructor(context: Context) {
+ private val INDEX = "1" // 主键
+ private val dbHelper = DBParaHelper.getInstance(context)
+ private val TABLE = DBParaHelper.TABLE_NAME_SYSPARA
+
+ private val lock = ReentrantLock()
+ fun getLock(): Lock {
+ return lock
+ }
+
+ fun replace(record: SysParaRecord): Boolean {
+ val db = dbHelper.readableDatabase
+ val values = getContentValues(record)
+ try {
+ db.beginTransaction()
+ if (db.replace(TABLE, null, values) > 0) {
+ db.setTransactionSuccessful()
+ return true
+ }
+ } finally {
+ db.endTransaction()
+ }
+ return false
+ }
+
+ fun update(record: SysParaRecord): Boolean {
+ val db = dbHelper.writableDatabase
+ val values = getContentValues(record)
+ try {
+ db.beginTransaction()
+ if (db.update(
+ TABLE,
+ values,
+ BeanPropEnum.Syspara.id.toString() + "=?",
+ arrayOf(INDEX)
+ ) < 0
+ ) {
+ return false
+ }
+ db.setTransactionSuccessful()
+ return true
+ } finally {
+ db.endTransaction()
+ }
+ }
+
+ fun get(): SysParaRecord? {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ try {
+ cursor = db.query(
+ TABLE, null, BeanPropEnum.Syspara.id.toString() + "=?",
+ arrayOf(INDEX), null, null, null
+ )
+ if (cursor != null && cursor.moveToNext()) {
+ return getRecord(cursor)
+ }
+ } finally {
+ cursor?.close()
+ }
+ return null
+ }
+
+ fun clear(): Boolean {
+ val db = dbHelper.writableDatabase
+ try {
+ db.beginTransaction()
+ if (db.delete(TABLE, null, null) < 0) {
+ return false
+ }
+ db.setTransactionSuccessful()
+ return true
+ } finally {
+ db.endTransaction()
+ }
+ }
+
+ private fun getRecord(cursor: Cursor): SysParaRecord {
+ val record = SysParaRecord()
+ record.returnFlag =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.returnFlag.toString()))
+ record.heatBeat =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.heatBeat.toString()))
+ var enable =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.offlineEnable.toString()))
+ record.offlineEnable = enable == 1
+ enable = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.synoCode.toString()))
+ record.synoCode = enable == 1
+ record.maxOfflineDays =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.maxOfflineDays.toString()))
+ record.maxDayOfflineAmt =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.maxDayOfflineAmt.toString()))
+ record.mngPasswd =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.Syspara.mngpasswd.toString()))
+ record.fixpayGap =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.fixpayGap.toString()))
+ record.sucShowtime =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.consumeShowtime.toString()))
+ record.failShowtime =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.consumeFailShowtime.toString()))
+ record.commTime =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.commTime.toString()))
+ return record
+ }
+
+ private fun getContentValues(record: SysParaRecord): ContentValues {
+ val values = ContentValues()
+ values.put(BeanPropEnum.Syspara.id.toString(), INDEX)
+ values.put(BeanPropEnum.Syspara.returnFlag.toString(), record.returnFlag)
+ values.put(BeanPropEnum.Syspara.heatBeat.toString(), record.heatBeat)
+ if (record.offlineEnable) {
+ values.put(BeanPropEnum.Syspara.offlineEnable.toString(), 1)
+ } else {
+ values.put(BeanPropEnum.Syspara.offlineEnable.toString(), 0)
+ }
+ if (record.synoCode) {
+ values.put(BeanPropEnum.Syspara.synoCode.toString(), 1)
+ } else {
+ values.put(BeanPropEnum.Syspara.synoCode.toString(), 0)
+ }
+ values.put(BeanPropEnum.Syspara.maxOfflineDays.toString(), record.maxOfflineDays)
+ values.put(BeanPropEnum.Syspara.maxDayOfflineAmt.toString(), record.maxDayOfflineAmt)
+ values.put(BeanPropEnum.Syspara.mngpasswd.toString(), record.mngPasswd)
+ values.put(BeanPropEnum.Syspara.fixpayGap.toString(), record.fixpayGap)
+ values.put(BeanPropEnum.Syspara.consumeShowtime.toString(), record.sucShowtime)
+ values.put(BeanPropEnum.Syspara.consumeFailShowtime.toString(), record.failShowtime)
+ values.put(BeanPropEnum.Syspara.commTime.toString(), record.commTime)
+ return values
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
index 8669aa8..bf3b729 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
@@ -1,260 +1,282 @@
-package com.supwisdom.db
-
-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
-
-/**
- ** create by zzq on 2019/7/24
- ** @desc
- **/
-class TransdtlOfflineDao constructor(context: Context) {
- private val dbHelper = DBTransdtlHelper.getInstance(context)
- private val TABLE = DBTransdtlHelper.TABLE_NAME_DTL_OFFLINE
-
- fun getLock(): Lock {
- return dbHelper.getLock()
- }
-
- fun save(record: TransdtlOfflineRecord): Boolean {
- val db = dbHelper.readableDatabase
- val values = getContentValues(record)
- try {
- db.beginTransaction()
- if (db.replace(TABLE, null, values) > 0) {
- db.setTransactionSuccessful()
- return true
- }
- } finally {
- db.endTransaction()
- }
- return false
- }
-
- fun update(record: TransdtlOfflineRecord): Boolean {
- val db = dbHelper.writableDatabase
- val values = getContentValues(record)
- try {
- db.beginTransaction()
- if (db.update(
- TABLE,
- values,
- BeanPropEnum.TransdtlOffline.devseqno.toString() + "=?",
- arrayOf(record.devseqno.toString())
- ) > 0
- ) {
- db.setTransactionSuccessful()
- return true
- }
- } finally {
- db.endTransaction()
- }
- return false
- }
-
- fun getAll(): List<TransdtlOfflineRecord> {
- val db = dbHelper.readableDatabase
- var cursor: Cursor? = null
- val orderby = BeanPropEnum.TransdtlOffline.devseqno.toString() + " desc"
- try {
- cursor = db.query(TABLE, null, null, null, null, null, orderby)
- val list = ArrayList<TransdtlOfflineRecord>()
- while (cursor != null && cursor.moveToNext()) {
- list.add(getRecord(cursor))
- }
- return list
- } finally {
- cursor?.close()
- }
- }
-
- fun getOfflineAmt(date: String, cardno: String, cardphyid: String): Int {
- val db = dbHelper.readableDatabase
- var cursor: Cursor? = null
- var sql = ("select sum(${BeanPropEnum.TransdtlOffline.payamt}) as sumamt from $TABLE where "
- + BeanPropEnum.TransdtlOffline.transdate.toString() + "='" + date + "' and "
- + BeanPropEnum.TransdtlOffline.cardno.toString() + "='" + cardno + "' and "
- + BeanPropEnum.TransdtlOffline.cardphyid.toString() + "='" + cardphyid + "' and "
- + BeanPropEnum.TransdtlOffline.reversalflag.toString() + "='" + ReversalFlag.NONE.toString() + "' and "
- + BeanPropEnum.TransdtlOffline.status.toString() + "='" + PayStatus.SUC.toString() + "'")
- var sumamt = 0
- try {
- cursor = db.rawQuery(sql, null, null)
- if (cursor != null && cursor.moveToNext()) {
- sumamt = cursor.getInt(cursor.getColumnIndex("sumamt"))
- }
- } finally {
- cursor?.close()
- }
-
- sql = ("select sum(${BeanPropEnum.TransdtlOffline.payamt}) as sumamt from $TABLE where "
- + BeanPropEnum.TransdtlOffline.transdate.toString() + "='" + date + "' and "
- + BeanPropEnum.TransdtlOffline.cardno.toString() + "='" + cardno + "' and "
- + BeanPropEnum.TransdtlOffline.cardphyid.toString() + "='" + cardphyid + "' and "
- + BeanPropEnum.TransdtlOffline.reversalflag.toString() + "<>'" + ReversalFlag.NONE.toString() + "' and "
- + BeanPropEnum.TransdtlOffline.status.toString() + "='" + PayStatus.SUC.toString() + "'")
- try {
- cursor = db.rawQuery(sql, null, null)
- if (cursor != null && cursor.moveToNext()) {
- val reverse = cursor.getInt(cursor.getColumnIndex("sumamt"))
- if (sumamt > reverse) {
- return (sumamt - reverse)
- }
- }
- } finally {
- cursor?.close()
- }
- return 0
- }
-
- fun getUnconfirm(): List<TransdtlOfflineRecord> {
- val db = dbHelper.readableDatabase
- var cursor: Cursor? = null
- val selection = BeanPropEnum.TransdtlOffline.upflag.toString() + "=?"
- try {
- cursor = db.query(TABLE, null, selection, arrayOf("0"), null, null, null)
- val list = ArrayList<TransdtlOfflineRecord>()
- while (cursor != null && cursor.moveToNext()) {
- list.add(getRecord(cursor))
- }
- return list
- } finally {
- cursor?.close()
- }
- }
-
- fun getMaxSeqno(): Int {
- val db = dbHelper.readableDatabase
- val sql = ("select max(${BeanPropEnum.TransdtlOffline.devseqno}) as seqno from $TABLE")
- var cursor: Cursor? = null
- try {
- cursor = db.rawQuery(sql, null, null)
- if (cursor != null && cursor.moveToNext()) {
- return cursor.getInt(cursor.getColumnIndex("seqno"))
- }
- } finally {
- cursor?.close()
- }
- return 0
- }
-
- fun getUnconfirmNum(): Int {
- val db = dbHelper.readableDatabase
- var cursor: Cursor? = null
- val sql = ("select COUNT("
- + BeanPropEnum.TransdtlOffline.devseqno
- + ") as num from " + TABLE
- + " where " + BeanPropEnum.TransdtlOffline.upflag + "=0")
- try {
- cursor = db.rawQuery(sql, null)
- if (cursor != null && cursor.moveToNext()) {
- return cursor.getInt(cursor.getColumnIndex("num"))
- }
- } finally {
- cursor?.close()
- }
- return 0
- }
-
- fun clear(): Boolean {
- val db = dbHelper.writableDatabase
- try {
- db.beginTransaction()
- if (db.delete(TABLE, null, null) < 0) {
- return false
- }
- db.setTransactionSuccessful()
- return true
- } finally {
- db.endTransaction()
- }
- }
-
- fun getLast(): TransdtlOfflineRecord? {
- val db = dbHelper.readableDatabase
- var cursor: Cursor? = null
- val orderBy = BeanPropEnum.TransdtlOffline.devseqno.toString() + " desc"
- try {
- cursor = db.query(TABLE, null, null, null, null, null, orderBy, "1")
- if (cursor != null && cursor.moveToNext()) {
- return getRecord(cursor)
- }
- return null
- } finally {
- cursor?.close()
- }
- }
-
- fun clear(date: String): Boolean {
- val db = dbHelper.writableDatabase
- val selection =
- BeanPropEnum.TransdtlOffline.upflag.toString() + "=? and " + BeanPropEnum.TransdtlOffline.transdate + "<?"
- try {
- db.beginTransaction()
- if (db.delete(TABLE, selection, arrayOf("1", date)) < 0) {
- return false
- }
- db.setTransactionSuccessful()
- return true
- } finally {
- db.endTransaction()
- }
- }
-
- private fun getRecord(cursor: Cursor): TransdtlOfflineRecord {
- val record = TransdtlOfflineRecord()
- record.devphyid = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.devphyid.toString()))
- record.transdate = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.transdate.toString()))
- record.transtime = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.transtime.toString()))
- record.devseqno = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.devseqno.toString()))
- record.cardno = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.cardno.toString()))
- 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()))
- 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()))
- 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
- }
-
- private fun getContentValues(record: TransdtlOfflineRecord): ContentValues {
- val values = ContentValues()
- values.put(BeanPropEnum.TransdtlOffline.devphyid.toString(), record.devphyid)
- values.put(BeanPropEnum.TransdtlOffline.transdate.toString(), record.transdate)
- values.put(BeanPropEnum.TransdtlOffline.transtime.toString(), record.transtime)
- values.put(BeanPropEnum.TransdtlOffline.devseqno.toString(), record.devseqno)
- values.put(BeanPropEnum.TransdtlOffline.cardno.toString(), record.cardno)
- values.put(BeanPropEnum.TransdtlOffline.cardphyid.toString(), record.cardphyid)
- values.put(BeanPropEnum.TransdtlOffline.payamt.toString(), record.payamt)
- values.put(BeanPropEnum.TransdtlOffline.extraamt.toString(), record.extraamt)
- 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.toString())
- values.put(BeanPropEnum.TransdtlOffline.upflag.toString(), record.upflag)
- return values
- }
+package com.supwisdom.db
+
+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
+import java.util.concurrent.locks.ReentrantLock
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class TransdtlOfflineDao constructor(context: Context) {
+ private val dbHelper = DBTransdtlHelper.getInstance(context)
+ private val TABLE = DBTransdtlHelper.TABLE_NAME_DTL_OFFLINE
+
+ private val lock = ReentrantLock()
+ fun getLock(): Lock {
+ return lock
+ }
+
+ fun save(record: TransdtlOfflineRecord): Boolean {
+ val db = dbHelper.readableDatabase
+ val values = getContentValues(record)
+ try {
+ db.beginTransaction()
+ if (db.replace(TABLE, null, values) > 0) {
+ db.setTransactionSuccessful()
+ return true
+ }
+ } finally {
+ db.endTransaction()
+ }
+ return false
+ }
+
+ fun update(record: TransdtlOfflineRecord): Boolean {
+ val db = dbHelper.writableDatabase
+ val values = getContentValues(record)
+ try {
+ db.beginTransaction()
+ if (db.update(
+ TABLE,
+ values,
+ BeanPropEnum.TransdtlOffline.devseqno.toString() + "=?",
+ arrayOf(record.devseqno.toString())
+ ) > 0
+ ) {
+ db.setTransactionSuccessful()
+ return true
+ }
+ } finally {
+ db.endTransaction()
+ }
+ return false
+ }
+
+ fun getAll(): List<TransdtlOfflineRecord> {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ val orderby = BeanPropEnum.TransdtlOffline.devseqno.toString() + " desc"
+ try {
+ cursor = db.query(TABLE, null, null, null, null, null, orderby)
+ val list = ArrayList<TransdtlOfflineRecord>()
+ while (cursor != null && cursor.moveToNext()) {
+ list.add(getRecord(cursor))
+ }
+ return list
+ } finally {
+ cursor?.close()
+ }
+ }
+
+ fun getOfflineAmt(date: String, cardno: String, cardphyid: String): Int {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ var sql = ("select sum(${BeanPropEnum.TransdtlOffline.payamt}) as sumamt from $TABLE where "
+ + BeanPropEnum.TransdtlOffline.transdate.toString() + "='" + date + "' and "
+ + BeanPropEnum.TransdtlOffline.cardno.toString() + "='" + cardno + "' and "
+ + BeanPropEnum.TransdtlOffline.cardphyid.toString() + "='" + cardphyid + "' and "
+ + BeanPropEnum.TransdtlOffline.reversalflag.toString() + "='" + ReversalFlag.NONE.toString() + "' and "
+ + BeanPropEnum.TransdtlOffline.status.toString() + "='" + PayStatus.SUC.toString() + "'")
+ var sumamt = 0
+ try {
+ cursor = db.rawQuery(sql, null, null)
+ if (cursor != null && cursor.moveToNext()) {
+ sumamt = cursor.getInt(cursor.getColumnIndex("sumamt"))
+ }
+ } finally {
+ cursor?.close()
+ }
+
+ sql = ("select sum(${BeanPropEnum.TransdtlOffline.payamt}) as sumamt from $TABLE where "
+ + BeanPropEnum.TransdtlOffline.transdate.toString() + "='" + date + "' and "
+ + BeanPropEnum.TransdtlOffline.cardno.toString() + "='" + cardno + "' and "
+ + BeanPropEnum.TransdtlOffline.cardphyid.toString() + "='" + cardphyid + "' and "
+ + BeanPropEnum.TransdtlOffline.reversalflag.toString() + "<>'" + ReversalFlag.NONE.toString() + "' and "
+ + BeanPropEnum.TransdtlOffline.status.toString() + "='" + PayStatus.SUC.toString() + "'")
+ try {
+ cursor = db.rawQuery(sql, null, null)
+ if (cursor != null && cursor.moveToNext()) {
+ val reverse = cursor.getInt(cursor.getColumnIndex("sumamt"))
+ if (sumamt > reverse) {
+ return (sumamt - reverse)
+ }
+ }
+ } finally {
+ cursor?.close()
+ }
+ return 0
+ }
+
+ fun getUnconfirm(): List<TransdtlOfflineRecord> {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ val selection = BeanPropEnum.TransdtlOffline.upflag.toString() + "=?"
+ try {
+ cursor = db.query(TABLE, null, selection, arrayOf("0"), null, null, null)
+ val list = ArrayList<TransdtlOfflineRecord>()
+ while (cursor != null && cursor.moveToNext()) {
+ list.add(getRecord(cursor))
+ }
+ return list
+ } finally {
+ cursor?.close()
+ }
+ }
+
+ fun getMaxSeqno(): Int {
+ val db = dbHelper.readableDatabase
+ val sql = ("select max(${BeanPropEnum.TransdtlOffline.devseqno}) as seqno from $TABLE")
+ var cursor: Cursor? = null
+ try {
+ cursor = db.rawQuery(sql, null, null)
+ if (cursor != null && cursor.moveToNext()) {
+ return cursor.getInt(cursor.getColumnIndex("seqno"))
+ }
+ } finally {
+ cursor?.close()
+ }
+ return 0
+ }
+
+ fun getUnconfirmNum(): Int {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ val sql = ("select COUNT("
+ + BeanPropEnum.TransdtlOffline.devseqno
+ + ") as num from " + TABLE
+ + " where " + BeanPropEnum.TransdtlOffline.upflag + "=0")
+ try {
+ cursor = db.rawQuery(sql, null)
+ if (cursor != null && cursor.moveToNext()) {
+ return cursor.getInt(cursor.getColumnIndex("num"))
+ }
+ } finally {
+ cursor?.close()
+ }
+ return 0
+ }
+
+ fun clear(): Boolean {
+ val db = dbHelper.writableDatabase
+ try {
+ db.beginTransaction()
+ if (db.delete(TABLE, null, null) < 0) {
+ return false
+ }
+ db.setTransactionSuccessful()
+ return true
+ } finally {
+ db.endTransaction()
+ }
+ }
+
+ fun getLast(): TransdtlOfflineRecord? {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ val orderBy = BeanPropEnum.TransdtlOffline.devseqno.toString() + " desc"
+ try {
+ cursor = db.query(TABLE, null, null, null, null, null, orderBy, "1")
+ if (cursor != null && cursor.moveToNext()) {
+ return getRecord(cursor)
+ }
+ return null
+ } finally {
+ cursor?.close()
+ }
+ }
+
+ fun clear(date: String): Boolean {
+ val db = dbHelper.writableDatabase
+ val selection =
+ BeanPropEnum.TransdtlOffline.upflag.toString() + "=? and " + BeanPropEnum.TransdtlOffline.transdate + "<?"
+ try {
+ db.beginTransaction()
+ if (db.delete(TABLE, selection, arrayOf("1", date)) < 0) {
+ return false
+ }
+ db.setTransactionSuccessful()
+ return true
+ } finally {
+ db.endTransaction()
+ }
+ }
+
+ private fun getRecord(cursor: Cursor): TransdtlOfflineRecord {
+ val record = TransdtlOfflineRecord()
+ record.devphyid =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.devphyid.toString()))
+ record.transdate =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.transdate.toString()))
+ record.transtime =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.transtime.toString()))
+ record.devseqno =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.devseqno.toString()))
+ record.cardno =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.cardno.toString()))
+ 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()))
+ 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()))
+ 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
+ }
+
+ private fun getContentValues(record: TransdtlOfflineRecord): ContentValues {
+ val values = ContentValues()
+ values.put(BeanPropEnum.TransdtlOffline.devphyid.toString(), record.devphyid)
+ values.put(BeanPropEnum.TransdtlOffline.transdate.toString(), record.transdate)
+ values.put(BeanPropEnum.TransdtlOffline.transtime.toString(), record.transtime)
+ values.put(BeanPropEnum.TransdtlOffline.devseqno.toString(), record.devseqno)
+ values.put(BeanPropEnum.TransdtlOffline.cardno.toString(), record.cardno)
+ values.put(BeanPropEnum.TransdtlOffline.cardphyid.toString(), record.cardphyid)
+ values.put(BeanPropEnum.TransdtlOffline.payamt.toString(), record.payamt)
+ values.put(BeanPropEnum.TransdtlOffline.extraamt.toString(), record.extraamt)
+ 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.toString())
+ values.put(BeanPropEnum.TransdtlOffline.upflag.toString(), record.upflag)
+ return values
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
index 0a76b2b..37a97be 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
@@ -1,226 +1,247 @@
-package com.supwisdom.db
-
-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
-
-/**
- ** create by zzq on 2019/7/24
- ** @desc
- **/
-class TransdtlOnlineDao constructor(context: Context) {
- private val dbHelper = DBTransdtlHelper.getInstance(context)
- private val TABLE = DBTransdtlHelper.TABLE_NAME_DTL_ONLINE
-
- fun getLock(): Lock {
- return dbHelper.getLock()
- }
-
- fun save(record: TransdtlOnlineRecord): Boolean {
- val db = dbHelper.readableDatabase
- val values = getContentValues(record)
- try {
- db.beginTransaction()
- if (db.replace(TABLE, null, values) > 0) {
- db.setTransactionSuccessful()
- return true
- }
- } finally {
- db.endTransaction()
- }
- return false
- }
-
- fun update(record: TransdtlOnlineRecord): Boolean {
- val db = dbHelper.writableDatabase
- val values = getContentValues(record)
- try {
- db.beginTransaction()
- if (db.update(
- TABLE,
- values,
- BeanPropEnum.TransdtlOnline.devseqno.toString() + "=?",
- arrayOf(record.devseqno.toString())
- ) > 0
- ) {
- db.setTransactionSuccessful()
- return true
- }
- } finally {
- db.endTransaction()
- }
- return false
- }
-
- fun getAll(): List<TransdtlOnlineRecord> {
- val db = dbHelper.readableDatabase
- var cursor: Cursor? = null
- val orderby = BeanPropEnum.TransdtlOnline.devseqno.toString() + " desc"
- try {
- cursor = db.query(TABLE, null, null, null, null, null, orderby)
- val list = ArrayList<TransdtlOnlineRecord>()
- while (cursor != null && cursor.moveToNext()) {
- list.add(getRecord(cursor))
- }
- return list
- } finally {
- cursor?.close()
- }
- }
-
- fun getUnconfirm(): List<TransdtlOnlineRecord> {
- val db = dbHelper.readableDatabase
- var cursor: Cursor? = null
- val selection = BeanPropEnum.TransdtlOnline.upflag.toString() + "=?"
- try {
- cursor = db.query(TABLE, null, selection, arrayOf("0"), null, null, null)
- val list = ArrayList<TransdtlOnlineRecord>()
- while (cursor != null && cursor.moveToNext()) {
- list.add(getRecord(cursor))
- }
- return list
- } finally {
- cursor?.close()
- }
- }
-
- fun getLast(): TransdtlOnlineRecord? {
- val db = dbHelper.readableDatabase
- var cursor: Cursor? = null
- val orderBy = BeanPropEnum.TransdtlOnline.devseqno.toString() + " desc"
- try {
- cursor = db.query(TABLE, null, null, null, null, null, orderBy, "1")
- if (cursor != null && cursor.moveToNext()) {
- return getRecord(cursor)
- }
- return null
- } finally {
- cursor?.close()
- }
- }
-
- fun getUnconfirmNum(): Int {
- val db = dbHelper.readableDatabase
- var cursor: Cursor? = null
- val sql = ("select COUNT("
- + BeanPropEnum.TransdtlOnline.devseqno
- + ") as num from " + TABLE
- + " where " + BeanPropEnum.TransdtlOnline.upflag + "=0")
- try {
- cursor = db.rawQuery(sql, null)
- if (cursor != null && cursor.moveToNext()) {
- return cursor.getInt(cursor.getColumnIndex("num"))
- }
- } finally {
- cursor?.close()
- }
- return 0
- }
-
- fun getMaxSeqno(): Int {
- val db = dbHelper.readableDatabase
- val sql = ("select max(${BeanPropEnum.TransdtlOnline.devseqno}) as seqno from $TABLE")
- var cursor: Cursor? = null
- try {
- cursor = db.rawQuery(sql, null, null)
- if (cursor != null && cursor.moveToNext()) {
- return cursor.getInt(cursor.getColumnIndex("seqno"))
- }
- } finally {
- cursor?.close()
- }
- return 0
- }
-
- fun clear(): Boolean {
- val db = dbHelper.writableDatabase
- try {
- db.beginTransaction()
- if (db.delete(TABLE, null, null) < 0) {
- return false
- }
- db.setTransactionSuccessful()
- return true
- } finally {
- db.endTransaction()
- }
- }
-
- fun clear(date: String): Boolean {
- val db = dbHelper.writableDatabase
- val selection =
- BeanPropEnum.TransdtlOnline.upflag.toString() + "=? and " + BeanPropEnum.TransdtlOnline.transdate + "<?"
- try {
- db.beginTransaction()
- if (db.delete(TABLE, selection, arrayOf("1", date)) < 0) {
- return false
- }
- db.setTransactionSuccessful()
- return true
- } finally {
- db.endTransaction()
- }
- }
-
- private fun getRecord(cursor: Cursor): TransdtlOnlineRecord {
- val record = TransdtlOnlineRecord()
- record.devphyid = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.devphyid.toString()))
- record.transdate = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.transdate.toString()))
- record.transtime = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.transtime.toString()))
- record.devseqno = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.devseqno.toString()))
- record.cardno = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.cardno.toString()))
- record.cardphyid = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.cardphyid.toString()))
- record.qrcode = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.qrcode.toString()))
- record.transtype = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.transtype.toString()))
- record.billno = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.billno.toString()))
- record.managefeetype =
- cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.managefeetype.toString()))
- record.username = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.username.toString()))
- record.payamt = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.payamt.toString()))
- record.extraamt = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.extraamt.toString()))
- 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()))
- 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
- }
-
- private fun getContentValues(record: TransdtlOnlineRecord): ContentValues {
- val values = ContentValues()
- values.put(BeanPropEnum.TransdtlOnline.devphyid.toString(), record.devphyid)
- values.put(BeanPropEnum.TransdtlOnline.transdate.toString(), record.transdate)
- values.put(BeanPropEnum.TransdtlOnline.transtime.toString(), record.transtime)
- values.put(BeanPropEnum.TransdtlOnline.devseqno.toString(), record.devseqno)
- values.put(BeanPropEnum.TransdtlOnline.cardno.toString(), record.cardno)
- values.put(BeanPropEnum.TransdtlOnline.cardphyid.toString(), record.cardphyid)
- values.put(BeanPropEnum.TransdtlOnline.qrcode.toString(), record.qrcode)
- values.put(BeanPropEnum.TransdtlOnline.transtype.toString(), record.transtype)
- values.put(BeanPropEnum.TransdtlOnline.payamt.toString(), record.payamt)
- values.put(BeanPropEnum.TransdtlOnline.extraamt.toString(), record.extraamt)
- values.put(BeanPropEnum.TransdtlOnline.billno.toString(), record.billno)
- values.put(BeanPropEnum.TransdtlOnline.managefeetype.toString(), record.managefeetype)
- values.put(BeanPropEnum.TransdtlOnline.username.toString(), record.username)
- 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.toString())
- values.put(BeanPropEnum.TransdtlOnline.upflag.toString(), record.upflag)
- return values
- }
+package com.supwisdom.db
+
+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
+import java.util.concurrent.locks.ReentrantLock
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class TransdtlOnlineDao constructor(context: Context) {
+ private val dbHelper = DBTransdtlHelper.getInstance(context)
+ private val TABLE = DBTransdtlHelper.TABLE_NAME_DTL_ONLINE
+
+ private val lock = ReentrantLock()
+ fun getLock(): Lock {
+ return lock
+ }
+
+ fun save(record: TransdtlOnlineRecord): Boolean {
+ val db = dbHelper.readableDatabase
+ val values = getContentValues(record)
+ try {
+ db.beginTransaction()
+ if (db.replace(TABLE, null, values) > 0) {
+ db.setTransactionSuccessful()
+ return true
+ }
+ } finally {
+ db.endTransaction()
+ }
+ return false
+ }
+
+ fun update(record: TransdtlOnlineRecord): Boolean {
+ val db = dbHelper.writableDatabase
+ val values = getContentValues(record)
+ try {
+ db.beginTransaction()
+ if (db.update(
+ TABLE,
+ values,
+ BeanPropEnum.TransdtlOnline.devseqno.toString() + "=?",
+ arrayOf(record.devseqno.toString())
+ ) > 0
+ ) {
+ db.setTransactionSuccessful()
+ return true
+ }
+ } finally {
+ db.endTransaction()
+ }
+ return false
+ }
+
+ fun getAll(): List<TransdtlOnlineRecord> {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ val orderby = BeanPropEnum.TransdtlOnline.devseqno.toString() + " desc"
+ try {
+ cursor = db.query(TABLE, null, null, null, null, null, orderby)
+ val list = ArrayList<TransdtlOnlineRecord>()
+ while (cursor != null && cursor.moveToNext()) {
+ list.add(getRecord(cursor))
+ }
+ return list
+ } finally {
+ cursor?.close()
+ }
+ }
+
+ fun getUnconfirm(): List<TransdtlOnlineRecord> {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ val selection = BeanPropEnum.TransdtlOnline.upflag.toString() + "=?"
+ try {
+ cursor = db.query(TABLE, null, selection, arrayOf("0"), null, null, null)
+ val list = ArrayList<TransdtlOnlineRecord>()
+ while (cursor != null && cursor.moveToNext()) {
+ list.add(getRecord(cursor))
+ }
+ return list
+ } finally {
+ cursor?.close()
+ }
+ }
+
+ fun getLast(): TransdtlOnlineRecord? {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ val orderBy = BeanPropEnum.TransdtlOnline.devseqno.toString() + " desc"
+ try {
+ cursor = db.query(TABLE, null, null, null, null, null, orderBy, "1")
+ if (cursor != null && cursor.moveToNext()) {
+ return getRecord(cursor)
+ }
+ return null
+ } finally {
+ cursor?.close()
+ }
+ }
+
+ fun getUnconfirmNum(): Int {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ val sql = ("select COUNT("
+ + BeanPropEnum.TransdtlOnline.devseqno
+ + ") as num from " + TABLE
+ + " where " + BeanPropEnum.TransdtlOnline.upflag + "=0")
+ try {
+ cursor = db.rawQuery(sql, null)
+ if (cursor != null && cursor.moveToNext()) {
+ return cursor.getInt(cursor.getColumnIndex("num"))
+ }
+ } finally {
+ cursor?.close()
+ }
+ return 0
+ }
+
+ fun getMaxSeqno(): Int {
+ val db = dbHelper.readableDatabase
+ val sql = ("select max(${BeanPropEnum.TransdtlOnline.devseqno}) as seqno from $TABLE")
+ var cursor: Cursor? = null
+ try {
+ cursor = db.rawQuery(sql, null, null)
+ if (cursor != null && cursor.moveToNext()) {
+ return cursor.getInt(cursor.getColumnIndex("seqno"))
+ }
+ } finally {
+ cursor?.close()
+ }
+ return 0
+ }
+
+ fun clear(): Boolean {
+ val db = dbHelper.writableDatabase
+ try {
+ db.beginTransaction()
+ if (db.delete(TABLE, null, null) < 0) {
+ return false
+ }
+ db.setTransactionSuccessful()
+ return true
+ } finally {
+ db.endTransaction()
+ }
+ }
+
+ fun clear(date: String): Boolean {
+ val db = dbHelper.writableDatabase
+ val selection =
+ BeanPropEnum.TransdtlOnline.upflag.toString() + "=? and " + BeanPropEnum.TransdtlOnline.transdate + "<?"
+ try {
+ db.beginTransaction()
+ if (db.delete(TABLE, selection, arrayOf("1", date)) < 0) {
+ return false
+ }
+ db.setTransactionSuccessful()
+ return true
+ } finally {
+ db.endTransaction()
+ }
+ }
+
+ private fun getRecord(cursor: Cursor): TransdtlOnlineRecord {
+ val record = TransdtlOnlineRecord()
+ record.devphyid =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.devphyid.toString()))
+ record.transdate =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.transdate.toString()))
+ record.transtime =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.transtime.toString()))
+ record.devseqno =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.devseqno.toString()))
+ record.cardno =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.cardno.toString()))
+ record.cardphyid =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.cardphyid.toString()))
+ record.qrcode =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.qrcode.toString()))
+ record.transtype =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.transtype.toString()))
+ record.billno =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.billno.toString()))
+ record.managefeetype =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.managefeetype.toString()))
+ record.username =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.username.toString()))
+ record.payamt =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.payamt.toString()))
+ record.extraamt =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.extraamt.toString()))
+ 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()))
+ 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
+ PayStatus.UNCONFIRM.toString() -> record.status = PayStatus.UNCONFIRM
+ else -> record.status = PayStatus.INIT
+ }
+ record.upflag =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.upflag.toString()))
+ return record
+ }
+
+ private fun getContentValues(record: TransdtlOnlineRecord): ContentValues {
+ val values = ContentValues()
+ values.put(BeanPropEnum.TransdtlOnline.devphyid.toString(), record.devphyid)
+ values.put(BeanPropEnum.TransdtlOnline.transdate.toString(), record.transdate)
+ values.put(BeanPropEnum.TransdtlOnline.transtime.toString(), record.transtime)
+ values.put(BeanPropEnum.TransdtlOnline.devseqno.toString(), record.devseqno)
+ values.put(BeanPropEnum.TransdtlOnline.cardno.toString(), record.cardno)
+ values.put(BeanPropEnum.TransdtlOnline.cardphyid.toString(), record.cardphyid)
+ values.put(BeanPropEnum.TransdtlOnline.qrcode.toString(), record.qrcode)
+ values.put(BeanPropEnum.TransdtlOnline.transtype.toString(), record.transtype)
+ values.put(BeanPropEnum.TransdtlOnline.payamt.toString(), record.payamt)
+ values.put(BeanPropEnum.TransdtlOnline.extraamt.toString(), record.extraamt)
+ values.put(BeanPropEnum.TransdtlOnline.billno.toString(), record.billno)
+ values.put(BeanPropEnum.TransdtlOnline.managefeetype.toString(), record.managefeetype)
+ values.put(BeanPropEnum.TransdtlOnline.username.toString(), record.username)
+ 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.toString())
+ values.put(BeanPropEnum.TransdtlOnline.upflag.toString(), record.upflag)
+ return values
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt b/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
index b304c45..3d9c305 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
@@ -1,126 +1,133 @@
-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 = DBTransdtlHelper.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(" 'null' as ").append(BeanPropEnum.TransdtlUnion.username).append(",")
- .append(BeanPropEnum.TransdtlOffline.cardno).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.TransdtlOnline.payamt).append(",")
- .append(BeanPropEnum.TransdtlOnline.status).append(",")
- .append(BeanPropEnum.TransdtlOnline.username).append(",")
- .append(BeanPropEnum.TransdtlOnline.cardno).append(",")
- .append(BeanPropEnum.TransdtlOnline.upflag)
- .append(" from ").append(DBTransdtlHelper.TABLE_NAME_DTL_ONLINE)
- }
-
- fun getLock(): Lock {
- return dbHelper.getLock()
- }
-
- fun get(date: String, offset: Int, flag: Int, num: 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 $num offset $offset"
- } else {
- " limit $num"
- }
- 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()))
- record.username = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.username.toString()))
- if (record.username == "null") {
- record.username = null
- }
- record.cardno = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.cardno.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
- }
+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
+
+/**
+ ** create by zzq on 2019/7/25
+ ** @desc
+ **/
+class TransdtlUnionDao constructor(context: Context) {
+ private val tablesql = StringBuilder()
+ private val dbHelper = DBTransdtlHelper.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(" 'null' as ").append(BeanPropEnum.TransdtlUnion.username).append(",")
+ .append(BeanPropEnum.TransdtlOffline.cardno).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.TransdtlOnline.payamt).append(",")
+ .append(BeanPropEnum.TransdtlOnline.status).append(",")
+ .append(BeanPropEnum.TransdtlOnline.username).append(",")
+ .append(BeanPropEnum.TransdtlOnline.cardno).append(",")
+ .append(BeanPropEnum.TransdtlOnline.upflag)
+ .append(" from ").append(DBTransdtlHelper.TABLE_NAME_DTL_ONLINE)
+ }
+
+ fun get(date: String, offset: Int, flag: Int, num: 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() + "' or " + BeanPropEnum.TransdtlUnion.status + "='"
+ + PayStatus.UNCONFIRM.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 $num offset $offset"
+ } else {
+ " limit $num"
+ }
+ 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()))
+ record.username =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.username.toString()))
+ if (record.username == "null") {
+ record.username = null
+ }
+ record.cardno =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlUnion.cardno.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
+ PayStatus.UNCONFIRM.toString() -> record.status = PayStatus.UNCONFIRM
+ 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/db/WhiteListDao.kt b/app/src/main/java/com/supwisdom/db/WhiteListDao.kt
index 2630c43..0c734fc 100644
--- a/app/src/main/java/com/supwisdom/db/WhiteListDao.kt
+++ b/app/src/main/java/com/supwisdom/db/WhiteListDao.kt
@@ -1,82 +1,88 @@
-package com.supwisdom.db
-
-import android.content.ContentValues
-import android.content.Context
-import android.database.Cursor
-import com.supwisdom.entity.WhiteListRecord
-import java.util.concurrent.locks.Lock
-
-/**
- ** create by zzq on 2019/7/25
- ** @desc
- **/
-class WhiteListDao constructor(context: Context) {
- private val dbHelper = DBParaHelper.getInstance(context)
- private val TABLE = DBParaHelper.TABLE_NAME_WHITELIST
-
- fun getLock(): Lock {
- return dbHelper.getLock()
- }
-
- fun replace(list: List<WhiteListRecord>): Boolean {
- val db = dbHelper.readableDatabase
- try {
- db.beginTransaction()
- list.forEach {
- val values = getContentValues(it)
- if (db.replace(TABLE, null, values) < 0) {
- return false
- }
- }
- db.setTransactionSuccessful()
- return true
- } finally {
- db.endTransaction()
- }
- }
-
- fun get(cardphyid: String, cardno: String): WhiteListRecord? {
- val db = dbHelper.readableDatabase
- var cursor: Cursor? = null
- val selection = BeanPropEnum.WhiteList.cardphyid.toString() + "=? and " + BeanPropEnum.WhiteList.cardno + "=?"
- try {
- cursor = db.query(TABLE, null, selection, arrayOf(cardphyid, cardno), null, null, null)
- if (cursor != null && cursor.moveToNext()) {
- return getRecord(cursor)
- }
- } finally {
- cursor?.close()
- }
- return null
- }
-
- fun clear(): Boolean {
- val db = dbHelper.writableDatabase
- try {
- db.beginTransaction()
- if (db.delete(TABLE, null, null) < 0) {
- return false
- }
- db.setTransactionSuccessful()
- return true
- } finally {
- db.endTransaction()
- }
- }
-
- private fun getRecord(cursor: Cursor): WhiteListRecord {
- val record = WhiteListRecord()
- record.cardphyid = cursor.getString(cursor.getColumnIndex(BeanPropEnum.WhiteList.cardphyid.toString()))
- record.cardno = cursor.getString(cursor.getColumnIndex(BeanPropEnum.WhiteList.cardno.toString()))
- record.status = cursor.getString(cursor.getColumnIndex(BeanPropEnum.WhiteList.status.toString()))
- return record
- }
-
- private fun getContentValues(record: WhiteListRecord): ContentValues {
- val values = ContentValues()
- values.put(BeanPropEnum.WhiteList.cardphyid.toString(), record.cardphyid)
- values.put(BeanPropEnum.WhiteList.cardno.toString(), record.cardno)
- values.put(BeanPropEnum.WhiteList.status.toString(), record.status)
- return values
- }
+package com.supwisdom.db
+
+import android.content.ContentValues
+import android.content.Context
+import android.database.Cursor
+import com.supwisdom.entity.WhiteListRecord
+import java.util.concurrent.locks.Lock
+import java.util.concurrent.locks.ReentrantLock
+
+/**
+ ** create by zzq on 2019/7/25
+ ** @desc
+ **/
+class WhiteListDao constructor(context: Context) {
+ private val dbHelper = DBParaHelper.getInstance(context)
+ private val TABLE = DBParaHelper.TABLE_NAME_WHITELIST
+
+ private val lock = ReentrantLock()
+ fun getLock(): Lock {
+ return lock
+ }
+
+ fun replace(list: List<WhiteListRecord>): Boolean {
+ val db = dbHelper.readableDatabase
+ try {
+ db.beginTransaction()
+ list.forEach {
+ val values = getContentValues(it)
+ if (db.replace(TABLE, null, values) < 0) {
+ return false
+ }
+ }
+ db.setTransactionSuccessful()
+ return true
+ } finally {
+ db.endTransaction()
+ }
+ }
+
+ fun get(cardphyid: String, cardno: String): WhiteListRecord? {
+ val db = dbHelper.readableDatabase
+ var cursor: Cursor? = null
+ val selection =
+ BeanPropEnum.WhiteList.cardphyid.toString() + "=? and " + BeanPropEnum.WhiteList.cardno + "=?"
+ try {
+ cursor = db.query(TABLE, null, selection, arrayOf(cardphyid, cardno), null, null, null)
+ if (cursor != null && cursor.moveToNext()) {
+ return getRecord(cursor)
+ }
+ } finally {
+ cursor?.close()
+ }
+ return null
+ }
+
+ fun clear(): Boolean {
+ val db = dbHelper.writableDatabase
+ try {
+ db.beginTransaction()
+ if (db.delete(TABLE, null, null) < 0) {
+ return false
+ }
+ db.setTransactionSuccessful()
+ return true
+ } finally {
+ db.endTransaction()
+ }
+ }
+
+ private fun getRecord(cursor: Cursor): WhiteListRecord {
+ val record = WhiteListRecord()
+ record.cardphyid =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.WhiteList.cardphyid.toString()))
+ record.cardno =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.WhiteList.cardno.toString()))
+ record.status =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.WhiteList.status.toString()))
+ return record
+ }
+
+ private fun getContentValues(record: WhiteListRecord): ContentValues {
+ val values = ContentValues()
+ values.put(BeanPropEnum.WhiteList.cardphyid.toString(), record.cardphyid)
+ values.put(BeanPropEnum.WhiteList.cardno.toString(), record.cardno)
+ values.put(BeanPropEnum.WhiteList.status.toString(), record.status)
+ return values
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/entity/SysParaRecord.kt b/app/src/main/java/com/supwisdom/entity/SysParaRecord.kt
index 8829b75..8df002b 100644
--- a/app/src/main/java/com/supwisdom/entity/SysParaRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/SysParaRecord.kt
@@ -1,21 +1,23 @@
-package com.supwisdom.entity
-
-/**
- ** create by zzq on 2019/7/24
- ** @desc 后台系统参数
- **/
-class SysParaRecord {
- var returnFlag: Int = 0// 消费撤销开关 0bit -0x1表示冲正使能
- var heatBeat: Int = 0// 心跳间隔
- var offlineEnable: Boolean = false // 脱机消费时限开关 false-关闭, true-开启
- var maxOfflineDays: Int = 0// 最大脱机天数
- var maxDayOfflineAmt: Int = 0//同卡当天离线交易最大金额
- var mngPasswd: String? = null// 维护密码
- var sucShowtime: Int = 0// 消费成功显示时间
- var failShowtime: Int = 0 //消费失败显示时间
- var commTime: Int = 0 //通讯超时时间 默认2s
- /**
- * 定额消费同卡消费间隔(s)
- */
- var fixpayGap: Int = 0
+package com.supwisdom.entity
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc 后台系统参数
+ **/
+class SysParaRecord {
+ var returnFlag: Int = 0// 消费撤销开关 0bit -0x1表示冲正使能
+ var heatBeat: Int = 0// 心跳间隔
+ var offlineEnable: Boolean = false // 脱机消费时限开关 false-关闭, true-开启
+ var maxOfflineDays: Int = 0// 最大脱机天数
+ var maxDayOfflineAmt: Int = 0//同卡当天离线交易最大金额
+ var mngPasswd: String? = null// 维护密码
+ var sucShowtime: Int = 0// 消费成功显示时间
+ var failShowtime: Int = 0 //消费失败显示时间
+ var commTime: Int = 0 //通讯超时时间 默认2s
+ var synoCode: Boolean = false //晟元扫码 false--关闭 true--开启
+
+ /**
+ * 定额消费同卡消费间隔(s)
+ */
+ var fixpayGap: Int = 0
}
\ 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
index 967fbd8..5030919 100644
--- a/app/src/main/java/com/supwisdom/entity/TransdtlUnionRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlUnionRecord.kt
@@ -1,40 +1,42 @@
-package com.supwisdom.entity
-
-/**
- ** create by zzq on 2019/7/25
- ** @desc
- **/
-class TransdtlUnionRecord {
- var username: String? = null
- var cardno: String? = null
- 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
+package com.supwisdom.entity
+
+/**
+ ** create by zzq on 2019/7/25
+ ** @desc
+ **/
+class TransdtlUnionRecord {
+ var username: String? = null
+ var cardno: String? = null
+ 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 --支付成功
+ * UNCONFIRM --未确认
+ */
+enum class PayStatus {
+ INIT,
+ FAIL,
+ SUC,
+ UNCONFIRM
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt b/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
index 74594cc..d3cc649 100644
--- a/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
+++ b/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
@@ -1,276 +1,298 @@
-package com.supwisdom.okhttp
-
-import android.text.TextUtils
-import okhttp3.*
-import okhttp3.MediaType.Companion.toMediaTypeOrNull
-import java.io.IOException
-import java.io.UnsupportedEncodingException
-import java.security.KeyManagementException
-import java.security.KeyStore
-import java.security.KeyStoreException
-import java.security.NoSuchAlgorithmException
-import java.util.*
-import java.util.concurrent.TimeUnit
-import javax.net.ssl.*
-
-/**
- ** create by zzq on 2019/7/24
- ** @desc
- **/
-@Suppress("DEPRECATION")
-class NetworkHandler private constructor() {
- companion object {
- private var instance: NetworkHandler? = null
- fun getInstance(): NetworkHandler {
- if (instance == null) {
- synchronized(NetworkHandler::class.java) {
- if (instance == null) {
- instance = NetworkHandler()
- }
- }
- }
- return instance!!
- }
- }
-
- private var client: OkHttpClient? = null
- private var clientLong: OkHttpClient
- private val JSON = "application/json; charset=utf-8".toMediaTypeOrNull()
- private val FORM_ENCODE = "application/x-www-form-urlencoded;charset=utf-8".toMediaTypeOrNull()
- private var commTime = 5
- private var tenantId: String? = null
- private var jwt: String? = null
- private var sslSocketFactory: SSLSocketFactory? = null
- private var trustManager: X509TrustManager? = null
-
- init {
- try {
- val trustManagerFactory =
- TrustManagerFactory.getInstance(
- TrustManagerFactory.getDefaultAlgorithm()
- )
- trustManagerFactory.init(null as KeyStore?)
- val trustManagers =
- trustManagerFactory.trustManagers
- check(!(trustManagers.size != 1 || trustManagers[0] !is X509TrustManager)) {
- ("Unexpected default trust managers:"
- + Arrays.toString(trustManagers))
- }
- trustManager = trustManagers[0] as X509TrustManager
- val sslContext = SSLContext.getInstance("TLS")
- sslContext.init(null, arrayOf<TrustManager?>(trustManager), null)
- sslSocketFactory = sslContext.socketFactory
- } catch (e: NoSuchAlgorithmException) {
- e.printStackTrace()
- } catch (e: KeyManagementException) {
- e.printStackTrace()
- } catch (e: KeyStoreException) {
- e.printStackTrace()
- }
-
- client = OkHttpClient()
- .newBuilder()
- .followRedirects(true)
- .followSslRedirects(true)
- .retryOnConnectionFailure(false)
- .readTimeout(commTime.toLong(), TimeUnit.SECONDS)
- .writeTimeout(1, TimeUnit.SECONDS)
- .connectTimeout(1, TimeUnit.SECONDS)
- .hostnameVerifier(TrustAllHostnameVerifier())
- .sslSocketFactory(sslSocketFactory!!, trustManager!!)
- .build()
- clientLong = OkHttpClient()
- .newBuilder()
- .followRedirects(true)
- .followSslRedirects(true)
- .retryOnConnectionFailure(false)
- .readTimeout(60, TimeUnit.SECONDS)
- .writeTimeout(1, TimeUnit.SECONDS)
- .connectTimeout(1, TimeUnit.SECONDS)
- .hostnameVerifier(TrustAllHostnameVerifier())
- .sslSocketFactory(sslSocketFactory!!, trustManager!!)
- .build()
-
- }
-
- fun setCommTime(communicateTime: Int) {
- if (communicateTime != 0 && commTime != communicateTime) {
- this.commTime = communicateTime
- client = OkHttpClient()
- .newBuilder()
- .followRedirects(true)
- .followSslRedirects(true)
- .retryOnConnectionFailure(false)
- .readTimeout(commTime.toLong(), TimeUnit.SECONDS)
- .writeTimeout(1, TimeUnit.SECONDS)
- .connectTimeout(1, TimeUnit.SECONDS)
- .hostnameVerifier(TrustAllHostnameVerifier())
- .sslSocketFactory(sslSocketFactory!!, trustManager!!)
- .build()
- }
- }
-
- fun setTenantId(tenantId: String) {
- this.tenantId = tenantId
- }
-
- fun setJwt(jwt: String?) {
- if (TextUtils.isEmpty(jwt)) {
- this.jwt = jwt
- } else {
- this.jwt = "Bearer $jwt"
- }
- }
-
- private class TrustAllHostnameVerifier : HostnameVerifier {
- override fun verify(hostname: String, session: SSLSession): Boolean {
- return true
- }
- }
-
- private fun addExtentHeader(request: Request.Builder): Request.Builder {
- request.addHeader("Accept", "application/json; q=0.5")
- .addHeader("Connection", "close")
- if (!TextUtils.isEmpty(tenantId)) {
- request.addHeader("X-TENANT-ID", tenantId!!)
- }
- if (!TextUtils.isEmpty(jwt)) {
- request.addHeader("Authorization", jwt!!)
- }
- return request
- }
-
- fun get(url: String, params: WebParams?): TransResp? {
- val request = Request.Builder()
- .url(geturl(url, params))
- return getTransResp(addExtentHeader(request).build())
- }
-
- fun get(url: String, params: WebParams, callback: com.supwisdom.okhttp.ICallBackok<Any?>) {
- val request = Request.Builder()
- .url(geturl(url, params))
- client!!.newCall(addExtentHeader(request).build()).enqueue(object : Callback {
- override fun onFailure(call: Call, e: IOException) {
- callback.callback(null)
- }
-
- override fun onResponse(call: Call, response: Response) {
- try {
- val content = response.body!!.string()
- val resp = TransResp(response.code, response.message)
- if (response.isSuccessful) {
- resp.retjson = content
- }
- callback.callback(resp)
- } catch (e: Exception) {
- e.printStackTrace()
- callback.callback(null)
- }
-
- }
- })
- }
-
- fun post(url: String, params: WebParams): TransResp? {
- val builder = FormBody.Builder()
- for (name in params.allParameterNames()) {
- builder.add(name, params.getParameterString(name))
- }
- val request = Request.Builder()
- .url(url)
- .post(builder.build())
- return getTransResp(addExtentHeader(request).build())
- }
-
- fun longPost(url: String, params: WebParams): TransResp? {
- val builder = FormBody.Builder()
- for (name in params.allParameterNames()) {
- builder.add(name, params.getParameterString(name))
- }
- val request = Request.Builder()
- .url(url)
- .post(builder.build())
- return getLongTransResp(addExtentHeader(request).build())
- }
-
- fun post(url: String, json: String): TransResp? {
- val body = RequestBody.create(JSON, json)
- val request = Request.Builder()
- .url(url)
- .post(body)
- return getTransResp(addExtentHeader(request).build())
- }
-
- fun post(url: String, json: String, callback: com.supwisdom.okhttp.ICallBackok<Any?>) {
- val body = RequestBody.create(JSON, json)
- val request = Request.Builder()
- .url(url)
- .post(body)
- client!!.newCall(addExtentHeader(request).build()).enqueue(object : Callback {
- override fun onFailure(call: Call, e: IOException) {
- callback.callback(null)
- }
-
- override fun onResponse(call: Call, response: Response) {
- try {
- val content = response.body!!.string()
- val resp = TransResp(response.code, response.message)
- if (response.isSuccessful) {
- resp.retjson = content
- }
- callback.callback(resp)
- } catch (e: Exception) {
- callback.callback(null)
- }
-
- }
- })
- }
-
- private fun getLongTransResp(request: Request): TransResp? {
- return try {
- val response = clientLong.newCall(request).execute()
- /*响应主体只能被消耗一次*/
- val content = response.body!!.string()
- val resp = TransResp(response.code, response.message)
- if (response.isSuccessful) {
- resp.retjson = content
- }
- resp
- } catch (e: Exception) {
- e.printStackTrace()
- null
- }
-
- }
-
- private fun getTransResp(request: Request): TransResp? {
- return try {
- val response = client!!.newCall(request).execute()
- /*响应主体只能被消耗一次*/
- val content = response.body!!.string()
- val resp = TransResp(response.code, response.message)
- if (response.isSuccessful) {
- resp.retjson = content
- }
- resp
- } catch (e: Exception) {
- e.printStackTrace()
- //通讯超时
- null
- }
- }
-
- private fun geturl(url: String, params: WebParams?): String {
- val sb = StringBuilder()
- sb.append(url)
- if (params != null) {
- try {
- sb.append(params.encodeURL())
- } catch (e: UnsupportedEncodingException) {
- e.printStackTrace()
- }
- }
- return sb.toString()
- }
+package com.supwisdom.okhttp
+
+import android.text.TextUtils
+import okhttp3.*
+import okhttp3.MediaType.Companion.toMediaTypeOrNull
+import java.io.IOException
+import java.io.UnsupportedEncodingException
+import java.security.KeyManagementException
+import java.security.KeyStore
+import java.security.KeyStoreException
+import java.security.NoSuchAlgorithmException
+import java.util.*
+import java.util.concurrent.TimeUnit
+import javax.net.ssl.*
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+@Suppress("DEPRECATION")
+class NetworkHandler private constructor() {
+ companion object {
+ private var instance: NetworkHandler? = null
+ fun getInstance(): NetworkHandler {
+ if (instance == null) {
+ synchronized(NetworkHandler::class.java) {
+ if (instance == null) {
+ instance = NetworkHandler()
+ }
+ }
+ }
+ return instance!!
+ }
+ }
+
+ private var client: OkHttpClient? = null
+ private var clientLong: OkHttpClient
+ private val JSON = "application/json; charset=utf-8".toMediaTypeOrNull()
+ private val FORM_ENCODE = "application/x-www-form-urlencoded;charset=utf-8".toMediaTypeOrNull()
+ private var commTime = 5
+ private var tenantId: String? = null
+ private var jwt: String? = null
+ private var sslSocketFactory: SSLSocketFactory? = null
+ private var trustManager: X509TrustManager? = null
+
+ init {
+ try {
+ val trustManagerFactory =
+ TrustManagerFactory.getInstance(
+ TrustManagerFactory.getDefaultAlgorithm()
+ )
+ trustManagerFactory.init(null as KeyStore?)
+ val trustManagers =
+ trustManagerFactory.trustManagers
+ check(!(trustManagers.size != 1 || trustManagers[0] !is X509TrustManager)) {
+ ("Unexpected default trust managers:"
+ + Arrays.toString(trustManagers))
+ }
+ trustManager = trustManagers[0] as X509TrustManager
+ val sslContext = SSLContext.getInstance("TLS")
+ sslContext.init(null, arrayOf<TrustManager?>(trustManager), null)
+ sslSocketFactory = sslContext.socketFactory
+ } catch (e: NoSuchAlgorithmException) {
+ e.printStackTrace()
+ } catch (e: KeyManagementException) {
+ e.printStackTrace()
+ } catch (e: KeyStoreException) {
+ e.printStackTrace()
+ }
+
+ client = OkHttpClient()
+ .newBuilder()
+ .followRedirects(true)
+ .followSslRedirects(true)
+ .retryOnConnectionFailure(false)
+ .readTimeout(commTime.toLong(), TimeUnit.SECONDS)
+ .writeTimeout(1, TimeUnit.SECONDS)
+ .connectTimeout(1, TimeUnit.SECONDS)
+ .hostnameVerifier(TrustAllHostnameVerifier())
+ .sslSocketFactory(sslSocketFactory!!, trustManager!!)
+ .build()
+ clientLong = OkHttpClient()
+ .newBuilder()
+ .followRedirects(true)
+ .followSslRedirects(true)
+ .retryOnConnectionFailure(false)
+ .readTimeout(60, TimeUnit.SECONDS)
+ .writeTimeout(1, TimeUnit.SECONDS)
+ .connectTimeout(1, TimeUnit.SECONDS)
+ .hostnameVerifier(TrustAllHostnameVerifier())
+ .sslSocketFactory(sslSocketFactory!!, trustManager!!)
+ .build()
+
+ }
+
+ fun setCommTime(communicateTime: Int) {
+ if (communicateTime != 0 && commTime != communicateTime) {
+ this.commTime = communicateTime
+ client = OkHttpClient()
+ .newBuilder()
+ .followRedirects(true)
+ .followSslRedirects(true)
+ .retryOnConnectionFailure(false)
+ .readTimeout(commTime.toLong(), TimeUnit.SECONDS)
+ .writeTimeout(1, TimeUnit.SECONDS)
+ .connectTimeout(1, TimeUnit.SECONDS)
+ .hostnameVerifier(TrustAllHostnameVerifier())
+ .sslSocketFactory(sslSocketFactory!!, trustManager!!)
+ .build()
+ }
+ }
+
+ fun setTenantId(tenantId: String) {
+ this.tenantId = tenantId
+ }
+
+ fun setJwt(jwt: String?) {
+ if (TextUtils.isEmpty(jwt)) {
+ this.jwt = jwt
+ } else {
+ this.jwt = "Bearer $jwt"
+ }
+ }
+
+ private class TrustAllHostnameVerifier : HostnameVerifier {
+ override fun verify(hostname: String, session: SSLSession): Boolean {
+ return true
+ }
+ }
+
+ private fun addExtentHeader(request: Request.Builder): Request.Builder {
+ request.addHeader("Accept", "application/json; q=0.5")
+ .addHeader("Connection", "close")
+ if (!TextUtils.isEmpty(tenantId)) {
+ request.addHeader("X-TENANT-ID", tenantId!!)
+ }
+ if (!TextUtils.isEmpty(jwt)) {
+ request.addHeader("Authorization", jwt!!)
+ }
+ return request
+ }
+
+ fun get(url: String, params: WebParams?): TransResp? {
+ val request = Request.Builder()
+ .url(geturl(url, params))
+ return getTransResp(addExtentHeader(request).build())
+ }
+
+ fun get(url: String, params: WebParams?, headerkey: String): TransResp? {
+ val request = Request.Builder()
+ .url(geturl(url, params))
+ .addHeader("Accept", "application/json; q=0.5")
+ .addHeader("Connection", "close")
+ .addHeader("ApiKey", headerkey.toLowerCase())
+ .build()
+ return getTransResp(request)
+ }
+
+ fun get(url: String, params: WebParams, callback: com.supwisdom.okhttp.ICallBackok<Any?>) {
+ val request = Request.Builder()
+ .url(geturl(url, params))
+ client!!.newCall(addExtentHeader(request).build()).enqueue(object : Callback {
+ override fun onFailure(call: Call, e: IOException) {
+ callback.callback(null)
+ }
+
+ override fun onResponse(call: Call, response: Response) {
+ try {
+ val content = response.body!!.string()
+ val resp = TransResp(response.code, response.message)
+ if (response.isSuccessful) {
+ resp.retjson = content
+ }
+ callback.callback(resp)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ callback.callback(null)
+ }
+
+ }
+ })
+ }
+
+ fun post(url: String, params: WebParams): TransResp? {
+ val builder = FormBody.Builder()
+ for (name in params.allParameterNames()) {
+ builder.add(name, params.getParameterString(name))
+ }
+ val request = Request.Builder()
+ .url(url)
+ .post(builder.build())
+ return getTransResp(addExtentHeader(request).build())
+ }
+
+ fun longPost(url: String, params: WebParams): TransResp? {
+ val builder = FormBody.Builder()
+ for (name in params.allParameterNames()) {
+ builder.add(name, params.getParameterString(name))
+ }
+ val request = Request.Builder()
+ .url(url)
+ .post(builder.build())
+ return getLongTransResp(addExtentHeader(request).build())
+ }
+
+ fun post(url: String, json: String): TransResp? {
+ val body = RequestBody.create(JSON, json)
+ val request = Request.Builder()
+ .url(url)
+ .post(body)
+ return getTransResp(addExtentHeader(request).build())
+ }
+
+ fun post(url: String, json: String, headerkey: String): TransResp? {
+ val request = Request.Builder()
+ .url(url)
+ .addHeader("Accept", "application/json; q=0.5")
+ .addHeader("Content-type", "application/json")
+ .addHeader("Connection", "close")
+ .addHeader("ApiKey", headerkey.toLowerCase())
+ .post(RequestBody.create(JSON, json))
+ .build()
+ return getTransResp(request)
+ }
+
+ fun post(url: String, json: String, callback: ICallBackok<Any?>) {
+ val body = RequestBody.create(JSON, json)
+ val request = Request.Builder()
+ .url(url)
+ .post(body)
+ client!!.newCall(addExtentHeader(request).build()).enqueue(object : Callback {
+ override fun onFailure(call: Call, e: IOException) {
+ callback.callback(null)
+ }
+
+ override fun onResponse(call: Call, response: Response) {
+ try {
+ val content = response.body!!.string()
+ val resp = TransResp(response.code, response.message)
+ if (response.isSuccessful) {
+ resp.retjson = content
+ }
+ callback.callback(resp)
+ } catch (e: Exception) {
+ callback.callback(null)
+ }
+
+ }
+ })
+ }
+
+ private fun getLongTransResp(request: Request): TransResp? {
+ return try {
+ val response = clientLong.newCall(request).execute()
+ /*响应主体只能被消耗一次*/
+ val content = response.body!!.string()
+ val resp = TransResp(response.code, response.message)
+ if (response.isSuccessful) {
+ resp.retjson = content
+ }
+ resp
+ } catch (e: Exception) {
+ e.printStackTrace()
+ null
+ }
+
+ }
+
+ private fun getTransResp(request: Request): TransResp? {
+ return try {
+ val response = client!!.newCall(request).execute()
+ /*响应主体只能被消耗一次*/
+ val content = response.body!!.string()
+ val resp = TransResp(response.code, response.message)
+ if (response.isSuccessful) {
+ resp.retjson = content
+ }
+ resp
+ } catch (e: Exception) {
+ e.printStackTrace()
+ //通讯超时
+ null
+ }
+ }
+
+ private fun geturl(url: String, params: WebParams?): String {
+ val sb = StringBuilder()
+ sb.append(url)
+ if (params != null) {
+ try {
+ sb.append(params.encodeURL())
+ } catch (e: UnsupportedEncodingException) {
+ e.printStackTrace()
+ }
+ }
+ return sb.toString()
+ }
}
\ 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 190773a..dec3a26 100644
--- a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
+++ b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
@@ -114,6 +114,7 @@
"max_offline_days" -> record.maxOfflineDays = it.paraval!!.toInt()
"max_day_offline_amt" -> record.maxDayOfflineAmt = it.paraval!!.toInt()
"communicate_time" -> record.commTime = it.paraval!!.toInt()
+ "syno_code" -> record.synoCode = it.paraval == "1"
}
}
if (record.heatBeat == 0) {
@@ -134,6 +135,9 @@
if (record.maxDayOfflineAmt == 0) {
record.maxDayOfflineAmt = 10000
}
+ if (record.mngPasswd.isNullOrEmpty()) {
+ record.mngPasswd = PublicDef.PASSWD_ADMIN_DEFAULT
+ }
if (!pos.replaceSysPara(record)) {
throw SysParaError("保存参数失败")
}
diff --git a/app/src/main/java/com/supwisdom/service/SynoCodeService.kt b/app/src/main/java/com/supwisdom/service/SynoCodeService.kt
new file mode 100644
index 0000000..c39bb27
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/service/SynoCodeService.kt
@@ -0,0 +1,294 @@
+package com.supwisdom.service
+
+import android.content.Context
+import android.util.Log
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.bean.*
+import com.supwisdom.entity.ControlParaRecord
+import com.supwisdom.okhttp.NetworkHandler
+import com.supwisdom.okhttp.TransResp
+import com.supwisdom.utils.*
+import com.synodata.codelib.decoder.CodeID
+import com.synodata.codelib.decoder.CodeUtils
+import com.synodata.codelib.decoder.IActivateListener
+import java.net.HttpURLConnection
+
+/**
+ ** create by zzq on 2020/8/20
+ ** @desc 晟元二维码激活管理接口
+ **/
+class SynoCodeService {
+ private val TAG = "SynoCodeService"
+ private val baseUrl = "https://yuexiao-yun.supwisdom.com/posregistry"
+ private val pos = SPApplication.getInstance().getPos()
+ private val syncLock = Object()
+ private var active = false
+ private var activeMsg: String? = null
+ private var licenseName = "syno_${CommonUtil.getHardwareAddress().replace(":", "")}.lic"
+
+ fun synoCodeActive(context: Context): BaseResp {
+ if (activeByLocalLicense(context)) {
+ return BaseResp(PublicDef.SUCCESS, "本地激活成功")
+ }
+ val posid = CommonUtil.getSerialNumber()
+ var resp = getRegisterStatus(posid) ?: return BaseResp(PublicDef.ERROR, "获取设备注册状态超时")
+ if (resp.retcode != HttpURLConnection.HTTP_OK) {
+ return BaseResp(resp.retcode, resp.retmsg)
+ }
+ val registerStatusRetBean =
+ GsonUtil.GsonToBean(resp.retjson!!, EpaySynoRegisterStatusRetBean::class.java)
+ when (registerStatusRetBean.status) {
+ "unregister" -> {
+ resp = registerDevice(posid, PublicDef.SCHOOL_NO)
+ ?: return BaseResp(PublicDef.ERROR, "注册设备超时")
+ if (resp.retcode != HttpURLConnection.HTTP_OK) {
+ return BaseResp(resp.retcode, resp.retmsg)
+ }
+ return BaseResp(PublicDef.ERROR, "等待后台授权")
+ }
+ "unauthorized" -> return BaseResp(PublicDef.ERROR, "设备未授权")
+ "authorized" -> {
+ return activeOnline(context)
+ }
+ "activated" -> {
+ resp = getActiveStatus(posid) ?: return BaseResp(PublicDef.ERROR, "下载激活文件超时")
+ if (resp.retcode != HttpURLConnection.HTTP_OK) {
+ return BaseResp(resp.retcode, resp.retmsg)
+ }
+ val activeRetBean =
+ GsonUtil.GsonToBean(resp.retjson!!, EpaySynoActiveRetBean::class.java)
+ if (activeRetBean.license.isNullOrEmpty()) {
+ return BaseResp(PublicDef.ERROR, "激活文件为空")
+ }
+ if (!saveLicenseToLocal(activeRetBean.license)) {
+ return BaseResp(PublicDef.ERROR, "保存激活文件失败")
+ }
+ if (!activeByLocalLicense(context)) {
+ return BaseResp(PublicDef.ERROR, "本地激活失败")
+ }
+ return BaseResp(PublicDef.SUCCESS, "激活成功")
+ }
+ else -> {
+ return BaseResp(PublicDef.ERROR, "状态错误:${registerStatusRetBean.status}")
+ }
+ }
+ }
+
+ fun uploadActiveLicense(): BaseResp {
+ val sdpath = FileUtil.getSynoLicensePath()
+ if (sdpath.isNullOrEmpty()) {
+ return BaseResp(PublicDef.ERROR, "获取本地路径失败")
+ }
+
+ val licenseByte = FileUtil.readSynoLicenseFile("${sdpath}${licenseName}")
+ ?: return BaseResp(PublicDef.ERROR, "读取激活文件超时")
+ val resp = activeDevice(CommonUtil.getSerialNumber(), UrlBase64.encode(licenseByte))
+ ?: return BaseResp(PublicDef.ERROR, "上传激活文件超时")
+ if (resp.retcode != HttpURLConnection.HTTP_OK) {
+ return BaseResp(PublicDef.ERROR, resp.retmsg)
+ }
+ return BaseResp(PublicDef.SUCCESS, "上传激活文件成功")
+ }
+
+ private fun saveLicenseToLocal(license: String): Boolean {
+ val sdpath = FileUtil.getSynoLicensePath()
+ if (sdpath.isNullOrEmpty()) {
+ return false
+ }
+ if (FileUtil.writeSynoLicenseFile("${sdpath}${licenseName}", UrlBase64.decode(license))) {
+ return true
+ }
+ return false
+ }
+
+ fun activeByLocalLicense(context: Context): Boolean {
+ saveActiveStatus(false)
+ val sdpath = FileUtil.getSynoLicensePath()
+ if (sdpath.isNullOrEmpty()) {
+ return false
+ }
+ /**
+ *** 设置一个可读和可写的路径来保存下载许可证文件。
+ ** path需要以“/”结尾
+ **/
+ CodeUtils.setLicPathName(sdpath, licenseName)
+ CodeUtils.enableDebug(false)
+ CodeUtils.enableSaveFailImage(false)
+ val mUtils = CodeUtils(context)
+ if (!mUtils.isBarcodeActivated) {
+ return false
+ }
+ configBarcode(context)
+ return true
+ }
+
+ private fun activeOnline(context: Context): BaseResp {
+ saveActiveStatus(false)
+ val sdpath = FileUtil.getSynoLicensePath()
+ if (sdpath.isNullOrEmpty()) {
+ return BaseResp(PublicDef.ERROR, "获取本地路径失败")
+ }
+ /**
+ *** 设置一个可读和可写的路径来保存下载许可证文件。
+ ** path需要以“/”结尾
+ **/
+ CodeUtils.setLicPathName(sdpath, licenseName)
+ CodeUtils.enableDebug(false)
+ CodeUtils.enableSaveFailImage(false)
+ val mUtils = CodeUtils(context)
+ if (!mUtils.isBarcodeActivated) {
+ active = false
+ activeMsg = "等待激活结果"
+ mUtils.tryActivateBarcode(object : IActivateListener {
+ /**
+ * 此函数将在活动进程期间调用,并返回进程消息
+ */
+ override fun onActivateProcess(msg: String) {
+ //sendMessage(LoadPresenter.LOAD_CODE_ACTIVE_PRO, "正在激活扫码算法...")
+ Log.d(TAG, "正在激活扫码算法:$msg")
+ }
+
+ /**
+ * 此函数将在活动进程之后调用。
+ * result_code: CodeUtils.RESULT_MSG_SUCCESS 意味着成功,其他意味着失败
+ * error: 返回失败原因消息.
+ **/
+ override fun onActivateResult(
+ result_code: Int,
+ error: String
+ ) { // post the result message
+ if (CodeUtils.RESULT_MSG_SUCCESS == result_code) {
+// sendMessage(LoadPresenter.LOAD_CODE_ACTIVE_SUC, "激活扫码算法成功")
+ configBarcode(context)
+ active = true
+// sendMessage(LoadPresenter.LOAD_SUCCESS, "加载成功")
+ } else {
+// sendMessage(LoadPresenter.LOAD_CODE_ACTIVE_FAIL, "激活扫码算法失败:$result_code,$error")
+ LogUtil.e(TAG, "激活晟元扫码算法失败:$result_code,$error")
+// sendMessage(LoadPresenter.JUMP_TO_UNREGISTER, "请确认设备能连外网,激活扫码算法失败:$result_code,$error")
+ activeMsg = "请确认设备能连外网,激活扫码算法失败:$result_code,$error"
+ }
+ synchronized(syncLock) {
+ syncLock.notify()
+ }
+ }
+
+ /**
+ * 调用活动函数时的当前活动状态。
+ * 如果该函数处于非活动状态,则在活动进程完成时将返回该函数。
+ */
+ override fun onActivateState(bActivated: Boolean) {
+ if (bActivated) {
+ /**
+ * 条形码处于激活状态
+ * 配置条形码
+ */
+ active = true
+ } else {
+ /**
+ * 激活失败,界面提示
+ */
+ }
+ }
+ })
+ synchronized(syncLock) {
+ syncLock.wait(10 * 1000)
+ }
+ return if (active) {
+ BaseResp(PublicDef.SUCCESS, "激活成功")
+ } else {
+ BaseResp(PublicDef.ERROR, activeMsg)
+ }
+ } else {
+ configBarcode(context)
+ return BaseResp(PublicDef.SUCCESS, "激活成功")
+ }
+ }
+
+ /**
+ * 配置条码功能集成
+ */
+ private fun configBarcode(context: Context) {
+ val mUtils = CodeUtils(context)
+ //清除之前的设置
+ mUtils.enableAllFormats(false)
+ // mUtils.enableAllFormats(true);
+//设置新的配置
+// for (int i = 0; i < mBarcodeList.length; i++) {
+// mUtils.enableCodeFormat(mBarcodeList[i]);
+// }
+ mUtils.enableCodeFormat(CodeID.QR)
+ saveActiveStatus(true)
+ }
+
+ private fun registerDevice(posid: String?, schoolno: String?): TransResp? {
+ if (posid.isNullOrEmpty()) {
+ return TransResp(PublicDef.ERROR, "posid为空")
+ }
+ if (schoolno.isNullOrEmpty()) {
+ return TransResp(PublicDef.ERROR, "schoolno为空")
+ }
+ val reqBean = EpaySynoRegisterReqBean()
+ reqBean.schoolCode = schoolno
+ reqBean.termDateTime = DateUtil.getNowDateTimeNoFormat()
+ return NetworkHandler.getInstance().post(
+ "${baseUrl}/pos/registry/${posid}",
+ GsonUtil.GsonString(reqBean),
+ getSignKey(posid)
+ )
+ }
+
+ private fun getRegisterStatus(posid: String?): TransResp? {
+ if (posid.isNullOrEmpty()) {
+ return TransResp(PublicDef.ERROR, "posid为空")
+ }
+ return NetworkHandler.getInstance()
+ .get("${baseUrl}/pos/registry/${posid}", null, getSignKey(posid))
+ }
+
+ private fun activeDevice(posid: String?, license: String?): TransResp? {
+ if (posid.isNullOrEmpty()) {
+ return TransResp(PublicDef.ERROR, "posid为空")
+ }
+ if (license.isNullOrEmpty()) {
+ return TransResp(PublicDef.ERROR, "license为空")
+ }
+ val reqBean = EpaySynoActiveReqBean()
+ reqBean.license = license
+ return NetworkHandler.getInstance().post(
+ "${baseUrl}/pos/activate/${posid}",
+ GsonUtil.GsonString(reqBean),
+ getSignKey(posid)
+ )
+ }
+
+ private fun getActiveStatus(posid: String?): TransResp? {
+ if (posid.isNullOrEmpty()) {
+ return TransResp(PublicDef.ERROR, "posid为空")
+ }
+ return NetworkHandler.getInstance()
+ .get("${baseUrl}/pos/activate/${posid}", null, getSignKey(posid))
+ }
+
+ private fun getSignKey(posid: String): String {
+ return CryptUtil.HASH256("${posid}:9Srqd86Ekgb7W7UGKl7dOHKBPLSJhQEG")
+ }
+
+ private fun saveActiveStatus(active: Boolean) {
+ if (active) {
+ pos.replaceControlPara(
+ ControlParaRecord(
+ PublicDef.CONTROL_SYNOCODE_ACTIVE,
+ "激活成功时间:" + DateUtil.getNowDateTimeNoFormat()
+ )
+ )
+ } else {
+ pos.replaceControlPara(
+ ControlParaRecord(
+ PublicDef.CONTROL_SYNOCODE_ACTIVE,
+ "激活失败时间:" + DateUtil.getNowDateTimeNoFormat()
+ )
+ )
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/utils/CommonUtil.kt b/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
index 253a752..119217b 100644
--- a/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
@@ -1,287 +1,314 @@
-@file:Suppress("DEPRECATION")
-
-package com.supwisdom.utils
-
-import android.annotation.SuppressLint
-import android.app.Activity
-import android.app.ActivityManager
-import android.content.ContentResolver
-import android.content.Context
-import android.content.Intent
-import android.content.pm.PackageManager
-import android.net.Uri
-import android.os.Build
-import android.os.PowerManager
-import android.provider.Settings
-import android.view.WindowManager
-import android.widget.EditText
-import com.supwisdom.activities.SPApplication
-import java.io.File
-import java.io.FileOutputStream
-import java.io.PrintWriter
-import java.io.StringWriter
-import java.util.regex.Pattern
-
-/**
- * @author zzq
- * @date 2018/5/9.
- * @version 1.0.1
- * @desc 公共类
- */
-object CommonUtil {
- fun doSleep(ms: Int) {
- try {
- Thread.sleep(ms.toLong())
- } catch (e: InterruptedException) {
- e.printStackTrace()
- }
- }
-
- fun getEditView(et: EditText): String {
- return et.text.toString().trim { it <= ' ' }.replace(" ", "")
- }
-
- fun getCommunicateTime(): Int {
- var commTime = 2
- val sysRecord = SPApplication.getInstance().getPos().getSysPara()
- if (sysRecord != null) {
- commTime = sysRecord.commTime
- if (commTime == 0) {
- commTime = 2
- }
- }
- return commTime
- }
-
- fun getSerialNumber(): String? {
- try {
- val c = Class.forName("android.os.SystemProperties")
- val get = c.getMethod("get", String::class.java)
- return get.invoke(c, "ro.product.firmware") as String
- } catch (ex: Exception) {
- ex.printStackTrace()
- }
-
- return null
- }
-
- fun YuanToFen(yuan: Double): Int {
- return Math.round(yuan * 100).toInt()
- }
-
- fun upgrade(context: Context, filename: String) {
- val intent = Intent(Intent.ACTION_VIEW)
- val uri = Uri.fromFile(File(filename))
- intent.setDataAndType(uri, "application/vnd.android.package-archive")
- (context as Activity).startActivityForResult(intent, 0)
- }
-
- fun isNumeric(str: String): Boolean {
- val pattern = Pattern.compile("[0-9]*")
- val isNum = pattern.matcher(str)
- return isNum.matches()
- }
-
- fun showFormatAmount(preHint: String, amount: Int): String {
- return String.format("%s: %.02f元", preHint, amount / 100.0f)
- }
-
- /*优化a811扫码*/
- fun writeLinnuuxParams() {
- try {
- val fos = FileOutputStream("/sys/module/gc0308/parameters/exposure")
- fos.write("20".toByteArray())
- fos.close()
- } catch (e: Exception) {
- e.printStackTrace()
- }
- }
-
- /**
- * 判断服务是否开启
- *
- * @param mContext
- * @param serviceName
- * @return
- */
- fun isServiceWork(mContext: Context, serviceName: String): Boolean {
- val myAM = mContext
- .getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
- val myList = myAM.getRunningServices(40)
- if (myList.size <= 0) {
- return false
- }
- for (i in myList.indices) {
- val mName = myList[i].service.className.toString()
- if (mName == serviceName) {
- return true
- }
- }
- return false
- }
-
- fun getExceptionStack(e: Exception?): String {
- if (e == null) {
- return "null"
- }
- val sw = StringWriter()
- val pw = PrintWriter(sw)
- e.printStackTrace(pw)
- return sw.toString()
- }
-
- /**
- * get App versionName
- *
- * @param context
- * @return
- */
- fun getVersionName(context: Context): String {
- return try {
- val packageManager = context.packageManager
- val packageInfo = packageManager.getPackageInfo(context.packageName, 0)
- packageInfo.versionName
- } catch (e: PackageManager.NameNotFoundException) {
- e.printStackTrace()
- "error:" + e.message
- }
-
- }
-
- /**
- * 跳转网络设置页;
- */
- fun startNetSetting(context: Context) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- context.startActivity(Intent(Settings.ACTION_SETTINGS))
- } else {
- context.startActivity(Intent(Settings.ACTION_WIRELESS_SETTINGS))
- }
- }
-
- /**
- * 唤醒屏幕
- */
- fun acquireWakeLock(context: Context) {
- /*FULL_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度
- ACQUIRE_CAUSES_WAKEUP:强制使屏幕亮起,这种锁主要针对一些必须通知用户的操作.
- ON_AFTER_RELEASE:当锁被释放时,保持屏幕亮起一段时间*/
- try {
- val pm = context.getSystemService(Context.POWER_SERVICE) as PowerManager
- @SuppressLint("InvalidWakeLockTag") val wakeLock = pm.newWakeLock(
- PowerManager.ON_AFTER_RELEASE
- or PowerManager.ACQUIRE_CAUSES_WAKEUP
- or PowerManager.FULL_WAKE_LOCK, "Tag"
- )
- wakeLock.acquire()
- wakeLock.release()
- } catch (ex: Exception) {
- ex.printStackTrace()
- }
-
- }
-
- fun getPasswordStar(len: Int): String {
- return when (len) {
- 0 -> " "
- 1 -> "*"
- 2 -> "**"
- 3 -> "***"
- 4 -> "****"
- 5 -> "*****"
- 6 -> "******"
- else -> " "
- }
- }
-
- /**
- * @param activity
- * @param brightness [1-255]
- * @desc 根据亮度值修改当前window亮度
- */
- fun setAppBrightness(activity: Activity, brightness: Int) {
- val window = activity.window
- val lp = window.attributes
- if (brightness == -1) {
- if (lp.screenBrightness < 0) {
- /**
- * 已经是正常亮度
- */
- return
- }
- lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE
- } else {
- if (lp.screenBrightness > 0) {
- /**
- * 已经屏保亮度
- */
- return
- }
-// stopAutoBrightness(activity)
- lp.screenBrightness = (if (brightness <= 0) 1 else brightness) / 255f
- }
- window.attributes = lp
- /**
- * 生效?
- */
-// getActivityBrightness(activity)
- }
-
- /**
- * 获取当前activity的屏幕亮度
- *
- * @param activity 当前的activity对象
- * @return 亮度值范围为0-0.1f,如果为-1.0,则亮度与全局同步。
- */
- private fun getActivityBrightness(activity: Activity): Float {
- val localWindow = activity.window
- val params = localWindow.attributes
- return params.screenBrightness
- }
-
- /**
- * 判断是否开启了自动亮度调节
- * *
- * * @param aContext
- * * @return
- *
- */
- private fun isAutoBrightness(aContentResolver: ContentResolver): Boolean {
- try {
- return Settings.System.getInt(
- aContentResolver,
- Settings.System.SCREEN_BRIGHTNESS_MODE
- ) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC
- } catch (e: Settings.SettingNotFoundException) {
- e.printStackTrace()
- }
-
- return false
- }
-
- /**
- * 停止自动亮度调节
- *
- * @param activity
- */
- private fun stopAutoBrightness(activity: Activity) {
- Settings.System.putInt(
- activity.contentResolver,
- Settings.System.SCREEN_BRIGHTNESS_MODE,
- Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL
- )
- }
-
- /**
- * 开启亮度自动调节
- *
- * @param activity
- */
- private fun startAutoBrightness(activity: Activity) {
- Settings.System.putInt(
- activity.contentResolver,
- Settings.System.SCREEN_BRIGHTNESS_MODE,
- Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC
- )
- }
+@file:Suppress("DEPRECATION")
+
+package com.supwisdom.utils
+
+import android.annotation.SuppressLint
+import android.app.Activity
+import android.app.ActivityManager
+import android.content.ContentResolver
+import android.content.Context
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.net.Uri
+import android.os.Build
+import android.os.PowerManager
+import android.provider.Settings
+import android.view.WindowManager
+import android.widget.EditText
+import com.supwisdom.activities.SPApplication
+import okhttp3.internal.and
+import java.io.File
+import java.io.FileOutputStream
+import java.io.PrintWriter
+import java.io.StringWriter
+import java.net.NetworkInterface
+import java.util.*
+import java.util.regex.Pattern
+
+/**
+ * @author zzq
+ * @date 2018/5/9.
+ * @version 1.0.1
+ * @desc 公共类
+ */
+object CommonUtil {
+ fun doSleep(ms: Int) {
+ try {
+ Thread.sleep(ms.toLong())
+ } catch (e: InterruptedException) {
+ e.printStackTrace()
+ }
+ }
+
+ fun getEditView(et: EditText): String {
+ return et.text.toString().trim { it <= ' ' }.replace(" ", "")
+ }
+
+ fun getCommunicateTime(): Int {
+ var commTime = 2
+ val sysRecord = SPApplication.getInstance().getPos().getSysPara()
+ if (sysRecord != null) {
+ commTime = sysRecord.commTime
+ if (commTime == 0) {
+ commTime = 2
+ }
+ }
+ return commTime
+ }
+
+ fun getSerialNumber(): String {
+ try {
+ val c = Class.forName("android.os.SystemProperties")
+ val get = c.getMethod("get", String::class.java)
+ return (get.invoke(c, "ro.serialno") as String)
+ } catch (ex: java.lang.Exception) {
+ ex.printStackTrace()
+ }
+ return ""
+ }
+
+ fun YuanToFen(yuan: Double): Int {
+ return Math.round(yuan * 100).toInt()
+ }
+
+ fun upgrade(context: Context, filename: String) {
+ val intent = Intent(Intent.ACTION_VIEW)
+ val uri = Uri.fromFile(File(filename))
+ intent.setDataAndType(uri, "application/vnd.android.package-archive")
+ (context as Activity).startActivityForResult(intent, 0)
+ }
+
+ fun isNumeric(str: String): Boolean {
+ val pattern = Pattern.compile("[0-9]*")
+ val isNum = pattern.matcher(str)
+ return isNum.matches()
+ }
+
+ fun showFormatAmount(preHint: String, amount: Int): String {
+ return String.format("%s: %.02f元", preHint, amount / 100.0f)
+ }
+
+ /*优化a811扫码*/
+ fun writeLinnuuxParams() {
+ try {
+ val fos = FileOutputStream("/sys/module/gc0308/parameters/exposure")
+ fos.write("20".toByteArray())
+ fos.close()
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+
+ /**
+ * 判断服务是否开启
+ *
+ * @param mContext
+ * @param serviceName
+ * @return
+ */
+ fun isServiceWork(mContext: Context, serviceName: String): Boolean {
+ val myAM = mContext
+ .getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
+ val myList = myAM.getRunningServices(40)
+ if (myList.size <= 0) {
+ return false
+ }
+ for (i in myList.indices) {
+ val mName = myList[i].service.className.toString()
+ if (mName == serviceName) {
+ return true
+ }
+ }
+ return false
+ }
+
+ fun getExceptionStack(e: Exception?): String {
+ if (e == null) {
+ return "null"
+ }
+ val sw = StringWriter()
+ val pw = PrintWriter(sw)
+ e.printStackTrace(pw)
+ return sw.toString()
+ }
+
+ /**
+ * get App versionName
+ *
+ * @param context
+ * @return
+ */
+ fun getVersionName(context: Context): String {
+ return try {
+ val packageManager = context.packageManager
+ val packageInfo = packageManager.getPackageInfo(context.packageName, 0)
+ packageInfo.versionName
+ } catch (e: PackageManager.NameNotFoundException) {
+ e.printStackTrace()
+ "error:" + e.message
+ }
+
+ }
+
+ /**
+ * 跳转网络设置页;
+ */
+ fun startNetSetting(context: Context) {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ context.startActivity(Intent(Settings.ACTION_SETTINGS))
+ } else {
+ context.startActivity(Intent(Settings.ACTION_WIRELESS_SETTINGS))
+ }
+ }
+
+ /**
+ * 唤醒屏幕
+ */
+ fun acquireWakeLock(context: Context) {
+ /*FULL_WAKE_LOCK:保持CPU 运转,保持屏幕高亮显示,键盘灯也保持亮度
+ ACQUIRE_CAUSES_WAKEUP:强制使屏幕亮起,这种锁主要针对一些必须通知用户的操作.
+ ON_AFTER_RELEASE:当锁被释放时,保持屏幕亮起一段时间*/
+ try {
+ val pm = context.getSystemService(Context.POWER_SERVICE) as PowerManager
+ @SuppressLint("InvalidWakeLockTag") val wakeLock = pm.newWakeLock(
+ PowerManager.ON_AFTER_RELEASE
+ or PowerManager.ACQUIRE_CAUSES_WAKEUP
+ or PowerManager.FULL_WAKE_LOCK, "Tag"
+ )
+ wakeLock.acquire()
+ wakeLock.release()
+ } catch (ex: Exception) {
+ ex.printStackTrace()
+ }
+
+ }
+
+ fun getPasswordStar(len: Int): String {
+ return when (len) {
+ 0 -> " "
+ 1 -> "*"
+ 2 -> "**"
+ 3 -> "***"
+ 4 -> "****"
+ 5 -> "*****"
+ 6 -> "******"
+ else -> " "
+ }
+ }
+
+ /**
+ * @param activity
+ * @param brightness [1-255]
+ * @desc 根据亮度值修改当前window亮度
+ */
+ fun setAppBrightness(activity: Activity, brightness: Int) {
+ val window = activity.window
+ val lp = window.attributes
+ if (brightness == -1) {
+ if (lp.screenBrightness < 0) {
+ /**
+ * 已经是正常亮度
+ */
+ return
+ }
+ lp.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE
+ } else {
+ if (lp.screenBrightness > 0) {
+ /**
+ * 已经屏保亮度
+ */
+ return
+ }
+// stopAutoBrightness(activity)
+ lp.screenBrightness = (if (brightness <= 0) 1 else brightness) / 255f
+ }
+ window.attributes = lp
+ /**
+ * 生效?
+ */
+// getActivityBrightness(activity)
+ }
+
+ /**
+ * 获取当前activity的屏幕亮度
+ *
+ * @param activity 当前的activity对象
+ * @return 亮度值范围为0-0.1f,如果为-1.0,则亮度与全局同步。
+ */
+ private fun getActivityBrightness(activity: Activity): Float {
+ val localWindow = activity.window
+ val params = localWindow.attributes
+ return params.screenBrightness
+ }
+
+ /**
+ * 判断是否开启了自动亮度调节
+ * *
+ * * @param aContext
+ * * @return
+ *
+ */
+ private fun isAutoBrightness(aContentResolver: ContentResolver): Boolean {
+ try {
+ return Settings.System.getInt(
+ aContentResolver,
+ Settings.System.SCREEN_BRIGHTNESS_MODE
+ ) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC
+ } catch (e: Settings.SettingNotFoundException) {
+ e.printStackTrace()
+ }
+
+ return false
+ }
+
+ /**
+ * 停止自动亮度调节
+ *
+ * @param activity
+ */
+ private fun stopAutoBrightness(activity: Activity) {
+ Settings.System.putInt(
+ activity.contentResolver,
+ Settings.System.SCREEN_BRIGHTNESS_MODE,
+ Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL
+ )
+ }
+
+ /**
+ * 开启亮度自动调节
+ *
+ * @param activity
+ */
+ private fun startAutoBrightness(activity: Activity) {
+ Settings.System.putInt(
+ activity.contentResolver,
+ Settings.System.SCREEN_BRIGHTNESS_MODE,
+ Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC
+ )
+ }
+
+ fun getHardwareAddress(): String {
+ try {
+ val all: List<NetworkInterface> =
+ Collections.list(NetworkInterface.getNetworkInterfaces())
+ for (nif in all) {
+ if (!nif.name.equals("eth0", ignoreCase = true)) {
+ continue
+ }
+ val macBytes = nif.hardwareAddress ?: return ""
+ val sb = StringBuilder()
+ for (b in macBytes) {
+ var hex = Integer.toHexString(b and 0xFF)
+ if (hex.length == 1) hex = "0$hex"
+ sb.append("$hex:")
+ }
+ if (sb.isNotEmpty()) {
+ sb.deleteCharAt(sb.length - 1)
+ }
+ return sb.toString()
+ }
+ } catch (ex: java.lang.Exception) {
+ }
+ return ""
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/utils/CryptUtil.kt b/app/src/main/java/com/supwisdom/utils/CryptUtil.kt
index b3d7f97..f1022e7 100644
--- a/app/src/main/java/com/supwisdom/utils/CryptUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/CryptUtil.kt
@@ -1,142 +1,142 @@
-package com.supwisdom.utils
-
-import java.io.InputStream
-import java.io.UnsupportedEncodingException
-import java.security.InvalidKeyException
-import java.security.MessageDigest
-import java.security.NoSuchAlgorithmException
-import javax.crypto.Mac
-import javax.crypto.spec.SecretKeySpec
-
-/**
- ** create by zzq on 2019/7/24
- ** @desc
- **/
-object CryptUtil {
- fun HASH256(text: String): String? {
- return algorithm2(text, "SHA-256", true)
- }
-
- fun HASH256(fis: InputStream): String? {
- return algorithm(fis, "SHA-256")
- }
-
- fun HASH256(fis: InputStream, extData: String): String? {
- return algorithm(fis, "SHA-256", extData)
- }
-
- fun HASH512(text: String): String? {
- return algorithm2(text, "SHA-512", true)
- }
-
- fun MD5(text: String): String? {
- return algorithm2(text, "MD5", false)
- }
-
- fun HMACSHA1(data: String, key: String): String? {
- try {
- val algorithm = "HmacSHA1"
- val mac = Mac.getInstance(algorithm)
- val spec = SecretKeySpec(key.toByteArray(), algorithm)
- mac.init(spec)
- val byteHMAC = mac.doFinal(data.toByteArray())
- return byteHMAC.encodeHex()
- } catch (e: InvalidKeyException) {
- e.printStackTrace()
- } catch (ignore: NoSuchAlgorithmException) {
- ignore.printStackTrace()
- }
- return null
- }
-
- fun HMACSHA256(data: String, key: String): String? {
- try {
- val algorithm = "HmacSHA256"
- val mac = Mac.getInstance(algorithm)
- val spec = SecretKeySpec(key.toByteArray(), algorithm)
- mac.init(spec)
- val byteHMAC = mac.doFinal(data.toByteArray())
- return byteHMAC.encodeHex()
- } catch (e: InvalidKeyException) {
- e.printStackTrace()
- } catch (ignore: NoSuchAlgorithmException) {
- ignore.printStackTrace()
- }
- return null
- }
-
- private fun algorithm2(text: String?, algorithm: String, isUpperCase: Boolean): String? {
- if (text != null && text.isNotEmpty()) {
- try {
- //创建具有指定算法名称的信息摘要
- val md = MessageDigest.getInstance(algorithm)
- //使用指定的字节数组对摘要进行最后更新,然后完成摘要计算
- val results = md.digest(text.toByteArray(charset("UTF-8")))
- //将得到的字节数组变成字符串返回
- val resultString = results.encodeHex()
- return if (isUpperCase) {
- resultString.toUpperCase()
- } else {
- resultString.toLowerCase()
- }
- } catch (ex: NoSuchAlgorithmException) {
- ex.printStackTrace()
- } catch (ex: UnsupportedEncodingException) {
- ex.printStackTrace()
- }
- }
- return null
- }
-
- private fun algorithm(fis: InputStream, algorithm: String): String? {
- try {
- //拿到一个MD5转换器,如果想使用SHA-1或SHA-256,则传入SHA-1,SHA-256
- val md = MessageDigest.getInstance(algorithm)
-
- //分多次将一个文件读入,对于大型文件而言,比较推荐这种方式,占用内存比较少。
- val buffer = ByteArray(1024)
- var length: Int
- while (true) {
- length = fis.read(buffer, 0, 1024)
- if (length < 0) {
- break
- }
- md.update(buffer, 0, length)
- }
- fis.close()
- //转换并返回包含16个元素字节数组,返回数值范围为-128到127
- return md.digest().encodeHex()
- } catch (e: Exception) {
- e.printStackTrace()
- return null
- }
-
- }
-
- private fun algorithm(fis: InputStream, algorithm: String, extData: String): String? {
- try {
- //拿到一个MD5转换器,如果想使用SHA-1或SHA-256,则传入SHA-1,SHA-256
- val md = MessageDigest.getInstance(algorithm)
-
- //分多次将一个文件读入,对于大型文件而言,比较推荐这种方式,占用内存比较少。
- val buffer = ByteArray(1024)
- var length: Int
- while (true) {
- length = fis.read(buffer, 0, 1024)
- if (length < 0) {
- break
- }
- md.update(buffer, 0, length)
- }
- fis.close()
- md.update(extData.toByteArray(charset("UTF-8")))
-
- //转换并返回包含16个元素字节数组,返回数值范围为-128到127
- return md.digest().encodeHex()
- } catch (e: Exception) {
- e.printStackTrace()
- return null
- }
-
- }
+package com.supwisdom.utils
+
+import java.io.InputStream
+import java.io.UnsupportedEncodingException
+import java.security.InvalidKeyException
+import java.security.MessageDigest
+import java.security.NoSuchAlgorithmException
+import javax.crypto.Mac
+import javax.crypto.spec.SecretKeySpec
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+object CryptUtil {
+ fun HASH256(text: String): String {
+ return algorithm2(text, "SHA-256", true)
+ }
+
+ fun HASH256(fis: InputStream): String {
+ return algorithm(fis, "SHA-256")
+ }
+
+ fun HASH256(fis: InputStream, extData: String): String {
+ return algorithm(fis, "SHA-256", extData)
+ }
+
+ fun HASH512(text: String): String {
+ return algorithm2(text, "SHA-512", true)
+ }
+
+ fun MD5(text: String): String {
+ return algorithm2(text, "MD5", false)
+ }
+
+ fun HMACSHA1(data: String, key: String): String {
+ try {
+ val algorithm = "HmacSHA1"
+ val mac = Mac.getInstance(algorithm)
+ val spec = SecretKeySpec(key.toByteArray(), algorithm)
+ mac.init(spec)
+ val byteHMAC = mac.doFinal(data.toByteArray())
+ return byteHMAC.encodeHex()
+ } catch (e: InvalidKeyException) {
+ e.printStackTrace()
+ } catch (ignore: NoSuchAlgorithmException) {
+ ignore.printStackTrace()
+ }
+ return ""
+ }
+
+ fun HMACSHA256(data: String, key: String): String {
+ try {
+ val algorithm = "HmacSHA256"
+ val mac = Mac.getInstance(algorithm)
+ val spec = SecretKeySpec(key.toByteArray(), algorithm)
+ mac.init(spec)
+ val byteHMAC = mac.doFinal(data.toByteArray())
+ return byteHMAC.encodeHex()
+ } catch (e: InvalidKeyException) {
+ e.printStackTrace()
+ } catch (ignore: NoSuchAlgorithmException) {
+ ignore.printStackTrace()
+ }
+ return ""
+ }
+
+ private fun algorithm2(text: String?, algorithm: String, isUpperCase: Boolean): String {
+ if (text != null && text.isNotEmpty()) {
+ try {
+ //创建具有指定算法名称的信息摘要
+ val md = MessageDigest.getInstance(algorithm)
+ //使用指定的字节数组对摘要进行最后更新,然后完成摘要计算
+ val results = md.digest(text.toByteArray(charset("UTF-8")))
+ //将得到的字节数组变成字符串返回
+ val resultString = results.encodeHex()
+ return if (isUpperCase) {
+ resultString.toUpperCase()
+ } else {
+ resultString.toLowerCase()
+ }
+ } catch (ex: NoSuchAlgorithmException) {
+ ex.printStackTrace()
+ } catch (ex: UnsupportedEncodingException) {
+ ex.printStackTrace()
+ }
+ }
+ return ""
+ }
+
+ private fun algorithm(fis: InputStream, algorithm: String): String {
+ try {
+ //拿到一个MD5转换器,如果想使用SHA-1或SHA-256,则传入SHA-1,SHA-256
+ val md = MessageDigest.getInstance(algorithm)
+
+ //分多次将一个文件读入,对于大型文件而言,比较推荐这种方式,占用内存比较少。
+ val buffer = ByteArray(1024)
+ var length: Int
+ while (true) {
+ length = fis.read(buffer, 0, 1024)
+ if (length < 0) {
+ break
+ }
+ md.update(buffer, 0, length)
+ }
+ fis.close()
+ //转换并返回包含16个元素字节数组,返回数值范围为-128到127
+ return md.digest().encodeHex()
+ } catch (e: Exception) {
+ e.printStackTrace()
+ return ""
+ }
+
+ }
+
+ private fun algorithm(fis: InputStream, algorithm: String, extData: String): String {
+ try {
+ //拿到一个MD5转换器,如果想使用SHA-1或SHA-256,则传入SHA-1,SHA-256
+ val md = MessageDigest.getInstance(algorithm)
+
+ //分多次将一个文件读入,对于大型文件而言,比较推荐这种方式,占用内存比较少。
+ val buffer = ByteArray(1024)
+ var length: Int
+ while (true) {
+ length = fis.read(buffer, 0, 1024)
+ if (length < 0) {
+ break
+ }
+ md.update(buffer, 0, length)
+ }
+ fis.close()
+ md.update(extData.toByteArray(charset("UTF-8")))
+
+ //转换并返回包含16个元素字节数组,返回数值范围为-128到127
+ return md.digest().encodeHex()
+ } catch (e: Exception) {
+ e.printStackTrace()
+ return ""
+ }
+
+ }
}
\ 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 a65a9ce..0430400 100644
--- a/app/src/main/java/com/supwisdom/utils/DateUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/DateUtil.kt
@@ -1,335 +1,352 @@
-package com.supwisdom.utils
-
-import java.text.ParseException
-import java.text.SimpleDateFormat
-import java.util.*
-
-/**
- ** create by zzq on 2019/7/23
- ** @desc
- **/
-object DateUtil {
- private val FORMAT_yyyyMMdd = org.apache.commons.lang3.time.FastDateFormat.getInstance("yyyyMMdd")
- private val FORMAT_yyMMddHHmmss = org.apache.commons.lang3.time.FastDateFormat.getInstance("yyMMddHHmmss")
- private val FORMAT_yyMMddHHmmss2 = org.apache.commons.lang3.time.FastDateFormat.getInstance("yy-MM-dd HH:mm:ss")
- private val FORMAT_HHmmss = org.apache.commons.lang3.time.FastDateFormat.getInstance("HHmmss")
- private val FORMAT_MMdd = org.apache.commons.lang3.time.FastDateFormat.getInstance("MMdd")
- private val FORMAT_MM_dd = org.apache.commons.lang3.time.FastDateFormat.getInstance("MM-dd")
- private val FORMAT_yyyyMMddHHmmss = org.apache.commons.lang3.time.FastDateFormat.getInstance("yyyyMMddHHmmss")
- private val FORMAT_yyyyMMddHHmm = org.apache.commons.lang3.time.FastDateFormat.getInstance("yyyyMMddHHmm")
- private val FORMAT_MMddHHmmyy = org.apache.commons.lang3.time.FastDateFormat.getInstance("MMddHHmmyy")
- private val FORMAT_yyyy_MM_dd_HH_mm_ss =
- org.apache.commons.lang3.time.FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss")
- private val FORMAT_yyyy_MM_dd = org.apache.commons.lang3.time.FastDateFormat.getInstance("yyyy-MM-dd")
- private val FORMAT_HH_mm_ss = org.apache.commons.lang3.time.FastDateFormat.getInstance("HH:mm:ss")
-
- /**
- * @return yyyy-MM-dd HH:mm:ss
- */
- fun getNow(): String {
- return FORMAT_yyyy_MM_dd_HH_mm_ss.format(Date())
- }
-
- fun getNowDateSpecFormat(): String {
- return FORMAT_yyyy_MM_dd.format(Date())
- }
-
- fun utcToLocal(utctime: String): String {
- val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
- sdf.timeZone = TimeZone.getTimeZone("UTC")
- return try {
- val utcDate = sdf.parse(utctime)
- sdf.timeZone = TimeZone.getDefault()
- val localTime = sdf.format(utcDate.time)
- val localDate = sdf.parse(localTime)
- FORMAT_yyyyMMddHHmmss.format(localDate.time)
- } catch (ex: ParseException) {
- ex.printStackTrace()
- ""
- }
- }
-
- /**
- * @param date yyyyMMdd
- * @return yyyy-MM-dd
- */
- fun getNowDateFromNoFormat(date: String): String {
- try {
- return date.substring(0, 4) + "-" +
- date.substring(4, 6) + "-" +
- date.substring(6, 8)
- } catch (ex: Exception) {
- }
- return ""
- }
-
- /**
- * @return HH:mm:ss
- */
- fun getNowTimeWithArg(date: Date): String? {
- return try {
- FORMAT_HH_mm_ss.format(date)
- } catch (e: Exception) {
- null
- }
- }
-
- /**
- * @param time HHmm
- * @return HH:mm
- */
- fun formatTime(time: String): String? {
- return try {
- val sb = StringBuilder()
- sb.append(time.substring(0, 2)).append(":")
- .append(time.substring(2, 4))
- sb.toString()
- } catch (e: Exception) {
- null
- }
- }
-
- /**
- * @return MMdd
- */
- fun getDateMMdd(): String? {
- return try {
- FORMAT_MMdd.format(Date())
- } catch (e: Exception) {
- e.printStackTrace()
- null
- }
- }
-
- /**
- * @return MM-dd
- */
- fun getDate_MMdd(): String? {
- try {
- return FORMAT_MM_dd.format(Date())
- } catch (e: Exception) {
- e.printStackTrace()
- }
- return null
- }
-
- /**
- * @return yyyy-MM-dd HH:mm:ss
- */
- fun getNowDateTime(): String {
- return FORMAT_yyyy_MM_dd_HH_mm_ss.format(Date())
- }
-
- /**
- * @return yyyy-MM-dd
- */
- fun getNowDate(): String {
- return FORMAT_yyyy_MM_dd.format(Date())
- }
-
- /**
- * @param dateStr yyyy-MM-dd
- * @return
- */
- fun getNowDateTime(dateStr: String): Date? {
- try {
- return FORMAT_yyyy_MM_dd.parse(dateStr)
- } catch (e: ParseException) {
- e.printStackTrace()
- }
- return null
- }
-
- /**
- * @return HH:mm:ss
- */
- fun getNowTime(): String {
- return FORMAT_HH_mm_ss.format(Date())
- }
-
- /**
- * @return format
- */
- fun getDayofWeek(offsetWeek: Int, dayOfWeek: Int, format: String): String {
- val cal = Calendar.getInstance()
- // n为推迟的周数,1本周,-1向前推迟一周,2下周,依次类推
- val retday: String
- cal.add(Calendar.DATE, offsetWeek * 7)
- cal.set(Calendar.DAY_OF_WEEK, dayOfWeek)
- retday = org.apache.commons.lang3.time.FastDateFormat.getInstance(format).format(cal.time)
- return retday
- }
-
- /**
- * 计算超时时间,精确到毫秒
- *
- * @param milliSeconds
- * @return L
- */
- fun getExpireTime(milliSeconds: Long): Long {
- return Date().time + milliSeconds
- }
-
- /**
- * @return yyyyMMddHHmmss
- */
- fun getNowDateTimeNoFormat(): String {
- return FORMAT_yyyyMMddHHmmss.format(Date())
- }
-
- /**
- * @return yyyyMMdd
- */
- fun getNowDateNoFormat(): String {
- return FORMAT_yyyyMMdd.format(Date())
- }
-
- /**
- * @param date
- * @return yyyyMMdd
- */
- fun getNowDateNoFormat(date: Date): String? {
- try {
- return FORMAT_yyyyMMdd.format(date)
- } catch (e: Exception) {
- e.printStackTrace()
- }
- return null
- }
-
- /**
- * @return HHmmss
- */
- fun getNowTimeNoFormat(): String {
- return FORMAT_HHmmss.format(Date())
- }
-
- /**
- * @param datetime yyyyMMddHHmmss
- * @return ms
- * @desc 将日期格式的字符串转换为长整型
- */
- fun dateFormatConvertToLong(datetime: String): Long {
- return try {
- FORMAT_yyyyMMddHHmmss.parse(datetime).time
- } catch (ex: ParseException) {
- 0L
- }
- }
-
- /**
- * @param time HHmmss
- * @return ms
- * @desc 将时间格式的字符串转换为长整型
- */
- fun timeFormatConvertToLong(time: String): Long {
- return try {
- FORMAT_HHmmss.parse(time).time
- } catch (ex: ParseException) {
- 0L
- }
- }
-
- /**
- * @param time ms
- * @return yyyyMMddHHmmss
- * @desc 将长整型数字转换为日期格式的字符串
- */
- fun dateLongConvertToFormat(time: Long): String {
- return if (time > 0L) {
- FORMAT_yyyyMMddHHmmss.format(Date(time))
- } else ""
- }
-
- /**
- * @param time ms
- * @return MMddHHmmyy
- * @desc 将长整型数字转换为日期格式的字符串
- */
- fun dateLongConvertToFormat2(time: Long): String {
- return if (time > 0L) {
- FORMAT_MMddHHmmyy.format(Date(time))
- } else ""
- }
-
- /**
- * @param datetime yyyy-MM-dd HH:mm:ss
- * @return
- * @desc 将日期格式的字符串转换为长整型
- */
- fun dateFormatConvertToDate(datetime: String): Date? {
- return try {
- FORMAT_yyyy_MM_dd_HH_mm_ss.parse(datetime)
- } catch (ex: ParseException) {
- null
- }
- }
-
- /**
- * @param daynum 天数
- * @return 返回当前日期的第 daynum 天前的日期 yyyyMMdd
- */
- fun getDayDateNoFormatBefore(daynum: Int): String {
- val calendar = Calendar.getInstance()
- calendar.add(Calendar.DATE, -daynum)
- return FORMAT_yyyyMMdd.format(calendar.time)
- }
-
- /**
- * 获得指定日期的前一天
- *
- * @param specifiedDay yyyyMMdd
- * @return yyyyMMdd
- */
- fun getSpecifiedDayBefore(specifiedDay: String): String {
- return try {
- val c = Calendar.getInstance()
- val date = FORMAT_yyyyMMdd.parse(specifiedDay)
- c.time = date
- val day = c.get(Calendar.DATE)
- c.set(Calendar.DATE, day - 1)
- FORMAT_yyyyMMdd.format(c.time)
- } catch (e: ParseException) {
- ""
- }
- }
-
- /**
- * 获得指定日期的前一天
- *
- * @param dayBefore 往前推迟的天数
- * @return Date
- */
- fun getSomeDayBefore(dayBefore: Int): Date {
- val c = Calendar.getInstance()
- c.add(Calendar.DAY_OF_MONTH, -dayBefore)
- return c.time
- }
-
- /**
- * 获得指定日期的后一天
- *
- * @param specifiedDay yyyyMMdd
- * @return yyyyMMdd
- */
- fun getSpecifiedDayAfter(specifiedDay: String): String {
- return try {
- val c = Calendar.getInstance()
- val date = FORMAT_yyyyMMdd.parse(specifiedDay)
- c.time = date
- val day = c.get(Calendar.DATE)
- c.set(Calendar.DATE, day + 1)
- FORMAT_yyyyMMdd.format(c.time)
- } catch (e: ParseException) {
- ""
- }
- }
-
- /**
- * @return yyyyMMddHHmmss
- */
- fun getNowDateTimeFormat(): String {
- return FORMAT_yyyyMMddHHmmss.format(Date())
- }
-
+package com.supwisdom.utils
+
+import java.text.ParseException
+import java.text.SimpleDateFormat
+import java.util.*
+
+/**
+ ** create by zzq on 2019/7/23
+ ** @desc
+ **/
+object DateUtil {
+ private val FORMAT_yyyyMMdd =
+ org.apache.commons.lang3.time.FastDateFormat.getInstance("yyyyMMdd")
+ private val FORMAT_yyMMddHHmmss =
+ org.apache.commons.lang3.time.FastDateFormat.getInstance("yyMMddHHmmss")
+ private val FORMAT_yyMMddHHmmss2 =
+ org.apache.commons.lang3.time.FastDateFormat.getInstance("yy-MM-dd HH:mm:ss")
+ private val FORMAT_HHmmss = org.apache.commons.lang3.time.FastDateFormat.getInstance("HHmmss")
+ private val FORMAT_MMdd = org.apache.commons.lang3.time.FastDateFormat.getInstance("MMdd")
+ private val FORMAT_MM_dd = org.apache.commons.lang3.time.FastDateFormat.getInstance("MM-dd")
+ private val FORMAT_yyyyMMddHHmmss =
+ org.apache.commons.lang3.time.FastDateFormat.getInstance("yyyyMMddHHmmss")
+ private val FORMAT_yyyyMMddHHmm =
+ org.apache.commons.lang3.time.FastDateFormat.getInstance("yyyyMMddHHmm")
+ private val FORMAT_MMddHHmmyy =
+ org.apache.commons.lang3.time.FastDateFormat.getInstance("MMddHHmmyy")
+ private val FORMAT_yyyy_MM_dd_HH_mm_ss =
+ org.apache.commons.lang3.time.FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss")
+ private val FORMAT_yyyy_MM_dd_HH_mm =
+ org.apache.commons.lang3.time.FastDateFormat.getInstance("yyyy-MM-dd HH:mm")
+ private val FORMAT_yyyy_MM_dd =
+ org.apache.commons.lang3.time.FastDateFormat.getInstance("yyyy-MM-dd")
+ private val FORMAT_HH_mm_ss =
+ org.apache.commons.lang3.time.FastDateFormat.getInstance("HH:mm:ss")
+
+ /**
+ * @return yyyy-MM-dd HH:mm:ss
+ */
+ fun getNow(): String {
+ return FORMAT_yyyy_MM_dd_HH_mm_ss.format(Date())
+ }
+
+ fun getNowDateSpecFormat(): String {
+ return FORMAT_yyyy_MM_dd.format(Date())
+ }
+
+ fun utcToLocal(utctime: String): String {
+ val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
+ sdf.timeZone = TimeZone.getTimeZone("UTC")
+ return try {
+ val utcDate = sdf.parse(utctime)
+ sdf.timeZone = TimeZone.getDefault()
+ val localTime = sdf.format(utcDate.time)
+ val localDate = sdf.parse(localTime)
+ FORMAT_yyyyMMddHHmmss.format(localDate.time)
+ } catch (ex: ParseException) {
+ ex.printStackTrace()
+ ""
+ }
+ }
+
+ /**
+ * @param date yyyyMMdd
+ * @return yyyy-MM-dd
+ */
+ fun getNowDateFromNoFormat(date: String): String {
+ try {
+ return date.substring(0, 4) + "-" +
+ date.substring(4, 6) + "-" +
+ date.substring(6, 8)
+ } catch (ex: Exception) {
+ }
+ return ""
+ }
+
+ /**
+ * @return HH:mm:ss
+ */
+ fun getNowTimeWithArg(date: Date): String? {
+ return try {
+ FORMAT_HH_mm_ss.format(date)
+ } catch (e: Exception) {
+ null
+ }
+ }
+
+ /**
+ * @param time HHmm
+ * @return HH:mm
+ */
+ fun formatTime(time: String): String? {
+ return try {
+ val sb = StringBuilder()
+ sb.append(time.substring(0, 2)).append(":")
+ .append(time.substring(2, 4))
+ sb.toString()
+ } catch (e: Exception) {
+ null
+ }
+ }
+
+ /**
+ * @return MMdd
+ */
+ fun getDateMMdd(): String? {
+ return try {
+ FORMAT_MMdd.format(Date())
+ } catch (e: Exception) {
+ e.printStackTrace()
+ null
+ }
+ }
+
+ /**
+ * @return MM-dd
+ */
+ fun getDate_MMdd(): String? {
+ try {
+ return FORMAT_MM_dd.format(Date())
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ return null
+ }
+
+ /**
+ * @return yyyy-MM-dd HH:mm:ss
+ */
+ fun getNowDateTime(): String {
+ return FORMAT_yyyy_MM_dd_HH_mm_ss.format(Date())
+ }
+
+ /**
+ * @return yyyy-MM-dd HH:mm:ss
+ */
+ fun getNowDateTime1(): String {
+ return FORMAT_yyyy_MM_dd_HH_mm.format(Date())
+ }
+
+ /**
+ * @return yyyy-MM-dd
+ */
+ fun getNowDate(): String {
+ return FORMAT_yyyy_MM_dd.format(Date())
+ }
+
+ /**
+ * @param dateStr yyyy-MM-dd
+ * @return
+ */
+ fun getNowDateTime(dateStr: String): Date? {
+ try {
+ return FORMAT_yyyy_MM_dd.parse(dateStr)
+ } catch (e: ParseException) {
+ e.printStackTrace()
+ }
+ return null
+ }
+
+ /**
+ * @return HH:mm:ss
+ */
+ fun getNowTime(): String {
+ return FORMAT_HH_mm_ss.format(Date())
+ }
+
+ /**
+ * @return format
+ */
+ fun getDayofWeek(offsetWeek: Int, dayOfWeek: Int, format: String): String {
+ val cal = Calendar.getInstance()
+ // n为推迟的周数,1本周,-1向前推迟一周,2下周,依次类推
+ val retday: String
+ cal.add(Calendar.DATE, offsetWeek * 7)
+ cal.set(Calendar.DAY_OF_WEEK, dayOfWeek)
+ retday = org.apache.commons.lang3.time.FastDateFormat.getInstance(format).format(cal.time)
+ return retday
+ }
+
+ /**
+ * 计算超时时间,精确到毫秒
+ *
+ * @param milliSeconds
+ * @return L
+ */
+ fun getExpireTime(milliSeconds: Long): Long {
+ return Date().time + milliSeconds
+ }
+
+ /**
+ * @return yyyyMMddHHmmss
+ */
+ fun getNowDateTimeNoFormat(): String {
+ return FORMAT_yyyyMMddHHmmss.format(Date())
+ }
+
+ /**
+ * @return yyyyMMdd
+ */
+ fun getNowDateNoFormat(): String {
+ return FORMAT_yyyyMMdd.format(Date())
+ }
+
+ /**
+ * @param date
+ * @return yyyyMMdd
+ */
+ fun getNowDateNoFormat(date: Date): String? {
+ try {
+ return FORMAT_yyyyMMdd.format(date)
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ return null
+ }
+
+ /**
+ * @return HHmmss
+ */
+ fun getNowTimeNoFormat(): String {
+ return FORMAT_HHmmss.format(Date())
+ }
+
+ /**
+ * @param datetime yyyyMMddHHmmss
+ * @return ms
+ * @desc 将日期格式的字符串转换为长整型
+ */
+ fun dateFormatConvertToLong(datetime: String): Long {
+ return try {
+ FORMAT_yyyyMMddHHmmss.parse(datetime).time
+ } catch (ex: ParseException) {
+ 0L
+ }
+ }
+
+ /**
+ * @param time HHmmss
+ * @return ms
+ * @desc 将时间格式的字符串转换为长整型
+ */
+ fun timeFormatConvertToLong(time: String): Long {
+ return try {
+ FORMAT_HHmmss.parse(time).time
+ } catch (ex: ParseException) {
+ 0L
+ }
+ }
+
+ /**
+ * @param time ms
+ * @return yyyyMMddHHmmss
+ * @desc 将长整型数字转换为日期格式的字符串
+ */
+ fun dateLongConvertToFormat(time: Long): String {
+ return if (time > 0L) {
+ FORMAT_yyyyMMddHHmmss.format(Date(time))
+ } else ""
+ }
+
+ /**
+ * @param time ms
+ * @return MMddHHmmyy
+ * @desc 将长整型数字转换为日期格式的字符串
+ */
+ fun dateLongConvertToFormat2(time: Long): String {
+ return if (time > 0L) {
+ FORMAT_MMddHHmmyy.format(Date(time))
+ } else ""
+ }
+
+ /**
+ * @param datetime yyyy-MM-dd HH:mm:ss
+ * @return
+ * @desc 将日期格式的字符串转换为长整型
+ */
+ fun dateFormatConvertToDate(datetime: String): Date? {
+ return try {
+ FORMAT_yyyy_MM_dd_HH_mm_ss.parse(datetime)
+ } catch (ex: ParseException) {
+ null
+ }
+ }
+
+ /**
+ * @param daynum 天数
+ * @return 返回当前日期的第 daynum 天前的日期 yyyyMMdd
+ */
+ fun getDayDateNoFormatBefore(daynum: Int): String {
+ val calendar = Calendar.getInstance()
+ calendar.add(Calendar.DATE, -daynum)
+ return FORMAT_yyyyMMdd.format(calendar.time)
+ }
+
+ /**
+ * 获得指定日期的前一天
+ *
+ * @param specifiedDay yyyyMMdd
+ * @return yyyyMMdd
+ */
+ fun getSpecifiedDayBefore(specifiedDay: String): String {
+ return try {
+ val c = Calendar.getInstance()
+ val date = FORMAT_yyyyMMdd.parse(specifiedDay)
+ c.time = date
+ val day = c.get(Calendar.DATE)
+ c.set(Calendar.DATE, day - 1)
+ FORMAT_yyyyMMdd.format(c.time)
+ } catch (e: ParseException) {
+ ""
+ }
+ }
+
+ /**
+ * 获得指定日期的前一天
+ *
+ * @param dayBefore 往前推迟的天数
+ * @return Date
+ */
+ fun getSomeDayBefore(dayBefore: Int): Date {
+ val c = Calendar.getInstance()
+ c.add(Calendar.DAY_OF_MONTH, -dayBefore)
+ return c.time
+ }
+
+ /**
+ * 获得指定日期的后一天
+ *
+ * @param specifiedDay yyyyMMdd
+ * @return yyyyMMdd
+ */
+ fun getSpecifiedDayAfter(specifiedDay: String): String {
+ return try {
+ val c = Calendar.getInstance()
+ val date = FORMAT_yyyyMMdd.parse(specifiedDay)
+ c.time = date
+ val day = c.get(Calendar.DATE)
+ c.set(Calendar.DATE, day + 1)
+ FORMAT_yyyyMMdd.format(c.time)
+ } catch (e: ParseException) {
+ ""
+ }
+ }
+
+ /**
+ * @return yyyyMMddHHmmss
+ */
+ fun getNowDateTimeFormat(): String {
+ return FORMAT_yyyyMMddHHmmss.format(Date())
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/utils/FileUtil.kt b/app/src/main/java/com/supwisdom/utils/FileUtil.kt
index 103d889..aa31722 100644
--- a/app/src/main/java/com/supwisdom/utils/FileUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/FileUtil.kt
@@ -1,142 +1,212 @@
-package com.supwisdom.utils
-
-import android.os.Environment
-import java.io.*
-
-/**
- ** create by zzq on 2019/7/23
- ** @desc
- **/
-object FileUtil {
- private val ROOT_DIR = "/a711/pos/"
- private val ROOT_PRIVATE_DIR = "/supwisdom/"
- private val CACHE_FILE_DIR = ROOT_DIR + "cache/"
- private val CRASH_FILE_DIR = ROOT_DIR + "crash/"
- private val CRASH_FILE_PRE = "crash-"
- private val LOG_FILE_DIR = ROOT_DIR + "log/"
- private val LOG_FILE_PRE = "log-"
- private val DTL_FILE_DIR = ROOT_DIR + "dtl/"
- private val DTL_FILE_PRE = "dtl-"
-
- fun getUpdateFile(fileName: String): File? {
- return createFile(CACHE_FILE_DIR, fileName)
- }
-
- fun getCfgFile(fileName: String): File? {
- return createFile(ROOT_PRIVATE_DIR, fileName)
- }
-
- fun getCfgFileStream(fileName: String): InputStream? {
- if (android.os.Environment.MEDIA_MOUNTED == android.os.Environment.getExternalStorageState()) {
- val rootFile = File(Environment.getExternalStorageDirectory().toString() + ROOT_PRIVATE_DIR)
- if (!rootFile.exists()) {
- return null
- }
- val retFile = File(rootFile, fileName)
- if (retFile.exists()) {
- try {
- return FileInputStream(retFile)
- } catch (e: FileNotFoundException) {
- e.printStackTrace()
- }
-
- }
- }
- return null
- }
-
- fun removeDtlFile(beforeday: Int) {
- removeFile(DTL_FILE_DIR, DTL_FILE_PRE, beforeday)
- }
-
- fun removeLogFile(beforeday: Int) {
- removeFile(LOG_FILE_DIR, LOG_FILE_PRE, beforeday)
- }
-
- fun removeCrashFile(beforeday: Int) {
- removeFile(CRASH_FILE_DIR, CRASH_FILE_PRE, beforeday)
- }
-
-
- fun writeDtlFile(msg: String) {
- val pathfile = DTL_FILE_DIR + DTL_FILE_PRE + DateUtil.getNowDateNoFormat() + ".txt"
- writeFile(pathfile, msg, true)
- }
-
- fun writeCrashFile(msg: String) {
- val pathfile = CRASH_FILE_DIR + CRASH_FILE_PRE + DateUtil.getNowDateNoFormat() + ".txt"
- writeFile(pathfile, msg, true)
- }
-
- fun writeLogFile(msg: String) {
- val pathfile = LOG_FILE_DIR + LOG_FILE_PRE + DateUtil.getNowDateNoFormat() + ".txt"
- writeFile(pathfile, msg, true)
- }
-
- private fun writeFile(targetPath: String, msg: String, append: Boolean) {
- if (android.os.Environment.MEDIA_MOUNTED == android.os.Environment.getExternalStorageState()) {
- val targetFile = File(Environment.getExternalStorageDirectory().toString() + targetPath)
- if (!targetFile.parentFile.exists()) {
- targetFile.parentFile.mkdirs()
- }
- try {
- val osw = OutputStreamWriter(
- FileOutputStream(targetFile, append), "utf-8"
- )
- try {
- osw.write(msg)
- osw.write("</br>\n")
- osw.flush()
- osw.close()
- } catch (e: IOException) {
- e.printStackTrace()
- }
-
- } catch (e1: UnsupportedEncodingException) {
- e1.printStackTrace()
- } catch (e1: FileNotFoundException) {
- e1.printStackTrace()
- }
-
- }
- }
-
- private fun removeFile(targetPath: String, prefile: String, beforeday: Int) {
- if (Environment.MEDIA_MOUNTED == Environment.getExternalStorageState()) {
- val rootFile = File(Environment.getExternalStorageDirectory().toString() + targetPath)
- if (!rootFile.exists()) {
- return
- }
- val logname = prefile + DateUtil.getDayDateNoFormatBefore(beforeday) + ".txt"
- val files = rootFile.listFiles()
- for (file in files!!) {
- val fullfilename = file.absolutePath
- val filename = fullfilename.substring(fullfilename.lastIndexOf('/') + 1)
- if (filename.startsWith(prefile) && filename.endsWith(".txt")) {
- if (filename.compareTo(logname) < 0) {
- file.delete()
- }
- }
- }
- }
- }
-
- private fun createFile(path: String, fileName: String): File? {
- if (android.os.Environment.MEDIA_MOUNTED == android.os.Environment.getExternalStorageState()) {
- val rootFile = File(Environment.getExternalStorageDirectory().toString() + path)
- if (!rootFile.exists()) {
- rootFile.mkdirs()
- }
- val retFile = File(rootFile, fileName)
- if (!retFile.exists()) {
- try {
- retFile.createNewFile()
- } catch (e: IOException) {
- return null
- }
- }
- return retFile
- }
- return null
- }
+package com.supwisdom.utils
+
+import android.os.Environment
+import java.io.*
+
+/**
+ ** create by zzq on 2019/7/23
+ ** @desc
+ **/
+object FileUtil {
+ private val ROOT_DIR = "/a711/pos/"
+ private val ROOT_PRIVATE_DIR = "/supwisdom/"
+ private val CACHE_FILE_DIR = ROOT_DIR + "cache/"
+ private val CRASH_FILE_DIR = ROOT_DIR + "crash/"
+ private val CRASH_FILE_PRE = "crash-"
+ private val LOG_FILE_DIR = ROOT_DIR + "log/"
+ private val LOG_FILE_PRE = "log-"
+ private val DTL_FILE_DIR = ROOT_DIR + "dtl/"
+ private val DTL_FILE_PRE = "dtl-"
+
+ fun getUpdateFile(fileName: String): File? {
+ return createFile(CACHE_FILE_DIR, fileName)
+ }
+
+ fun getCfgFile(fileName: String): File? {
+ return createFile(ROOT_PRIVATE_DIR, fileName)
+ }
+
+ fun getCfgFileStream(fileName: String): InputStream? {
+ if (android.os.Environment.MEDIA_MOUNTED == android.os.Environment.getExternalStorageState()) {
+ val rootFile = File(
+ Environment.getExternalStorageDirectory().toString() + ROOT_PRIVATE_DIR
+ )
+ if (!rootFile.exists()) {
+ return null
+ }
+ val retFile = File(rootFile, fileName)
+ if (retFile.exists()) {
+ try {
+ return FileInputStream(retFile)
+ } catch (e: FileNotFoundException) {
+ e.printStackTrace()
+ }
+
+ }
+ }
+ return null
+ }
+
+ fun removeDtlFile(beforeday: Int) {
+ removeFile(DTL_FILE_DIR, DTL_FILE_PRE, beforeday)
+ }
+
+ fun removeLogFile(beforeday: Int) {
+ removeFile(LOG_FILE_DIR, LOG_FILE_PRE, beforeday)
+ }
+
+ fun removeCrashFile(beforeday: Int) {
+ removeFile(CRASH_FILE_DIR, CRASH_FILE_PRE, beforeday)
+ }
+
+
+ fun writeDtlFile(msg: String) {
+ val pathfile = DTL_FILE_DIR + DTL_FILE_PRE + DateUtil.getNowDateNoFormat() + ".txt"
+ writeFile(pathfile, msg, true)
+ }
+
+ fun writeCrashFile(msg: String) {
+ val pathfile = CRASH_FILE_DIR + CRASH_FILE_PRE + DateUtil.getNowDateNoFormat() + ".txt"
+ writeFile(pathfile, msg, true)
+ }
+
+ fun writeLogFile(msg: String) {
+ val pathfile = LOG_FILE_DIR + LOG_FILE_PRE + DateUtil.getNowDateNoFormat() + ".txt"
+ writeFile(pathfile, msg, true)
+ }
+
+ private fun writeFile(targetPath: String, msg: String, append: Boolean) {
+ if (android.os.Environment.MEDIA_MOUNTED == android.os.Environment.getExternalStorageState()) {
+ val targetFile = File(Environment.getExternalStorageDirectory().toString() + targetPath)
+ if (!targetFile.parentFile.exists()) {
+ targetFile.parentFile.mkdirs()
+ }
+ try {
+ val osw = OutputStreamWriter(
+ FileOutputStream(targetFile, append), "utf-8"
+ )
+ try {
+ osw.write(msg)
+ osw.write("</br>\n")
+ osw.flush()
+ osw.close()
+ } catch (e: IOException) {
+ e.printStackTrace()
+ }
+
+ } catch (e1: UnsupportedEncodingException) {
+ e1.printStackTrace()
+ } catch (e1: FileNotFoundException) {
+ e1.printStackTrace()
+ }
+
+ }
+ }
+
+ private fun removeFile(targetPath: String, prefile: String, beforeday: Int) {
+ if (Environment.MEDIA_MOUNTED == Environment.getExternalStorageState()) {
+ val rootFile = File(Environment.getExternalStorageDirectory().toString() + targetPath)
+ if (!rootFile.exists()) {
+ return
+ }
+ val logname = prefile + DateUtil.getDayDateNoFormatBefore(beforeday) + ".txt"
+ val files = rootFile.listFiles()
+ for (file in files!!) {
+ val fullfilename = file.absolutePath
+ val filename = fullfilename.substring(fullfilename.lastIndexOf('/') + 1)
+ if (filename.startsWith(prefile) && filename.endsWith(".txt")) {
+ if (filename.compareTo(logname) < 0) {
+ file.delete()
+ }
+ }
+ }
+ }
+ }
+
+ private fun createFile(path: String, fileName: String): File? {
+ if (Environment.MEDIA_MOUNTED == Environment.getExternalStorageState()) {
+ val rootFile = File(Environment.getExternalStorageDirectory().toString() + path)
+ if (!rootFile.exists()) {
+ rootFile.mkdirs()
+ }
+ val retFile = File(rootFile, fileName)
+ if (!retFile.exists()) {
+ try {
+ retFile.createNewFile()
+ } catch (e: IOException) {
+ return null
+ }
+ }
+ return retFile
+ }
+ return null
+ }
+
+ fun getSynoLicensePath(): String? {
+ if (Environment.MEDIA_MOUNTED == Environment.getExternalStorageState()) {
+ val path =
+ Environment.getExternalStorageDirectory().toString() + PublicDef.PATH_SHENG_YUAN
+ val sdfile = File(path)
+ if (!sdfile.exists()) {
+ sdfile.mkdirs()
+ }
+ return path
+ }
+ return null
+ }
+
+ fun readSynoLicenseFile(fullpath: String?): ByteArray? {
+ if (Environment.MEDIA_MOUNTED == Environment.getExternalStorageState()) {
+ val file = File(fullpath)
+ if (!file.parentFile.exists()) {
+ return null
+ }
+ try {
+ val isr = FileInputStream(file)
+ try {
+ val os = ByteArrayOutputStream()
+ val buf = ByteArray(1024)
+ var size = 0
+ while (isr.read(buf).also { size = it } != -1) {
+ os.write(buf, 0, size)
+ }
+ return os.toByteArray()
+ } catch (e: IOException) {
+ e.printStackTrace()
+ } finally {
+ try {
+ isr.close()
+ } catch (e: IOException) {
+ e.printStackTrace()
+ }
+ }
+ } catch (e1: FileNotFoundException) {
+ e1.printStackTrace()
+ }
+ }
+ return null
+ }
+
+ fun writeSynoLicenseFile(fullpath: String, license: ByteArray): Boolean {
+ if (Environment.MEDIA_MOUNTED == Environment.getExternalStorageState()) {
+ val file = File(fullpath)
+ if (!file.parentFile.exists()) {
+ file.parentFile.mkdirs()
+ }
+ try {
+ val fos = FileOutputStream(file, false)
+ try {
+ fos.write(license)
+ fos.flush()
+ fos.close()
+ return true
+ } catch (e: IOException) {
+ e.printStackTrace()
+ }
+ } catch (e1: FileNotFoundException) {
+ e1.printStackTrace()
+ }
+ }
+ return false
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/utils/PublicDef.kt b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
index 18c7074..2ddbf96 100644
--- a/app/src/main/java/com/supwisdom/utils/PublicDef.kt
+++ b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
@@ -1,96 +1,106 @@
-package com.supwisdom.utils
-
-/**
- * @author zzq
- * @date 2018/4/26.
- * @version 1.0.1
- * @desc APP module常量定义
- */
-object PublicDef {
- /**
- * 错误码
- */
- const val SUCCESS = 0
- const val ERROR = 1
- /**
- * 商户默认密码 111111
- * 维护默认密码 914387
- */
- const val PASSWD_SHOP_DEFAULT = "111111"
- const val PASSWD_ADMIN_DEFAULT = "914387"
-
- /**************************************************************/
- /*************************handler 状态码***********************/
- const val MSG_CARD_PAYING = 10
- const val MSG_CARD_READ_AGAIN = 11
- const val MSG_CARD_PAY_FAIL = 12
- const val MSG_CARD_PAY_SUC = 13
- const val MSG_CARD_PAY_QUERY = 14
- const val MSG_CARD_REVERSE_FAIL = 15
- const val MSG_CARD_REVERSE_SUC = 16
- const val MSG_USER_INFO_SHOW = 17
- const val MSG_USER_INFO_CLEAR = 18
- const val MSG_LINK_STATUS = 19
- const val MSG_PAYING_QUERY = 20
- const val MSG_PAYING_INTERRUPT = 21
- const val MSG_SCREEN_SAVER = 22
- /*************************不能重复*****************************/
- /**
- * 屏保亮度
- */
- const val SCREEN_SAVER_BRIGHTNESS = 1
- const val SCREEN_NORMAL_BRIGHTNESS = -1
- const val SCREEN_SAVER_GAP: Long = 30 * 60 * 1000
- /**
- * 卡消费标志(1 byte)
- */
- /*high 4 bit*/
- const val TRANSFLAG_NORMAL_CONSUME = 0x80 // 正常消费
- const val TRANSFLAG_MEALER_CONSUME = 0xC0 // 搭伙
- const val TRANSFLAG_DISCNT_CONSUME = 0xA0 // 折扣
- const val TRANSFLAG_REVS_ML_CONSUME = 0x40 //冲正带搭伙
- const val TRANSFLAG_REVS_DST_CONSUME = 0x20 // 冲正带折扣
- const val TRANSFLAG_REVERSE_AUTO_CONSUME = 0x10 // 自动撤销 (0x00 手动冲正)
- const val TRANSFLAG_REVERSE_CONSUME = 0x00 //&0x80 最高位0标识冲正(统一标识)
- /*low 4 bit*/
- const val TRANSFLAG_WRITE_CARD_SUCCESS = 0x01 // 写卡成功
- const val TRANSFLAG_WRITE_CARD_HALFAWAY = 0x02 // 中途拔卡
- const val TRANSFLAG_UNWRITE_CARD = 0x03 // 未写卡
- const val TRANSFLAG_PWD_CONSUME = 0x04 // 密码消费
-
- const val BG_SERVICE_NAME = "com.supwisdom.service.BackgroundTaskService"
-
- /**
- * Toast show
- */
- const val TOAST_SHOW_CRY = 1
- const val TOAST_SHOW_SMILE = 2
- const val TOAST_SHOW_DOUBT = 3
-
- const val DIALOG_TYPE_BIG_PICTURE = 1
- const val DIALOG_TYPE_PURCHASE = 2
- const val DIALOG_TYPE_PASSWORD = 3
- const val DIALOG_TYPE_SELECT_ORDER = 4
- const val DIALOG_TYPE_DPS_CONFIRM = 5
- const val DIALOG_TYPE_SCAN_RVS_CONFIRM = 6
- const val DIALOG_TYPE_ORDINARY_CONSUME = 7
- const val DIALOG_TYPE_DEPOSIT = 8
- const val DIALOG_TYPE_NSD_CONFIG = 9
-
- /**
- * 本地全局控制参数
- */
- const val CONTROL_FIXAMT = "fixamt"
- const val CONTROL_OFFLINE_DAY_DISABLE = "offdaydisable"
- const val CONTROL_DEBUG_ENABLE = "debugenable"
-
- /**
- * 消费冲正时限
- */
- const val REVERSE_MS_GAP = 600000
- /**
- *
- */
- const val APP_ID = "200001"
- const val APP_SECRET = "dc1d26c0d43e442588092c8d45c21bce"
+package com.supwisdom.utils
+
+/**
+ * @author zzq
+ * @date 2018/4/26.
+ * @version 1.0.1
+ * @desc APP module常量定义
+ */
+object PublicDef {
+ /**
+ * 错误码
+ */
+ const val SUCCESS = 0
+ const val ERROR = 1
+
+ /**
+ * 商户默认密码 111111
+ * 维护默认密码 914387
+ */
+ const val PASSWD_SHOP_DEFAULT = "111111"
+ const val PASSWD_ADMIN_DEFAULT = "914387"
+
+ /**************************************************************/
+ /*************************handler 状态码***********************/
+ const val MSG_CARD_PAYING = 10
+ const val MSG_CARD_READ_AGAIN = 11
+ const val MSG_CARD_PAY_FAIL = 12
+ const val MSG_CARD_PAY_SUC = 13
+ const val MSG_CARD_PAY_QUERY = 14
+ const val MSG_CARD_REVERSE_FAIL = 15
+ const val MSG_CARD_REVERSE_SUC = 16
+ const val MSG_USER_INFO_SHOW = 17
+ const val MSG_USER_INFO_CLEAR = 18
+ const val MSG_LINK_STATUS = 19
+ const val MSG_PAYING_QUERY = 20
+ const val MSG_PAYING_INTERRUPT = 21
+ const val MSG_SCREEN_SAVER = 22
+ /*************************不能重复*****************************/
+ /**
+ * 屏保亮度
+ */
+ const val SCREEN_SAVER_BRIGHTNESS = 1
+ const val SCREEN_NORMAL_BRIGHTNESS = -1
+ const val SCREEN_SAVER_GAP: Long = 30 * 60 * 1000
+
+ /**
+ * 卡消费标志(1 byte)
+ */
+ /*high 4 bit*/
+ const val TRANSFLAG_NORMAL_CONSUME = 0x80 // 正常消费
+ const val TRANSFLAG_MEALER_CONSUME = 0xC0 // 搭伙
+ const val TRANSFLAG_DISCNT_CONSUME = 0xA0 // 折扣
+ const val TRANSFLAG_REVS_ML_CONSUME = 0x40 //冲正带搭伙
+ const val TRANSFLAG_REVS_DST_CONSUME = 0x20 // 冲正带折扣
+ const val TRANSFLAG_REVERSE_AUTO_CONSUME = 0x10 // 自动撤销 (0x00 手动冲正)
+ const val TRANSFLAG_REVERSE_CONSUME = 0x00 //&0x80 最高位0标识冲正(统一标识)
+
+ /*low 4 bit*/
+ const val TRANSFLAG_WRITE_CARD_SUCCESS = 0x01 // 写卡成功
+ const val TRANSFLAG_WRITE_CARD_HALFAWAY = 0x02 // 中途拔卡
+ const val TRANSFLAG_UNWRITE_CARD = 0x03 // 未写卡
+ const val TRANSFLAG_PWD_CONSUME = 0x04 // 密码消费
+
+ const val BG_SERVICE_NAME = "com.supwisdom.service.BackgroundTaskService"
+
+ /**
+ * Toast show
+ */
+ const val TOAST_SHOW_CRY = 1
+ const val TOAST_SHOW_SMILE = 2
+ const val TOAST_SHOW_DOUBT = 3
+
+ const val DIALOG_TYPE_BIG_PICTURE = 1
+ const val DIALOG_TYPE_PURCHASE = 2
+ const val DIALOG_TYPE_PASSWORD = 3
+ const val DIALOG_TYPE_SELECT_ORDER = 4
+ const val DIALOG_TYPE_DPS_CONFIRM = 5
+ const val DIALOG_TYPE_SCAN_RVS_CONFIRM = 6
+ const val DIALOG_TYPE_ORDINARY_CONSUME = 7
+ const val DIALOG_TYPE_DEPOSIT = 8
+ const val DIALOG_TYPE_NSD_CONFIG = 9
+
+ const val CODE_SAME_FORBID_TIME: Long = 10 * 1000
+ const val CAMERA_FIX_PAY_PERIOD: Long = 30 * 60 * 1000
+
+ /**
+ * 本地全局控制参数
+ */
+ const val CONTROL_FIXAMT = "fixamt"
+ const val CONTROL_OFFLINE_DAY_DISABLE = "offdaydisable"
+ const val CONTROL_DEBUG_ENABLE = "debugenable"
+ const val CONTROL_SYNOCODE_ACTIVE = "synocodeactive"
+
+ /**
+ * 消费冲正时限
+ */
+ const val REVERSE_MS_GAP = 600000
+
+ /**
+ *
+ */
+ const val APP_ID = "200001"
+ const val APP_SECRET = "dc1d26c0d43e442588092c8d45c21bce"
+ const val SCHOOL_NO = "999888"
+ const val PATH_SHENG_YUAN = "/mnt/private/newcapec/"
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/utils/UrlBase64.java b/app/src/main/java/com/supwisdom/utils/UrlBase64.java
new file mode 100644
index 0000000..167871a
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/utils/UrlBase64.java
@@ -0,0 +1,147 @@
+package com.supwisdom.utils;
+
+import java.util.Arrays;
+
+public final class UrlBase64 {
+ /* BASE 64 encode table */
+ private static final char base64en[] =
+ {
+ 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
+ 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
+ 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
+ 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
+ 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
+ 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
+ 'w', 'x', 'y', 'z', '0', '1', '2', '3',
+ '4', '5', '6', '7', '8', '9', '-', '_',
+ };
+ //+/
+ private static final char BASE64_PAD = '=';
+ private static final char BASE64DE_FIRST = '+';
+ private static final char BASE64DE_LAST = 'z';
+ /* ASCII order for BASE 64 decode, -1 in unused character */
+ private static final byte base64de[] =
+ {
+ /* '+', ',', '-', '.', '/', '0', '1', '2', */
+ -1, -1, 62, -1, -1, 52, 53, 54,
+
+ /* '3', '4', '5', '6', '7', '8', '9', ':', */
+ 55, 56, 57, 58, 59, 60, 61, -1,
+
+ /* ';', '<', '=', '>', '?', '@', 'A', 'B', */
+ -1, -1, -1, -1, -1, -1, 0, 1,
+
+ /* 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', */
+ 2, 3, 4, 5, 6, 7, 8, 9,
+
+ /* 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', */
+ 10, 11, 12, 13, 14, 15, 16, 17,
+
+ /* 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', */
+ 18, 19, 20, 21, 22, 23, 24, 25,
+
+ /* '[', '\', ']', '^', '_', '`', 'a', 'b', */
+ -1, -1, -1, -1, 63, -1, 26, 27,
+
+ /* 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', */
+ 28, 29, 30, 31, 32, 33, 34, 35,
+
+ /* 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', */
+ 36, 37, 38, 39, 40, 41, 42, 43,
+
+ /* 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', */
+ 44, 45, 46, 47, 48, 49, 50, 51,
+ };
+
+ /**
+ * Encodes hex octects into Base64
+ *
+ * @param binaryData Array containing binaryData
+ * @return Encoded Base64 array
+ */
+ public static String encode(byte[] binaryData) {
+ int len = binaryData.length;
+ int i;
+ StringBuilder out = new StringBuilder();
+ for (i = 0; i < len; i++) {
+ int s = i % 3;
+ switch (s) {
+ case 0:
+ out.append(base64en[(binaryData[i] >> 2) & 0x3F]);
+ break;
+ case 1:
+ out.append(base64en[((binaryData[i - 1] & 0x3) << 4) + ((binaryData[i] >> 4) & 0xF)]);
+ break;
+ case 2:
+ out.append(base64en[((binaryData[i - 1] & 0xF) << 2) + ((binaryData[i] >> 6) & 0x3)]);
+ out.append(base64en[binaryData[i] & 0x3F]);
+ break;
+ default:
+ break;
+ }
+ }
+ i -= 1;
+ if (i % 3 == 0) {
+ out.append(base64en[(binaryData[i] & 0x3) << 4]);
+ out.append(BASE64_PAD);
+ out.append(BASE64_PAD);
+ } else if (i % 3 == 1) {
+ out.append(base64en[(binaryData[i] & 0xF) << 2]);
+ out.append(BASE64_PAD);
+ }
+ return out.toString();
+ }
+
+ /**
+ * Decodes Base64 data into octects
+ *
+ * @param encoded string containing Base64 data
+ * @return Array containind decoded data.
+ */
+ public static byte[] decode(String encoded) {
+ byte[] out = new byte[encoded.length()];
+ int offset = 0;
+ int len = encoded.length();
+ for (int i = 0; i < len; i++) {
+ int s = i % 4;
+ char ch = encoded.charAt(i);
+ if (ch == '=') {
+ return Arrays.copyOfRange(out, 0, offset);
+ }
+ if (ch < BASE64DE_FIRST || ch > BASE64DE_LAST) {
+ return null;
+ }
+ int c = base64de[ch - BASE64DE_FIRST];
+ if (c == -1) {
+ return null;
+ }
+ switch (s) {
+ case 0:
+ out[offset] += (byte) ((c << 2) & 0xFF);
+ break;
+ case 1:
+ out[offset++] += (byte) ((c >> 4) & 0x3);
+ /* if not last char with padding */
+ if (i < len - 3 ||
+ encoded.charAt(len - 2) != '=') {
+ out[offset] += (byte) ((c & 0xF) << 4);
+ }
+ break;
+ case 2:
+ out[offset++] += (byte) ((c >> 2) & 0xF);
+ /* if not last char with padding */
+ if (i < (len - 2) || encoded.charAt(len - 1) != '=') {
+ out[offset] += (byte) ((c & 0x3) << 6);
+ }
+ break;
+ case 3:
+ out[offset++] += (byte) c;
+ break;
+ default:
+ break;
+ }
+ }
+ return Arrays.copyOfRange(out, 0, offset);
+ }
+
+}
diff --git a/app/src/main/java/com/supwisdom/view/DialogPurchase.kt b/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
index 7b27ee8..4566945 100644
--- a/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
+++ b/app/src/main/java/com/supwisdom/view/DialogPurchase.kt
@@ -5,17 +5,22 @@
import android.graphics.Color
import android.os.CountDownTimer
import android.view.KeyEvent
+import android.view.SurfaceView
import android.view.View
import android.widget.TextView
import com.google.zxing.Result
import com.newcapec.zxinglib.IDecoderAcquirer
import com.newcapec.zxinglib.PosDecoder
import com.supwisdom.R
+import com.supwisdom.activities.SPApplication
import com.supwisdom.activities.consume.bean.CardUserInfoBean
import com.supwisdom.activities.menu.MenuActivity
import com.supwisdom.activities.transdtl.TransdtlActivity
import com.supwisdom.utils.CommonUtil
import com.supwisdom.utils.LogUtil
+import com.supwisdom.utils.PublicDef
+import com.synodata.scanview.view.IDecodeListener
+import com.synodata.scanview.view.Preview
/**
** create by zzq on 2019/7/26
@@ -23,7 +28,7 @@
**/
@Suppress("DEPRECATION")
class DialogPurchase constructor(context: Context, private val callBack: ICallBack) :
- DialogBase(context), IDecoderAcquirer {
+ DialogBase(context) {
private val TAG = "DialogPurchase"
private var vCount: TextView
private var vPayhint: TextView
@@ -34,6 +39,7 @@
private var lastCode: String = ""
private var lastCodeTime: Long = 0
private val waitTime = 60
+ private var syPreview: Preview? = null
private var payQueryConfirm = false
var codePayingNoCancelEnable = false
var codePaying = false
@@ -46,30 +52,121 @@
vPayhint = this.findViewById(R.id.tv_pay_hint) as TextView
vPayamt = this.findViewById(R.id.tv_pay_amount) as TextView
vUsername = this.findViewById(R.id.tv_pay_username) as TextView
-
- posDec = PosDecoder(this)
}
- override fun onFailed() {
-
- }
-
- override fun onDecoded(result: String?) {
-
- }
-
- override fun onDecoded(result: Result) {
- val rawSize = result.rawBytes?.size ?: 0
- if (rawSize > 0) {
- if (result.text == lastCode &&
- result.timestamp - lastCodeTime < 5000
- ) {
- return
- }
- lastCode = result.text
- lastCodeTime = result.timestamp
- callBack.callback(result.text)
+ private fun initZxingScan() {
+ /**
+ * 启用zxing时关闭晟元
+ */
+ if (syPreview != null) {
+ syPreview!!.stopScanning()
+ syPreview!!.disconnect()
+ syPreview!!.visibility = View.GONE
+ syPreview = null
}
+
+ posDec = PosDecoder(object : IDecoderAcquirer {
+ override fun onFailed() {
+
+ }
+
+ override fun onDecoded(result: String?) {
+
+ }
+
+ override fun onDecoded(result: Result) {
+ val rawSize = result.rawBytes?.size ?: 0
+ if (rawSize > 0) {
+ val tt = System.currentTimeMillis()
+ if (result.text == lastCode &&
+ tt - lastCodeTime < PublicDef.CODE_SAME_FORBID_TIME
+ ) {
+ return
+ }
+ lastCode = result.text
+ lastCodeTime = tt
+ callBack.callback(result.text)
+ }
+ }
+ })
+ }
+
+ private fun initSynoScan() {
+ /**
+ * 启用晟元时关闭zxing
+ */
+ posDec?.onResume()
+ posDec = null
+
+ syPreview = this.findViewById<Preview>(R.id.sy_preview)
+ syPreview!!.visibility = SurfaceView.VISIBLE
+ syPreview!!.setDecodeListener(object : IDecodeListener {
+ override fun onDecodeResult(
+ bDecoded: Boolean,
+ result: String?,
+ bytesResult: ByteArray?,
+ type: String
+ ) {
+ if (bDecoded) {
+ val tt = System.currentTimeMillis()
+ if (result!! == lastCode &&
+ tt - lastCodeTime < PublicDef.CODE_SAME_FORBID_TIME
+ ) {
+ return
+ }
+ lastCode = result
+ lastCodeTime = tt
+ callBack.callback(result)
+ }
+ }
+
+ override fun onDecodeResult(bDecoded: Boolean, result: String?, type: String) {
+ }
+
+ override fun onSettingUpdateNotify() {
+ }
+
+ })
+ syPreview!!.showCode11Pre(false)
+ syPreview!!.showCode39Pre(false)
+ syPreview!!.setPreviewSize(640, 480)
+ syPreview!!.sceneMode = 1
+ syPreview!!.setVibrate(false)
+ }
+
+ private fun cameraOpenScan() {
+ val time = System.currentTimeMillis()
+ if (time < lastFixpayDecoderOpenTime ||
+ time - lastFixpayDecoderOpenTime > PublicDef.CAMERA_FIX_PAY_PERIOD
+ ) {
+ lastFixpayDecoderOpenTime = time
+ if (SPApplication.getInstance().isSynoCodeActive()) {
+ if (syPreview == null) {
+ initSynoScan()
+ }
+ syPreview!!.stopScanning()
+ syPreview!!.disconnect()
+ syPreview!!.connect(context)
+ syPreview!!.startScanning()
+ } else {
+ if (posDec == null) {
+ initZxingScan()
+ }
+ try {
+ posDec!!.onPause()
+ } catch (ex: Exception) {
+ ex.printStackTrace()
+ LogUtil.d(TAG, "fix close camera exception:" + CommonUtil.getExceptionStack(ex))
+ }
+ try {
+ posDec!!.onResume()
+ } catch (ex: Exception) {
+ ex.printStackTrace()
+ LogUtil.d(TAG, "fix open camera exception:" + CommonUtil.getExceptionStack(ex))
+ }
+ }
+ }
+ syPreview?.startScanning()
}
override fun dispatchKeyEvent(event: KeyEvent): Boolean {
@@ -99,12 +196,12 @@
fun show(hint: String, amount: String) {
vPayhint.text = hint
vPayhint.setTextColor(context.resources.getColor(R.color.blue))
- vPayamt.text = null//amount
+ vPayamt.text = amount
vPayamt.visibility = View.VISIBLE
vUsername.visibility = View.GONE
show()
- asyncOpenDecoder()
+ cameraOpenScan()
resetCounter(waitTime)
}
@@ -125,7 +222,7 @@
fun showPaySuccess(info: CardUserInfoBean) {
payQueryConfirm = false
- vPayhint.text = info.retmsg
+ vPayhint.text = info.getErrorMsg()
vPayhint.setTextColor(Color.GREEN)
vPayamt.text = CommonUtil.showFormatAmount("金额", info.payamt)
vPayamt.visibility = View.VISIBLE
@@ -150,7 +247,7 @@
payQueryConfirm = false
vPayhint.text = "消费失败"
vPayhint.setTextColor(Color.RED)
- vPayamt.text = info.retmsg
+ vPayamt.text = info.getErrorMsg()
vPayamt.visibility = View.VISIBLE
vUsername.visibility = View.GONE
show()
@@ -159,7 +256,7 @@
fun showReverseSuccess(info: CardUserInfoBean) {
payQueryConfirm = false
- vPayhint.text = info.retmsg
+ vPayhint.text = info.getErrorMsg()
vPayhint.setTextColor(Color.GREEN)
vPayamt.text = CommonUtil.showFormatAmount("金额", info.amount)
vPayamt.visibility = View.VISIBLE
@@ -172,69 +269,28 @@
payQueryConfirm = false
vPayhint.text = "冲正失败"
vPayhint.setTextColor(Color.RED)
- vPayamt.text = info.retmsg
+ vPayamt.text = info.getErrorMsg()
vPayamt.visibility = View.VISIBLE
vUsername.visibility = View.GONE
show()
resetCounter(info.showtime)
}
- private fun asyncOpenDecoder() {
- if (!isFixPay) {
- try {
- posDec!!.onResume()
- } catch (ex: Exception) {
- ex.printStackTrace()
- LogUtil.d(TAG, "open camera exception:" + CommonUtil.getExceptionStack(ex))
- }
- } else {
- val time = System.currentTimeMillis()
- if (time < lastFixpayDecoderOpenTime ||
- time - lastFixpayDecoderOpenTime > 60000
- ) {
- lastFixpayDecoderOpenTime = time
- try {
- posDec!!.onPause()
- } catch (ex: Exception) {
- ex.printStackTrace()
- LogUtil.d(TAG, "fix close camera exception:" + CommonUtil.getExceptionStack(ex))
- }
- try {
- posDec!!.onResume()
- } catch (ex: Exception) {
- ex.printStackTrace()
- LogUtil.d(TAG, "fix open camera exception:" + CommonUtil.getExceptionStack(ex))
- }
- }
- }
- }
-
- private fun asyncCloseDecoder() {
- if (!isFixPay) {
- try {
- posDec!!.onPause()
- } catch (ex: Exception) {
- ex.printStackTrace()
- LogUtil.d(TAG, "close camera exception:" + CommonUtil.getExceptionStack(ex))
- }
- }
- }
-
private fun finish(isManualCancel: Boolean, isPaying: Boolean) {
+ syPreview?.stopScanning()
codePaying = false
codePayingNoCancelEnable = false
payQueryConfirm = false
dismiss()
callBack.callback(isManualCancel, isPaying)
- asyncCloseDecoder()
}
private var counter: ConsumeHintCount? = null
private fun resetCounter(times: Int) {
counter?.cancel()
- counter = ConsumeHintCount((times * 1000).toLong(), 200)
- counter?.start()
+ counter = ConsumeHintCount((times * 1000).toLong(), 500)
+ counter!!.start()
}
private inner class ConsumeHintCount
@@ -253,7 +309,7 @@
}
override fun onFinish() {
- finish(false, false)
+ finish(isManualCancel = false, isPaying = false)
}
}
diff --git a/app/src/main/jniLibs/arm64-v8a/libjava_camera.so b/app/src/main/jniLibs/arm64-v8a/libjava_camera.so
new file mode 100644
index 0000000..a6c77bd
--- /dev/null
+++ b/app/src/main/jniLibs/arm64-v8a/libjava_camera.so
Binary files differ
diff --git a/app/src/main/jniLibs/arm64-v8a/libsyno_getparam.so b/app/src/main/jniLibs/arm64-v8a/libsyno_getparam.so
new file mode 100644
index 0000000..96713e2
--- /dev/null
+++ b/app/src/main/jniLibs/arm64-v8a/libsyno_getparam.so
Binary files differ
diff --git a/app/src/main/jniLibs/arm64-v8a/libsyno_jni.so b/app/src/main/jniLibs/arm64-v8a/libsyno_jni.so
new file mode 100644
index 0000000..37bb8c9
--- /dev/null
+++ b/app/src/main/jniLibs/arm64-v8a/libsyno_jni.so
Binary files differ
diff --git a/app/src/main/jniLibs/arm64-v8a/libsynochip_qrcode.so b/app/src/main/jniLibs/arm64-v8a/libsynochip_qrcode.so
new file mode 100644
index 0000000..86805d8
--- /dev/null
+++ b/app/src/main/jniLibs/arm64-v8a/libsynochip_qrcode.so
Binary files differ
diff --git a/app/src/main/res/layout/activity_consume.xml b/app/src/main/res/layout/activity_consume.xml
index a1bf974..1ee916e 100644
--- a/app/src/main/res/layout/activity_consume.xml
+++ b/app/src/main/res/layout/activity_consume.xml
@@ -1,424 +1,431 @@
-<?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:focusable="true"
- android:orientation="vertical">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="20dp"
- android:layout_marginTop="20dp"
- android:layout_marginRight="20dp"
- android:background="@drawable/corner_bg_white"
- android:orientation="vertical">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="304dp"
- android:orientation="vertical">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="130dp"
- android:orientation="horizontal"
- android:padding="@dimen/consume_text_pad_size"
- android:weightSum="3">
-
- <LinearLayout
- android:layout_width="0dp"
- android:layout_height="match_parent"
- android:layout_weight="2"
- android:orientation="horizontal">
-
- <ImageView
- android:layout_width="60dp"
- android:layout_height="60dp"
- android:layout_gravity="center"
- android:scaleType="fitXY"
- android:src="@mipmap/shop_logo"/>
-
- <LinearLayout
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_gravity="center"
- android:layout_marginLeft="10dp"
- android:layout_marginTop="8dp"
- android:orientation="vertical"
- android:padding="1dp">
-
- <TextView
- android:id="@+id/tv_shopname"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:maxLines="2"
- android:text=""
- android:textColor="@color/blue"
- android:textSize="28sp"/>
-
- <TextView
- android:id="@+id/tv_nowtime"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="start"
- android:maxLines="1"
- android:text=""
- android:textColor="@color/blue"
- android:textSize="22sp"/>
- </LinearLayout>
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="0dp"
- android:layout_height="match_parent"
- android:layout_gravity="center"
- android:layout_weight="1"
- android:gravity="end"
- android:orientation="horizontal">
-
- <ImageView
- android:id="@+id/tv_linklogo"
- android:layout_width="30dp"
- android:layout_height="30dp"
- android:scaleType="fitXY"
- android:src="@drawable/wireless_on"/>
-
- <TextView
- android:id="@+id/tv_linkstat"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:maxLines="1"
- android:text="已联网"
- android:textColor="@color/blue"
- android:textSize="22sp"/>
- </LinearLayout>
- </LinearLayout>
-
- <View
- android:layout_width="match_parent"
- android:layout_height="1dp"
- android:layout_marginLeft="10dp"
- android:layout_marginRight="10dp"
- android:background="@color/black"/>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="horizontal"
- android:padding="@dimen/consume_text_pad_size">
-
- <TextView
- android:layout_width="260dp"
- android:layout_height="match_parent"
- android:gravity="start|center"
- android:text="消费金额"
- android:textColor="@color/blue"
- android:textSize="50sp"
- android:textStyle="bold"/>
-
- <TextView
- android:id="@+id/tv_input_amt"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:gravity="center"
- android:maxLines="1"
- android:text="0"
- android:textColor="@color/orange1"
- android:textSize="65sp"
- android:textStyle="bold"/>
- </LinearLayout>
- </LinearLayout>
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="20dp"
- android:layout_marginTop="10dp"
- android:layout_marginRight="20dp"
- android:background="@drawable/corner_bg_ordinary_consume_green"
- android:orientation="vertical">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="10dp">
-
- <ImageView
- android:layout_width="40dp"
- android:layout_height="40dp"
- android:scaleType="fitXY"
- android:src="@mipmap/show_card_info"/>
-
- <TextView
- android:id="@+id/tv_card_info"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="市民卡信息"
- android:textColor="@color/blue"
- android:textSize="@dimen/consume_text_size2"/>
- </LinearLayout>
-
- <View
- android:layout_width="match_parent"
- android:layout_height="1dp"
- android:layout_marginLeft="10dp"
- android:layout_marginTop="5dp"
- android:layout_marginRight="10dp"
- android:layout_marginBottom="5dp"
- android:background="@color/black"/>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginLeft="10dp"
- android:layout_marginTop="5dp"
- android:orientation="vertical">
-
- <ImageView
- android:layout_width="80dp"
- android:layout_height="80dp"
- android:layout_gravity="center"
- android:scaleType="fitXY"
- android:src="@mipmap/default_photo"
- android:visibility="gone"/>
-
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:padding="@dimen/consume_text_pad_size1"
- android:text="如需查询信息,请刷卡!"
- android:textColor="@color/blue"
- android:textSize="@dimen/consume_text_size2"/>
-
- <LinearLayout style="@style/consume_wait_account_ll_style">
-
- <TextView
- style="@style/consume_wait_account_paraname_style"
- android:text="姓 名: "/>
-
- <TextView
- android:id="@+id/tv_citizen_name"
- style="@style/consume_wait_account_paraval_style"/>
- </LinearLayout>
-
- <LinearLayout style="@style/consume_wait_account_ll_style">
-
- <TextView
- style="@style/consume_wait_account_paraname_style"
- android:text="市民卡号: "/>
-
- <TextView
- android:id="@+id/tv_citizen_cardno"
- style="@style/consume_wait_account_paraval_style"/>
- </LinearLayout>
-
- <LinearLayout style="@style/consume_wait_account_ll_style">
-
- <TextView
- style="@style/consume_wait_account_paraname_style"
- android:text="账户状态: "/>
-
- <TextView
- android:id="@+id/tv_cardstatus"
- style="@style/consume_wait_account_paraval_style"/>
- </LinearLayout>
- </LinearLayout>
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginLeft="20dp"
- android:layout_marginTop="10dp"
- android:layout_marginRight="20dp"
- android:layout_marginBottom="20dp"
- android:background="@drawable/corner_bg_ordinary_consume_green"
- android:orientation="vertical">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:padding="@dimen/consume_text_pad_size1">
-
- <ImageView
- android:layout_width="40dp"
- android:layout_height="40dp"
- android:scaleType="fitXY"
- android:src="@mipmap/bill_lastdtl"/>
-
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="最近一笔"
- android:textColor="@color/blue"
- android:textSize="@dimen/consume_text_size2"/>
- </LinearLayout>
-
- <View
- android:layout_width="match_parent"
- android:layout_height="1dp"
- android:layout_marginLeft="10dp"
- android:layout_marginTop="10dp"
- android:layout_marginRight="10dp"
- android:layout_marginBottom="5dp"
- android:background="@color/black"/>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:paddingLeft="10dp"
- android:paddingTop="10dp">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:text="支付结果: "
- android:textColor="@color/black"
- android:textSize="@dimen/consume_text_size2"/>
-
- <TextView
- android:id="@+id/tv_last_pay_result"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:maxLines="1"
- android:text=""
- android:textColor="@color/blue"
- android:textSize="@dimen/consume_text_size2"
- android:textStyle="bold"/>
- </LinearLayout>
-
- <LinearLayout
- android:id="@+id/ll_consume_last_failreason"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:paddingLeft="10dp"
- android:paddingTop="5dp"
- android:visibility="gone">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:text="失败提示: "
- android:textColor="@color/cl_red"
- android:textSize="@dimen/consume_text_size2"/>
-
- <TextView
- android:id="@+id/tv_last_failreason"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:maxLines="1"
- android:text=""
- android:textColor="@color/cl_red"
- android:textSize="@dimen/consume_text_size2"
- android:textStyle="bold"/>
- </LinearLayout>
- <LinearLayout
- android:id="@+id/ll_consume_cardno"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:paddingLeft="10dp"
- android:paddingTop="5dp">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:text="支付卡号: "
- android:textColor="@color/black"
- android:textSize="@dimen/consume_text_size2"/>
-
- <TextView
- android:id="@+id/tv_last_cardno"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:maxLines="1"
- android:text=""
- android:textColor="@color/blue"
- android:textSize="@dimen/consume_text_size2"
- android:textStyle="bold"/>
- </LinearLayout>
- <LinearLayout
- android:id="@+id/ll_consume_last_payamt"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:paddingLeft="10dp"
- android:paddingTop="5dp">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:text="支付金额: "
- android:textColor="@color/black"
- android:textSize="@dimen/consume_text_size2"/>
-
- <TextView
- android:id="@+id/tv_last_payamt"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:maxLines="1"
- android:text=""
- android:textColor="@color/blue"
- android:textSize="@dimen/consume_text_size2"
- android:textStyle="bold"/>
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:paddingLeft="10dp"
- android:paddingTop="5dp">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:text="支付方式: "
- android:textColor="@color/black"
- android:textSize="@dimen/consume_text_size2"/>
-
- <TextView
- android:id="@+id/tv_last_payway"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:maxLines="1"
- android:text=""
- android:textColor="@color/blue"
- android:textSize="@dimen/consume_text_size2"
- android:textStyle="bold"/>
- </LinearLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:paddingLeft="10dp"
- android:paddingTop="5dp">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:text="支付时间: "
- android:textColor="@color/black"
- android:textSize="@dimen/consume_text_size2"/>
-
- <TextView
- android:id="@+id/tv_last_paytime"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:maxLines="1"
- android:text=""
- android:textColor="@color/blue"
- android:textSize="@dimen/consume_text_size2"
- android:textStyle="bold"/>
- </LinearLayout>
- </LinearLayout>
+<?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:focusable="true"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="20dp"
+ android:layout_marginTop="20dp"
+ android:layout_marginRight="20dp"
+ android:background="@drawable/corner_bg_white"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="304dp"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="130dp"
+ android:orientation="horizontal"
+ android:padding="@dimen/consume_text_pad_size"
+ android:weightSum="3">
+
+ <LinearLayout
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_weight="2"
+ android:orientation="horizontal">
+
+ <ImageView
+ android:layout_width="60dp"
+ android:layout_height="60dp"
+ android:layout_gravity="center"
+ android:scaleType="fitXY"
+ android:src="@mipmap/shop_logo"/>
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:layout_gravity="center"
+ android:layout_marginLeft="10dp"
+ android:layout_marginTop="8dp"
+ android:orientation="vertical"
+ android:padding="1dp">
+
+ <TextView
+ android:id="@+id/tv_shopname"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:maxLines="2"
+ android:text=""
+ android:textColor="@color/blue"
+ android:textSize="28sp"/>
+
+ <TextView
+ android:id="@+id/tv_nowtime"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="start"
+ android:maxLines="1"
+ android:text=""
+ android:textColor="@color/blue"
+ android:textSize="22sp"/>
+ </LinearLayout>
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_gravity="center"
+ android:layout_weight="1"
+ android:gravity="end"
+ android:orientation="horizontal">
+
+ <ImageView
+ android:id="@+id/tv_linklogo"
+ android:layout_width="30dp"
+ android:layout_height="30dp"
+ android:scaleType="fitXY"
+ android:src="@drawable/wireless_on"/>
+
+ <TextView
+ android:id="@+id/tv_linkstat"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:maxLines="1"
+ android:text="已联网"
+ android:textColor="@color/blue"
+ android:textSize="22sp"/>
+ </LinearLayout>
+ </LinearLayout>
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:layout_marginLeft="10dp"
+ android:layout_marginRight="10dp"
+ android:background="@color/black"/>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="horizontal"
+ android:padding="@dimen/consume_text_pad_size">
+
+ <TextView
+ android:layout_width="260dp"
+ android:layout_height="match_parent"
+ android:gravity="start|center"
+ android:text="消费金额"
+ android:textColor="@color/blue"
+ android:textSize="50sp"
+ android:textStyle="bold"/>
+
+ <TextView
+ android:id="@+id/tv_input_amt"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:gravity="center"
+ android:maxLines="1"
+ android:text="0"
+ android:textColor="@color/orange1"
+ android:textSize="65sp"
+ android:textStyle="bold"/>
+ </LinearLayout>
+ </LinearLayout>
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="20dp"
+ android:layout_marginTop="10dp"
+ android:layout_marginRight="20dp"
+ android:background="@drawable/corner_bg_ordinary_consume_green"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:padding="10dp">
+
+ <ImageView
+ android:layout_width="40dp"
+ android:layout_height="40dp"
+ android:scaleType="fitXY"
+ android:src="@mipmap/show_card_info"/>
+
+ <TextView
+ android:id="@+id/tv_card_info"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="市民卡信息"
+ android:textColor="@color/blue"
+ android:textSize="@dimen/consume_text_size2"/>
+ </LinearLayout>
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:layout_marginLeft="10dp"
+ android:layout_marginTop="5dp"
+ android:layout_marginRight="10dp"
+ android:layout_marginBottom="5dp"
+ android:background="@color/black"/>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginLeft="10dp"
+ android:layout_marginTop="5dp"
+ android:orientation="vertical">
+
+ <ImageView
+ android:layout_width="80dp"
+ android:layout_height="80dp"
+ android:layout_gravity="center"
+ android:scaleType="fitXY"
+ android:src="@mipmap/default_photo"
+ android:visibility="gone"/>
+
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:padding="@dimen/consume_text_pad_size1"
+ android:text="如需查询信息,请刷卡!"
+ android:textColor="@color/blue"
+ android:textSize="@dimen/consume_text_size2"/>
+
+ <LinearLayout style="@style/consume_wait_account_ll_style">
+
+ <TextView
+ style="@style/consume_wait_account_paraname_style"
+ android:text="姓 名: "/>
+
+ <TextView
+ android:id="@+id/tv_citizen_name"
+ style="@style/consume_wait_account_paraval_style"/>
+ </LinearLayout>
+
+ <LinearLayout style="@style/consume_wait_account_ll_style">
+
+ <TextView
+ style="@style/consume_wait_account_paraname_style"
+ android:text="市民卡号: "/>
+
+ <TextView
+ android:id="@+id/tv_citizen_cardno"
+ style="@style/consume_wait_account_paraval_style"/>
+ </LinearLayout>
+
+ <LinearLayout style="@style/consume_wait_account_ll_style">
+
+ <TextView
+ style="@style/consume_wait_account_paraname_style"
+ android:text="账户状态: "/>
+
+ <TextView
+ android:id="@+id/tv_cardstatus"
+ style="@style/consume_wait_account_paraval_style"/>
+ </LinearLayout>
+ </LinearLayout>
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginLeft="20dp"
+ android:layout_marginTop="10dp"
+ android:layout_marginRight="20dp"
+ android:layout_marginBottom="20dp"
+ android:background="@drawable/corner_bg_ordinary_consume_green"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:padding="@dimen/consume_text_pad_size1">
+
+ <ImageView
+ android:layout_width="40dp"
+ android:layout_height="40dp"
+ android:scaleType="fitXY"
+ android:src="@mipmap/bill_lastdtl"/>
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="最近一笔"
+ android:textColor="@color/blue"
+ android:textSize="@dimen/consume_text_size2"/>
+ <TextView
+ android:id="@+id/tv_syno_flag"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="!"
+ android:textColor="@color/blue"
+ android:textSize="@dimen/consume_text_size2" />
+ </LinearLayout>
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:layout_marginLeft="10dp"
+ android:layout_marginTop="10dp"
+ android:layout_marginRight="10dp"
+ android:layout_marginBottom="5dp"
+ android:background="@color/black"/>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:paddingLeft="10dp"
+ android:paddingTop="10dp">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:text="支付结果: "
+ android:textColor="@color/black"
+ android:textSize="@dimen/consume_text_size2"/>
+
+ <TextView
+ android:id="@+id/tv_last_pay_result"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:maxLines="1"
+ android:text=""
+ android:textColor="@color/blue"
+ android:textSize="@dimen/consume_text_size2"
+ android:textStyle="bold"/>
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/ll_consume_last_failreason"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:paddingLeft="10dp"
+ android:paddingTop="5dp"
+ android:visibility="gone">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:text="失败提示: "
+ android:textColor="@color/cl_red"
+ android:textSize="@dimen/consume_text_size2"/>
+
+ <TextView
+ android:id="@+id/tv_last_failreason"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:maxLines="1"
+ android:text=""
+ android:textColor="@color/cl_red"
+ android:textSize="@dimen/consume_text_size2"
+ android:textStyle="bold"/>
+ </LinearLayout>
+ <LinearLayout
+ android:id="@+id/ll_consume_cardno"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:paddingLeft="10dp"
+ android:paddingTop="5dp">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:text="支付卡号: "
+ android:textColor="@color/black"
+ android:textSize="@dimen/consume_text_size2"/>
+
+ <TextView
+ android:id="@+id/tv_last_cardno"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:maxLines="1"
+ android:text=""
+ android:textColor="@color/blue"
+ android:textSize="@dimen/consume_text_size2"
+ android:textStyle="bold"/>
+ </LinearLayout>
+ <LinearLayout
+ android:id="@+id/ll_consume_last_payamt"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:paddingLeft="10dp"
+ android:paddingTop="5dp">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:text="支付金额: "
+ android:textColor="@color/black"
+ android:textSize="@dimen/consume_text_size2"/>
+
+ <TextView
+ android:id="@+id/tv_last_payamt"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:maxLines="1"
+ android:text=""
+ android:textColor="@color/blue"
+ android:textSize="@dimen/consume_text_size2"
+ android:textStyle="bold"/>
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:paddingLeft="10dp"
+ android:paddingTop="5dp">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:text="支付方式: "
+ android:textColor="@color/black"
+ android:textSize="@dimen/consume_text_size2"/>
+
+ <TextView
+ android:id="@+id/tv_last_payway"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:maxLines="1"
+ android:text=""
+ android:textColor="@color/blue"
+ android:textSize="@dimen/consume_text_size2"
+ android:textStyle="bold"/>
+ </LinearLayout>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:paddingLeft="10dp"
+ android:paddingTop="5dp">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:text="支付时间: "
+ android:textColor="@color/black"
+ android:textSize="@dimen/consume_text_size2"/>
+
+ <TextView
+ android:id="@+id/tv_last_paytime"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:maxLines="1"
+ android:text=""
+ android:textColor="@color/blue"
+ android:textSize="@dimen/consume_text_size2"
+ android:textStyle="bold"/>
+ </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
index 7537388..4fb3a1f 100644
--- a/app/src/main/res/layout/activity_manage.xml
+++ b/app/src/main/res/layout/activity_manage.xml
@@ -1,54 +1,74 @@
-<?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>
+<?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:id="@+id/ll_operate"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="10dp"
+ android:orientation="vertical"
+ android:padding="10dp"
+ android:visibility="gone">
+
+ <TextView
+ android:id="@+id/tv_operate_hint"
+ style="@style/menu_item_text_style" />
+
+ <TextView
+ android:id="@+id/tv_operate_result"
+ style="@style/menu_item_text_style" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/ll_menu"
+ 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_syno_active" />
+
+ <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/layout/activity_menu.xml b/app/src/main/res/layout/activity_menu.xml
index e938845..3c0950a 100644
--- a/app/src/main/res/layout/activity_menu.xml
+++ b/app/src/main/res/layout/activity_menu.xml
@@ -1,69 +1,88 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@color/light_blue2"
- android:orientation="vertical">
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_margin="20dp"
- android:background="@drawable/corner_bg_white"
- android:orientation="vertical">
-
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="10dp"
- android:gravity="center"
- android:text="管理界面"
- android:textColor="@color/light_blue2"
- android:textSize="45sp" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginLeft="10dp"
- android:orientation="vertical"
- android:padding="10dp">
-
- <TextView
- style="@style/menu_item_text_style"
- android:text="@string/consume_menu_revenue" />
-
- <TextView
- style="@style/menu_item_text_style"
- android:text="@string/consume_menu_transdtl_upload" />
-
- <TextView
- style="@style/menu_item_text_style"
- android:text="@string/consume_menu_link_check" />
-
- <TextView
- style="@style/menu_item_text_style"
- android:text="@string/consume_menu_auth" />
-
- <TextView
- style="@style/menu_item_text_style"
- android:text="@string/consume_menu_syspara_query" />
-
- <TextView
- style="@style/menu_item_text_style"
- android:text="@string/consume_menu_manage" />
-
- <TextView
- style="@style/menu_item_text_style"
- android:text="@string/consume_menu_shop_password_set" />
-
- <TextView
- style="@style/menu_item_text_style"
- android:text="@string/consume_menu_consume_mode" />
-
- <TextView
- android:id="@+id/tv_reverse"
- style="@style/menu_item_text_style"
- android:text="@string/consume_menu_reverse" />
- </LinearLayout>
- </LinearLayout>
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@color/light_blue2"
+ android:orientation="vertical">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_margin="20dp"
+ android:background="@drawable/corner_bg_white"
+ android:orientation="vertical">
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="10dp"
+ android:gravity="center"
+ android:text="管理界面"
+ android:textColor="@color/light_blue2"
+ android:textSize="45sp" />
+
+ <LinearLayout
+ android:id="@+id/ll_operate"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginLeft="10dp"
+ android:orientation="vertical"
+ android:padding="10dp"
+ android:visibility="gone">
+
+ <TextView
+ android:id="@+id/tv_operate_hint"
+ style="@style/menu_item_text_style" />
+
+ <TextView
+ android:id="@+id/tv_operate_result"
+ style="@style/menu_item_text_style" />
+ </LinearLayout>
+
+ <LinearLayout
+ android:id="@+id/ll_menu"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginLeft="10dp"
+ android:orientation="vertical"
+ android:padding="10dp">
+
+ <TextView
+ style="@style/menu_item_text_style"
+ android:text="@string/consume_menu_revenue" />
+
+ <TextView
+ style="@style/menu_item_text_style"
+ android:text="@string/consume_menu_transdtl_upload" />
+
+ <TextView
+ style="@style/menu_item_text_style"
+ android:text="@string/consume_menu_link_check" />
+
+ <TextView
+ style="@style/menu_item_text_style"
+ android:text="@string/consume_menu_auth" />
+
+ <TextView
+ style="@style/menu_item_text_style"
+ android:text="@string/consume_menu_syspara_query" />
+
+ <TextView
+ style="@style/menu_item_text_style"
+ android:text="@string/consume_menu_manage" />
+
+ <TextView
+ style="@style/menu_item_text_style"
+ android:text="@string/consume_menu_shop_password_set" />
+
+ <TextView
+ style="@style/menu_item_text_style"
+ android:text="@string/consume_menu_consume_mode" />
+
+ <TextView
+ android:id="@+id/tv_reverse"
+ style="@style/menu_item_text_style"
+ android:text="@string/consume_menu_reverse" />
+ </LinearLayout>
+ </LinearLayout>
</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_purchase.xml b/app/src/main/res/layout/dialog_purchase.xml
index bb9a98a..1deb797 100644
--- a/app/src/main/res/layout/dialog_purchase.xml
+++ b/app/src/main/res/layout/dialog_purchase.xml
@@ -1,53 +1,64 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="450dp"
- android:layout_height="300dp"
- android:background="@color/light_blue2"
- android:layout_gravity="center"
- android:orientation="vertical">
- <RelativeLayout android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_gravity="center"
- android:layout_margin="10dp"
- android:background="@drawable/corner_bg_white"
- android:gravity="center_horizontal"
- android:orientation="vertical">
- <!--倒计时-->
- <TextView
- android:id="@+id/tv_close_count"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="15dp"
- android:layout_marginTop="10dp"
- android:gravity="start|center"
- android:text="30s"
- android:textColor="@color/blue"
- android:textSize="30sp"/>
- <LinearLayout
- style="@style/purchase_ll_text_style"
- android:layout_below="@+id/tv_close_count">
-
- <TextView
- android:id="@+id/tv_pay_hint"
- style="@style/purchase_tv_text_hint_style"
- android:text="消费成功"
- android:textColor="@color/light_green"/>
- <TextView
- android:id="@+id/tv_pay_username"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="姓名: 张三"
- android:textColor="@color/blue"
- android:textSize="@dimen/ordinary_consume_text_size"/>
- <TextView
- android:id="@+id/tv_pay_amount"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginTop="10dp"
- android:text="金额: 10.00元"
- android:textColor="@color/blue"
- android:textSize="@dimen/ordinary_consume_text_size"/>
-
- </LinearLayout>
- </RelativeLayout>
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="450dp"
+ android:layout_height="300dp"
+ android:layout_gravity="center"
+ android:background="@color/light_blue2"
+ android:orientation="vertical">
+
+ <com.synodata.scanview.view.Preview
+ android:id="@+id/sy_preview"
+ android:layout_width="1dp"
+ android:layout_height="1dp"
+ android:visibility="gone" />
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_gravity="center"
+ android:layout_margin="10dp"
+ android:background="@drawable/corner_bg_white"
+ android:gravity="center_horizontal"
+ android:orientation="vertical">
+ <!--倒计时-->
+ <TextView
+ android:id="@+id/tv_close_count"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="15dp"
+ android:layout_marginTop="10dp"
+ android:gravity="start|center"
+ android:text="60s"
+ android:textColor="@color/blue"
+ android:textSize="30sp" />
+
+ <LinearLayout
+ style="@style/purchase_ll_text_style"
+ android:layout_below="@+id/tv_close_count">
+
+ <TextView
+ android:id="@+id/tv_pay_hint"
+ style="@style/purchase_tv_text_hint_style"
+ android:text="消费成功"
+ android:textColor="@color/light_green" />
+
+ <TextView
+ android:id="@+id/tv_pay_username"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="姓名: 张三"
+ android:textColor="@color/blue"
+ android:textSize="@dimen/ordinary_consume_text_size" />
+
+ <TextView
+ android:id="@+id/tv_pay_amount"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="10dp"
+ android:text="金额: 10.00元"
+ android:textColor="@color/blue"
+ android:textSize="@dimen/ordinary_consume_text_size" />
+
+ </LinearLayout>
+ </RelativeLayout>
</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index c26513d..5b1cfbc 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,136 +1,136 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-
- <string name="app_name">消费POS机</string>
- <string name="title_activity_base">基类</string>
- <string name="action_settings">设置</string>
- <string name="title_activity_main">主界面</string>
- <string name="title_activity_psam">操作psam卡</string>
- <string name="title_activity_readcard">读卡</string>
- <string name="title_activity_mode">模式</string>
- <string name="title_activity_init">初始化</string>
- <string name="title_activity_load">加载</string>
- <string name="title_activity_comm">通讯</string>
- <string name="title_activity_control">控制参数</string>
- <string name="title_activity_consumecancel">消费撤销</string>
- <string name="title_activity_library">图书缴费</string>
- <string name="title_activity_recharge">在线充值</string>
- <string name="cardlib_name">supwisdom.kscpucard</string>
- <string name="connfail">连接失败</string>
- <string name="msg_read_card_error">读卡错误</string>
- <string name="msg_notsupport_card_oper">不支持卡操作</string>
- <string name="msg_card_data_error">卡数据错误</string>
- <string name="nfc_not_support">不支持NFC</string>
- <string name="nfc_disabled">NFC未启动</string>
- <string name="confirm_open_nfc">是否打开NFC</string>
- <string name="action_exit">退出</string>
- <string name="wait_msg">请刷卡</string>
- <string name="menu_name_set">设置</string>
- <string name="menu_name_purchase">消费</string>
- <string name="title_activity_set">设置</string>
- <string name="hello_world">hello</string>
- <string name="devtimefmt">yyyyMMddHHmmss</string>
- <string name="title_activity_transdtl">交易流水查询</string>
- <string name="no_mf_files">\"无MF文件\"</string>
- <string name="creat_mf_files">创建MF文件</string>
- <string name="creat_mf_success">创建MF文件成功</string>
- <string name="creat_mf_fail">创建MF文件失败</string>
- <string name="mf_exist">MF退出</string>
- <string name="error">错误</string>
- <string name="reset_psam1_success">重设PSAM1成功</string>
- <string name="reset_psam1_failed">重设psam1失败</string>
- <string name="reset_psam2_success">重设psam2成功</string>
- <string name="reset_psam2_failed">重设psam2失败</string>
- <string name="get_random_number_failed">获取随机数失败</string>
- <string name="reset_import1">初始化1失败</string>
- <string name="reset_failed_cannot_get_random_number1">不能获取随机数1</string>
- <string name="reset_import2">重设2失败</string>
- <string name="reset_failed_cannot_get_random_number2">获取随机数2失败</string>
- <string name="title_activity_show_day_consume">营业额查询</string>
- <string name="title_activity_password">密码设置</string>
- <string name="isPasswordCancel">isPassWordCancel</string>
- <string name="consume_img">消费</string>
- <string name="title_activity_auth">签到</string>
- <string name="action_saoma">扫码</string>
- <string name="scan_text">将二维码或条码放入框内完成扫描</string>
- <string name="home_back">返回</string>
- <string name="title_activity_consume">普通消费</string>
- <string name="title_activity_qrcamera">扫码</string>
- <string name="title_activity_splash">树维pos</string>
- <string name="waiting_msg">正在识别,请稍后…</string>
- <string name="username">姓 名</string>
- <string name="userStuEmpNo">学工号</string>
- <string name="userExpireDate">有效期</string>
- <string name="userBalance">余 额</string>
- <string name="consumeAmount">消费额(元)</string>
- <string name="title_activity_consume_cancel">消费撤销</string>
- <string name="title_activity_update_blacklist">更新黑名单</string>
- <string name="title_activity_recover_factory">恢复出厂</string>
- <string name="dialogTitle">提示</string>
- <string name="all_home_words">主页</string>
- <string name="all_back_words">返回</string>
- <string name="title_activity_order_online">在线点餐</string>
- <string name="title_activity_query_parameter_second">查询第二页</string>
- <string name="devphyid">终端机编号</string>
- <string name="samNo">SAM卡号</string>
- <string name="softVerNo">软件版本号</string>
- <string name="feerateVerNo">收费参数版本号</string>
- <string name="sysparaVerNo">主参数版本号</string>
- <string name="cardverno">黑名单参数版本号</string>
- <string name="devseqno">POS当前流水号</string>
- <string name="opentime">开机时间</string>
- <string name="nextPage">下一页</string>
- <string name="queryParameters">终端参数查询</string>
- <string name="title_activity_change_mode">更改模式</string>
- <string name="title_activity_enable">设备启用</string>
- <string name="offline_words">脱机状态</string>
- <string name="online_words">联机状态</string>
- <string name="title_activity_set_server_info">设置通讯参数</string>
- <string name="title_activity_test_touch">TestTouchActivity</string>
- <string name="wait_put_card_words"><![CDATA[请刷卡 >>]]></string>
- <string name="title_activity_hotel">酒店消费</string>
- <string name="title_activity_manage">设备管理</string>
- <string name="title_activity_revenue">营业额</string>
- <string name="title_activity_pay">支付</string>
- <string name="title_activity_modifypwd">修改密码</string>
- <string name="title_activity_syspara">系统参数</string>
- <string name="title_activity_department">部门限制</string>
- <string name="title_activity_sddtl">SD卡流水</string>
- <string name="title_activity_cardlib">卡库</string>
- <string name="title_activity_upgrade">本地升级</string>
- <!--消费菜单-->
- <string name="consume_menu_revenue">1-营业额</string>
- <string name="consume_menu_transdtl_upload">2-上传流水</string>
- <string name="consume_menu_link_check">3-链路检测</string>
- <string name="consume_menu_auth">4-手工签到</string>
- <string name="consume_menu_syspara_query">5-参数查询</string>
- <string name="consume_menu_manage">6-管理功能</string>
- <string name="consume_menu_shop_password_set">7-商户密码</string>
- <string name="consume_menu_consume_mode">8-消费模式</string>
- <string name="consume_menu_reverse">9-手工冲正</string>
- <!--消费维护菜单-->
- <string name="consume_menu_shop_passwd">1-查看商户密码</string>
- <string name="consume_menu_comm_set">2-通讯参数设置</string>
- <string name="consume_menu_unconfirm_transdtl">3-查询未上传流水</string>
- <string name="consume_menu_out_dtl">4-导出本地流水</string>
- <string name="consume_menu_upgrade">5-软件在线升级</string>
- <string name="consume_menu_app_exit">6-退出应用程序</string>
- <string name="consume_menu_setting">7-进入设置界面</string>
- <string name="consume_menu_clear_blklist">8-清空黑名单</string>
- <string name="consume_menu_control_set">9-本地参数设置</string>
- <!--充值菜单-->
- <string name="deposit_menu_revenue">1-营业额查询</string>
- <string name="deposit_menu_login_out">2-退出登录</string>
- <string name="deposit_menu_reverse">3-手工冲正</string>
- <string name="deposit_menu_param_query">4-参数查询</string>
- <string name="deposit_menu_param_manage">5-设备管理</string>
- <string name="deposit_menu_param_link">6-链路检测</string>
- <!--充值维护菜单-->
- <string name="deposit_manage_transdtl_clear">1-清空流水</string>
- <string name="deposit_manage_comm_set">2-参数设置</string>
- <string name="deposit_manage_upgrade">3-在线升级</string>
- <string name="deposit_manage_app_exit">4-退出应用</string>
- <string name="deposit_manage_setting">5-网络设置</string>
- <!--充值参数-->
- <string name="deposit_param_opername">操作员</string>
-</resources>
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+
+ <string name="app_name">消费POS机</string>
+ <string name="title_activity_base">基类</string>
+ <string name="action_settings">设置</string>
+ <string name="title_activity_main">主界面</string>
+ <string name="title_activity_psam">操作psam卡</string>
+ <string name="title_activity_readcard">读卡</string>
+ <string name="title_activity_mode">模式</string>
+ <string name="title_activity_init">初始化</string>
+ <string name="title_activity_load">加载</string>
+ <string name="title_activity_comm">通讯</string>
+ <string name="title_activity_control">控制参数</string>
+ <string name="title_activity_consumecancel">消费撤销</string>
+ <string name="title_activity_library">图书缴费</string>
+ <string name="title_activity_recharge">在线充值</string>
+ <string name="cardlib_name">supwisdom.kscpucard</string>
+ <string name="connfail">连接失败</string>
+ <string name="msg_read_card_error">读卡错误</string>
+ <string name="msg_notsupport_card_oper">不支持卡操作</string>
+ <string name="msg_card_data_error">卡数据错误</string>
+ <string name="nfc_not_support">不支持NFC</string>
+ <string name="nfc_disabled">NFC未启动</string>
+ <string name="confirm_open_nfc">是否打开NFC</string>
+ <string name="action_exit">退出</string>
+ <string name="wait_msg">请刷卡</string>
+ <string name="menu_name_set">设置</string>
+ <string name="menu_name_purchase">消费</string>
+ <string name="title_activity_set">设置</string>
+ <string name="hello_world">hello</string>
+ <string name="devtimefmt">yyyyMMddHHmmss</string>
+ <string name="title_activity_transdtl">交易流水查询</string>
+ <string name="no_mf_files">\"无MF文件\"</string>
+ <string name="creat_mf_files">创建MF文件</string>
+ <string name="creat_mf_success">创建MF文件成功</string>
+ <string name="creat_mf_fail">创建MF文件失败</string>
+ <string name="mf_exist">MF退出</string>
+ <string name="error">错误</string>
+ <string name="reset_psam1_success">重设PSAM1成功</string>
+ <string name="reset_psam1_failed">重设psam1失败</string>
+ <string name="reset_psam2_success">重设psam2成功</string>
+ <string name="reset_psam2_failed">重设psam2失败</string>
+ <string name="get_random_number_failed">获取随机数失败</string>
+ <string name="reset_import1">初始化1失败</string>
+ <string name="reset_failed_cannot_get_random_number1">不能获取随机数1</string>
+ <string name="reset_import2">重设2失败</string>
+ <string name="reset_failed_cannot_get_random_number2">获取随机数2失败</string>
+ <string name="title_activity_show_day_consume">营业额查询</string>
+ <string name="title_activity_password">密码设置</string>
+ <string name="isPasswordCancel">isPassWordCancel</string>
+ <string name="consume_img">消费</string>
+ <string name="title_activity_auth">签到</string>
+ <string name="action_saoma">扫码</string>
+ <string name="scan_text">将二维码或条码放入框内完成扫描</string>
+ <string name="home_back">返回</string>
+ <string name="title_activity_consume">普通消费</string>
+ <string name="title_activity_qrcamera">扫码</string>
+ <string name="title_activity_splash">树维pos</string>
+ <string name="waiting_msg">正在识别,请稍后…</string>
+ <string name="username">姓 名</string>
+ <string name="userStuEmpNo">学工号</string>
+ <string name="userExpireDate">有效期</string>
+ <string name="userBalance">余 额</string>
+ <string name="consumeAmount">消费额(元)</string>
+ <string name="title_activity_consume_cancel">消费撤销</string>
+ <string name="title_activity_update_blacklist">更新黑名单</string>
+ <string name="title_activity_recover_factory">恢复出厂</string>
+ <string name="dialogTitle">提示</string>
+ <string name="all_home_words">主页</string>
+ <string name="all_back_words">返回</string>
+ <string name="title_activity_order_online">在线点餐</string>
+ <string name="title_activity_query_parameter_second">查询第二页</string>
+ <string name="devphyid">终端机编号</string>
+ <string name="samNo">SAM卡号</string>
+ <string name="softVerNo">软件版本号</string>
+ <string name="feerateVerNo">收费参数版本号</string>
+ <string name="sysparaVerNo">主参数版本号</string>
+ <string name="cardverno">黑名单参数版本号</string>
+ <string name="devseqno">POS当前流水号</string>
+ <string name="opentime">开机时间</string>
+ <string name="nextPage">下一页</string>
+ <string name="queryParameters">终端参数查询</string>
+ <string name="title_activity_change_mode">更改模式</string>
+ <string name="title_activity_enable">设备启用</string>
+ <string name="offline_words">脱机状态</string>
+ <string name="online_words">联机状态</string>
+ <string name="title_activity_set_server_info">设置通讯参数</string>
+ <string name="title_activity_test_touch">TestTouchActivity</string>
+ <string name="wait_put_card_words"><![CDATA[请刷卡 >>]]></string>
+ <string name="title_activity_hotel">酒店消费</string>
+ <string name="title_activity_manage">设备管理</string>
+ <string name="title_activity_revenue">营业额</string>
+ <string name="title_activity_pay">支付</string>
+ <string name="title_activity_modifypwd">修改密码</string>
+ <string name="title_activity_syspara">系统参数</string>
+ <string name="title_activity_department">部门限制</string>
+ <string name="title_activity_sddtl">SD卡流水</string>
+ <string name="title_activity_cardlib">卡库</string>
+ <string name="title_activity_upgrade">本地升级</string>
+ <!--消费菜单-->
+ <string name="consume_menu_revenue">1-营业额</string>
+ <string name="consume_menu_transdtl_upload">2-上传流水</string>
+ <string name="consume_menu_link_check">3-链路检测</string>
+ <string name="consume_menu_auth">4-手工签到</string>
+ <string name="consume_menu_syspara_query">5-参数查询</string>
+ <string name="consume_menu_manage">6-管理功能</string>
+ <string name="consume_menu_shop_password_set">7-商户密码</string>
+ <string name="consume_menu_consume_mode">8-消费模式</string>
+ <string name="consume_menu_reverse">9-手工冲正</string>
+ <!--消费维护菜单-->
+ <string name="consume_menu_shop_passwd">1-查看商户密码</string>
+ <string name="consume_menu_comm_set">2-通讯参数设置</string>
+ <string name="consume_menu_unconfirm_transdtl">3-查询未上传流水</string>
+ <string name="consume_menu_syno_active">4-激活晟元算法</string>
+ <string name="consume_menu_upgrade">5-软件在线升级</string>
+ <string name="consume_menu_app_exit">6-退出应用程序</string>
+ <string name="consume_menu_setting">7-进入设置界面</string>
+ <string name="consume_menu_clear_blklist">8-清空黑名单</string>
+ <string name="consume_menu_control_set">9-本地参数设置</string>
+ <!--充值菜单-->
+ <string name="deposit_menu_revenue">1-营业额查询</string>
+ <string name="deposit_menu_login_out">2-退出登录</string>
+ <string name="deposit_menu_reverse">3-手工冲正</string>
+ <string name="deposit_menu_param_query">4-参数查询</string>
+ <string name="deposit_menu_param_manage">5-设备管理</string>
+ <string name="deposit_menu_param_link">6-链路检测</string>
+ <!--充值维护菜单-->
+ <string name="deposit_manage_transdtl_clear">1-清空流水</string>
+ <string name="deposit_manage_comm_set">2-参数设置</string>
+ <string name="deposit_manage_upgrade">3-在线升级</string>
+ <string name="deposit_manage_app_exit">4-退出应用</string>
+ <string name="deposit_manage_setting">5-网络设置</string>
+ <!--充值参数-->
+ <string name="deposit_param_opername">操作员</string>
+</resources>
diff --git a/keys-sign.jks b/keys-sign.jks
new file mode 100644
index 0000000..20b9f78
--- /dev/null
+++ b/keys-sign.jks
Binary files differ