diff --git a/app/build.gradle b/app/build.gradle
index 96711f5..0766c08 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -11,8 +11,8 @@
         applicationId "com.supwisdom.posa711dali"
         minSdkVersion 22
         targetSdkVersion 28
-        versionCode 1
-        versionName "1.0"
+        versionName androidGitVersion.name()
+        versionCode androidGitVersion.code()
         ndk {
             abiFilters "arm64-v8a"
         }
diff --git a/app/src/main/java/com/supwisdom/activities/upgrade/UpgradeActivity.kt b/app/src/main/java/com/supwisdom/activities/upgrade/UpgradeActivity.kt
index 0640dc4..91f304d 100644
--- a/app/src/main/java/com/supwisdom/activities/upgrade/UpgradeActivity.kt
+++ b/app/src/main/java/com/supwisdom/activities/upgrade/UpgradeActivity.kt
@@ -11,8 +11,9 @@
 import android.widget.TextView
 import com.supwisdom.R
 import com.supwisdom.activities.BaseActivity
-import com.supwisdom.auxscreen.AuxScreenController
+import com.supwisdom.activities.SPApplication
 import com.supwisdom.activities.upgrade.mode.EpayUpgradeApi
+import com.supwisdom.auxscreen.AuxScreenController
 import com.supwisdom.utils.CommonUtil
 import com.supwisdom.utils.DateUtil
 import com.supwisdom.utils.ThreadPool
@@ -25,11 +26,13 @@
  **/
 @Suppress("DEPRECATION")
 class UpgradeActivity : BaseActivity() {
+    private val pos = SPApplication.getInstance().getPos()
     private lateinit var vResult: TextView
     private lateinit var vUpgradeMsg: TextView
     private lateinit var vServerUrl: TextView
     private lateinit var vPosOldVersion: TextView
     private lateinit var vPosVersion: TextView
+    @Volatile
     private var isUpgrading = false
     @Volatile
     private var keyActive = true
@@ -70,8 +73,6 @@
                     finish()
                 KeyEvent.KEYCODE_ENTER -> {
                     //ok
-                    isUpgrading = true
-                    AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("正在升级", "请稍等..."))
                     asyncUpgrade()
                 }
             }
@@ -131,9 +132,16 @@
      * 开始下载apk
      */
     fun asyncUpgrade() {
-        ThreadPool.getDownloadPool().execute(Runnable {
-            EpayUpgradeApi(upgradeApiCallback).upgrade(CommonUtil.getVersionName(this))
-        })
+        if (!isUpgrading) {
+            isUpgrading = true
+            AuxScreenController.getInstance().refreshContent(Arrays.asList<String>("正在升级", "请稍等..."))
+            ThreadPool.getDownloadPool().execute(Runnable {
+                EpayUpgradeApi(upgradeApiCallback).upgrade(
+                    pos.getConfigPara()!!.devphyid!!,
+                    CommonUtil.getVersionName(this)
+                )
+            })
+        }
     }
 
     /**
@@ -157,10 +165,10 @@
     private var counter: ContinuePressTimer? = null
 
     private fun resetCounter(timems: Long) {
+        counter?.cancel()
         if (counter == null) {
             counter = ContinuePressTimer(timems, 100)
         }
-        counter!!.cancel()
         keyActive = false
         counter!!.start()
     }
diff --git a/app/src/main/java/com/supwisdom/activities/upgrade/mode/EpayUpgradeApi.kt b/app/src/main/java/com/supwisdom/activities/upgrade/mode/EpayUpgradeApi.kt
index 336efac..304a6a7 100644
--- a/app/src/main/java/com/supwisdom/activities/upgrade/mode/EpayUpgradeApi.kt
+++ b/app/src/main/java/com/supwisdom/activities/upgrade/mode/EpayUpgradeApi.kt
@@ -20,24 +20,24 @@
  */
 class EpayUpgradeApi constructor(callbackInterface: CallbackInterface) {
     private val TIMEOUT = 5 * 1000// 超时
-    private val callbackInterface = callbackInterface
+    private val callback = callbackInterface
     private val POSID = "posa711dali"
 
-    fun upgrade(versionName: String) {
-        val resp = getAppVersion()
+    fun upgrade(devphyid: String, version: String) {
+        val resp = getAppVersion(devphyid, version)
         if (resp.retcode != PublicDef.SUCCESS) {
-            callbackInterface.failed(resp.retmsg!!)
+            callback.failed(resp.retmsg!!)
             return
         }
         val updateFile = FileUtil.getUpdateFile("$POSID.zip")
         if (updateFile == null) {
-            callbackInterface.failed("创建本地文件失败")
+            callback.failed("创建本地文件失败")
             return
         }
-        if (!downloadUpdateFile(resp.packageurl!!, updateFile, resp.packageversion!!)) {
+        if (!downloadUpdateFile(resp.upgrade_url!!, updateFile, resp.upgrade_version!!)) {
             return
         }
-        parseDownloadFile(updateFile.absolutePath, resp.packageversion!!)
+        parseDownloadFile(updateFile.absolutePath, resp.upgrade_version!!)
     }
 
     private fun downloadUpdateFile(downUrl: String, file: File, versionName: String): Boolean {
@@ -70,7 +70,7 @@
             totalSize = urlConnection.contentLength
             if (urlConnection.responseCode != HttpStatus.SC_OK) {
                 urlConnection.disconnect()
-                callbackInterface.failed("下载文件失败:错误码=${urlConnection.responseCode}")
+                callback.failed("下载文件失败:错误码=${urlConnection.responseCode}")
                 return false
             }
             val inputStream = urlConnection.inputStream
@@ -89,7 +89,7 @@
                 if (pro - downStep >= 1) {
                     downStep++
                     CommonUtil.doSleep(100)
-                    callbackInterface.progresss(pro)
+                    callback.progresss(pro)
                 }
             }
             urlConnection.disconnect()
@@ -98,7 +98,7 @@
             return true
         } catch (e: Exception) {
             e.printStackTrace()
-            callbackInterface.failed("下载文件异常:${e.message}")
+            callback.failed("下载文件异常:${e.message}")
             return false
         }
     }
@@ -110,58 +110,62 @@
             ZipUtil.unzip(zipFilePath, unZipFilePath, false)
             val apkFile = File("$unZipFilePath/$POSID.apk")
             if (!apkFile.exists()) {
-                callbackInterface.failed("未找到文件$POSID.apk")
+                callback.failed("未找到文件$POSID.apk")
                 return false
             }
 
             val fileHash256 = CryptUtil.HASH256(FileInputStream(apkFile), "nzoqPYMIu91VViA/mEIG5FtJXi8=")
             if (fileHash256 == null) {
-                callbackInterface.failed("计算文件校验数据错误")
+                callback.failed("计算文件校验数据错误")
                 return false
             }
             val signFile = FileInputStream("$unZipFilePath/hash256.sign")
             val buffer = ByteArray(1024)
             val length = signFile.read(buffer, 0, buffer.size)
             if (length < 0) {
-                callbackInterface.failed("读取校验文件失败")
+                callback.failed("读取校验文件失败")
                 return false
             }
             signFile.close()
             val signHash256 = String(Arrays.copyOfRange(buffer, 0, length))
             if (!fileHash256.equals(signHash256, ignoreCase = true)) {
-                callbackInterface.failed("文件校验错误")
+                callback.failed("文件校验错误")
                 return false
             }
-            callbackInterface.success("$unZipFilePath/$POSID.apk")
+            callback.success("$unZipFilePath/$POSID.apk")
             return true
         } catch (e: Exception) {
             e.printStackTrace()
-            callbackInterface.failed("文件校验异常:${e.message}")
+            callback.failed("文件校验异常:${e.message}")
             return false
         }
     }
 
-    private fun getAppVersion(): UpgradeInfoRetBean {
+    private fun getAppVersion(devphyid: String, version: String): UpgradeInfoRetBean {
         val params = WebParams()
-        params.setParameter("version_package_id", "com.supwisdom.$POSID")
+        params.setParameter("upgrade_url", POSID)
+            .setParameter("upgrade_version", version)
+            .setParameter("devphyid", devphyid)
             .setParameter("sourcetype", "pos")
 
-        val signdata = params.getParameterString("version_package_id")
-        val resp = YktSession.getInstance().sendYktRequestPost("/common/apk/version", signdata, params)
-            ?: return UpgradeInfoRetBean(PublicDef.ERROR, "获取版本号网络超时")
+        val resp = YktSession.getInstance().sendYktRequestPost("/api/pos/globalparam", "", params)
+            ?: return UpgradeInfoRetBean(PublicDef.ERROR, "获取版本超时")
         if (resp.retcode != HttpStatus.SC_OK) {
-            return UpgradeInfoRetBean(resp.retcode, resp.retmsg!!)
+            return UpgradeInfoRetBean(resp.retcode, "获取版本错误码=${resp.retcode}")
         }
         return try {
             val bean = GsonUtil.GsonToBean(resp.retjson!!, UpgradeInfoRetBean::class.java)
+            if (bean.retcode != PublicDef.SUCCESS) {
+                return UpgradeInfoRetBean(resp.retcode, "获取版本错误=" + bean.retmsg)
+            }
             when {
-                TextUtils.isEmpty(bean.packageversion) -> UpgradeInfoRetBean(PublicDef.ERROR, "获取版本号为空")
-                TextUtils.isEmpty(bean.packageurl) -> UpgradeInfoRetBean(PublicDef.ERROR, "获取升级链接为空")
+                TextUtils.isEmpty(bean.upgrade_version) -> UpgradeInfoRetBean(PublicDef.ERROR, "获取版本为空")
+                TextUtils.isEmpty(bean.upgrade_url) -> UpgradeInfoRetBean(PublicDef.ERROR, "获取升级地址为空")
                 else -> bean
             }
         } catch (e: Exception) {
             e.printStackTrace()
-            UpgradeInfoRetBean(PublicDef.ERROR, "获取版本号JSON异常:${e.message}")
+            UpgradeInfoRetBean(PublicDef.ERROR, "获取版本JSON异常:${e.message}")
         }
     }
 
diff --git a/app/src/main/java/com/supwisdom/bean/UpgradeInfoRetBean.kt b/app/src/main/java/com/supwisdom/bean/UpgradeInfoRetBean.kt
index d32ccff..88f082f 100644
--- a/app/src/main/java/com/supwisdom/bean/UpgradeInfoRetBean.kt
+++ b/app/src/main/java/com/supwisdom/bean/UpgradeInfoRetBean.kt
@@ -4,7 +4,7 @@
  ** create by zzq on 2019/7/24
  ** @desc
  **/
-class UpgradeInfoRetBean constructor(retcode: Int, retmsg: String) : BaseResp(retcode, retmsg) {
-    var packageversion: String? = null
-    var packageurl: String? = null
+class UpgradeInfoRetBean constructor(retcode: Int, retmsg: String?) : BaseResp(retcode, retmsg) {
+    var upgrade_url: String? = null
+    var upgrade_version: String? = null
 }
\ No newline at end of file
