package com.mathvision.diet.controller; import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.TypeReference; import com.google.common.collect.Lists; import com.google.common.collect.Range; import com.mathvision.diet.domain.DishLabelDO; import com.mathvision.diet.domian.DishItemDTO; import com.mathvision.diet.entity.Dish; import com.mathvision.diet.service.DishService; import com.mathvision.diet.service.EnumService; import com.mathvision.diet.service.IngredientService; import com.mathvision.diet.service.VenderService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.stereotype.Controller; import org.springframework.util.Assert; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import java.time.Instant; import java.util.List; import java.util.stream.Collectors; @RequestMapping("/api/dish") @Controller public class DishController extends BaseController { @Resource EnumService enumService; @Resource DishService dishService; @Resource VenderService venderService; @Resource private IngredientService ingredientService; @ResponseBody @RequestMapping(method = RequestMethod.PUT) public void add(@RequestParam String name, @RequestParam(required = false) List vendors, @RequestParam(required = false) String icon, @RequestParam(required = false) List month, @RequestParam String mark, @RequestParam String poly, @RequestParam String ingredient) { Assert.isTrue(StringUtils.isNotBlank(name), "[参数错误]菜品名称必填!"); Assert.isTrue(StringUtils.isNotBlank(mark), "[参数错误]菜品标签必填!"); Assert.isTrue(StringUtils.isNotBlank(poly), "[参数错误]烹饪手法必填!"); Assert.isTrue(enumService.checkMark(mark), "[参数错误]菜品标签不在取值范围内!"); Assert.isTrue(enumService.checkPoly(poly), "[参数错误]烹饪手法不在取值范围内!"); Assert.isTrue(CollectionUtils.isNotEmpty(month) && month.stream().allMatch(x -> Range.closed(1, 12).contains(x)), "[参数错误]请选择正确的月份!"); Assert.isTrue(JSON.isValid(ingredient), "[参数错误]食材列表必填!"); List items = JSON.parseObject(ingredient, new TypeReference>(){}); Assert.isTrue(items.stream().allMatch(x -> ingredientService.existsIngredientByKey(x.getKey())), "[参数错误]请选择系统存在的食材!"); if (isAdmin()) { Assert.isTrue(CollectionUtils.isNotEmpty(vendors), "[参数错误]单位列表必填!"); } else { vendors = Lists.newArrayList(getVender()); } Assert.isTrue(vendors.stream().allMatch(venderService::exists), "[[参数错误]请选择存在的单位!]"); Instant dateTime = Instant.now(); dishService.add(vendors.stream().map(vender -> Dish.builder().name(name).vender(vender).marks(mark).poly(poly).month(month).icon(icon).ingredient(items).operate(getUid()).created(dateTime).modify(dateTime).build()).collect(Collectors.toList()), getUid()); } @ResponseBody @RequestMapping(method = RequestMethod.DELETE) public void delete(@RequestParam List ids) { Assert.isTrue(CollectionUtils.isNotEmpty(ids), "[参数错误]菜品编号必填!"); Assert.isTrue(isAdmin() || dishService.exists(getVender(), ids), "[参数错误]菜品不存在!"); dishService.delete(ids, getVender(), getUid()); } @ResponseBody @RequestMapping(method = RequestMethod.POST) public void update(@RequestParam Long id, @RequestParam(required = false) String name, @RequestParam(required = false) String icon, @RequestParam(required = false) List month, @RequestParam(required = false) String mark, @RequestParam(required = false) String poly, @RequestParam(required = false) String ingredient) { Dish dish = isAdmin()? dishService.get(id) : dishService.get(id, getVender()); Assert.isTrue(dish != null, "[参数错误]菜品不存在!"); boolean flag = false; if(StringUtils.isNotBlank(name) && !StringUtils.equals(name, dish.getName())) { Assert.isTrue(!dishService.exists(id, name, dish.getVender()), "[参数错误]菜品名称已存在!"); dish.setName(name); flag = true; } if(StringUtils.isNotBlank(icon) && !icon.equals(dish.getIcon())) { dish.setIcon(icon); flag = true; } if(StringUtils.isNotBlank(mark) && !mark.equals(dish.getMarks())) { Assert.isTrue(enumService.checkMark(mark), "[参数错误]菜品标签不在取值范围内!"); dish.setMarks(mark); flag = true; } if(StringUtils.isNotBlank(poly) && !poly.equals(dish.getPoly())) { Assert.isTrue(enumService.checkPoly(poly), "[参数错误]烹饪手法不在取值范围内!"); dish.setPoly(poly); flag = true; } if(CollectionUtils.isNotEmpty(month)) { Assert.isTrue(CollectionUtils.isNotEmpty(month) && month.stream().allMatch(x -> Range.closed(1, 12).contains(x)), "[参数错误]请选择正确的月份!"); dish.setMonth(month); flag = true; } if (JSON.isValid(ingredient)) { List items = JSON.parseObject(ingredient, new TypeReference>(){}); if(CollectionUtils.isNotEmpty(items)) { Assert.isTrue(items.stream().allMatch(x -> ingredientService.existsIngredientByKey(x.getKey())), "[参数错误]请选择系统存在的食材!"); dish.setIngredient(items); flag = true; } } if (flag) { dishService.update(dish, getUid()); } } @ResponseBody @RequestMapping(method = RequestMethod.GET) public Object query(@RequestParam(required = false) String keyword, @RequestParam(required = false) Long id, @RequestParam(required = false) Long vendors, @RequestParam(required = false) String mark, @RequestParam(required = false) String poly, @RequestParam(required = false, defaultValue = "0") int pageNo, @RequestParam(required = false, defaultValue = "20") int pageSize) { if (id != null) { return isAdmin() ? dishService.get(id) : dishService.get(id, getVender()); } return dishService.list(!isAdmin() || vendors == null ? getVender() : vendors, keyword, mark, poly, PageRequest.of(pageNo, pageSize).withSort(Sort.by(Sort.Direction.DESC, "id"))); } @ResponseBody @RequestMapping(value = "select", method = RequestMethod.GET) public Object query(@RequestParam(required = false) String keyword) { return dishService.query(keyword); } @ResponseBody @RequestMapping(value = "label", method = RequestMethod.GET) public List label(@RequestParam(required = false) List ids) { return dishService.label(ids, getVender()); } }