From 4b8e5f84e6889ba541ef69110919169bed959140 Mon Sep 17 00:00:00 2001 From: lvmeng <848755140@qq.com> Date: Wed, 3 Jun 2026 16:30:05 +0800 Subject: [PATCH] =?UTF-8?q?refactor(net):=20=E9=87=8D=E6=9E=84=E7=BD=91?= =?UTF-8?q?=E7=BB=9C=E8=AF=B7=E6=B1=82=E9=85=8D=E7=BD=AE=E4=BB=A5=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=8A=A8=E6=80=81=E5=9F=9F=E5=90=8D=E5=88=87=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 ApiServiceV2 中使用 @Url 注解实现动态 URL 配置 - 添加 DynamicBaseUrlInterceptor 拦截器用于实时替换基础 URL - 更新环境切换对话框中的环境名称和对应的 URL 映射关系 - 修改 UrlConfig 中的常量为变量并包含完整的基础 URL 路径 - 在 HttpManager 中为两个 API 服务实例都添加动态域名拦截器 - 调整环境配置常量定义顺序以匹配新的环境切换逻辑 --- .../shuwei/intelligent/shelves/GlobalData.kt | 6 ++--- .../shelves/base/EnvSwitchDialog.kt | 8 +++---- .../intelligent/shelves/net/ApiServiceV2.kt | 13 +++++++---- .../intelligent/shelves/net/HttpManager.kt | 23 ++++++++++++++++--- .../intelligent/shelves/net/UrlConfig.kt | 8 +++---- app/src/main/res/layout/dialog_env_switch.xml | 4 ++-- 6 files changed, 42 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/GlobalData.kt b/app/src/main/java/com/shuwei/intelligent/shelves/GlobalData.kt index b5f495e..fd9d10d 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/GlobalData.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/GlobalData.kt @@ -17,9 +17,9 @@ object GlobalData { /** * 具体业务 BaseUrl */ -// const val TEST_BASE_URL = "http://192.168.1.201:14801" - const val TEST_BASE_URL = "http://192.168.10.101:24801" - const val UAT_BASE_URL = "https://dev.yixiong-tech.com:8081" +// const val LOCAL_BASE_URL = "http://192.168.1.201:14801" + const val LOCAL_BASE_URL = "http://192.168.10.101:24801" + const val TEST_BASE_URL = "https://dev.yixiong-tech.com:8081" const val PROD_BASE_URL = "https://api.dm.yixiong-tech.com:8443" } diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/base/EnvSwitchDialog.kt b/app/src/main/java/com/shuwei/intelligent/shelves/base/EnvSwitchDialog.kt index 54288b2..e21820d 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/base/EnvSwitchDialog.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/base/EnvSwitchDialog.kt @@ -39,8 +39,8 @@ class EnvSwitchDialog( override fun initView() { // 根据当前 appBaseUrl 预选对应 RadioButton,不匹配则不选 when (GlobalData.appBaseUrl) { - GlobalData.TEST_BASE_URL -> binding.rbTest.isChecked = true - GlobalData.UAT_BASE_URL -> binding.rbUat.isChecked = true + GlobalData.LOCAL_BASE_URL -> binding.rbTest.isChecked = true + GlobalData.TEST_BASE_URL -> binding.rbUat.isChecked = true GlobalData.PROD_BASE_URL -> binding.rbProd.isChecked = true } @@ -55,8 +55,8 @@ class EnvSwitchDialog( return@setOnClickListener } val newUrl = when (binding.rgEnv.checkedRadioButtonId) { - binding.rbTest.id -> GlobalData.TEST_BASE_URL - binding.rbUat.id -> GlobalData.UAT_BASE_URL + binding.rbTest.id -> GlobalData.LOCAL_BASE_URL + binding.rbUat.id -> GlobalData.TEST_BASE_URL binding.rbProd.id -> GlobalData.PROD_BASE_URL else -> return@setOnClickListener } diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/net/ApiServiceV2.kt b/app/src/main/java/com/shuwei/intelligent/shelves/net/ApiServiceV2.kt index 7f99116..63912c0 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/net/ApiServiceV2.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/net/ApiServiceV2.kt @@ -8,6 +8,7 @@ import retrofit2.http.Body import retrofit2.http.GET import retrofit2.http.POST import retrofit2.http.Query +import retrofit2.http.Url interface ApiServiceV2 { @@ -15,24 +16,27 @@ interface ApiServiceV2 { * 4.1 货柜初始化 * 设备启动、Token 刷新后、首页重试时调用 */ - @GET(UrlConfig.CABINET_INIT) + @GET suspend fun initCabinet( + @Url url: String = UrlConfig.CABINET_INIT, @Query("cabinetId") cabinetId: String ): RespData /** * 4.2.1 净菜包下拉列表(itemType=1) */ - @GET(UrlConfig.CLEAN_PACKAGE_OPTIONS) + @GET suspend fun getCleanPackageOptions( + @Url url: String = UrlConfig.CLEAN_PACKAGE_OPTIONS, @Query("keyword") keyword: String? = null ): RespData> /** * 4.2.2 餐品净菜包下拉列表(itemType=2) */ - @GET(UrlConfig.MEAL_PACKAGE_OPTIONS) + @GET suspend fun getMealPackageOptions( + @Url url: String = UrlConfig.MEAL_PACKAGE_OPTIONS, @Query("keyword") keyword: String? = null ): RespData> @@ -40,8 +44,9 @@ interface ApiServiceV2 { * 4.3 全量同步整柜数据(定时上报) * 警告:body.goodsList 为 null 或空列表时,后端会软删除整柜所有格口数据 */ - @POST(UrlConfig.CABINET_RECORD_SYNC) + @POST suspend fun syncCabinetData( + @Url url: String = UrlConfig.CABINET_RECORD_SYNC, @Body body: SyncBody ): RespData } diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/net/HttpManager.kt b/app/src/main/java/com/shuwei/intelligent/shelves/net/HttpManager.kt index 577e486..83672ed 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/net/HttpManager.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/net/HttpManager.kt @@ -4,6 +4,8 @@ import android.annotation.SuppressLint import android.util.Log import com.shuwei.intelligent.shelves.BuildConfig import com.shuwei.intelligent.shelves.GlobalData +import okhttp3.HttpUrl +import okhttp3.HttpUrl.Companion.toHttpUrlOrNull import okhttp3.Interceptor import okhttp3.OkHttpClient import okhttp3.Response @@ -17,9 +19,22 @@ import java.security.SecureRandom import java.security.cert.X509Certificate import kotlin.apply +/** 动态域名拦截器:将 Retrofit 请求的 baseUrl 实时替换为 [GlobalData.appBaseUrl] */ +class DynamicBaseUrlInterceptor : Interceptor { + override fun intercept(chain: Interceptor.Chain): Response { + val request = chain.request() + val newUrl = GlobalData.appBaseUrl.toHttpUrlOrNull() ?: return chain.proceed(request) + val url = request.url.newBuilder() + .scheme(newUrl.scheme) + .host(newUrl.host) + .port(newUrl.port) + .build() + return chain.proceed(request.newBuilder().url(url).build()) + } +} + val apiService: ApiService = Retrofit.Builder() -// .baseUrl(UrlConfig.BASE_URL) - .baseUrl(GlobalData.appBaseUrl) + .baseUrl("http://placeholder/") .client(HttpManager.instance.client) .addConverterFactory(GsonConverterFactory.create()) .build() @@ -27,7 +42,7 @@ val apiService: ApiService = Retrofit.Builder() /** v1.1 接口专用实例,使用轻量拦截器,不携带旧鉴权 Token */ val apiServiceV2: ApiServiceV2 = Retrofit.Builder() - .baseUrl(GlobalData.appBaseUrl) + .baseUrl("http://placeholder/") .client(HttpManager.instance.cabinetClient) .addConverterFactory(GsonConverterFactory.create()) .build() @@ -43,6 +58,7 @@ class HttpManager private constructor() { sslSocketFactory(createSSLSocketFactory(), TrustAllCerts()) hostnameVerifier { _, _ -> true } // addInterceptor(LoggingInterceptor()) + addInterceptor(DynamicBaseUrlInterceptor()) addNetworkInterceptor(HttpLoggingInterceptor(logger = { Log.d("HttpManager","okhttp logger ==>${it}") }).apply { @@ -73,6 +89,7 @@ class HttpManager private constructor() { writeTimeout(30, TimeUnit.SECONDS) sslSocketFactory(createSSLSocketFactory(), TrustAllCerts()) hostnameVerifier { _, _ -> true } + addInterceptor(DynamicBaseUrlInterceptor()) addNetworkInterceptor(HttpLoggingInterceptor(logger = { Log.d("HttpManager", "v2 okhttp ==>${it}") }).apply { diff --git a/app/src/main/java/com/shuwei/intelligent/shelves/net/UrlConfig.kt b/app/src/main/java/com/shuwei/intelligent/shelves/net/UrlConfig.kt index 2d80812..f209440 100644 --- a/app/src/main/java/com/shuwei/intelligent/shelves/net/UrlConfig.kt +++ b/app/src/main/java/com/shuwei/intelligent/shelves/net/UrlConfig.kt @@ -28,10 +28,10 @@ object UrlConfig { "${GlobalData.appBaseUrl}/terminal/neglect/smartShelves/app/smartShelves/app/saveShelvesGoodsList" // v1.1 新接口 - const val CABINET_INIT = "/nutrition/neglect/cabinet/init" - const val CLEAN_PACKAGE_OPTIONS = "/nutrition/neglect/cabinet/clean-package-options" - const val MEAL_PACKAGE_OPTIONS = "/nutrition/neglect/cabinet/meal-package-options" - const val CABINET_RECORD_SYNC = "/nutrition/neglect/cabinet/record/sync" + var CABINET_INIT = "${GlobalData.appBaseUrl}/nutrition/neglect/cabinet/init" + var CLEAN_PACKAGE_OPTIONS = "${GlobalData.appBaseUrl}/nutrition/neglect/cabinet/clean-package-options" + var MEAL_PACKAGE_OPTIONS = "${GlobalData.appBaseUrl}/nutrition/neglect/cabinet/meal-package-options" + var CABINET_RECORD_SYNC = "${GlobalData.appBaseUrl}/nutrition/neglect/cabinet/record/sync" } diff --git a/app/src/main/res/layout/dialog_env_switch.xml b/app/src/main/res/layout/dialog_env_switch.xml index 88e121c..ebbc188 100644 --- a/app/src/main/res/layout/dialog_env_switch.xml +++ b/app/src/main/res/layout/dialog_env_switch.xml @@ -38,7 +38,7 @@ android:layout_height="72dp" android:gravity="center_vertical" android:paddingStart="16dp" - android:text="测试环境" + android:text="本地环境" android:textColor="#ff141428" android:textSize="28sp" /> @@ -48,7 +48,7 @@ android:layout_height="72dp" android:gravity="center_vertical" android:paddingStart="16dp" - android:text="UAT 环境" + android:text="测试环境" android:textColor="#ff141428" android:textSize="28sp" />