Browse Source

手动物资更换页:添加确定的时候的数据校验和提示、完成提交逻辑

Frankensteinly 8 tháng trước cách đây
mục cha
commit
b0452acd7e

+ 4 - 4
app/src/main/java/com/grkj/iscs_mc/model/vo/material/MaterialManualReplacementReqVO.kt

@@ -7,13 +7,13 @@ data class MaterialManualReplacementReqVO(
 
     val materialsTypeId: Long?,
 
-    val propertiesValueId: String?,
+    val propertiesValueId: String?, // 型号id
 
-    val propertiesValue: String?,
+    val propertiesValue: String?,   // 型号名称
 
-    val propertiesPropertyId: String?,
+    val propertiesPropertyId: String?,  // 类型id
 
-    val propertiesProperty: String?,
+    val propertiesProperty: String?,    // 类型名称
 
     val materialsRfid: String?,
 

+ 21 - 1
app/src/main/java/com/grkj/iscs_mc/model/vo/replacement/ManualReplacementListRespVO.kt

@@ -1,5 +1,10 @@
 package com.grkj.iscs_mc.model.vo.replacement
 
+import java.text.ParseException
+import java.text.SimpleDateFormat
+import java.util.Calendar
+import java.util.Locale
+
 data class ManualReplacementListRespVO(
     val materialsTypeId: Long?,
 
@@ -84,5 +89,20 @@ data class ManualReplacementListRespVO(
          * 是否完成填写
          */
         var isDone: Boolean = false
-    )
+    ) {
+        fun isValidNewDate(): Boolean {
+            if (newDate.isNullOrBlank()) {
+                return false
+            }
+            return try {
+                val formatter = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
+                val newDateParsed = formatter.parse(newDate)
+                val currentDate = Calendar.getInstance().time
+                // 不为空且不能比当前时间早
+                newDateParsed != null && !newDateParsed.before(currentDate)
+            } catch (e: ParseException) {
+                false
+            }
+        }
+    }
 }

+ 11 - 3
app/src/main/java/com/grkj/iscs_mc/view/fragment/MaterialManualReplacementFragment.kt

@@ -135,9 +135,11 @@ class MaterialManualReplacementFragment :
 
                     holder.setVisible(R.id.tv_confirm, !vo.isDone)
                     holder.setOnClickListener(R.id.tv_confirm) {
-                        vo.isDone = true
-                        mBinding?.rvReplacement?.adapter?.notifyItemChanged(position)
-                        presenter?.syncData(mMaterialList, vo)
+                        if (presenter?.checkData(vo) == true) {
+                            vo.isDone = true
+                            mBinding?.rvReplacement?.adapter?.notifyItemChanged(position)
+                            presenter?.syncData(mMaterialList, vo)
+                        }
                     }
                 }
             }
@@ -198,6 +200,12 @@ class MaterialManualReplacementFragment :
                 mBinding?.rvReplacement?.adapter?.notifyDataSetChanged()
             }
         }
+
+        mBinding?.cbSubmit?.setOnClickListener {
+            presenter?.submit(mMaterialList, mPropertyList) {
+                if (it) navigateUp()
+            }
+        }
     }
 
     override fun initPresenter(): MaterialManualReplacementPresenter {

+ 63 - 3
app/src/main/java/com/grkj/iscs_mc/view/presenter/MaterialManualReplacementPresenter.kt

@@ -1,5 +1,6 @@
 package com.grkj.iscs_mc.view.presenter
 
+import com.grkj.iscs_mc.R
 import com.grkj.iscs_mc.extentions.serialNo
 import com.grkj.iscs_mc.model.vo.material.MaterialManualReplacementReqVO
 import com.grkj.iscs_mc.model.vo.material.MaterialPropertyValuePageRespVO
@@ -7,6 +8,7 @@ import com.grkj.iscs_mc.model.vo.material.MaterialTypePageRespVO
 import com.grkj.iscs_mc.model.vo.replacement.ManualReplacementListRespVO
 import com.grkj.iscs_mc.util.Executor
 import com.grkj.iscs_mc.util.NetApi
+import com.grkj.iscs_mc.util.ToastUtils
 import com.grkj.iscs_mc.view.base.BasePresenter
 import com.grkj.iscs_mc.view.iview.IMaterialManualReplacementView
 
@@ -36,8 +38,63 @@ class MaterialManualReplacementPresenter : BasePresenter<IMaterialManualReplacem
         }
     }
 
