caoyiwen 2 years ago
parent
commit
91a10d4d8d
  1. 5
      diet-core/src/main/java/com/mathvision/diet/excel/BigDecimalStringConverter.java
  2. 2
      diet-core/src/main/java/com/mathvision/diet/service/MenuReleaseService.java
  3. 152
      diet-core/src/main/java/com/mathvision/diet/service/MenuReviewService.java
  4. 4
      diet-dao/src/main/java/com/mathvision/diet/domian/MenuStatus.java
  5. 1
      diet-web/src/main/java/com/mathvision/diet/aspect/GlobalRequestAspect.java
  6. 10
      diet-web/src/main/java/com/mathvision/diet/controller/IconController.java
  7. 34
      diet-web/src/main/java/com/mathvision/diet/controller/MenuController.java
  8. 12
      diet-web/src/main/java/com/mathvision/diet/controller/MenuDishController.java
  9. 2
      diet-web/src/main/java/com/mathvision/diet/controller/MenuReleaseController.java
  10. 122
      diet-web/src/main/java/com/mathvision/diet/controller/MenuReviewController.java
  11. 2
      diet-web/src/main/resources/static/icon.html
  12. 10
      diet-web/src/main/resources/static/menu/menu.html
  13. 2
      doc/icon.md
  14. 10
      doc/menu/menu.md

5
diet-core/src/main/java/com/mathvision/diet/excel/BigDecimalStringConverter.java

@ -10,7 +10,6 @@ import com.alibaba.excel.util.NumberUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.ParseException;
@Slf4j @Slf4j
public class BigDecimalStringConverter implements Converter<BigDecimal> { public class BigDecimalStringConverter implements Converter<BigDecimal> {
@ -25,7 +24,7 @@ public class BigDecimalStringConverter implements Converter<BigDecimal> {
return CellDataTypeEnum.STRING; return CellDataTypeEnum.STRING;
} }
public BigDecimal convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws ParseException { public BigDecimal convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) {
if(cellData == null) { if(cellData == null) {
return null; return null;
} }
@ -36,7 +35,7 @@ public class BigDecimalStringConverter implements Converter<BigDecimal> {
try { try {
return NumberUtils.parseBigDecimal(cellData.getStringValue().trim(), contentProperty); return NumberUtils.parseBigDecimal(cellData.getStringValue().trim(), contentProperty);
} catch (Exception e) { } catch (Exception e) {
log.error("[BigDecimalStringConverter] convertToJavaData exception :" + e.getMessage(), e); log.error("[BigDecimalStringConverter] convertToJavaData<" + cellData.getStringValue() + "> exception :" + e.getMessage(), e);
return new BigDecimal(-1); return new BigDecimal(-1);
} }
} }

2
diet-core/src/main/java/com/mathvision/diet/service/MenuReleaseService.java

@ -38,7 +38,7 @@ public class MenuReleaseService {
} }
public void cancel(Long id, String operator) { public void cancel(Long id, String operator) {
menuRepository.updateStatusAndStartTimeAndEndTimeAndOperateById(MenuStatus.pass, null, null, operator, id); menuRepository.updateStatusAndStartTimeAndEndTimeAndOperateById(MenuStatus.draft, null, null, operator, id);
log.info("[MenuReleaseService] cancel id = " + id + ", operator = " + operator); log.info("[MenuReleaseService] cancel id = " + id + ", operator = " + operator);
} }

152
diet-core/src/main/java/com/mathvision/diet/service/MenuReviewService.java

