From 361c583e5e6f42206646019a5306fc6313bdf5e4 Mon Sep 17 00:00:00 2001 From: YANGJIANKUAN Date: Fri, 21 Nov 2025 15:02:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=87=BA=E6=B8=AF=E8=AE=A1=E9=87=8D=20?= =?UTF-8?q?ui?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 5 + .../aerologic/ui/fragment/HomeFragment.kt | 12 + .../module_base/bean/GjcWeighingBean.kt | 58 ++++ .../bean/GjcWeighingStatisticsBean.kt | 13 + .../lukouguoji/module_base/common/Constant.kt | 1 + .../lukouguoji/module_base/http/net/Api.kt | 16 + .../module_base/router/ARouterConstants.kt | 2 + .../gjc/activity/GjcWeighingListActivity.kt | 54 ++++ .../gjc/holder/GjcWeighingViewHolder.kt | 24 ++ .../gjc/viewModel/GjcWeighingViewModel.kt | 141 +++++++++ .../res/layout/activity_gjc_weighing_list.xml | 191 ++++++++++++ .../src/main/res/layout/item_gjc_weighing.xml | 274 ++++++++++++++++++ 12 files changed, 791 insertions(+) create mode 100644 module_base/src/main/java/com/lukouguoji/module_base/bean/GjcWeighingBean.kt create mode 100644 module_base/src/main/java/com/lukouguoji/module_base/bean/GjcWeighingStatisticsBean.kt create mode 100644 module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingListActivity.kt create mode 100644 module_gjc/src/main/java/com/lukouguoji/gjc/holder/GjcWeighingViewHolder.kt create mode 100644 module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingViewModel.kt create mode 100644 module_gjc/src/main/res/layout/activity_gjc_weighing_list.xml create mode 100644 module_gjc/src/main/res/layout/item_gjc_weighing.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index cbecd87..2e7077a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -119,6 +119,11 @@ android:configChanges="orientation|keyboardHidden" android:exported="false" android:screenOrientation="userLandscape" /> + { + ARouter.getInstance().build(ARouterConstants.ACTIVITY_URL_GJC_WEIGHING_LIST) + .navigation() + } //仓库 Constant.AuthName.GjcWareHouseActivity -> { ARouter.getInstance().build(ARouterConstants.ACTIVITY_URL_GJC_WARE_HOUSE) @@ -604,6 +609,13 @@ class HomeFragment : Fragment() { "板箱过磅" ) ) + list.add( + RightMenu( + Constant.AuthName.GjcCheckWeighing, + R.mipmap.gjc_fu_bang_icon, + "出港计重" + ) + ) list.add( RightMenu( Constant.AuthName.GjcWareHouseActivity, diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcWeighingBean.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcWeighingBean.kt new file mode 100644 index 0000000..82ad913 --- /dev/null +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcWeighingBean.kt @@ -0,0 +1,58 @@ +package com.lukouguoji.module_base.bean + +/** + * 国际出港计重-列表数据Bean + * 对应API: IntExpCheckIn/checked/pageQuery + * 对应API返回类型: GjcWarehouse + */ +class GjcWeighingBean { + var whId: Long = 0 // Id + var no: String = "" // 运单号 + var prefix: String = "" // 运单前缀 + var wbNo: String = "" // 主运单编号(11位) + + var agentCode: String = "" // 代理人code + var agentName: String = "" // 代理人名称(查询后返回中文) + + var fdate: String = "" // 航班时间 + var fno: String = "" // 航班号 + var flight: String = "" // 航班: 航班日期/航班号 + var fclose: String = "" // 航班关闭时间 + var range: String = "" // 航程 + var dep: String = "" // 始发站 + var dest: String = "" // 目的站 + var dest1: String = "" // 目的站1 + var dest2: String = "" // 目的站2 + + var pc: Long = 0 // 预配件数 + var weight: Double = 0.0 // 预配重量 + var volume: Double = 0.0 // 预配体积 + + var checkInPc: Long = 0 // 入库件数(关联查询) + var checkInWeight: Double = 0.0 // 入库重量(关联查询) + + var assembleCount: Int = 0 // 已经组装的数量(根据航班) + + var spCode: String = "" // 特码 + var goods: String = "" // 品名 + var goodsCn: String = "" // 品名(中文) + var businessType: String = "" // 业务类型 + + var location: String = "" // uld + var locFlag: String = "" // 位置标识 + var chargeFlag: String = "" // 收费标识 + var splitFlag: String = "" // 分单标识 + var subCode: String = "" // 子代码 + var unNumber: String = "" // UN编号 + + var opId: String = "" // 收运人ID + var userName: String = "" // 收运人(查询后返回中文) + var opDate: String = "" // 收运时间 + + var activeId: Long = 0 // 有效值 + var by1: String = "" // 备用字段1 + var by2: String = "" // 备用字段2 + + var whIdList: List? = null // idList(获取收运记录列表) + var billsNo: Any? = null // 账单号 +} 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 new file mode 100644 index 0000000..602f236 --- /dev/null +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcWeighingStatisticsBean.kt @@ -0,0 +1,13 @@ +package com.lukouguoji.module_base.bean + +/** + * 国际出港计重-统计数据Bean + * 对应API: IntExpCheckIn/checked/pageQueryTotal + * 对应API返回类型: ManifestTotalDto + */ +class GjcWeighingStatisticsBean { + var wbNumber: Int = 0 // 运单票数/总票数 + var totalPc: Long = 0 // 总件数 + var totalWeight: Double = 0.0 // 总重量 + var cargoWeight: Double = 0.0 // 总货重 +} 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 d8c7ca7..11a1510 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 @@ -236,6 +236,7 @@ interface Constant { const val GjcAppDomExpCheckin = "AppIntExpCheckIn" //收运 const val GjcFuBangActivity = "AppIntExpULDWeighing" //复磅 + const val GjcCheckWeighing = "AppIntExpCheckWeighing" //出港计重 const val GjcWareHouseActivity = "AppIntExpWareHouse" //仓库 const val GjcQueryListActivity = "AppIntExpSearch" //查询 const val GjcYiKuListActivity = "AppIntExpMove" //移库 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 2af8c74..77f7a9f 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 @@ -29,6 +29,8 @@ import com.lukouguoji.module_base.bean.GjcGoodsDetailsBean import com.lukouguoji.module_base.bean.GjcUldUseBean import com.lukouguoji.module_base.bean.GjcWaybillBean import com.lukouguoji.module_base.bean.GjcWaybillDataBean +import com.lukouguoji.module_base.bean.GjcWeighingBean +import com.lukouguoji.module_base.bean.GjcWeighingStatisticsBean import com.lukouguoji.module_base.bean.GjjGoodsBean import com.lukouguoji.module_base.bean.GjjGoodsDetailsBean import com.lukouguoji.module_base.bean.GjjGoodsTypeBean @@ -439,6 +441,20 @@ interface Api { @POST("IntExpWeighting/weight") suspend fun submitGjcBoxWeighing(@Body data: RequestBody): BaseResultBean + /** + * 国际出港计重-分页搜索 + * 接口路径: /IntExpCheckIn/checked/pageQuery + */ + @POST("IntExpCheckIn/checked/pageQuery") + suspend fun getGjcWeighingList(@Body data: RequestBody): BaseListBean + + /** + * 国际出港计重-条件查询总件数、总重量、运单总数 + * 接口路径: /IntExpCheckIn/checked/pageQueryTotal + */ + @POST("IntExpCheckIn/checked/pageQueryTotal") + suspend fun getGjcWeighingStatistics(@Body data: RequestBody): BaseResultBean + /////////////////////////////////////////////////////////////////////////// // 国际进-电报解析 /////////////////////////////////////////////////////////////////////////// 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 8eb7ba9..2c9f0d5 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 @@ -119,6 +119,8 @@ object ARouterConstants { const val ACTIVITY_URL_GJC_BOX_WEIGHING_DETAILS = "/gjc/GjcBoxWeighingDetailsActivity" //国际出港模块 板箱过磅详情 const val ACTIVITY_URL_GJC_BOX_WEIGHING_ADD = "/gjc/GjcBoxWeighingAddActivity" //国际出港模块 添加过磅 + const val ACTIVITY_URL_GJC_WEIGHING_LIST = "/gjc/GjcWeighingListActivity" //国际出港模块 出港计重 + const val ACTIVITY_URL_GJC_WARE_HOUSE = "/gjc/GjcWareHouseActivity" //国际出港模块 仓库 const val ACTIVITY_URL_GJC_WARE_HOUSE_INFO = "/gjc/GjcWareHouseInfoActivity" //国际出港模块 仓库详情 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 new file mode 100644 index 0000000..51320e8 --- /dev/null +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingListActivity.kt @@ -0,0 +1,54 @@ +package com.lukouguoji.gjc.activity + +import android.content.Context +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.ActivityGjcWeighingListBinding +import com.lukouguoji.gjc.viewModel.GjcWeighingViewModel +import com.lukouguoji.module_base.base.BaseBindingActivity +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.getLifecycleOwner +import com.lukouguoji.module_base.router.ARouterConstants + +/** + * 国际出港计重列表页 + */ +@Route(path = ARouterConstants.ACTIVITY_URL_GJC_WEIGHING_LIST) +class GjcWeighingListActivity : + BaseBindingActivity() { + + override fun layoutId() = R.layout.activity_gjc_weighing_list + + override fun viewModelClass() = GjcWeighingViewModel::class.java + + override fun initOnCreate(savedInstanceState: Bundle?) { + setBackArrow("出港计重") + + binding.viewModel = viewModel + + // 绑定分页逻辑 + viewModel.pageModel + .bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, getLifecycleOwner()) + + // 监听刷新事件 + FlowBus.with(ConstantEvent.EVENT_REFRESH) + .observe(this) { + viewModel.refresh() + } + + // 初始加载 + viewModel.refresh() + } + + companion object { + @JvmStatic + fun start(context: Context) { + val starter = Intent(context, GjcWeighingListActivity::class.java) + context.startActivity(starter) + } + } +} diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/holder/GjcWeighingViewHolder.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/holder/GjcWeighingViewHolder.kt new file mode 100644 index 0000000..69a1258 --- /dev/null +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/holder/GjcWeighingViewHolder.kt @@ -0,0 +1,24 @@ +package com.lukouguoji.gjc.holder + +import android.view.View +import com.lukouguoji.gjc.databinding.ItemGjcWeighingBinding +import com.lukouguoji.module_base.base.BaseViewHolder +import com.lukouguoji.module_base.bean.GjcWeighingBean + +/** + * 国际出港计重列表 ViewHolder + */ +class GjcWeighingViewHolder(view: View) : + BaseViewHolder(view) { + + override fun onBind(item: Any?, position: Int) { + val bean = getItemBean(item)!! + binding.bean = bean + + // 整行点击跳转到详情页(暂未实现) + binding.ll.setOnClickListener { + // TODO: 跳转到详情页(待实现) + // GjcWeighingDetailsActivity.start(it.context, bean.whId) + } + } +} 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 new file mode 100644 index 0000000..52af674 --- /dev/null +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingViewModel.kt @@ -0,0 +1,141 @@ +package com.lukouguoji.gjc.viewModel + +import android.app.Activity +import android.content.Intent +import androidx.lifecycle.MutableLiveData +import com.lukouguoji.gjc.R +import com.lukouguoji.gjc.holder.GjcWeighingViewHolder +import com.lukouguoji.module_base.base.BasePageViewModel +import com.lukouguoji.module_base.common.Constant +import com.lukouguoji.module_base.http.net.NetApply +import com.lukouguoji.module_base.ktx.launchCollect +import com.lukouguoji.module_base.ktx.launchLoadingCollect +import com.lukouguoji.module_base.ktx.toRequestBody +import com.lukouguoji.module_base.model.ScanModel + +/** + * 国际出港计重 ViewModel + */ +class GjcWeighingViewModel : BasePageViewModel() { + + // 搜索条件 + val flightDate = MutableLiveData("") // 航班日期 + val flightNo = MutableLiveData("") // 航班号 + val agentCode = MutableLiveData("") // 代理人 + val spCode = MutableLiveData("") // 特码 + val waybillNo = MutableLiveData("") // 运单号 + + // 适配器配置 + val itemViewHolder = GjcWeighingViewHolder::class.java + val itemLayoutId = R.layout.item_gjc_weighing + + // 统计数据 + val totalCount = MutableLiveData("0") // 合计票数 + val totalPc = MutableLiveData("0") // 总件数 + val totalWeight = MutableLiveData("0") // 总重量 + val cargoWeight = MutableLiveData("0") // 总货重 + + /////////////////////////////////////////////////////////////////////////// + // 方法区 + /////////////////////////////////////////////////////////////////////////// + + /** + * 扫码输入航班号 + */ + fun flightNoScanClick() { + ScanModel.startScan(getTopActivity(), Constant.RequestCode.FLIGHT_NO) + } + + /** + * 扫码输入运单号 + */ + fun waybillNoScanClick() { + ScanModel.startScan(getTopActivity(), Constant.RequestCode.WAYBILL) + } + + /** + * 搜索按钮点击 + */ + fun searchClick() { + refresh() + } + + /** + * 添加按钮点击(暂未实现) + */ + fun addClick() { + // TODO: 跳转到添加页面(待实现) + } + + /** + * 计重记录按钮点击(暂未实现) + */ + fun recordClick() { + // TODO: 跳转到计重记录页面(待实现) + } + + /** + * 获取列表数据 + */ + override fun getData() { + // 构建查询参数(列表接口) + val listParams = mapOf( + "pageNum" to pageModel.page, + "pageSize" to pageModel.limit, + "fdate" to flightDate.value!!.ifEmpty { null }, + "fno" to flightNo.value!!.ifEmpty { null }, + "agentCode" to agentCode.value!!.ifEmpty { null }, + "spCode" to spCode.value!!.ifEmpty { null }, + "likeNo" to waybillNo.value!!.ifEmpty { null }, + ).toRequestBody() + + // 构建查询参数(统计接口 - 使用相同的搜索条件) + val totalParams = mapOf( + "fdate" to flightDate.value!!.ifEmpty { null }, + "fno" to flightNo.value!!.ifEmpty { null }, + "agentCode" to agentCode.value!!.ifEmpty { null }, + "spCode" to spCode.value!!.ifEmpty { null }, + "likeNo" to waybillNo.value!!.ifEmpty { null }, + ).toRequestBody() + + // 获取列表数据(显示loading) + launchLoadingCollect({ + NetApply.api.getGjcWeighingList(listParams) + }) { + onSuccess = { + pageModel.handleListBean(it) + } + } + + // 获取统计数据(后台调用,不显示loading) + launchCollect({ + NetApply.api.getGjcWeighingStatistics(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() + cargoWeight.value = (data?.cargoWeight ?: 0.0).toString() + } + } + } + + /** + * 处理扫码结果 + */ + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + if (resultCode == Activity.RESULT_OK && data != null) { + when (requestCode) { + Constant.RequestCode.FLIGHT_NO -> { + flightNo.value = data.getStringExtra(Constant.Result.CODED_CONTENT) + refresh() + } + Constant.RequestCode.WAYBILL -> { + waybillNo.value = data.getStringExtra(Constant.Result.CODED_CONTENT) + refresh() + } + } + } + } +} 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 new file mode 100644 index 0000000..392f620 --- /dev/null +++ b/module_gjc/src/main/res/layout/activity_gjc_weighing_list.xml @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/module_gjc/src/main/res/layout/item_gjc_weighing.xml b/module_gjc/src/main/res/layout/item_gjc_weighing.xml new file mode 100644 index 0000000..29ce361 --- /dev/null +++ b/module_gjc/src/main/res/layout/item_gjc_weighing.xml @@ -0,0 +1,274 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +