You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
159 lines
8.0 KiB
159 lines
8.0 KiB
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.entity.Menu;
|
|
import com.mathvision.diet.entity.Nutrition;
|
|
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.HashSet;
|
|
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<Long> vendors, @RequestParam(required = false) String icon, @RequestParam(required = false) List<Integer> 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<DishItemDTO> items = JSON.parseObject(ingredient, new TypeReference<List<DishItemDTO>>(){});
|
|
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(path = "copy", method = RequestMethod.PUT)
|
|
public void copy(@RequestParam Long id, @RequestParam(required = false) List<Long> vendors) {
|
|
Dish dish = isAdmin() ? dishService.get(id) : dishService.get(id, getVender());
|
|
Assert.notNull(dish, "[参数错误]菜品不存在, 复制失败!");
|
|
|
|
if(isAdmin()) {
|
|
vendors = vendors == null ? Lists.newArrayList() : vendors.stream().filter(venderService::exists).collect(Collectors.toList());
|
|
} else {
|
|
vendors = Lists.newArrayList(getVender());
|
|
}
|
|
dishService.copy(dish, vendors, getUid());
|
|
}
|
|
|
|
@ResponseBody
|
|
@RequestMapping(method = RequestMethod.DELETE)
|
|
public void delete(@RequestParam List<Long> 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<Integer> 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<DishItemDTO> items = JSON.parseObject(ingredient, new TypeReference<List<DishItemDTO>>(){});
|
|
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) String label, @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, label, 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<DishLabelDO> label(@RequestParam(required = false) List<Long> ids) {
|
|
return dishService.label(ids, getVender());
|
|
}
|
|
}
|