@ -26,80 +26,80 @@ import java.util.List;
@Slf4j @Slf4j
@Service @Service
public class MenuReviewService { public class MenuReviewService {
private static final List<MenuStatus> SUPPORTED_STATUS = Lists.newArrayList(MenuStatus.submit, MenuStatus.pass, MenuStatus.reject); // private static final List<MenuStatus> SUPPORTED_STATUS = Lists.newArrayList(MenuStatus.submit, MenuStatus.pass, MenuStatus.reject);
@Resource // @Resource
private MenuRepository menuRepository; // private MenuRepository menuRepository;
//
@Resource // @Resource
private MenuApproveRepository menuApproveRepository; // private MenuApproveRepository menuApproveRepository;
//
@PostConstruct // @PostConstruct
@Scheduled(cron = "0 0 0/6 * * *") // @Scheduled(cron = "0 0 0/6 * * *")
public void init() { // public void init() {
menuApproveRepository.scanExpired(); // menuApproveRepository.scanExpired();
} // }
//
public void submit(Long id, String operator) { // public void submit(Long id, String operator) {
menuRepository.updateStatusAndOperateById(MenuStatus.submit, operator, id); // menuRepository.updateStatusAndOperateById(MenuStatus.submit, operator, id);
} // }
//
public void pass(Long id, String reason, String operator) { // public void pass(Long id, String reason, String operator) {
Instant datetime = Instant.now(); // Instant datetime = Instant.now();
menuRepository.updateStatusAndApproveAndOperateById(MenuStatus.pass, reason, operator, id); // menuRepository.updateStatusAndApproveAndOperateById(MenuStatus.pass, reason, operator, id);
menuApproveRepository.save(MenuApprove.builder().menu(id).pass(true).approve(reason).operate(operator).created(datetime).modify(datetime).build()); // menuApproveRepository.save(MenuApprove.builder().menu(id).pass(true).approve(reason).operate(operator).created(datetime).modify(datetime).build());
} // }
//
public void reject(Long id, String reason, String operator) { // public void reject(Long id, String reason, String operator) {
Instant datetime = Instant.now(); // Instant datetime = Instant.now();
menuRepository.updateStatusAndApproveAndOperateById(MenuStatus.reject, reason, operator, id); // menuRepository.updateStatusAndApproveAndOperateById(MenuStatus.reject, reason, operator, id);
menuApproveRepository.save(MenuApprove.builder().menu(id).pass(false).approve(reason).operate(operator).created(datetime).modify(datetime).build()); // menuApproveRepository.save(MenuApprove.builder().menu(id).pass(false).approve(reason).operate(operator).created(datetime).modify(datetime).build());
} // }
//
public void disable(Long id, String operator) { // public void disable(Long id, String operator) {
menuRepository.updateStatusAndOperateById(MenuStatus.disabled, operator, id); // menuRepository.updateStatusAndOperateById(MenuStatus.disabled, operator, id);
} // }
//
public Object count() { // public Object count() {
return menuRepository.count(Lists.newArrayList(MenuStatus.submit, MenuStatus.pass, MenuStatus.reject)); // return menuRepository.count(Lists.newArrayList(MenuStatus.submit, MenuStatus.pass, MenuStatus.reject));
} // }
//
public Page<Menu> list(Long vender, MenuStatus status, String name, Date startTime, Date endTime, PageRequest pageRequest) { // public Page<Menu> list(Long vender, MenuStatus status, String name, Date startTime, Date endTime, PageRequest pageRequest) {
return menuRepository.findAll(toSpecification(vender, status, name, startTime, endTime), pageRequest); // return menuRepository.findAll(toSpecification(vender, status, name, startTime, endTime), pageRequest);
} // }
//
private Specification<Menu> toSpecification(Long vender, MenuStatus status, String name, Date startTime, Date endTime) { // private Specification<Menu> toSpecification(Long vender, MenuStatus status, String name, Date startTime, Date endTime) {
return (root, query, builder) -> { // return (root, query, builder) -> {
List<Predicate> predicates = new ArrayList<>(); // List<Predicate> predicates = new ArrayList<>();
//
if (vender != null && vender > 0) { // if (vender != null && vender > 0) {
predicates.add(builder.equal(root.get("vender"), vender)); // predicates.add(builder.equal(root.get("vender"), vender));
} // }
//
if( status != null && SUPPORTED_STATUS.contains(status)) { // if( status != null && SUPPORTED_STATUS.contains(status)) {
predicates.add(builder.equal(root.get("status"), status)); // predicates.add(builder.equal(root.get("status"), status));
} else { // } else {
CriteriaBuilder.In<Object> in = builder.in(root.get("status")); // CriteriaBuilder.In<Object> in = builder.in(root.get("status"));
Lists.newArrayList(MenuStatus.submit, MenuStatus.pass, MenuStatus.reject).forEach(in::value); // Lists.newArrayList(MenuStatus.submit, MenuStatus.pass, MenuStatus.reject).forEach(in::value);
predicates.add(in); // predicates.add(in);
} // }
//
if (startTime != null) { // if (startTime != null) {
predicates.add(builder.greaterThanOrEqualTo(root.get("modify"), startTime.toInstant())); // predicates.add(builder.greaterThanOrEqualTo(root.get("modify"), startTime.toInstant()));
} // }
//
if (endTime != null) { // if (endTime != null) {
predicates.add(builder.lessThanOrEqualTo(root.get("modify"), endTime.toInstant())); // predicates.add(builder.lessThanOrEqualTo(root.get("modify"), endTime.toInstant()));
} // }
//
if (StringUtils.isNotBlank(name)) { // if (StringUtils.isNotBlank(name)) {
predicates.add(builder.like(root.get("name"), "%" + name + "%")); // predicates.add(builder.like(root.get("name"), "%" + name + "%"));
} // }
//
if (predicates.size() > 1) { // if (predicates.size() > 1) {
return builder.and(predicates.toArray(new Predicate[0])); // return builder.and(predicates.toArray(new Predicate[0]));
} else { // } else {
return predicates.get(0); // return predicates.get(0);
} // }
}; // };
} // }
} }

4
diet-dao/src/main/java/com/mathvision/diet/domian/MenuStatus.java

