init
diff --git a/app/src/main/java/com/supwisdom/activities/YktSession.kt b/app/src/main/java/com/supwisdom/activities/YktSession.kt
index 5975932..54d8dc7 100644
--- a/app/src/main/java/com/supwisdom/activities/YktSession.kt
+++ b/app/src/main/java/com/supwisdom/activities/YktSession.kt
@@ -51,10 +51,6 @@
         NetworkHandler.getInstance().setCommTime(commTime)
     }
 
-    fun getWebAPISession(): WebAPISession {
-        return mSession!!
-    }
-
     // post
     fun sendYktRequestPost(uri: String, signdata: String, params: WebParams): TransResp? {
         val timestamp = DateUtil.getNowDateTimeNoFormat()
diff --git a/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt b/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt
index c6119a2..fc520a8 100644
--- a/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/cardlib/CardlibActivity.kt
@@ -14,7 +14,6 @@
 import com.supwisdom.auxscreen.AuxScreenController
 import com.supwisdom.utils.AppExitUtil
 import com.supwisdom.utils.DateUtil
-import com.supwisdom.utils.PublicDef
 import com.supwisdom.view.BigProgressDialog
 
 /**
@@ -86,7 +85,6 @@
 
     override fun showInitCardlibResult(issuccess: Boolean, msg: String) {
         if (issuccess) {
-            pos.getControlPara(PublicDef.CONTROL_HAS_REGISTER) ?: jumpActivity(InitActivity::class.java)
             val record = pos.getConfigPara()
             if (record != null && record.initOK) {
                 jumpActivity(LoadActivity::class.java)
diff --git a/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt b/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
index 4534f7e..9bf22b9 100644
--- a/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
+++ b/app/src/main/java/com/supwisdom/activities/consume/mode/CardPayService.kt
@@ -237,12 +237,12 @@
             onlRecord = TransdtlOnlineRecord()
             var seqno = pos.getTransdtlOnlineMaxSeqno()
             if (seqno == 0) {
-                seqno = pos.getControlPara(PublicDef.CONTROL_TRANSDTLONL_SEQNO)?.paraval?.toInt() ?: 0
+                seqno = pos.getDynamicPara()?.onlineseqno ?: 0
             }
             onlRecord.devphyid = pos.getConfigPara()!!.devphyid
             onlRecord.transdate = cardBean.datetime!!.substring(0, 8)
             onlRecord.transtime = cardBean.datetime!!.substring(8)
-            onlRecord.devseqno = seqno
+            onlRecord.devseqno = seqno + 1
             onlRecord.cardno = cardBean.cardNo
             onlRecord.cardphyid = cardBean.cardphyid
             onlRecord.payamt = cardBean.amount
@@ -282,7 +282,7 @@
             val ctlRecord = pos.getControlPara(PublicDef.CONTROL_OFFLINE_DAY_DISABLE)
             if (ctlRecord == null || ctlRecord.paraval != "1") {
                 val offdate = DateUtil.getDayDateNoFormatBefore(sysRecord.maxOfflineDays)
-                val validdate = pos.getDynamicPara()!!.lastauthtime?.substring(0, 8) ?: "00000000"
+                val validdate = pos.getDynamicPara()!!.jwtExpire?.substring(0, 8) ?: "00000000"
                 if (offdate > validdate) {
                     throw CardPayFailError("设备已脱机${sysRecord.maxOfflineDays}天")
                 }
@@ -302,12 +302,12 @@
             offRecord = TransdtlOfflineRecord()
             var seqno = pos.getTransdtlOfflineMaxSeqno()
             if (seqno == 0) {
-                seqno = pos.getControlPara(PublicDef.CONTROL_TRANSDTLOFF_SEQNO)?.paraval?.toInt() ?: 0
+                seqno = pos.getDynamicPara()?.onlineseqno ?: 0
             }
             offRecord.devphyid = pos.getConfigPara()!!.devphyid
             offRecord.transdate = cardBean.datetime!!.substring(0, 8)
             offRecord.transtime = cardBean.datetime!!.substring(8)
-            offRecord.devseqno = seqno
+            offRecord.devseqno = seqno + 1
             offRecord.cardno = cardBean.cardNo
             offRecord.cardphyid = cardBean.cardphyid
             offRecord.payamt = cardBean.amount
diff --git a/app/src/main/java/com/supwisdom/activities/init/InitActivity.kt b/app/src/main/java/com/supwisdom/activities/init/InitActivity.kt
index eee106f..452db49 100644
--- a/app/src/main/java/com/supwisdom/activities/init/InitActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/init/InitActivity.kt
@@ -66,7 +66,7 @@
             record.devphyid = "12345678"
             record.epayIP = "127.0.0.1"
             record.epayPort = 8080
-            record.epayUri = "epayapi"
+            record.epayUri = "restaurant"
         }
         record.initOK = false
         pos.replaceConfigPara(record)
diff --git a/app/src/main/java/com/supwisdom/activities/init/InitPresenter.kt b/app/src/main/java/com/supwisdom/activities/init/InitPresenter.kt
index 86dee25..13d527e 100644
--- a/app/src/main/java/com/supwisdom/activities/init/InitPresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/init/InitPresenter.kt
@@ -25,13 +25,18 @@
             iInitView.showSWToastInfo("终端机编号不能为空!", PublicDef.TOAST_SHOW_DOUBT)
             return
         }
-        record.devphyid = devphyid.replace(" ", "")
+        record.devphyid = devphyid
 
         if (TextUtils.isEmpty(serverip)) {
             iInitView.showSWToastInfo("服务器IP不能为空!", PublicDef.TOAST_SHOW_DOUBT)
             return
         }
-        record.epayIP = serverip.replace(" ", "")
+        record.epayIP = if (serverip.startsWith("http")) {
+            serverip
+        } else {
+            "http://$serverip"
+        }
+
         try {
             val tmpPort = Integer.valueOf(port)
             if (tmpPort > 65535) {
diff --git a/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt b/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt
index b067352..03fc13b 100644
--- a/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt
+++ b/app/src/main/java/com/supwisdom/activities/load/LoadPresenter.kt
@@ -52,7 +52,6 @@
 
         ThreadPool.getShortPool().execute(Runnable {
             sendMessage(LOAD_PROGRESS, "正在系统签到...")
-            val apiInterface = EpayApiImpl()
             val bean = AuthEpay().login()
             if (bean.retcode != PublicDef.SUCCESS) {
                 sendMessage(LOAD_DONE, bean.retmsg!!)
@@ -62,27 +61,25 @@
                     return@Runnable
                 }
             } else {
-                cfgRecord = pos.getConfigPara()
-                cfgRecord!!.deviceid = bean.deviceid
-                cfgRecord!!.merchaccno = bean.merchaccno
-                cfgRecord!!.shopname = bean.shopname
+                val dyRecord = pos.getDynamicPara()
+                dyRecord!!.deviceid = bean.deviceid
+                dyRecord.merchaccno = bean.merchaccno
+                dyRecord.shopname = bean.shopname
+                dyRecord.onlineseqno = bean.onlineseqno
+                dyRecord.offlineseqno = bean.offlineseqno
+                dyRecord.paragroupid = bean.paragroupid
                 pos.replaceConfigPara(cfgRecord!!)
 
-                // 保存流水号
-                if (!hasInit) {
-                    pos.replaceControlPara(PublicDef.CONTROL_TRANSDTLONL_SEQNO, bean.onlineseqno.toString())
-                    pos.replaceControlPara(PublicDef.CONTROL_TRANSDTLOFF_SEQNO, bean.offlineseqno.toString())
-                }
-
                 SPApplication.getInstance().setEpayLinking(true)
                 sendMessage(LOAD_DONE, "系统签到成功")
             }
 
             // 设置通讯参数
 //            YktSession.getInstance().setSessionKey(pos.getDynamicPara().getSessionKey())
+            val apiInterface = EpayApiImpl()
             try {
                 sendMessage(LOAD_PROGRESS, "加载系统参数...")
-                apiInterface.downloadSyspara( bean.paragroupid,bean.paraverno)
+                apiInterface.downloadSyspara(bean.paragroupid, bean.paraverno)
                 sendMessage(LOAD_DONE, "加载系统参数成功")
             } catch (ex: Exception) {
                 sendMessage(LOAD_DONE, "加载系统参数失败:${ex.message}")
@@ -107,8 +104,6 @@
             cfgRecord = pos.getConfigPara()
             cfgRecord!!.initOK = true
             pos.replaceConfigPara(cfgRecord!!)
-            pos.replaceControlPara(PublicDef.CONTROL_HAS_REGISTER, "1")
-
             sendMessage(LOAD_SUCCESS, "加载成功")
         })
     }
diff --git a/app/src/main/java/com/supwisdom/bean/AuthJwtRetBean.kt b/app/src/main/java/com/supwisdom/bean/AuthJwtRetBean.kt
new file mode 100644
index 0000000..0514140
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/bean/AuthJwtRetBean.kt
@@ -0,0 +1,10 @@
+package com.supwisdom.bean
+
+/**
+ ** create by zzq on 2019/7/29
+ ** @desc
+ **/
+class AuthJwtRetBean : BaseResp() {
+    var jwt: String? = null
+    var expiredAt: String? = null //过期时间 UTC格式
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/supwisdom/bean/AuthTokenRetBean.kt b/app/src/main/java/com/supwisdom/bean/AuthTokenRetBean.kt
new file mode 100644
index 0000000..440ad89
--- /dev/null
+++ b/app/src/main/java/com/supwisdom/bean/AuthTokenRetBean.kt
@@ -0,0 +1,10 @@
+package com.supwisdom.bean
+
+/**
+ ** create by zzq on 2019/7/29
+ ** @desc
+ **/
+class AuthTokenRetBean : BaseResp() {
+    var token: String? = null
+    var timestamp: String? = 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
index 3c344a7..4b536ac 100644
--- a/app/src/main/java/com/supwisdom/entity/ConfigParaRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/ConfigParaRecord.kt
@@ -6,9 +6,6 @@
  **/
 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
diff --git a/app/src/main/java/com/supwisdom/entity/DynamicParaRecord.kt b/app/src/main/java/com/supwisdom/entity/DynamicParaRecord.kt
index d396060..bee1dbe 100644
--- a/app/src/main/java/com/supwisdom/entity/DynamicParaRecord.kt
+++ b/app/src/main/java/com/supwisdom/entity/DynamicParaRecord.kt
@@ -5,10 +5,17 @@
  ** @desc 后台动态参数
  **/
 class DynamicParaRecord {
+    var appid: String? = null
+    var appsecret: String? = null
+    var deviceid: Int = 0 // 设备ID
+    var merchaccno: Int = 0 //商户号
+    var shopname: String? = null //商户名
     var paraverno: Int = 0//参数版本
     var paragroupid: Int = 0//参数组id
+    var onlineseqno: Int = 0 //后台最大联机流水号
+    var offlineseqno: Int = 0 //后台最大离线流水号
     var cardverno: String? = null // 黑名单版本号 12byte
     var jwt: String? = null
     var token: String? = null
-    var lastauthtime: String? = null //最后一次认证时间 yyyyMMddhhmmss
+    var jwtExpire: String? = null //jwt有效期 yyyyMMddhhmmss
 }
\ 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 f55b2bb..7ce9650 100644
--- a/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
+++ b/app/src/main/java/com/supwisdom/okhttp/NetworkHandler.kt
@@ -35,6 +35,8 @@
     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
+    private var clientId = "clientId"
+    private var jwt = "jwt"
 
     init {
         client = OkHttpClient()
@@ -73,6 +75,14 @@
         }
     }
 
+    fun setClientId(clientId: String) {
+        this.clientId = clientId
+    }
+
+    fun setJwt(jwt: String) {
+        this.jwt = jwt
+    }
+
     private class TrustAllCerts : X509TrustManager {
         @Throws(CertificateException::class)
         override fun checkClientTrusted(chain: Array<X509Certificate>, authType: String) {
@@ -110,6 +120,8 @@
         val request = Request.Builder()
             .url(geturl(url, params))
             .addHeader("Accept", "application/json; q=0.5")
+            .addHeader("X-TENANT-ID", clientId)
+            .addHeader("Authorization", "Bearer $jwt")
             .addHeader("Connection", "close")
             .build()
         return getTransResp(request)
@@ -119,6 +131,8 @@
         val request = Request.Builder()
             .url(geturl(url, params))
             .addHeader("Accept", "application/json; q=0.5")
+            .addHeader("X-TENANT-ID", clientId)
+            .addHeader("Authorization", "Bearer $jwt")
             .addHeader("Connection", "close")
             .build()
         client!!.newCall(request).enqueue(object : Callback {
@@ -151,6 +165,8 @@
         val request = Request.Builder()
             .url(url)
             .addHeader("Accept", "application/json; q=0.5")
+            .addHeader("X-TENANT-ID", clientId)
+            .addHeader("Authorization", "Bearer $jwt")
             .addHeader("Connection", "close")
             .post(builder.build())
             .build()
@@ -165,6 +181,8 @@
         val request = Request.Builder()
             .url(url)
             .addHeader("Accept", "application/json; q=0.5")
+            .addHeader("X-TENANT-ID", clientId)
+            .addHeader("Authorization", "Bearer $jwt")
             .addHeader("Connection", "close")
             .post(builder.build())
             .build()
@@ -176,6 +194,8 @@
         val request = Request.Builder()
             .url(url)
             .addHeader("Accept", "application/json; q=0.5")
+            .addHeader("X-TENANT-ID", clientId)
+            .addHeader("Authorization", "Bearer $jwt")
             .addHeader("Connection", "close")
             .post(body)
             .build()
@@ -187,6 +207,8 @@
         val request = Request.Builder()
             .url(url)
             .addHeader("Accept", "application/json; q=0.5")
+            .addHeader("X-TENANT-ID", clientId)
+            .addHeader("Authorization", "Bearer $jwt")
             .addHeader("Connection", "close")
             .post(body)
             .build()
diff --git a/app/src/main/java/com/supwisdom/service/AuthEpay.kt b/app/src/main/java/com/supwisdom/service/AuthEpay.kt
index ebe4961..319c217 100644
--- a/app/src/main/java/com/supwisdom/service/AuthEpay.kt
+++ b/app/src/main/java/com/supwisdom/service/AuthEpay.kt
@@ -1,10 +1,15 @@
 package com.supwisdom.service
 
+import android.text.TextUtils
 import com.supwisdom.activities.SPApplication
 import com.supwisdom.activities.YktSession
+import com.supwisdom.bean.AuthJwtRetBean
 import com.supwisdom.bean.AuthRetBean
+import com.supwisdom.bean.AuthTokenRetBean
 import com.supwisdom.exception.AuthEpayError
+import com.supwisdom.okhttp.NetworkHandler
 import com.supwisdom.okhttp.WebParams
+import com.supwisdom.utils.CryptUtil
 import com.supwisdom.utils.DateUtil
 import com.supwisdom.utils.GsonUtil
 import com.supwisdom.utils.PublicDef
@@ -16,29 +21,99 @@
 class AuthEpay {
     private val pos = SPApplication.getInstance().getPos()
 
+    @Throws(AuthEpayError::class)
     fun login(): AuthRetBean {
-        return AuthRetBean(PublicDef.ERROR, "未实行")
+        val token = getAccessToken()
+        getAccessJwt(token)
+        return secureAuth()
     }
 
-    private fun getAccessToken() {
-
+    @Throws(AuthEpayError::class)
+    fun refresh() {
+        val record = pos.getConfigPara()
+        val url = StringBuilder()
+        url.append(record!!.epayIP).append(":").append(record.epayPort)
+            .append("/").append(record.epayUri)
+            .append("/api/auth/refresh/").append(record.devphyid)
+        val resp = NetworkHandler.getInstance().get(url.toString(), null)
+            ?: throw AuthEpayError("jwt刷新请求超时")
+        val retBean = GsonUtil.GsonToBean(resp.retjson!!, AuthJwtRetBean::class.java)
+        dealSession(retBean)
     }
 
-    private fun secureAuth() {
+    private fun getAccessToken(): String {
+        val record = pos.getConfigPara()
+        val url = StringBuilder()
+        url.append(record!!.epayIP).append(":").append(record.epayPort)
+            .append("/").append(record.epayUri)
+            .append("/api/auth/gettoken/").append(record.devphyid)
+
+        NetworkHandler.getInstance().setClientId(record.devphyid!!)
+
+        val resp = NetworkHandler.getInstance().get(url.toString(), null)
+            ?: throw AuthEpayError("token请求超时")
+        val retBean = GsonUtil.GsonToBean(resp.retjson!!, AuthTokenRetBean::class.java)
+        if (retBean.retcode != PublicDef.SUCCESS) {
+            throw AuthEpayError(retBean.retmsg!!)
+        }
+        if (TextUtils.isEmpty(retBean.token)) {
+            throw AuthEpayError("token不能为空")
+        }
+        return retBean.token!!
+    }
+
+    private fun getAccessJwt(token: String) {
+        val record = pos.getConfigPara()
+        val url = StringBuilder()
+        url.append(record!!.epayIP).append(":").append(record.epayPort)
+            .append("/").append(record.epayUri)
+            .append("/api/auth/authentication/").append(record.devphyid)
+
+        val secret = CryptUtil.HMACSHA256(token, pos.getDynamicPara()!!.appsecret!!)
+        val params = WebParams()
+        params.setParameter("appid", pos.getDynamicPara()!!.appid)
+            .setParameter("app_secret", secret)
+
+        val resp = NetworkHandler.getInstance().get(url.toString(), params)
+            ?: throw AuthEpayError("jwt请求超时")
+        val retBean = GsonUtil.GsonToBean(resp.retjson!!, AuthJwtRetBean::class.java)
+        dealSession(retBean)
+    }
+
+    private fun secureAuth(): AuthRetBean {
         val dyRecord = pos.getDynamicPara()
+        val cardverno = dyRecord!!.cardverno ?: "0"
         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)
+            .setParameter("paragroupid", dyRecord.paragroupid)
+            .setParameter("cardverno", cardverno)
 
-        val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/heartbeat", "", params)
+        val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/login", "", params)
             ?: throw AuthEpayError("请求超时")
         val retBean = GsonUtil.GsonToBean(resp.retjson!!, AuthRetBean::class.java)
         if (retBean.retcode != PublicDef.SUCCESS) {
             throw AuthEpayError(retBean.retmsg!!)
         }
+        return retBean
+    }
 
+    private fun dealSession(bean: AuthJwtRetBean) {
+        if (bean.retcode != PublicDef.SUCCESS) {
+            throw AuthEpayError(bean.retmsg!!)
+        }
+        if (TextUtils.isEmpty(bean.jwt)) {
+            throw AuthEpayError("jwt不能为空")
+        }
+        NetworkHandler.getInstance().setJwt(bean.jwt!!)
+
+        val dyRecord = pos.getDynamicPara()
+        dyRecord!!.jwt = bean.jwt
+        //TODO
+        dyRecord.jwtExpire = DateUtil.utcToLocal(bean.expiredAt!!)
+        if (!pos.replaceDynamicPara(dyRecord)) {
+            throw AuthEpayError("保存参数失败")
+        }
     }
 }
\ 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 45862db..473225e 100644
--- a/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
+++ b/app/src/main/java/com/supwisdom/service/EpayApiImpl.kt
@@ -54,6 +54,10 @@
                 throw SysParaError(ex.message ?: "null")
             }
         }
+        /**
+         * 时钟校准
+         */
+        NtpClient().startCalibrateTime(retBean.systime!!)
     }
 
     @Throws(HeartBeatError::class)
diff --git a/app/src/main/java/com/supwisdom/utils/CryptUtil.kt b/app/src/main/java/com/supwisdom/utils/CryptUtil.kt
index d1677e6..b3d7f97 100644
--- a/app/src/main/java/com/supwisdom/utils/CryptUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/CryptUtil.kt
@@ -49,6 +49,22 @@
         return null
     }
 
+    fun HMACSHA256(data: String, key: String): String? {
+        try {
+            val algorithm = "HmacSHA256"
+            val mac = Mac.getInstance(algorithm)
+            val spec = SecretKeySpec(key.toByteArray(), algorithm)
+            mac.init(spec)
+            val byteHMAC = mac.doFinal(data.toByteArray())
+            return byteHMAC.encodeHex()
+        } catch (e: InvalidKeyException) {
+            e.printStackTrace()
+        } catch (ignore: NoSuchAlgorithmException) {
+            ignore.printStackTrace()
+        }
+        return null
+    }
+
     private fun algorithm2(text: String?, algorithm: String, isUpperCase: Boolean): String? {
         if (text != null && text.isNotEmpty()) {
             try {
diff --git a/app/src/main/java/com/supwisdom/utils/DateUtil.kt b/app/src/main/java/com/supwisdom/utils/DateUtil.kt
index f125399..a134bac 100644
--- a/app/src/main/java/com/supwisdom/utils/DateUtil.kt
+++ b/app/src/main/java/com/supwisdom/utils/DateUtil.kt
@@ -1,6 +1,7 @@
 package com.supwisdom.utils
 
 import java.text.ParseException
+import java.text.SimpleDateFormat
 import java.util.*
 
 /**
@@ -26,6 +27,8 @@
     private val FORMAT_yyyy_MM_dd = org.apache.commons.lang3.time.FastDateFormat.getInstance("yyyy-MM-dd")
     private val FORMAT_HH_mm_ss = org.apache.commons.lang3.time.FastDateFormat.getInstance("HH:mm:ss")
     private val FORMAT_HH_mm = org.apache.commons.lang3.time.FastDateFormat.getInstance("HH:mm")
+    private val FORMAT_UTC_yyyyMMddHHmmss =
+        org.apache.commons.lang3.time.FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss")
 
     /**
      * @return yyyy-MM-dd HH:mm:ss
@@ -128,21 +131,37 @@
         return ""
     }
 
+    fun utcToLocal(utctime: String): String {
+        val sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
+        sdf.timeZone = TimeZone.getTimeZone("TUC")
+        try {
+            val utcDate = sdf.parse(utctime)
+            sdf.timeZone = TimeZone.getDefault()
+            val localTime = sdf.format(utcDate.time)
+            val localDate = sdf.parse(localTime)
+            System.out.println("test")
+        } catch (ex: ParseException) {
+            ex.printStackTrace()
+        }
+        return ""
+    }
+
+
     /**
      * @param datetime yyyyMMddHHmmss
      * @return yy-MM-dd HH:mm:ss
      */
-    fun getNowDatetimeFromNoFormat2(datetime: String): String {
-        try {
-            return datetime.substring(2, 4) + "-" +
+    fun getNowDatetimeFromNoFormat2(datetime: String): String? {
+        return try {
+            datetime.substring(2, 4) + "-" +
                     datetime.substring(4, 6) + "-" +
                     datetime.substring(6, 8) + " " +
                     datetime.substring(8, 10) + ":" +
                     datetime.substring(10, 12) + ":" +
                     datetime.substring(12)
         } catch (ex: Exception) {
+            null
         }
-        return ""
     }
 
     /**
@@ -174,10 +193,10 @@
      * @return HH:mm:ss
      */
     fun getNowTimeWithArg(date: Date): String? {
-        try {
-            return FORMAT_HH_mm_ss.format(date)
+        return try {
+            FORMAT_HH_mm_ss.format(date)
         } catch (e: Exception) {
-            return null
+            null
         }
     }
 
@@ -185,28 +204,27 @@
      * @param time HHmm
      * @return HH:mm
      */
-    fun formatTime(time: String): String {
-        try {
+    fun formatTime(time: String): String? {
+        return try {
             val sb = StringBuilder()
             sb.append(time.substring(0, 2)).append(":")
                 .append(time.substring(2, 4))
-            return sb.toString()
+            sb.toString()
         } catch (e: Exception) {
-            e.printStackTrace()
+            null
         }
-        return ""
     }
 
     /**
      * @return MMdd
      */
     fun getDateMMdd(): String? {
-        try {
-            return FORMAT_MMdd.format(Date())
+        return try {
+            FORMAT_MMdd.format(Date())
         } catch (e: Exception) {
             e.printStackTrace()
+            null
         }
-        return null
     }
 
     /**
diff --git a/app/src/main/java/com/supwisdom/utils/PublicDef.kt b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
index d5fac32..ca1da56 100644
--- a/app/src/main/java/com/supwisdom/utils/PublicDef.kt
+++ b/app/src/main/java/com/supwisdom/utils/PublicDef.kt
@@ -71,10 +71,7 @@
     /**
      * 本地全局控制参数
      */
-    const val CONTROL_TRANSDTLONL_SEQNO = "onlseqno"
-    const val CONTROL_TRANSDTLOFF_SEQNO = "offseqno"
     const val CONTROL_FIXAMT = "fixamt"
-    const val CONTROL_HAS_REGISTER = "hasregister"
     const val CONTROL_OFFLINE_DAY_DISABLE = "offdaydisable"
     const val CONTROL_DEBUG_ENABLE = "debugenable"
     /**