init
diff --git a/app/src/main/java/com/supwisdom/bean/BaseResp.kt b/app/src/main/java/com/supwisdom/bean/BaseResp.kt
new file mode 100644
index 0000000..bb60f03
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/bean/BaseResp.kt
@@ -0,0 +1,8 @@
+package com.supwisdom.bean
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+open class BaseResp constructor(retcode: Int, retmsg: String) {
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
new file mode 100644
index 0000000..2280950
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
@@ -0,0 +1,72 @@
+package com.supwisdom.db
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+object BeanPropEnum {
+ enum class Syspara {
+ id,
+ limitSwitch,
+ returnFlag,
+ heatBeat,
+ offlineFlag,
+ maxOfflineDays,
+ maxPaycnt,
+ creditLowLimit,
+ minCardbal,
+ maxCardbal,
+ daySumLimitamt,
+ onceLimitamt,
+ password,
+ fixpayConsumeGap,
+ controlFlag,
+ consumeShowtime,
+ consumeFailShowtime,
+ qrOfflineEnable,
+ qrcodeUrl,
+ socketSwitch,
+ commTime
+ }
+
+ enum class ConfigPara {
+ id,
+ mode,
+ deviceid,
+ merchaccno,
+ shopname,
+ devphyid,
+ psamno,
+ epayIP,
+ epayPort,
+ epayUri,
+ managePwd,
+ initOK
+ }
+
+ enum class DynamicPara {
+ id,
+ paraverno,
+ paragroupid,
+ feeverno,
+ feegroupid,
+ cardverno,
+ codeverno,
+ schoolno,
+ deductlimitamt,
+ sessionKey,
+ mf1key,
+ mf1factor,
+ rootkey,
+ iv,
+ devkey,
+ appId,
+ appSecret
+ }
+
+ enum class ControlPara {
+ paraname,
+ paraval
+ }
+
+}
\ 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
new file mode 100644
index 0000000..8402934
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/db/ConfigParaDao.kt
@@ -0,0 +1,124 @@
+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 = DBTransdtlHelper.TABLE_NAME_CONFIGPARA
+ private val dbHelper = DBTransdtlHelper.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.deviceid = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.ConfigPara.deviceid.toString()))
+ record.merchaccno = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.ConfigPara.merchaccno.toString()))
+ record.shopname = cursor.getString(cursor.getColumnIndex(BeanPropEnum.ConfigPara.shopname.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.deviceid.toString(), record.deviceid)
+ values.put(BeanPropEnum.ConfigPara.merchaccno.toString(), record.merchaccno)
+ values.put(BeanPropEnum.ConfigPara.shopname.toString(), record.shopname)
+ 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/DBParaHelper.kt b/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
new file mode 100644
index 0000000..8dcc3dc
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
@@ -0,0 +1,106 @@
+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 = 1
+
+ val TABLE_NAME_SYSPARA = "tb_syspara"
+ val TABLE_NAME_DYNAMICPARA = "tb_dynamicpara"
+ val TABLE_NAME_CONTROLPARA = "tb_controlpara"
+ }
+
+
+ /**
+ * SQL for create table
+ */
+
+ 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.paraverno + " integer, "
+ + BeanPropEnum.DynamicPara.paragroupid + " integer, "
+ + BeanPropEnum.DynamicPara.feeverno + " integer, "
+ + BeanPropEnum.DynamicPara.feegroupid + " integer, "
+ + BeanPropEnum.DynamicPara.cardverno + " char(12),"
+ + BeanPropEnum.DynamicPara.codeverno + " char(14),"
+ + BeanPropEnum.DynamicPara.schoolno + " varchar(16),"
+ + BeanPropEnum.DynamicPara.deductlimitamt + " integer,"
+ + BeanPropEnum.DynamicPara.sessionKey + " char(32),"
+ + BeanPropEnum.DynamicPara.mf1key + " char(16),"
+ + BeanPropEnum.DynamicPara.mf1factor + " char(16),"
+ + BeanPropEnum.DynamicPara.rootkey + " varchar(65),"
+ + BeanPropEnum.DynamicPara.iv + " char(32),"
+ + BeanPropEnum.DynamicPara.devkey + " char(16),"
+ + BeanPropEnum.DynamicPara.appId + " char(8),"
+ + BeanPropEnum.DynamicPara.appSecret + " char(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.limitSwitch + " integer, "
+ + BeanPropEnum.Syspara.returnFlag + " integer, "
+ + BeanPropEnum.Syspara.heatBeat + " integer, "
+ + BeanPropEnum.Syspara.offlineFlag + " integer, "
+ + BeanPropEnum.Syspara.maxOfflineDays + " integer, "
+ + BeanPropEnum.Syspara.maxPaycnt + " integer, "
+ + BeanPropEnum.Syspara.creditLowLimit + " integer, "
+ + BeanPropEnum.Syspara.minCardbal + " integer, "
+ + BeanPropEnum.Syspara.maxCardbal + " integer, "
+ + BeanPropEnum.Syspara.daySumLimitamt + " integer, "
+ + BeanPropEnum.Syspara.onceLimitamt + " integer, "
+ + BeanPropEnum.Syspara.password + " char(6), "
+ + BeanPropEnum.Syspara.fixpayConsumeGap + " integer, "
+ + BeanPropEnum.Syspara.controlFlag + " integer, "
+ + BeanPropEnum.Syspara.consumeShowtime + " integer, "
+ + BeanPropEnum.Syspara.consumeFailShowtime + " integer, "
+ + BeanPropEnum.Syspara.qrOfflineEnable + " integer, "
+ + BeanPropEnum.Syspara.socketSwitch + " integer, "
+ + BeanPropEnum.Syspara.commTime + " integer, "
+ + BeanPropEnum.Syspara.qrcodeUrl + " varchar(128) )")
+ private val DROP_TABLE_NAME_SYSPARA = "DROP TABLE IF EXISTS $TABLE_NAME_SYSPARA"
+
+ @Volatile
+ private var instance: DBParaHelper? = null
+ private val lock = ReentrantLock()
+
+ fun getInstance(context: Context): DBParaHelper {
+ if (null == instance) {
+ synchronized(DBParaHelper::class.java) {
+ if (null == instance) {
+ instance = DBParaHelper(context)
+ }
+ }
+ }
+ return instance!!
+ }
+
+ 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)
+ }
+
+ 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/DBTransdtlHelper.kt b/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
new file mode 100644
index 0000000..da9587b
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
@@ -0,0 +1,66 @@
+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
+ @Volatile
+ private var instance: DBTransdtlHelper? = null
+
+ val TABLE_NAME_CONFIGPARA = "tb_configpara"
+
+ 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 CREATE_TABLE_NAME_CONFIGPARA = ("create table IF NOT EXISTS "
+ + TABLE_NAME_CONFIGPARA + " ( "
+ + BeanPropEnum.ConfigPara.id + " long primary key, "
+ + BeanPropEnum.ConfigPara.mode + " integer, "
+ + BeanPropEnum.ConfigPara.deviceid + " integer, "
+ + BeanPropEnum.ConfigPara.merchaccno + " integer, "
+ + BeanPropEnum.ConfigPara.shopname + " varchar(64), "
+ + BeanPropEnum.ConfigPara.devphyid + " char(8), "
+ + BeanPropEnum.ConfigPara.psamno + " char(12), "
+ + BeanPropEnum.ConfigPara.epayIP + " varchar(128), "
+ + BeanPropEnum.ConfigPara.epayPort + " integer, "
+ + BeanPropEnum.ConfigPara.epayUri + " varchar(128), "
+ + BeanPropEnum.ConfigPara.managePwd + " char(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) {
+ }
+ }
+}
\ 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
new file mode 100644
index 0000000..0bbd00e
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/db/Pos.kt
@@ -0,0 +1,47 @@
+package com.supwisdom.db
+
+import android.content.Context
+import com.supwisdom.entity.ConfigParaRecord
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class Pos constructor(context: Context) {
+ private val context = context
+ private val sdContext = SDContext(context)
+ private var configParaDao = ConfigParaDao(context)
+ private var configParaRecord: ConfigParaRecord? = null
+
+ init {
+ }
+
+ /**
+ * 设备参数
+ */
+
+ fun replaceConfigPara(record: ConfigParaRecord): Boolean {
+ try {
+ configParaDao.getLock().lock()
+ if (configParaDao.replace(record)) {
+ configParaRecord = record
+ return true
+ }
+ } finally {
+ configParaDao.getLock().unlock()
+ }
+ return false
+ }
+
+ fun getConfigPara(): ConfigParaRecord? {
+ if (configParaRecord == null) {
+ try {
+ configParaDao.getLock().lock()
+ configParaRecord = configParaDao.get()
+ } finally {
+ configParaDao.getLock().unlock()
+ }
+ }
+ return configParaRecord
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/SDContext.kt b/app/src/main/java/com/supwisdom/db/SDContext.kt
new file mode 100644
index 0000000..df8b2b3
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/db/SDContext.kt
@@ -0,0 +1,56 @@
+package com.supwisdom.db
+
+import android.content.Context
+import android.content.ContextWrapper
+import android.database.DatabaseErrorHandler
+import android.database.sqlite.SQLiteDatabase
+import java.io.File
+import java.io.IOException
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class SDContext constructor(context: Context) : ContextWrapper(context) {
+ override fun getDatabasePath(name: String): File? {
+ if (android.os.Environment.MEDIA_MOUNTED == android.os.Environment.getExternalStorageState()) {
+ //获取sd卡路径
+ var dbDir = android.os.Environment.getExternalStorageDirectory().absolutePath
+ dbDir += "/supwisdom"//数据库所在目录
+ val dbPath = "$dbDir/$name"//数据库路径
+ //判断目录是否存在,不存在则创建该目录
+ val dirFile = File(dbDir)
+ if (!dirFile.exists()) {
+ dirFile.mkdirs()
+ }
+ val dbFile = File(dbPath)
+ if (!dbFile.exists()) {
+ try {
+ if (dbFile.createNewFile()) {
+ return dbFile
+ }
+ } catch (e: IOException) {
+ // TODO Auto-generated catch block
+ e.printStackTrace()
+ }
+ } else {
+ return dbFile
+ }
+ }
+ return null
+ }
+
+ override fun openOrCreateDatabase(
+ name: String, mode: Int,
+ factory: SQLiteDatabase.CursorFactory?
+ ): SQLiteDatabase {
+ return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null)
+ }
+
+ override fun openOrCreateDatabase(
+ name: String, mode: Int,
+ factory: SQLiteDatabase.CursorFactory?, errorHandler: DatabaseErrorHandler?
+ ): SQLiteDatabase {
+ return SQLiteDatabase.openOrCreateDatabase(getDatabasePath(name), null)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/entity/ConfigParaRecord.kt b/app/src/main/java/com/supwisdom/entity/ConfigParaRecord.kt
new file mode 100644
index 0000000..2a7c948
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/entity/ConfigParaRecord.kt
@@ -0,0 +1,19 @@
+package com.supwisdom.entity
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class ConfigParaRecord {
+ var mode: Int = 0//
+ var deviceid: Int = 0 // 设备ID
+ var merchaccno: Int = 0//商户号
+ var shopname: String? = null//商户名
+ var devphyid: String? = null
+ var epayIP: String? = null
+ var epayPort: Int = 0
+ var epayUri: String? = null
+ var shopPwd: String? = null //商户密码
+
+ var initOK: Boolean = false //是否初始化 true--未初始化,false--已初始化
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/okhttp/ICallBackok.kt b/app/src/main/java/com/supwisdom/okhttp/ICallBackok.kt
new file mode 100644
index 0000000..0620933
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/okhttp/ICallBackok.kt
@@ -0,0 +1,9 @@
+package com.supwisdom.okhttp
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+interface ICallBackok<T> {
+ fun callback(t: T)
+}
diff --git a/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt b/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
new file mode 100644
index 0000000..f91b0de
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
@@ -0,0 +1,257 @@
+package com.supwisdom.okhttp
+
+import okhttp3.*
+import java.io.IOException
+import java.io.UnsupportedEncodingException
+import java.security.SecureRandom
+import java.security.cert.CertificateException
+import java.security.cert.X509Certificate
+import java.util.concurrent.TimeUnit
+import javax.net.ssl.*
+import com.supwisdom.okhttp.ICallBackok as ICallBack1
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+@Suppress("DEPRECATION")
+class NetworkHandler private constructor() {
+ private var instance: NetworkHandler? = null
+ private var client: OkHttpClient? = null
+ private var clientLong: OkHttpClient
+ private val JSON = MediaType.parse("application/json; charset=utf-8")
+ private val FORM_ENCODE = MediaType.parse("application/x-www-form-urlencoded;charset=utf-8")
+ private var commTime = 2
+
+ init {
+ client = OkHttpClient()
+ .newBuilder()
+ .retryOnConnectionFailure(false)
+ .readTimeout(commTime.toLong(), TimeUnit.SECONDS)
+ .writeTimeout(1, TimeUnit.SECONDS)
+ .connectTimeout(commTime.toLong(), TimeUnit.SECONDS)
+ .hostnameVerifier(TrustAllHostnameVerifier())
+ .sslSocketFactory(createSSLSocketFactory()!!)
+ .build()
+ clientLong = OkHttpClient()
+ .newBuilder()
+ .retryOnConnectionFailure(false)
+ .readTimeout(35, TimeUnit.SECONDS)
+ .writeTimeout(1, TimeUnit.SECONDS)
+ .connectTimeout(3, TimeUnit.SECONDS)
+ .hostnameVerifier(TrustAllHostnameVerifier())
+ .sslSocketFactory(createSSLSocketFactory())
+ .build()
+
+ }
+
+ fun setCommTime(communicateTime: Int) {
+ if (communicateTime != 0 && commTime != communicateTime) {
+ this.commTime = communicateTime
+ client = OkHttpClient()
+ .newBuilder()
+ .retryOnConnectionFailure(false)
+ .readTimeout(commTime.toLong(), TimeUnit.SECONDS)
+ .writeTimeout(1, TimeUnit.SECONDS)
+ .connectTimeout(commTime.toLong(), TimeUnit.SECONDS)
+ .hostnameVerifier(TrustAllHostnameVerifier())
+ .sslSocketFactory(createSSLSocketFactory())
+ .build()
+ }
+ }
+
+ private class TrustAllCerts : X509TrustManager {
+ @Throws(CertificateException::class)
+ override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String) {
+ }
+
+ @Throws(CertificateException::class)
+ override fun checkServerTrusted(chain: Array<X509Certificate>, authType: String) {
+ }
+
+ override fun getAcceptedIssuers(): Array<X509Certificate> {
+ return arrayOf<X509Certificate>()
+ }
+ }
+
+ private class TrustAllHostnameVerifier : HostnameVerifier {
+ override fun verify(hostname: String, session: SSLSession): Boolean {
+ return true
+ }
+ }
+
+ private fun createSSLSocketFactory(): SSLSocketFactory? {
+ var ssfFactory: SSLSocketFactory? = null
+ try {
+ val sc = SSLContext.getInstance("TLS")
+ sc.init(null, arrayOf<TrustManager>(TrustAllCerts()), SecureRandom())
+ ssfFactory = sc.socketFactory
+ } catch (e: Exception) {
+ }
+
+ return ssfFactory
+ }
+
+ fun getInstance(): NetworkHandler {
+ if (instance == null) {
+ synchronized(NetworkHandler::class.java) {
+ if (instance == null) {
+ instance = NetworkHandler()
+ }
+ }
+ }
+ return instance!!
+ }
+
+ fun get(url: String, params: WebParams): TransResp? {
+ val request = Request.Builder()
+ .url(geturl(url, params))
+ .addHeader("Accept", "application/json; q=0.5")
+ .addHeader("Connection", "close")
+ .build()
+ return getTransResp(request)
+ }
+
+ fun get(url: String, params: WebParams, callback: com.supwisdom.okhttp.ICallBackok<Any?>) {
+ val request = Request.Builder()
+ .url(geturl(url, params))
+ .addHeader("Accept", "application/json; q=0.5")
+ .addHeader("Connection", "close")
+ .build()
+ client!!.newCall(request).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)
+ .addHeader("Accept", "application/json; q=0.5")
+ .addHeader("Connection", "close")
+ .post(builder.build())
+ .build()
+ return getTransResp(request)
+ }
+
+ 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)
+ .addHeader("Accept", "application/json; q=0.5")
+ .addHeader("Connection", "close")
+ .post(builder.build())
+ .build()
+ return getLongTransResp(request)
+ }
+
+ fun post(url: String, json: String): TransResp? {
+ val body = RequestBody.create(JSON, json)
+ val request = Request.Builder()
+ .url(url)
+ .addHeader("Accept", "application/json; q=0.5")
+ .addHeader("Connection", "close")
+ .post(body)
+ .build()
+ return getTransResp(request)
+ }
+
+ fun post(url: String, json: String, callback: com.supwisdom.okhttp.ICallBackok<Any?>) {
+ val body = RequestBody.create(JSON, json)
+ val request = Request.Builder()
+ .url(url)
+ .addHeader("Accept", "application/json; q=0.5")
+ .addHeader("Connection", "close")
+ .post(body)
+ .build()
+ client!!.newCall(request).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/okhttp/TransResp.kt b/app/src/main/java/com/supwisdom/okhttp/TransResp.kt
new file mode 100644
index 0000000..1ff26d9
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/okhttp/TransResp.kt
@@ -0,0 +1,18 @@
+package com.supwisdom.okhttp
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class TransResp constructor(retcode: Int, retmsg: String) {
+ /**
+ * HTTP返回码 retcode 200 success
+ */
+ /**
+ * retmsg 返回消息,如果是200 则为空,非200则为返回错误信息
+ */
+ /**
+ * 返回json信息
+ */
+ var retjson: String? = null
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/okhttp/WebAPISession.kt b/app/src/main/java/com/supwisdom/okhttp/WebAPISession.kt
new file mode 100644
index 0000000..b695ed2
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/okhttp/WebAPISession.kt
@@ -0,0 +1,40 @@
+package com.supwisdom.okhttp
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class WebAPISession : Cloneable {
+ /**
+ * appid,appsecret暂时写死在代码
+ */
+// private val appId = PublicDef.APP_ID
+// private val appSecret = PublicDef.APP_SECRET
+ private var termId = ""
+ private var epayurl = ""
+ private var sessionKey: String? = null
+
+ fun getEpayurl(): String {
+ return epayurl
+ }
+
+ fun setEpayurl(epayurl: String) {
+ this.epayurl = epayurl
+ }
+
+ @Throws(CloneNotSupportedException::class)
+ override fun clone(): Any {
+ val another = WebAPISession()
+ another.termId = this.termId
+ another.sessionKey = this.sessionKey
+ return another
+ }
+
+ fun getSessionKey(): String? {
+ return sessionKey
+ }
+
+ fun setSessionKey(sessionKey: String) {
+ this.sessionKey = sessionKey
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/okhttp/WebParams.kt b/app/src/main/java/com/supwisdom/okhttp/WebParams.kt
new file mode 100644
index 0000000..04ac771
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/okhttp/WebParams.kt
@@ -0,0 +1,90 @@
+package com.supwisdom.okhttp
+
+import java.io.*
+import java.net.URLEncoder
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class WebParams {
+ private val mParameters = hashMapOf<String, Any>()
+
+ fun setParameter(name: String, value: String): WebParams {
+ mParameters[name] = value
+ return this
+ }
+
+ fun setParameter(name: String, value: Int): WebParams {
+ mParameters[name] = value
+ return this
+ }
+
+ fun setParameter(name: String, value: Float): WebParams {
+ mParameters[name] = value
+ return this
+ }
+
+ fun getParameterString(name: String): String {
+ val ret = mParameters[name]
+ if (String::class.java.isInstance(ret)) {
+ return ret as String
+ } else if (Int::class.java.isInstance(ret)) {
+ return ret.toString()
+ } else if (Double::class.java.isInstance(ret)) {
+ return ret.toString()
+ }
+ return ""
+ }
+
+ fun getParameterInt(name: String): Int {
+ val ret = mParameters[name]
+ return if (Int::class.java.isInstance(ret)) {
+ ret as Int
+ } else 0
+ }
+
+ fun getParameterFloat(name: String): Float {
+ val ret = mParameters[name]
+ return if (Float::class.java.isInstance(ret)) {
+ ret as Float
+ } else 0f
+ }
+
+ fun removeParameter(name: String) {
+ if (mParameters.containsKey(name)) {
+ mParameters.remove(name)
+ }
+ }
+
+ @Throws(UnsupportedEncodingException::class)
+ fun encodeURL(): String {
+ val result = StringBuilder()
+ for (name in mParameters.keys) {
+ val value = mParameters[name]
+ result.append(URLEncoder.encode(name, "utf-8"))
+ .append("=")
+ .append(URLEncoder.encode(value.toString(), "utf-8"))
+ .append("&")
+ }
+ return result.toString()
+ }
+
+ @Throws(IOException::class)
+ fun encodeURL(output: OutputStream): Int {
+ val byteStream = DataOutputStream(output)
+ val writer = OutputStreamWriter(byteStream, "utf-8")
+ for (name in mParameters.keys) {
+ val value = mParameters[name]
+ writer.write(URLEncoder.encode(name, "utf-8"))
+ writer.write("=")
+ writer.write(URLEncoder.encode(value.toString(), "utf-8"))
+ writer.write("&")
+ }
+ return byteStream.size()
+ }
+
+ fun allParameterNames(): Set<String> {
+ return mParameters.keys
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/service/WebsocketProcess.kt b/app/src/main/java/com/supwisdom/service/WebsocketProcess.kt
index fcad538..63a23ba 100644
--- a/app/src/main/java/com/supwisdom/service/WebsocketProcess.kt
+++ b/app/src/main/java/com/supwisdom/service/WebsocketProcess.kt
@@ -8,6 +8,10 @@
import com.koushikdutta.async.http.AsyncHttpClient
import com.koushikdutta.async.http.WebSocket
import com.supwisdom.activities.SPApplication
+import com.supwisdom.db.Pos
+import com.supwisdom.utils.CommonUtil
+import com.supwisdom.utils.DateUtil
+import com.supwisdom.utils.LogUtil
import com.supwisdom.utils.PublicDef
import java.util.*
@@ -18,7 +22,7 @@
class WebsocketProcess {
private val TAG = "WebsocketProcess"
private var handler: Handler? = null
- private var pos: Pos
+ private var pos: Pos = SPApplication.getInstance().getPos()
private var websocketService: WebsocketService
private var isExit: Boolean = false
private var qrcodeThread: Thread? = null
@@ -27,14 +31,13 @@
@Volatile
private var connectDoing: Boolean = false
private var webSocket: Future<WebSocket>? = null
- private var reLinkCnt: Int = 0
+ private var reLinkCnt: Long = 0
private var clientID = ""
@Volatile
private var hasRecv: Boolean = false
private var pingFailCnt: Int = 0
- fun WebsocketProcess(): ??? {
- pos = SPApplication.getInstance().getPos()
+ init {
websocketService = WebsocketService()
}
@@ -99,14 +102,14 @@
}
}
- private fun getServerUrl(): String {
- val sb = StringBuilder()
- val url = YktSession.getInstance().getWebAPISession().getEpayurl()
- val offset = url.lastIndexOf("/")
- sb.append(url.substring(0, offset))
- .append("/websocket/device_service")
- return sb.toString()
- }
+// private fun getServerUrl(): String {
+// val sb = StringBuilder()
+// val url = YktSession.getInstance().getWebAPISession().getEpayurl()
+// val offset = url.lastIndexOf("/")
+// sb.append(url.substring(0, offset))
+// .append("/websocket/device_service")
+// return sb.toString()
+// }
private fun newWebsocket(url: String): Future<WebSocket> {
return AsyncHttpClient.getDefaultInstance().websocket(url, null,
@@ -121,76 +124,76 @@
reLinkCnt = 0
isConnected = true
connectDoing = false
- val loginStr = getLoginString()
- webSocket.send(loginStr)
+// val loginStr = getLoginString()
+// webSocket.send(loginStr)
webSocket.stringCallback = WebSocket.StringCallback { s ->
- if (!CommonUtil.isEmpty(s)) {
- try {
- val retBean = GsonUtil.GsonToBean(s, WebsocketRetBean::class.java)
- if (retBean.getRetcode() === PublicDef.SUCCESS) {
- if ("login" == retBean.getAction()) {
- val retData = WebsocketLoginRetData()
- val data = retBean.getData() as JSONObject
- retData.setHost_time(data["host_time"] as String?)
- } else if ("qrpay_in_process" == retBean.getAction()) {
- val retData = WebsockConsumeProcessRetBean()
- val data = retBean.getData() as JSONObject
- retData.setCustname(data["custname"] as String?)
- retData.setStuempno(data["stuempno"] as String?)
- retData.setClientid(data["clientid"] as String?)
- retData.setDevphyid(data["devphyid"] as String?)
- retData.setTransdatetime(data["transdatetime"] as String?)
-
- sendMsg(PublicDef.MSG_CONSUME_PAYING, "扫码付款中...")
- webSocket.send(
- getQRProcessResp(
- retBean.getAction(),
- retBean.getRequestid(),
- retData
- )
- )
- } else if ("qrpay_finish" == retBean.getAction()) {
- val retData = WebsockConsumeFinishRetBean()
- val data = retBean.getData() as JSONObject
- retData.setCustname(data["custname"] as String?)
- retData.setStuempno(data["stuempno"] as String?)
- retData.setDevphyid(data["devphyid"] as String?)
- retData.setRefno(data["refno"] as String?)
- retData.setStatus(data["status"] as String?)
- retData.setAmount(data["amount"] as Int?)
- retData.setAvailbal(data["availbal"] as Int?)
- retData.setTransdatetime(data["transdatetime"] as String?)
-
- if ("succ" == retData.getStatus()) {
- val info = UserCardInfo(PublicDef.SUCCESS, "付款成功")
- info.setDatetime(retData.getTransdatetime())
- info.setUsername(retData.getCustname())
- info.setStuempno(retData.getStuempno())
- info.setPayamt(retData.getAmount())
- info.setAmount(retData.getAmount())
- info.setBalance(retData.getAvailbal())
- info.setShowtime(pos.getSysPara().getConsumeShowtime())
- info.setFlag(PublicDef.TRANSFLAG_NORMAL_CONSUME or PublicDef.TRANSFLAG_WRITE_CARD_SUCCESS)
- info.setConsumeType(PublicDef.CONSUME_TYPE_BAR)
- SPApplication.getInstance().setLastInfo(info)
- sendMsg(PublicDef.MSG_CONSUME_QR_SUC, info)
-
- saveTransdtlOnline(info)
- }
- webSocket.send(
- getQRSuccessResp(
- retBean.getAction(),
- retBean.getRequestid(),
- retData
- )
- )
- }
- }
- } catch (e: Exception) {
- e.printStackTrace()
- }
-
- }
+// if (!CommonUtil.isEmpty(s)) {
+// try {
+// val retBean = GsonUtil.GsonToBean(s, WebsocketRetBean::class.java)
+// if (retBean.getRetcode() === PublicDef.SUCCESS) {
+// if ("login" == retBean.getAction()) {
+// val retData = WebsocketLoginRetData()
+// val data = retBean.getData() as JSONObject
+// retData.setHost_time(data["host_time"] as String?)
+// } else if ("qrpay_in_process" == retBean.getAction()) {
+// val retData = WebsockConsumeProcessRetBean()
+// val data = retBean.getData() as JSONObject
+// retData.setCustname(data["custname"] as String?)
+// retData.setStuempno(data["stuempno"] as String?)
+// retData.setClientid(data["clientid"] as String?)
+// retData.setDevphyid(data["devphyid"] as String?)
+// retData.setTransdatetime(data["transdatetime"] as String?)
+//
+// sendMsg(PublicDef.MSG_CONSUME_PAYING, "扫码付款中...")
+// webSocket.send(
+// getQRProcessResp(
+// retBean.getAction(),
+// retBean.getRequestid(),
+// retData
+// )
+// )
+// } else if ("qrpay_finish" == retBean.getAction()) {
+// val retData = WebsockConsumeFinishRetBean()
+// val data = retBean.getData() as JSONObject
+// retData.setCustname(data["custname"] as String?)
+// retData.setStuempno(data["stuempno"] as String?)
+// retData.setDevphyid(data["devphyid"] as String?)
+// retData.setRefno(data["refno"] as String?)
+// retData.setStatus(data["status"] as String?)
+// retData.setAmount(data["amount"] as Int?)
+// retData.setAvailbal(data["availbal"] as Int?)
+// retData.setTransdatetime(data["transdatetime"] as String?)
+//
+// if ("succ" == retData.getStatus()) {
+// val info = UserCardInfo(PublicDef.SUCCESS, "付款成功")
+// info.setDatetime(retData.getTransdatetime())
+// info.setUsername(retData.getCustname())
+// info.setStuempno(retData.getStuempno())
+// info.setPayamt(retData.getAmount())
+// info.setAmount(retData.getAmount())
+// info.setBalance(retData.getAvailbal())
+// info.setShowtime(pos.getSysPara().getConsumeShowtime())
+// info.setFlag(PublicDef.TRANSFLAG_NORMAL_CONSUME or PublicDef.TRANSFLAG_WRITE_CARD_SUCCESS)
+// info.setConsumeType(PublicDef.CONSUME_TYPE_BAR)
+// SPApplication.getInstance().setLastInfo(info)
+// sendMsg(PublicDef.MSG_CONSUME_QR_SUC, info)
+//
+// saveTransdtlOnline(info)
+// }
+// webSocket.send(
+// getQRSuccessResp(
+// retBean.getAction(),
+// retBean.getRequestid(),
+// retData
+// )
+// )
+// }
+// }
+// } catch (e: Exception) {
+// e.printStackTrace()
+// }
+//
+// }
}
webSocket.closedCallback = CompletedCallback {
//主动断网,关服务
@@ -215,18 +218,18 @@
CommonUtil.doSleep(reLinkCnt * 1000)
}
- private fun buildServerUrl(clientId: String): String {
- val nowtime = CommonUtil.getNowDateTimeNoFormat()
- val signdata = StringBuilder()
- signdata.append(PublicDef.APP_ID).append(clientId).append(nowtime)
- val sign = Encrypt.HMACSHA1(signdata.toString(), PublicDef.APP_SECRET)
-
- val uri = StringBuilder()
- uri.append("?local_time=").append(CommonUtil.getNowDateTimeNoFormat()).append("&appid=")
- .append(PublicDef.APP_ID)
- .append("&clientid=").append(clientId).append("&sign=").append(sign)
- return getServerUrl() + uri.toString()
- }
+// private fun buildServerUrl(clientId: String): String {
+// val nowtime = CommonUtil.getNowDateTimeNoFormat()
+// val signdata = StringBuilder()
+// signdata.append(PublicDef.APP_ID).append(clientId).append(nowtime)
+// val sign = Encrypt.HMACSHA1(signdata.toString(), PublicDef.APP_SECRET)
+//
+// val uri = StringBuilder()
+// uri.append("?local_time=").append(DateUtil.getNowDateTimeNoFormat()).append("&appid=")
+// .append(PublicDef.APP_ID)
+// .append("&clientid=").append(clientId).append("&sign=").append(sign)
+// return getServerUrl() + uri.toString()
+// }
private fun tryCloseWebsocket(sc: Future<WebSocket>?) {
if (sc != null) {
@@ -244,73 +247,73 @@
private fun createNewWebsocket() {
doSleep()
tryCloseWebsocket(webSocket)
- webSocket = newWebsocket(buildServerUrl(clientID))
+// webSocket = newWebsocket(buildServerUrl(clientID))
}
- private fun getQRProcessResp(action: String, requestid: String, retData: WebsockConsumeProcessRetBean): String {
- val data = WebsockConsumeProcessRespBean.Content()
- data.setDevphyid(retData.getDevphyid())
- val resp = WebsockConsumeProcessRespBean()
- resp.setRetcode(PublicDef.SUCCESS)
- resp.setRetmsg("推流成功")
- resp.setAction(action)
- resp.setRequestid(requestid)
- resp.setData(data)
- return GsonUtil.GsonString(resp)
- }
-
- private fun getQRSuccessResp(action: String, requestid: String, retData: WebsockConsumeFinishRetBean): String {
- val data = WebsockConsumeFinishRespBean.Content()
- data.setDevphyid(retData.getDevphyid())
- val resp = WebsockConsumeFinishRespBean()
- resp.setRetcode(PublicDef.SUCCESS)
- resp.setRetmsg("推流成功")
- resp.setAction(action)
- resp.setRequestid(requestid)
- resp.setData(data)
- return GsonUtil.GsonString(resp)
- }
-
- fun getLoginString(): String {
- val data = WebsocketLoginDataReqBean()
- data.setClientid(clientID)
- data.setLocal_time(CommonUtil.getNowDateTimeNoFormat())
-
- val req = WebsocketLoginReqBean()
- req.setAction("login")
- req.setNeedresp("true")
- req.setRequestid(getRandom())
- req.setData(data)
- return GsonUtil.GsonString(req)
- }
-
- private fun getRandom(): String {
- val rand = Random()
- rand.setSeed(System.currentTimeMillis())
- return String.format("%010d", rand.nextInt(999999999))
- }
-
- private fun saveTransdtlOnline(info: UserCardInfo): Boolean {
- val record = TransdtlOnlineRecord()
- var seqno = pos.getTransdtlOnlineSeqno()
- if (seqno == 0) {
- val ctlRecord = pos.getControlPara(PublicDef.CONTROL_TRANSDTLONL_SEQNO)
- if (ctlRecord != null) {
- seqno = Integer.valueOf(ctlRecord!!.getValue())
- }
- }
- record.setDevseqno(seqno + 1)
- record.setCustname(info.getUsername())
- record.setStuempno(info.getStuempno())
- record.setTransdate(info.getDatetime().substring(0, 8))
- record.setTranstime(info.getDatetime().substring(8))
- record.setDevphyid(pos.getConfigPara().getDevphyid())
- record.setPayamt(info.getAmount())
- record.setConsumetype(PublicDef.CONSUME_TYPE_BAR)
- record.setFlag(PublicDef.TRANSFLAG_NORMAL_CONSUME or PublicDef.TRANSFLAG_WRITE_CARD_SUCCESS)
- record.setUpflag(1)
- return pos.saveTransdtlOnline(record)
- }
+// private fun getQRProcessResp(action: String, requestid: String, retData: WebsockConsumeProcessRetBean): String {
+// val data = WebsockConsumeProcessRespBean.Content()
+// data.setDevphyid(retData.getDevphyid())
+// val resp = WebsockConsumeProcessRespBean()
+// resp.setRetcode(PublicDef.SUCCESS)
+// resp.setRetmsg("推流成功")
+// resp.setAction(action)
+// resp.setRequestid(requestid)
+// resp.setData(data)
+// return GsonUtil.GsonString(resp)
+// }
+//
+// private fun getQRSuccessResp(action: String, requestid: String, retData: WebsockConsumeFinishRetBean): String {
+// val data = WebsockConsumeFinishRespBean.Content()
+// data.setDevphyid(retData.getDevphyid())
+// val resp = WebsockConsumeFinishRespBean()
+// resp.setRetcode(PublicDef.SUCCESS)
+// resp.setRetmsg("推流成功")
+// resp.setAction(action)
+// resp.setRequestid(requestid)
+// resp.setData(data)
+// return GsonUtil.GsonString(resp)
+// }
+//
+// fun getLoginString(): String {
+// val data = WebsocketLoginDataReqBean()
+// data.setClientid(clientID)
+// data.setLocal_time(CommonUtil.getNowDateTimeNoFormat())
+//
+// val req = WebsocketLoginReqBean()
+// req.setAction("login")
+// req.setNeedresp("true")
+// req.setRequestid(getRandom())
+// req.setData(data)
+// return GsonUtil.GsonString(req)
+// }
+//
+// private fun getRandom(): String {
+// val rand = Random()
+// rand.setSeed(System.currentTimeMillis())
+// return String.format("%010d", rand.nextInt(999999999))
+// }
+//
+// private fun saveTransdtlOnline(info: UserCardInfo): Boolean {
+// val record = TransdtlOnlineRecord()
+// var seqno = pos.getTransdtlOnlineSeqno()
+// if (seqno == 0) {
+// val ctlRecord = pos.getControlPara(PublicDef.CONTROL_TRANSDTLONL_SEQNO)
+// if (ctlRecord != null) {
+// seqno = Integer.valueOf(ctlRecord!!.getValue())
+// }
+// }
+// record.setDevseqno(seqno + 1)
+// record.setCustname(info.getUsername())
+// record.setStuempno(info.getStuempno())
+// record.setTransdate(info.getDatetime().substring(0, 8))
+// record.setTranstime(info.getDatetime().substring(8))
+// record.setDevphyid(pos.getConfigPara().getDevphyid())
+// record.setPayamt(info.getAmount())
+// record.setConsumetype(PublicDef.CONSUME_TYPE_BAR)
+// record.setFlag(PublicDef.TRANSFLAG_NORMAL_CONSUME or PublicDef.TRANSFLAG_WRITE_CARD_SUCCESS)
+// record.setUpflag(1)
+// return pos.saveTransdtlOnline(record)
+// }
private fun sendMsg(code: Int, o: Any) {
if (handler == null) {
diff --git a/app/src/main/java/com/supwisdom/utils/CommonUtil.kt b/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
index e2b15c9..b0e3aeb 100644
--- a/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
@@ -14,6 +14,8 @@
import android.provider.Settings
import java.io.File
import java.io.FileOutputStream
+import java.io.PrintWriter
+import java.io.StringWriter
/**
* @author zzq
@@ -75,6 +77,16 @@
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
*
diff --git a/app/src/main/java/com/supwisdom/utils/LogUtil.kt b/app/src/main/java/com/supwisdom/utils/LogUtil.kt
new file mode 100644
index 0000000..75b8079
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/utils/LogUtil.kt
@@ -0,0 +1,39 @@
+package com.supwisdom.utils
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+object LogUtil {
+ private val DEBUG = 3
+ private val INFO = 2
+ private val ERROR = 1
+ private var curlevel = DEBUG
+
+ fun setLevel(level: Int) {
+ curlevel = level
+ }
+
+ fun d(tag: String, msg: String) {
+ if (curlevel >= DEBUG) {
+ writeLog(tag, msg)
+ }
+ }
+
+ fun i(tag: String, msg: String) {
+ if (curlevel >= INFO) {
+ writeLog(tag, msg)
+ }
+ }
+
+ fun e(tag: String, msg: String) {
+ if (curlevel >= ERROR) {
+ writeLog(tag, msg)
+ }
+ }
+
+ private fun writeLog(tag: String, msg: String) {
+ val time = DateUtil.getNowDate() + "--"
+ FileUtil.writeLogFile("$tag:$time--$msg")
+ }
+}
\ No newline at end of file