From aa6cc43bfa2f3561f47766ceaca0447e5fdcce0f Mon Sep 17 00:00:00 2001 From: YANG JIANKUAN Date: Thu, 27 Aug 2026 16:31:16 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9B=BD=E9=99=85=E4=BA=8B=E6=95=85?= =?UTF-8?q?=E7=AD=BE=E8=AF=81=E6=96=B0=E5=A2=9E=E6=94=AF=E6=8C=81=E8=BF=90?= =?UTF-8?q?=E5=8D=95=E5=8F=B7=E8=81=94=E6=83=B3=E5=B9=B6=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=B8=A6=E5=87=BA=E8=88=B1=E5=8D=95=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 运单号输入启用自动联想(1条自动填充、多条弹窗选择) - 运单号满11位自动查询进港舱单,带出航班日期、航班号、始发/目的站、总件数、总重量、品名及交接图片 - 仅新增模式触发带出,避免编辑模式覆盖已保存数据和图片 Co-Authored-By: Claude Opus 4.6 --- .../module_base/bean/GjjManifest.kt | 2 + .../lukouguoji/module_base/http/net/Api.kt | 8 +++ .../IntImpAccidentVisaEditActivity.kt | 5 ++ .../IntImpAccidentVisaEditViewModel.kt | 59 +++++++++++++++++++ .../activity_int_imp_accident_visa_edit.xml | 6 ++ 5 files changed, 80 insertions(+) diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjjManifest.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjjManifest.kt index e85c72f..aa1d9eb 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjjManifest.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjjManifest.kt @@ -12,6 +12,8 @@ data class GjjManifest( var no: String = "", // 编号 var prefix: String = "", // 前缀 var wbNo: String = "", // 运单号 + var fdate: String = "", // 航班日期 + var fno: String = "", // 航班号 var origin: String = "", // 货源地(始发站) var dest: String = "", // 目的站 var fdep: String = "", // 航班起始站 diff --git a/module_base/src/main/java/com/lukouguoji/module_base/http/net/Api.kt b/module_base/src/main/java/com/lukouguoji/module_base/http/net/Api.kt index b17d31f..1d4dd56 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/http/net/Api.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/http/net/Api.kt @@ -1891,6 +1891,14 @@ interface Api { @POST("IntImpManifest/pageQueryTotal") suspend fun getIntImpManifestTotal(@Body data: RequestBody): BaseResultBean + /** + * 国际进港舱单-根据11位具体运单号查询运单信息 + * 接口路径: /IntImpManifest/queryWbByNo + * @param wbNo 11位运单号 + */ + @POST("IntImpManifest/queryWbByNo") + suspend fun getIntImpManifestByWbNo(@Query("wbNo") wbNo: String): BaseResultBean + /** * 国际进港舱单-获取主单下分单 */ diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpAccidentVisaEditActivity.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpAccidentVisaEditActivity.kt index 4e8c8a4..5432a5c 100644 --- a/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpAccidentVisaEditActivity.kt +++ b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpAccidentVisaEditActivity.kt @@ -4,6 +4,7 @@ import android.content.Context import android.content.Intent import android.os.Bundle import android.text.InputType +import androidx.core.widget.doOnTextChanged import com.lukouguoji.gjj.R import com.lukouguoji.gjj.databinding.ActivityIntImpAccidentVisaEditBinding import com.lukouguoji.gjj.viewModel.IntImpAccidentVisaEditViewModel @@ -29,6 +30,10 @@ class IntImpAccidentVisaEditActivity : binding.fnoInput.et.setUpperCaseAlphanumericFilter() // 运单号:纯数字11位 binding.wbNoInput.et.inputType = InputType.TYPE_CLASS_NUMBER + // 运单号满11位后自动查询舱单信息带出表单数据(覆盖手输、联想填充、弹窗选择) + binding.wbNoInput.et.doOnTextChanged { text, _, _, _ -> + viewModel.onWbNoChanged(text?.toString()?.trim() ?: "") + } viewModel.rv = binding.rv binding.rv.addOnItemClickListener(viewModel) diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpAccidentVisaEditViewModel.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpAccidentVisaEditViewModel.kt index 58bed99..cb5be01 100644 --- a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpAccidentVisaEditViewModel.kt +++ b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpAccidentVisaEditViewModel.kt @@ -233,6 +233,65 @@ class IntImpAccidentVisaEditViewModel : BaseViewModel(), IOnItemClickListener { } } + /////////////////////////////////////////////////////////////////////////// + // 运单号带出国际进港舱单信息 + /////////////////////////////////////////////////////////////////////////// + + private var lastQueriedWbNo = "" + + /** + * 运单号文本变化回调(Activity 中监听输入框) + * 满11位且与上次查询不同时,查询进港舱单信息并回填表单 + * 仅新增模式生效:编辑模式下 loadDetail 回显运单号会触发本回调, + * 若不拦截会用舱单数据覆盖已保存的表单和图片列表 + */ + fun onWbNoChanged(wbNo: String) { + if (pageType.value != DetailsPageType.Add) return + if (wbNo.length != 11) return + if (wbNo == lastQueriedWbNo) return + lastQueriedWbNo = wbNo + queryWbInfo(wbNo) + } + + private fun queryWbInfo(wbNo: String) { + launchLoadingCollect({ NetApply.api.getIntImpManifestByWbNo(wbNo) }) { + onSuccess = { + val data = it.data + if (it.verifySuccess() && data != null) { + // 接口可能返回 null 字段(Gson 反射注入会绕过 Kotlin 非空默认值),统一 noNull 防护 + val b = dataBean.value ?: GjAccidentVisaEditBean() + b.fdate = data.fdate.noNull().take(10) + b.fno = data.fno.noNull() + b.dep = data.origin.noNull() + b.dest = data.dest.noNull() + b.pc = (if (data.totalPc > 0) data.totalPc else data.pc).toString() + b.weight = (if (data.totalWeight > 0.0) data.totalWeight else data.weight).toString() + b.goods = data.goods.noNull().ifEmpty { data.goodsCn.noNull() } + dataBean.value = b + + // 与航班级联查询判重键同步,避免航班输入框失焦后重复查询覆盖带出的始发/目的站 + lastQueriedFlight = "${b.fdate}-${b.fno}" + + // 回填交接图片:path 取原图完整 URL 用于预览,url 取缩略图相对路径用于提交 + val picList = data.pic.noNull().split(",").filter { p -> p.isNotEmpty() } + val originalList = data.originalPic.noNull().split(",").filter { p -> p.isNotEmpty() } + val images = picList.mapIndexed { index, picUrl -> + val originalUrl = originalList.getOrElse(index) { picUrl } + FileBean( + path = MediaUtil.fillUrl(originalUrl), + url = picUrl, + originalPic = originalUrl + ) + } + // 重置图片区:舱单图片 + 末尾空白添加占位 + rv?.commonAdapter()?.refresh(images + FileBean()) + } else { + showToast(it.msg.noNull("未查询到该运单的进港舱单信息")) + } + } + } + } + /////////////////////////////////////////////////////////////////////////// // 保存 /////////////////////////////////////////////////////////////////////////// diff --git a/module_gjj/src/main/res/layout/activity_int_imp_accident_visa_edit.xml b/module_gjj/src/main/res/layout/activity_int_imp_accident_visa_edit.xml index 961f9d2..68806f0 100644 --- a/module_gjj/src/main/res/layout/activity_int_imp_accident_visa_edit.xml +++ b/module_gjj/src/main/res/layout/activity_int_imp_accident_visa_edit.xml @@ -118,6 +118,12 @@ android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" + autoQueryEnabled="@{true}" + autoQueryMaxLength="@{8}" + autoQueryMinLength="@{8}" + autoQueryParamKey="@{`wbNo`}" + autoQueryTitle="@{`选择运单号`}" + autoQueryUrl="@{`/IntImpManifest/pageQueryWbNoList`}" enable="@{!viewModel.isDetailMode}" hint='@{"请输入运单号"}' title='@{"运单号"}'