package com.etotem.cfc.controller.admin; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.etotem.cfc.common.Result; import com.etotem.cfc.entity.Food; import com.etotem.cfc.service.FoodService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.*; import java.util.stream.Collectors; @Tag(name = "\u7ba1\u7406\u7aef-\u98df\u6750\u7ba1\u7406") @RestController @RequestMapping("/api/admin/foods") public class AdminFoodController { @Resource private FoodService foodService; @Operation(summary = "\u98df\u6750\u5217\u8868") @PostMapping("/list") public Result> list(@RequestBody Map params) { long page = params.get("page") != null ? ((Number) params.get("page")).longValue() : 1; long size = params.get("size") != null ? ((Number) params.get("size")).longValue() : 20; String category = (String) params.get("category"); String keyword = (String) params.get("keyword"); Page pageResult = foodService.listPage(page, size, category, keyword, "active"); List> records = new ArrayList<>(); for (Food food : pageResult.getRecords()) { Map item = new HashMap<>(); item.put("id", food.getId()); item.put("name", food.getName()); item.put("category", food.getCategory()); item.put("unit", food.getUnit()); item.put("calories", food.getCalories()); item.put("protein", food.getProtein()); item.put("fat", food.getFat()); item.put("carbs", food.getCarbs()); item.put("fiber", food.getFiber()); item.put("energyKj", food.getEnergyKj()); item.put("starch", food.getStarch()); item.put("cholesterol", food.getCholesterol()); item.put("priceLevel", food.getPriceLevel()); item.put("nutritionTags", food.getNutritionTags()); item.put("suitableFor", food.getSuitableFor()); item.put("allergens", food.getAllergens()); item.put("coverImage", food.getCoverImage()); item.put("status", food.getStatus()); item.put("sortOrder", food.getSortOrder()); item.put("createdAt", food.getCreatedAt()); item.put("updatedAt", food.getUpdatedAt()); item.put("months", foodService.getMonths(food.getId())); records.add(item); } Map data = new HashMap<>(); data.put("records", records); data.put("total", pageResult.getTotal()); data.put("page", pageResult.getCurrent()); data.put("size", pageResult.getSize()); return Result.success(data); } @Operation(summary = "\u65b0\u589e\u98df\u6750") @PostMapping("/create") public Result create(@RequestBody Food food) { foodService.create(food); return Result.success(food); } @Operation(summary = "\u66f4\u65b0\u98df\u6750") @PostMapping("/update") public Result update(@RequestBody Food food) { foodService.update(food); return Result.success("ok"); } @Operation(summary = "\u5220\u9664\u98df\u6750") @PostMapping("/delete") public Result delete(@RequestBody Map params) { Long id = params.get("id") != null ? Long.valueOf(params.get("id").toString()) : null; if (id == null) return Result.error("id\u4e0d\u80fd\u4e3a\u7a7a"); foodService.delete(id); return Result.success("ok"); } @Operation(summary = "\u98df\u6750\u8be6\u60c5\uff08\u542b\u5e94\u5b63\u6708\u4efd\uff09") @PostMapping("/detail") public Result> detail(@RequestBody Map params) { Long id = params.get("id") != null ? Long.valueOf(params.get("id").toString()) : null; if (id == null) return Result.error("id\u4e0d\u80fd\u4e3a\u7a7a"); Map result = foodService.getDetailWithMonths(id); if (result == null) return Result.error("\u98df\u6750\u4e0d\u5b58\u5728"); return Result.success(result); } @Operation(summary = "\u4fdd\u5b58\u5e94\u5b63\u6708\u4efd") @PostMapping("/saveMonths") public Result saveMonths(@RequestBody Map params) { Long id = params.get("id") != null ? Long.valueOf(params.get("id").toString()) : null; if (id == null) return Result.error("id\u4e0d\u80fd\u4e3a\u7a7a"); @SuppressWarnings("unchecked") List months = params.get("months") != null ? ((List) params.get("months")).stream() .map(o -> o instanceof Integer ? (Integer) o : Integer.valueOf(o.toString())) .collect(Collectors.toList()) : Collections.emptyList(); foodService.saveMonths(id, months); return Result.success("ok"); } }