设备端从菜谱中删除菜品接口

基本信息

项目内容
接口名称设备端从菜谱中删除菜品
请求方式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_codestring设备编号。兼容别名 code
dishes_uuidstring要从菜谱中删除的菜品 uuid。兼容别名 uuid
restaurant_idint档口 ID。
menu_datestring菜谱日期,格式 YYYY-MM-DD。兼容别名 date
meal_timesint餐次: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_count0
{
  "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 范围餐次参数错误
删除过程异常菜谱菜品删除失败

处理逻辑

  1. 校验设备编号存在于 ydy_equipment 且未删除。
  2. 校验菜品 uuid 存在于 ydy_dishes 且未删除。
  3. 校验档口 ID 存在于 ydy_restaurants 且未删除。
  4. dishes_uuid + restaurant_id + menu_date + meal_times 精确匹配 ydy_recipes
  5. 匹配不到时直接返回成功,deleted_count=0
  6. 匹配到时开启事务删除 ydy_recipes 记录,并同步递减 ydy_dishes.menu_quantity

测试覆盖

已补充控制器契约测试:tests/apifox/openapi/OpenApiControllerContractValidationTest.php::testDeviceRecipeDeleteDishesRejectsMissingEquipmentCode

用例输入预期
正常删除合法设备编号、菜品 uuid、档口 ID、日期、餐次code=0deleted_count=1
幂等删除目标菜品不在该菜谱code=0deleted_count=0
缺设备编号不传 equipment_codecode=1message=设备编号不能为空
缺菜品 uuid不传 dishes_uuidcode=1message=删除菜品uuid不能为空
日期格式错误menu_date=2026/06/25code=1message=时间格式错误
餐次越界meal_times=9code=1message=餐次参数错误