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..38cbf5a 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,6 +26,7 @@
  **/
 @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
@@ -132,7 +134,10 @@
      */
     fun asyncUpgrade() {
         ThreadPool.getDownloadPool().execute(Runnable {
-            EpayUpgradeApi(upgradeApiCallback).upgrade(CommonUtil.getVersionName(this))
+            EpayUpgradeApi(upgradeApiCallback).upgrade(
+                pos.getConfigPara()!!.devphyid!!,
+                CommonUtil.getVersionName(this)
+            )
         })
     }
 
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..2225779 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
@@ -23,8 +23,8 @@
     private val callbackInterface = 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!!)
             return
@@ -34,10 +34,10 @@
             callbackInterface.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 {
@@ -141,22 +141,23 @@
         }
     }
 
-    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)
+        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.retmsg)
         }
         return try {
             val bean = GsonUtil.GsonToBean(resp.retjson!!, UpgradeInfoRetBean::class.java)
             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) {
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
