配餐软件
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

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());
}
}