feat(food): 优化食材识别功能并增加调料选择支持

- 将页面大小从30调整为100以提高加载效率
- 移除食材名称显示中的原始数据判断逻辑
- 在FoodRecognizeActivity中添加goodsId映射处理
- 修改GoodsItem实体类将goodsId和materId设为可变属性
- 新增oldGoodsId字段用于保存原始商品ID
- 创建新的调料搜索适配器和布局文件
- 更新调料选择对话框中的数据处理逻辑
This commit is contained in:
2026-05-13 11:13:18 +08:00
parent 7e72ce413b
commit 65958bf637
7 changed files with 53 additions and 22 deletions
@@ -36,11 +36,12 @@ class FoodMaterialAdapter(list: MutableList<GoodsItem>) :
clBlock.setOnClickListener { clBlock.setOnClickListener {
onItemClick?.invoke(holder.bindingAdapterPosition) onItemClick?.invoke(holder.bindingAdapterPosition)
} }
if (data.isOriginalData) { tvDishName.text = data.goodsName
tvDishName.text = data.goodsName //if (data.isOriginalData) {
} else { // tvDishName.text = data.goodsName
tvDishName.text = data.goodsName + "-${data.rawMaterialsType}" //} else {
} // tvDishName.text = data.goodsName + "-${data.rawMaterialsType}"
//}
tvDishType.text = if (data.materialType == 1) "主辅材:主材" else if (data.materialType == 2) "主辅材:辅材" else "" tvDishType.text = if (data.materialType == 1) "主辅材:主材" else if (data.materialType == 2) "主辅材:辅材" else ""
tvDishWeight.text = tvDishWeight.text =
if (data.useWeight == null || data.useWeight == 0.toDouble()) "" else "${data.useWeight!!.roundedOneDecimalPlace()}" if (data.useWeight == null || data.useWeight == 0.toDouble()) "" else "${data.useWeight!!.roundedOneDecimalPlace()}"
@@ -7,7 +7,7 @@ import androidx.core.content.ContextCompat
import com.chad.library.adapter4.BaseQuickAdapter import com.chad.library.adapter4.BaseQuickAdapter
import com.chad.library.adapter4.viewholder.QuickViewHolder import com.chad.library.adapter4.viewholder.QuickViewHolder
import com.shuwei.dish.match.R import com.shuwei.dish.match.R
import com.shuwei.dish.match.databinding.ListItemFoodBinding import com.shuwei.dish.match.databinding.ListItemSeasoningBinding
import com.shuwei.dish.match.entity.GoodsItem import com.shuwei.dish.match.entity.GoodsItem
/** /**
@@ -23,10 +23,6 @@ class SeasoningSearchAdapter(private var list: MutableList<GoodsItem>) :
) { ) {
holder.binding.tvGoodsInfo.run { holder.binding.tvGoodsInfo.run {
text = item?.goodsName text = item?.goodsName
setBackgroundResource(
if (item?.isClicked == true) R.drawable.shape_green_stroke
else R.drawable.shape_white_12_corners
)
setTextColor( setTextColor(
ContextCompat.getColor( ContextCompat.getColor(
context, context,
@@ -35,6 +31,10 @@ class SeasoningSearchAdapter(private var list: MutableList<GoodsItem>) :
) )
) )
} }
holder.binding.root.setBackgroundResource(
if (item?.isClicked == true) R.drawable.shape_green_stroke
else R.drawable.shape_white_12_corners
)
} }
override fun onCreateViewHolder( override fun onCreateViewHolder(
@@ -43,10 +43,10 @@ class SeasoningSearchAdapter(private var list: MutableList<GoodsItem>) :
viewType: Int viewType: Int
): VH { ): VH {
val binding = val binding =
ListItemFoodBinding.inflate(LayoutInflater.from(context), parent, false) ListItemSeasoningBinding.inflate(LayoutInflater.from(context), parent, false)
return VH(binding) return VH(binding)
} }
inner class VH(var binding: ListItemFoodBinding) : QuickViewHolder(binding.root) inner class VH(var binding: ListItemSeasoningBinding) : QuickViewHolder(binding.root)
} }
@@ -227,6 +227,11 @@ class SeasoningSelectDialog(
binding.recyclerView.layoutManager = GridLayoutManager(activity, 3, GridLayoutManager.VERTICAL, false) binding.recyclerView.layoutManager = GridLayoutManager(activity, 3, GridLayoutManager.VERTICAL, false)
if (pageNo == 1) list.clear() if (pageNo == 1) list.clear()
list.addAll(records) list.addAll(records)
list.forEach {
it.oldGoodsId = it.goodsId
//materId才是提交数据需要的goodsId数据
it.goodsId = it.materId ?:""
}
adapter.notifyDataSetChanged() adapter.notifyDataSetChanged()
val isLoadMoreEnable = records.size >= PAGE_SIZE val isLoadMoreEnable = records.size >= PAGE_SIZE
binding.refreshLayout.setEnableLoadMore(isLoadMoreEnable) binding.refreshLayout.setEnableLoadMore(isLoadMoreEnable)
@@ -8,11 +8,11 @@ import java.io.Serializable
*/ */
data class GoodsItem( data class GoodsItem(
// 接口返回字段 // 接口返回字段
val goodsId: String = "", var goodsId: String = "",
val goodsName: String? = null, val goodsName: String? = null,
val popularName: String? = null, val popularName: String? = null,
val zjmCode: String? = null, val zjmCode: String? = null,
val materId: String? = null, var materId: String? = null,
val materCode: String? = null, val materCode: String? = null,
// 从 CookFoodGoodsEntity 迁移的数据字段(DishPartAdapter 显示及转换用) // 从 CookFoodGoodsEntity 迁移的数据字段(DishPartAdapter 显示及转换用)
@@ -35,7 +35,8 @@ data class GoodsItem(
// 净材种类(当前选中值) // 净材种类(当前选中值)
var rawMaterialsType: String? = null, var rawMaterialsType: String? = null,
// 净材种类候选列表(临时字段,逗号分隔,不持久化) // 净材种类候选列表(临时字段,逗号分隔,不持久化)
var rawMaterialsTypes: String? = null var rawMaterialsTypes: String? = null,
var oldGoodsId: String? = null
) : Serializable { ) : Serializable {
/** /**
@@ -289,15 +289,16 @@ class FoodRecognizeActivity : BaseActivity() {
binding.rvRecognizeList.visible() binding.rvRecognizeList.visible()
binding.tvNoData.gone() binding.tvNoData.gone()
list.clear() list.clear()
goodsList.forEach { goodsList.forEach { goods ->
var foodScore = -1 var foodScore = -1
nameScoreMap[it.goodsName]?.let { food -> nameScoreMap[goods.goodsName]?.let { food ->
foodScore = ((1 - food.score) * 10000).toInt() foodScore = ((1 - food.score) * 10000).toInt()
} }
// // 将接口返回的 rawMaterialsType(全部种类)移存到 rawMaterialsTypes,供弹窗使用 //保存原goodsId
// it.rawMaterialsTypes = it.rawMaterialsType goods.oldGoodsId = goods.goodsId
// it.rawMaterialsType = null //PrepareFoodActivity中的goodsId就是materId
list.add(it.also { it.foodScore = foodScore }) goods.goodsId = goods.materId ?:""
list.add(goods.also { it.foodScore = foodScore })
} }
adapter.notifyDataSetChanged() adapter.notifyDataSetChanged()
updateRvParentLayoutHeight() updateRvParentLayoutHeight()
@@ -47,7 +47,7 @@ class FoodListFragment : BaseFragment<FragmentFoodListBinding>() {
} }
private var pageNo = 1 private var pageNo = 1
private val pageSize = 30 private val pageSize = 100
private var dinnerType = "0" private var dinnerType = "0"
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_margin="15dp"
tools:background="@drawable/shape_white_12_corners">
<TextView
android:id="@+id/tvGoodsInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="end"
android:gravity="center"
android:maxLines="1"
android:paddingHorizontal="5dp"
android:textColor="@color/black666"
android:textSize="30sp"
android:layout_gravity="center"
tools:text="椒盐" />
</FrameLayout>