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 e598426..dd64d48 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 @@ -1902,6 +1902,30 @@ interface Api { @POST("IntImpTally/listHaWb") suspend fun getIntImpTallySubList(@Body data: RequestBody): BaseResultBean> + /** + * 国际进港理货-人工放行 + */ + @POST("IntImpTally/customCommand") + suspend fun intImpTallyCustomCommand(@Body data: RequestBody): BaseResultBean + + /** + * 国际进港理货-状态重置 + */ + @POST("IntImpTally/resetDeclare") + suspend fun intImpTallyResetDeclare(@Body data: RequestBody): BaseResultBean + + /** + * 国际进港理货-删除申报 + */ + @POST("IntImpTally/deleteDeclare") + suspend fun intImpTallyDeleteDeclare(@Body data: RequestBody): BaseResultBean + + /** + * 国际进港理货-理货申报 + */ + @POST("IntImpTally/declare") + suspend fun intImpTallyDeclare(@Body data: RequestBody): BaseResultBean + /** * 国际进港舱单-货物发放 */ diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/dialog/IntImpTallyDeleteDialogModel.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/dialog/IntImpTallyDeleteDialogModel.kt new file mode 100644 index 0000000..58663e6 --- /dev/null +++ b/module_gjj/src/main/java/com/lukouguoji/gjj/dialog/IntImpTallyDeleteDialogModel.kt @@ -0,0 +1,58 @@ +package com.lukouguoji.gjj.dialog + +import android.content.Context +import androidx.lifecycle.MutableLiveData +import com.lukouguoji.gjj.R +import com.lukouguoji.gjj.databinding.DialogIntImpTallyDeleteBinding +import com.lukouguoji.module_base.base.BaseDialogModel +import com.lukouguoji.module_base.ktx.verifyNullOrEmpty +import dev.utils.app.info.KeyValue + +/** + * 国际进港理货 - 删除申报对话框 + */ +class IntImpTallyDeleteDialogModel( + val changeReasonList: List, // 变更原因列表 + private val callback: (IntImpTallyDeleteDialogModel) -> Unit +) : BaseDialogModel(DIALOG_TYPE_CENTER) { + + // 变更原因代码(存储的是 code) + val changeReason = MutableLiveData("") + + // 联系人姓名 + val contactName = MutableLiveData("") + + // 联系人电话 + val contactPhone = MutableLiveData("") + + override fun layoutId(): Int { + return R.layout.dialog_int_imp_tally_delete + } + + override fun onDialogCreated(context: Context) { + binding.model = this + } + + /** + * 确认按钮点击 + */ + fun onConfirmClick() { + // 验证变更原因 + if (changeReason.value.verifyNullOrEmpty("请选择变更原因")) { + return + } + + // 验证联系人姓名 + if (contactName.value.verifyNullOrEmpty("请输入联系人姓名")) { + return + } + + // 验证联系人电话 + if (contactPhone.value.verifyNullOrEmpty("请输入联系人电话")) { + return + } + + dismiss() + callback(this) + } +} diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/dialog/IntImpTallyResetDialogModel.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/dialog/IntImpTallyResetDialogModel.kt new file mode 100644 index 0000000..2296508 --- /dev/null +++ b/module_gjj/src/main/java/com/lukouguoji/gjj/dialog/IntImpTallyResetDialogModel.kt @@ -0,0 +1,66 @@ +package com.lukouguoji.gjj.dialog + +import android.content.Context +import androidx.lifecycle.MutableLiveData +import com.lukouguoji.gjj.R +import com.lukouguoji.gjj.databinding.DialogIntImpTallyResetBinding +import com.lukouguoji.module_base.base.BaseDialogModel +import com.lukouguoji.module_base.ktx.verifyNullOrEmpty +import dev.utils.app.info.KeyValue + +/** + * 国际进港理货 - 状态重置对话框 + */ +class IntImpTallyResetDialogModel( + private val callback: (IntImpTallyResetDialogModel) -> Unit +) : BaseDialogModel(DIALOG_TYPE_CENTER) { + + // 重置状态列表 + val resetStatusList = MutableLiveData>() + + // 选中的重置状态(存储的是value) + val selectedResetStatus = MutableLiveData("") + + // 重置状态code (传给后端的restStatus参数) + var resetStatusCode: String? = null + + override fun layoutId(): Int { + return R.layout.dialog_int_imp_tally_reset + } + + override fun onDialogCreated(context: Context) { + binding.model = this + initResetStatusList() + + // 监听选择变化,更新resetStatusCode + selectedResetStatus.observeForever { value -> + resetStatusCode = when (value) { + "01" -> "01" // 正常 + "02" -> null // 未申报 + else -> null + } + } + } + + /** + * 初始化重置状态列表 + */ + private fun initResetStatusList() { + val list = listOf( + KeyValue("正常", "01"), + KeyValue("未申报", "02") + ) + resetStatusList.value = list + } + + /** + * 保存按钮点击 + */ + fun onSaveClick() { + if (selectedResetStatus.value.verifyNullOrEmpty("请选择重置状态")) { + return + } + dismiss() + callback(this) + } +} diff --git a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpTallyViewModel.kt b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpTallyViewModel.kt index d7423fa..3b31515 100644 --- a/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpTallyViewModel.kt +++ b/module_gjj/src/main/java/com/lukouguoji/gjj/viewModel/IntImpTallyViewModel.kt @@ -3,10 +3,13 @@ package com.lukouguoji.gjj.viewModel import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope import com.lukouguoji.gjj.R +import com.lukouguoji.gjj.dialog.IntImpTallyDeleteDialogModel +import com.lukouguoji.gjj.dialog.IntImpTallyResetDialogModel import dev.utils.common.DateUtils import com.lukouguoji.module_base.ktx.formatDate import com.lukouguoji.gjj.holder.IntImpTallyViewHolder import com.lukouguoji.module_base.base.BasePageViewModel +import com.lukouguoji.module_base.bean.GjjDeclareParam import com.lukouguoji.module_base.bean.GjjImportTally import com.lukouguoji.module_base.common.Constant import com.lukouguoji.module_base.common.ConstantEvent @@ -94,63 +97,146 @@ class IntImpTallyViewModel : BasePageViewModel() { } /** - * 人工放行(暂不实现) + * 收集选中的主单和分单 + */ + private fun getSelectedData(): Pair, List> { + val list = pageModel.rv?.commonAdapter()?.items as? List + ?: return Pair(emptyList(), emptyList()) + val selectedMaWb = list.filter { it.isSelected } + val selectedHaWb = mutableListOf() + list.forEach { maWb -> + maWb.haWbList?.forEach { haWb -> + if (haWb.isSelected) selectedHaWb.add(haWb) + } + } + return Pair(selectedMaWb, selectedHaWb) + } + + /** + * 人工放行 */ fun manualReleaseClick() { - val list = pageModel.rv?.commonAdapter()?.items as? List ?: return - val selectedItems = list.filter { it.isSelected } + val (selectedMaWb, selectedHaWb) = getSelectedData() - if (selectedItems.isEmpty()) { + if (selectedMaWb.isEmpty() && selectedHaWb.isEmpty()) { showToast("请选择要放行的记录") return } - showToast("人工放行功能开发中") + val param = GjjDeclareParam( + mtallyList = if (selectedMaWb.isNotEmpty()) selectedMaWb else null, + htallyList = if (selectedHaWb.isNotEmpty()) selectedHaWb else null + ) + + launchLoadingCollect({ NetApply.api.intImpTallyCustomCommand(param.toRequestBody()) }) { + onSuccess = { + showToast("人工放行成功") + viewModelScope.launch { + FlowBus.with(ConstantEvent.EVENT_REFRESH).emit("refresh") + } + refresh() + } + } } /** - * 状态重置(暂不实现) + * 状态重置 */ fun statusResetClick() { - val list = pageModel.rv?.commonAdapter()?.items as? List ?: return - val selectedItems = list.filter { it.isSelected } + val (selectedMaWb, selectedHaWb) = getSelectedData() - if (selectedItems.isEmpty()) { + if (selectedMaWb.isEmpty() && selectedHaWb.isEmpty()) { showToast("请选择要重置的记录") return } - showToast("状态重置功能开发中") + val dialog = IntImpTallyResetDialogModel { dialogModel -> + val param = GjjDeclareParam( + mtallyList = if (selectedMaWb.isNotEmpty()) selectedMaWb else null, + htallyList = if (selectedHaWb.isNotEmpty()) selectedHaWb else null, + restStatus = dialogModel.resetStatusCode + ) + + launchLoadingCollect({ NetApply.api.intImpTallyResetDeclare(param.toRequestBody()) }) { + onSuccess = { + showToast("状态重置成功") + viewModelScope.launch { + FlowBus.with(ConstantEvent.EVENT_REFRESH).emit("refresh") + } + refresh() + } + } + } + + dialog.show() } /** - * 删除理货(暂不实现) + * 删除理货 */ fun deleteTallyClick() { - val list = pageModel.rv?.commonAdapter()?.items as? List ?: return - val selectedItems = list.filter { it.isSelected } + val (selectedMaWb, selectedHaWb) = getSelectedData() - if (selectedItems.isEmpty()) { + if (selectedMaWb.isEmpty() && selectedHaWb.isEmpty()) { showToast("请选择要删除的记录") return } - showToast("删除理货功能开发中") + // 从接口获取删除原因列表 + launchLoadingCollect({ NetApply.api.getDelReasonList() }) { + onSuccess = { result -> + val changeReasonList = result.data?.map { it.toKeyValue() } ?: emptyList() + + val dialog = IntImpTallyDeleteDialogModel(changeReasonList) { dialogModel -> + val param = GjjDeclareParam( + dcode = dialogModel.changeReason.value ?: "", + dcontactsName = dialogModel.contactName.value ?: "", + dcontactsTel = dialogModel.contactPhone.value ?: "", + mtallyList = if (selectedMaWb.isNotEmpty()) selectedMaWb else null, + htallyList = if (selectedHaWb.isNotEmpty()) selectedHaWb else null + ) + + launchLoadingCollect({ NetApply.api.intImpTallyDeleteDeclare(param.toRequestBody()) }) { + onSuccess = { + showToast("删除申报成功") + viewModelScope.launch { + FlowBus.with(ConstantEvent.EVENT_REFRESH).emit("refresh") + } + refresh() + } + } + } + + dialog.show() + } + } } /** - * 理货申报(暂不实现) + * 理货申报 */ fun tallyDeclareClick() { - val list = pageModel.rv?.commonAdapter()?.items as? List ?: return - val selectedItems = list.filter { it.isSelected } + val (selectedMaWb, selectedHaWb) = getSelectedData() - if (selectedItems.isEmpty()) { + if (selectedMaWb.isEmpty() && selectedHaWb.isEmpty()) { showToast("请选择要申报的记录") return } - showToast("理货申报功能开发中") + val param = GjjDeclareParam( + mtallyList = if (selectedMaWb.isNotEmpty()) selectedMaWb else null, + htallyList = if (selectedHaWb.isNotEmpty()) selectedHaWb else null + ) + + launchLoadingCollect({ NetApply.api.intImpTallyDeclare(param.toRequestBody()) }) { + onSuccess = { + showToast("理货申报成功") + viewModelScope.launch { + FlowBus.with(ConstantEvent.EVENT_REFRESH).emit("refresh") + } + refresh() + } + } } /** diff --git a/module_gjj/src/main/res/layout/dialog_int_imp_tally_delete.xml b/module_gjj/src/main/res/layout/dialog_int_imp_tally_delete.xml new file mode 100644 index 0000000..dd5e3c1 --- /dev/null +++ b/module_gjj/src/main/res/layout/dialog_int_imp_tally_delete.xml @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/module_gjj/src/main/res/layout/dialog_int_imp_tally_reset.xml b/module_gjj/src/main/res/layout/dialog_int_imp_tally_reset.xml new file mode 100644 index 0000000..338827a --- /dev/null +++ b/module_gjj/src/main/res/layout/dialog_int_imp_tally_reset.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +