diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcHandoverSheetBean.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcHandoverSheetBean.kt new file mode 100644 index 0000000..13ca67f --- /dev/null +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcHandoverSheetBean.kt @@ -0,0 +1,41 @@ +package com.lukouguoji.module_base.bean + +/** + * 国际出港货物交接单Bean + */ +data class GjcHandoverSheetBean( + // ========== API文档字段 ========== + var id: Long? = null, // 主键id + var maWbId: Long? = null, // 运单主键id + var no: String? = null, // 编号 + var prefix: String? = null, // 前缀 + var chargeWeight: Double? = null, // 计费重量 + var saleAgentCode: String? = null, // 销售代理人 + var expressName: String? = null, // 平台或快递企业名称 + var cbEcFlag: String? = null, // 是否为跨境电商货物(0:否;1:是) + var opName: String? = null, // 经办人签名 + var opCardId: String? = null, // 经办人身份证号 + + // ========== 防止隐含危险品检查单 ========== + var goodsName: String? = null, // 申报货物的品名为确指品名(0/1) + var danger: String? = null, // 确认货物内不含未申报的危险品(0/1) + var fish: String? = null, // 是否非观赏鱼类货物(0/1) + var packaging: String? = null, // 包装件没有油渍或液体渗漏(0/1) + var labels: String? = null, // 清除或涂去无关标记或标签(0/1) + + // ========== 高风险货物检查单 ========== + var appearance: String? = null, // 航空货物外观显现异常(0/1) + var threat: String? = null, // 有具体情报显示威胁(0/1) + var highRisk: String? = null, // 结论:是否可以判定为高风险货物(0/1) + + // ========== 跨境电商检查单 ========== + var submitStatement: String? = null, // 是否已提交声明(0/1/2: 是/否/不适用) + + // ========== 货站收运人员 ========== + var staOpName: String? = null, // 货站收运人员签名 + + // ========== 安检信息(用户手动填写) ========== + var securityChannel: String? = null, // 安检机通道号 + var securityStartTime: String? = null, // 开始过机时间 + var securityEndTime: String? = null // 结束过机时间 +) diff --git a/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcHandoverSheetResponse.kt b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcHandoverSheetResponse.kt new file mode 100644 index 0000000..8f0b0e5 --- /dev/null +++ b/module_base/src/main/java/com/lukouguoji/module_base/bean/GjcHandoverSheetResponse.kt @@ -0,0 +1,9 @@ +package com.lukouguoji.module_base.bean + +/** + * 国际出港货物交接单查询接口返回Bean + */ +data class GjcHandoverSheetResponse( + var maWb: GjcMaWb? = null, // 主单信息 + var handoverSheet: GjcHandoverSheetBean? = null // 交接单信息(可能为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 ebcc080..cdef4d7 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 @@ -27,6 +27,8 @@ import com.lukouguoji.module_base.bean.GjcCheckInRecord import com.lukouguoji.module_base.bean.GjcGoodsAddBean import com.lukouguoji.module_base.bean.GjcGoodsBean import com.lukouguoji.module_base.bean.GjcGoodsDetailsBean +import com.lukouguoji.module_base.bean.GjcHandoverSheetBean +import com.lukouguoji.module_base.bean.GjcHandoverSheetResponse import com.lukouguoji.module_base.bean.GjcInspectionBean import com.lukouguoji.module_base.bean.GjcMaWb import com.lukouguoji.module_base.bean.GjcMove @@ -418,6 +420,23 @@ interface Api { @POST("IntExpCheckInCheck/pageQueryTotal") suspend fun getGjcInspectionTotal(@Body data: RequestBody): BaseResultBean + /** + * 国际出港收运审核-交接单-获取交接单内容 + * 接口路径: /IntExpCheckInCheck/queryHandoverSheet + */ + @GET("IntExpCheckInCheck/queryHandoverSheet") + suspend fun queryHandoverSheet(@Query("maWbId") maWbId: Long): BaseResultBean + + /** + * 国际出港收运审核-交接单-保存 + * 接口路径: /IntExpCheckInCheck/saveHandoverSheet + */ + @POST("IntExpCheckInCheck/saveHandoverSheet") + suspend fun saveHandoverSheet(@Body data: RequestBody): BaseResultBean + + /////////////////////////////////////////////////////////////////////////// + // 国际出 - 查询 + /////////////////////////////////////////////////////////////////////////// /** * 国际出港查询-分页查询 * 接口路径: /IntExpSearch/pageQuery diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcHandoverActivity.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcHandoverActivity.kt index 27482f9..6f91124 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcHandoverActivity.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcHandoverActivity.kt @@ -8,6 +8,7 @@ import com.lukouguoji.gjc.R import com.lukouguoji.gjc.databinding.ActivityGjcHandoverBinding import com.lukouguoji.gjc.viewModel.GjcHandoverViewModel import com.lukouguoji.module_base.base.BaseBindingActivity +import com.lukouguoji.module_base.common.Constant import com.lukouguoji.module_base.router.ARouterConstants /** @@ -25,12 +26,16 @@ class GjcHandoverActivity : setBackArrow("货物交接单") binding.viewModel = viewModel + + // 初始化数据 + viewModel.initOnCreated(intent) } companion object { @JvmStatic - fun start(context: Context) { + fun start(context: Context, maWbId: Long) { val starter = Intent(context, GjcHandoverActivity::class.java) + .putExtra(Constant.Key.MAWB_ID, maWbId) context.startActivity(starter) } } diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcInspectionDetailsActivity.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcInspectionDetailsActivity.kt index fdf099d..e3b763d 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcInspectionDetailsActivity.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/activity/GjcInspectionDetailsActivity.kt @@ -38,7 +38,8 @@ class GjcInspectionDetailsActivity : // 右侧文档按钮点击事件 findViewById(R.id.ivDocument).setOnClickListener { - GjcHandoverActivity.start(this) + val maWbId = viewModel.dataBean.value?.maWbId ?: 0L + GjcHandoverActivity.start(this, maWbId) } binding.viewModel = viewModel diff --git a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcHandoverViewModel.kt b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcHandoverViewModel.kt index 479d46f..8e01a7a 100644 --- a/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcHandoverViewModel.kt +++ b/module_gjc/src/main/java/com/lukouguoji/gjc/viewModel/GjcHandoverViewModel.kt @@ -1,19 +1,305 @@ package com.lukouguoji.gjc.viewModel +import android.app.AlertDialog +import android.content.Intent +import androidx.lifecycle.MutableLiveData import com.lukouguoji.module_base.base.BaseViewModel +import com.lukouguoji.module_base.bean.GjcHandoverSheetBean +import com.lukouguoji.module_base.common.Constant +import com.lukouguoji.module_base.http.net.NetApply +import com.lukouguoji.module_base.ktx.* /** * 国际出港货物交接单 ViewModel */ class GjcHandoverViewModel : BaseViewModel() { - // 暂时为静态页面,无业务逻辑 + // 运单主键ID + var maWbId: Long = 0L - fun cancelClick() { + // 数据Bean + val dataBean = MutableLiveData(GjcHandoverSheetBean()) + // ========== 跨境电商单选框 ========== + val cbEcFlag = MutableLiveData("1") // 默认选中"是" + + /** + * 跨境电商RadioButton点击 + */ + fun onCbEcFlagClick(value: String) { + cbEcFlag.value = value } - fun saveClick() { + // ========== 防止隐含危险品检查单 ========== + val goodsNameYes = MutableLiveData(false) // 品名为确指品名-是 + val goodsNameNo = MutableLiveData(false) // 品名为确指品名-否 + val dangerYes = MutableLiveData(false) // 不含危险品-是 + val dangerNo = MutableLiveData(false) // 不含危险品-否 + val fishYes = MutableLiveData(false) // 非观赏鱼类-是 + val fishNo = MutableLiveData(false) // 非观赏鱼类-否 + val packagingYes = MutableLiveData(false) // 无油渍渗漏-是 + val packagingNo = MutableLiveData(false) // 无油渍渗漏-否 + val labelsYes = MutableLiveData(false) // 清除标记-是 + val labelsNo = MutableLiveData(false) // 清除标记-否 + // ========== 高风险货物检查单 ========== + val appearanceYes = MutableLiveData(false) // 外观异常-是 + val appearanceNo = MutableLiveData(false) // 外观异常-否 + val threatYes = MutableLiveData(false) // 情报威胁-是 + val threatNo = MutableLiveData(false) // 情报威胁-否 + val highRiskYes = MutableLiveData(false) // 高风险-是 + val highRiskNo = MutableLiveData(false) // 高风险-否 + + // ========== 跨境电商检查单 ========== + val submitStatementYes = MutableLiveData(false) // 提交声明-是 + val submitStatementNA = MutableLiveData(false) // 提交声明-不适用 + val submitStatementNo = MutableLiveData(false) // 提交声明-否 + + // ========== 安检信息 ========== + val securityChannel = MutableLiveData("") // 安检机通道号 + val securityStartTime = MutableLiveData("") // 开始过机时间 + val securityEndTime = MutableLiveData("") // 结束过机时间 + + /** + * 初始化(从Intent获取参数并加载数据) + */ + fun initOnCreated(intent: Intent) { + maWbId = intent.getLongExtra(Constant.Key.MAWB_ID, 0L) + if (maWbId > 0) { + loadData() + } + } + + /** + * 加载交接单数据 + */ + private fun loadData() { + launchLoadingCollect({ NetApply.api.queryHandoverSheet(maWbId) }) { + onSuccess = { result -> + val response = result.data + val maWb = response?.maWb + val handoverSheet = response?.handoverSheet + + // 创建或更新dataBean + val bean = (handoverSheet ?: GjcHandoverSheetBean()).apply { + // 如果handoverSheet为null,从maWb填充基础信息 + if (handoverSheet == null && maWb != null) { + this.maWbId = maWb.maWbId + this.prefix = maWb.prefix + this.no = maWb.no + this.chargeWeight = maWb.weight // 使用主单重量作为计费重量 + this.saleAgentCode = maWb.agentCode + } + } + + dataBean.value = bean + + // 填充CheckBox状态 + updateCheckBoxState(bean) + + // 填充安检信息 + securityChannel.value = bean.securityChannel ?: "" + securityStartTime.value = bean.securityStartTime ?: "" + securityEndTime.value = bean.securityEndTime ?: "" + } + } + } + + /** + * 根据Bean数据更新CheckBox状态 + */ + private fun updateCheckBoxState(bean: GjcHandoverSheetBean) { + // 跨境电商 + cbEcFlag.value = bean.cbEcFlag ?: "1" + + // 防止隐含危险品检查单 + goodsNameYes.value = (bean.goodsName == "1") + goodsNameNo.value = (bean.goodsName == "0") + dangerYes.value = (bean.danger == "1") + dangerNo.value = (bean.danger == "0") + fishYes.value = (bean.fish == "1") + fishNo.value = (bean.fish == "0") + packagingYes.value = (bean.packaging == "1") + packagingNo.value = (bean.packaging == "0") + labelsYes.value = (bean.labels == "1") + labelsNo.value = (bean.labels == "0") + + // 高风险货物检查单 + appearanceYes.value = (bean.appearance == "1") + appearanceNo.value = (bean.appearance == "0") + threatYes.value = (bean.threat == "1") + threatNo.value = (bean.threat == "0") + highRiskYes.value = (bean.highRisk == "1") + highRiskNo.value = (bean.highRisk == "0") + + // 跨境电商检查单 + submitStatementYes.value = (bean.submitStatement == "1") + submitStatementNA.value = (bean.submitStatement == "2") + submitStatementNo.value = (bean.submitStatement == "0") + } + + /** + * CheckBox点击事件处理(防止隐含危险品) + */ + fun onGoodsNameClick(isYes: Boolean) { + if (isYes) { + goodsNameYes.value = true + goodsNameNo.value = false + } else { + goodsNameYes.value = false + goodsNameNo.value = true + } + } + + fun onDangerClick(isYes: Boolean) { + if (isYes) { + dangerYes.value = true + dangerNo.value = false + } else { + dangerYes.value = false + dangerNo.value = true + } + } + + fun onFishClick(isYes: Boolean) { + if (isYes) { + fishYes.value = true + fishNo.value = false + } else { + fishYes.value = false + fishNo.value = true + } + } + + fun onPackagingClick(isYes: Boolean) { + if (isYes) { + packagingYes.value = true + packagingNo.value = false + } else { + packagingYes.value = false + packagingNo.value = true + } + } + + fun onLabelsClick(isYes: Boolean) { + if (isYes) { + labelsYes.value = true + labelsNo.value = false + } else { + labelsYes.value = false + labelsNo.value = true + } + } + + /** + * CheckBox点击事件处理(高风险货物) + */ + fun onAppearanceClick(isYes: Boolean) { + if (isYes) { + appearanceYes.value = true + appearanceNo.value = false + } else { + appearanceYes.value = false + appearanceNo.value = true + } + } + + fun onThreatClick(isYes: Boolean) { + if (isYes) { + threatYes.value = true + threatNo.value = false + } else { + threatYes.value = false + threatNo.value = true + } + } + + fun onHighRiskClick(isYes: Boolean) { + if (isYes) { + highRiskYes.value = true + highRiskNo.value = false + } else { + highRiskYes.value = false + highRiskNo.value = true + } + } + + /** + * CheckBox点击事件处理(跨境电商) + */ + fun onSubmitStatementClick(type: Int) { + when (type) { + 1 -> { // 是 + submitStatementYes.value = true + submitStatementNA.value = false + submitStatementNo.value = false + } + 2 -> { // 不适用 + submitStatementYes.value = false + submitStatementNA.value = true + submitStatementNo.value = false + } + 0 -> { // 否 + submitStatementYes.value = false + submitStatementNA.value = false + submitStatementNo.value = true + } + } + } + + /** + * 取消按钮点击 + */ + fun cancelClick() { + AlertDialog.Builder(getTopActivity()) + .setTitle("提示") + .setMessage("确定要取消吗?未保存的数据将丢失") + .setPositiveButton("确定") { _, _ -> getTopActivity().finish() } + .setNegativeButton("取消", null) + .show() + } + + /** + * 保存按钮点击 + */ + fun saveClick() { + val bean = dataBean.value ?: GjcHandoverSheetBean() + + // 更新Bean中的CheckBox字段 + bean.maWbId = maWbId + bean.cbEcFlag = cbEcFlag.value + + // 防止隐含危险品检查单 + bean.goodsName = if (goodsNameYes.value == true) "1" else if (goodsNameNo.value == true) "0" else null + bean.danger = if (dangerYes.value == true) "1" else if (dangerNo.value == true) "0" else null + bean.fish = if (fishYes.value == true) "1" else if (fishNo.value == true) "0" else null + bean.packaging = if (packagingYes.value == true) "1" else if (packagingNo.value == true) "0" else null + bean.labels = if (labelsYes.value == true) "1" else if (labelsNo.value == true) "0" else null + + // 高风险货物检查单 + bean.appearance = if (appearanceYes.value == true) "1" else if (appearanceNo.value == true) "0" else null + bean.threat = if (threatYes.value == true) "1" else if (threatNo.value == true) "0" else null + bean.highRisk = if (highRiskYes.value == true) "1" else if (highRiskNo.value == true) "0" else null + + // 跨境电商检查单 + bean.submitStatement = when { + submitStatementYes.value == true -> "1" + submitStatementNA.value == true -> "2" + submitStatementNo.value == true -> "0" + else -> null + } + + // 安检信息 + bean.securityChannel = securityChannel.value + bean.securityStartTime = securityStartTime.value + bean.securityEndTime = securityEndTime.value + + // 发送保存请求 + launchLoadingCollect({ NetApply.api.saveHandoverSheet(bean.toRequestBody()) }) { + onSuccess = { + showToast("保存成功") + getTopActivity().finish() + } + } } } diff --git a/module_gjc/src/main/res/layout/activity_gjc_handover.xml b/module_gjc/src/main/res/layout/activity_gjc_handover.xml index 2768bec..c4869b2 100644 --- a/module_gjc/src/main/res/layout/activity_gjc_handover.xml +++ b/module_gjc/src/main/res/layout/activity_gjc_handover.xml @@ -4,6 +4,7 @@ xmlns:tools="http://schemas.android.com/tools"> + @@ -258,6 +260,7 @@ android:layout_weight="2" android:background="@drawable/bg_table_cell" android:gravity="center" + android:text="@{String.valueOf(viewModel.dataBean.chargeWeight != null ? viewModel.dataBean.chargeWeight : 0.0d)}" android:textColor="@color/color_33" android:textSize="14sp" /> @@ -365,6 +368,8 @@ @@ -372,7 +377,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="10dp" - android:checked="true" + android:checked="@{viewModel.cbEcFlag.equals(`1`)}" + android:onClick="@{() -> viewModel.onCbEcFlagClick(`1`)}" android:text="是" android:textSize="14sp" /> @@ -394,6 +400,7 @@ android:layout_weight="3" android:background="@drawable/bg_table_cell" android:gravity="center" + android:text="@{viewModel.dataBean.expressName ?? ``}" android:textColor="@color/color_33" android:textSize="14sp" /> @@ -433,6 +440,7 @@ @@ -482,12 +490,13 @@ android:textColor="@color/color_33" android:textSize="14sp" /> - @@ -507,12 +516,13 @@ android:textColor="@color/color_33" android:textSize="14sp" /> - @@ -645,6 +655,8 @@ @@ -658,6 +670,8 @@ @@ -688,6 +702,8 @@ @@ -701,6 +717,8 @@ @@ -718,7 +736,7 @@ android:background="@drawable/bg_table_cell" android:gravity="start|center_vertical" android:padding="5dp" - android:text="3.是否非观赏鱼类货物,或属于无“暖宝宝”且无“高锰酸钾等氧化剂类或其他类消毒剂”的观赏鱼类货物" + android:text="3.是否非观赏鱼类货物,或属于无"暖宝宝"且无"高锰酸钾等氧化剂类或其他类消毒剂"的观赏鱼类货物" android:textColor="@color/color_33" android:textSize="13sp" /> @@ -732,6 +750,8 @@ @@ -745,6 +765,8 @@ @@ -775,6 +797,8 @@ @@ -788,6 +812,8 @@ @@ -818,6 +844,8 @@ @@ -831,6 +859,8 @@ @@ -915,6 +945,8 @@ @@ -929,6 +961,8 @@ @@ -962,6 +996,8 @@ @@ -976,6 +1012,8 @@ @@ -1009,6 +1047,8 @@ @@ -1023,6 +1063,8 @@ @@ -1115,6 +1157,8 @@ @@ -1129,6 +1173,8 @@ @@ -1143,6 +1189,8 @@ @@ -1219,12 +1267,13 @@ android:textColor="@color/color_33" android:textSize="14sp" /> - @@ -1236,12 +1285,13 @@ android:orientation="horizontal"> - @@ -1255,12 +1305,13 @@ android:textColor="@color/color_33" android:textSize="14sp" /> -