diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 2e7077a..aa9a1ca 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -124,6 +124,17 @@
android:configChanges="orientation|keyboardHidden"
android:exported="false"
android:screenOrientation="userLandscape" />
+
+
+
? = null // idList(获取收运记录列表)
- var billsNo: Any? = null // 账单号
+ var cityName: String = "" // 城市名称
+ var proName: String = "" // 省份名称
+ var areaName: String = "" // 区域名称
+
+ // 关联列表(可选,根据需要使用)
+ var haWbList: List? = null // 分单列表
+ var storageUseList: List? = null // 库位使用列表
+ var attachList: List? = null // 附件列表
}
diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcWeighingRecordBean.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcWeighingRecordBean.kt
new file mode 100644
index 0000000..6b04602
--- /dev/null
+++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcWeighingRecordBean.kt
@@ -0,0 +1,99 @@
+package com.lukouguoji.module_base.bean
+
+/**
+ * 国际出港计重记录-列表数据Bean
+ * 对应API: IntExpCheckIn/checked/pageQuery
+ * 对应API返回类型: GjcWarehouse
+ */
+class GjcWeighingRecordBean {
+ var whId: Long = 0 // 仓库主键ID
+ var no: String = "" // 运单号
+ var prefix: String = "" // 运单前缀
+ var wbNo: String = "" // 11位运单号
+ var oldNo: String = "" // 旧运单号
+ var oldPrefix: String = "" // 旧运单前缀
+
+ var agentCode: String = "" // 代理人code
+ var agentName: String = "" // 代理人名称
+
+ var fid: Long = 0 // 航班主键id
+ var fdate: String = "" // 航班日期
+ var fno: String = "" // 航班号
+ var flight: String = "" // 航班: 航班日期/航班号
+ var fclose: String = "" // 航班关闭时间
+ var scheduledTackOff: String = "" // 计划起飞时间
+ var scheduledArrival: String = "" // 预计到达时间
+
+ var range: String = "" // 航程
+ var dep: String = "" // 始发站
+ var dest: String = "" // 最终目的站
+ var dest1: String = "" // 第一目的站
+ var dest2: String = "" // 第二目的站
+
+ var pc: Long = 0 // 预配件数
+ var weight: Double = 0.0 // 预配重量
+ var volume: Double = 0.0 // 预配体积
+
+ var checkInPc: Long = 0 // 入库件数
+ var checkInWeight: Double = 0.0 // 入库重量
+ var checkInVolume: Double = 0.0 // 入库体积
+
+ var spCode: String = "" // 特码
+ var subCode: String = "" // 子码
+ var goods: String = "" // 品名(英)
+ var goodsCn: String = "" // 品名(中)
+ var businessType: String = "" // 业务类型
+ var businessName: String = "" // 业务类型名称(中)
+ var awbType: String = "" // 运单类型
+ var awbName: String = "" // 运单类型名称(中)
+
+ var checkIn: String = "" // 收运状态。0:待收运,1:已收运,2:收运中
+ var reviewStatus: String = "" // 审核状态(0:未审核;1:通过;2:退回)
+ var declareStatus: String = "" // 申报状态
+
+ var carId: String = "" // 平板车号
+ var carNumber: String = "" // 车牌号
+ var cargoType: String = "" // 货物类型
+ var packageType: String = "" // 包装类型
+ var origin: String = "" // 货源地
+ var unNumber: String = "" // UN编号
+
+ var consignee: String = "" // 收货人
+ var cneeTel: String = "" // 收货人电话
+
+ var by0: String = "" // 第一承运人
+ var by1: String = "" // 第二承运人
+ var by2: String = "" // 第三承运人
+
+ var opId: String = "" // 操作员id
+ var opDate: String = "" // 操作时间(入库时间)
+ var paperTime: String = "" // 单据时间
+
+ var userName: String = "" // 收运人
+ var userId: String = "" // 收运人ID
+
+ var remark: String = "" // 备注
+ var ffmMemo: String = "" // ffm备注
+ var mftMemo: String = "" // mft备注
+ var billsNo: String = "" // 提单号
+
+ var haWbNumber: Int = 0 // 分单数
+ var storageUseNumber: Int = 0 // 库位使用数
+ var recheckCount: Long = 0 // 复核次数
+
+ var customsLib: String = "" // 代理人lib
+ var tranFlag: String = "" // 转运标识
+ var activeId: Long = 0 // 有效值
+
+ var cityName: String = "" // 城市名称
+ var proName: String = "" // 省份名称
+ var areaName: String = "" // 区域名称
+
+ var location: String = "" // 库位
+ var carWeight: String = "" // 平板车重量
+
+ // 关联列表(可选,根据需要使用)
+ var haWbList: List? = null // 分单列表
+ var storageUseList: List? = null // 库位使用列表
+ var attachList: List? = null // 附件列表
+}
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 77f7a9f..178d17e 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
@@ -30,6 +30,7 @@ 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.GjcWeighingRecordBean
import com.lukouguoji.module_base.bean.GjcWeighingStatisticsBean
import com.lukouguoji.module_base.bean.GjjGoodsBean
import com.lukouguoji.module_base.bean.GjjGoodsDetailsBean
@@ -442,18 +443,39 @@ interface Api {
suspend fun submitGjcBoxWeighing(@Body data: RequestBody): BaseResultBean
/**
- * 国际出港计重-分页搜索
- * 接口路径: /IntExpCheckIn/checked/pageQuery
+ * 国际出港待计重-分页搜索
+ * 接口路径: /IntExpCheckIn/pageQuery
*/
- @POST("IntExpCheckIn/checked/pageQuery")
+ @POST("IntExpCheckIn/pageQuery")
suspend fun getGjcWeighingList(@Body data: RequestBody): BaseListBean
/**
- * 国际出港计重-条件查询总件数、总重量、运单总数
+ * 国际出港待计重-条件查询总件数、总重量、运单总数
+ * 接口路径: /IntExpCheckIn/pageQueryTotal
+ */
+ @POST("IntExpCheckIn/pageQueryTotal")
+ suspend fun getGjcWeighingStatistics(@Body data: RequestBody): BaseResultBean
+
+ /**
+ * 国际出港计重记录-分页搜索
+ * 接口路径: /IntExpCheckIn/checked/pageQuery
+ */
+ @POST("IntExpCheckIn/checked/pageQuery")
+ suspend fun getGjcWeighingRecordList(@Body data: RequestBody): BaseListBean
+
+ /**
+ * 国际出港计重记录-条件查询总件数、总重量、运单总数
* 接口路径: /IntExpCheckIn/checked/pageQueryTotal
*/
@POST("IntExpCheckIn/checked/pageQueryTotal")
- suspend fun getGjcWeighingStatistics(@Body data: RequestBody): BaseResultBean
+ suspend fun getGjcWeighingRecordStatistics(@Body data: RequestBody): BaseResultBean
+
+ /**
+ * 国际出港待计重-开始计重-完成
+ * 接口路径: /IntExpCheckIn/completeCheckIn
+ */
+ @POST("IntExpCheckIn/completeCheckIn")
+ suspend fun completeCheckIn(@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 2c9f0d5..dec0554 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
@@ -120,6 +120,8 @@ object ARouterConstants {
const val ACTIVITY_URL_GJC_BOX_WEIGHING_ADD = "/gjc/GjcBoxWeighingAddActivity" //国际出港模块 添加过磅
const val ACTIVITY_URL_GJC_WEIGHING_LIST = "/gjc/GjcWeighingListActivity" //国际出港模块 出港计重
+ const val ACTIVITY_URL_GJC_WEIGHING_START = "/gjc/GjcWeighingStartActivity" //国际出港模块 开始计重
+ const val ACTIVITY_URL_GJC_WEIGHING_RECORD_LIST = "/gjc/GjcWeighingRecordListActivity" //国际出港模块 计重记录
const val ACTIVITY_URL_GJC_WARE_HOUSE = "/gjc/GjcWareHouseActivity" //国际出港模块 仓库
const val ACTIVITY_URL_GJC_WARE_HOUSE_INFO = "/gjc/GjcWareHouseInfoActivity" //国际出港模块 仓库详情
diff --git a/module_base/src/main/res/drawable/bg_primary_stroke_radius_4.xml b/module_base/src/main/res/drawable/bg_primary_stroke_radius_4.xml
new file mode 100644
index 0000000..8eb4544
--- /dev/null
+++ b/module_base/src/main/res/drawable/bg_primary_stroke_radius_4.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
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
index 51320e8..3708fa2 100644
--- a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingListActivity.kt
+++ b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingListActivity.kt
@@ -26,7 +26,7 @@ class GjcWeighingListActivity :
override fun viewModelClass() = GjcWeighingViewModel::class.java
override fun initOnCreate(savedInstanceState: Bundle?) {
- setBackArrow("出港计重")
+ setBackArrow("出港待计重")
binding.viewModel = viewModel
diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingRecordListActivity.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingRecordListActivity.kt
new file mode 100644
index 0000000..7231c63
--- /dev/null
+++ b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingRecordListActivity.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.ActivityGjcWeighingRecordListBinding
+import com.lukouguoji.gjc.viewModel.GjcWeighingRecordViewModel
+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_RECORD_LIST)
+class GjcWeighingRecordListActivity :
+ BaseBindingActivity() {
+
+ override fun layoutId() = R.layout.activity_gjc_weighing_record_list
+
+ override fun viewModelClass() = GjcWeighingRecordViewModel::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, GjcWeighingRecordListActivity::class.java)
+ context.startActivity(starter)
+ }
+ }
+}
diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingStartActivity.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingStartActivity.kt
new file mode 100644
index 0000000..6530ac5
--- /dev/null
+++ b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcWeighingStartActivity.kt
@@ -0,0 +1,44 @@
+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.ActivityGjcWeighingStartBinding
+import com.lukouguoji.gjc.viewModel.GjcWeighingStartViewModel
+import com.lukouguoji.module_base.base.BaseBindingActivity
+import com.lukouguoji.module_base.common.Constant
+import com.lukouguoji.module_base.router.ARouterConstants
+
+/**
+ * 国际出港计重-开始计重页面
+ */
+@Route(path = ARouterConstants.ACTIVITY_URL_GJC_WEIGHING_START)
+class GjcWeighingStartActivity :
+ BaseBindingActivity() {
+
+ override fun layoutId() = R.layout.activity_gjc_weighing_start
+
+ override fun viewModelClass() = GjcWeighingStartViewModel::class.java
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ setBackArrow("开始计重")
+ binding.viewModel = viewModel
+ viewModel.initOnCreated(this, intent)
+ }
+
+ companion object {
+ /**
+ * 启动开始计重页面
+ * @param context 上下文
+ * @param maWbId 运单ID
+ */
+ @JvmStatic
+ fun startForAdd(context: Context, maWbId: Long) {
+ val starter = Intent(context, GjcWeighingStartActivity::class.java)
+ .putExtra(Constant.Key.MAWB_ID, maWbId)
+ context.startActivity(starter)
+ }
+ }
+}
diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/holder/GjcWeighingRecordViewHolder.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/holder/GjcWeighingRecordViewHolder.kt
new file mode 100644
index 0000000..970a655
--- /dev/null
+++ b/module_gjc/src/main/java/com/lukouguoji/gjc/holder/GjcWeighingRecordViewHolder.kt
@@ -0,0 +1,24 @@
+package com.lukouguoji.gjc.holder
+
+import android.view.View
+import com.lukouguoji.gjc.databinding.ItemGjcWeighingRecordBinding
+import com.lukouguoji.module_base.base.BaseViewHolder
+import com.lukouguoji.module_base.bean.GjcWeighingRecordBean
+
+/**
+ * 国际出港计重记录列表 ViewHolder
+ */
+class GjcWeighingRecordViewHolder(view: View) :
+ BaseViewHolder(view) {
+
+ override fun onBind(item: Any?, position: Int) {
+ val bean = getItemBean(item)!!
+ binding.bean = bean
+
+ // 整行点击跳转到详情页(暂未实现)
+ binding.ll.setOnClickListener {
+ // TODO: 跳转到详情页(待实现)
+ // GjcWeighingRecordDetailsActivity.start(it.context, bean.whId)
+ }
+ }
+}
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
index 69a1258..2665729 100644
--- a/module_gjc/src/main/java/com/lukouguoji/gjc/holder/GjcWeighingViewHolder.kt
+++ b/module_gjc/src/main/java/com/lukouguoji/gjc/holder/GjcWeighingViewHolder.kt
@@ -1,6 +1,7 @@
package com.lukouguoji.gjc.holder
import android.view.View
+import com.lukouguoji.gjc.activity.GjcWeighingStartActivity
import com.lukouguoji.gjc.databinding.ItemGjcWeighingBinding
import com.lukouguoji.module_base.base.BaseViewHolder
import com.lukouguoji.module_base.bean.GjcWeighingBean
@@ -15,10 +16,9 @@ class GjcWeighingViewHolder(view: View) :
val bean = getItemBean(item)!!
binding.bean = bean
- // 整行点击跳转到详情页(暂未实现)
+ // 整行点击跳转到开始计重页面
binding.ll.setOnClickListener {
- // TODO: 跳转到详情页(待实现)
- // GjcWeighingDetailsActivity.start(it.context, bean.whId)
+ GjcWeighingStartActivity.startForAdd(it.context, bean.maWbId)
}
}
}
diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingRecordViewModel.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingRecordViewModel.kt
new file mode 100644
index 0000000..ebe7f3f
--- /dev/null
+++ b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingRecordViewModel.kt
@@ -0,0 +1,134 @@
+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.GjcWeighingRecordViewHolder
+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 GjcWeighingRecordViewModel : BasePageViewModel() {
+
+ // 搜索条件
+ val flightDate = MutableLiveData("") // 航班日期
+ val flightNo = MutableLiveData("") // 航班号
+ val agentCode = MutableLiveData("") // 代理人
+ val spCode = MutableLiveData("") // 特码
+ val waybillNo = MutableLiveData("") // 运单号
+
+ // 适配器配置
+ val itemViewHolder = GjcWeighingRecordViewHolder::class.java
+ val itemLayoutId = R.layout.item_gjc_weighing_record
+
+ // 统计数据
+ 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 declareClick() {
+ // 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.getGjcWeighingRecordList(listParams)
+ }) {
+ onSuccess = {
+ pageModel.handleListBean(it)
+ }
+ }
+
+ // 获取统计数据(后台调用,不显示loading)
+ launchCollect({
+ NetApply.api.getGjcWeighingRecordStatistics(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/java/com/lukouguoji/gjc/viewModel/GjcWeighingStartViewModel.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingStartViewModel.kt
new file mode 100644
index 0000000..31b3f4d
--- /dev/null
+++ b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingStartViewModel.kt
@@ -0,0 +1,323 @@
+package com.lukouguoji.gjc.viewModel
+
+import android.app.Activity
+import android.content.Intent
+import android.view.View
+import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.viewModelScope
+import com.lukouguoji.module_base.base.BaseViewModel
+import com.lukouguoji.module_base.bean.GjcWeighingBean
+import com.lukouguoji.module_base.common.Constant
+import com.lukouguoji.module_base.common.ConstantEvent
+import com.lukouguoji.module_base.http.net.DiBangWeightModel
+import com.lukouguoji.module_base.http.net.NetApply
+import com.lukouguoji.module_base.impl.FlowBus
+import com.lukouguoji.module_base.ktx.formatDate
+import com.lukouguoji.module_base.ktx.getActivity
+import com.lukouguoji.module_base.ktx.launchCollect
+import com.lukouguoji.module_base.ktx.launchLoadingCollect
+import com.lukouguoji.module_base.ktx.noNull
+import com.lukouguoji.module_base.ktx.showToast
+import com.lukouguoji.module_base.ktx.toRequestBody
+import com.lukouguoji.module_base.ktx.verifyNullOrEmpty
+import com.lukouguoji.module_base.model.ScanModel
+import com.lukouguoji.module_base.util.Common
+import com.lukouguoji.module_base.util.DictUtils
+import dev.utils.app.info.KeyValue
+import kotlinx.coroutines.launch
+import java.util.Calendar
+import java.util.Date
+
+/**
+ * 国际出港计重-开始计重 ViewModel
+ */
+class GjcWeighingStartViewModel : BaseViewModel() {
+
+ // 运单ID(从列表页传入)
+ var maWbId: Long = 0
+
+ // 数据Bean
+ val dataBean = MutableLiveData(GjcWeighingBean())
+
+ // 地磅集成
+ val diBangModel = DiBangWeightModel()
+ val channel = MutableLiveData("") // 通道号(用于控制地磅key)
+
+ // 地磅称重显示
+ val diBangWeight = MutableLiveData("0") // 地磅重量(右上角黄色显示区域)
+
+ // 可编辑字段(用于双向绑定)
+ val realTimePc = MutableLiveData("") // 实时件数
+ val realTimeWeight = MutableLiveData("") // 实时重量
+ val realTimeVolume = MutableLiveData("") // 实时体积
+ val arrivePc = MutableLiveData("") // 运抵件数
+ val arriveWeight = MutableLiveData("") // 运抵重量
+ val arriveVolume = MutableLiveData("") // 运抵体积
+
+ // 下拉选择数据源
+ val channelList = MutableLiveData>() // 通道号列表
+ val agentList = MutableLiveData>() // 代理人列表
+ val spCodeList = MutableLiveData>() // 特码列表
+ val businessTypeList = MutableLiveData>() // 业务类型列表
+
+ // 托盘车自重(查询获取)
+ val carWeight = MutableLiveData("0")
+
+ /**
+ * 初始化
+ */
+ fun initOnCreated(activity: Activity, intent: Intent) {
+ // 获取传入的运单ID
+ maWbId = intent.getLongExtra(Constant.Key.MAWB_ID, 0)
+
+ // 监听地磅重量变化
+ diBangModel.weight.observe(activity as LifecycleOwner) { weight ->
+ val w = weight?.toDoubleOrNull() ?: 0.0
+ diBangWeight.value = if (w > 0) String.format("%.0f", w) else "0"
+ }
+
+ // 监听通道号变化,设置地磅的key
+ channel.observe(activity as LifecycleOwner) {
+ diBangModel.key = it ?: ""
+ }
+
+ // 加载下拉列表数据
+ loadChannelList()
+ loadAgentList()
+ loadSpCodeList()
+ loadBusinessTypeList()
+
+ // 加载运单数据
+ if (maWbId > 0) {
+ loadWeighingData()
+ }
+ }
+
+ /**
+ * 加载通道号列表
+ */
+ private fun loadChannelList() {
+ DictUtils.getChannelList {
+ channelList.value = it
+ }
+ }
+
+ /**
+ * 加载代理人列表
+ */
+ private fun loadAgentList() {
+ DictUtils.getAgentList {
+ agentList.value = it
+ }
+ }
+
+ /**
+ * 加载特码列表
+ */
+ private fun loadSpCodeList() {
+ // TODO: 从字典获取特码列表
+ spCodeList.value = listOf()
+ }
+
+ /**
+ * 加载业务类型列表
+ */
+ private fun loadBusinessTypeList() {
+ // TODO: 从字典获取业务类型列表
+ businessTypeList.value = listOf()
+ }
+
+ /**
+ * 加载运单数据
+ */
+ private fun loadWeighingData() {
+ val params = mapOf(
+ "maWbId" to maWbId
+ ).toRequestBody()
+
+ launchCollect({
+ // 使用查询接口获取运单详情(暂时使用列表接口,传入maWbId过滤)
+ NetApply.api.getGjcWeighingList(params)
+ }) {
+ onSuccess = {
+ if (it.list?.isNotEmpty() == true) {
+ val bean = it.list!![0]
+ dataBean.value = bean
+
+ // 填充可编辑字段
+ realTimePc.value = if (bean.pc > 0) bean.pc.toString() else ""
+ realTimeWeight.value = if (bean.weight > 0) bean.weight.toString() else ""
+ realTimeVolume.value = if (bean.volume > 0) bean.volume.toString() else ""
+ arrivePc.value = if (bean.arrivePc > 0) bean.arrivePc.toString() else ""
+ arriveWeight.value = if (bean.arriveWeight > 0) bean.arriveWeight.toString() else ""
+ arriveVolume.value = if (bean.arriveVolume > 0) bean.arriveVolume.toString() else ""
+ }
+ }
+ }
+ }
+
+ /**
+ * 航班日期点击
+ */
+ fun flightDateClick(view: View) {
+ Common.onYearMonthDay(view.context.getActivity(), dataBean.value?.fdate) { year, month, day ->
+ val calendar = Calendar.getInstance()
+ calendar.set(year, month - 1, day)
+ val date = calendar.time.formatDate()
+ dataBean.value = dataBean.value?.apply { fdate = date }
+ }
+ }
+
+ /**
+ * 运单号扫码
+ */
+ fun waybillScanClick() {
+ ScanModel.startScan(getTopActivity(), Constant.RequestCode.WAYBILL)
+ }
+
+ /**
+ * 航班号扫码
+ */
+ fun flightScanClick() {
+ ScanModel.startScan(getTopActivity(), Constant.RequestCode.FLIGHT_NO)
+ }
+
+ /**
+ * 托盘车号扫码
+ */
+ fun carIdScanClick() {
+ ScanModel.startScan(getTopActivity(), Constant.RequestCode.CAR)
+ }
+
+ /**
+ * 托盘车号输入后查询自重
+ */
+ fun queryCarWeight(carId: String) {
+ if (carId.isEmpty()) {
+ carWeight.value = "0"
+ return
+ }
+
+ val params = mapOf(
+ "carId" to carId
+ ).toRequestBody()
+
+ launchCollect({
+ // 查询托盘车自重接口(待确认具体接口)
+ // 暂时使用模拟数据
+ // NetApply.api.queryCarWeight(params)
+ carWeight.value = "0" // 模拟返回
+ }) {
+ onSuccess = {
+ // carWeight.value = it.data?.weight?.toString() ?: "0"
+ }
+ }
+ }
+
+ /**
+ * 分拣计重按钮点击
+ */
+ fun sortingWeighingClick() {
+ showToast("分拣计重功能开发中")
+ // TODO: 实现分拣计重功能
+ }
+
+ /**
+ * 完成计重按钮点击
+ */
+ fun completeCheckInClick() {
+ val bean = dataBean.value ?: return
+
+ // 验证必填字段
+ if (bean.no.verifyNullOrEmpty("请输入运单号")) return
+ if (bean.fno.verifyNullOrEmpty("请输入航班号")) return
+
+ // 从编辑字段获取数值
+ val pc = realTimePc.value?.toLongOrNull() ?: bean.pc
+ val weight = realTimeWeight.value?.toDoubleOrNull() ?: bean.weight
+ val volume = realTimeVolume.value?.toDoubleOrNull() ?: bean.volume
+ val arrivePcVal = arrivePc.value?.toLongOrNull() ?: bean.arrivePc
+ val arriveWeightVal = arriveWeight.value?.toDoubleOrNull() ?: bean.arriveWeight
+ val arriveVolumeVal = arriveVolume.value?.toDoubleOrNull() ?: bean.arriveVolume
+
+ // 提交数据到接口
+ val params = mapOf(
+ "maWbId" to bean.maWbId,
+ "no" to bean.no,
+ "prefix" to bean.prefix,
+ "wbNo" to bean.wbNo,
+ "agentCode" to bean.agentCode,
+ "agentName" to bean.agentName,
+ "fid" to bean.fid,
+ "fdate" to bean.fdate,
+ "fno" to bean.fno,
+ "flight" to bean.flight,
+ "range" to bean.range,
+ "dep" to bean.dep,
+ "dest" to bean.dest,
+ "dest1" to bean.dest1,
+ "dest2" to bean.dest2,
+ "pc" to pc,
+ "weight" to weight,
+ "volume" to volume,
+ "arrivePc" to arrivePcVal,
+ "arriveWeight" to arriveWeightVal,
+ "arriveVolume" to arriveVolumeVal,
+ "spCode" to bean.spCode,
+ "goods" to bean.goods,
+ "goodsCn" to bean.goodsCn,
+ "businessType" to bean.businessType,
+ "carId" to bean.carId,
+ "remark" to bean.remark,
+ "checkIn" to "1" // 收运状态设置为已收运
+ ).toRequestBody(removeEmptyOrNull = true)
+
+ launchLoadingCollect({
+ NetApply.api.completeCheckIn(params)
+ }) {
+ onSuccess = { result ->
+ if (result.verifySuccess()) {
+ showToast("计重完成")
+ // 发送刷新事件
+ viewModelScope.launch {
+ FlowBus.with(ConstantEvent.EVENT_REFRESH).emit("refresh")
+ }
+ getTopActivity().finish()
+ } else {
+ showToast(result.msg.noNull("计重失败"))
+ }
+ }
+ }
+ }
+
+ /**
+ * 处理扫码结果
+ */
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ if (resultCode == Activity.RESULT_OK && data != null) {
+ val content = data.getStringExtra(Constant.Result.CODED_CONTENT).noNull()
+ when (requestCode) {
+ Constant.RequestCode.WAYBILL -> {
+ dataBean.value = dataBean.value?.apply { no = content }
+ }
+ Constant.RequestCode.FLIGHT_NO -> {
+ dataBean.value = dataBean.value?.apply { fno = content }
+ }
+ Constant.RequestCode.CAR -> {
+ dataBean.value = dataBean.value?.apply { carId = content }
+ // 查询托盘车自重
+ queryCarWeight(content)
+ }
+ }
+ }
+ }
+
+ /**
+ * 清理资源
+ */
+ override fun onCleared() {
+ super.onCleared()
+ diBangModel.cancelLooperGet()
+ }
+}
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
index 52af674..9c74f60 100644
--- a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingViewModel.kt
+++ b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcWeighingViewModel.kt
@@ -4,12 +4,15 @@ import android.app.Activity
import android.content.Intent
import androidx.lifecycle.MutableLiveData
import com.lukouguoji.gjc.R
+import com.lukouguoji.gjc.activity.GjcWeighingRecordListActivity
+import com.lukouguoji.gjc.activity.GjcWeighingStartActivity
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.showToast
import com.lukouguoji.module_base.ktx.toRequestBody
import com.lukouguoji.module_base.model.ScanModel
@@ -61,17 +64,19 @@ class GjcWeighingViewModel : BasePageViewModel() {
}
/**
- * 添加按钮点击(暂未实现)
+ * 添加按钮点击(跳转到开始计重页面)
*/
fun addClick() {
- // TODO: 跳转到添加页面(待实现)
+// showToast("请从列表中选择一条待计重运单")
+
+ GjcWeighingStartActivity.startForAdd(getTopActivity(), 123)
}
/**
- * 计重记录按钮点击(暂未实现)
+ * 计重记录按钮点击
*/
fun recordClick() {
- // TODO: 跳转到计重记录页面(待实现)
+ GjcWeighingRecordListActivity.start(getTopActivity())
}
/**
diff --git a/module_gjc/src/main/res/layout/activity_gjc_weighing_record_list.xml b/module_gjc/src/main/res/layout/activity_gjc_weighing_record_list.xml
new file mode 100644
index 0000000..479841c
--- /dev/null
+++ b/module_gjc/src/main/res/layout/activity_gjc_weighing_record_list.xml
@@ -0,0 +1,182 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/module_gjc/src/main/res/layout/activity_gjc_weighing_start.xml b/module_gjc/src/main/res/layout/activity_gjc_weighing_start.xml
new file mode 100644
index 0000000..356cf7e
--- /dev/null
+++ b/module_gjc/src/main/res/layout/activity_gjc_weighing_start.xml
@@ -0,0 +1,422 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/module_gjc/src/main/res/layout/item_gjc_weighing_record.xml b/module_gjc/src/main/res/layout/item_gjc_weighing_record.xml
new file mode 100644
index 0000000..488f068
--- /dev/null
+++ b/module_gjc/src/main/res/layout/item_gjc_weighing_record.xml
@@ -0,0 +1,274 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+