From c889be270bed8b6543ad40e79645968eb2653fe6 Mon Sep 17 00:00:00 2001 From: caoyiwen Date: Tue, 28 Nov 2023 14:42:10 +0800 Subject: [PATCH] fix --- .../mathvision/diet/service/DishService.java | 4 +-- .../diet/service/MenuReleaseService.java | 11 +++++-- .../diet/service/MenuReportService.java | 32 +++++++++++++++++-- .../mathvision/diet/service/MenuService.java | 4 --- .../diet/repository/MenuDishRepository.java | 1 + .../diet/repository/MenuRepository.java | 8 +---- .../diet/controller/MenuDishController.java | 6 ---- .../controller/MenuDisplayController.java | 2 +- 8 files changed, 44 insertions(+), 24 deletions(-) diff --git a/diet-core/src/main/java/com/mathvision/diet/service/DishService.java b/diet-core/src/main/java/com/mathvision/diet/service/DishService.java index 5130298..c806204 100644 --- a/diet-core/src/main/java/com/mathvision/diet/service/DishService.java +++ b/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()); diff --git a/diet-core/src/main/java/com/mathvision/diet/service/MenuReleaseService.java b/diet-core/src/main/java/com/mathvision/diet/service/MenuReleaseService.java index 46bd86b..f4a08d7 100644 --- a/diet-core/src/main/java/com/mathvision/diet/service/MenuReleaseService.java +++ b/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 list(Long vender) { - return menuRepository.findMenusNow(vender); + public List current(Long vender) { + List result = menuRepository.findCurrentMenu(vender); + return result.parallelStream().filter(x -> menuDishRepository.existsByMenuAndDay(x.getId(), (long) LocalDate.now().getDayOfWeek().getValue())).collect(Collectors.toList()); } public Page list(Long vender, String name, Date startTime, Date endTime, PageRequest pageRequest) { diff --git a/diet-core/src/main/java/com/mathvision/diet/service/MenuReportService.java b/diet-core/src/main/java/com/mathvision/diet/service/MenuReportService.java index 4fd55a6..9feaea8 100644 --- a/diet-core/src/main/java/com/mathvision/diet/service/MenuReportService.java +++ b/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 dishes) { - Nutrition nutrition = nutritionService.get(menu.getNutrient()); + Nutrition nutrition = getNutrition(menu); BigDecimal overflow = nutrition.getOverflow(); Map> itemStandard = nutrition.getIngredient().getOrDefault(crow, new HashMap<>()); Map 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 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 dayStandard = nutrition.getFoodCategoryDay(); List 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>> 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); diff --git a/diet-core/src/main/java/com/mathvision/diet/service/MenuService.java b/diet-core/src/main/java/com/mathvision/diet/service/MenuService.java index 4d9c6fa..f2d8caa 100644 --- a/diet-core/src/main/java/com/mathvision/diet/service/MenuService.java +++ b/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 list(Long vender, String name, MenuStatus status, Date startTime, Date endTime, PageRequest pageRequest) { return menuRepository.findAll(toSpecification(vender, name, status, startTime, endTime), pageRequest); } diff --git a/diet-dao/src/main/java/com/mathvision/diet/repository/MenuDishRepository.java b/diet-dao/src/main/java/com/mathvision/diet/repository/MenuDishRepository.java index eac3ff3..8773976 100644 --- a/diet-dao/src/main/java/com/mathvision/diet/repository/MenuDishRepository.java +++ b/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, JpaSpecificationExecutor { + boolean existsByMenuAndDay(Long menu, Long day); @Transactional long deleteByVender(Long vender); MenuDish findByMenuAndVenderAndDayAndDishAndMeal(Long menu, Long vender, Long day, Long dish, String meal); diff --git a/diet-dao/src/main/java/com/mathvision/diet/repository/MenuRepository.java b/diet-dao/src/main/java/com/mathvision/diet/repository/MenuRepository.java index b601a3e..2d42c43 100644 --- a/diet-dao/src/main/java/com/mathvision/diet/repository/MenuRepository.java +++ b/diet-dao/src/main/java/com/mathvision/diet/repository/MenuRepository.java @@ -21,13 +21,7 @@ public interface MenuRepository extends JpaRepository, 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 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 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 count(Collection statuses); @Query("select count(m) from Menu m where m.vender = ?1") diff --git a/diet-web/src/main/java/com/mathvision/diet/controller/MenuDishController.java b/diet-web/src/main/java/com/mathvision/diet/controller/MenuDishController.java index 16f9ed0..aefb55c 100644 --- a/diet-web/src/main/java/com/mathvision/diet/controller/MenuDishController.java +++ b/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 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()); } diff --git a/diet-web/src/main/java/com/mathvision/diet/controller/MenuDisplayController.java b/diet-web/src/main/java/com/mathvision/diet/controller/MenuDisplayController.java index fda072a..c321594 100644 --- a/diet-web/src/main/java/com/mathvision/diet/controller/MenuDisplayController.java +++ b/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()); }