diff --git a/app/src/main/java/com/shuwei/dish/match/adapter/FoodListAdapter.kt b/app/src/main/java/com/shuwei/dish/match/adapter/FoodListAdapter.kt index ff5eb84..6c3df28 100644 --- a/app/src/main/java/com/shuwei/dish/match/adapter/FoodListAdapter.kt +++ b/app/src/main/java/com/shuwei/dish/match/adapter/FoodListAdapter.kt @@ -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) } } diff --git a/app/src/main/java/com/shuwei/dish/match/model/FoodRecord.kt b/app/src/main/java/com/shuwei/dish/match/model/FoodRecord.kt index 06294b1..a789bb1 100644 --- a/app/src/main/java/com/shuwei/dish/match/model/FoodRecord.kt +++ b/app/src/main/java/com/shuwei/dish/match/model/FoodRecord.kt @@ -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 diff --git a/app/src/main/java/com/shuwei/dish/match/model/SampleModels.kt b/app/src/main/java/com/shuwei/dish/match/model/SampleModels.kt index 1fe5e86..23f3761 100644 --- a/app/src/main/java/com/shuwei/dish/match/model/SampleModels.kt +++ b/app/src/main/java/com/shuwei/dish/match/model/SampleModels.kt @@ -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 = 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 = 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 = "" ) diff --git a/app/src/main/java/com/shuwei/dish/match/net/ApiService.kt b/app/src/main/java/com/shuwei/dish/match/net/ApiService.kt index 7c72b9d..a61681d 100644 --- a/app/src/main/java/com/shuwei/dish/match/net/ApiService.kt +++ b/app/src/main/java/com/shuwei/dish/match/net/ApiService.kt @@ -159,7 +159,7 @@ interface ApiService { ): ApiResponse /** - * 提交构成(cookMode 区分采样/制作) + * 提交采样(落库味养创新实验,制作模式已废弃本接口) */ @POST suspend fun constituteSave( @@ -168,11 +168,11 @@ interface ApiService { ): ApiResponse /** - * 采样历史(本食堂,默认当天) + * 已提交采样列表(本食堂 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?> diff --git a/app/src/main/java/com/shuwei/dish/match/net/NetViewModel.kt b/app/src/main/java/com/shuwei/dish/match/net/NetViewModel.kt index e96c2a3..1b560e2 100644 --- a/app/src/main/java/com/shuwei/dish/match/net/NetViewModel.kt +++ b/app/src/main/java/com/shuwei/dish/match/net/NetViewModel.kt @@ -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?>) -> Unit ) { @@ -411,10 +407,7 @@ class NetViewModel( onResult(repository.sampleHistory( SampleHistoryRequest( pageNum = pageNum, - pageSize = pageSize, - keyword = keyword, - auditStatus = auditStatus, - sampleDate = sampleDate + pageSize = pageSize ) )) } diff --git a/app/src/main/java/com/shuwei/dish/match/net/RemoteRepository.kt b/app/src/main/java/com/shuwei/dish/match/net/RemoteRepository.kt index d315912..658585a 100644 --- a/app/src/main/java/com/shuwei/dish/match/net/RemoteRepository.kt +++ b/app/src/main/java/com/shuwei/dish/match/net/RemoteRepository.kt @@ -88,11 +88,11 @@ class RemoteRepository { suspend fun getFoodComposition(foodId: String): UiState = safeApiCall { apiService.getFoodComposition(foodId = foodId) } - /** 提交构成(cookMode 区分采样/制作) */ + /** 提交采样(落库味养创新实验,制作模式已废弃本接口) */ suspend fun constituteSave(request: ConstituteSaveRequest): UiState = safeApiCall { apiService.constituteSave(request = request) } - /** 采样历史(本食堂,默认当天) */ + /** 已提交采样列表(本食堂 source=2,按提交时间倒序,不分日期) */ suspend fun sampleHistory(request: SampleHistoryRequest): UiState?> = safeApiCall { apiService.sampleHistory(request = request) } diff --git a/app/src/main/java/com/shuwei/dish/match/ui/FoodSearchActivity.kt b/app/src/main/java/com/shuwei/dish/match/ui/FoodSearchActivity.kt index 746ea23..586e5d7 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/FoodSearchActivity.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/FoodSearchActivity.kt @@ -153,7 +153,6 @@ class FoodSearchActivity : BaseActivity() { private fun FoodSearchItem.toFoodRecord(): FoodRecord = FoodRecord( foodId = foodId, foodName = foodName, - foodCode = foodCode, cookMode = 1 ) diff --git a/app/src/main/java/com/shuwei/dish/match/ui/SamplingModeActivity.kt b/app/src/main/java/com/shuwei/dish/match/ui/SamplingModeActivity.kt index 16ae0ae..333b763 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/SamplingModeActivity.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/SamplingModeActivity.kt @@ -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( diff --git a/app/src/main/java/com/shuwei/dish/match/ui/SubmitFoodActivity.kt b/app/src/main/java/com/shuwei/dish/match/ui/SubmitFoodActivity.kt index 93834ef..3433f7e 100644 --- a/app/src/main/java/com/shuwei/dish/match/ui/SubmitFoodActivity.kt +++ b/app/src/main/java/com/shuwei/dish/match/ui/SubmitFoodActivity.kt @@ -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