@ -6,7 +6,9 @@ import java.util.Arrays;
public enum MenuStatus { public enum MenuStatus {
//0-草稿,1-提交审核,2-审核通过,3-审核失败,4-禁用,5-发布 //0-草稿,1-提交审核,2-审核通过,3-审核失败,4-禁用,5-发布
draft(0, "草稿"), submit(1,"审核中"), pass(2,"审核通过"), reject(3, "审核失败"), disabled(4, "禁用"), publish(5, "发布"); draft(0, "草稿"), publish(5, "发布"),
//submit(1,"审核中"), pass(2,"审核通过"), reject(3, "审核失败"), disabled(4, "禁用")
;
@Getter @Getter
private final int code; private final int code;

1
diet-web/src/main/java/com/mathvision/diet/aspect/GlobalRequestAspect.java

@ -40,6 +40,7 @@ public class GlobalRequestAspect implements HandlerInterceptor, WebMvcConfigurer
public void addInterceptors(InterceptorRegistry registry) { public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(this) registry.addInterceptor(this)
.addPathPatterns("/api/**") .addPathPatterns("/api/**")
.excludePathPatterns("/api/icon/*.*")
.excludePathPatterns("/api/login") .excludePathPatterns("/api/login")
.excludePathPatterns("/api/logout"); .excludePathPatterns("/api/logout");
} }

10
diet-web/src/main/java/com/mathvision/diet/controller/IconController.java

@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Paths; import java.nio.file.Paths;
@ -30,11 +31,14 @@ public class IconController extends BaseController {
} }
@ResponseBody @ResponseBody
@RequestMapping(value = "/icon/{filename}", method = RequestMethod.GET) @RequestMapping(value = "/api/icon/{filename}", method = RequestMethod.GET)
public void icon(@PathVariable("filename")String fileName) throws IOException { public void icon(@PathVariable("filename")String fileName) throws IOException {
File file = Paths.get(imagePath, fileName).toFile();
HttpServletResponse response = getResponse(); HttpServletResponse response = getResponse();
response.setContentType(IMAGE_JPEG_VALUE); response.setContentType(IMAGE_JPEG_VALUE);
response.getOutputStream().write(FileUtils.readFileToByteArray(Paths.get(imagePath, fileName).toFile())); if (file.exists() && file.isFile() && file.canRead()) {
response.flushBuffer(); response.getOutputStream().write(FileUtils.readFileToByteArray(file));
response.flushBuffer();
}
} }
} }

34
diet-web/src/main/java/com/mathvision/diet/controller/MenuController.java

