fix: 进港移库归属更正——删除误建IntImpMove,重新适配到国内进港DomImpMove

设计稿11「进港移库」经确认归属国内进港移库(DomImpMove后端8接口齐全),
此前误判为国际进港并预接了不存在的IntImpMove模块(问题清单#31作废)。

- 删除module_gjj的IntImpMove全套实现(3页面+Bean+Api+菜单+路由+权限串)
- GnjMoveStashListActivity双形态适配:待移库/已移库Tab走search/searchMoved
  双端点,Tab角标、筛选弹层4项、全选/批量移库复用平板既有链路
- 新增手机专属页:运单详情(Intent传bean零请求)+拍照上传(detail回填
  已有照片,modify最小体三字段提交,与平板移交编辑页同链路)
- 手机首页入口改挂国内Tab(GnViewModel补通用route跳转,权限串AppDomImpMove)
- 内网真实数据双端验证通过;Proxyman A/B:wbNo/awbType生效,
  fdate/fno/spCode被后端静默忽略(#32)、opId/opDate恒null(#33)
- 问题清单更正#31+新增#32~#34,CLAUDE.md/CHANGELOG/api-doc.md同步

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-03 12:17:10 +08:00
parent eb0655d3fc
commit 49f11ef8e6
35 changed files with 1341 additions and 1545 deletions

View File

@@ -1,78 +0,0 @@
package com.lukouguoji.module_base.bean
import androidx.databinding.ObservableBoolean
import com.lukouguoji.module_base.interfaces.ICheck
import java.io.Serializable
/**
* 国际进港移库 Bean5.5 寸手持端专属页面)
*
* ⚠️ 后端目前**没有**「国际进港移库」模块api-doc 仅有国内进港 DomImpMove 与国际出港 IntExpMove
* 2026-07-31 核对),字段按 IntExpMove 出参约定 + 设计稿展示需求镜像定义,
* 已登记《后端接口对接问题清单》。后端按同名约定交付后前端自动生效。
*/
data class IntImpMoveBean(
var no: String = "", // 运单号主体
var prefix: String = "", // 运单前缀
var wbNo: String = "", // 运单号
var pc: Long = 0, // 件数
var weight: Double = 0.0, // 重量
var fdate: String = "", // 航班日期
var fno: String = "", // 航班号
var flight: String = "", // 航班信息(日期/航班号 组合串)
var range: String = "", // 出运路径(如 HFE-NKG-LAX
var by1: String = "", // 承运人
var awbType: String = "", // 运单类型编码
var awbTypeName: String = "", // 运单类型名称
var businessType: String = "", // 业务类型编码
var businessName: String = "", // 业务类型名称
var moveState: Int = 0, // 移库状态0-待移库1-已移库)
var goods: String = "", // 品名(英文)
var goodsCn: String = "", // 品名(中文)
var agentName: String = "", // 代理人
var agentCode: String = "", // 代理代码
var spCode: String = "", // 特码
var maWbId: Long = 0, // 主单主键ID
var opId: String = "", // 移库人
var opdate: String = "", // 移库时间
var remark: String = "", // 备注
// 异常照片拍照上传三字段规范pic 缩略图 / originalPic 原图 / picNumber 数量)
var pic: String = "",
var originalPic: String = "",
var picNumber: String = "",
// UI扩展字段 - 使用ObservableBoolean实现自动UI更新
val checked: ObservableBoolean = ObservableBoolean(false),
// 卡片长按操作浮层显隐(仅 UI 状态)
val actionMenuVisible: ObservableBoolean = ObservableBoolean(false)
) : Serializable, ICheck {
override fun getCheckObservable(): ObservableBoolean = checked
var isSelected: Boolean
get() = checked.get()
set(value) = checked.set(value)
// ========== 5.5 寸手持端展示辅助字段(仅用于手机版布局,不参与序列化) ==========
/** 是否已移库moveState0-待移库1-已移库) */
val isMoved: Boolean
get() = moveState == 1
/** 品名:优先中文,为空回退英文 */
val goodsName: String
get() = goodsCn.ifEmpty { goods }
/** 航班信息展示:优先组合串,其次 日期/航班号 拼接 */
val flightInfo: String
get() = flight.ifEmpty {
if (fdate.isEmpty() && fno.isEmpty()) "" else "$fdate/$fno"
}
/** 详情页字段统一空值占位 */
fun orDash(value: String?): String = if (value.isNullOrEmpty()) "-" else value
}

View File

@@ -6,6 +6,7 @@ import com.lukouguoji.module_base.interfaces.ICheck
class MoveStashBean : ICheck {
var activeId: String = "" // null
var agentCode: String = "" // HFEXB
var agentName: String = "" // 代理人名称search 出参有定义)
var awbType: String = "" // 国际进港(国内中转)
var businessType: String = "" // null
var by1: String = "" // null
@@ -49,4 +50,19 @@ class MoveStashBean : ICheck {
override fun getCheckObservable(): ObservableBoolean {
return checked
}
// ========== 5.5 寸手持端展示辅助字段(仅前端使用,不参与提交) ==========
/** 是否已移库由列表加载端点决定search=待移库 / searchMoved=已移库),载入时打标 */
var isMoved: Boolean = false
/** 卡片长按「拍照」操作浮层显隐(仅 UI 状态) */
val actionMenuVisible = ObservableBoolean(false)
/** 代理显示:网络层会把 null 归一成空串,须 isNullOrEmpty 双兜底(沿用进港/出港查询口径) */
val agentDisplay: String
get() = if (agentName.isNotEmpty()) agentName else agentCode
/** 详情页/卡片字段统一空值占位 */
fun orDash(value: String?): String = if (value.isNullOrEmpty()) "-" else value
}

View File

@@ -274,7 +274,6 @@ interface Constant {
const val IntImpPickUpDLV = "AppIntImpPickUpDLV" //提取出库
// 进港移库后端暂无该模块与权限串2026-07-31 api-doc 核对),按 AppIntImp* 命名约定预定义,
// 权限串下发前手机首页菜单不会显示该入口(已登记后端接口对接问题清单)
const val IntImpMove = "AppIntImpMove" //进港移库
const val IntImpAccidentVisa = "AppIntImpAccidentVisa" //事故签证
const val GjjManifestListActivity = "AppIntExpManifest" //舱单
const val GjjTallyListActivity = "AppIntExpTally" //理货

View File

@@ -55,7 +55,6 @@ import com.lukouguoji.module_base.bean.GjAccidentVisaEditBean
import com.lukouguoji.module_base.bean.IntImpAccidentVisaBean
import com.lukouguoji.module_base.bean.IntImpPickUpDLVBean
import com.lukouguoji.module_base.bean.IntImpPickUpRecordBean
import com.lukouguoji.module_base.bean.IntImpMoveBean
import com.lukouguoji.module_base.bean.IntImpQueryBean
import com.lukouguoji.module_base.bean.GjjManifest
import com.lukouguoji.module_base.bean.GjjManifestBean
@@ -883,38 +882,6 @@ interface Api {
@POST("IntExpMove/move")
suspend fun submitIntExpMove(@Body data: RequestBody): BaseResultBean<SimpleResultBean>
/**
* 国际进港移库-分页查询
* 接口路径: /IntImpMove/pageQuery
* ⚠️ 后端暂无该模块2026-07-31 api-doc 核对),按 IntExpMove 命名约定预接,已登记问题清单
*/
@POST("IntImpMove/pageQuery")
suspend fun getIntImpMoveList(@Body data: RequestBody): BaseListBean<IntImpMoveBean>
/**
* 国际进港移库-分页合计
* 接口路径: /IntImpMove/pageQueryTotal
* ⚠️ 后端暂无该模块,同上
*/
@POST("IntImpMove/pageQueryTotal")
suspend fun getIntImpMoveTotal(@Body data: RequestBody): BaseResultBean<ManifestTotalDto>
/**
* 国际进港移库-批量移库
* 接口路径: /IntImpMove/move
* ⚠️ 后端暂无该模块,同上
*/
@POST("IntImpMove/move")
suspend fun submitIntImpMove(@Body data: RequestBody): BaseResultBean<SimpleResultBean>
/**
* 国际进港移库-异常照片上传pic/originalPic/picNumber 三字段规范)
* 接口路径: /IntImpMove/uploadPic
* ⚠️ 后端暂无该模块,同上
*/
@POST("IntImpMove/uploadPic")
suspend fun submitIntImpMovePic(@Body data: RequestBody): BaseResultBean<SimpleResultBean>
/**
* 国际出港库位操作-清仓
* 接口路径: /IntExpStorageUse/updateClear
@@ -1799,6 +1766,12 @@ interface Api {
@POST("DomImpMove/search")
suspend fun getGnjMoveStashList(@Body data: RequestBody): BaseListBean<MoveStashBean>
/**
* 获取-国内进港移库-已移库列表移库完成分页搜索5.5 寸手机端「已移库」Tab
*/
@POST("DomImpMove/searchMoved")
suspend fun getGnjMoveStashMovedList(@Body data: RequestBody): BaseListBean<MoveStashBean>
/**
* 获取-国内进港移库-列表--运单列表
*/

View File

@@ -104,6 +104,7 @@ object ARouterConstants {
// 国内进港移库(新版本)
const val ACTIVITY_URL_GNJ_YIKU_LIST = "/gnj/GnjYiKuListActivity" //国内进港 移库列表
const val ACTIVITY_URL_GNJ_MOVE_STASH_LIST = "/app/GnjMoveStashListActivity" //国内进港 移库(首页菜单实际跳转页,双形态)
const val ACTIVITY_URL_GNJ_YIKU_DETAILS = "/gnj/GnjYiKuDetailsActivity" //国内进港 移库详情
const val ACTIVITY_URL_GNJ_YIKU_EDIT = "/gnj/GnjYiKuEditActivity" //国内进港 移库编辑
const val ACTIVITY_URL_GNJ_YIKU_HANDOVER = "/gnj/GnjYiKuHandoverActivity" //国内进港 移交编辑/详情
@@ -182,7 +183,6 @@ object ARouterConstants {
const val ACTIVITY_URL_INT_IMP_LOADING_LIST = "/gjj/IntImpLoadingListActivity" //国际进港 装机单(分拣理货)
const val ACTIVITY_URL_INT_IMP_TALLY = "/gjj/IntImpTallyActivity" //国际进港 理货报告
const val ACTIVITY_URL_INT_IMP_PICK_UP_DLV = "/gjj/IntImpPickUpDLVActivity" //国际进港 提取出库
const val ACTIVITY_URL_INT_IMP_MOVE = "/gjj/IntImpMoveActivity" //国际进港 进港移库5.5寸手机端专属页)
const val ACTIVITY_URL_INT_IMP_ACCIDENT_VISA = "/gjj/IntImpAccidentVisaActivity" //国际进港 事故签证
///////////////// 航班查询模块