设备端从菜谱中删除菜品接口
基本信息
| 项目 | 内容 |
| 接口名称 | 设备端从菜谱中删除菜品 |
| 请求方式 | POST |
| 接口地址 | /api/device/recipe/deleteDishes |
| 终端分类 | 设备端 |
| 代码分支 | codex/VWCG-957-device-weight-record-trend |
| worktree | /Users/liang/AndroidStudioProjects/zhct/zhctproject/store |
| 控制器 | application/api/controller/Device.php::recipeDeleteDishes |
| 服务 | application/api/service/DeviceRestaurant.php::deleteDishesFromRecipe |
请求参数
Content-Type 支持表单 application/x-www-form-urlencoded 或 JSON application/json。
| 参数 | 类型 | 必填 | 说明 |
equipment_code | string | 是 | 设备编号。兼容别名 code。 |
dishes_uuid | string | 是 | 要从菜谱中删除的菜品 uuid。兼容别名 uuid。 |
restaurant_id | int | 是 | 档口 ID。 |
menu_date | string | 是 | 菜谱日期,格式 YYYY-MM-DD。兼容别名 date。 |
meal_times | int | 是 | 餐次:1 早餐,2 午餐,3 晚餐,4 加餐。 |
请求示例
POST /api/device/recipe/deleteDishes
Content-Type: application/json
{
"equipment_code": "WEIGH-001",
"dishes_uuid": "dish-uuid-001",
"restaurant_id": 12,
"menu_date": "2026-06-25",
"meal_times": 2
}
成功响应
接口按幂等方式处理:如果目标菜品本来不在该日期、餐次、档口的菜谱中,也返回成功,deleted_count 为 0。
{
"code": 0,
"message": "删除成功",
"data": {
"equipment_code": "WEIGH-001",
"restaurant_id": 12,
"dishes_uuid": "dish-uuid-001",
"menu_date": "2026-06-25",
"meal_times": 2,
"deleted_count": 1
}
}
失败响应
{
"code": 1,
"message": "设备编号不能为空",
"data": []
}
| 场景 | message |
| 未传设备编号 | 设备编号不能为空 |
| 设备不存在 | 设备不存在 |
| 未传菜品 uuid | 删除菜品uuid不能为空 |
| 菜品不存在 | 菜品不存在 |
| 未传档口 ID | 档口ID不能为空 |
| 档口不存在 | 档口不存在 |
| 菜谱日期为空或格式错误 | 时间格式错误 |
| 餐次不在 1-4 范围 | 餐次参数错误 |
| 删除过程异常 | 菜谱菜品删除失败 |
处理逻辑
- 校验设备编号存在于
ydy_equipment 且未删除。
- 校验菜品 uuid 存在于
ydy_dishes 且未删除。
- 校验档口 ID 存在于
ydy_restaurants 且未删除。
- 按
dishes_uuid + restaurant_id + menu_date + meal_times 精确匹配 ydy_recipes。
- 匹配不到时直接返回成功,
deleted_count=0。
- 匹配到时开启事务删除
ydy_recipes 记录,并同步递减 ydy_dishes.menu_quantity。
测试覆盖
已补充控制器契约测试:tests/apifox/openapi/OpenApiControllerContractValidationTest.php::testDeviceRecipeDeleteDishesRejectsMissingEquipmentCode。
| 用例 | 输入 | 预期 |
| 正常删除 | 合法设备编号、菜品 uuid、档口 ID、日期、餐次 | code=0,deleted_count=1 |
| 幂等删除 | 目标菜品不在该菜谱 | code=0,deleted_count=0 |
| 缺设备编号 | 不传 equipment_code | code=1,message=设备编号不能为空 |
| 缺菜品 uuid | 不传 dishes_uuid | code=1,message=删除菜品uuid不能为空 |
| 日期格式错误 | menu_date=2026/06/25 | code=1,message=时间格式错误 |
| 餐次越界 | meal_times=9 | code=1,message=餐次参数错误 |