添加晟元扫码
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/checkShoppwd/CheckShoppwdActivity.kt b/app/src/main/java/com/supwisdom/activities/checkShoppwd/CheckShoppwdActivity.kt
index 5b12e29..746c06c 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,160 @@
-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.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)

+

+            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/load/LoadPresenter.kt b/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt
index 823c8ca..95f6739 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.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

+                }

+            }

+            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..f0f972b 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,177 @@
-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 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

+                    presenter!!.doSynoActive()

+                }

+                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_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)

+            )

+        )

+    }

+

+    private fun showShopPassword() {

+        AuxScreenController.getInstance()

+            .refreshContent(Arrays.asList<String>("商户密码:", pos.getConfigPara()!!.shopPwd))

+    }

+

+    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..bab3996 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,133 @@
-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

+        }

+        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!!)

+            }

+        }

+    }

 }
\ 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..6c0b764 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.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 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/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..e82f9d8 100644
--- a/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
+++ b/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
@@ -1,87 +1,81 @@
-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 = 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 + " 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 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)")

+

+    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) {

+        }

+    }

 }
\ 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..f293c0f 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
@@ -1,226 +1,246 @@
-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

+            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..f745fc1 100644
--- a/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
+++ b/app/src/main/java/com/supwisdom/db/TransdtlUnionDao.kt
@@ -1,126 +1,131 @@
-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()

+                        + "' 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

+    }

 }
\ 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/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..b9034b1
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/service/SynoCodeService.kt
@@ -0,0 +1,296 @@
+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) {

+            val retBean =

+                GsonUtil.GsonToBean(resp.retjson!!, EpaySynoLicenseUploadRetBean::class.java)

+            return BaseResp(PublicDef.ERROR, retBean.message)

+        }

+        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..7ccc434 100644
--- a/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
@@ -1,287 +1,315 @@
-@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.product.firmware") as String

+        } catch (ex: 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/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 aa442a0..c616cf3 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 {
@@ -104,7 +201,7 @@
 
         vUsername.visibility = View.GONE
         show()
-        asyncOpenDecoder()
+        cameraOpenScan()
         resetCounter(waitTime)
     }
 
@@ -179,54 +276,13 @@
         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 > 180000
-            ) {
-                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
@@ -234,7 +290,7 @@
     private fun resetCounter(times: Int) {
         counter?.cancel()
         counter = ConsumeHintCount((times * 1000).toLong(), 500)
-        counter?.start()
+        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_manage.xml b/app/src/main/res/layout/activity_manage.xml
index 7537388..6b979d6 100644
--- a/app/src/main/res/layout/activity_manage.xml
+++ b/app/src/main/res/layout/activity_manage.xml
@@ -1,54 +1,54 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              style="@style/head_title_out_style">
-
-    <LinearLayout style="@style/head_title_inner_style">
-        <TextView
-                style="@style/head_title_text_style"
-                android:text="维护管理界面"/>
-
-        <LinearLayout
-                android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                android:layout_marginLeft="10dp"
-                android:orientation="vertical"
-                android:padding="10dp">
-
-            <TextView
-                    style="@style/menu_item_text_style"
-                    android:text="@string/consume_menu_shop_passwd"/>
-
-            <TextView
-                    style="@style/menu_item_text_style"
-                    android:text="@string/consume_menu_comm_set"/>
-
-            <TextView
-                    style="@style/menu_item_text_style"
-                    android:text="@string/consume_menu_unconfirm_transdtl"/>
-
-            <TextView
-                    style="@style/menu_item_text_style"
-                    android:text="@string/consume_menu_out_dtl"/>
-
-            <TextView
-                    style="@style/menu_item_text_style"
-                    android:text="@string/consume_menu_upgrade"/>
-
-            <TextView
-                    style="@style/menu_item_text_style"
-                    android:text="@string/consume_menu_app_exit"/>
-
-            <TextView
-                    style="@style/menu_item_text_style"
-                    android:text="@string/consume_menu_setting"/>
-
-            <TextView
-                    style="@style/menu_item_text_style"
-                    android:text="@string/consume_menu_clear_blklist"/>
-
-            <TextView
-                    style="@style/menu_item_text_style"
-                    android:text="@string/consume_menu_control_set"/>
-        </LinearLayout>
-    </LinearLayout>
-</LinearLayout>
+<?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_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/dialog_purchase.xml b/app/src/main/res/layout/dialog_purchase.xml
index bb9a98a..fc8ef91 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_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>

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