caoyiwen 2 years ago
parent
commit
c889be270b
  1. 4
      diet-core/src/main/java/com/mathvision/diet/service/DishService.java
  2. 11
      diet-core/src/main/java/com/mathvision/diet/service/MenuReleaseService.java
  3. 32
      diet-core/src/main/java/com/mathvision/diet/service/MenuReportService.java
  4. 4
      diet-core/src/main/java/com/mathvision/diet/service/MenuService.java
  5. 1
      diet-dao/src/main/java/com/mathvision/diet/repository/MenuDishRepository.java
  6. 8
      diet-dao/src/main/java/com/mathvision/diet/repository/MenuRepository.java
  7. 6
      diet-web/src/main/java/com/mathvision/diet/controller/MenuDishController.java
  8. 2
      diet-web/src/main/java/com/mathvision/diet/controller/MenuDisplayController.java

4
diet-core/src/main/java/com/mathvision/diet/service/DishService.java

@ -150,9 +150,9 @@ public class DishService {
}
if (StringUtils.endsWithIgnoreCase(r.getKey(), "sodium")) {
return ComponentAnalysisDO.builder().key(r.getKey()).name(foodNutrient.getValue() + "/食盐").nutrition(String.format("%.2f(%s)/%.2f(g)", r.getValue().floatValue(), foodNutrient.getMeasurement(), r.getValue().multiply(new BigDecimal("0.0025")).floatValue())).nvr(foodNutrient.getNrv() == null || foodNutrient.getNrv().floatValue() == 0 ? "-" : String.format("%.2f%%", r.getValue().divide(foodNutrient.getNrv(), RoundingMode.HALF_UP))).build();
return ComponentAnalysisDO.builder().key(r.getKey()).name(foodNutrient.getValue() + "/食盐").nutrition(String.format("%.1f(%s)/%.2f(g)", r.getValue().floatValue(), foodNutrient.getMeasurement(), r.getValue().multiply(new BigDecimal("0.0025")).floatValue())).nvr(foodNutrient.getNrv() == null || foodNutrient.getNrv().floatValue() == 0 ? "-" : String.format("%.2f%%", r.getValue().divide(foodNutrient.getNrv(), RoundingMode.HALF_UP).multiply(new BigDecimal(100)))).build();
} else {
return ComponentAnalysisDO.builder().key(r.getKey()).name(foodNutrient.getValue()).nutrition(String.format("%.2f(%s)", r.getValue().floatValue(), foodNutrient.getMeasurement())).nvr(foodNutrient.getNrv() == null || foodNutrient.getNrv().floatValue() == 0 ? "-" : String.format("%.2f%%", r.getValue().divide(foodNutrient.getNrv(), RoundingMode.HALF_UP))).build();
return ComponentAnalysisDO.builder().key(r.getKey()).name(foodNutrient.getValue()).nutrition(String.format("%.2f(%s)", r.getValue().floatValue(), foodNutrient.getMeasurement())).nvr(foodNutrient.getNrv() == null || foodNutrient.getNrv().floatValue() == 0 ? "-" : String.format("%.2f%%", r.getValue().divide(foodNutrient.getNrv(), RoundingMode.HALF_UP).multiply(new BigDecimal(100)))).build();
}
}).collect(Collectors.toList());

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

