Browse Source

入库提升

flower_mr 1 tháng trước cách đây
mục cha
commit
390494f2da

+ 9 - 0
app/src/main/java/com/example/pda/navigation/NavGraph.kt

@@ -13,6 +13,7 @@ import com.example.pda.ui.PingScreen
 import com.example.pda.ui.ContainerScreen
 import com.example.pda.ui.LoginScreen
 import com.example.pda.ui.SettingScreen
+import com.example.pda.ui.UpStationScreen
 
 // 定义应用程序的导航图
 fun NavGraphBuilder.appNavGraph(navController: NavController) {
@@ -38,6 +39,14 @@ fun NavGraphBuilder.appNavGraph(navController: NavController) {
                 onInventoryScan = { navController.navigate("scan") }, // 点击扫描按钮时导航到 "scan" 路由
                 onShelfScan = { navController.navigate("container") }, // 点击扫描按钮时导航到 "scan" 路由
                 onSetScreen = { navController.navigate("set") }, //
+                onUpStationScreen = { navController.navigate("upstation")},
+            )
+        }
+        composable("upstation") {
+            UpStationScreen (
+                onBack = {navController.popBackStack()} ,
+                onSetScreen = { navController.navigate("set") }, //
+
             )
         }
         composable("ping") {

+ 0 - 1
app/src/main/java/com/example/pda/network/ApiService.kt

@@ -31,5 +31,4 @@ interface ApiService {
         @QueryMap params: Map<String, String>
     ): Response<BaseResponse<List<InventoryItem>>>
 
-
 }

+ 20 - 0
app/src/main/java/com/example/pda/network/ApiWCS.kt

@@ -0,0 +1,20 @@
+package com.example.pda.network
+
+import retrofit2.Response
+import retrofit2.http.Body
+import retrofit2.http.GET
+import retrofit2.http.POST
+import retrofit2.http.QueryMap
+
+// 定义了一个接口 ApiService,用于与服务器进行库存相关的网络请求
+interface ApiWCS {
+
+    @POST("/wcs/WebApi/confirmIn")
+    suspend fun upstation(
+
+    )
+
+    // 提交库存数据到服务器的接口
+
+
+}

+ 38 - 0
app/src/main/java/com/example/pda/network/HttpClientWCS.kt

@@ -0,0 +1,38 @@
+package com.example.pda.network
+
+import okhttp3.Interceptor
+import okhttp3.OkHttpClient
+import okhttp3.logging.HttpLoggingInterceptor
+import java.util.concurrent.TimeUnit
+
+object HttpClientWCS {
+    // 动态 Token 存储(volatile 保证多线程可见性)
+    @Volatile
+
+    var deviceId: Number = 0
+
+    // 认证拦截器(私有保证内部管理)
+    private val queryParamsInterceptor = Interceptor { chain ->
+        val originalRequest = chain.request()
+        val newUrl = originalRequest.url.newBuilder().apply {
+            if(deviceId !=0)
+            { addQueryParameter("equipmentNumber", deviceId.toString()) }
+
+
+        }.build()
+        chain.proceed(originalRequest.newBuilder().url(newUrl).build())
+    }
+
+    // 带动态equipmentNumber  的 OkHttpClient
+    val instance: OkHttpClient by lazy {
+        OkHttpClient.Builder()
+            .connectTimeout(1, TimeUnit.SECONDS)
+            .readTimeout(1, TimeUnit.SECONDS)
+            .writeTimeout(1, TimeUnit.SECONDS)
+            .addInterceptor(queryParamsInterceptor)
+            .addInterceptor(HttpLoggingInterceptor().apply {
+                level = HttpLoggingInterceptor.Level.BODY // 后添加日志拦截器
+            })
+            .build()
+    }
+}

+ 27 - 0
app/src/main/java/com/example/pda/network/NetworkWCS.kt

@@ -0,0 +1,27 @@
+package com.example.pda.network
+
+import android.util.Log
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+
+
+// 网络请求助手对象,用于处理与服务器的交互
+object NetworkWCS {
+    private const val TAG = "NetworkWCS"
+
+    fun upstation(){
+        // 在IO线程中启动协程以执行网络请求
+        CoroutineScope(Dispatchers.IO).launch {
+            try {
+                // 调用RetrofitClient的submitInventory方法提交数据
+                val response = RetrofitWCS.instance.upstation()
+
+            } catch (e: Exception) {
+                // 捕获异常并记录日志,之后调用错误回调并传递异常本地化信息
+                Log.e(NetworkWCS.TAG, "Submit failed", e)
+
+            }
+        }
+    }
+}

+ 1 - 1
app/src/main/java/com/example/pda/network/RetrofitClient.kt

