feat: 国际出港查询详情 opt

This commit is contained in:
2025-12-04 10:46:49 +08:00
parent 247b72b7e8
commit 08f814531c
6 changed files with 110 additions and 35 deletions

View File

@@ -446,7 +446,7 @@ interface Api {
* 参数: maWbId (Long)
*/
@POST("IntExpSearch/detail")
suspend fun getGjcQueryDetails(@Body data: RequestBody): BaseResultBean<Map<String, Any>>
suspend fun getGjcQueryDetails(@Query("maWbId") maWbId: Long): BaseResultBean<Map<String, Any>>
/**
* 国际出港板箱过磅-分页搜索

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@android:color/white" />
<corners
android:bottomLeftRadius="8dp"
android:bottomRightRadius="8dp" />
</shape>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@android:color/white" />
<corners
android:topLeftRadius="8dp"
android:topRightRadius="8dp" />
</shape>

View File

@@ -10,7 +10,6 @@ import com.lukouguoji.module_base.common.Constant
import com.lukouguoji.module_base.http.net.NetApply
import com.lukouguoji.module_base.ktx.launchLoadingCollect
import com.lukouguoji.module_base.ktx.showToast
import com.lukouguoji.module_base.ktx.toRequestBody
/**
* 国际出港查询详情-ViewModel
@@ -26,6 +25,15 @@ class GjcQueryDetailsViewModel : BaseViewModel() {
// ==================== 详情数据 ====================
val detailData = MutableLiveData<Map<String, Any>>(emptyMap())
// 运单信息 (maWb)
val maWbData = MutableLiveData<Map<String, Any>>(emptyMap())
// 仓库列表 (warehouseList)
val warehouseList = MutableLiveData<List<Map<String, Any>>>(emptyList())
// 库位列表 (storageUseList)
val storageUseList = MutableLiveData<List<Map<String, Any>>>(emptyList())
// ==================== Fragment列表 ====================
val fragmentList by lazy {
listOf(
@@ -60,11 +68,53 @@ class GjcQueryDetailsViewModel : BaseViewModel() {
return
}
val params = mapOf("maWbId" to maWbId.toLongOrNull()).toRequestBody()
val maWbIdValue = maWbId.toLongOrNull()
if (maWbIdValue == null) {
showToast("运单ID格式错误")
return
}
launchLoadingCollect({ NetApply.api.getGjcQueryDetails(params) }) {
launchLoadingCollect({ NetApply.api.getGjcQueryDetails(maWbIdValue) }) {
onSuccess = { result ->
detailData.value = result.data ?: emptyMap()
val data = result.data ?: emptyMap()
detailData.value = data
// 解析 maWb 对象
@Suppress("UNCHECKED_CAST")
val maWb = data["maWb"] as? Map<String, Any> ?: emptyMap()
// 解析 maWbM 对象 (包含海关报文等信息)
@Suppress("UNCHECKED_CAST")
val maWbM = data["maWbM"] as? Map<String, Any> ?: emptyMap()
// 合并 maWb 和 maWbM 的数据,并添加组合字段
val mergedData = mutableMapOf<String, Any>()
mergedData.putAll(maWb)
mergedData.putAll(maWbM)
// 添加组合字段: wbNo = prefix + no
val prefix = maWb["prefix"] as? String ?: ""
val no = maWb["no"] as? String ?: ""
if (prefix.isNotEmpty() || no.isNotEmpty()) {
mergedData["wbNo"] = "$prefix-$no"
}
// 字段映射: cmdStatus -> customsCommand
maWbM["cmdStatus"]?.let {
mergedData["customsCommand"] = it
}
maWbData.value = mergedData
// 解析 warehouseList 列表
@Suppress("UNCHECKED_CAST")
val whList = data["warehouseList"] as? List<Map<String, Any>> ?: emptyList()
warehouseList.value = whList
// 解析 storageUseList 列表
@Suppress("UNCHECKED_CAST")
val suList = data["storageUseList"] as? List<Map<String, Any>> ?: emptyList()
storageUseList.value = suList
}
}
}

View File

@@ -3,7 +3,9 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
<variable
name="viewModel"
type="com.lukouguoji.gjc.viewModel.GjcQueryDetailsViewModel" />
@@ -22,14 +24,15 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@color/white"
android:layout_marginHorizontal="15dp"
android:layout_marginTop="15dp"
android:background="@drawable/bg_white_radius_top_8"
android:orientation="horizontal">
<!-- Tab1: 运单信息 -->
<LinearLayout
android:layout_width="0dp"
android:layout_width="100dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:onClick="@{()->viewModel.onTabClick(0)}"
android:orientation="vertical">
@@ -40,6 +43,7 @@
android:layout_weight="1"
android:gravity="center"
android:text="运单信息"
android:textStyle="bold"
android:textColor="@{viewModel.currentTab == 0 ? @color/colorPrimary : @color/text_gray}"
android:textSize="16sp" />
@@ -53,9 +57,8 @@
<!-- Tab2: 仓库信息 -->
<LinearLayout
android:layout_width="0dp"
android:layout_width="100dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:onClick="@{()->viewModel.onTabClick(1)}"
android:orientation="vertical">
@@ -65,6 +68,7 @@
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:textStyle="bold"
android:text="仓库信息"
android:textColor="@{viewModel.currentTab == 1 ? @color/colorPrimary : @color/text_gray}"
android:textSize="16sp" />
@@ -78,9 +82,8 @@
<!-- Tab3: 库位信息 -->
<LinearLayout
android:layout_width="0dp"
android:layout_width="100dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:onClick="@{()->viewModel.onTabClick(2)}"
android:orientation="vertical">
@@ -90,6 +93,7 @@
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:textStyle="bold"
android:text="库位信息"
android:textColor="@{viewModel.currentTab == 2 ? @color/colorPrimary : @color/text_gray}"
android:textSize="16sp" />
@@ -103,6 +107,12 @@
</LinearLayout>
<com.google.android.material.divider.MaterialDivider
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginHorizontal="15dp"
android:background="@color/color_f2" />
<!-- ViewPager2 -->
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/vp"

View File

@@ -19,13 +19,14 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="15dp">
android:paddingHorizontal="15dp"
android:paddingBottom="15dp">
<!-- 运单信息卡片 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_white_radius_8"
android:background="@drawable/bg_white_radius_bottom_8"
android:orientation="vertical"
android:padding="15dp">
@@ -43,7 +44,7 @@
title='@{"运单号"}'
titleLength="@{5}"
type="@{DataLayoutType.INPUT}"
value='@{(String)viewModel.detailData.get("wbNo")}' />
value='@{(String)viewModel.maWbData.get("wbNo")}' />
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
android:layout_width="0dp"
@@ -53,7 +54,7 @@
title='@{"代理人"}'
titleLength="@{5}"
type="@{DataLayoutType.INPUT}"
value='@{(String)viewModel.detailData.get("agentName")}' />
value='@{(String)viewModel.maWbData.get("agentName")}' />
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
android:layout_width="0dp"
@@ -63,7 +64,7 @@
title='@{"特码"}'
titleLength="@{5}"
type="@{DataLayoutType.INPUT}"
value='@{(String)viewModel.detailData.get("spCode")}' />
value='@{(String)viewModel.maWbData.get("spCode")}' />
</LinearLayout>
@@ -82,7 +83,7 @@
title='@{"运单件数"}'
titleLength="@{5}"
type="@{DataLayoutType.INPUT}"
value='@{String.valueOf(viewModel.detailData.get("pc"))}' />
value='@{String.valueOf(viewModel.maWbData.get("pc"))}' />
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
android:layout_width="0dp"
@@ -92,7 +93,7 @@
title='@{"运单重量"}'
titleLength="@{5}"
type="@{DataLayoutType.INPUT}"
value='@{String.valueOf(viewModel.detailData.get("weight"))}' />
value='@{String.valueOf(viewModel.maWbData.get("weight"))}' />
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
android:layout_width="0dp"
@@ -102,7 +103,7 @@
title='@{"体积"}'
titleLength="@{5}"
type="@{DataLayoutType.INPUT}"
value='@{String.valueOf(viewModel.detailData.get("volume"))}' />
value='@{String.valueOf(viewModel.maWbData.get("volume"))}' />
</LinearLayout>
@@ -121,7 +122,7 @@
title='@{"包装类型"}'
titleLength="@{5}"
type="@{DataLayoutType.INPUT}"
value='@{(String)viewModel.detailData.get("packageType")}' />
value='@{(String)viewModel.maWbData.get("packageType")}' />
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
android:layout_width="0dp"
@@ -131,7 +132,7 @@
title='@{"运单类型"}'
titleLength="@{5}"
type="@{DataLayoutType.INPUT}"
value='@{(String)viewModel.detailData.get("awbName")}' />
value='@{(String)viewModel.maWbData.get("awbName")}' />
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
android:layout_width="0dp"
@@ -141,7 +142,7 @@
title='@{"业务类型"}'
titleLength="@{5}"
type="@{DataLayoutType.INPUT}"
value='@{(String)viewModel.detailData.get("businessName")}' />
value='@{(String)viewModel.maWbData.get("businessName")}' />
</LinearLayout>
@@ -159,7 +160,7 @@
title='@{"品名(英)"}'
titleLength="@{5}"
type="@{DataLayoutType.INPUT}"
value='@{(String)viewModel.detailData.get("goods")}' />
value='@{(String)viewModel.maWbData.get("goods")}' />
</LinearLayout>
@@ -177,7 +178,7 @@
title='@{"品名(中)"}'
titleLength="@{5}"
type="@{DataLayoutType.INPUT}"
value='@{(String)viewModel.detailData.get("goodsCn")}' />
value='@{(String)viewModel.maWbData.get("goodsCn")}' />
</LinearLayout>
@@ -196,7 +197,7 @@
title='@{"海关指令"}'
titleLength="@{5}"
type="@{DataLayoutType.INPUT}"
value='@{(String)viewModel.detailData.get("customsCommand")}' />
value='@{(String)viewModel.maWbData.get("customsCommand")}' />
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
android:layout_width="0dp"
@@ -206,7 +207,7 @@
title='@{"预配舱单"}'
titleLength="@{5}"
type="@{DataLayoutType.INPUT}"
value='@{(String)viewModel.detailData.get("mftStatus")}' />
value='@{(String)viewModel.maWbData.get("mftStatus")}' />
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
android:layout_width="0dp"
@@ -216,7 +217,7 @@
title='@{"运抵报告"}'
titleLength="@{5}"
type="@{DataLayoutType.INPUT}"
value='@{(String)viewModel.detailData.get("arrivalStatus")}' />
value='@{(String)viewModel.maWbData.get("arrivalStatus")}' />
</LinearLayout>
@@ -235,7 +236,7 @@
title='@{"装载舱单"}'
titleLength="@{5}"
type="@{DataLayoutType.INPUT}"
value='@{(String)viewModel.detailData.get("loadStatus")}' />
value='@{(String)viewModel.maWbData.get("loadStatus")}' />
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
android:layout_width="0dp"
@@ -245,7 +246,7 @@
title='@{"理货报告"}'
titleLength="@{5}"
type="@{DataLayoutType.INPUT}"
value='@{(String)viewModel.detailData.get("tallyStatus")}' />
value='@{(String)viewModel.maWbData.get("tallyStatus")}' />
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
android:layout_width="0dp"
@@ -255,7 +256,7 @@
title='@{"入库时间"}'
titleLength="@{5}"
type="@{DataLayoutType.INPUT}"
value='@{(String)viewModel.detailData.get("opDate")}' />
value='@{(String)viewModel.maWbData.get("opDate")}' />
</LinearLayout>
@@ -274,7 +275,7 @@
title='@{"省直辖市"}'
titleLength="@{5}"
type="@{DataLayoutType.INPUT}"
value='@{(String)viewModel.detailData.get("proName")}' />
value='@{(String)viewModel.maWbData.get("proName")}' />
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
android:layout_width="0dp"
@@ -284,7 +285,7 @@
title='@{"地级市"}'
titleLength="@{5}"
type="@{DataLayoutType.INPUT}"
value='@{(String)viewModel.detailData.get("cityName")}' />
value='@{(String)viewModel.maWbData.get("cityName")}' />
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
android:layout_width="0dp"
@@ -294,7 +295,7 @@
title='@{"行政区"}'
titleLength="@{5}"
type="@{DataLayoutType.INPUT}"
value='@{(String)viewModel.detailData.get("areaName")}' />
value='@{(String)viewModel.maWbData.get("areaName")}' />
</LinearLayout>
@@ -308,7 +309,7 @@
title='@{"备注"}'
titleLength="@{5}"
type="@{DataLayoutType.INPUT}"
value='@{(String)viewModel.detailData.get("remark")}' />
value='@{(String)viewModel.maWbData.get("remark")}' />
</LinearLayout>