diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 853ae5d..739be5d 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -440,6 +440,20 @@
android:exported="false"
android:screenOrientation="userLandscape" />
+
+
+
+
+
+
diff --git a/app/src/main/java/com/lukouguoji/aerologic/ui/fragment/HomeFragment.kt b/app/src/main/java/com/lukouguoji/aerologic/ui/fragment/HomeFragment.kt
index 3357900..054eed6 100644
--- a/app/src/main/java/com/lukouguoji/aerologic/ui/fragment/HomeFragment.kt
+++ b/app/src/main/java/com/lukouguoji/aerologic/ui/fragment/HomeFragment.kt
@@ -463,6 +463,18 @@ class HomeFragment : Fragment() {
.navigation()
}
+ // 提取出库
+ Constant.AuthName.IntImpPickUpDLV -> {
+ ARouter.getInstance().build(ARouterConstants.ACTIVITY_URL_INT_IMP_PICK_UP_DLV)
+ .navigation()
+ }
+
+ // 进港查询
+ Constant.AuthName.GjjQueryListActivity -> {
+ ARouter.getInstance().build(ARouterConstants.ACTIVITY_URL_GJJ_QUERY_LIST)
+ .navigation()
+ }
+
/**
* 航班查询
*/
@@ -826,6 +838,20 @@ class HomeFragment : Fragment() {
"提取记录"
)
)
+ list.add(
+ RightMenu(
+ Constant.AuthName.IntImpPickUpDLV,
+ R.mipmap.gnj_cang_ku_icon,
+ "提取出库"
+ )
+ )
+ list.add(
+ RightMenu(
+ Constant.AuthName.GjjQueryListActivity,
+ R.mipmap.img_bwjx,
+ "进港查询"
+ )
+ )
}
Constant.AuthName.Flight -> {
diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/IntImpPickUpDLVBean.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/IntImpPickUpDLVBean.kt
new file mode 100644
index 0000000..137ae92
--- /dev/null
+++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/IntImpPickUpDLVBean.kt
@@ -0,0 +1,62 @@
+package com.lukouguoji.module_base.bean
+
+import androidx.databinding.ObservableBoolean
+import java.io.Serializable
+
+/**
+ * 国际进港提取出库-列表数据Bean
+ * 对应API: IntImpPickUpDlv/pageQuery
+ */
+class IntImpPickUpDLVBean : Serializable {
+ var id: Long = 0 // 主键ID
+ var wbNo: String = "" // 运单号
+ var no: String = "" // 主单号
+ var prefix: String = "" // 主单前缀
+ var hno: String = "" // 分单号
+ var agentCode: String = "" // 代理人代码
+ var agentName: String = "" // 代理人名称
+ var flight: String = "" // 航班信息
+ var fno: String = "" // 航班号
+ var fdate: String = "" // 航班日期
+ var pc: Long = 0 // 件数
+ var weight: Double = 0.0 // 重量
+ var cashWeight: Double = 0.0 // 计费重量
+ var pkId: String = "" // 提货编号(提货单号)
+ var location: String = "" // 库位
+ var chargeTime: String = "" // 缴费时间(提取时间)
+ var dlvTime: String = "" // 出库时间
+ var goods: String = "" // 品名
+ var spCode: String = "" // 特码
+ var pickFlag: String = "" // 提取出库标识
+ var chargeFlag: String = "" // 提取标识
+ var serialNo: Long = 0 // 收费记录项目序号
+ var amount: Double = 0.0 // 总金额
+ var optCharge: Double = 0.0 // 服务费
+ var whsCharge: Double = 0.0 // 仓储费
+ var tranCharge: Double = 0.0 // 信息费
+ var drawBillCharge: Double = 0.0 // 抽单费
+ var efrCharge: Double = 0.0 // 冷藏费
+ var svlCharge: Double = 0.0 // 铲车费
+ var tallyCharge: Double = 0.0 // 理货费
+ var chargeId: String = "" // 收费员
+ var chargeName: String = "" // 收费员名称
+ var dlvId: String = ""
+ var dlvIdType: String = ""
+ var dlvName: String = ""
+ var dlvPhone: String = ""
+ var locFlag: String = ""
+ var origin: String = ""
+ var refId: String = ""
+ var receiptNo: String = ""
+ var chgMode: String = ""
+ var billReviewStatus: String = ""
+ var billAgentRemark: String = ""
+ var awbPc: Long = 0
+
+ // ========== UI扩展字段 ==========
+ val checked: ObservableBoolean = ObservableBoolean(false)
+
+ var isSelected: Boolean
+ get() = checked.get()
+ set(value) = checked.set(value)
+}
diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/IntImpQueryBean.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/IntImpQueryBean.kt
new file mode 100644
index 0000000..a32ea69
--- /dev/null
+++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/IntImpQueryBean.kt
@@ -0,0 +1,57 @@
+package com.lukouguoji.module_base.bean
+
+/**
+ * 国际进港查询-主运单数据模型
+ * 对应接口:/IntImpSearch/pageQuery 返回的列表项 (GjjSearchMaWb)
+ */
+data class IntImpQueryBean(
+ var maWbId: Long? = null, // 主单主键ID
+ var wbNo: String? = null, // 运单号
+ var prefix: String? = null, // 运单号前缀
+ var no: String? = null, // 运单号主体
+
+ // ==================== 货物信息 ====================
+ var awbPc: Long? = null, // 运单件数
+ var awbWeight: Double? = null, // 运单重量
+ var inPc: Long? = null, // 入库件数
+ var inWeight: Double? = null, // 入库重量
+ var cashWeight: Double? = null, // 计费重量
+ var goods: String? = null, // 品名(英)
+ var goodsCn: String? = null, // 品名(中)
+ var packageType: String? = null, // 包装类型
+ var unNumber: String? = null, // UN编号
+
+ // ==================== 航班信息 ====================
+ var flight: String? = null, // 航班: 日期/航班号
+ var fno: String? = null, // 航班号
+ var fdate: String? = null, // 航班日期
+ var range: String? = null, // 航程 (如 LAX-HFE)
+ var dest: String? = null, // 目的地
+ var origin: String? = null, // 货源地
+ var by1: String? = null, // 承运人
+
+ // ==================== 代理与运单类型 ====================
+ var agentCode: String? = null, // 代理人code
+ var agentName: String? = null, // 代理人名称
+ var awbType: String? = null, // 运单类型code
+ var awbName: String? = null, // 运单类型名称
+ var businessType: String? = null, // 业务类型code
+ var businessName: String? = null, // 业务类型名称
+
+ // ==================== 特码 ====================
+ var spCode: String? = null, // 特码
+
+ // ==================== 时间信息 ====================
+ var inDate: String? = null, // 入库时间
+ var dlvTime: String? = null, // 出库时间
+
+ // ==================== 状态信息 ====================
+ var mftStatus: String? = null, // 原始舱单状态
+ var tallyStatus: String? = null, // 理货申报状态
+ var lockState: Int? = null, // 锁定状态(0:未锁, 1:锁定)
+ var command: String? = null, // 海关放行
+
+ // ==================== 其他 ====================
+ var remark: String? = null, // 备注
+ var activeId: Long? = null // 有效值
+)
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 29d3206..62c543d 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
@@ -271,6 +271,7 @@ interface Constant {
const val IntImpManifest = "AppIntImpManifest" //进港舱单
const val IntImpTally = "AppIntImpTally" //理货报告
const val IntImpPickUpRecord = "AppIntImpPickUpRecord" //提取记录
+ const val IntImpPickUpDLV = "AppIntImpPickUpDLV" //提取出库
const val GjjManifestListActivity = "AppIntExpManifest" //舱单
const val GjjTallyListActivity = "AppIntExpTally" //理货
const val GjjGoodsListActivity = "AppIntExpGjjGoods" //货物交接
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 9524cea..5a8469b 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
@@ -50,7 +50,9 @@ import com.lukouguoji.module_base.bean.GjjGoodsDetailsBean
import com.lukouguoji.module_base.bean.GjjGoodsTypeBean
import com.lukouguoji.module_base.bean.GjjHandoverRecordBean
import com.lukouguoji.module_base.bean.GjjImportTally
+import com.lukouguoji.module_base.bean.IntImpPickUpDLVBean
import com.lukouguoji.module_base.bean.IntImpPickUpRecordBean
+import com.lukouguoji.module_base.bean.IntImpQueryBean
import com.lukouguoji.module_base.bean.GjjManifest
import com.lukouguoji.module_base.bean.GjjManifestBean
import com.lukouguoji.module_base.bean.GjjPackTypeBean
@@ -969,6 +971,41 @@ interface Api {
@POST("IntImpPickUpRecord/getDetails")
suspend fun getIntImpPickUpRecordDetails(@Body data: RequestBody): BaseResultBean
+ /**
+ * 国际进港提取出库-分页查询
+ * 接口路径: /IntImpPickUpDlv/pageQuery
+ */
+ @POST("IntImpPickUpDlv/pageQuery")
+ suspend fun getIntImpPickUpDLVList(@Body data: RequestBody): PageInfo
+
+ /**
+ * 国际进港提取出库-分页合计
+ * 接口路径: /IntImpPickUpDlv/pageQueryTotal
+ */
+ @POST("IntImpPickUpDlv/pageQueryTotal")
+ suspend fun getIntImpPickUpDLVTotal(@Body data: RequestBody): BaseResultBean
+
+ /**
+ * 国际进港提取出库-确认出库
+ * 接口路径: /IntImpPickUpDlv/pickUpOut
+ */
+ @POST("IntImpPickUpDlv/pickUpOut")
+ suspend fun confirmIntImpPickUpDLV(@Body data: RequestBody): BaseResultBean
+
+ /**
+ * 国际进港查询-分页
+ * 接口路径: /IntImpSearch/pageQuery
+ */
+ @POST("IntImpSearch/pageQuery")
+ suspend fun getIntImpQueryList(@Body data: RequestBody): PageInfo
+
+ /**
+ * 国际进港查询-分页合计
+ * 接口路径: /IntImpSearch/pageQueryTotal
+ */
+ @POST("IntImpSearch/pageQueryTotal")
+ suspend fun getIntImpQueryTotal(@Body data: RequestBody): BaseResultBean
+
/**
* 国际出港待计重-分页搜索
* 接口路径: /IntExpCheckIn/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 f893b95..2855742 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
@@ -177,6 +177,7 @@ object ARouterConstants {
const val ACTIVITY_URL_INT_IMP_MANIFEST = "/gjj/IntImpManifestActivity" //国际进港 进港舱单
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" //国际进港 提取出库
///////////////// 航班查询模块
/**
diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/activity/GjjQueryListActivity.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/GjjQueryListActivity.kt
index 036d879..6474425 100644
--- a/module_gjj/src/main/java/com/lukouguoji/gjj/activity/GjjQueryListActivity.kt
+++ b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/GjjQueryListActivity.kt
@@ -27,7 +27,7 @@ import com.scwang.smart.refresh.layout.api.RefreshLayout
import java.text.SimpleDateFormat
import java.util.*
-@Route(path = ARouterConstants.ACTIVITY_URL_GJJ_QUERY_LIST)
+//@Route(path = ARouterConstants.ACTIVITY_URL_GJJ_QUERY_LIST)
class GjjQueryListActivity : BaseActivity(), View.OnClickListener {
private val currentTitleName = "国际进港查询"
diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpPickUpDLVActivity.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpPickUpDLVActivity.kt
new file mode 100644
index 0000000..62175f9
--- /dev/null
+++ b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpPickUpDLVActivity.kt
@@ -0,0 +1,57 @@
+package com.lukouguoji.gjj.activity
+
+import android.app.Activity
+import android.content.Intent
+import android.os.Bundle
+import com.alibaba.android.arouter.facade.annotation.Route
+import com.lukouguoji.gjj.R
+import com.lukouguoji.gjj.databinding.ActivityIntImpPickUpDlvBinding
+import com.lukouguoji.gjj.viewModel.IntImpPickUpDLVViewModel
+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.router.ARouterConstants
+
+/**
+ * 国际进港-提取出库
+ */
+@Route(path = ARouterConstants.ACTIVITY_URL_INT_IMP_PICK_UP_DLV)
+class IntImpPickUpDLVActivity :
+ BaseBindingActivity() {
+
+ override fun layoutId() = R.layout.activity_int_imp_pick_up_dlv
+ override fun viewModelClass() = IntImpPickUpDLVViewModel::class.java
+
+ override fun initOnCreate(savedInstanceState: Bundle?) {
+ setBackArrow("国际进港出库")
+ binding.viewModel = viewModel
+
+ // 观察全选状态,更新图标透明度
+ viewModel.isAllChecked.observe(this) { isAllChecked ->
+ binding.checkIcon.alpha = if (isAllChecked) 1.0f else 0.5f
+ }
+
+ // 绑定分页
+ viewModel.pageModel.bindSmartRefreshLayout(binding.srl, binding.rv, viewModel, this)
+
+ // 监听刷新事件
+ FlowBus.with(ConstantEvent.EVENT_REFRESH).observe(this) {
+ viewModel.refresh()
+ }
+
+ // 初始化代理人列表
+ viewModel.initAgentList()
+
+ // 初始加载数据
+ viewModel.refresh()
+ }
+
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ super.onActivityResult(requestCode, resultCode, data)
+ if (resultCode == Activity.RESULT_OK) {
+ viewModel.onActivityResult(requestCode, resultCode, data)
+ }
+ }
+}
diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpQueryActivity.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpQueryActivity.kt
new file mode 100644
index 0000000..ca937c9
--- /dev/null
+++ b/module_gjj/src/main/java/com/lukouguoji/gjj/activity/IntImpQueryActivity.kt
@@ -0,0 +1,51 @@
+package com.lukouguoji.gjj.activity
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import com.alibaba.android.arouter.facade.annotation.Route
+import com.lukouguoji.gjj.R
+import com.lukouguoji.gjj.databinding.ActivityIntImpQueryBinding
+import com.lukouguoji.gjj.viewModel.IntImpQueryViewModel
+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_GJJ_QUERY_LIST)
+class IntImpQueryActivity :
+ BaseBindingActivity() {
+
+ override fun layoutId() = R.layout.activity_int_imp_query
+
+ override fun viewModelClass() = IntImpQueryViewModel::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.initAgentList()
+
+ viewModel.refresh()
+ }
+
+ companion object {
+ @JvmStatic
+ fun start(context: Context) {
+ context.startActivity(Intent(context, IntImpQueryActivity::class.java))
+ }
+ }
+}
diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/dialog/IntImpQueryFilterDialogModel.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/dialog/IntImpQueryFilterDialogModel.kt
new file mode 100644
index 0000000..f290ba9
--- /dev/null
+++ b/module_gjj/src/main/java/com/lukouguoji/gjj/dialog/IntImpQueryFilterDialogModel.kt
@@ -0,0 +1,87 @@
+package com.lukouguoji.gjj.dialog
+
+import android.content.Context
+import android.content.res.ColorStateList
+import android.graphics.Color
+import android.view.View
+import android.widget.ImageView
+import android.widget.TextView
+import androidx.lifecycle.MutableLiveData
+import com.lukouguoji.gjj.R
+import com.lukouguoji.gjj.databinding.DialogIntImpQueryFilterBinding
+import com.lukouguoji.module_base.base.BaseDialogModel
+import com.lxj.xpopup.XPopup
+import com.lxj.xpopup.enums.PopupPosition
+import dev.DevUtils
+import dev.utils.app.info.KeyValue
+
+/**
+ * 国际进港查询筛选抽屉
+ */
+class IntImpQueryFilterDialogModel(
+ val spCode: MutableLiveData,
+ val flightNo: MutableLiveData,
+ val dest: MutableLiveData,
+ val awbType: MutableLiveData,
+ val businessType: MutableLiveData,
+ val goodsCn: MutableLiveData,
+ private val onConfirm: () -> Unit
+) : BaseDialogModel(DIALOG_TYPE_DRAWER) {
+
+ val awbTypeList = MutableLiveData(
+ listOf(
+ KeyValue("全部", ""),
+ KeyValue("主单", "1"),
+ KeyValue("分单", "2")
+ )
+ )
+
+ val businessTypeList = MutableLiveData(
+ listOf(
+ KeyValue("全部", ""),
+ KeyValue("普货", "1"),
+ KeyValue("特货", "2")
+ )
+ )
+
+ override fun layoutId() = R.layout.dialog_int_imp_query_filter
+
+ override fun onBuild(builder: XPopup.Builder) {
+ super.onBuild(builder)
+ builder.popupPosition(PopupPosition.Right)
+ val activity = DevUtils.getTopActivity()
+ val activityWidth = activity.window.decorView.width
+ builder.maxWidth(activityWidth / 3)
+ builder.popupWidth(activityWidth / 3)
+ }
+
+ override fun onDialogCreated(context: Context) {
+ binding.model = this
+ binding.lifecycleOwner = context as? androidx.lifecycle.LifecycleOwner
+
+ val titleColor = Color.parseColor("#666666")
+ binding.root.findViewById(R.id.title_name)?.text = "筛选条件"
+ binding.root.findViewById(R.id.title_name)?.setTextColor(titleColor)
+ binding.root.findViewById(R.id.tool_tv_back)?.setTextColor(titleColor)
+ binding.root.findViewById(R.id.tool_iv_back)?.imageTintList = ColorStateList.valueOf(titleColor)
+ binding.root.findViewById(R.id.toolbar)?.setBackgroundColor(Color.WHITE)
+
+ binding.root.findViewById(R.id.tool_back)?.setOnClickListener {
+ dismiss()
+ }
+ }
+
+ fun onResetClick() {
+ spCode.value = ""
+ flightNo.value = ""
+ dest.value = ""
+ awbType.value = ""
+ businessType.value = ""
+ goodsCn.value = ""
+ }
+
+ fun onConfirmClick() {
+ dismiss()
+ onConfirm()
+ }
+}
diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/holder/IntImpPickUpDLVViewHolder.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/holder/IntImpPickUpDLVViewHolder.kt
new file mode 100644
index 0000000..8d4614f
--- /dev/null
+++ b/module_gjj/src/main/java/com/lukouguoji/gjj/holder/IntImpPickUpDLVViewHolder.kt
@@ -0,0 +1,26 @@
+package com.lukouguoji.gjj.holder
+
+import android.view.View
+import com.lukouguoji.gjj.databinding.ItemIntImpPickUpDlvBinding
+import com.lukouguoji.module_base.base.BaseViewHolder
+import com.lukouguoji.module_base.bean.IntImpPickUpDLVBean
+
+/**
+ * 国际进港-提取出库 列表项ViewHolder
+ */
+class IntImpPickUpDLVViewHolder(view: View) :
+ BaseViewHolder(view) {
+
+ override fun onBind(item: Any?, position: Int) {
+ val bean = getItemBean(item) ?: return
+ binding.bean = bean
+ binding.position = position
+ binding.executePendingBindings()
+
+ // 点击图标切换选中状态
+ binding.ivIcon.setOnClickListener {
+ bean.checked.set(!bean.checked.get())
+ binding.executePendingBindings()
+ }
+ }
+}
diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/holder/IntImpQueryViewHolder.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/holder/IntImpQueryViewHolder.kt
new file mode 100644
index 0000000..a4b7d42
--- /dev/null
+++ b/module_gjj/src/main/java/com/lukouguoji/gjj/holder/IntImpQueryViewHolder.kt
@@ -0,0 +1,19 @@
+package com.lukouguoji.gjj.holder
+
+import android.view.View
+import com.lukouguoji.gjj.databinding.ItemIntImpQueryBinding
+import com.lukouguoji.module_base.base.BaseViewHolder
+import com.lukouguoji.module_base.bean.IntImpQueryBean
+
+/**
+ * 国际进港查询列表ViewHolder
+ */
+class IntImpQueryViewHolder(view: View) :
+ BaseViewHolder(view) {
+
+ override fun onBind(item: Any?, position: Int) {
+ val bean = getItemBean(item)!!
+ binding.bean = bean
+ binding.executePendingBindings()
+ }
+}
diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpPickUpDLVViewModel.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpPickUpDLVViewModel.kt
new file mode 100644
index 0000000..21f0ceb
--- /dev/null
+++ b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpPickUpDLVViewModel.kt
@@ -0,0 +1,183 @@
+package com.lukouguoji.gjj.viewModel
+
+import android.app.Activity
+import android.content.Intent
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.viewModelScope
+import com.lukouguoji.gjj.R
+import com.lukouguoji.gjj.holder.IntImpPickUpDLVViewHolder
+import com.lukouguoji.module_base.base.BasePageViewModel
+import com.lukouguoji.module_base.bean.IntImpPickUpDLVBean
+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 dev.utils.app.info.KeyValue
+import kotlinx.coroutines.launch
+
+/**
+ * 国际进港-提取出库 ViewModel
+ */
+class IntImpPickUpDLVViewModel : BasePageViewModel() {
+
+ // ========== 搜索条件 ==========
+ val paymentDateStart = MutableLiveData("") // 缴费日期起
+ val paymentDateEnd = MutableLiveData("") // 缴费日期止
+ val agentCode = MutableLiveData("") // 代理人
+ val wbNo = MutableLiveData("") // 运单号
+ val pickUpNo = MutableLiveData("") // 提货单号
+
+ // ========== 下拉列表数据源 ==========
+ val agentList = MutableLiveData(listOf(KeyValue("全部", "")))
+
+ // ========== 统计信息 ==========
+ 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.checked.set(checked) }
+ pageModel.rv?.commonAdapter()?.notifyDataSetChanged()
+ }
+ }
+
+ // ========== 适配器配置 ==========
+ val itemViewHolder = IntImpPickUpDLVViewHolder::class.java
+ val itemLayoutId = R.layout.item_int_imp_pick_up_dlv
+
+ /**
+ * 初始化代理人列表
+ */
+ fun initAgentList() {
+ launchCollect({ NetApply.api.getIntImpAgentList() }) {
+ onSuccess = { result ->
+ val list = mutableListOf(KeyValue("全部", ""))
+ result.data?.forEach {
+ list.add(KeyValue(it.name ?: "", it.code ?: ""))
+ }
+ agentList.value = list
+ }
+ }
+ }
+
+ /**
+ * 搜索按钮点击
+ */
+ fun searchClick() {
+ refresh()
+ }
+
+ /**
+ * 扫码运单号
+ */
+ fun scanWbNo() {
+ ScanModel.startScan(getTopActivity(), Constant.RequestCode.WAYBILL)
+ }
+
+ /**
+ * 扫码提货单号
+ */
+ fun scanPickUpNo() {
+ ScanModel.startScan(getTopActivity(), Constant.RequestCode.gnj_chu_ku_list)
+ }
+
+ /**
+ * 全选按钮点击
+ */
+ fun checkAllClick() {
+ val list = pageModel.rv?.commonAdapter()?.items as? List ?: return
+ val shouldCheckAll = !isAllChecked.value!!
+ list.forEach { it.checked.set(shouldCheckAll) }
+ isAllChecked.value = shouldCheckAll
+ pageModel.rv?.commonAdapter()?.notifyDataSetChanged()
+ }
+
+ /**
+ * 确认出库
+ */
+ fun confirmOutbound() {
+ val list = pageModel.rv?.commonAdapter()?.items as? List ?: return
+ val selectedItems = list.filter { it.isSelected }
+
+ if (selectedItems.isEmpty()) {
+ showToast("请选择要出库的记录")
+ return
+ }
+
+ launchLoadingCollect({ NetApply.api.confirmIntImpPickUpDLV(selectedItems.toRequestBody()) }) {
+ onSuccess = {
+ showToast("确认出库成功")
+ viewModelScope.launch {
+ FlowBus.with(ConstantEvent.EVENT_REFRESH).emit("refresh")
+ }
+ refresh()
+ }
+ }
+ }
+
+ /**
+ * 获取列表数据
+ */
+ override fun getData() {
+ val filterParams = mapOf(
+ "beginDate" to paymentDateStart.value?.ifEmpty { null },
+ "endDate" to paymentDateEnd.value?.ifEmpty { null },
+ "agentCode" to agentCode.value?.ifEmpty { null },
+ "no" to wbNo.value?.ifEmpty { null },
+ "pkId" to pickUpNo.value?.ifEmpty { null }
+ )
+
+ val listParams = (filterParams + mapOf(
+ "page" to pageModel.page,
+ "limit" to pageModel.limit
+ )).toRequestBody()
+
+ val totalParams = filterParams.toRequestBody()
+
+ launchLoadingCollect({ NetApply.api.getIntImpPickUpDLVList(listParams) }) {
+ onSuccess = { result ->
+ pageModel.handleDataList(result.list)
+ pageModel.haveMore.postValue((result.pages) > pageModel.page)
+ }
+ }
+
+ launchCollect({ NetApply.api.getIntImpPickUpDLVTotal(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()
+ }
+ }
+ }
+
+ /**
+ * 处理扫码结果
+ */
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ if (resultCode == Activity.RESULT_OK && data != null) {
+ when (requestCode) {
+ Constant.RequestCode.WAYBILL -> {
+ wbNo.value = data.getStringExtra(Constant.Result.CODED_CONTENT)
+ refresh()
+ }
+ Constant.RequestCode.gnj_chu_ku_list -> {
+ pickUpNo.value = data.getStringExtra(Constant.Result.CODED_CONTENT)
+ refresh()
+ }
+ }
+ }
+ }
+}
diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpQueryViewModel.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpQueryViewModel.kt
new file mode 100644
index 0000000..859d096
--- /dev/null
+++ b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpQueryViewModel.kt
@@ -0,0 +1,161 @@
+package com.lukouguoji.gjj.viewModel
+
+import android.app.Activity
+import android.content.Intent
+import androidx.lifecycle.MutableLiveData
+import com.lukouguoji.gjj.R
+import com.lukouguoji.gjj.dialog.IntImpQueryFilterDialogModel
+import com.lukouguoji.gjj.holder.IntImpQueryViewHolder
+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
+import dev.utils.app.info.KeyValue
+import dev.utils.common.DateUtils
+import com.lukouguoji.module_base.ktx.formatDate
+
+/**
+ * 国际进港查询ViewModel
+ */
+class IntImpQueryViewModel : BasePageViewModel() {
+
+ // ==================== 搜索条件 ====================
+ val flightDateStart = MutableLiveData(DateUtils.getCurrentTime().formatDate())
+ val flightDateEnd = MutableLiveData("")
+ val agentId = MutableLiveData("")
+ val outStatus = MutableLiveData("")
+ val waybillNo = MutableLiveData("")
+
+ // ==================== 下拉列表 ====================
+ val agentList = MutableLiveData(listOf(KeyValue("全部", "")))
+
+ val outStatusList = MutableLiveData(
+ listOf(
+ KeyValue("全部", ""),
+ KeyValue("未出库", "0"),
+ KeyValue("已出库", "1")
+ )
+ )
+
+ // ==================== 适配器配置 ====================
+ val itemViewHolder = IntImpQueryViewHolder::class.java
+ val itemLayoutId = R.layout.item_int_imp_query
+
+ // ==================== 统计数据 ====================
+ val totalCount = MutableLiveData("0")
+ val totalPc = MutableLiveData("0")
+ val totalWeight = MutableLiveData("0")
+
+ // ==================== 筛选条件 ====================
+ val spCode = MutableLiveData("")
+ val flightNo = MutableLiveData("")
+ val dest = MutableLiveData("")
+ val awbType = MutableLiveData("")
+ val businessType = MutableLiveData("")
+ val goodsCn = MutableLiveData("")
+
+ ///////////////////////////////////////////////////////////////////////////
+ // 方法区
+ ///////////////////////////////////////////////////////////////////////////
+
+ fun waybillScanClick() {
+ ScanModel.startScan(getTopActivity(), Constant.RequestCode.WAYBILL)
+ }
+
+ fun searchClick() {
+ refresh()
+ }
+
+ fun filterClick() {
+ val filterDialog = IntImpQueryFilterDialogModel(
+ spCode = spCode,
+ flightNo = flightNo,
+ dest = dest,
+ awbType = awbType,
+ businessType = businessType,
+ goodsCn = goodsCn,
+ onConfirm = { refresh() }
+ )
+ filterDialog.show()
+ }
+
+ override fun getData() {
+ val listParams = mapOf(
+ "pageNum" to pageModel.page,
+ "pageSize" to pageModel.limit,
+ "beginDate" to flightDateStart.value!!.ifEmpty { null },
+ "endDate" to flightDateEnd.value!!.ifEmpty { null },
+ "agentCode" to agentId.value!!.ifEmpty { null },
+ "outState" to outStatus.value!!.ifEmpty { null },
+ "wbNo" to waybillNo.value!!.ifEmpty { null },
+ "spCode" to spCode.value!!.ifEmpty { null },
+ "fno" to flightNo.value!!.ifEmpty { null },
+ "dest" to dest.value!!.ifEmpty { null },
+ "awbType" to awbType.value!!.ifEmpty { null },
+ "businessType" to businessType.value!!.ifEmpty { null },
+ "goods" to goodsCn.value!!.ifEmpty { null }
+ ).toRequestBody()
+
+ val totalParams = mapOf(
+ "beginDate" to flightDateStart.value!!.ifEmpty { null },
+ "endDate" to flightDateEnd.value!!.ifEmpty { null },
+ "agentCode" to agentId.value!!.ifEmpty { null },
+ "outState" to outStatus.value!!.ifEmpty { null },
+ "wbNo" to waybillNo.value!!.ifEmpty { null },
+ "spCode" to spCode.value!!.ifEmpty { null },
+ "fno" to flightNo.value!!.ifEmpty { null },
+ "dest" to dest.value!!.ifEmpty { null },
+ "awbType" to awbType.value!!.ifEmpty { null },
+ "businessType" to businessType.value!!.ifEmpty { null },
+ "goods" to goodsCn.value!!.ifEmpty { null }
+ ).toRequestBody()
+
+ launchLoadingCollect({
+ NetApply.api.getIntImpQueryList(listParams)
+ }) {
+ onSuccess = { pageInfo ->
+ pageModel.handleListBean(pageInfo.toBaseListBean())
+ }
+ }
+
+ launchCollect({
+ NetApply.api.getIntImpQueryTotal(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()
+ }
+ }
+ }
+
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ if (resultCode == Activity.RESULT_OK && data != null) {
+ when (requestCode) {
+ Constant.RequestCode.WAYBILL -> {
+ waybillNo.value = data.getStringExtra(Constant.Result.CODED_CONTENT)
+ refresh()
+ }
+ }
+ }
+ }
+
+ fun initAgentList() {
+ launchCollect({
+ NetApply.api.getIntImpAgentList()
+ }) {
+ onSuccess = { result ->
+ val list = mutableListOf(KeyValue("全部", ""))
+ result.data?.forEach {
+ list.add(KeyValue(it.name ?: "", it.code ?: ""))
+ }
+ agentList.value = list
+ }
+ }
+ }
+}
diff --git a/module_gjj/src/main/res/layout/activity_int_imp_pick_up_dlv.xml b/module_gjj/src/main/res/layout/activity_int_imp_pick_up_dlv.xml
new file mode 100644
index 0000000..004369b
--- /dev/null
+++ b/module_gjj/src/main/res/layout/activity_int_imp_pick_up_dlv.xml
@@ -0,0 +1,197 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/module_gjj/src/main/res/layout/activity_int_imp_query.xml b/module_gjj/src/main/res/layout/activity_int_imp_query.xml
new file mode 100644
index 0000000..d269a6a
--- /dev/null
+++ b/module_gjj/src/main/res/layout/activity_int_imp_query.xml
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/module_gjj/src/main/res/layout/dialog_int_imp_query_filter.xml b/module_gjj/src/main/res/layout/dialog_int_imp_query_filter.xml
new file mode 100644
index 0000000..f4d9a02
--- /dev/null
+++ b/module_gjj/src/main/res/layout/dialog_int_imp_query_filter.xml
@@ -0,0 +1,153 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/module_gjj/src/main/res/layout/item_int_imp_pick_up_dlv.xml b/module_gjj/src/main/res/layout/item_int_imp_pick_up_dlv.xml
new file mode 100644
index 0000000..567c9ae
--- /dev/null
+++ b/module_gjj/src/main/res/layout/item_int_imp_pick_up_dlv.xml
@@ -0,0 +1,271 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/module_gjj/src/main/res/layout/item_int_imp_query.xml b/module_gjj/src/main/res/layout/item_int_imp_query.xml
new file mode 100644
index 0000000..b6fdad2
--- /dev/null
+++ b/module_gjj/src/main/res/layout/item_int_imp_query.xml
@@ -0,0 +1,273 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+