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.
119 lines
5.7 KiB
119 lines
5.7 KiB
package com.mathvision.diet.controller;
|
|
|
|
import com.alibaba.fastjson2.JSON;
|
|
import com.alibaba.fastjson2.JSONArray;
|
|
import com.alibaba.fastjson2.TypeReference;
|
|
import com.mathvision.diet.domian.RuleItemDTO;
|
|
import com.mathvision.diet.entity.Nutrition;
|
|
import com.mathvision.diet.service.EnumService;
|
|
import com.mathvision.diet.service.NutritionService;
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.data.domain.Page;
|
|
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.math.BigDecimal;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
@RequestMapping("/api/nutrition")
|
|
@Controller
|
|
public class NutritionController extends BaseController {
|
|
@Resource
|
|
EnumService enumService;
|
|
|
|
@Resource
|
|
NutritionService nutritionService;
|
|
|
|
@ResponseBody
|
|
@RequestMapping(method = RequestMethod.PUT)
|
|
public Nutrition add(@RequestParam String name, @RequestParam List<Long> vendors, @RequestParam BigDecimal overflow) {
|
|
Assert.isTrue(isAdmin(), "[参数错误]无操作权限!");
|
|
Assert.isTrue(StringUtils.isNotBlank(name), "[参数错误]营养计划名称必填!");
|
|
Assert.notNull(overflow, "[参数错误]溢出范围必填!");
|
|
Assert.isTrue(CollectionUtils.isNotEmpty(vendors), "[参数错误]单位列表必填!");
|
|
Assert.isTrue(nutritionService.notExists(name), "[参数错误]营养计划名称已存在!");
|
|
return nutritionService.add(Nutrition.builder().name(name).overflow(overflow).vendors(vendors).build(), getUid());
|
|
}
|
|
|
|
@ResponseBody
|
|
@RequestMapping(method = RequestMethod.DELETE)
|
|
public void delete(@RequestParam Long id) {
|
|
Assert.isTrue(isAdmin(), "[参数错误]无操作权限!");
|
|
Assert.notNull(id, "[参数错误]营养计划必填!");
|
|
Assert.isTrue(nutritionService.exists(id), "[参数错误]营养计划不存在!");
|
|
|
|
nutritionService.delete(id, getUid());
|
|
}
|
|
|
|
@ResponseBody
|
|
@RequestMapping(method = RequestMethod.POST)
|
|
public Nutrition update(@RequestParam Long id, @RequestParam(required = false) String name, @RequestParam(required = false) BigDecimal overflow, @RequestParam(required = false) List<Long > vendors, @RequestParam(required = false) String foodCategoryDay, @RequestParam(required = false) String foodCategoryWeek, @RequestParam(required = false) String ingredient) {
|
|
Assert.isTrue(isAdmin(), "[参数错误]无操作权限!");
|
|
Assert.isTrue(ingredient == null || JSON.isValid(ingredient), "[参数错误]食材JSON解析错误!");
|
|
|
|
Nutrition nutrition = nutritionService.get(id);
|
|
Assert.isTrue(nutrition != null, "[参数错误]营养计划不存在!");
|
|
|
|
boolean flag = false;
|
|
if(StringUtils.isNotBlank(name) && !StringUtils.equals(name, nutrition.getName()) && nutritionService.notExists(name)) {
|
|
nutrition.setName(name);
|
|
flag = true;
|
|
}
|
|
if(overflow != null && !nutrition.getOverflow().equals(overflow)) {
|
|
nutrition.setOverflow(overflow);
|
|
flag = true;
|
|
}
|
|
if(CollectionUtils.isNotEmpty(vendors)) {
|
|
nutrition.setVendors(vendors);
|
|
flag = true;
|
|
}
|
|
if (StringUtils.isNotBlank(foodCategoryDay)) {
|
|
nutrition.setFoodCategoryDay(checkAndConvert(foodCategoryDay, "日规则"));
|
|
flag = true;
|
|
}
|
|
if (StringUtils.isNotBlank(foodCategoryWeek)) {
|
|
nutrition.setFoodCategoryWeek(checkAndConvert(foodCategoryWeek, "周规则"));
|
|
flag = true;
|
|
}
|
|
if (JSON.isValid(ingredient)) {
|
|
nutrition.setIngredient(JSON.parseObject(ingredient, new TypeReference<Map<String, Map<String, Map<String, BigDecimal>>>>(){}));
|
|
flag = true;
|
|
}
|
|
if (flag) {
|
|
nutrition = nutritionService.update(nutrition, getUid());
|
|
}
|
|
return nutrition;
|
|
}
|
|
|
|
@ResponseBody
|
|
@RequestMapping(method = RequestMethod.GET)
|
|
public Page<Nutrition> query(@RequestParam(required = false) String keyword, @RequestParam(required = false, defaultValue = "0") int pageNo, @RequestParam(required = false, defaultValue = "20") int pageSize) {
|
|
Assert.isTrue(isAdmin(), "[参数错误]无操作权限!");
|
|
return nutritionService.list(keyword, PageRequest.of(pageNo, pageSize).withSort(Sort.by(Sort.Direction.DESC, "id")));
|
|
}
|
|
|
|
@ResponseBody
|
|
@RequestMapping(value="select", method = RequestMethod.GET)
|
|
public Object query(@RequestParam(required = false) Long id, @RequestParam(required = false) String keyword, @RequestParam(required = false) Long vender) {
|
|
if (id != null) {
|
|
return nutritionService.get(id);
|
|
}
|
|
return nutritionService.query(isAdmin() ? vender : getVender(), keyword);
|
|
}
|
|
|
|
private List<RuleItemDTO> checkAndConvert(String standard, String desc) {
|
|
Assert.isTrue(JSON.isValid(standard), "[参数错误]" + desc + "JSON解析错误!");
|
|
List<RuleItemDTO> result = JSONArray.parseArray(standard, RuleItemDTO.class);
|
|
Assert.isTrue(result.stream().allMatch(x -> x.check() && x.getCategory().stream().allMatch(c -> enumService.checkCategory(c))), "[参数错误]" + desc + ":规则名称/计量单位/食材种类必填, 最大值/最小值至少填一个!");
|
|
return result;
|
|
}
|
|
}
|
|
|