init
diff --git a/app/src/main/java/com/supwisdom/activities/BaseActivity.kt b/app/src/main/java/com/supwisdom/activities/BaseActivity.kt
index 7f3f699..6183f9a 100644
--- a/app/src/main/java/com/supwisdom/activities/BaseActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/BaseActivity.kt
@@ -9,7 +9,7 @@
** create by zzq on 2019/7/23
** @desc
**/
-class BaseActivity : Activity() {
+open class BaseActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
diff --git a/app/src/main/java/com/supwisdom/activities/SPApplication.kt b/app/src/main/java/com/supwisdom/activities/SPApplication.kt
index 27cfbbc..16adb48 100644
--- a/app/src/main/java/com/supwisdom/activities/SPApplication.kt
+++ b/app/src/main/java/com/supwisdom/activities/SPApplication.kt
@@ -4,6 +4,7 @@
import android.content.Intent
import android.support.multidex.MultiDex
import android.support.multidex.MultiDexApplication
+import com.supwisdom.db.Pos
import com.supwisdom.service.BackgroundTaskService
import com.supwisdom.utils.CommonUtil
import com.supwisdom.utils.PublicDef
@@ -13,6 +14,8 @@
** @desc
**/
class SPApplication : MultiDexApplication() {
+ private var mPos: Pos? = null
+
companion object {
@Volatile
private var mInstance: SPApplication? = null
@@ -30,7 +33,7 @@
}
}
}
- return mPos
+ return mPos!!
}
override fun onCreate() {
diff --git a/app/src/main/java/com/supwisdom/activities/YktSession.kt b/app/src/main/java/com/supwisdom/activities/YktSession.kt
new file mode 100644
index 0000000..5975932
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/YktSession.kt
@@ -0,0 +1,90 @@
+package com.supwisdom.activities
+
+import com.supwisdom.okhttp.NetworkHandler
+import com.supwisdom.okhttp.TransResp
+import com.supwisdom.okhttp.WebAPISession
+import com.supwisdom.okhttp.WebParams
+import com.supwisdom.utils.DateUtil
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class YktSession private constructor() {
+ companion object {
+ private var yktSession: YktSession? = null
+ private var mSession: WebAPISession? = null
+ /**
+ * Create YktSession instance
+ *
+ * @return YktSession object
+ */
+ @Synchronized
+ fun getInstance(): YktSession {
+ if (null == yktSession) {
+ synchronized(YktSession::class.java) {
+ if (null == yktSession) {
+ yktSession = YktSession()
+ }
+ }
+ }
+ return yktSession!!
+ }
+ }
+
+ fun setSessionKey(sessionKey: String) {
+ mSession!!.setSessionKey(sessionKey)
+ }
+
+
+ // 设置通信参数
+ fun setWebAPISession(epayIP: String, epayPort: Int, uri: String, termid: String, commTime: Int) {
+ val sb = StringBuilder()
+ if (epayIP.startsWith("http")) {
+ sb.append(epayIP)
+ } else {
+ sb.append("http://").append(epayIP)
+ }
+ sb.append(":").append(epayPort).append("/").append(uri).append("/services")
+
+ mSession!!.setEpayurl(sb.toString())
+ NetworkHandler.getInstance().setCommTime(commTime)
+ }
+
+ fun getWebAPISession(): WebAPISession {
+ return mSession!!
+ }
+
+ // post
+ fun sendYktRequestPost(uri: String, signdata: String, params: WebParams): TransResp? {
+ val timestamp = DateUtil.getNowDateTimeNoFormat()
+ val temp = signdata.replace("null".toRegex(), "")
+ val mysign = calcSignForCardPay(temp, timestamp)
+ params.setParameter("sign", mysign)
+// .setParameter("sign_method", PublicDef.signMethod)
+// .setParameter("term_id", mSession.getTermId())
+// .setParameter("app_id", mSession.getAppId())
+ .setParameter("timestamp", timestamp)
+ val url = mSession!!.getEpayurl() + uri
+ return NetworkHandler.getInstance().post(url, params)
+ }
+
+ fun sendYktRequestLongPost(uri: String, signdata: String, params: WebParams): TransResp? {
+ val timestamp = DateUtil.getNowDateTimeNoFormat()
+ val temp = signdata.replace("null".toRegex(), "")
+ val mysign = calcSignForCardPay(temp, timestamp)
+ params.setParameter("sign", mysign)
+// .setParameter("sign_method", PublicDef.signMethod)
+// .setParameter("term_id", mSession.getTermId())
+// .setParameter("app_id", mSession.getAppId())
+ .setParameter("timestamp", timestamp)
+ val url = mSession!!.getEpayurl() + uri
+ return NetworkHandler.getInstance().longPost(url, params)
+ }
+
+ private fun calcSignForCardPay(extdata: String, nTimestamp: String): String {
+ val signData = extdata + nTimestamp + mSession!!.getSessionKey()
+// val mySign = Encrypt.HMACSHA1(signData, mSession.getAppSecret())
+ return ""//mySign.toLowerCase()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/activities/upgrade/UpgradeAcvitity.kt b/app/src/main/java/com/supwisdom/activities/upgrade/UpgradeAcvitity.kt
new file mode 100644
index 0000000..025873d
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/activities/upgrade/UpgradeAcvitity.kt
@@ -0,0 +1,22 @@
+package com.supwisdom.activities.upgrade
+
+import android.os.Bundle
+import com.supwisdom.activities.BaseActivity
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class UpgradeAcvitity : BaseActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ }
+
+ override fun onResume() {
+ super.onResume()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
index 2280950..d4c1de4 100644
--- a/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
+++ b/app/src/main/java/com/supwisdom/db/BeanPropEnum.kt
@@ -7,25 +7,14 @@
object BeanPropEnum {
enum class Syspara {
id,
- limitSwitch,
returnFlag,
heatBeat,
offlineFlag,
maxOfflineDays,
- maxPaycnt,
- creditLowLimit,
- minCardbal,
- maxCardbal,
- daySumLimitamt,
- onceLimitamt,
- password,
- fixpayConsumeGap,
- controlFlag,
+ mngpasswd,
+ fixpayGap,
consumeShowtime,
consumeFailShowtime,
- qrOfflineEnable,
- qrcodeUrl,
- socketSwitch,
commTime
}
@@ -48,20 +37,9 @@
id,
paraverno,
paragroupid,
- feeverno,
- feegroupid,
cardverno,
- codeverno,
- schoolno,
- deductlimitamt,
- sessionKey,
- mf1key,
- mf1factor,
- rootkey,
- iv,
- devkey,
- appId,
- appSecret
+ jwt,
+ token
}
enum class ControlPara {
@@ -69,4 +47,38 @@
paraval
}
+ enum class TransdtlOnline {
+ devphyid,
+ transdate,
+ transtime,
+ devseqno,
+ cardno,
+ cardphyid,
+ qrcode,
+ transtype,
+ payamt,
+ extraamt,
+ billno,
+ reversalflag,
+ reversalbillno,
+ status,
+ upflag
+ }
+
+ enum class TransdtlOffline {
+ devphyid,
+ transdate,
+ transtime,
+ devseqno,
+ cardno,
+ cardphyid,
+ payamt,
+ extraamt,
+ reversalflag,
+ reversalseqno,
+ reversaltransdate,
+ reversaltranstime,
+ status,
+ upflag
+ }
}
\ 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 8dcc3dc..ff24314 100644
--- a/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
+++ b/app/src/main/java/com/supwisdom/db/DBParaHelper.kt
@@ -18,6 +18,18 @@
val TABLE_NAME_SYSPARA = "tb_syspara"
val TABLE_NAME_DYNAMICPARA = "tb_dynamicpara"
val TABLE_NAME_CONTROLPARA = "tb_controlpara"
+
+ 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!!
+ }
}
@@ -34,61 +46,25 @@
+ 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) )")
+ + BeanPropEnum.DynamicPara.cardverno + " char(14),"
+ + BeanPropEnum.DynamicPara.jwt + " varchar(254),"
+ + 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.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.mngpasswd + " char(6), "
+ + BeanPropEnum.Syspara.fixpayGap + " 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) )")
+ + BeanPropEnum.Syspara.commTime + " integer )")
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
}
diff --git a/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt b/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
index da9587b..04f7f6e 100644
--- a/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
+++ b/app/src/main/java/com/supwisdom/db/DBTransdtlHelper.kt
@@ -14,10 +14,11 @@
companion object {
private val DB_NAME = "db_transdtl"
private val VERSION = 1
- @Volatile
private var instance: DBTransdtlHelper? = null
val TABLE_NAME_CONFIGPARA = "tb_configpara"
+ val TABLE_NAME_DTL_ONLINE = "tb_dtl_online"
+ val TABLE_NAME_DTL_OFFLINE = "tb_dtl_offline"
fun getInstance(context: Context): DBTransdtlHelper {
if (null == instance) {
@@ -49,6 +50,39 @@
+ BeanPropEnum.ConfigPara.managePwd + " char(6),"
+ BeanPropEnum.ConfigPara.initOK + " integer ) ")
private val DROP_TABLE_NAME_CONFIGPARA = "DROP TABLE IF EXISTS $TABLE_NAME_CONFIGPARA"
+ 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.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 + " integer,"
+ + 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 {
@@ -57,6 +91,8 @@
override fun onCreate(db: SQLiteDatabase) {
db.execSQL(CREATE_TABLE_NAME_CONFIGPARA)
+ db.execSQL(CRAETE_TABLE_NAME_DTL_ONLINE)
+ db.execSQL(CRAETE_TABLE_NAME_DTL_OFFLINE)
}
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
diff --git a/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt b/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt
new file mode 100644
index 0000000..f3b4e24
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/db/DynamicParaDao.kt
@@ -0,0 +1,103 @@
+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.paraverno = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.paraverno.toString()))
+ record.paragroupid = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.DynamicPara.paragroupid.toString()))
+ record.cardverno = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.cardverno.toString()))
+ record.jwt = cursor.getString(cursor.getColumnIndex(BeanPropEnum.DynamicPara.jwt.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.paraverno.toString(), record.paraverno)
+ values.put(BeanPropEnum.DynamicPara.paragroupid.toString(), record.paragroupid)
+ values.put(BeanPropEnum.DynamicPara.cardverno.toString(), record.cardverno)
+ values.put(BeanPropEnum.DynamicPara.jwt.toString(), record.jwt)
+ values.put(BeanPropEnum.DynamicPara.token.toString(), record.token)
+ 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 0bbd00e..eff19ce 100644
--- a/app/src/main/java/com/supwisdom/db/Pos.kt
+++ b/app/src/main/java/com/supwisdom/db/Pos.kt
@@ -1,7 +1,7 @@
package com.supwisdom.db
import android.content.Context
-import com.supwisdom.entity.ConfigParaRecord
+import com.supwisdom.entity.*
/**
** create by zzq on 2019/7/24
@@ -10,8 +10,14 @@
class Pos constructor(context: Context) {
private val context = context
private val sdContext = SDContext(context)
- private var configParaDao = ConfigParaDao(context)
- private var configParaRecord: ConfigParaRecord? = null
+ private val configParaDao = ConfigParaDao(context)
+ 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 transdtlOnlineDao = TransdtlOnlineDao(sdContext)
+ private val transdtlOfflineDao = TransdtlOfflineDao(sdContext)
init {
}
@@ -19,12 +25,11 @@
/**
* 设备参数
*/
-
fun replaceConfigPara(record: ConfigParaRecord): Boolean {
try {
configParaDao.getLock().lock()
if (configParaDao.replace(record)) {
- configParaRecord = record
+ cfgRecord = record
return true
}
} finally {
@@ -34,14 +39,135 @@
}
fun getConfigPara(): ConfigParaRecord? {
- if (configParaRecord == null) {
+ if (cfgRecord == null) {
try {
configParaDao.getLock().lock()
- configParaRecord = configParaDao.get()
+ cfgRecord = configParaDao.get()
} finally {
configParaDao.getLock().unlock()
}
}
- return configParaRecord
+ return cfgRecord
+ }
+
+ 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 getTransdtlOnlineUnconfirm(): List<TransdtlOnlineRecord> {
+ try {
+ transdtlOnlineDao.getLock().lock()
+ return transdtlOnlineDao.getUnconfirm()
+ } finally {
+ transdtlOnlineDao.getLock().unlock()
+ }
+ }
+
+ fun saveTransdtlOnline(record: TransdtlOnlineRecord): Boolean {
+ try {
+ transdtlOnlineDao.getLock().lock()
+ return transdtlOnlineDao.save(record)
+ } 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 getTransdtlOfflineUnconfirm(): List<TransdtlOfflineRecord> {
+ try {
+ transdtlOfflineDao.getLock().lock()
+ return transdtlOfflineDao.getUnconfirm()
+ } finally {
+ transdtlOfflineDao.getLock().unlock()
+ }
+ }
+ fun saveTransdtlOffline(record: TransdtlOfflineRecord): Boolean {
+ try {
+ transdtlOfflineDao.getLock().lock()
+ return transdtlOfflineDao.save(record)
+ } 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()
+ }
}
}
\ 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
new file mode 100644
index 0000000..8d3b045
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/db/SysParaDao.kt
@@ -0,0 +1,112 @@
+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) {
+ db.setTransactionSuccessful()
+ return true
+ }
+ } finally {
+ db.endTransaction()
+ }
+ return false
+ }
+
+ 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()))
+ record.offlineFlag = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.offlineFlag.toString()))
+ record.maxOfflineDays = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.maxOfflineDays.toString()))
+ record.mngPasswd = cursor.getString(cursor.getColumnIndex(BeanPropEnum.Syspara.mngpasswd.toString()))
+ record.fixpayGap = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.fixpayGap.toString()))
+ record.consumeShowtime = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.Syspara.consumeShowtime.toString()))
+ record.consumeFailShowtime =
+ 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)
+ values.put(BeanPropEnum.Syspara.offlineFlag.toString(), record.offlineFlag)
+ values.put(BeanPropEnum.Syspara.maxOfflineDays.toString(), record.maxOfflineDays)
+ values.put(BeanPropEnum.Syspara.mngpasswd.toString(), record.mngPasswd)
+ values.put(BeanPropEnum.Syspara.fixpayGap.toString(), record.fixpayGap)
+ values.put(BeanPropEnum.Syspara.consumeShowtime.toString(), record.consumeShowtime)
+ values.put(BeanPropEnum.Syspara.consumeFailShowtime.toString(), record.consumeFailShowtime)
+ 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
new file mode 100644
index 0000000..f3b3f6c
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOfflineDao.kt
@@ -0,0 +1,148 @@
+package com.supwisdom.db
+
+import android.content.ContentValues
+import android.content.Context
+import android.database.Cursor
+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 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 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.TransdtlOffline.upflag.toString() + "=?" + 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()))
+ val flag = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.reversalflag.toString()))
+ record.reversalflag = flag == 1
+ record.reversalseqno =
+ cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.reversalseqno.toString()))
+ record.reversaltransdate =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.reversaltransdate.toString()))
+ record.reversaltranstime =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.reversaltranstime.toString()))
+ record.status = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOffline.status.toString()))
+ 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)
+ if (record.reversalflag) {
+ values.put(BeanPropEnum.TransdtlOffline.reversalflag.toString(), 1)
+ } else {
+ values.put(BeanPropEnum.TransdtlOffline.reversalflag.toString(), 0)
+ }
+ values.put(BeanPropEnum.TransdtlOffline.reversalseqno.toString(), record.reversalseqno)
+ values.put(BeanPropEnum.TransdtlOffline.reversaltransdate.toString(), record.reversaltransdate)
+ values.put(BeanPropEnum.TransdtlOffline.reversaltranstime.toString(), record.reversaltranstime)
+ values.put(BeanPropEnum.TransdtlOffline.status.toString(), record.status)
+ values.put(BeanPropEnum.TransdtlOffline.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
new file mode 100644
index 0000000..e4e7b55
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/db/TransdtlOnlineDao.kt
@@ -0,0 +1,144 @@
+package com.supwisdom.db
+
+import android.content.ContentValues
+import android.content.Context
+import android.database.Cursor
+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 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 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() + "=?" + 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.payamt = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.payamt.toString()))
+ record.extraamt = cursor.getInt(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.extraamt.toString()))
+ record.reversalflag =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.reversalflag.toString()))
+ record.reversalbillno =
+ cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.reversalbillno.toString()))
+ record.status = cursor.getString(cursor.getColumnIndex(BeanPropEnum.TransdtlOnline.status.toString()))
+ 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.reversalflag.toString(), record.reversalflag)
+ values.put(BeanPropEnum.TransdtlOnline.reversalbillno.toString(), record.reversalbillno)
+ values.put(BeanPropEnum.TransdtlOnline.status.toString(), record.status)
+ 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/entity/DynamicParaRecord.kt b/app/src/main/java/com/supwisdom/entity/DynamicParaRecord.kt
new file mode 100644
index 0000000..bb2a939
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/entity/DynamicParaRecord.kt
@@ -0,0 +1,13 @@
+package com.supwisdom.entity
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class DynamicParaRecord {
+ var paraverno: Int = 0//参数版本
+ var paragroupid: Int = 0//参数组id
+ var cardverno: String? = null // 黑名单版本号 12byte
+ var jwt: String? = null
+ var token: String? = null
+}
\ 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
new file mode 100644
index 0000000..288567e
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/entity/SysParaRecord.kt
@@ -0,0 +1,20 @@
+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 offlineFlag: Int = 0 // 脱机消费时限开关 0-关闭, 1-开启
+ var maxOfflineDays: Int = 0// 最大脱机天数
+ var mngPasswd: String? = null// 维护密码
+ var consumeShowtime: Int = 0// 消费成功显示时间
+ var consumeFailShowtime: Int = 0 //消费失败显示时间
+ var commTime: Int = 0 //通讯超时时间 默认2s
+ /**
+ * 定额消费同卡消费间隔(s)
+ */
+ var fixpayGap: Int = 0
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt b/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt
new file mode 100644
index 0000000..9018e4a
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlOfflineRecord.kt
@@ -0,0 +1,23 @@
+package com.supwisdom.entity
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc 离线流水
+ **/
+class TransdtlOfflineRecord {
+ var devphyid: String? = null
+ var transdate: String? = null
+ var transtime: String? = null
+ var devseqno: Int = 0
+ var cardno: String? = null
+ var cardphyid: String? = null
+ var payamt: Int = 0
+ var extraamt: Int = 0
+ var managefeetype: String? = null // none,discount,mealer
+ var reversalflag = false
+ var reversalseqno: Int = 0 //被冲正流水号
+ var reversaltransdate: String? = null //被冲正流水日期
+ var reversaltranstime: String? = null //被冲正流水时间
+ var status: String? = null // init,fail,suc
+ var upflag: Int = 0 // 1已上传
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt b/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
new file mode 100644
index 0000000..ba06561
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/entity/TransdtlOnlineRecord.kt
@@ -0,0 +1,24 @@
+package com.supwisdom.entity
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc 联机流水
+ **/
+class TransdtlOnlineRecord {
+ var devphyid: String? = null
+ var transdate: String? = null
+ var transtime: String? = null
+ var devseqno: Int = 0
+ var cardno: String? = null
+ var cardphyid: String? = null
+ var qrcode: String? = null
+ var transtype: String? = null //card,code
+ var payamt: Int = 0
+ var extraamt: Int = 0
+ var managefeetype: String? = null // none,discount,mealer
+ var billno: String? = null
+ var reversalflag: String? = null //消费null 自动冲正auto 手动撤销 manual
+ var reversalbillno: String? = null //被冲正交易参考号
+ var status: String? = null // init,fail,suc
+ var upflag: Int = 0 // 1已上传
+}
\ 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 f91b0de..8a163cb 100644
--- a/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
+++ b/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
@@ -16,7 +16,20 @@
**/
@Suppress("DEPRECATION")
class NetworkHandler private constructor() {
- private var instance: NetworkHandler? = null
+ 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 = MediaType.parse("application/json; charset=utf-8")
@@ -92,16 +105,6 @@
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()
diff --git a/app/src/main/java/com/supwisdom/okhttp/WebParams.kt b/app/src/main/java/com/supwisdom/okhttp/WebParams.kt
index 04ac771..8a6beb7 100644
--- a/app/src/main/java/com/supwisdom/okhttp/WebParams.kt
+++ b/app/src/main/java/com/supwisdom/okhttp/WebParams.kt
@@ -8,19 +8,19 @@
** @desc
**/
class WebParams {
- private val mParameters = hashMapOf<String, Any>()
+ private val mParameters = hashMapOf<String, Any?>()
- fun setParameter(name: String, value: String): WebParams {
+ fun setParameter(name: String, value: String?): WebParams {
mParameters[name] = value
return this
}
- fun setParameter(name: String, value: Int): WebParams {
+ fun setParameter(name: String, value: Int?): WebParams {
mParameters[name] = value
return this
}
- fun setParameter(name: String, value: Float): WebParams {
+ fun setParameter(name: String, value: Float?): WebParams {
mParameters[name] = value
return this
}
diff --git a/app/src/main/java/com/supwisdom/service/APIInterface.kt b/app/src/main/java/com/supwisdom/service/APIInterface.kt
index 8f31021..20330a5 100644
--- a/app/src/main/java/com/supwisdom/service/APIInterface.kt
+++ b/app/src/main/java/com/supwisdom/service/APIInterface.kt
@@ -1,8 +1,22 @@
package com.supwisdom.service
+import com.supwisdom.entity.TransdtlOfflineRecord
+import com.supwisdom.entity.TransdtlOnlineRecord
+
/**
** create by zzq on 2019/7/23
** @desc
**/
interface APIInterface {
+ fun heartBeat()
+
+ fun linkCheck()
+
+ fun downloadSyspara(paraverno: Int, paragroupid: Int)
+
+ fun downloadWhitelist(maxCardverno: String)
+
+ fun uploadTransdtl(record: TransdtlOnlineRecord)
+
+ fun uploadTransdtl(record: TransdtlOfflineRecord)
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt b/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt
index 27123cf..66e1930 100644
--- a/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt
+++ b/app/src/main/java/com/supwisdom/service/BackgroundTaskService.kt
@@ -1,6 +1,7 @@
package com.supwisdom.service
import com.supwisdom.activities.SPApplication
+import com.supwisdom.entity.SysParaRecord
import com.supwisdom.utils.CommonUtil
import com.supwisdom.utils.DateUtil
import com.supwisdom.utils.FileUtil
@@ -11,7 +12,7 @@
** @desc
**/
class BackgroundTaskService : Thread() {
- private val pos = SPApplication.getInstance().()
+ private val pos = SPApplication.getInstance().getPos()
private val websocketProcess = WebsocketProcess()
private var websocketHasRun = false
private var apiInterface: APIInterface? = null
@@ -23,28 +24,28 @@
}
override fun run() {
- var heartgap: Long
+ var heartgap = 0
while (true) {
//做一卡通心跳和流水上传
doYktHeartAndTransdtl()
//清除流水
clearTransdtl()
sysRecord = pos.getSysPara()
- if (sysRecord != null && sysRecord!!.getSocketSwitch() != 0) {
- if (!websocketHasRun) {
- websocketHasRun = true
- websocketProcess.start()
- }
+// if (sysRecord != null && sysRecord!!.getSocketSwitch() != 0) {
+// if (!websocketHasRun) {
+// websocketHasRun = true
+// websocketProcess.start()
+// }
+// } else {
+// if (websocketHasRun) {
+// websocketHasRun = false
+// websocketProcess.stop()
+// }
+// }
+ heartgap = if (sysRecord == null || sysRecord!!.heatBeat < 10 || sysRecord!!.heatBeat > 600) {
+ 60
} else {
- if (websocketHasRun) {
- websocketHasRun = false
- websocketProcess.stop()
- }
- }
- if (sysRecord == null || sysRecord!!.getHeatBeat() < 10 || sysRecord!!.getHeatBeat() > 600) {
- heartgap = 60
- } else {
- heartgap = sysRecord!!.getHeatBeat()
+ sysRecord!!.heatBeat
}
CommonUtil.doSleep(heartgap * 1000)
}
@@ -52,20 +53,25 @@
private fun doYktHeartAndTransdtl() {
//做一卡通的心跳以及流水上传
- val resp = apiInterface!!.heartBeat()
- if (resp.getRetcode() != PublicDef.SUCCESS) {
- SPApplication.getInstance().setEpayLinking(false)
- return
+// val resp = apiInterface!!.heartBeat()
+// if (resp.getRetcode() != PublicDef.SUCCESS) {
+// SPApplication.getInstance().setEpayLinking(false)
+// return
+// }
+// SPApplication.getInstance().setEpayLinking(true)
+//
+// /*自动签到*/
+// if (SPApplication.getInstance().getAuthStatus() > 2 && SPApplication.getInstance().getAuthStatus() < 5) {
+// autoAuth()
+// }
+ pos.getTransdtlOnlineUnconfirm().forEach {
+ apiInterface!!.uploadTransdtl(it)
+ it.upflag = 1
}
- SPApplication.getInstance().setEpayLinking(true)
-
- /*自动签到*/
- if (SPApplication.getInstance().getAuthStatus() > 2 && SPApplication.getInstance().getAuthStatus() < 5) {
- autoAuth()
+ pos.getTransdtlOfflineUnconfirm().forEach {
+ apiInterface!!.uploadTransdtl(it)
+ it.upflag = 1
}
-
- uploadCrdDtl()
- uploadOnlDtl()
}
private fun autoAuth() {
@@ -77,49 +83,14 @@
// }
}
- private fun uploadCrdDtl() {
- val list = pos.getTransdtlCreditUnconfirm()
- if (list != null) {
- for (i in list!!.indices) {
- val record = list!!.get(i)
- if (record != null) {
- val resp = apiInterface!!.uploadTransdtl(record, false)
- if (resp.getRetcode() == PublicDef.SUCCESS) {
- pos.updateTransdtlCredit(record!!.getDevseqno(), 1)
- } else {
- break
- }
- }
- }
- }
- }
-
- private fun uploadOnlDtl() {
- val list = pos.getTransdtlReverse(null)
- if (list != null) {
- for (i in list!!.indices) {
- val record = list!!.get(i)
- val resp = apiInterface!!.uploadTransdtl(record)
- if (resp.getRetcode() == PublicDef.SUCCESS) {
- pos.updateTransdtlReverse(record.getDevseqno(), 1)
- } else {
- break
- }
- }
- }
- }
-
private fun clearTransdtl() {
- val date = DateUtil.getDayDateNoFormatBefore(35)
+ val date = DateUtil.getDayDateNoFormatBefore(100)
if (date == transdtlClearDate) {
/*每天清除流水一次*/
return
}
- pos.clearTransdtlCredit(date)
pos.clearTransdtlOnline(date)
- pos.clearTransdtlBarcode(date)
- pos.clearTransdtlBM1(date)
- pos.clearTransdtlDps(date)
+ pos.clearTransdtlOffline(date)
transdtlClearDate = date
diff --git a/app/src/main/java/com/supwisdom/service/ConsumeApi.kt b/app/src/main/java/com/supwisdom/service/ConsumeApi.kt
new file mode 100644
index 0000000..5b460fa
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/service/ConsumeApi.kt
@@ -0,0 +1,52 @@
+package com.supwisdom.service
+
+import com.supwisdom.activities.YktSession
+import com.supwisdom.entity.TransdtlOnlineRecord
+import com.supwisdom.okhttp.TransResp
+import com.supwisdom.okhttp.WebParams
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class ConsumeApi {
+ fun payInit(record: TransdtlOnlineRecord): TransResp? {
+// val feetype = when {
+// record.transflag and 0x60 == 0x40 -> "mealer"
+// record.transflag and 0x60 == 0x20 -> "discount"
+// else -> "none"
+// }
+ val params = WebParams()
+ params.setParameter("cardno", record.cardno)
+ .setParameter("cardphyid", record.cardphyid)
+ .setParameter("qrcode", record.qrcode)
+ .setParameter("devphyid", record.devphyid)
+ .setParameter("termseqno", record.devseqno)
+ .setParameter("termdate", record.transdate)
+ .setParameter("termtime", record.transtime)
+ .setParameter("transtype", record.transtype)
+
+ return YktSession.getInstance().sendYktRequestPost("/api/pos/payinit", "", params)
+ }
+
+ fun payConfirm(record: TransdtlOnlineRecord): TransResp? {
+ val params = WebParams()
+ params.setParameter("devphyid", record.devphyid)
+ .setParameter("billno", record.billno)
+ .setParameter("amount", record.payamt)
+ .setParameter("termdate", record.transdate)
+ .setParameter("termtime", record.transtime)
+
+ return YktSession.getInstance().sendYktRequestPost("/api/pos/payconfirm", "", params)
+ }
+
+ fun payQuery(record: TransdtlOnlineRecord): TransResp? {
+ val params = WebParams()
+ params.setParameter("devphyid", record.devphyid)
+ .setParameter("billno", record.billno)
+ .setParameter("termdate", record.transdate)
+ .setParameter("termtime", record.transtime)
+
+ return YktSession.getInstance().sendYktRequestPost("/api/pos/payquery", "", params)
+ }
+}
\ 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 b438912..6a4d21f 100644
--- a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
+++ b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
@@ -1,8 +1,80 @@
package com.supwisdom.service
+import com.supwisdom.activities.SPApplication
+import com.supwisdom.activities.YktSession
+import com.supwisdom.entity.TransdtlOfflineRecord
+import com.supwisdom.entity.TransdtlOnlineRecord
+import com.supwisdom.okhttp.WebParams
+import com.supwisdom.utils.DateUtil
+
/**
** create by zzq on 2019/7/23
** @desc
**/
class EpayApiImpl : APIInterface {
+ private val pos = SPApplication.getInstance().getPos()
+ override fun heartBeat() {
+ val dyRecord = pos.getDynamicPara()
+ val params = WebParams()
+ params.setParameter("devphyid", pos.getConfigPara()!!.devphyid)
+ .setParameter("termdate", DateUtil.getNowDateNoFormat())
+ .setParameter("termtime", DateUtil.getNowTimeNoFormat())
+ .setParameter("paragroupid", dyRecord?.paragroupid)
+ .setParameter("cardverno", dyRecord?.cardverno)
+
+ val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/heartbeat", "", params)
+ }
+
+ override fun linkCheck() {
+ TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
+ }
+
+ override fun downloadSyspara(paraverno: Int, paragroupid: Int) {
+ val dyRecord = pos.getDynamicPara()
+ val params = WebParams()
+ params.setParameter("devphyid", pos.getConfigPara()!!.devphyid)
+ .setParameter("termdate", DateUtil.getNowDateNoFormat())
+ .setParameter("termtime", DateUtil.getNowTimeNoFormat())
+ .setParameter("paragroupid", dyRecord?.paragroupid)
+
+ val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/systempara", "", params)
+ }
+
+ override fun downloadWhitelist(maxCardverno: String) {
+ val params = WebParams()
+ params.setParameter("devphyid", pos.getConfigPara()!!.devphyid)
+ .setParameter("cardverno", pos.getDynamicPara()!!.cardverno)
+ .setParameter("maxcount", 20)
+
+ val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/whitelist", "", params)
+ }
+
+ override fun uploadTransdtl(record: TransdtlOnlineRecord) {
+ val params = WebParams()
+ params.setParameter("devphyid", record.devphyid)
+ .setParameter("termseqno", record.devseqno)
+ .setParameter("maxcount", 20)
+
+ val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/paycancel", "", params)
+ }
+
+ override fun uploadTransdtl(record: TransdtlOfflineRecord) {
+ val params = WebParams()
+ params.setParameter("devphyid", record.devphyid)
+ .setParameter("termseqno", record.devseqno)
+ .setParameter("transdate", record.transdate)
+ .setParameter("transtime", record.transtime)
+ .setParameter("cardno", record.cardno)
+ .setParameter("cardphyid", record.cardphyid)
+ .setParameter("amount", record.payamt)
+ .setParameter("extraamt", record.extraamt)
+ .setParameter("managefeetype", record.managefeetype)
+ .setParameter("reversalflag", record.reversalflag.toString())
+ .setParameter("reversaltermseqno", record.reversalseqno)
+ .setParameter("reversaltransdate", record.reversaltransdate)
+ .setParameter("reversaltransdate", record.reversaltranstime)
+ .setParameter("status", record.status)
+
+ val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/offlinetransdtl", "", params)
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/service/NtpClient.kt b/app/src/main/java/com/supwisdom/service/NtpClient.kt
new file mode 100644
index 0000000..2e4f3f0
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/service/NtpClient.kt
@@ -0,0 +1,120 @@
+package com.supwisdom.service
+
+import android.os.SystemClock
+import com.supwisdom.utils.DateUtil
+import com.supwisdom.utils.ThreadPool
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc
+ **/
+class NtpClient {
+ private val NTP_TIME_OUT_MILLISECOND = 10000
+ /**
+ * 国内ntp服务器地址集
+ */
+ private val ntpServerHost = arrayOf("cn.pool.ntp.org", "tw.pool.ntp.org")
+ private var privatelServerHost: String? = null
+
+ fun setPrivatelServerHost(privatelServerHost: String) {
+ this.privatelServerHost = privatelServerHost
+ }
+
+ private fun getTimeFromNtpServer(ntpHost: String?): Long {
+ val client = SntpClient()
+ val isSuccessful = client.requestTime(ntpHost!!, NTP_TIME_OUT_MILLISECOND)
+ return if (isSuccessful) {
+ client.getNtpTime()
+ } else {
+ -1
+ }
+ }
+
+ /**
+ * @param synctime yyyyMMddHHmmss
+ */
+ fun startCalibrateTime(synctime: String) {
+ val time = DateUtil.dateFormatConvertToLong(synctime)
+ startCalibrateTime(time)
+ }
+
+ /**
+ * @param synctime ms
+ */
+ fun startCalibrateTime(synctime: Long) {
+ val localTime = System.currentTimeMillis()
+ if (synctime > 0) {
+ if (synctime > localTime && synctime - localTime > 60000) {
+ setCurrentTimeMillis(synctime)
+ } else if (localTime > synctime && localTime - synctime > 60000) {
+ setCurrentTimeMillis(synctime)
+ }
+ }
+ }
+
+ /**
+ * 开始校准时间
+ */
+ fun startCalibrateTime() {
+ ThreadPool.getShortPool().execute(Runnable {
+ /**
+ * 优先使用专网ntp服务器地址
+ */
+ /**
+ * 优先使用专网ntp服务器地址
+ */
+ if (privatelServerHost != null) {
+ val time = getTimeFromNtpServer(privatelServerHost)
+ if (time > 0) {
+ val isSetTimeSuccessful = setCurrentTimeMillis(time)
+ if (isSetTimeSuccessful) {
+ // LogUtil.d("set time successful");
+ return@Runnable
+ } else {
+ // LogUtil.d("set time failure");
+ }
+ }
+ }
+ for (itemHost in ntpServerHost) {
+ val time = getTimeFromNtpServer(itemHost)
+ if (time > 0) {
+ val isSetTimeSuccessful = setCurrentTimeMillis(time)
+ if (isSetTimeSuccessful) {
+ return@Runnable
+ } else {
+ // LogUtil.d("set time failure");
+ }
+ }
+ }
+ })
+ }
+
+ /**
+ * 设置当前的系统时间
+ *
+ * @param time
+ * @return true表示设置成功, false表示设置失败
+ */
+ // private Boolean setCurrentTimeMillis(long time) {
+ // try {
+ // TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
+ // String datetime = CommonUtil.getDatetimeStringByLong(time);
+ // LogUtil.d("set time is: " + datetime);
+ // Process process = Runtime.getRuntime().exec("su");
+ // DataOutputStream os = new DataOutputStream(process.getOutputStream());
+ // //os.writeBytes("setprop persist.sys.timezone GMT\n");
+ // os.writeBytes("/system/bin/date -s " + datetime + "\n");
+ // os.writeBytes("clock -w\n");
+ // os.writeBytes("exit\n");
+ // os.flush();
+ // return true;
+ // } catch (Exception ex) {
+ // LogUtil.d("set time exception = " + CommonUtil.getExceptionStack(ex));
+ // ex.printStackTrace();
+ // return false;
+ // }
+ // }
+ private fun setCurrentTimeMillis(time: Long): Boolean {
+ return SystemClock.setCurrentTimeMillis(time)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/service/SntpClient.kt b/app/src/main/java/com/supwisdom/service/SntpClient.kt
new file mode 100644
index 0000000..d6e9ab9
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/service/SntpClient.kt
@@ -0,0 +1,202 @@
+package com.supwisdom.service
+
+import android.os.SystemClock
+import com.supwisdom.utils.unsignedToLong
+import java.net.DatagramPacket
+import java.net.DatagramSocket
+import java.net.InetAddress
+import kotlin.experimental.and
+
+/**
+ ** create by zzq on 2019/7/24
+ ** @desc 时钟同步
+ **/
+class SntpClient {
+ /**
+ * 从ntp服务器中获取时间
+ * @param ntpHost ntp服务器域名地址
+ * @return 如果失败返回-1,否则返回当前的毫秒数
+ */
+ private val REFERENCE_TIME_OFFSET = 16
+ private val ORIGINATE_TIME_OFFSET = 24
+ private val RECEIVE_TIME_OFFSET = 32
+ private val TRANSMIT_TIME_OFFSET = 40
+ private val NTP_PACKET_SIZE = 48
+
+ private val NTP_PORT = 123
+ private val NTP_MODE_CLIENT = 3
+ private val NTP_VERSION = 3
+
+ // Number of seconds between Jan 1, 1900 and Jan 1, 1970
+ // 70 years plus 17 leap days
+ private val OFFSET_1900_TO_1970: Long = ((365L * 70L) + 17L) * 24L * 60L * 60L
+
+ // system time computed from NTP server response
+ private var mNtpTime: Long = 0
+
+ // value of SystemClock.elapsedRealtime() corresponding to mNtpTime
+ private var mNtpTimeReference: Long = 0
+
+ // round trip time in milliseconds
+ private var mRoundTripTime: Long = 0
+
+ /**
+ * Sends an SNTP request to the given host and processes the response.
+ *
+ * @param host host name of the server.
+ * @param timeout network timeout in milliseconds.
+ * @return true if the transaction was successful.
+ */
+ fun requestTime(host: String, timeout: Int): Boolean {
+ var socket: DatagramSocket? = null
+ try {
+ socket = DatagramSocket()
+ socket.soTimeout = timeout
+ val address: InetAddress = InetAddress.getByName(host)
+ val buffer = ByteArray(NTP_PACKET_SIZE)
+ val request = DatagramPacket(buffer, buffer.size, address, NTP_PORT)
+
+ // set mode = 3 (client) and version = 3
+ // mode is in low 3 bits of first byte
+ // version is in bits 3-5 of first byte
+// buffer[0] = NTP_MODE_CLIENT or (NTP_VERSION << 3)
+ buffer[0] = (NTP_MODE_CLIENT or (NTP_VERSION shl 3)).toByte()
+
+
+ // get current time and write it to the request packet
+ val requestTime = System.currentTimeMillis()
+ val requestTicks = SystemClock.elapsedRealtime()
+ writeTimeStamp(buffer, TRANSMIT_TIME_OFFSET, requestTime)
+
+ socket.send(request)
+
+ // read the response
+ val response = DatagramPacket(buffer, buffer.size)
+ socket.receive(response)
+ val responseTicks = SystemClock.elapsedRealtime()
+ val responseTime = requestTime + (responseTicks - requestTicks)
+
+ // extract the results
+ val originateTime = readTimeStamp(buffer, ORIGINATE_TIME_OFFSET)
+ val receiveTime = readTimeStamp(buffer, RECEIVE_TIME_OFFSET)
+ val transmitTime = readTimeStamp(buffer, TRANSMIT_TIME_OFFSET)
+ val roundTripTime = responseTicks - requestTicks - (transmitTime - receiveTime)
+ // receiveTime = originateTime + transit + skew
+ // responseTime = transmitTime + transit - skew
+ // clockOffset = ((receiveTime - originateTime) + (transmitTime - responseTime))/2
+ // = ((originateTime + transit + skew - originateTime) +
+ // (transmitTime - (transmitTime + transit - skew)))/2
+ // = ((transit + skew) + (transmitTime - transmitTime - transit + skew))/2
+ // = (transit + skew - transit + skew)/2
+ // = (2 * skew)/2 = skew
+ val clockOffset = ((receiveTime - originateTime) + (transmitTime - responseTime)) / 2
+ // save our results - use the times on this side of the network latency
+ // (response rather than request time)
+ mNtpTime = responseTime + clockOffset
+ mNtpTimeReference = responseTicks
+ mRoundTripTime = roundTripTime
+ } catch (ex: Exception) {
+ ex.printStackTrace()
+ return false
+ } finally {
+ socket?.close()
+ }
+ return true
+ }
+
+ /**
+ * Returns the time computed from the NTP transaction.
+ *
+ * @return time value computed from NTP server response.
+ */
+ fun getNtpTime(): Long {
+ return mNtpTime
+ }
+
+ /**
+ * Returns the reference clock value (value of SystemClock.elapsedRealtime())
+ * corresponding to the NTP time.
+ *
+ * @return reference clock corresponding to the NTP time.
+ */
+ fun getNtpTimeReference(): Long {
+ return mNtpTimeReference
+ }
+
+ /**
+ * Returns the round trip time of the NTP transaction
+ *
+ * @return round trip time in milliseconds.
+ */
+ fun getRoundTripTime(): Long {
+ return mRoundTripTime
+ }
+
+ /**
+ * Reads an unsigned 32 bit big endian number from the given offset in the buffer.
+ */
+ private fun read32(buffer: ByteArray, offset: Int): Long {
+ val b0 = buffer[offset]
+ val b1 = buffer[offset + 1]
+ val b2 = buffer[offset + 2]
+ val b3 = buffer[offset + 3]
+ // convert signed bytes to unsigned values
+ var i0 = b0.unsignedToLong()
+ if (b0 and 0x80.toByte() == 0x80.toByte()) {
+ i0 = ((b0 and 0x7F.toByte()) + 0x80.toByte()).toByte().unsignedToLong()
+ }
+ var i1 = b1.unsignedToLong()
+ if (b1 and 0x80.toByte() == 0x80.toByte()) {
+ i1 = ((b1 and 0x7F.toByte()) + 0x80.toByte()).toByte().unsignedToLong()
+ }
+ var i2 = b2.unsignedToLong()
+ if (b2 and 0x80.toByte() == 0x80.toByte()) {
+ i2 = ((b2 and 0x7F.toByte()) + 0x80.toByte()).toByte().unsignedToLong()
+ }
+ var i3 = b3.unsignedToLong()
+ if (b3 and 0x80.toByte() == 0x80.toByte()) {
+ i3 = ((b3 and 0x7F.toByte()) + 0x80.toByte()).toByte().unsignedToLong()
+ }
+// val i0 = (b0 and 0x80.toByte()) == 0x80 ? (b0 & 0x7F)+0x80 : b0)
+// val i1 = ((b1 & 0x80) == 0x80 ? (b1 & 0x7F)+0x80 : b1)
+// val i2 = ((b2 & 0x80) == 0x80 ? (b2 & 0x7F)+0x80 : b2)
+// val i3 = ((b3 & 0x80) == 0x80 ? (b3 & 0x7F)+0x80 : b3)
+
+ return (i0 shl 24) + (i1 shl 16) + (i2 shl 8) + i3
+ }
+
+ /**
+ * Reads the NTP time stamp at the given offset in the buffer and returns
+ * it as a system time (milliseconds since January 1, 1970).
+ */
+ private fun readTimeStamp(buffer: ByteArray, offset: Int): Long {
+ val seconds = read32(buffer, offset)
+ val fraction = read32(buffer, offset + 4)
+ return ((seconds - OFFSET_1900_TO_1970) * 1000) + ((fraction * 1000L) / 0x100000000L)
+ }
+
+ /**
+ * Writes system time (milliseconds since January 1, 1970) as an NTP time stamp
+ * at the given offset in the buffer.
+ */
+ private fun writeTimeStamp(buffer: ByteArray, offset: Int, time: Long) {
+ var tmpOffset = offset
+ var seconds = time / 1000L
+ val milliseconds = time - seconds * 1000L
+ seconds += OFFSET_1900_TO_1970
+
+ // write seconds in big endian format
+ buffer[tmpOffset++] = (seconds shr 24).toByte()
+ buffer[tmpOffset++] = (seconds shr 16).toByte()
+ buffer[tmpOffset++] = (seconds shr 8).toByte()
+ buffer[tmpOffset++] = (seconds shr 0).toByte()
+
+ val fraction = milliseconds * 0x100000000L / 1000L
+ // write fraction in big endian format
+ buffer[tmpOffset++] = (fraction shr 24).toByte()
+ buffer[tmpOffset++] = (fraction shr 16).toByte()
+ buffer[tmpOffset++] = (fraction shr 8).toByte()
+ // low order bits should be random data
+ buffer[tmpOffset] = (Math.random() * 255.0).toByte()
+ }
+}
\ 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 b0e3aeb..aaeac12 100644
--- a/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/CommonUtil.kt
@@ -24,9 +24,9 @@
* @desc 公共类
*/
object CommonUtil {
- fun doSleep(ms: Long) {
+ fun doSleep(ms: Int) {
try {
- Thread.sleep(ms)
+ Thread.sleep(ms.toLong())
} catch (e: InterruptedException) {
e.printStackTrace()
}
diff --git a/app/src/main/java/com/supwisdom/utils/DateUtil.kt b/app/src/main/java/com/supwisdom/utils/DateUtil.kt
index 8354b4a..786fee3 100644
--- a/app/src/main/java/com/supwisdom/utils/DateUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/DateUtil.kt
@@ -326,10 +326,10 @@
* @desc 将日期格式的字符串转换为长整型
*/
fun dateFormatConvertToLong(datetime: String): Long {
- try {
- return FORMAT_yyyyMMddHHmmss.parse(datetime).time
+ return try {
+ FORMAT_yyyyMMddHHmmss.parse(datetime).time
} catch (ex: ParseException) {
- return 0L
+ 0L
}
}
@@ -361,10 +361,10 @@
* @desc 将日期格式的字符串转换为长整型
*/
fun dateFormatConvertToDate(datetime: String): Date? {
- try {
- return FORMAT_yyyy_MM_dd_HH_mm_ss.parse(datetime)
+ return try {
+ FORMAT_yyyy_MM_dd_HH_mm_ss.parse(datetime)
} catch (ex: ParseException) {
- return null
+ null
}
}
@@ -385,15 +385,15 @@
* @return yyyyMMdd
*/
fun getSpecifiedDayBefore(specifiedDay: String): String {
- try {
+ return try {
val c = Calendar.getInstance()
val date = FORMAT_yyyyMMdd.parse(specifiedDay)
c.time = date
val day = c.get(Calendar.DATE)
c.set(Calendar.DATE, day - 1)
- return FORMAT_yyyyMMdd.format(c.time)
+ FORMAT_yyyyMMdd.format(c.time)
} catch (e: ParseException) {
- return ""
+ ""
}
}
@@ -416,15 +416,15 @@
* @return yyyyMMdd
*/
fun getSpecifiedDayAfter(specifiedDay: String): String {
- try {
+ return try {
val c = Calendar.getInstance()
val date = FORMAT_yyyyMMdd.parse(specifiedDay)
c.time = date
val day = c.get(Calendar.DATE)
c.set(Calendar.DATE, day + 1)
- return FORMAT_yyyyMMdd.format(c.time)
+ FORMAT_yyyyMMdd.format(c.time)
} catch (e: ParseException) {
- return ""
+ ""
}
}
@@ -435,15 +435,15 @@
* @return yyyy-MM-dd
*/
fun getSpecifiedDayAfter1(specifiedDay: String): String {
- try {
+ return try {
val c = Calendar.getInstance()
val date = FORMAT_yyyy_MM_dd.parse(specifiedDay)
c.time = date
val day = c.get(Calendar.DATE)
c.set(Calendar.DATE, day + 1)
- return FORMAT_yyyy_MM_dd.format(c.time)
+ FORMAT_yyyy_MM_dd.format(c.time)
} catch (e: ParseException) {
- return ""
+ ""
}
}
diff --git a/app/src/main/java/com/supwisdom/utils/PublicDef.kt b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
index c6c766c..b860920 100644
--- a/app/src/main/java/com/supwisdom/utils/PublicDef.kt
+++ b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
@@ -26,16 +26,18 @@
* 卡消费标志(1 byte)
*/
/*high 4 bit*/
- val TRANSFLAG_NORMAL_CONSUME = 0x80 // 正常消费
- val TRANSFLAG_MEALER_CONSUME = 0xC0 // 搭伙
- val TRANSFLAG_DISCNT_CONSUME = 0xA0 // 折扣
- val TRANSFLAG_REVS_ML_CONSUME = 0x40 //冲正带搭伙
- val TRANSFLAG_REVS_DST_CONSUME = 0x20 // 冲正带折扣
- val TRANSFLAG_REVERSE_AUTO_CONSUME = 0x10 // 自动撤销 (0x00 手动冲正)
- val TRANSFLAG_REVERSE_CONSUME = 0x00 //&0x80 最高位0标识冲正(统一标识)
+ 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*/
- val TRANSFLAG_WRITE_CARD_SUCCESS = 0x01 // 写卡成功
- val TRANSFLAG_WRITE_CARD_HALFAWAY = 0x02 // 中途拔卡
- val TRANSFLAG_UNWRITE_CARD = 0x03 // 未写卡
- val TRANSFLAG_PWD_CONSUME = 0x04 // 密码消费
+ 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"
}
\ No newline at end of file