@ -28,7 +28,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.LongStream;
@RequestMapping("/api/menu") @RequestMapping("/api/menu")
@Controller @Controller
@ -45,17 +44,13 @@ public class MenuController extends BaseController {
@ResponseBody @ResponseBody
@RequestMapping(method = RequestMethod.PUT) @RequestMapping(method = RequestMethod.PUT)
public List<Long> add(@RequestParam String name, @RequestParam(required = false) List<Long> vendors, @RequestParam Long nutrient, @RequestParam Long day, @RequestParam(required = false) List<Long> days, @RequestParam List<String> meals, @RequestParam List<Integer> month, @RequestParam List<String> crows) { public List<Long> add(@RequestParam String name, @RequestParam(required = false) List<Long> vendors, @RequestParam Long nutrient, @RequestParam List<Long> day, @RequestParam List<String> meals, @RequestParam List<Integer> month, @RequestParam List<String> crows) {
Assert.isTrue(StringUtils.isNotBlank(name), "[参数错误]食谱名称必填!"); Assert.isTrue(StringUtils.isNotBlank(name), "[参数错误]食谱名称必填!");
Assert.isTrue(CollectionUtils.isNotEmpty(month) && month.stream().allMatch(x -> Range.closed(1, 12).contains(x)), "[参数错误]请选择正确的月份!"); Assert.isTrue(!name.matches("[\\[\\]:?*/\\\\]") && name.length() < 31, "[参数错误]食谱名称小于31个字符,且不能包含特殊字符!");
Assert.isTrue(CollectionUtils.isNotEmpty(day) && Range.closed(1L, 7L).containsAll(day), "[参数错误]星期取值[周一~周日]!");
Assert.isTrue(CollectionUtils.isNotEmpty(month) && Range.closed(1, 12).containsAll(month), "[参数错误]请选择正确的月份!");
Assert.isTrue(CollectionUtils.isNotEmpty(meals), "[参数错误]餐次必填!"); Assert.isTrue(CollectionUtils.isNotEmpty(meals), "[参数错误]餐次必填!");
Assert.isTrue(meals.stream().allMatch(x -> MealType.toType(x) != null), "[参数错误]餐次取值[早餐,午餐,晚餐]!"); Assert.isTrue(meals.stream().allMatch(x -> MealType.toType(x) != null), "[参数错误]餐次取值[早餐,午餐,晚餐]!");
if (days == null || days.isEmpty()) {
Assert.isTrue(Range.closed(1L, 7L).contains(day), "[参数错误]星期取值[周一~周日]!");
days = LongStream.rangeClosed(1L, day).boxed().collect(Collectors.toList());
} else {
Assert.isTrue(Range.closed(1L, 7L).containsAll(days), "[参数错误]星期取值[周一~周日]!");
}
Nutrition nutrition = nutritionService.get(nutrient); Nutrition nutrition = nutritionService.get(nutrient);
Assert.notNull(nutrition, "[参数错误]营养计划必选!"); Assert.notNull(nutrition, "[参数错误]营养计划必选!");
@ -67,8 +62,7 @@ public class MenuController extends BaseController {
Assert.isTrue(CollectionUtils.isNotEmpty(crows), "[参数错误]人群取值[参照营养计划]必填!"); Assert.isTrue(CollectionUtils.isNotEmpty(crows), "[参数错误]人群取值[参照营养计划]必填!");
Assert.isTrue(allCrows.containsAll(crows), "[参数错误]营养计划不包含所选的人群!"); Assert.isTrue(allCrows.containsAll(crows), "[参数错误]营养计划不包含所选的人群!");
Instant dateTime = Instant.now(); Instant dateTime = Instant.now();
List<Long> finalDays = days; List<Menu> menus = vendors.stream().map(v -> Menu.builder().name(name).meals(meals).crows(crows).scale(crows.stream().collect(Collectors.toMap(x -> x, x -> 0))).day(day).nutrient(nutrient).month(month).vender(v).status(MenuStatus.draft).operate(getUid()).created(dateTime).modify(dateTime).build()).collect(Collectors.toList());
List<Menu> menus = vendors.stream().map(v -> Menu.builder().name(name).meals(meals).crows(crows).scale(crows.stream().collect(Collectors.toMap(x -> x, x -> 0))).day(finalDays).nutrient(nutrient).month(month).vender(v).status(MenuStatus.draft).operate(getUid()).created(dateTime).modify(dateTime).build()).collect(Collectors.toList());
return menuService.add(menus).stream().map(Menu::getId).collect(Collectors.toList()); return menuService.add(menus).stream().map(Menu::getId).collect(Collectors.toList());
} }
@ -84,28 +78,21 @@ public class MenuController extends BaseController {
@ResponseBody @ResponseBody
@RequestMapping(method = RequestMethod.POST) @RequestMapping(method = RequestMethod.POST)
public void update(@RequestParam Long id, @RequestParam(required = false) String name, @RequestParam(required = false) List<Integer> month, @RequestParam Long nutrient, @RequestParam(required = false) Long day, @RequestParam(required = false) List<Long> days, @RequestParam(required = false) List<String> meals, @RequestParam(required = false) List<String> crows) { public void update(@RequestParam Long id, @RequestParam(required = false) String name, @RequestParam(required = false) List<Integer> month, @RequestParam Long nutrient, @RequestParam(required = false) List<Long> day, @RequestParam(required = false) List<String> meals, @RequestParam(required = false) List<String> crows) {
Menu menu = menuService.get(id); Menu menu = menuService.get(id);
Assert.notNull(menu, "[参数错误]食谱不存在!"); Assert.notNull(menu, "[参数错误]食谱不存在!");
Assert.isTrue(menu.getVender().equals(getVender()) || isAdmin(), "[参数错误]食谱不存在!"); Assert.isTrue(menu.getVender().equals(getVender()) || isAdmin(), "[参数错误]食谱不存在!");
Assert.isTrue(menu.getStatus() != MenuStatus.publish, "[参数错误]该食谱已发布,不可编辑!"); Assert.isTrue(menu.getStatus() != MenuStatus.publish, "[参数错误]该食谱已发布,不可编辑!");
Assert.isTrue(CollectionUtils.isEmpty(month) || month.stream().allMatch(x -> Range.closed(1, 12).contains(x)), "[参数错误]请选择正确的月份!");
if (days == null || days.isEmpty()) {
Assert.isTrue(day == null || Range.closed(1L, 7L).contains(day), "[参数错误]天数取值[1~7]!");
if (day != null) {
days = LongStream.rangeClosed(1L, day).boxed().collect(Collectors.toList());
}
} else {
Assert.isTrue(Range.closed(1L, 7L).containsAll(days), "[参数错误]星期取值[周一~周日]!");
}
boolean flag = false; boolean flag = false;
boolean check = false; boolean check = false;
if (StringUtils.isNotBlank(name) && !StringUtils.equals(menu.getName(), name)) { if (StringUtils.isNotBlank(name) && !StringUtils.equals(menu.getName(), name)) {
Assert.isTrue(!name.matches("[\\[\\]:?*/\\\\]") && name.length() < 31, "[参数错误]食谱名称小于31个字符,且不能包含特殊字符!");
menu.setName(name); menu.setName(name);
flag = true; flag = true;
} }
if (CollectionUtils.isNotEmpty(month) && !menu.getMonth().equals(month)) { if (CollectionUtils.isNotEmpty(month) && !menu.getMonth().equals(month)) {
Assert.isTrue(Range.closed(1, 12).containsAll(month), "[参数错误]请选择正确的月份!");
menu.setMonth(month); menu.setMonth(month);
flag = true; flag = true;
} }
@ -114,8 +101,9 @@ public class MenuController extends BaseController {
menu.setMeals(meals); menu.setMeals(meals);
flag = true; flag = true;
} }
if (days != null && !days.equals(menu.getDay())) { if (day != null && !day.equals(menu.getDay())) {
menu.setDay(days); Assert.isTrue(Range.closed(1L, 7L).containsAll(day), "[参数错误]星期取值[周一~周日]!");
menu.setDay(day);
flag = true; flag = true;
} }
if (nutrient != null && !nutrient.equals(menu.getNutrient())) { if (nutrient != null && !nutrient.equals(menu.getNutrient())) {

12
diet-web/src/main/java/com/mathvision/diet/controller/MenuDishController.java

@ -47,16 +47,16 @@ public class MenuDishController extends BaseController {
@ResponseBody @ResponseBody
@RequestMapping(method = RequestMethod.PUT) @RequestMapping(method = RequestMethod.PUT)
public Long add(@RequestParam Long menuId, @RequestParam Long dishId, @RequestParam Long day, @RequestParam String meal, @RequestParam(required = false) String mark, @RequestParam(required = false) String poly, @RequestParam String ingredient) { public Long add(@RequestParam Long menuId, @RequestParam Long dishId, @RequestParam Long day, @RequestParam String meal, @RequestParam(required = false) String mark, @RequestParam(required = false) String poly, @RequestParam String ingredient) {
Menu menu = checkAndConvert(menuId, MenuStatus.pass, MenuStatus.publish); Menu menu = checkAndConvert(menuId, MenuStatus.publish);
return menuDishService.add(checkAndConvert(menu, checkAndConvert(dishId), day, meal, mark, poly, parseItems(ingredient, new HashSet<>(menu.getCrows())))).getId(); return menuDishService.add(checkAndConvert(menu, checkAndConvert(dishId), day, meal, mark, poly, parseItems(ingredient, new HashSet<>(menu.getCrows())))).getId();
} }
@ResponseBody @ResponseBody
@RequestMapping(value = "batch", method = RequestMethod.PUT) @RequestMapping(value = "batch", method = RequestMethod.PUT)
public List<Long> addAll(@RequestBody MenuDishVO menuDishVO) { public List<Long> addAll(@RequestBody MenuDishVO menuDishVO) {
menuDishVO.getMenuIds().forEach(menuId -> checkAndConvert(menuId, MenuStatus.pass, MenuStatus.publish)); menuDishVO.getMenuIds().forEach(menuId -> checkAndConvert(menuId, MenuStatus.publish));
return menuDishService.addAll(menuDishVO.getMenuIds().stream().map(menuId -> { return menuDishService.addAll(menuDishVO.getMenuIds().stream().map(menuId -> {
Menu menu = checkAndConvert(menuId, MenuStatus.pass, MenuStatus.publish); Menu menu = checkAndConvert(menuId, MenuStatus.publish);
return menuDishVO.getDishes().stream().map(dish -> checkAndConvert(menu, checkAndConvert(dish.getDish()), dish.getDay(), dish.getMeal(), dish.getMark(), dish.getPoly(), dish.getItems().stream().map(item -> MenuDishItemDTO.builder().isMain(item.getIsMain()).key(item.getKey()).value(item.getValue()).build()).collect(Collectors.toList()))).collect(Collectors.toList()); return menuDishVO.getDishes().stream().map(dish -> checkAndConvert(menu, checkAndConvert(dish.getDish()), dish.getDay(), dish.getMeal(), dish.getMark(), dish.getPoly(), dish.getItems().stream().map(item -> MenuDishItemDTO.builder().isMain(item.getIsMain()).key(item.getKey()).value(item.getValue()).build()).collect(Collectors.toList()))).collect(Collectors.toList());
}).flatMap(List::stream).collect(Collectors.toList())).stream().map(MenuDish::getId).collect(Collectors.toList()); }).flatMap(List::stream).collect(Collectors.toList())).stream().map(MenuDish::getId).collect(Collectors.toList());
} }
@ -64,7 +64,7 @@ public class MenuDishController extends BaseController {
@ResponseBody @ResponseBody
@RequestMapping(method = RequestMethod.DELETE) @RequestMapping(method = RequestMethod.DELETE)
public void delete(@RequestParam(required = false) Long menuDishId, @RequestParam Long menuId) { public void delete(@RequestParam(required = false) Long menuDishId, @RequestParam Long menuId) {
checkAndConvert(menuId, MenuStatus.pass, MenuStatus.publish); checkAndConvert(menuId, MenuStatus.publish);
if (menuDishId != null) { if (menuDishId != null) {
MenuDish dish = isAdmin() ? menuDishService.get(menuDishId) : menuDishService.get(menuDishId, getVender()); MenuDish dish = isAdmin() ? menuDishService.get(menuDishId) : menuDishService.get(menuDishId, getVender());
Assert.notNull(dish, "[参数错误]菜品不存在!"); Assert.notNull(dish, "[参数错误]菜品不存在!");
@ -77,7 +77,7 @@ public class MenuDishController extends BaseController {
@ResponseBody @ResponseBody
@RequestMapping(method = RequestMethod.POST) @RequestMapping(method = RequestMethod.POST)
public void update(@RequestParam Long menuDishId, @RequestParam Long menuId, @RequestParam(required = false) String mark, @RequestParam(required = false) String poly, @RequestParam(required = false) String ingredient) { public void update(@RequestParam Long menuDishId, @RequestParam Long menuId, @RequestParam(required = false) String mark, @RequestParam(required = false) String poly, @RequestParam(required = false) String ingredient) {
Menu menu = checkAndConvert(menuId, MenuStatus.pass, MenuStatus.publish); Menu menu = checkAndConvert(menuId, MenuStatus.publish);
MenuDish dish = isAdmin() ? menuDishService.get(menuDishId) : menuDishService.get(menuDishId, getVender()); MenuDish dish = isAdmin() ? menuDishService.get(menuDishId) : menuDishService.get(menuDishId, getVender());
Assert.notNull(dish, "[参数错误]菜品不存在!"); Assert.notNull(dish, "[参数错误]菜品不存在!");
@ -146,7 +146,7 @@ public class MenuDishController extends BaseController {
Menu menu = isAdmin() ? menuService.get(menuId) : menuService.get(menuId, getVender()); Menu menu = isAdmin() ? menuService.get(menuId) : menuService.get(menuId, getVender());
Assert.notNull(menu, "[参数错误]食谱不存在, menuId:" + menuId); Assert.notNull(menu, "[参数错误]食谱不存在, menuId:" + menuId);
if (statuses != null && statuses.length > 0) { if (statuses != null && statuses.length > 0) {
Assert.isTrue(Arrays.stream(statuses).noneMatch(menuStatus -> menu.getStatus().equals(menuStatus)), "[参数错误]食谱已通过审核或者发布, menuId:" + menuId); Assert.isTrue(Arrays.stream(statuses).noneMatch(menuStatus -> menu.getStatus().equals(menuStatus)), "[参数错误]食谱已发布, menuId:" + menuId);
} }
return menu; return menu;
} }

2
diet-web/src/main/java/com/mathvision/diet/controller/MenuReleaseController.java

@ -33,7 +33,7 @@ public class MenuReleaseController extends BaseController {
Menu menu = menuService.get(id); Menu menu = menuService.get(id);
Assert.notNull(menu, "[参数错误]食谱不存在!"); Assert.notNull(menu, "[参数错误]食谱不存在!");
Assert.isTrue(menu.getVender().equals(getVender()) || isAdmin(), "[参数错误]食谱不存在!"); Assert.isTrue(menu.getVender().equals(getVender()) || isAdmin(), "[参数错误]食谱不存在!");
Assert.isTrue(menu.getStatus() == MenuStatus.pass, "[参数错误]该食谱当前非审批通过状态,不可发布!"); Assert.isTrue(menu.getStatus() == MenuStatus.draft, "[参数错误]该食谱当前非草稿状态,不可发布!");
menu.getScale().entrySet().forEach(x -> x.setValue(scale.getOrDefault(x.getKey(), 0))); menu.getScale().entrySet().forEach(x -> x.setValue(scale.getOrDefault(x.getKey(), 0)));
menuReleaseService.publish(id, menu.getScale(), parseDate(startTime, new Date()), parseDate(endTime, DateUtils.addDays(new Date(), 7)), getUid()); menuReleaseService.publish(id, menu.getScale(), parseDate(startTime, new Date()), parseDate(endTime, DateUtils.addDays(new Date(), 7)), getUid());
} }

122
diet-web/src/main/java/com/mathvision/diet/controller/MenuReviewController.java

@ -1,77 +1,63 @@
package com.mathvision.diet.controller; package com.mathvision.diet.controller;
import com.mathvision.diet.domian.MenuStatus;
import com.mathvision.diet.entity.Menu;
import com.mathvision.diet.service.MenuReviewService;
import com.mathvision.diet.service.MenuService;
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.stereotype.Controller;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.RequestMapping; 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;
@RequestMapping("/api/menu/review") @RequestMapping("/api/menu/review")
@Controller @Controller
public class MenuReviewController extends BaseController { public class MenuReviewController extends BaseController {
// @Resource
@Resource // MenuService menuService;
MenuService menuService; //
// @Resource
@Resource // MenuReviewService menuReviewService;
MenuReviewService menuReviewService; //
// @ResponseBody
@ResponseBody // @RequestMapping(method = RequestMethod.PUT)
@RequestMapping(method = RequestMethod.PUT) // public void submit(@RequestParam Long id) {
public void submit(@RequestParam Long id) { // Menu menu = menuService.get(id);
Menu menu = menuService.get(id); // Assert.notNull(menu, "[参数错误]食谱不存在!");
Assert.notNull(menu, "[参数错误]食谱不存在!"); // Assert.isTrue(menu.getVender().equals(getVender()) || isAdmin(), "[参数错误]食谱不存在!");
Assert.isTrue(menu.getVender().equals(getVender()) || isAdmin(), "[参数错误]食谱不存在!"); // Assert.isTrue(menu.getStatus() == MenuStatus.draft || menu.getStatus() == MenuStatus.reject, "[参数错误]提交审核失败: 该食谱当前非草稿或者审核失败状态!");
Assert.isTrue(menu.getStatus() == MenuStatus.draft || menu.getStatus() == MenuStatus.reject, "[参数错误]提交审核失败: 该食谱当前非草稿或者审核失败状态!"); // menuReviewService.submit(id, getUid());
menuReviewService.submit(id, getUid()); // }
} //
// @ResponseBody
@ResponseBody // @RequestMapping(method = RequestMethod.DELETE)
@RequestMapping(method = RequestMethod.DELETE) // public void disable(@RequestParam Long id) {
public void disable(@RequestParam Long id) { // Assert.isTrue(isAdmin(), "[参数错误]无审批权限!");
Assert.isTrue(isAdmin(), "[参数错误]无审批权限!"); // Menu menu = menuService.get(id);
Menu menu = menuService.get(id); // Assert.notNull(menu, "[参数错误]食谱不存在!");
Assert.notNull(menu, "[参数错误]食谱不存在!"); // Assert.isTrue(menu.getVender().equals(getVender()) || isAdmin(), "[参数错误]食谱不存在!");
Assert.isTrue(menu.getVender().equals(getVender()) || isAdmin(), "[参数错误]食谱不存在!"); // Assert.isTrue(menu.getStatus() != MenuStatus.pass && menu.getStatus() != MenuStatus.publish, "[参数错误]禁用食谱失败: 该食谱当前非审批通过或者发布状态!");
Assert.isTrue(menu.getStatus() != MenuStatus.pass && menu.getStatus() != MenuStatus.publish, "[参数错误]禁用食谱失败: 该食谱当前非审批通过或者发布状态!"); // menuReviewService.disable(id, getUid());
menuReviewService.disable(id, getUid()); // }
} //
// @ResponseBody
@ResponseBody // @RequestMapping(method = RequestMethod.POST)
@RequestMapping(method = RequestMethod.POST) // public void approve(@RequestParam Long id, @RequestParam boolean pass, @RequestParam(required = false) String reason) {
public void approve(@RequestParam Long id, @RequestParam boolean pass, @RequestParam(required = false) String reason) { // Assert.isTrue(isAdmin(), "[参数错误]无审批权限!");
Assert.isTrue(isAdmin(), "[参数错误]无审批权限!"); // Menu menu = menuService.get(id);
Menu menu = menuService.get(id); // Assert.notNull(menu, "[参数错误]食谱不存在!");
Assert.notNull(menu, "[参数错误]食谱不存在!"); // Assert.isTrue(menu.getVender().equals(getVender()) || isAdmin(), "[参数错误]食谱不存在!");
Assert.isTrue(menu.getVender().equals(getVender()) || isAdmin(), "[参数错误]食谱不存在!"); // Assert.isTrue(menu.getStatus() == MenuStatus.submit || menu.getStatus() == MenuStatus.reject, "[参数错误]审批食谱失败: 该食谱当前非提交审核状态!");
Assert.isTrue(menu.getStatus() == MenuStatus.submit || menu.getStatus() == MenuStatus.reject, "[参数错误]审批食谱失败: 该食谱当前非提交审核状态!"); // if(pass){
if(pass){ // menuReviewService.pass(id, reason, getUid());
menuReviewService.pass(id, reason, getUid()); // } else {
} else { // menuReviewService.reject(id, reason, getUid());
menuReviewService.reject(id, reason, getUid()); // }
} // }
} //
// @ResponseBody
@ResponseBody // @RequestMapping(method = RequestMethod.GET)
@RequestMapping(method = RequestMethod.GET) // public Page<Menu> query(@RequestParam(required = false) String name, @RequestParam(required = false) Integer status, @RequestParam(required = false) Long vender, @RequestParam(required = false) String startTime, @RequestParam(required = false) String endTime, @RequestParam(required = false, defaultValue = "0") int pageNo, @RequestParam(required = false, defaultValue = "20") int pageSize) {
public Page<Menu> query(@RequestParam(required = false) String name, @RequestParam(required = false) Integer status, @RequestParam(required = false) Long vender, @RequestParam(required = false) String startTime, @RequestParam(required = false) String endTime, @RequestParam(required = false, defaultValue = "0") int pageNo, @RequestParam(required = false, defaultValue = "20") int pageSize) { // return menuReviewService.list(vender, MenuStatus.toType(status), name, parseDate(startTime), parseDate(endTime), PageRequest.of(pageNo, pageSize).withSort(Sort.by(Sort.Direction.DESC, "id")));
return menuReviewService.list(vender, MenuStatus.toType(status), name, parseDate(startTime), parseDate(endTime), PageRequest.of(pageNo, pageSize).withSort(Sort.by(Sort.Direction.DESC, "id"))); // }
} //
// @ResponseBody
@ResponseBody // @RequestMapping(value = "count", method = RequestMethod.GET)
@RequestMapping(value = "count", method = RequestMethod.GET) // public Object count() {
public Object count() { // Assert.isTrue(isAdmin(), "[参数错误]无审批权限!");
Assert.isTrue(isAdmin(), "[参数错误]无审批权限!"); // return menuReviewService.count();
return menuReviewService.count(); // }
}
} }

2
diet-web/src/main/resources/static/icon.html

@ -24,6 +24,6 @@ Content-Disposition: form-data; name=&quot;extraInfo&quot;;
</code></pre> </code></pre>
<h1>2. 访问图片(挂在nginx目录下,不用通过api路径访问,使用前端路径访问)</h1> <h1>2. 访问图片(挂在nginx目录下,不用通过api路径访问,使用前端路径访问)</h1>
<blockquote> <blockquote>
<p>GET /icon/12341234213.jpg</p> <p>GET /api/icon/12341234213.jpg</p>
</blockquote> </blockquote>

10
diet-web/src/main/resources/static/menu/menu.html

@ -13,7 +13,7 @@
&quot;轻体力&quot;, &quot;轻体力&quot;,
&quot;重体力&quot; &quot;重体力&quot;
], ],
&quot;day&quot;: 1, &quot;day&quot;: [1,3,5],
&quot;id&quot;: 1, &quot;id&quot;: 1,
&quot;meals&quot;: [ &quot;meals&quot;: [
&quot;早餐&quot;, &quot;早餐&quot;,
@ -70,7 +70,7 @@ endTime=2024-03-01
&quot;轻体力&quot;, &quot;轻体力&quot;,
&quot;重体力&quot; &quot;重体力&quot;
], ],
&quot;day&quot;: 1, &quot;day&quot;: [1,3,5],
&quot;id&quot;: 1, &quot;id&quot;: 1,
&quot;meals&quot;: [ &quot;meals&quot;: [
&quot;早餐&quot;, &quot;早餐&quot;,
@ -118,8 +118,7 @@ endTime=2024-03-01
<pre><code class="text">vendors=1,2,3 // 管理端有效,业务端不用 <pre><code class="text">vendors=1,2,3 // 管理端有效,业务端不用
name=番茄鸡蛋汤 // 名称 name=番茄鸡蛋汤 // 名称
nutrient=1 // 营养计划编号 nutrient=1 // 营养计划编号
day=7 // 天数, 如果传7则标识周一~周日 day=1,3,5 // 代表周一,周三,周五
days=[1,3,5] // 天数, 代表周一,周三,周五, days和day二选一
meals=早餐,午餐,晚餐 // 餐次 meals=早餐,午餐,晚餐 // 餐次
month=1,2,3,4,5,6,7,8,9,10,11,12 // 适用月份 month=1,2,3,4,5,6,7,8,9,10,11,12 // 适用月份
crows=重体力,轻体力 //人群 crows=重体力,轻体力 //人群
@ -144,8 +143,7 @@ crows=
<pre><code class="text">id=1 // 食谱ID <pre><code class="text">id=1 // 食谱ID
name=番茄鸡蛋汤 // 名称 name=番茄鸡蛋汤 // 名称
nutrient=1 // 营养计划编号 nutrient=1 // 营养计划编号
day=7 // 天数, 如果传7则标识周一~周日 day=1,3,5 // 代表周一,周三,周五
days=[1,3,5] // 天数, 代表周一,周三,周五, days和day二选一
meals=早餐,午餐,晚餐 // 餐次 meals=早餐,午餐,晚餐 // 餐次
month=1,2,3,4,5,6,7,8,9,10,11,12 // 适用月份 month=1,2,3,4,5,6,7,8,9,10,11,12 // 适用月份
crows=重体力,轻体力 //人群 crows=重体力,轻体力 //人群

2
doc/icon.md

@ -28,4 +28,4 @@ Content-Disposition: form-data; name="extraInfo";
``` ```
# 2. 访问图片(挂在nginx目录下,不用通过api路径访问,使用前端路径访问) # 2. 访问图片(挂在nginx目录下,不用通过api路径访问,使用前端路径访问)
> GET /icon/12341234213.jpg > GET /api/icon/12341234213.jpg

10
doc/menu/menu.md

@ -16,7 +16,7 @@ id=1
"轻体力", "轻体力",
"重体力" "重体力"
], ],
"day": 1, "day": [1,3,5],
"id": 1, "id": 1,
"meals": [ "meals": [
"早餐", "早餐",
@ -78,7 +78,7 @@ endTime=2024-03-01
"轻体力", "轻体力",
"重体力" "重体力"
], ],
"day": 1, "day": [1,3,5],
"id": 1, "id": 1,
"meals": [ "meals": [
"早餐", "早餐",
@ -129,8 +129,7 @@ endTime=2024-03-01
vendors=1,2,3 // 管理端有效,业务端不用 vendors=1,2,3 // 管理端有效,业务端不用
name=番茄鸡蛋汤 // 名称 name=番茄鸡蛋汤 // 名称
nutrient=1 // 营养计划编号 nutrient=1 // 营养计划编号
day=7 // 天数, 如果传7则标识周一~周日 day=1,3,5 // 代表周一,周三,周五
days=[1,3,5] // 天数, 代表周一,周三,周五, days和day二选一
meals=早餐,午餐,晚餐 // 餐次 meals=早餐,午餐,晚餐 // 餐次
month=1,2,3,4,5,6,7,8,9,10,11,12 // 适用月份 month=1,2,3,4,5,6,7,8,9,10,11,12 // 适用月份
crows=重体力,轻体力 //人群 crows=重体力,轻体力 //人群
@ -160,8 +159,7 @@ crows=重体力,轻体力 //人群
id=1 // 食谱ID id=1 // 食谱ID
name=番茄鸡蛋汤 // 名称 name=番茄鸡蛋汤 // 名称
nutrient=1 // 营养计划编号 nutrient=1 // 营养计划编号
day=7 // 天数, 如果传7则标识周一~周日 day=1,3,5 // 代表周一,周三,周五
days=[1,3,5] // 天数, 代表周一,周三,周五, days和day二选一
meals=早餐,午餐,晚餐 // 餐次 meals=早餐,午餐,晚餐 // 餐次
month=1,2,3,4,5,6,7,8,9,10,11,12 // 适用月份 month=1,2,3,4,5,6,7,8,9,10,11,12 // 适用月份
crows=重体力,轻体力 //人群 crows=重体力,轻体力 //人群

Loading…
Cancel
Save