@ -2,6 +2,7 @@ package com.mathvision.diet.service;
import com.mathvision.diet.domian.MenuStatus;
import com.mathvision.diet.entity.Menu;
import com.mathvision.diet.repository.MenuDishRepository;
import com.mathvision.diet.repository.MenuRepository;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@ -14,17 +15,22 @@ import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.persistence.criteria.Predicate;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
@Service
public class MenuReleaseService {
@Resource
private MenuRepository menuRepository;
@Resource
private MenuDishRepository menuDishRepository;
@PostConstruct
@Scheduled(cron = "0 0 0/6 * * *")
@ -42,8 +48,9 @@ public class MenuReleaseService {
log.info("[MenuReleaseService] cancel id = " + id + ", operator = " + operator);
}
public List<Menu> list(Long vender) {
return menuRepository.findMenusNow(vender);
public List<Menu> current(Long vender) {
List<Menu> result = menuRepository.findCurrentMenu(vender);
return result.parallelStream().filter(x -> menuDishRepository.existsByMenuAndDay(x.getId(), (long) LocalDate.now().getDayOfWeek().getValue())).collect(Collectors.toList());
}
public Page<Menu> list(Long vender, String name, Date startTime, Date endTime, PageRequest pageRequest) {

32
diet-core/src/main/java/com/mathvision/diet/service/MenuReportService.java

@ -5,6 +5,7 @@ import com.alibaba.fastjson2.JSONObject;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Range;
import com.mathvision.diet.domian.MealType;
import com.mathvision.diet.domian.MeasurementType;
import com.mathvision.diet.domian.MenuDishItemDTO;
import com.mathvision.diet.domian.RuleItemDTO;
@ -36,8 +37,11 @@ public class MenuReportService {
@Resource
IngredientService ingredientService;
@Resource
VenderService venderService;
public JSONObject nutrition(Menu menu, long day, String crow, List<MenuDish> dishes) {
Nutrition nutrition = nutritionService.get(menu.getNutrient());
Nutrition nutrition = getNutrition(menu);
BigDecimal overflow = nutrition.getOverflow();
Map<String, Map<String, BigDecimal>> itemStandard = nutrition.getIngredient().getOrDefault(crow, new HashMap<>());
Map<String, Ingredient> ingredientMap = ingredientService.getFullByKeys(dishes.stream().filter(x -> CollectionUtils.isNotEmpty(x.getIngredient())).flatMap(x -> x.getIngredient().stream().map(MenuDishItemDTO::getKey)).collect(Collectors.toSet())).stream().collect(Collectors.toMap(Ingredient::getKey, v -> v));
@ -148,7 +152,7 @@ public class MenuReportService {
public JSONObject types(Menu menu, String crow, List<MenuDish> dishes) {
dishes = dishes.stream().filter(menuDish -> menuDish.getIngredient().stream().anyMatch(item -> item.getValue().containsKey(crow))).collect(Collectors.toList());
Nutrition nutrition = nutritionService.get(menu.getNutrient());
Nutrition nutrition = getNutrition(menu);
List<RuleItemDTO> dayStandard = nutrition.getFoodCategoryDay();
List<RuleItemDTO> weekStandard = nutrition.getFoodCategoryWeek();
@ -287,6 +291,30 @@ public class MenuReportService {
return result;
}
private Nutrition getNutrition(Menu menu) {
Nutrition nutrition = nutritionService.get(menu.getNutrient());
if (CollectionUtils.isNotEmpty(menu.getMeals())) {
if (MealType.values().length > menu.getMeals().size()) {
VenderConfig config = venderService.queryConfig(menu.getVender());
BigDecimal scale = menu.getMeals().stream().map(MealType::toType).distinct().map(x -> {
switch (x) {
case breakfast: return config.getBreakfast();
case lunch: return config.getLunch();
case dinner: return config.getDinner();
default: return BigDecimal.ZERO;
}
}).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
if (scale.intValue() < 100) {
Map<String, Map<String, Map<String, BigDecimal>>> ingredient = nutrition.getIngredient();
ingredient.forEach((crow, value) -> value.forEach((nutrient, items) -> items.forEach((k, v) -> ingredient.get(crow).get(nutrient).put(k, v.multiply(scale).divide(new BigDecimal(100), 2, RoundingMode.HALF_UP)))));
nutrition.setIngredient(ingredient);
}
}
}
return nutrition;
}
private static BigDecimal calculatePercentage(BigDecimal value, BigDecimal base) {
BigDecimal percentage = value.subtract(base).divide(base, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100));
return percentage.setScale(2, RoundingMode.HALF_UP);

4
diet-core/src/main/java/com/mathvision/diet/service/MenuService.java

@ -81,10 +81,6 @@ public class MenuService {
return menuRepository.findByNutrient(nutrition);
}
public Long current(Long vender) {
return menuRepository.findCurrentMenu(vender, MenuStatus.publish.getCode());
}
public Page<Menu> list(Long vender, String name, MenuStatus status, Date startTime, Date endTime, PageRequest pageRequest) {
return menuRepository.findAll(toSpecification(vender, name, status, startTime, endTime), pageRequest);
}

1
diet-dao/src/main/java/com/mathvision/diet/repository/MenuDishRepository.java

@ -9,6 +9,7 @@ import java.util.Collection;
import java.util.List;
public interface MenuDishRepository extends JpaRepository<MenuDish, Long>, JpaSpecificationExecutor<MenuDish> {
boolean existsByMenuAndDay(Long menu, Long day);
@Transactional
long deleteByVender(Long vender);
MenuDish findByMenuAndVenderAndDayAndDishAndMeal(Long menu, Long vender, Long day, Long dish, String meal);

8
diet-dao/src/main/java/com/mathvision/diet/repository/MenuRepository.java

@ -21,13 +21,7 @@ public interface MenuRepository extends JpaRepository<Menu, Long>, JpaSpecificat
@Query(value = "select new Menu(m.id, m.name) from Menu m " +
"where m.vender = ?1 and m.status = 5 and now() between m.startTime and m.endTime")
List<Menu> findMenusNow(Long vender);
@Query(value = "select m.id from menu m " +
"where m.vender = ?1 and m.status = ?2 and (WEEKDAY(NOW()) + 1) <= m.day and now() between m.start_time and m.end_time " +
"order by m.id DESC " +
"limit 1", nativeQuery = true)
Long findCurrentMenu(Long vender, int status);
List<Menu> findCurrentMenu(Long vender);
@Query("select new com.mathvision.diet.domian.MenuCountDTO(m.status, count(m)) from Menu m where m.status in ?1 group by m.status")
List<MenuCountDTO> count(Collection<MenuStatus> statuses);
@Query("select count(m) from Menu m where m.vender = ?1")

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

@ -18,7 +18,6 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.time.Instant;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
@ -121,11 +120,6 @@ public class MenuDishController extends BaseController {
@ResponseBody
@RequestMapping(method = RequestMethod.GET)
public List<MenuDish> query(@RequestParam(required = false) Long menuId) {
//TODO 清理代码
if (menuId == null) {
Long currentMenuId = menuService.current(getVender());
return menuDishService.query(currentMenuId, getVender(), (long) LocalDate.now().getDayOfWeek().getValue());
}
return isAdmin() ? menuDishService.query(menuId) : menuDishService.query(menuId, getVender());
}

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

@ -24,7 +24,7 @@ public class MenuDisplayController extends BaseController {
public Object query(@RequestParam(required = false) Long menuId) {
Assert.isTrue(!isAdmin(), "[参数错误] 非管理端操作!");
if (menuId == null) {
return menuReleaseService.list(getVender());
return menuReleaseService.current(getVender());
}
return menuDishService.query(menuId, getVender(), (long) LocalDate.now().getDayOfWeek().getValue());
}

Loading…
Cancel
Save