diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e94a4fd..e53e927 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -310,6 +310,10 @@
android:name=".page.transportLog.list.TransportLogActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="userLandscape" />
+
() {
+
+ override fun layoutId() = R.layout.activity_cold_storage
+ override fun viewModelClass() = ColdStorageViewModel::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.refresh()
+ }
+
+ override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
+ super.onActivityResult(requestCode, resultCode, data)
+ if (requestCode == Constant.RequestCode.WAYBILL && resultCode == Activity.RESULT_OK) {
+ viewModel.wbNo.value = data?.getStringExtra(Constant.Result.CODED_CONTENT)
+ viewModel.searchClick()
+ }
+ }
+
+ companion object {
+ @JvmStatic
+ fun start(context: Context) {
+ context.startActivity(Intent(context, ColdStorageActivity::class.java))
+ }
+ }
+}
diff --git a/app/src/main/java/com/lukouguoji/aerologic/page/coldStorage/list/ColdStorageViewHolder.kt b/app/src/main/java/com/lukouguoji/aerologic/page/coldStorage/list/ColdStorageViewHolder.kt
new file mode 100644
index 0000000..3db7a5e
--- /dev/null
+++ b/app/src/main/java/com/lukouguoji/aerologic/page/coldStorage/list/ColdStorageViewHolder.kt
@@ -0,0 +1,26 @@
+package com.lukouguoji.aerologic.page.coldStorage.list
+
+import android.view.View
+import com.lukouguoji.aerologic.databinding.ItemColdStorageBinding
+import com.lukouguoji.module_base.base.BaseViewHolder
+import com.lukouguoji.module_base.bean.ColdStorageBean
+
+/**
+ * 冷库登记 列表项ViewHolder
+ */
+class ColdStorageViewHolder(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/app/src/main/java/com/lukouguoji/aerologic/page/coldStorage/list/ColdStorageViewModel.kt b/app/src/main/java/com/lukouguoji/aerologic/page/coldStorage/list/ColdStorageViewModel.kt
new file mode 100644
index 0000000..97a99ed
--- /dev/null
+++ b/app/src/main/java/com/lukouguoji/aerologic/page/coldStorage/list/ColdStorageViewModel.kt
@@ -0,0 +1,175 @@
+package com.lukouguoji.aerologic.page.coldStorage.list
+
+import androidx.lifecycle.MutableLiveData
+import androidx.lifecycle.viewModelScope
+import com.lukouguoji.aerologic.R
+import com.lukouguoji.module_base.base.BasePageViewModel
+import com.lukouguoji.module_base.bean.ColdStorageBean
+import dev.utils.app.info.KeyValue
+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 ColdStorageViewModel : BasePageViewModel() {
+
+ // ========== 搜索条件 ==========
+ val ieFlag = MutableLiveData("") // 进出港标识
+ val wbNo = MutableLiveData("") // 运单号
+ val status = MutableLiveData("") // 货物状态
+ val outUserName = MutableLiveData("") // 出库人
+ val inUserName = MutableLiveData("") // 入库人
+
+ // ========== 下拉列表数据源 ==========
+ val ieFlagList = MutableLiveData>(
+ listOf(
+ KeyValue("全部", ""),
+ KeyValue("进港", "I"),
+ KeyValue("出港", "E")
+ )
+ )
+ val statusList = MutableLiveData>(
+ listOf(
+ KeyValue("全部", ""),
+ KeyValue("已入库", "已入库"),
+ 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 = ColdStorageViewHolder::class.java
+ val itemLayoutId = R.layout.item_cold_storage
+
+ /**
+ * 扫码运单号
+ */
+ fun scanWbNo() {
+ ScanModel.startScan(getTopActivity(), Constant.RequestCode.WAYBILL)
+ }
+
+ /**
+ * 搜索按钮点击
+ */
+ fun searchClick() {
+ refresh()
+ }
+
+ /**
+ * 全选按钮点击
+ */
+ 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 completeIn() {
+ val list = pageModel.rv?.commonAdapter()?.items as? List ?: return
+ val selectedItems = list.filter { it.isSelected }
+
+ if (selectedItems.isEmpty()) {
+ showToast("请选择要入库的数据")
+ return
+ }
+
+ launchLoadingCollect({ NetApply.api.coldStorageCompleteIn(selectedItems.toRequestBody()) }) {
+ onSuccess = {
+ showToast("入库完成")
+ viewModelScope.launch {
+ FlowBus.with(ConstantEvent.EVENT_REFRESH).emit("refresh")
+ }
+ refresh()
+ }
+ }
+ }
+
+ /**
+ * 完成出库
+ */
+ fun completeOut() {
+ val list = pageModel.rv?.commonAdapter()?.items as? List ?: return
+ val selectedItems = list.filter { it.isSelected }
+
+ if (selectedItems.isEmpty()) {
+ showToast("请选择要出库的数据")
+ return
+ }
+
+ launchLoadingCollect({ NetApply.api.coldStorageCompleteOut(selectedItems.toRequestBody()) }) {
+ onSuccess = {
+ showToast("出库完成")
+ viewModelScope.launch {
+ FlowBus.with(ConstantEvent.EVENT_REFRESH).emit("refresh")
+ }
+ refresh()
+ }
+ }
+ }
+
+ /**
+ * 获取数据
+ */
+ override fun getData() {
+ val filterParams = mapOf(
+ "ieFlag" to ieFlag.value?.ifEmpty { null },
+ "wbNo" to wbNo.value?.ifEmpty { null },
+ "status" to status.value?.ifEmpty { null },
+ "outUserName" to outUserName.value?.ifEmpty { null },
+ "inUserName" to inUserName.value?.ifEmpty { null }
+ )
+
+ val listParams = (filterParams + mapOf(
+ "pageNum" to pageModel.page,
+ "pageSize" to pageModel.limit
+ )).toRequestBody()
+
+ val totalParams = filterParams.toRequestBody()
+
+ // 获取列表
+ launchLoadingCollect({ NetApply.api.getColdStorageList(listParams) }) {
+ onSuccess = { pageModel.handleListBean(it?.toBaseListBean()) }
+ }
+
+ // 获取统计信息
+ launchCollect({ NetApply.api.getColdStorageTotal(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/app/src/main/java/com/lukouguoji/aerologic/ui/fragment/HomeFragment.kt b/app/src/main/java/com/lukouguoji/aerologic/ui/fragment/HomeFragment.kt
index a041f27..ada138d 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
@@ -30,6 +30,7 @@ import com.lukouguoji.aerologic.page.telegram.list.TelegramListActivity
import com.lukouguoji.aerologic.page.test.PrintActivity
import com.lukouguoji.aerologic.page.transport.GoodsTransportActivity
import com.lukouguoji.aerologic.page.transportLog.list.TransportLogActivity
+import com.lukouguoji.aerologic.page.coldStorage.list.ColdStorageActivity
import com.lukouguoji.aerologic.page.uld.list.UldListActivity
import com.lukouguoji.gnc.page.deposit.list.GncDepositListActivity
import com.lukouguoji.gnc.page.distribution.home.GncDistributionHomeActivity
@@ -553,6 +554,10 @@ class HomeFragment : Fragment() {
Constant.AuthName.ComprehensiveUld -> {
UldListActivity.start(requireContext())
}
+ // 冷库登记
+ Constant.AuthName.ComprehensiveColdStorage -> {
+ ColdStorageActivity.start(requireContext())
+ }
else -> {
Toast.makeText(
@@ -962,6 +967,13 @@ class HomeFragment : Fragment() {
"ULD管理"
)
)
+ list.add(
+ RightMenu(
+ Constant.AuthName.ComprehensiveColdStorage,
+ com.lukouguoji.module_base.R.mipmap.gnc_cangku,
+ "冷库登记"
+ )
+ )
}
else -> {
diff --git a/app/src/main/res/layout/activity_cold_storage.xml b/app/src/main/res/layout/activity_cold_storage.xml
new file mode 100644
index 0000000..4f6551b
--- /dev/null
+++ b/app/src/main/res/layout/activity_cold_storage.xml
@@ -0,0 +1,208 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/item_cold_storage.xml b/app/src/main/res/layout/item_cold_storage.xml
new file mode 100644
index 0000000..afbb065
--- /dev/null
+++ b/app/src/main/res/layout/item_cold_storage.xml
@@ -0,0 +1,283 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/ColdStorageBean.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/ColdStorageBean.kt
new file mode 100644
index 0000000..d483a9d
--- /dev/null
+++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/ColdStorageBean.kt
@@ -0,0 +1,26 @@
+package com.lukouguoji.module_base.bean
+
+import androidx.databinding.ObservableBoolean
+
+/**
+ * 冷库登记 Bean
+ */
+class ColdStorageBean {
+ var id: Long = 0
+ var wbNo: String = "" // 运单号
+ var pc: Int = 0 // 件数
+ var wt: Double = 0.0 // 重量
+ var inUserName: String = "" // 入库人
+ var inDate: String = "" // 入库时间
+ var outUserName: String = "" // 出库人
+ var outDate: String = "" // 出库时间
+ var storageDuration: String = "" // 在库时长
+ var status: String = "" // 在库状态
+ var ieFlag: String = "" // 进出港标识
+
+ // 多选状态
+ 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/common/Constant.kt b/module_base/src/main/java/com/lukouguoji/module_base/common/Constant.kt
index 918d26e..b827f94 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
@@ -331,6 +331,9 @@ interface Constant {
// ULD管理
const val ComprehensiveUld = "AppComprehensiveUld"
+
+ // 冷库登记
+ const val ComprehensiveColdStorage = "AppComprehensiveColdStorage"
}
}
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 eed9206..67af5fb 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
@@ -11,6 +11,7 @@ import com.lukouguoji.module_base.bean.BaseResultBean
import com.lukouguoji.module_base.bean.BoxDetailsForCarIdBean
import com.lukouguoji.module_base.bean.CarBarBean
import com.lukouguoji.module_base.bean.CarOrUldBean
+import com.lukouguoji.module_base.bean.ColdStorageBean
import com.lukouguoji.module_base.bean.DiBangChannelBean
import com.lukouguoji.module_base.bean.DictBean
import com.lukouguoji.module_base.bean.DictIdValueBean
@@ -1887,4 +1888,32 @@ interface Api {
*/
@POST("eqm/uld/deleteUld")
suspend fun deleteUld(@Query("uld") uld: String): BaseResultBean
+
+ ///////////////////////////////////////////////////////////////////////////
+ // 冷库登记
+ ///////////////////////////////////////////////////////////////////////////
+
+ /**
+ * 冷库登记-分页查询
+ */
+ @POST("ColdStorage/pageQuery")
+ suspend fun getColdStorageList(@Body data: RequestBody): PageInfo
+
+ /**
+ * 冷库登记-分页合计
+ */
+ @POST("ColdStorage/pageQueryTotal")
+ suspend fun getColdStorageTotal(@Body data: RequestBody): BaseResultBean
+
+ /**
+ * 冷库登记-完成入库
+ */
+ @POST("ColdStorage/completeIn")
+ suspend fun coldStorageCompleteIn(@Body data: RequestBody): BaseResultBean
+
+ /**
+ * 冷库登记-完成出库
+ */
+ @POST("ColdStorage/completeOut")
+ suspend fun coldStorageCompleteOut(@Body data: RequestBody): BaseResultBean
}
\ No newline at end of file
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 4ee751c..72907d5 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
@@ -213,4 +213,7 @@ object ARouterConstants {
const val ACTIVITY_URL_PDA_ENTER = "/pda/PDAEnterActivity" //PDA入口
+ ///////////////// 综合管理
+ const val ACTIVITY_URL_COLD_STORAGE = "/app/ColdStorageActivity" //冷库登记
+
}
\ No newline at end of file