-    fun manualReplacement(list: MutableList<MaterialManualReplacementReqVO>, callBack: (Boolean) -> Unit) {
-        NetApi.manualReplacement(list) {
+    fun checkData(vo: ManualReplacementListRespVO.MaterialsPageVO): Boolean {
+        if (vo.newName.isNullOrEmpty()) {
+            ToastUtils.tip(R.string.manual_replacement_name_check_tip)
+            return false
+        }
+        if (vo.selectedTypeId == null) {
+            ToastUtils.tip(R.string.manual_replacement_type_check_tip)
+            return false
+        }
+        if (vo.selectedModelId == null) {
+            ToastUtils.tip(R.string.manual_replacement_mode_check_tip)
+            return false
+        }
+        if (vo.newRfid.isNullOrEmpty()) {
+            ToastUtils.tip(R.string.manual_replacement_mode_rfid_tip)
+            return false
+        }
+        if (!vo.isValidNewDate()) {
+            ToastUtils.tip(R.string.manual_replacement_mode_date_tip)
+            return false
+        }
+        return true
+    }
+
+    fun submit(
+        list: MutableList<ManualReplacementListRespVO>,
+        propertyList: MutableList<MaterialPropertyValuePageRespVO.Record>,
+        callBack: (Boolean) -> Unit
+    ) {
+        if (list.isEmpty()) {
+            return
+        }
+        val filterList = list.flatMap { it.materials ?: emptyList() }
+            .filter { it.isDone }   // 只提交保存的
+            .distinctBy { it.materialsId }  // 不同tab页数据去重
+            .toMutableList()
+        if (filterList.isEmpty()) {
+            return
+        }
+        val submitList = mutableListOf<MaterialManualReplacementReqVO>()
+        filterList.forEach { itFilter ->
+            val property = propertyList.find { it.recordId == itFilter.selectedModelId }
+            submitList.add(
+                MaterialManualReplacementReqVO(
+                    itFilter.materialsId,
+                    itFilter.newName,
+                    itFilter.selectedTypeId,
+                    property?.recordId?.toString(),
+                    property?.valueName,
+                    property?.propertyId?.toString(),
+                    property?.propertyName,
+                    itFilter.newRfid,
+                    itFilter.newDate,
+                )
+            )
+        }
+        NetApi.manualReplacement(submitList) {
             Executor.runOnMain {
                 callBack(it)
             }
@@ -47,7 +104,10 @@ class MaterialManualReplacementPresenter : BasePresenter<IMaterialManualReplacem
     /**
      * 同步不同tab标签的数据
      */
-    fun syncData(list: MutableList<ManualReplacementListRespVO>, material: ManualReplacementListRespVO.MaterialsPageVO) {
+    fun syncData(
+        list: MutableList<ManualReplacementListRespVO>,
+        material: ManualReplacementListRespVO.MaterialsPageVO
+    ) {
         list.forEach {
             it.materials?.find { it.materialsId == material.materialsId }?.let { itVO ->
                 itVO.newName = material.newName

+ 6 - 0
app/src/main/res/values/strings.xml

@@ -104,4 +104,10 @@
     <string name="inspection_start_tip">确定要开始检查物资吗?</string>
     
     <string name="material_replacement_tip">暂无该类型物资需要更换记录</string>
+
+    <string name="manual_replacement_name_check_tip">请输入名称</string>
+    <string name="manual_replacement_type_check_tip">请选择类型</string>
+    <string name="manual_replacement_mode_check_tip">请选择型号</string>
+    <string name="manual_replacement_mode_rfid_tip">请输入RFID</string>
+    <string name="manual_replacement_mode_date_tip">请选择有效的日期</string>
 </resources>