diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcCheckInRecord.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcCheckInRecord.kt index 41b3456..28b0f86 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcCheckInRecord.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcCheckInRecord.kt @@ -22,9 +22,16 @@ data class GjcCheckInRecord( var weight: Double = 0.0, // 运抵重量 var volume: Double = 0.0, // 运抵体积 var whId: Long = 0, // GJC_WAREHOUSE.ID - var carWeight: String = "" // 托盘自重 + var carWeight: String = "", // 托盘车重(平板托盘车号反查值) + var trayNumber: Int = 0, // 托盘数量 + var trayTotalWeight: Double = 0.0, // 托盘重量(托盘数量 × 托盘自重,与平板端一致) + var opUserName: String = "" // 计重人姓名(opId 关联查询) ) : BaseObservable() { + /** 计重人:优先姓名,为空回退操作员编码 */ + val opUserDisplay: String + get() = opUserName.ifEmpty { opId } + // 数据变化回调 var onDataChanged: (() -> Unit)? = null @@ -54,14 +61,23 @@ data class GjcCheckInRecord( } } - // 托盘自重的字符串表示(用于双向绑定,5.5寸手机版「修改记录」覆层) + /** + * 托盘重量输入原文(手机「修改记录」覆层)。保留原文而非由 Double 反推: + * 输入 "1" 时若 getter 返回 "1.0",输入框会被重设、光标回到开头,再输 "8" 就成了 "81"(实机踩过)。 + * transient:不参与 Gson 提交序列化。 + */ + @Transient + private var trayTotalWeightInput: String? = null + + // 托盘重量的字符串表示(用于双向绑定,5.5寸手机版「修改记录」覆层) @get:Bindable - var carWeightStr: String - get() = carWeight + var trayTotalWeightStr: String + get() = trayTotalWeightInput ?: if (trayTotalWeight == 0.0) "" else trayTotalWeight.toString() set(value) { - if (carWeight != value) { - carWeight = value - notifyPropertyChanged(BR.carWeightStr) + if (trayTotalWeightStr != value) { + trayTotalWeightInput = value + trayTotalWeight = value.toDoubleOrNull() ?: 0.0 + notifyPropertyChanged(BR.trayTotalWeightStr) onDataChanged?.invoke() } } diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcMaWb.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcMaWb.kt index c99ba2d..d705f06 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcMaWb.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcMaWb.kt @@ -76,8 +76,8 @@ data class GjcMaWb( var carNumber: String? = null, // 车牌号 var passageWay: String? = null, // 通道号 var passageWayId: String? = null, - var palletNumber: String? = null, // 托盘数量(5.5寸手机版开始计重页,后端暂无该入参,见接口问题清单) - var carWeight: String? = null, // 托盘自重(5.5寸手机版手输,后端暂无该入参,见接口问题清单) + var trayNumber: Int? = null, // 托盘数量(splitCheckIn / completeCheckIn 入参,与平板端一致) + var trayTotalWeight: Double? = null, // 托盘重量 = 托盘数量 × 托盘自重 // ==================== 状态信息 ==================== var checkIn: String? = null, // 收运状态。0:待收运,1:已收运,2:收运中 diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcWeighingRecordBean.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcWeighingRecordBean.kt index 87e8625..2c95b45 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcWeighingRecordBean.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcWeighingRecordBean.kt @@ -73,6 +73,7 @@ class GjcWeighingRecordBean : Serializable { var paperTime: String = "" // 单据时间 var userName: String = "" // 收运人 + var passageWay: String = "" // 通道号(计重时选定的通道号名称) var userId: String = "" // 收运人ID var remark: String = "" // 备注 diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcWeighingStatisticsBean.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcWeighingStatisticsBean.kt index 602f236..92ca382 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcWeighingStatisticsBean.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcWeighingStatisticsBean.kt @@ -10,4 +10,6 @@ class GjcWeighingStatisticsBean { var totalPc: Long = 0 // 总件数 var totalWeight: Double = 0.0 // 总重量 var cargoWeight: Double = 0.0 // 总货重 + var waitCheckInNumber: Int = 0 // 待计重票数(IntExpCheckIn/pageQueryTotal) + var checkingNumber: Int = 0 // 计重中票数(IntExpCheckIn/pageQueryTotal) } diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingListActivity.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingListActivity.kt index b10a91e..e733adb 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingListActivity.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingListActivity.kt @@ -78,10 +78,9 @@ class GjcWeighingListActivity : /** 手机版筛选:重置(只清弹层内条件,不影响顶部搜索框) */ fun resetFilter() { - viewModel.channelFilter.value = "" - viewModel.carrierFilter.value = "" - viewModel.awbTypeFilter.value = "" + viewModel.flightDate.value = "" viewModel.agentCode.value = "" + viewModel.spCode.value = "" } /** 手机版筛选:确认 */ diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingRecordListActivity.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingRecordListActivity.kt index 836ed9c..c1352d0 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingRecordListActivity.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingRecordListActivity.kt @@ -75,12 +75,9 @@ class GjcWeighingRecordListActivity : /** 手机版筛选:重置(只清弹层内条件,不影响顶部搜索框) */ fun resetFilter() { - viewModel.checkInDateStart.value = "" - viewModel.checkInDateEnd.value = "" + viewModel.flightDate.value = "" viewModel.agentCode.value = "" viewModel.spCode.value = "" - viewModel.destFilter.value = "" - viewModel.opUserFilter.value = "" } /** 手机版筛选:确认 */ diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingRecordDetailsViewModel.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingRecordDetailsViewModel.kt index 7548180..1f04bb8 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingRecordDetailsViewModel.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingRecordDetailsViewModel.kt @@ -145,7 +145,7 @@ class GjcWeighingRecordDetailsViewModel : BaseViewModel() { totalWeight.value = String.format("%.2f", sumWeight) // 计算托盘总重(手机版顶部卡片) - val sumCarWeight = records.sumOf { it.carWeight.toDoubleOrNull() ?: 0.0 } + val sumCarWeight = records.sumOf { it.trayTotalWeight } totalCarWeight.value = String.format("%.2f", sumCarWeight) // 计算重量误差百分比 diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingRecordViewModel.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingRecordViewModel.kt index 65a195e..91795c1 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingRecordViewModel.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingRecordViewModel.kt @@ -48,28 +48,19 @@ class GjcWeighingRecordViewModel : BasePageViewModel() { // ========== 5.5寸手机版专属字段(平板不调用 initPhoneExtras,行为零变化) ========== - /** 目的站(后端支持入参 dest) */ - val destFilter = MutableLiveData("") - - /** 计重人(后端支持入参 opId,下拉复用仓库用户列表) */ - val opUserFilter = MutableLiveData("") - val whsUserList = MutableLiveData>(emptyList()) - - /** 入库日期起/止(后端暂无对应入参,传 opDateStart/opDateEnd 预留参数,见接口问题清单) */ - val checkInDateStart = MutableLiveData("") - val checkInDateEnd = MutableLiveData("") + // 手机版筛选弹层与平板端查询参数保持一致(后端确认):航班日期 / 代理人 / 特码, + // 运单号走顶部搜索框;dest / opId / 收运时间范围后端均不支持(dest、opId 内网实测被忽略) /** 由手机形态的 Activity 置 true,平板保持 false(不产生任何额外请求与参数) */ private var phoneExtrasEnabled = false /** - * 开启手机版专属数据:放开「今天」默认日期(设计稿筛选无航班日期)、加载计重人下拉。 + * 开启手机版专属数据:放开「今天」默认日期(手机默认查全量,航班日期在筛选弹层可选)。 * 仅由手机形态的 Activity 调用。 */ fun initPhoneExtras() { phoneExtrasEnabled = true flightDate.value = "" - DictUtils.getWHSUserList { whsUserList.postValue(it) } } /////////////////////////////////////////////////////////////////////////// @@ -173,11 +164,6 @@ class GjcWeighingRecordViewModel : BasePageViewModel() { baseParams["wbNo"] = null baseParams["likeNo"] = key } - baseParams["dest"] = destFilter.value?.ifEmpty { null } - baseParams["opId"] = opUserFilter.value?.ifEmpty { null } - // 入库日期起/止为后端预留参数(暂无对应入参,静默忽略,见接口问题清单) - baseParams["opDateStart"] = checkInDateStart.value?.ifEmpty { null } - baseParams["opDateEnd"] = checkInDateEnd.value?.ifEmpty { null } } // 构建查询参数(列表接口) diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingStartViewModel.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingStartViewModel.kt index fc45172..2b46419 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingStartViewModel.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingStartViewModel.kt @@ -72,17 +72,28 @@ class GjcWeighingStartViewModel : BaseViewModel() { val spCodeList = MutableLiveData>() // 特码列表 val businessTypeList = MutableLiveData>() // 业务类型列表 - // 托盘车自重(平板:托盘车号查询回填只读;手机:手输,见下方 initPhoneExtras) + // 托盘车自重(平板:托盘车号查询回填只读) val carWeight = MutableLiveData("0") // ========== 5.5寸手机版专属(平板不调用 initPhoneExtras,行为零变化) ========== - /** 托盘数量(设计稿字段,后端暂无对应入参,提交时传 palletNumber 预留参数,见接口问题清单) */ - val palletNumber = MutableLiveData("") + // 托盘信息(与平板端一致:托盘重量 trayTotalWeight = 托盘数量 × 托盘自重,自重默认 18kg 可编辑) + /** 托盘数量 → 入参 trayNumber */ + val trayNumber = MutableLiveData("") - /** 手机形态标记:为 true 时提交体额外携带 palletNumber / carWeight(后端静默忽略) */ + /** 单个托盘自重(默认 18kg)→ 与数量相乘得入参 trayTotalWeight */ + val trayWeight = MutableLiveData("18") + + /** 手机形态标记:为 true 时提交体携带 trayNumber / trayTotalWeight(平板保持原托盘车号链路) */ private var phoneMode = false + /** 托盘重量 = 托盘数量 × 托盘自重 */ + private fun getTrayTotalWeight(): Double { + val num = trayNumber.value?.toIntOrNull() ?: 0 + val weight = trayWeight.value?.toDoubleOrNull() ?: 0.0 + return num * weight + } + /** 仅由手机形态的 Activity 调用 */ fun initPhoneExtras() { phoneMode = true @@ -406,10 +417,10 @@ class GjcWeighingStartViewModel : BaseViewModel() { remark = pageRemark.value - // 手机版专属:托盘数量/托盘自重(后端暂无对应入参,静默忽略;平板 phoneMode 恒 false,字段为 null 不进请求体) + // 手机版:托盘数量/托盘重量(平板 phoneMode 恒 false,字段为 null 不进请求体) if (this@GjcWeighingStartViewModel.phoneMode) { - palletNumber = this@GjcWeighingStartViewModel.palletNumber.value?.ifEmpty { null } - carWeight = this@GjcWeighingStartViewModel.carWeight.value?.ifEmpty { null } + trayNumber = this@GjcWeighingStartViewModel.trayNumber.value?.toIntOrNull() + trayTotalWeight = getTrayTotalWeight() } } @@ -442,10 +453,12 @@ class GjcWeighingStartViewModel : BaseViewModel() { maWbBean.value = maWbBean.value?.apply { carId = null remark = null - palletNumber = null + trayNumber = null + trayTotalWeight = null } carWeight.value = "0" - this@GjcWeighingStartViewModel.palletNumber.value = "" + this@GjcWeighingStartViewModel.trayNumber.value = "" + trayWeight.value = "18" } else { showToast(result.msg.noNull("分托计重失败")) } @@ -524,9 +537,9 @@ class GjcWeighingStartViewModel : BaseViewModel() { "checkIn" to "1", // 收运状态设置为已收运 "passageWayId" to channel.value, // 通道号参数 "passageWay" to (channelList.value?.firstOrNull{ it.value == channel.value }?.key ?: ""), - // 手机版专属预留参数(平板 phoneMode 恒 false → null → removeEmptyOrNull 移除,请求体不变) - "palletNumber" to (if (phoneMode) palletNumber.value?.ifEmpty { null } else null), - "carWeight" to (if (phoneMode) carWeight.value?.ifEmpty { null } else null) + // 手机版托盘信息(平板 phoneMode 恒 false → null → removeEmptyOrNull 移除,请求体不变) + "trayNumber" to (if (phoneMode) trayNumber.value?.toIntOrNull() else null), + "trayTotalWeight" to (if (phoneMode) getTrayTotalWeight() else null) ).toRequestBody(removeEmptyOrNull = true) launchLoadingCollect({ diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingViewModel.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingViewModel.kt index feabb0f..22b107f 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingViewModel.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingViewModel.kt @@ -61,33 +61,23 @@ class GjcWeighingViewModel : BasePageViewModel() { /** 手机版顶部搜索关键字(运单号/航班号混输,getData 内分流:含字母→fno,纯数字→likeNo 模糊) */ val searchKey = MutableLiveData("") - /** 主页三格统计:待计重(checkIn=0)/ 计重中(checkIn=2)数量 */ + /** 主页三格统计:待计重 / 计重中数量(取 pageQueryTotal 出参 waitCheckInNumber / checkingNumber) */ val pendingCount = MutableLiveData("0") val weighingCount = MutableLiveData("0") - /** 手机版筛选弹层字段。通道号/承运人/运单类型后端暂无查询入参(见接口问题清单),传预留参数名 */ - val channelFilter = MutableLiveData("") // 通道号 → passageWayId - val carrierFilter = MutableLiveData("") // 承运人 → by0 - val awbTypeFilter = MutableLiveData("") // 运单类型 → awbType - val channelList = MutableLiveData>(emptyList()) - val awbTypeList = MutableLiveData>(emptyList()) + // 手机版筛选弹层与平板端查询参数保持一致(后端确认):航班日期 / 代理人 / 特码, + // 运单号与航班号走顶部搜索框,均复用上方既有字段 /** 由手机形态的 Activity 置 true,平板保持 false(不产生任何额外请求与参数) */ private var phoneExtrasEnabled = false /** - * 开启手机版专属数据:放开「今天」默认日期(设计稿主页无日期筛选)、加载筛选弹层字典。 + * 开启手机版专属数据:放开「今天」默认日期(设计稿主页默认查全量,日期在筛选弹层可选)。 * 仅由手机形态的 Activity 调用。 */ fun initPhoneExtras() { phoneExtrasEnabled = true flightDate.value = "" - DictUtils.getGjcChannelList { list -> - channelList.postValue(listOf(KeyValue("全部", "")) + list) - } - DictUtils.getWaybillTypeList2(ieFlag = "E", type = "IO") { - awbTypeList.postValue(it) - } } /** @@ -271,10 +261,6 @@ class GjcWeighingViewModel : BasePageViewModel() { else -> baseParams["likeNo"] = key } } - // 以下三个为后端预留参数(暂无对应入参,后端静默忽略,见接口问题清单) - baseParams["passageWayId"] = channelFilter.value?.ifEmpty { null } - baseParams["by0"] = carrierFilter.value?.ifEmpty { null } - baseParams["awbType"] = awbTypeFilter.value?.ifEmpty { null } } // 构建查询参数(列表接口) @@ -304,21 +290,9 @@ class GjcWeighingViewModel : BasePageViewModel() { totalCount.value = (data?.wbNumber ?: 0).toString() totalPc.value = (data?.totalPc ?: 0).toString() totalWeight.value = (data?.totalWeight ?: 0.0).toString() - } - } - - // 手机版三格统计:待计重 / 计重中(各带一次 checkIn 条件的统计请求,仅手机调用) - if (phoneExtrasEnabled) { - listOf("0" to pendingCount, "2" to weighingCount).forEach { (state, liveData) -> - launchCollect({ - NetApply.api.getGjcWeighingStatistics( - (baseParams + mapOf("checkIn" to state)).toRequestBody() - ) - }) { - onSuccess = { result -> - liveData.value = (result.data?.wbNumber ?: 0).toString() - } - } + // 手机版三格统计:后端统计出参直接给出分项计数,无需额外请求 + pendingCount.value = (data?.waitCheckInNumber ?: 0).toString() + weighingCount.value = (data?.checkingNumber ?: 0).toString() } } } diff --git a/module_gjc/src/main/res/layout/activity_gjc_weighing_list.xml b/module_gjc/src/main/res/layout/activity_gjc_weighing_list.xml index f397371..5555aca 100644 --- a/module_gjc/src/main/res/layout/activity_gjc_weighing_list.xml +++ b/module_gjc/src/main/res/layout/activity_gjc_weighing_list.xml @@ -255,34 +255,16 @@ setOnResetClick="@{(v)-> activity.resetFilter()}" title='@{"筛选条件"}'> - - + - + - - - + hint='@{"请选择航班日期"}' + title='@{"航班日期"}' + type="@{PhoneDataLayoutType.DATE}" + value="@={viewModel.flightDate}" /> + + + diff --git a/module_gjc/src/main/res/layout/activity_gjc_weighing_record_details.xml b/module_gjc/src/main/res/layout/activity_gjc_weighing_record_details.xml index b6405b0..68dc0dc 100644 --- a/module_gjc/src/main/res/layout/activity_gjc_weighing_record_details.xml +++ b/module_gjc/src/main/res/layout/activity_gjc_weighing_record_details.xml @@ -6,7 +6,8 @@ 变量 viewModel / activity / editRecord 与平板一致;保留 Activity 中引用的控件 id:recyclerView。 交互差异(业务逻辑全部复用 GjcWeighingRecordDetailsViewModel): - · 顶部卡片:运单号 + 总件数/总重量/托盘总重(totalCarWeight 为手机专属统计字段) + · 顶部卡片:运单号 + 总件数/总重量/托盘总重(totalCarWeight = 各记录 trayTotalWeight 之和,手机专属统计字段) + · 托盘自重绑 trayTotalWeight(与平板端一致,后端 listRecordByWh / updateRecordList 均支持) · 每条记录卡片带「修改」→ 全屏「修改记录」覆层(isEditMode 驱动显隐, 平板端该状态驱动列表内联编辑,互不影响);保存走 onPhoneSaveClick(成功后留在本页) --> @@ -217,15 +218,15 @@ required="@{true}" title='@{"托盘自重(kg)"}' type="@{PhoneFormRowType.INPUT}" - value="@={editRecord.carWeightStr}" /> + value="@={editRecord.trayTotalWeightStr}" /> - + + value="@{editRecord.opUserDisplay}" /> - + - - + value="@={viewModel.flightDate}" /> - - - - - - diff --git a/module_gjc/src/main/res/layout/activity_gjc_weighing_start.xml b/module_gjc/src/main/res/layout/activity_gjc_weighing_start.xml index c798f17..9e4ae08 100644 --- a/module_gjc/src/main/res/layout/activity_gjc_weighing_start.xml +++ b/module_gjc/src/main/res/layout/activity_gjc_weighing_start.xml @@ -9,8 +9,8 @@ 交互差异(业务逻辑全部复用 GjcWeighingStartViewModel): · 手机版从待计重卡片进入(必带 maWbId),故不做运单号输入行 · 平板「地磅称重」输入 → 手机直接编辑「运抵重量」(同一 arriveWeight 字段) - · 平板「托盘车号」→ 手机按设计稿为「托盘数量」(palletNumber 预留字段), - 「托盘自重」相应改为手输(carWeight),两者后端暂无入参,见接口问题清单 + · 平板「托盘车号」→ 手机按设计稿为「托盘数量」+「托盘自重」(默认 18kg), + 提交 trayNumber / trayTotalWeight(= 数量 × 自重),与平板端托盘口径一致 --> @@ -182,7 +182,7 @@ type="@{PhoneFormRowType.TEXT}" value="@{viewModel.arriveVolume}" /> - + + value="@={viewModel.trayNumber}" /> - + + value="@={viewModel.trayWeight}" /> @@ -196,7 +195,7 @@ title='@{"业务类型"}' value="@{viewModel.bean.businessName.empty ? viewModel.bean.businessType : viewModel.bean.businessName}" /> - + + value="@{viewModel.bean.passageWay}" /> diff --git a/module_gjc/src/main/res/layout/item_gjc_check_in_record.xml b/module_gjc/src/main/res/layout/item_gjc_check_in_record.xml index 79ff69a..0e621fc 100644 --- a/module_gjc/src/main/res/layout/item_gjc_check_in_record.xml +++ b/module_gjc/src/main/res/layout/item_gjc_check_in_record.xml @@ -85,7 +85,7 @@ - + - +