feat(进港移库): 移库人取 opUserName,已移库照片经 movedDetail 回填(问题清单 #32~#34)

- #32 fdate/fno/spCode 后端已实装(search/searchMoved),手机端原有传参零改动生效
- #33 searchMoved 已回填 opId/opDate 并新增 opUserName:详情「移库人」改绑姓名(回退 opId)
- #34 新增 GET /DomImpMove/movedDetail:已移库运单(列表无 mawbId)拍照页按 moveId 回填照片
- 已移库运单 searchMoved/movedDetail 均无 mawbId,而 modify 以 mawbId 定位(实测返回「未能获取到运单id」),
  提交前给出明确提示,不再发出必失败请求;缺口已登记问题清单
- 内网实测:fno=MU2222 待移库 0 / 已移库 2 与直调一致;详情移库人「张三」

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
YANG JIANKUAN
2026-10-09 07:34:59 -07:00
parent 68e6c7c52b
commit 6f813f9cff
7 changed files with 39 additions and 8 deletions

View File

@@ -33,7 +33,7 @@ class GnjMoveStashDetailActivity :
/** 「异常照片」加号槽位 → 拍照上传页 */ /** 「异常照片」加号槽位 → 拍照上传页 */
fun openPhoto() { fun openPhoto() {
viewModel.dataBean.value?.let { viewModel.dataBean.value?.let {
GnjMoveStashPhotoActivity.start(this, it.mawbId, it.wbNo) GnjMoveStashPhotoActivity.start(this, it.mawbId, it.wbNo, it.moveId)
} }
} }

View File

@@ -90,7 +90,7 @@ class GnjMoveStashListActivity :
/** 浮层「拍照」→ 拍照上传页 */ /** 浮层「拍照」→ 拍照上传页 */
fun openPhoto(bean: MoveStashBean) { fun openPhoto(bean: MoveStashBean) {
bean.actionMenuVisible.set(false) bean.actionMenuVisible.set(false)
GnjMoveStashPhotoActivity.start(this, bean.mawbId, bean.wbNo) GnjMoveStashPhotoActivity.start(this, bean.mawbId, bean.wbNo, bean.moveId)
} }
companion object { companion object {

View File

@@ -33,12 +33,16 @@ class GnjMoveStashPhotoActivity :
} }
companion object { companion object {
/** 已移库运单的 moveId(movedDetail 回填照片用) */
const val EXTRA_MOVE_ID = "moveId"
@JvmStatic @JvmStatic
fun start(context: Context, mawbId: String, wbNo: String) { fun start(context: Context, mawbId: String, wbNo: String, moveId: String = "") {
context.startActivity( context.startActivity(
Intent(context, GnjMoveStashPhotoActivity::class.java) Intent(context, GnjMoveStashPhotoActivity::class.java)
.putExtra(Constant.Key.ID, mawbId) .putExtra(Constant.Key.ID, mawbId)
.putExtra(Constant.Key.CODE, wbNo) .putExtra(Constant.Key.CODE, wbNo)
.putExtra(EXTRA_MOVE_ID, moveId)
) )
} }
} }

View File

@@ -37,13 +37,17 @@ import kotlinx.coroutines.launch
* 国内进港移库「拍照上传」ViewModel(5.5 寸手持端专属页面) * 国内进港移库「拍照上传」ViewModel(5.5 寸手持端专属页面)
* *
* 图片选择/预览/删除复用 module_base 的 ImageSelectNewViewHolder(末位加号槽位)。 * 图片选择/预览/删除复用 module_base 的 ImageSelectNewViewHolder(末位加号槽位)。
* 已有照片经 DomImpMove/detail 回填;提交走 DomImpMove/modify 最小体 * 已有照片回填:待移库经 DomImpMove/detail(mawbId),已移库经 DomImpMove/movedDetail(moveId,
* searchMoved 出参不含 mawbId)。提交走 DomImpMove/modify 最小体
* (mawbId/remark/picNumber/pic/originalPic),与平板移交编辑页同一链路。 * (mawbId/remark/picNumber/pic/originalPic),与平板移交编辑页同一链路。
*/ */
class GnjMoveStashPhotoViewModel : BaseViewModel(), IOnItemClickListener { class GnjMoveStashPhotoViewModel : BaseViewModel(), IOnItemClickListener {
var mawbId = "" var mawbId = ""
/** 已移库运单的移库记录 ID(searchMoved 出参),用于 movedDetail 回填 */
var moveId = ""
/** 运单号(副标题展示,由列表带入) */ /** 运单号(副标题展示,由列表带入) */
val wbNo = MutableLiveData("") val wbNo = MutableLiveData("")
@@ -59,9 +63,14 @@ class GnjMoveStashPhotoViewModel : BaseViewModel(), IOnItemClickListener {
fun initOnCreated(intent: Intent) { fun initOnCreated(intent: Intent) {
mawbId = intent.getStringExtra(Constant.Key.ID).orEmpty() mawbId = intent.getStringExtra(Constant.Key.ID).orEmpty()
wbNo.value = intent.getStringExtra(Constant.Key.CODE).orEmpty() wbNo.value = intent.getStringExtra(Constant.Key.CODE).orEmpty()
moveId = intent.getStringExtra(GnjMoveStashPhotoActivity.EXTRA_MOVE_ID).orEmpty()
// 已有照片回填(pic 缩略图 + originalPic 原图),末位补加号槽位 // 已有照片回填(pic 缩略图 + originalPic 原图),末位补加号槽位;
launchCollect({ NetApply.api.getGnjMoveStashDetail(mawbId) }) { // 已移库运单无 mawbId,改按 moveId 走 movedDetail
launchCollect({
if (mawbId.isEmpty() && moveId.isNotEmpty()) NetApply.api.getGnjMoveStashMovedDetail(moveId)
else NetApply.api.getGnjMoveStashDetail(mawbId)
}) {
onSuccess = { onSuccess = {
detailBean = it.data ?: GnjYiKuBean() detailBean = it.data ?: GnjYiKuBean()
val picList = detailBean.pic.split(",").filter { p -> p.isNotEmpty() } val picList = detailBean.pic.split(",").filter { p -> p.isNotEmpty() }
@@ -88,6 +97,11 @@ class GnjMoveStashPhotoViewModel : BaseViewModel(), IOnItemClickListener {
* 确认提交:先补传未上传的本地图片,再按三字段规范提交 modify * 确认提交:先补传未上传的本地图片,再按三字段规范提交 modify
*/ */
fun submitClick() { fun submitClick() {
// modify 以 mawbId 定位运单;已移库运单 searchMoved/movedDetail 均不返回 mawbId(后端缺口),无法提交
if (mawbId.isEmpty()) {
showToast("已移库运单缺少运单ID,暂不支持提交照片")
return
}
(rv?.commonAdapter()?.items ?: emptyList()) (rv?.commonAdapter()?.items ?: emptyList())
.asFlow() .asFlow()
.map { it as FileBean } .map { it as FileBean }

View File

@@ -244,7 +244,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1" android:layout_weight="1"
title='@{"移库人"}' title='@{"移库人"}'
value="@{viewModel.dataBean.opId}" /> value="@{viewModel.dataBean.opUserDisplay}" />
<com.lukouguoji.module_base.ui.weight.phone.PhoneKvItem <com.lukouguoji.module_base.ui.weight.phone.PhoneKvItem
android:layout_width="0dp" android:layout_width="0dp"

View File

@@ -27,7 +27,9 @@ class MoveStashBean : ICheck {
var flight: String = "" // 20240711/MU7766 var flight: String = "" // 20240711/MU7766
var fno: String = "" // MU7766 var fno: String = "" // MU7766
var goods: String = "" // 国际货 var goods: String = "" // 国际货
var mawbId: String = "" // 996422 var mawbId: String = "" // 996422(searchMoved 出参不含此字段)
var moveId: String = "" // CIII260930141150(已移库,movedDetail 入参)
var opUserName: String = "" // 移库人姓名(searchMoved / movedDetail 出参)
var no: String = "" // 44445074 var no: String = "" // 44445074
var opDate: String = "" // null var opDate: String = "" // null
var opId: String = "" // null var opId: String = "" // null
@@ -63,6 +65,10 @@ class MoveStashBean : ICheck {
val agentDisplay: String val agentDisplay: String
get() = if (agentName.isNotEmpty()) agentName else agentCode get() = if (agentName.isNotEmpty()) agentName else agentCode
/** 移库人:优先姓名,为空回退操作人 ID */
val opUserDisplay: String
get() = opUserName.ifEmpty { opId }
/** 详情页/卡片字段统一空值占位 */ /** 详情页/卡片字段统一空值占位 */
fun orDash(value: String?): String = if (value.isNullOrEmpty()) "-" else value fun orDash(value: String?): String = if (value.isNullOrEmpty()) "-" else value
} }

View File

@@ -1796,6 +1796,13 @@ interface Api {
@GET("DomImpMove/detail") @GET("DomImpMove/detail")
suspend fun getGnjMoveStashDetail(@Query("mawbId") mawbId: String): BaseResultBean<GnjYiKuBean> suspend fun getGnjMoveStashDetail(@Query("mawbId") mawbId: String): BaseResultBean<GnjYiKuBean>
/**
* 国内进港移库-移库完成详情(已移库运单无 mawbId,按 moveId 查,含 pic 三字段与移库人)
* 接口路径: /DomImpMove/movedDetail
*/
@GET("DomImpMove/movedDetail")
suspend fun getGnjMoveStashMovedDetail(@Query("moveId") moveId: String): BaseResultBean<GnjYiKuBean>
/** /**
* 编辑-国内进港移库(新接口) * 编辑-国内进港移库(新接口)
*/ */