@@ -6,7 +6,7 @@ import com.example.pda.model.AppPrefs
 // RetrofitClient 对象用于创建和管理 Retrofit 实例
 object RetrofitClient {
     // 私有常量 BASE_URL 定义了 API 的基础 URL
-    private const val BASE_URL = "http://192.168.18.91:8008/"
+    private const val BASE_URL = "http://192.168.18.69:8008/"
 
 
     // val instance 通过 lazy 委托实现懒加载,创建 ApiService 的单例实例

+ 19 - 0
app/src/main/java/com/example/pda/network/RetrofitWCS.kt

@@ -0,0 +1,19 @@
+package com.example.pda.network
+
+import retrofit2.Retrofit
+import retrofit2.converter.gson.GsonConverterFactory
+
+object RetrofitWCS {
+    // 私有常量 BASE_URL 定义了 API 的基础 URL
+    private const val BASE_URL = "http://192.168.18.67:1616/"
+    // val instance 通过 lazy 委托实现懒加载,创建 ApiService 的单例实例
+    val instance: ApiWCS by lazy {
+        Retrofit.Builder()
+            .baseUrl(BASE_URL)
+            .client(HttpClientWCS.instance)
+            .addConverterFactory(GsonConverterFactory.create())
+            .build()
+            .create(ApiWCS::class.java)
+    }
+}
+

+ 20 - 1
app/src/main/java/com/example/pda/ui/MainScreen.kt

@@ -20,7 +20,8 @@ import com.example.pda.network.HttpClient
 fun MainScreen(
     onInventoryScan: () -> Unit,
     onShelfScan: () -> Unit,
-    onSetScreen: () -> Unit
+    onSetScreen: () -> Unit,
+    onUpStationScreen:() ->Unit,
 ) {
     LaunchedEffect(Unit) {
         // 在登录成功后调用
@@ -90,6 +91,24 @@ fun MainScreen(
                             ) 
                         }
                 )
+                ExtendedFloatingActionButton(
+                    onClick = onUpStationScreen,
+                    modifier = Modifier.size(220.dp, 70.dp),
+                    containerColor = Color(0xFFFDECD0),
+                    icon = {
+                        Icon(
+                            painter = painterResource(id = R.drawable.ic_scan),
+                            contentDescription = "入库扫描"
+                        )
+                    },
+                    text = {
+                        Text(
+                            text = "落地提升",
+                            fontSize = 18.sp,
+                            color = MaterialTheme.colorScheme.onSurface
+                        )
+                    }
+                )
                 ExtendedFloatingActionButton(
                     onClick = onShelfScan,
                     modifier = Modifier.size(220.dp, 70.dp),

+ 126 - 0
app/src/main/java/com/example/pda/ui/UpStationScreen.kt

@@ -0,0 +1,126 @@
+package com.example.pda.ui
+
+import androidx.compose.foundation.layout.*
+import androidx.compose.material3.*
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.foundation.background
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.ArrowBack
+
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+
+import com.example.pda.R
+import com.example.pda.network.HttpClientWCS
+import com.example.pda.network.NetworkWCS
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun UpStationScreen(
+    onBack: () -> Unit,
+    onSetScreen: () -> Unit
+) {
+    Scaffold(
+        topBar = {
+            TopAppBar(
+                navigationIcon = {
+                    IconButton(onClick = onBack) {
+                        Icon(
+                            imageVector = Icons.Default.ArrowBack,
+                            contentDescription = "返回"
+                        )
+                    }
+                },
+                title = {
+                    Row(verticalAlignment = Alignment.CenterVertically) {
+                        Icon(
+                            painter = painterResource(id = R.drawable.logo),
+                            contentDescription = "PDA Logo",
+                            modifier = Modifier.size(40.dp),
+                            tint = MaterialTheme.colorScheme.surfaceTint
+                        )
+                        Spacer(Modifier.width(8.dp))
+                        Text("信泰PDA扫描系统")
+                    }
+                },
+                colors = TopAppBarDefaults.topAppBarColors(
+                    containerColor = Color(0xFFBCD0C5), // 自定义颜色
+                    titleContentColor = MaterialTheme.colorScheme.onPrimary,
+                    actionIconContentColor = MaterialTheme.colorScheme.onPrimary
+                ),
+                actions = {
+                    IconButton(onClick = { onSetScreen() }) {
+                        Icon(
+                            painter = painterResource(id = R.drawable.ic_settings),
+                            contentDescription = "Settings",
+                            tint = MaterialTheme.colorScheme.onSurface
+                        )
+                    }
+                },
+            )
+        }
+    ) { innerPadding ->
+        Box(
+            modifier = Modifier
+                .padding(innerPadding)
+                .fillMaxSize()
+                .background(Color(0xFFE6E6EB)),
+            contentAlignment = Alignment.Center
+
+        ) {
+
+            Column(
+                horizontalAlignment = Alignment.CenterHorizontally,
+                verticalArrangement = Arrangement.spacedBy(60.dp)
+            ) {
+                ExtendedFloatingActionButton(
+                    onClick ={
+                        HttpClientWCS.deviceId = 201
+                        NetworkWCS.upstation()
+                    } ,
+                    modifier = Modifier.size(220.dp, 70.dp),
+                    containerColor = Color(0xFFFDECD0),
+                    icon = {
+                        Icon(
+                            painter = painterResource(id = R.drawable.ic_scan),
+                            contentDescription = "入库扫描"
+                        )
+                    },
+                    text = {
+                        Text(
+                            text = "出库提升",
+                            fontSize = 18.sp,
+                            color = MaterialTheme.colorScheme.onSurface
+                        )
+                    }
+                )
+                ExtendedFloatingActionButton(
+                    onClick = {
+                        HttpClientWCS.deviceId = 101
+                        NetworkWCS.upstation()
+                    },
+                    modifier = Modifier.size(220.dp, 70.dp),
+                    containerColor = Color(0xFF91BFBF),
+                    icon = {
+                        Icon(
+                            painter = painterResource(id = R.drawable.ic_scan),
+                            contentDescription = "托盘扫描"
+                        )
+                    },
+                    text = {
+                        Text(
+                            text = "入库提升",
+                            fontSize = 20.sp,
+                            color = MaterialTheme.colorScheme.onSurface
+                        )
+                    }
+                )
+            }
+
+        }
+    }
+}