厨配秤: 统一采样数据结构及接口
- 将提交构成接口改为提交采样,废弃制作模式,调整请求参数结构 - 修改采样历史接口为已提交采样列表,调整接口路径和请求参数 - 更新数据模型,替换旧的审核状态为实验状态,新增实验编号字段 - 修改列表适配器显示逻辑,展示实验状态及熟重信息,调整颜色映射 - 调整相关网络请求及回调函数,删除无用参数,简化调用 - 更新UI页面文本,适配新版采样列表数据格式与提示信息 - 删除相关无用的旧状态定义及属性,保持代码整洁
This commit is contained in:
@@ -9,6 +9,7 @@ import com.chad.library.adapter4.viewholder.QuickViewHolder
|
||||
import com.shuwei.dish.match.R
|
||||
import com.shuwei.dish.match.databinding.ListItemFoodListBinding
|
||||
import com.shuwei.dish.match.model.FoodRecord
|
||||
import com.shuwei.dish.match.model.SampleStatus
|
||||
import com.shuwei.dish.match.utils.ext.gone
|
||||
import com.shuwei.dish.match.utils.ext.visible
|
||||
import java.text.DecimalFormat
|
||||
@@ -88,12 +89,12 @@ class FoodListAdapter(
|
||||
// 非烹饪中,采样模式
|
||||
tvDishName.setTextColor(ContextCompat.getColor(holder.itemView.context, R.color.dish_green))
|
||||
clBlock.setBackgroundResource(R.drawable.shape_white_fb_15_corners)
|
||||
// 新采样历史(sample/history):展示审核状态 + 熟重(g)
|
||||
val auditName = item.auditStatusName
|
||||
if (!auditName.isNullOrBlank()) {
|
||||
// 已提交采样列表(sample-list):展示实验状态 + 熟重(g)
|
||||
val statusName = item.statusName
|
||||
if (!statusName.isNullOrBlank()) {
|
||||
tvDishCount.text = "熟重:${formatGram(foodWeight)}"
|
||||
tvShowState.text = auditName
|
||||
tvShowState.setTextColor(auditStatusColor(holder, item.auditStatus))
|
||||
tvShowState.text = statusName
|
||||
tvShowState.setTextColor(statusColor(holder, item.status))
|
||||
return@run
|
||||
}
|
||||
val realTotalWeight = if (totalWeight > 0.0) totalWeight else foodWeight
|
||||
@@ -110,12 +111,12 @@ class FoodListAdapter(
|
||||
return "${gramDf.format(weight)}g"
|
||||
}
|
||||
|
||||
/** 审核状态着色:1=待审核(灰) / 2=已通过(绿) / 3=已驳回(红) */
|
||||
private fun auditStatusColor(holder: VH, status: Int?): Int {
|
||||
/** 实验状态着色:1=实验中(灰) / 2=已评测(绿) / 9=已转化(绿) */
|
||||
private fun statusColor(holder: VH, status: Int?): Int {
|
||||
val context = holder.itemView.context
|
||||
return when (status) {
|
||||
2 -> ContextCompat.getColor(context, R.color.dish_green)
|
||||
3 -> ContextCompat.getColor(context, R.color.red_ff4444)
|
||||
SampleStatus.EVALUATED, SampleStatus.CONVERTED ->
|
||||
ContextCompat.getColor(context, R.color.dish_green)
|
||||
else -> ContextCompat.getColor(context, R.color.black999)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,13 +16,11 @@ data class FoodRecord(
|
||||
//true-原始数据,false-非原始数据
|
||||
var isOriginalData: Boolean = true,
|
||||
var sort: Int = 0,
|
||||
// ===== 采样历史(sample/history)扩展字段,制作模式不涉及 =====
|
||||
/** 菜品编号 */
|
||||
var foodCode: String? = null,
|
||||
/** 审核状态: 1=待审核 / 2=已通过 / 3=已驳回 */
|
||||
var auditStatus: Int? = null,
|
||||
/** 审核状态中文 */
|
||||
var auditStatusName: String? = null,
|
||||
/** 审核记录id */
|
||||
var auditRecordId: String? = null
|
||||
// ===== 已提交采样列表(sample-list)扩展字段,制作模式不涉及 =====
|
||||
/** 实验编号(innovNo) */
|
||||
var innovNo: String? = null,
|
||||
/** 实验状态: 1=实验中 / 2=已评测 / 9=已转化 */
|
||||
var status: Int? = null,
|
||||
/** 实验状态中文 */
|
||||
var statusName: String? = null
|
||||
) : Serializable
|
||||
|
||||
@@ -6,22 +6,14 @@ package com.shuwei.dish.match.model
|
||||
* 序列化规则: Long 字段服务端返回字符串;请求体字段按后端约定(id 类字段用 String 与现有代码一致)
|
||||
*/
|
||||
|
||||
/** 提交构成接口 cookMode 取值(与本地 cookMode 0=制作/1=采样 不同,注意映射) */
|
||||
object ConstituteCookMode {
|
||||
/** 制作模式(基于已有菜品,foodId 必填) */
|
||||
const val MAKE = 1
|
||||
/** 采样模式(从零建菜,foodName 必填) */
|
||||
const val SAMPLE = 2
|
||||
}
|
||||
|
||||
/** 采样菜品审核状态 */
|
||||
object SampleAuditStatus {
|
||||
/** 待审核 */
|
||||
const val PENDING = 1
|
||||
/** 已通过 */
|
||||
const val APPROVED = 2
|
||||
/** 已驳回 */
|
||||
const val REJECTED = 3
|
||||
/** 采样实验状态(味养创新 nut_innovation.status) */
|
||||
object SampleStatus {
|
||||
/** 实验中 */
|
||||
const val EXPERIMENTING = 1
|
||||
/** 已评测 */
|
||||
const val EVALUATED = 2
|
||||
/** 已转化 */
|
||||
const val CONVERTED = 9
|
||||
}
|
||||
|
||||
// ==================== 一、食材模糊搜索 ====================
|
||||
@@ -126,10 +118,10 @@ data class FoodCompositionResponse(
|
||||
val ingredients: List<FoodCompositionIngredient> = emptyList()
|
||||
)
|
||||
|
||||
// ==================== 四、提交构成 ====================
|
||||
// ==================== 四、提交采样 ====================
|
||||
|
||||
/**
|
||||
* 提交构成 — 单个食材构成条目
|
||||
* 提交采样 — 单个食材构成条目
|
||||
* 对应接口: POST /neglect/ratio-scale/constitute/save
|
||||
*/
|
||||
data class ConstituteSaveItem(
|
||||
@@ -142,62 +134,50 @@ data class ConstituteSaveItem(
|
||||
)
|
||||
|
||||
/**
|
||||
* 提交构成请求,cookMode 区分采样/制作
|
||||
* 提交采样请求(落库味养创新实验,status=1 实验中)
|
||||
* 对应接口: POST /neglect/ratio-scale/constitute/save
|
||||
* 制作模式已废弃本接口,统一为提交采样,不再传 cookMode/foodId
|
||||
*/
|
||||
data class ConstituteSaveRequest(
|
||||
/** 1=制作模式 / 2=采样模式 */
|
||||
val cookMode: Int = ConstituteCookMode.SAMPLE,
|
||||
/** 制作模式必填 — 已有菜品id */
|
||||
val foodId: String? = null,
|
||||
/** 采样模式必填 — 菜品名称 */
|
||||
/** 菜品名称 */
|
||||
val foodName: String? = null,
|
||||
/** 熟重(g),必须 > 0 */
|
||||
val foodWeight: Double = 0.0,
|
||||
/** 餐次: 1=早餐/2=午餐/3=晚餐/4=加餐,选填 */
|
||||
val mealType: Int? = null,
|
||||
/** 食材构成列表,至少 1 条 */
|
||||
val items: List<ConstituteSaveItem> = emptyList()
|
||||
)
|
||||
|
||||
// ==================== 五、采样历史 ====================
|
||||
// ==================== 五、已提交采样列表 ====================
|
||||
|
||||
/**
|
||||
* 采样历史查询请求参数
|
||||
* 对应接口: POST /neglect/ratio-scale/sample/history
|
||||
* 已提交采样列表查询请求参数
|
||||
* 对应接口: POST /neglect/ratio-scale/sample-list
|
||||
* 数据源: nut_innovation(source=2 配比秤采样),按提交时间倒序,不分日期
|
||||
*/
|
||||
data class SampleHistoryRequest(
|
||||
/** 页码 */
|
||||
val pageNum: Int = 1,
|
||||
/** 每页条数 */
|
||||
val pageSize: Int = 10,
|
||||
/** 菜品名称模糊搜索 */
|
||||
val keyword: String? = null,
|
||||
/** 审核状态筛选: 1=待审核 / 2=已通过 / 3=已驳回,不传查全部 */
|
||||
val auditStatus: Int? = null,
|
||||
/** 采样日期 yyyy-MM-dd,不传默认当天 */
|
||||
val sampleDate: String? = null
|
||||
val pageSize: Int = 10
|
||||
)
|
||||
|
||||
/**
|
||||
* 采样历史结果条目
|
||||
* 注意: foodId / auditRecordId 为 Long 类型,服务端序列化为 String
|
||||
* 已提交采样列表结果条目
|
||||
* 注意: innovId 为 Long 类型,服务端序列化为 String
|
||||
*/
|
||||
data class SampleHistoryItem(
|
||||
/** 菜品id(Long → String) */
|
||||
val foodId: String = "",
|
||||
/** 菜品编号 */
|
||||
val foodCode: String = "",
|
||||
/** 菜品名称 */
|
||||
/** 味养创新实验id(Long → String) */
|
||||
val innovId: String = "",
|
||||
/** 实验编号 */
|
||||
val innovNo: String = "",
|
||||
/** 餐品名称 */
|
||||
val foodName: String = "",
|
||||
/** 熟重(g) */
|
||||
val foodWeight: Double = 0.0,
|
||||
/** 审核状态: 1=待审核 / 2=已通过 / 3=已驳回 */
|
||||
val auditStatus: Int = 0,
|
||||
/** 审核状态中文 */
|
||||
val auditStatusName: String = "",
|
||||
/** 审核记录id(Long → String) */
|
||||
val auditRecordId: String = "",
|
||||
/** 状态: 1=实验中 / 2=已评测 / 9=已转化 */
|
||||
val status: Int = 0,
|
||||
/** 状态中文 */
|
||||
val statusName: String = "",
|
||||
/** 提交时间 */
|
||||
val createTime: String = ""
|
||||
)
|
||||
|
||||
@@ -159,7 +159,7 @@ interface ApiService {
|
||||
): ApiResponse<FoodCompositionResponse?>
|
||||
|
||||
/**
|
||||
* 提交构成(cookMode 区分采样/制作)
|
||||
* 提交采样(落库味养创新实验,制作模式已废弃本接口)
|
||||
*/
|
||||
@POST
|
||||
suspend fun constituteSave(
|
||||
@@ -168,11 +168,11 @@ interface ApiService {
|
||||
): ApiResponse<Any?>
|
||||
|
||||
/**
|
||||
* 采样历史(本食堂,默认当天)
|
||||
* 已提交采样列表(本食堂 source=2,按提交时间倒序,不分日期)
|
||||
*/
|
||||
@POST
|
||||
suspend fun sampleHistory(
|
||||
@Url url: String = "${GlobalData.appBaseUrl}/nutrition/neglect/ratio-scale/sample/history",
|
||||
@Url url: String = "${GlobalData.appBaseUrl}/nutrition/neglect/ratio-scale/sample-list",
|
||||
@Body request: SampleHistoryRequest
|
||||
): ApiResponse<MutableList<SampleHistoryItem>?>
|
||||
|
||||
|
||||
@@ -378,7 +378,7 @@ class NetViewModel(
|
||||
}
|
||||
|
||||
/**
|
||||
* 提交构成(回调版本,cookMode 区分采样/制作)
|
||||
* 提交采样(回调版本,落库味养创新实验,制作模式已废弃本接口)
|
||||
*/
|
||||
fun constituteSave(
|
||||
request: ConstituteSaveRequest,
|
||||
@@ -392,17 +392,13 @@ class NetViewModel(
|
||||
}
|
||||
|
||||
/**
|
||||
* 采样历史(回调版本)
|
||||
* @param keyword 菜品名称模糊搜索,为 null 时不传该字段
|
||||
* @param auditStatus 审核状态筛选,为 null 时不传该字段
|
||||
* @param sampleDate 采样日期 yyyy-MM-dd,为 null 时不传该字段
|
||||
* 已提交采样列表(回调版本,本食堂 source=2,不分日期)
|
||||
* @param pageNum 页码,默认第 1 页
|
||||
* @param pageSize 每页条数,默认 10
|
||||
*/
|
||||
fun sampleHistory(
|
||||
pageNum: Int = 1,
|
||||
pageSize: Int = 10,
|
||||
keyword: String? = null,
|
||||
auditStatus: Int? = null,
|
||||
sampleDate: String? = null,
|
||||
onLoading: () -> Unit = {},
|
||||
onResult: (UiState<MutableList<SampleHistoryItem>?>) -> Unit
|
||||
) {
|
||||
@@ -411,10 +407,7 @@ class NetViewModel(
|
||||
onResult(repository.sampleHistory(
|
||||
SampleHistoryRequest(
|
||||
pageNum = pageNum,
|
||||
pageSize = pageSize,
|
||||
keyword = keyword,
|
||||
auditStatus = auditStatus,
|
||||
sampleDate = sampleDate
|
||||
pageSize = pageSize
|
||||
)
|
||||
))
|
||||
}
|
||||
|
||||
@@ -88,11 +88,11 @@ class RemoteRepository {
|
||||
suspend fun getFoodComposition(foodId: String): UiState<FoodCompositionResponse?> =
|
||||
safeApiCall { apiService.getFoodComposition(foodId = foodId) }
|
||||
|
||||
/** 提交构成(cookMode 区分采样/制作) */
|
||||
/** 提交采样(落库味养创新实验,制作模式已废弃本接口) */
|
||||
suspend fun constituteSave(request: ConstituteSaveRequest): UiState<Any?> =
|
||||
safeApiCall { apiService.constituteSave(request = request) }
|
||||
|
||||
/** 采样历史(本食堂,默认当天) */
|
||||
/** 已提交采样列表(本食堂 source=2,按提交时间倒序,不分日期) */
|
||||
suspend fun sampleHistory(request: SampleHistoryRequest): UiState<MutableList<SampleHistoryItem>?> =
|
||||
safeApiCall { apiService.sampleHistory(request = request) }
|
||||
|
||||
|
||||
@@ -153,7 +153,6 @@ class FoodSearchActivity : BaseActivity() {
|
||||
private fun FoodSearchItem.toFoodRecord(): FoodRecord = FoodRecord(
|
||||
foodId = foodId,
|
||||
foodName = foodName,
|
||||
foodCode = foodCode,
|
||||
cookMode = 1
|
||||
)
|
||||
|
||||
|
||||
@@ -281,16 +281,15 @@ class SamplingModeActivity : BaseActivity() {
|
||||
}
|
||||
}
|
||||
|
||||
/** 采样历史条目 → FoodRecord 映射,供 FoodListAdapter(SAMPLING_MODE) 展示 */
|
||||
/** 已提交采样列表条目 → FoodRecord 映射,供 FoodListAdapter(SAMPLING_MODE) 展示 */
|
||||
private fun SampleHistoryItem.toFoodRecord(): FoodRecord = FoodRecord(
|
||||
foodId = foodId,
|
||||
foodId = innovId,
|
||||
foodName = foodName,
|
||||
foodWeight = foodWeight,
|
||||
cookMode = 1,
|
||||
foodCode = foodCode,
|
||||
auditStatus = auditStatus,
|
||||
auditStatusName = auditStatusName,
|
||||
auditRecordId = auditRecordId
|
||||
innovNo = innovNo,
|
||||
status = status,
|
||||
statusName = statusName
|
||||
)
|
||||
|
||||
private fun finishRefresh() {
|
||||
@@ -313,7 +312,7 @@ class SamplingModeActivity : BaseActivity() {
|
||||
)
|
||||
}
|
||||
emptyViewBinding!!.tvContent.text = "暂无数据"
|
||||
emptyViewBinding!!.tvSubContent.text = "今日暂无采样数据,点击下方按钮新增采样"
|
||||
emptyViewBinding!!.tvSubContent.text = "暂无采样数据,点击下方按钮新增采样"
|
||||
|
||||
// 方案B:沿用 adapter stateView,使用 FrameLayout.LayoutParams + minimumHeight 避免空态贴顶
|
||||
emptyViewBinding!!.root.layoutParams = FrameLayout.LayoutParams(
|
||||
|
||||
@@ -21,7 +21,6 @@ import com.shuwei.dish.match.dialog.CommonDialog
|
||||
import com.shuwei.dish.match.dialog.GoodsPreviewDialog
|
||||
import com.shuwei.dish.match.db.entity.CookFoodEntity
|
||||
import com.shuwei.dish.match.db.entity.CookFoodGoodsEntity
|
||||
import com.shuwei.dish.match.model.ConstituteCookMode
|
||||
import com.shuwei.dish.match.model.ConstituteSaveItem
|
||||
import com.shuwei.dish.match.model.ConstituteSaveRequest
|
||||
import com.shuwei.dish.match.model.CookCompleteItem
|
||||
@@ -459,7 +458,7 @@ class SubmitFoodActivity : BaseActivity() {
|
||||
return@launch
|
||||
}
|
||||
|
||||
// 采样模式 → 调新配比秤提交构成接口(cookMode=2,从零建菜,进入待审核)
|
||||
// 采样模式 → 调新配比秤提交采样接口(落库味养创新实验,状态=实验中)
|
||||
if (food?.cookMode == 1) {
|
||||
submitConstitute()
|
||||
return@launch
|
||||
@@ -547,8 +546,8 @@ class SubmitFoodActivity : BaseActivity() {
|
||||
}
|
||||
|
||||
/**
|
||||
* 采样提交:从 goodsList 提取全部构成(主材/辅材/调料),组装 ConstituteSaveRequest 提交
|
||||
* cookMode=2(采样),熟重 foodWeight 单位为 g,isMain 直接取 materialType(1主/2辅/3调)
|
||||
* 提交采样:从 goodsList 提取全部构成(主材/辅材/调料),组装 ConstituteSaveRequest 提交
|
||||
* 落库味养创新实验;熟重 foodWeight 单位为 g,isMain 直接取 materialType(1主/2辅/3调)
|
||||
*/
|
||||
private fun submitConstitute() {
|
||||
val allGoods = goodsList ?: run {
|
||||
@@ -591,7 +590,6 @@ class SubmitFoodActivity : BaseActivity() {
|
||||
}
|
||||
|
||||
val request = ConstituteSaveRequest(
|
||||
cookMode = ConstituteCookMode.SAMPLE,
|
||||
foodName = foodName,
|
||||
foodWeight = foodWeight,
|
||||
items = items
|
||||
|
||||
Reference in New Issue
Block a user