From 6f89ad0520cc887e584971e312e591007a658b61 Mon Sep 17 00:00:00 2001 From: YANGJIANKUAN Date: Thu, 4 Dec 2025 16:07:51 +0800 Subject: [PATCH] feat: dev --- app/src/main/AndroidManifest.xml | 6 + .../aerologic/ui/fragment/HomeFragment.kt | 13 + .../lukouguoji/module_base/common/Constant.kt | 1 + .../lukouguoji/module_base/http/net/Api.kt | 22 ++ .../module_base/router/ARouterConstants.kt | 1 + .../gjc/activity/IntExpOutHandoverActivity.kt | 54 ++++ .../gjc/holder/IntExpAssembleViewHolder.kt | 1 - .../gjc/holder/IntExpOutHandoverViewHolder.kt | 20 ++ .../viewModel/IntExpOutHandoverViewModel.kt | 129 ++++++++++ .../layout/activity_int_exp_out_handover.xml | 176 +++++++++++++ .../res/layout/item_int_exp_assemble_uld.xml | 2 +- .../res/layout/item_int_exp_out_handover.xml | 231 ++++++++++++++++++ 12 files changed, 654 insertions(+), 2 deletions(-) create mode 100644 module_gjc/src/main/java/com/lukouguoji/gjc/activity/IntExpOutHandoverActivity.kt create mode 100644 module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpOutHandoverViewHolder.kt create mode 100644 module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpOutHandoverViewModel.kt create mode 100644 module_gjc/src/main/res/layout/activity_int_exp_out_handover.xml create mode 100644 module_gjc/src/main/res/layout/item_int_exp_out_handover.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ca895f0..9bc1d1a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -109,6 +109,12 @@ android:configChanges="orientation|keyboardHidden" android:exported="false" android:screenOrientation="userLandscape" /> + + { + ARouter.getInstance().build(ARouterConstants.ACTIVITY_URL_INT_EXP_OUT_HANDOVER) + .navigation() + } /** * 国际进港 */ @@ -653,6 +658,14 @@ class HomeFragment : Fragment() { ) ) + list.add( + RightMenu( + Constant.AuthName.GjcIntExpOutHandover, + com.lukouguoji.module_base.R.drawable.img_gjc_banxiangzuzhuang, + "出库交接" + ) + ) + // list.add( // RightMenu( // Constant.AuthName.GjcWareHouseActivity, diff --git a/module_base/src/main/java/com/lukouguoji/module_base/common/Constant.kt b/module_base/src/main/java/com/lukouguoji/module_base/common/Constant.kt index 33a39d8..c812d2c 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/common/Constant.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/common/Constant.kt @@ -246,6 +246,7 @@ interface Constant { const val GjcInspectionActivity = "AppIntExpInspection" //收运检查 const val GjcIntExpAssembleActivity = "AppIntExpAssemble" //出港组装 const val GjcAssembleAllocateActivity = "AppIntExpAssembleAllocate" //组装分配 + const val GjcIntExpOutHandover = "AppIntExpOutHandover" //出库交接 /** * 国际进港 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 9e4c0ef..4a89b2c 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 @@ -536,6 +536,28 @@ interface Api { @POST("IntExpAssemble/backfillWeight") suspend fun backfillIntExpAssembleWeight(@Body data: RequestBody): BaseResultBean + /** + * 国际出港出库交接-分页查询 + * 接口路径: /IntExpOutHandover/pageQuery + */ + @POST("IntExpOutHandover/pageQuery") + suspend fun getIntExpOutHandoverList(@Body data: RequestBody): BaseListBean + + /** + * 国际出港出库交接-分页合计 + * 接口路径: /IntExpOutHandover/pageQueryTotal + */ + @POST("IntExpOutHandover/pageQueryTotal") + suspend fun getIntExpOutHandoverTotal(@Body data: RequestBody): BaseResultBean + + /** + * 国际出港出库交接-完成交接 + * 接口路径: /IntExpOutHandover/handover + * @param data 请求参数:选中的ULD列表 + */ + @POST("IntExpOutHandover/handover") + suspend fun completeHandover(@Body data: RequestBody): BaseResultBean + /** * 国际出港移库-分页查询 * 接口路径: /IntExpMove/pageQuery diff --git a/module_base/src/main/java/com/lukouguoji/module_base/router/ARouterConstants.kt b/module_base/src/main/java/com/lukouguoji/module_base/router/ARouterConstants.kt index 70ad383..1f7420c 100644 --- a/module_base/src/main/java/com/lukouguoji/module_base/router/ARouterConstants.kt +++ b/module_base/src/main/java/com/lukouguoji/module_base/router/ARouterConstants.kt @@ -142,6 +142,7 @@ object ARouterConstants { const val ACTIVITY_URL_INT_EXP_ASSEMBLE_START = "/gjc/IntExpAssembleStartActivity" //国际出港 开始组装 const val ACTIVITY_URL_INT_EXP_MOVE = "/gjc/IntExpMoveActivity" //国际出港 出港移库 const val ACTIVITY_URL_GJC_ASSEMBLE_ALLOCATE = "/gjc/GjcAssembleAllocateActivity" //国际出港 组装分配 + const val ACTIVITY_URL_INT_EXP_OUT_HANDOVER = "/gjc/IntExpOutHandoverActivity" //国际出港 出库交接 ///////////////// 国际进港模块 /** diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/IntExpOutHandoverActivity.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/IntExpOutHandoverActivity.kt new file mode 100644 index 0000000..11b08ad --- /dev/null +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/IntExpOutHandoverActivity.kt @@ -0,0 +1,54 @@ +package com.lukouguoji.gjc.activity + +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import com.alibaba.android.arouter.facade.annotation.Route +import com.lukouguoji.gjc.R +import com.lukouguoji.gjc.databinding.ActivityIntExpOutHandoverBinding +import com.lukouguoji.gjc.viewModel.IntExpOutHandoverViewModel +import com.lukouguoji.module_base.base.BaseBindingActivity +import com.lukouguoji.module_base.common.Constant +import com.lukouguoji.module_base.common.ConstantEvent +import com.lukouguoji.module_base.impl.FlowBus +import com.lukouguoji.module_base.impl.observe +import com.lukouguoji.module_base.ktx.addOnItemClickListener +import com.lukouguoji.module_base.router.ARouterConstants + +/** + * 国际出港-出库交接页面 + */ +@Route(path = ARouterConstants.ACTIVITY_URL_INT_EXP_OUT_HANDOVER) +class IntExpOutHandoverActivity : + BaseBindingActivity() { + + override fun layoutId() = R.layout.activity_int_exp_out_handover + override fun viewModelClass() = IntExpOutHandoverViewModel::class.java + + override fun initOnCreate(savedInstanceState: Bundle?) { + setBackArrow("出库交接") + binding.viewModel = viewModel + + // 绑定分页 + viewModel.pageModel.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, this) + + // 设置item点击监听 + binding.rv.addOnItemClickListener(viewModel) + + // 监听刷新事件 + FlowBus.with(ConstantEvent.EVENT_REFRESH).observe(this) { + viewModel.refresh() + } + + // 初始加载数据 + viewModel.refresh() + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (requestCode == Constant.RequestCode.ULD && resultCode == Activity.RESULT_OK) { + viewModel.uldNo.value = data?.getStringExtra(Constant.Result.CODED_CONTENT) + viewModel.searchClick() + } + } +} diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpAssembleViewHolder.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpAssembleViewHolder.kt index 248f204..0d9d069 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpAssembleViewHolder.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpAssembleViewHolder.kt @@ -35,7 +35,6 @@ class IntExpAssembleViewHolder(view: View) : // 点击整个item切换选中状态 binding.root.setOnClickListener { bean.isSelected = !bean.isSelected - binding.bean = bean // 触发DataBinding更新 } // 展开按钮点击事件 diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpOutHandoverViewHolder.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpOutHandoverViewHolder.kt new file mode 100644 index 0000000..70f8566 --- /dev/null +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/holder/IntExpOutHandoverViewHolder.kt @@ -0,0 +1,20 @@ +package com.lukouguoji.gjc.holder + +import android.view.View +import com.lukouguoji.gjc.databinding.ItemIntExpOutHandoverBinding +import com.lukouguoji.module_base.base.BaseViewHolder +import com.lukouguoji.module_base.bean.GjcUldUseBean + +/** + * 国际出港-出库交接 列表项ViewHolder + */ +class IntExpOutHandoverViewHolder(view: View) : + BaseViewHolder(view) { + + override fun onBind(item: Any?, position: Int) { + val bean = getItemBean(item) ?: return + binding.bean = bean + binding.position = position + binding.executePendingBindings() + } +} diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpOutHandoverViewModel.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpOutHandoverViewModel.kt new file mode 100644 index 0000000..ff23b51 --- /dev/null +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/IntExpOutHandoverViewModel.kt @@ -0,0 +1,129 @@ +package com.lukouguoji.gjc.viewModel + +import android.app.Activity +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.viewModelScope +import com.lukouguoji.gjc.R +import com.lukouguoji.gjc.holder.IntExpOutHandoverViewHolder +import com.lukouguoji.module_base.base.BasePageViewModel +import com.lukouguoji.module_base.bean.GjcUldUseBean +import com.lukouguoji.module_base.common.Constant +import com.lukouguoji.module_base.common.ConstantEvent +import com.lukouguoji.module_base.http.net.NetApply +import com.lukouguoji.module_base.impl.FlowBus +import com.lukouguoji.module_base.ktx.commonAdapter +import com.lukouguoji.module_base.ktx.launchCollect +import com.lukouguoji.module_base.ktx.launchLoadingCollect +import com.lukouguoji.module_base.ktx.showToast +import com.lukouguoji.module_base.ktx.toRequestBody +import com.lukouguoji.module_base.model.ScanModel +import kotlinx.coroutines.launch + +/** + * 国际出港-出库交接 ViewModel + */ +class IntExpOutHandoverViewModel : BasePageViewModel() { + + // ========== 搜索条件 ========== + val flightDate = MutableLiveData("") // 航班日期 + val flightNo = MutableLiveData("") // 航班号 + val fdest = MutableLiveData("") // 目的站 + val uldNo = MutableLiveData("") // ULD编号 + + // ========== 统计信息 ========== + val totalCount = MutableLiveData("0") // 合计票数 + val totalPc = MutableLiveData("0") // 总件数 + val totalWeight = MutableLiveData("0") // 总重量 + + // ========== 全选状态 ========== + val isAllChecked = MutableLiveData(false) + + init { + // 监听全选状态,自动更新所有列表项 + isAllChecked.observeForever { checked -> + val list = pageModel.rv?.commonAdapter()?.items as? List ?: return@observeForever + list.forEach { it.isSelected = checked } + pageModel.rv?.commonAdapter()?.notifyDataSetChanged() + } + } + + // ========== 适配器配置 ========== + val itemViewHolder = IntExpOutHandoverViewHolder::class.java + val itemLayoutId = R.layout.item_int_exp_out_handover + + /** + * 搜索按钮点击 + */ + fun searchClick() { + refresh() + } + + /** + * 扫码ULD + */ + fun scanUld() { + ScanModel.startScan(getTopActivity(), Constant.RequestCode.ULD) + } + + /** + * 完成交接 + */ + fun completeHandover() { + val list = pageModel.rv?.commonAdapter()?.items as? List ?: return + val selectedItems = list.filter { it.isSelected } + + if (selectedItems.isEmpty()) { + showToast("请选择要交接的ULD") + return + } + + val requestData = selectedItems.toRequestBody() + + launchLoadingCollect({ NetApply.api.completeHandover(requestData) }) { + onSuccess = { + showToast("交接完成") + viewModelScope.launch { + FlowBus.with(ConstantEvent.EVENT_REFRESH).emit("refresh") + } + refresh() + } + } + } + + /** + * 获取数据 (重写BasePageViewModel) + */ + override fun getData() { + // 构建搜索条件 + val filterParams = mapOf( + "fdate" to flightDate.value?.ifEmpty { null }, + "fno" to flightNo.value?.ifEmpty { null }, + "fdest" to fdest.value?.ifEmpty { null }, + "uld" to uldNo.value?.ifEmpty { null } + ) + + // 列表参数 (含分页) + val listParams = (filterParams + mapOf( + "pageNum" to pageModel.page, + "pageSize" to pageModel.limit + )).toRequestBody() + + // 统计参数 (无分页) + val totalParams = filterParams.toRequestBody() + + // 获取列表 (带Loading) + launchLoadingCollect({ NetApply.api.getIntExpOutHandoverList(listParams) }) { + onSuccess = { pageModel.handleListBean(it) } + } + + // 获取统计信息 (后台请求) + launchCollect({ NetApply.api.getIntExpOutHandoverTotal(totalParams) }) { + onSuccess = { result -> + val data = result.data + totalCount.value = (data?.wbNumber ?: 0).toString() + totalPc.value = (data?.totalPc ?: 0).toString() + totalWeight.value = (data?.totalWeight ?: 0.0).toString() + } + } + } +} diff --git a/module_gjc/src/main/res/layout/activity_int_exp_out_handover.xml b/module_gjc/src/main/res/layout/activity_int_exp_out_handover.xml new file mode 100644 index 0000000..75f305e --- /dev/null +++ b/module_gjc/src/main/res/layout/activity_int_exp_out_handover.xml @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/module_gjc/src/main/res/layout/item_int_exp_assemble_uld.xml b/module_gjc/src/main/res/layout/item_int_exp_assemble_uld.xml index dceafba..2afa041 100644 --- a/module_gjc/src/main/res/layout/item_int_exp_assemble_uld.xml +++ b/module_gjc/src/main/res/layout/item_int_exp_assemble_uld.xml @@ -30,7 +30,7 @@ android:gravity="center_vertical" android:orientation="horizontal"> - + > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +