feat: 国际出港查询新增日期类型与航班航次统计
- 合计栏在总重量后追加航班航次(取统计接口 flightNumber) - 日期范围前新增日期类型下拉(入库/离港),对应接口 dateState 参数 - 航班号从筛选弹框移至列表上方,出库状态移入筛选弹框 - dateState、outState 按接口文档改为整型传参 原航班号查询无效的原因并非参数名有误(fno 与文档一致), 而是缺少 dateState 导致后端按默认日期口径过滤,补齐后已实测生效。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -54,7 +54,7 @@ class GjcQueryActivity :
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 航班号:大写字母+数字
|
// 航班号:大写字母+数字
|
||||||
binding.filterPanel.filterFlightNo.et.setUpperCaseAlphanumericFilter()
|
binding.flightNoSearch.et.setUpperCaseAlphanumericFilter()
|
||||||
// 目的港:仅大写字母
|
// 目的港:仅大写字母
|
||||||
binding.filterPanel.filterDest.et.setUpperCaseLetterFilter()
|
binding.filterPanel.filterDest.et.setUpperCaseLetterFilter()
|
||||||
|
|
||||||
|
|||||||
@@ -25,13 +25,22 @@ import com.lukouguoji.module_base.ktx.formatDate
|
|||||||
class GjcQueryViewModel : BasePageViewModel() {
|
class GjcQueryViewModel : BasePageViewModel() {
|
||||||
|
|
||||||
// ==================== 搜索条件 ====================
|
// ==================== 搜索条件 ====================
|
||||||
|
val dateState = MutableLiveData("0") // 日期类型(0:入库,1:离港)
|
||||||
val flightDateStart = MutableLiveData<String>(DateUtils.getCurrentTime().formatDate()) // 航班日期起
|
val flightDateStart = MutableLiveData<String>(DateUtils.getCurrentTime().formatDate()) // 航班日期起
|
||||||
val flightDateEnd = MutableLiveData("") // 航班日期止
|
val flightDateEnd = MutableLiveData("") // 航班日期止
|
||||||
val agentId = MutableLiveData("") // 代理ID
|
val agentId = MutableLiveData("") // 代理ID
|
||||||
val outStatus = MutableLiveData("") // 出库状态
|
val flightNo = MutableLiveData("") // 航班号
|
||||||
val waybillNo = MutableLiveData("") // 运单号
|
val waybillNo = MutableLiveData("") // 运单号
|
||||||
|
|
||||||
// ==================== 下拉列表 ====================
|
// ==================== 下拉列表 ====================
|
||||||
|
// 日期类型下拉列表(对应接口 dateState)
|
||||||
|
val dateStateList = MutableLiveData(
|
||||||
|
listOf(
|
||||||
|
KeyValue("入库", "0"),
|
||||||
|
KeyValue("离港", "1")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
// 代理下拉列表(从API获取)
|
// 代理下拉列表(从API获取)
|
||||||
val agentList = MutableLiveData(listOf(KeyValue("全部", "")))
|
val agentList = MutableLiveData(listOf(KeyValue("全部", "")))
|
||||||
|
|
||||||
@@ -52,6 +61,7 @@ class GjcQueryViewModel : BasePageViewModel() {
|
|||||||
val totalCount = MutableLiveData("0") // 合计票数
|
val totalCount = MutableLiveData("0") // 合计票数
|
||||||
val totalPc = MutableLiveData("0") // 总件数
|
val totalPc = MutableLiveData("0") // 总件数
|
||||||
val totalWeight = MutableLiveData("0") // 总重量
|
val totalWeight = MutableLiveData("0") // 总重量
|
||||||
|
val totalFlightNumber = MutableLiveData("0") // 航班航次
|
||||||
|
|
||||||
// ==================== 筛选面板 ====================
|
// ==================== 筛选面板 ====================
|
||||||
val filterVisible = MutableLiveData(false)
|
val filterVisible = MutableLiveData(false)
|
||||||
@@ -70,7 +80,7 @@ class GjcQueryViewModel : BasePageViewModel() {
|
|||||||
|
|
||||||
// ==================== 筛选条件 ====================
|
// ==================== 筛选条件 ====================
|
||||||
val spCode = MutableLiveData("") // 特码
|
val spCode = MutableLiveData("") // 特码
|
||||||
val flightNo = MutableLiveData("") // 航班号
|
val outStatus = MutableLiveData("") // 出库状态
|
||||||
val dest = MutableLiveData("") // 目的港
|
val dest = MutableLiveData("") // 目的港
|
||||||
val awbType = MutableLiveData("") // 运单类型
|
val awbType = MutableLiveData("") // 运单类型
|
||||||
val businessType = MutableLiveData("") // 业务类型
|
val businessType = MutableLiveData("") // 业务类型
|
||||||
@@ -79,11 +89,11 @@ class GjcQueryViewModel : BasePageViewModel() {
|
|||||||
// 是否有筛选条件(任意一个非空则为 true,用于筛选按钮红点)
|
// 是否有筛选条件(任意一个非空则为 true,用于筛选按钮红点)
|
||||||
val hasFilter: MediatorLiveData<Boolean> = MediatorLiveData<Boolean>().apply {
|
val hasFilter: MediatorLiveData<Boolean> = MediatorLiveData<Boolean>().apply {
|
||||||
val update = { _: Any? ->
|
val update = { _: Any? ->
|
||||||
value = listOf(spCode, flightNo, dest, awbType, businessType, goodsCn)
|
value = listOf(spCode, outStatus, dest, awbType, businessType, goodsCn)
|
||||||
.any { !it.value.isNullOrEmpty() }
|
.any { !it.value.isNullOrEmpty() }
|
||||||
}
|
}
|
||||||
addSource(spCode, update)
|
addSource(spCode, update)
|
||||||
addSource(flightNo, update)
|
addSource(outStatus, update)
|
||||||
addSource(dest, update)
|
addSource(dest, update)
|
||||||
addSource(awbType, update)
|
addSource(awbType, update)
|
||||||
addSource(businessType, update)
|
addSource(businessType, update)
|
||||||
@@ -127,7 +137,7 @@ class GjcQueryViewModel : BasePageViewModel() {
|
|||||||
*/
|
*/
|
||||||
fun resetFilter() {
|
fun resetFilter() {
|
||||||
spCode.value = ""
|
spCode.value = ""
|
||||||
flightNo.value = ""
|
outStatus.value = ""
|
||||||
dest.value = ""
|
dest.value = ""
|
||||||
awbType.value = ""
|
awbType.value = ""
|
||||||
businessType.value = ""
|
businessType.value = ""
|
||||||
@@ -160,39 +170,32 @@ class GjcQueryViewModel : BasePageViewModel() {
|
|||||||
* 核心方法:调用API获取数据并转换PageInfo为BaseListBean
|
* 核心方法:调用API获取数据并转换PageInfo为BaseListBean
|
||||||
*/
|
*/
|
||||||
override fun getData() {
|
override fun getData() {
|
||||||
|
// 公共查询条件(列表与统计接口共用)
|
||||||
|
val commonParams = mapOf(
|
||||||
|
// 日期类型(0:入库,1:离港)+ 日期范围
|
||||||
|
"dateState" to dateState.value?.ifEmpty { null }?.toIntOrNull(),
|
||||||
|
"beginDate" to flightDateStart.value?.ifEmpty { null },
|
||||||
|
"endDate" to flightDateEnd.value?.ifEmpty { null },
|
||||||
|
"agentCode" to agentId.value?.ifEmpty { null },
|
||||||
|
"fno" to flightNo.value?.ifEmpty { null },
|
||||||
|
"wbNo" to waybillNo.value?.ifEmpty { null },
|
||||||
|
// 筛选面板条件
|
||||||
|
"spCode" to spCode.value?.ifEmpty { null },
|
||||||
|
"outState" to outStatus.value?.ifEmpty { null }?.toIntOrNull(),
|
||||||
|
"dest" to dest.value?.ifEmpty { null },
|
||||||
|
"awbType" to awbType.value?.ifEmpty { null },
|
||||||
|
"businessType" to businessType.value?.ifEmpty { null },
|
||||||
|
"goodsCn" to goodsCn.value?.ifEmpty { null }
|
||||||
|
)
|
||||||
|
|
||||||
// 构建查询参数(列表接口)
|
// 构建查询参数(列表接口)
|
||||||
val listParams = mapOf(
|
val listParams = (commonParams + mapOf(
|
||||||
"pageNum" to pageModel.page,
|
"pageNum" to pageModel.page,
|
||||||
"pageSize" to pageModel.limit,
|
"pageSize" to pageModel.limit
|
||||||
"beginDate" to flightDateStart.value!!.ifEmpty { null },
|
)).toRequestBody()
|
||||||
"endDate" to flightDateEnd.value!!.ifEmpty { null },
|
|
||||||
"agentCode" to agentId.value!!.ifEmpty { null },
|
|
||||||
"outState" to outStatus.value!!.ifEmpty { null },
|
|
||||||
"wbNo" to waybillNo.value!!.ifEmpty { null },
|
|
||||||
// 筛选条件(暂未使用)
|
|
||||||
"spCode" to spCode.value!!.ifEmpty { null },
|
|
||||||
"fno" to flightNo.value!!.ifEmpty { null },
|
|
||||||
"dest" to dest.value!!.ifEmpty { null },
|
|
||||||
"awbType" to awbType.value!!.ifEmpty { null },
|
|
||||||
"businessType" to businessType.value!!.ifEmpty { null },
|
|
||||||
"goodsCn" to goodsCn.value!!.ifEmpty { null }
|
|
||||||
).toRequestBody()
|
|
||||||
|
|
||||||
// 构建查询参数(统计接口 - 使用相同的搜索条件)
|
// 构建查询参数(统计接口 - 使用相同的搜索条件)
|
||||||
val totalParams = mapOf(
|
val totalParams = commonParams.toRequestBody()
|
||||||
"beginDate" to flightDateStart.value!!.ifEmpty { null },
|
|
||||||
"endDate" to flightDateEnd.value!!.ifEmpty { null },
|
|
||||||
"agentCode" to agentId.value!!.ifEmpty { null },
|
|
||||||
"outState" to outStatus.value!!.ifEmpty { null },
|
|
||||||
"wbNo" to waybillNo.value!!.ifEmpty { null },
|
|
||||||
// 筛选条件
|
|
||||||
"spCode" to spCode.value!!.ifEmpty { null },
|
|
||||||
"fno" to flightNo.value!!.ifEmpty { null },
|
|
||||||
"dest" to dest.value!!.ifEmpty { null },
|
|
||||||
"awbType" to awbType.value!!.ifEmpty { null },
|
|
||||||
"businessType" to businessType.value!!.ifEmpty { null },
|
|
||||||
"goodsCn" to goodsCn.value!!.ifEmpty { null }
|
|
||||||
).toRequestBody()
|
|
||||||
|
|
||||||
// 获取列表数据(显示loading)
|
// 获取列表数据(显示loading)
|
||||||
launchLoadingCollect({
|
launchLoadingCollect({
|
||||||
@@ -213,6 +216,7 @@ class GjcQueryViewModel : BasePageViewModel() {
|
|||||||
totalCount.value = (data?.wbNumber ?: 0).toString()
|
totalCount.value = (data?.wbNumber ?: 0).toString()
|
||||||
totalPc.value = (data?.totalPc ?: 0).toString()
|
totalPc.value = (data?.totalPc ?: 0).toString()
|
||||||
totalWeight.value = (data?.totalWeight ?: 0.0).toString()
|
totalWeight.value = (data?.totalWeight ?: 0.0).toString()
|
||||||
|
totalFlightNumber.value = (data?.flightNumber ?: 0).toString()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,6 +42,16 @@
|
|||||||
android:gravity="center_vertical"
|
android:gravity="center_vertical"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<!-- 日期类型(入库/离港) -->
|
||||||
|
<com.lukouguoji.module_base.ui.weight.search.layout.PadSearchLayout
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_weight="0.7"
|
||||||
|
hint='@{"请选择日期类型"}'
|
||||||
|
list="@{viewModel.dateStateList}"
|
||||||
|
type="@{SearchLayoutType.SPINNER}"
|
||||||
|
value="@={viewModel.dateState}" />
|
||||||
|
|
||||||
<!-- 航班日期起 -->
|
<!-- 航班日期起 -->
|
||||||
<com.lukouguoji.module_base.ui.weight.search.layout.PadSearchLayout
|
<com.lukouguoji.module_base.ui.weight.search.layout.PadSearchLayout
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
@@ -72,15 +82,15 @@
|
|||||||
type="@{SearchLayoutType.SPINNER}"
|
type="@{SearchLayoutType.SPINNER}"
|
||||||
value="@={viewModel.agentId}" />
|
value="@={viewModel.agentId}" />
|
||||||
|
|
||||||
<!-- 出库状态 -->
|
<!-- 航班号 -->
|
||||||
<com.lukouguoji.module_base.ui.weight.search.layout.PadSearchLayout
|
<com.lukouguoji.module_base.ui.weight.search.layout.PadSearchLayout
|
||||||
|
android:id="@+id/flight_no_search"
|
||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
hint='@{"请选择出库状态"}'
|
hint='@{"请输入航班号"}'
|
||||||
list="@{viewModel.outStatusList}"
|
type="@{SearchLayoutType.INPUT}"
|
||||||
type="@{SearchLayoutType.SPINNER}"
|
value="@={viewModel.flightNo}" />
|
||||||
value="@={viewModel.outStatus}" />
|
|
||||||
|
|
||||||
<!-- 运单号 -->
|
<!-- 运单号 -->
|
||||||
<com.lukouguoji.module_base.ui.weight.search.layout.PadSearchLayout
|
<com.lukouguoji.module_base.ui.weight.search.layout.PadSearchLayout
|
||||||
@@ -204,6 +214,16 @@
|
|||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
tools:text="总重量:100" />
|
tools:text="总重量:100" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginLeft="20dp"
|
||||||
|
android:text='@{`航班航次:` + viewModel.totalFlightNumber}'
|
||||||
|
android:textColor="@color/bottom_tool_tips_text_color"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:textStyle="bold"
|
||||||
|
tools:text="航班航次:2" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|||||||
@@ -67,17 +67,17 @@
|
|||||||
type="@{DataLayoutType.INPUT}"
|
type="@{DataLayoutType.INPUT}"
|
||||||
value='@={viewModel.spCode}' />
|
value='@={viewModel.spCode}' />
|
||||||
|
|
||||||
<!-- 航班号 -->
|
<!-- 出库状态 -->
|
||||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||||
android:id="@+id/filter_flight_no"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_marginBottom="10dp"
|
android:layout_marginBottom="10dp"
|
||||||
hint='@{"请输入航班号"}'
|
hint='@{"请选择出库状态"}'
|
||||||
title='@{"航班号"}'
|
list="@{viewModel.outStatusList}"
|
||||||
|
title='@{"出库状态"}'
|
||||||
titleLength="@{4}"
|
titleLength="@{4}"
|
||||||
type="@{DataLayoutType.INPUT}"
|
type="@{DataLayoutType.SPINNER}"
|
||||||
value='@={viewModel.flightNo}' />
|
value='@={viewModel.outStatus}' />
|
||||||
|
|
||||||
<!-- 目的港 -->
|
<!-- 目的港 -->
|
||||||
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
<com.lukouguoji.module_base.ui.weight.data.layout.PadDataLayoutNew
|
||||||
|
|||||||
Reference in New Issue
Block a user