feat(出库交接): 筛选对齐平板查询参数,Tab 角标改用 uldNumber(问题清单 #4/#6)

- 后端不提供交接人查询入参:手机筛选弹层「交接人」替换为平板同款「目的站」(fdest),移除 hoId 与交接人下拉
- pageQueryTotal 已修复且新增 uldNumber(板箱数),Tab 角标改取 uldNumber
- ManifestTotalDto 补齐后端统一统计 DTO 的分项字段(uldNumber/storedNumber/departedNumber/
  notClearNumber/clearNumber/waitCheckInNumber/checkingNumber/flightNumber)
- 内网实测:无条件 已交接=2(列表 total 同为 2),fdest=PEK 时列表与角标均为 0

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
YANG JIANKUAN
2026-10-09 03:14:04 -07:00
parent f6b3842882
commit b3b884504d
4 changed files with 27 additions and 27 deletions

View File

@@ -8,5 +8,15 @@ data class ManifestTotalDto(
var wbNumber: Int = 0, // 运单票数/总票数 var wbNumber: Int = 0, // 运单票数/总票数
var totalPc: Long = 0, // 总件数 var totalPc: Long = 0, // 总件数
var totalWeight: Double = 0.0, // 总重量 var totalWeight: Double = 0.0, // 总重量
var cargoWeight: Double = 0.0 // 总货重 var cargoWeight: Double = 0.0, // 总货重
// ===== 后端统一统计 DTO 的分项计数(2026-09 后端补齐,按接口各取所需) =====
var flightNumber: Int = 0, // 航班数
var uldNumber: Int = 0, // 板箱数(出库交接 Tab 角标)
var storedNumber: Int = 0, // 已入库票数(出港/进港查询)
var departedNumber: Int = 0, // 已离港(出港)/ 已出库(进港)票数
var notClearNumber: Int = 0, // 未清仓票数(出港/进港仓库)
var clearNumber: Int = 0, // 已清仓票数(出港/进港仓库)
var waitCheckInNumber: Int = 0, // 待计重票数(出港计重)
var checkingNumber: Int = 0 // 计重中票数(出港计重)
) )

View File

@@ -72,12 +72,12 @@ class IntExpOutHandoverActivity :
/** /**
* 手机版筛选:重置 * 手机版筛选:重置
* *
* 只清空弹层内的三个条件(航班日期 / 航班号 / 交接人),不影响 Tab 与顶部搜索框。 * 只清空弹层内的三个条件(航班日期 / 航班号 / 目的站),不影响 Tab 与顶部搜索框。
*/ */
fun resetFilter() { fun resetFilter() {
viewModel.flightDate.value = "" viewModel.flightDate.value = ""
viewModel.flightNo.value = "" viewModel.flightNo.value = ""
viewModel.hoId.value = "" viewModel.fdest.value = ""
} }
/** 手机版筛选:确认 */ /** 手机版筛选:确认 */

View File

@@ -18,7 +18,6 @@ import com.lukouguoji.module_base.ktx.launchLoadingCollect
import com.lukouguoji.module_base.ktx.showToast import com.lukouguoji.module_base.ktx.showToast
import com.lukouguoji.module_base.ktx.toRequestBody import com.lukouguoji.module_base.ktx.toRequestBody
import com.lukouguoji.module_base.model.ScanModel import com.lukouguoji.module_base.model.ScanModel
import com.lukouguoji.module_base.util.DictUtils
import dev.utils.app.info.KeyValue import dev.utils.app.info.KeyValue
import dev.utils.common.DateUtils import dev.utils.common.DateUtils
import com.lukouguoji.module_base.ktx.formatDate import com.lukouguoji.module_base.ktx.formatDate
@@ -36,12 +35,8 @@ class IntExpOutHandoverViewModel : BasePageViewModel() {
val uldNo = MutableLiveData("") // ULD编号 val uldNo = MutableLiveData("") // ULD编号
// ========== 手机版(5.5 寸手持端)专用筛选条件 ========== // ========== 手机版(5.5 寸手持端)专用筛选条件 ==========
// 平板布局不含对应控件,两者保持空值 → 不会进入请求参数,平板查询行为与改造前完全一致 // 平板布局不含对应控件,保持空值 → 不会进入请求参数,平板查询行为与改造前完全一致
val handoverState = MutableLiveData("") // 交接状态:"" 全部 / "0" 待交接 / "1" 已交接 val handoverState = MutableLiveData("") // 交接状态:"" 全部 / "0" 待交接 / "1" 已交接
val hoId = MutableLiveData("") // 交接人(仓管编码)
/** 交接人下拉数据(仅手机版筛选弹层使用,由 [initPhoneExtras] 触发加载) */
val hoUserList = MutableLiveData<List<KeyValue>>(emptyList())
/** 手机版状态 Tab 配置 */ /** 手机版状态 Tab 配置 */
val handoverStateTabs = MutableLiveData( val handoverStateTabs = MutableLiveData(
@@ -52,7 +47,7 @@ class IntExpOutHandoverViewModel : BasePageViewModel() {
val handoverStateCounts = MutableLiveData(listOf("", "")) val handoverStateCounts = MutableLiveData(listOf("", ""))
/** /**
* 是否启用手机版专属数据(Tab 角标计数、交接人下拉)。 * 是否启用手机版专属数据(Tab 角标计数)。
* *
* 由 Activity 在手机形态下置 true。平板端保持 false, * 由 Activity 在手机形态下置 true。平板端保持 false,
* 因此不会产生任何额外接口请求,平板行为零变化。 * 因此不会产生任何额外接口请求,平板行为零变化。
@@ -70,15 +65,12 @@ class IntExpOutHandoverViewModel : BasePageViewModel() {
val selectedCount = MutableLiveData("0") val selectedCount = MutableLiveData("0")
/** /**
* 开启手机版专属数据:默认停留「待交接」Tab、加载交接人下拉、启用 Tab 角标计数。 * 开启手机版专属数据:默认停留「待交接」Tab、启用 Tab 角标计数。
* 仅由手机形态的 Activity 调用。 * 仅由手机形态的 Activity 调用。
*/ */
fun initPhoneExtras() { fun initPhoneExtras() {
phoneExtrasEnabled = true phoneExtrasEnabled = true
handoverState.value = "0" handoverState.value = "0"
DictUtils.getWHSUserList(addAll = false) { list ->
hoUserList.postValue(list)
}
} }
fun onItemCheckChanged() { fun onItemCheckChanged() {
@@ -218,11 +210,10 @@ class IntExpOutHandoverViewModel : BasePageViewModel() {
"fno" to flightNo.value?.ifEmpty { null }, "fno" to flightNo.value?.ifEmpty { null },
"fdest" to fdest.value?.ifEmpty { null }, "fdest" to fdest.value?.ifEmpty { null },
"uld" to uldNo.value?.ifEmpty { null }, "uld" to uldNo.value?.ifEmpty { null },
// 以下两项为手机版新增筛选维度,平板端保持空值故不参与查询 // 手机版 Tab 维度,平板端保持空值故不参与查询
// 参数名以 api-doc 为准:交接状态为 handoverState(integer,0 未交接 / 1 已交接)。 // 参数名以 api-doc 为准:交接状态为 handoverState(integer,0 未交接 / 1 已交接)。
// hoId(交接人)后端查询入参暂不支持,已记录到 documents/后端接口对接问题清单.xlsx // 其余筛选与平板端口径一致(fdate/fno/fdest/uld),后端不提供交接人查询入参
"handoverState" to handoverState.value?.ifEmpty { null }, "handoverState" to handoverState.value?.ifEmpty { null }
"hoId" to hoId.value?.ifEmpty { null }
) )
// 列表参数 (含分页) // 列表参数 (含分页)
@@ -257,15 +248,15 @@ class IntExpOutHandoverViewModel : BasePageViewModel() {
/** /**
* 加载「待交接 / 已交接」Tab 角标数量。 * 加载「待交接 / 已交接」Tab 角标数量。
* *
* 复用统计接口,分别以 handoverState=0 / 1 各查一次,且沿用当前其余筛选条件, * 复用统计接口,分别以 handoverState=0 / 1 各查一次,且沿用当前其余筛选条件;
* 保证角标与列表口径一致。仅手机版调用。 * 角标取 uldNumber(板箱数,与列表 pageQuery 的 total 同口径)。仅手机版调用。
*/ */
private fun loadTabCounts(filterParams: Map<String, Any?>) { private fun loadTabCounts(filterParams: Map<String, Any?>) {
listOf("0", "1").forEachIndexed { index, state -> listOf("0", "1").forEachIndexed { index, state ->
val params = (filterParams + mapOf("handoverState" to state)).toRequestBody() val params = (filterParams + mapOf("handoverState" to state)).toRequestBody()
launchCollect({ NetApply.api.getIntExpOutHandoverTotal(params) }) { launchCollect({ NetApply.api.getIntExpOutHandoverTotal(params) }) {
onSuccess = { result -> onSuccess = { result ->
val count = (result.data?.wbNumber ?: 0).toString() val count = (result.data?.uldNumber ?: 0).toString()
val current = handoverStateCounts.value?.toMutableList() val current = handoverStateCounts.value?.toMutableList()
?: mutableListOf("", "") ?: mutableListOf("", "")
if (index < current.size) { if (index < current.size) {

View File

@@ -145,15 +145,14 @@
type="@{PhoneDataLayoutType.INPUT}" type="@{PhoneDataLayoutType.INPUT}"
value="@={viewModel.flightNo}" /> value="@={viewModel.flightNo}" />
<!-- 交接人 --> <!-- 目的站(与平板端查询参数 fdest 一致;后端不提供交接人查询入参) -->
<com.lukouguoji.module_base.ui.weight.phone.PhoneDataLayout <com.lukouguoji.module_base.ui.weight.phone.PhoneDataLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
hint='@{"请选择交接人"}' hint='@{"请输入目的站"}'
list="@{viewModel.hoUserList}" title='@{"目的站"}'
title='@{"交接人"}' type="@{PhoneDataLayoutType.INPUT}"
type="@{PhoneDataLayoutType.SPINNER}" value="@={viewModel.fdest}" />
value="@={viewModel.hoId}" />
</com.lukouguoji.module_base.ui.weight.phone.PhoneFilterPanel> </com.lukouguoji.module_base.ui.weight.phone.PhoneFilterPanel>