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 334ae7c..4fd55a6 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 @@ -11,6 +11,7 @@ import com.mathvision.diet.domian.RuleItemDTO; import com.mathvision.diet.entity.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Triple; import org.springframework.stereotype.Service; @@ -243,6 +244,38 @@ public class MenuReportService { return result; } + public JSONObject sugar(String crow, List dishes) { + 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)); + Map salt = dishes.stream().collect(Collectors.groupingBy(MenuDish::getDay)).entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, + entry -> entry.getValue().stream().flatMap(dish -> dish.getIngredient().stream().filter(item -> item.getValue().containsKey(crow) && item.getValue().get(crow).doubleValue() > 0 && ingredientMap.containsKey(item.getKey()))) + .flatMap(x -> ingredientMap.get(x.getKey()).getNutrient().entrySet().stream().map(n -> Pair.of(n.getKey(), n.getValue().multiply(x.getValue().get(crow)).divide(new BigDecimal(100), RoundingMode.HALF_UP)))) + .filter(x -> StringUtils.equalsIgnoreCase("sodium", x.getKey())) + .map(x -> x.getValue().multiply(new BigDecimal("0.0025"))) + .reduce(BigDecimal :: add) + .orElse(BigDecimal.ZERO))); + + Map sugar = dishes.stream().collect(Collectors.groupingBy(MenuDish::getDay)).entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, + entry -> entry.getValue().stream().flatMap(dish -> dish.getIngredient().stream().filter(item -> item.getValue().containsKey(crow) && item.getValue().get(crow).doubleValue() > 0 && ingredientMap.containsKey(item.getKey())) + .map(x -> Pair.of(ingredientMap.get(x.getKey()), x.getValue())) + .filter(x -> StringUtils.equals("糖类", x.getKey().getType())) + .map(x -> x.getValue().values().stream().reduce(BigDecimal::add).orElse(BigDecimal.ZERO)) + ).reduce(BigDecimal::add).orElse(BigDecimal.ZERO))); + + Map oil = dishes.stream().collect(Collectors.groupingBy(MenuDish::getDay)).entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, + entry -> entry.getValue().stream().flatMap(dish -> dish.getIngredient().stream().filter(item -> item.getValue().containsKey(crow) && item.getValue().get(crow).doubleValue() > 0 && ingredientMap.containsKey(item.getKey())) + .map(x -> Pair.of(ingredientMap.get(x.getKey()), x.getValue())) + .filter(x -> StringUtils.equals("烹调油", x.getKey().getType())) + .map(x -> x.getValue().values().stream().reduce(BigDecimal::add).orElse(BigDecimal.ZERO)) + ).reduce(BigDecimal::add).orElse(BigDecimal.ZERO))); + + JSONObject result = new JSONObject(); + result.put("crow", crow); + result.put("salt", salt); + result.put("sugar", sugar); + result.put("oil", oil); + return result; + } + private JSONObject toEnergyContent(BigDecimal total, String key, BigDecimal value, Range standard) { BigDecimal percentage = total.intValue() == 0 ? BigDecimal.ZERO : value.divide(total, 4, RoundingMode.HALF_UP).multiply(new BigDecimal(100)); percentage = percentage.setScale(2, RoundingMode.HALF_UP); diff --git a/diet-web/src/main/java/com/mathvision/diet/controller/MenuReportController.java b/diet-web/src/main/java/com/mathvision/diet/controller/MenuReportController.java index ac355bf..22ea83b 100644 --- a/diet-web/src/main/java/com/mathvision/diet/controller/MenuReportController.java +++ b/diet-web/src/main/java/com/mathvision/diet/controller/MenuReportController.java @@ -69,6 +69,15 @@ public class MenuReportController extends BaseController { return menuReportService.energy(day, crow, dishes); } + @ResponseBody + @RequestMapping(value = "sugar", method = RequestMethod.GET) + public JSONObject sugar(@RequestParam Long id, @RequestParam(required = false) String crow) { + Menu menu = checkAndGetMenu(id); + crow = checkAndGetCrow(crow, menu.getCrows()); + List dishes = menuDishService.query(id, menu.getVender()); + return menuReportService.sugar(crow, dishes); + } + private Menu checkAndGetMenu(Long id) { Menu menu = isAdmin() ? menuService.get(id) : menuService.get(id, getVender()); Assert.notNull(menu, "[参数错误]食谱不存在!"); diff --git a/diet-web/src/main/resources/static/menu/report.html b/diet-web/src/main/resources/static/menu/report.html index 508fbff..d5cdc5b 100644 --- a/diet-web/src/main/resources/static/menu/report.html +++ b/diet-web/src/main/resources/static/menu/report.html @@ -254,4 +254,37 @@ crow=xxx // "success": true } +

4. ⿷ʽ

+
+

GET /api/menu/analysis/sugar

+
+

:

+
id=1      // ʳID, 
+crow=xxx  //Ⱥ,ĬϵһȺ
+
+

:

+
{
+  "body": {
+    "crow": "6~8 Ů",
+    "salt": { // 
+      "1": 10,
+      "2": 20,
+      "3": 15
+    },
+    "oil": { // 
+      "1": 10,
+      "2": 20,
+      "3": 15
+    },
+    "sugar": { // 
+      "1": 10,
+      "2": 20,
+      "3": 15
+    },
+  },
+  "code": 200,
+  "desc": "ɹ",
+  "success": true
+}
+
diff --git a/doc/menu/report.md b/doc/menu/report.md index b138dc3..64ffd9d 100644 --- a/doc/menu/report.md +++ b/doc/menu/report.md @@ -270,4 +270,41 @@ crow=xxx // "desc": "ɹ", "success": true } -~~~ \ No newline at end of file +~~~ + +# 4. ⿷ʽ + +> GET /api/menu/analysis/sugar + +### : +```text +id=1 // ʳID, +crow=xxx //Ⱥ,ĬϵһȺ +``` + +### : +~~~json +{ + "body": { + "crow": "6~8 Ů", + "salt": { // + "1": 10, + "2": 20, + "3": 15 + }, + "oil": { // + "1": 10, + "2": 20, + "3": 15 + }, + "sugar": { // + "1": 10, + "2": 20, + "3": 15 + }, + }, + "code": 200, + "desc": "ɹ", + "success": true +} +~~~