修改营养周报
This commit is contained in:
@ -6,11 +6,7 @@ import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.collection.ListUtil;
|
||||
import cn.hutool.core.lang.Assert;
|
||||
import cn.hutool.core.map.MapUtil;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.core.util.*;
|
||||
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
|
||||
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
|
||||
import cn.iocoder.yudao.framework.common.exception.ServiceException;
|
||||
@ -435,7 +431,10 @@ public class MemberUserServiceImpl implements MemberUserService {
|
||||
if(CollectionUtil.isNotEmpty(moIds)){
|
||||
List<OrderDetailDO> orderDetailDOS = orderDetailService.selectListByOrderIds(moIds);
|
||||
AppNutritionDayVo appNutritionDayVo = new AppNutritionDayVo();
|
||||
Double reduce = orderDetailDOS.stream().map(OrderDetailDO::getHeat).reduce(0d, Double::sum);
|
||||
Double reduce = orderDetailDOS.stream()
|
||||
.filter(f-> ObjectUtil.isNotEmpty(f.getHeat()))
|
||||
.map(m->BigDecimal.valueOf(m.getHeat()))
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP).doubleValue();
|
||||
appNutritionDayVo.setIntake(reduce);
|
||||
appNutritionDayVo.setProposeIntake(proposeMorning);
|
||||
appNutritionDayVo.setTimePeriod("1");
|
||||
@ -445,7 +444,10 @@ public class MemberUserServiceImpl implements MemberUserService {
|
||||
if(CollectionUtil.isNotEmpty(miIds)){
|
||||
List<OrderDetailDO> orderDetailDOS = orderDetailService.selectListByOrderIds(miIds);
|
||||
AppNutritionDayVo appNutritionDayVo = new AppNutritionDayVo();
|
||||
Double reduce = orderDetailDOS.stream().map(OrderDetailDO::getHeat).reduce(0d, Double::sum);
|
||||
Double reduce = orderDetailDOS.stream()
|
||||
.filter(f-> ObjectUtil.isNotEmpty(f.getHeat()))
|
||||
.map(m->BigDecimal.valueOf(m.getHeat()))
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP).doubleValue();
|
||||
appNutritionDayVo.setIntake(reduce);
|
||||
appNutritionDayVo.setProposeIntake(proposeNoon);
|
||||
appNutritionDayVo.setTimePeriod("2");
|
||||
@ -455,7 +457,10 @@ public class MemberUserServiceImpl implements MemberUserService {
|
||||
if(CollectionUtil.isNotEmpty(niIds)){
|
||||
List<OrderDetailDO> orderDetailDOS = orderDetailService.selectListByOrderIds(niIds);
|
||||
AppNutritionDayVo appNutritionDayVo = new AppNutritionDayVo();
|
||||
Double reduce = orderDetailDOS.stream().map(OrderDetailDO::getHeat).reduce(0d, Double::sum);
|
||||
Double reduce = orderDetailDOS.stream()
|
||||
.filter(f-> ObjectUtil.isNotEmpty(f.getHeat()))
|
||||
.map(m->BigDecimal.valueOf(m.getHeat()))
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP).doubleValue();
|
||||
appNutritionDayVo.setIntake(reduce);
|
||||
appNutritionDayVo.setProposeIntake(proposeNight);
|
||||
appNutritionDayVo.setTimePeriod("3");
|
||||
@ -534,42 +539,36 @@ public class MemberUserServiceImpl implements MemberUserService {
|
||||
//获取今天购买的菜品id
|
||||
List<OrderDetailDO> orderDetailDOS = orderDetailMapper.selectList(new LambdaQueryWrapperX<OrderDetailDO>()
|
||||
.inIfPresent(OrderDetailDO::getOrderId, collect));
|
||||
Map<Long, List<OrderDetailDO>> collect2 = orderDetailDOS.stream().collect(Collectors.groupingBy(OrderDetailDO::getDishesId));
|
||||
//热量求和统计方便 科学膳食小建议
|
||||
double sum = orderDetailDOS
|
||||
.stream().filter(vo->vo!=null && vo.getHeat()!=null)
|
||||
.mapToDouble(OrderDetailDO::getHeat).sum();
|
||||
//获取菜品id
|
||||
List<Long> collect1 = orderDetailDOS.stream()
|
||||
.map(OrderDetailDO::getDishesId)
|
||||
.collect(Collectors.toList());
|
||||
//获取菜品营养信息
|
||||
List<DishesNutritionRespDTO> dishesList=new ArrayList<>();
|
||||
collect1.forEach(x-> dishesList.addAll(dishesNutritionApil.getDishesList(x)));
|
||||
//根据营养名称进行分组
|
||||
Map<String, List<DishesNutritionRespDTO>> map = dishesList.stream()
|
||||
.collect(Collectors.groupingBy(DishesNutritionRespDTO::getNutritionName));
|
||||
List<DishesNutritionRespDTO> list=new ArrayList<>();
|
||||
for (Map.Entry<String, List<DishesNutritionRespDTO>> entry : map.entrySet()) {
|
||||
DishesNutritionRespDTO dto = new DishesNutritionRespDTO();
|
||||
//计算当前菜品
|
||||
List<DishesNutritionRespDTO> value = entry.getValue();
|
||||
//当前营养的总和
|
||||
BigDecimal sum1 = value.stream()
|
||||
.map(x -> new BigDecimal(x.getNutritionNumber()))
|
||||
// 使用reduce聚合函数,实现累加器
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
|
||||
//获取菜品总量总和
|
||||
BigDecimal reduce = value.stream()
|
||||
.map(x -> new BigDecimal(x.getDishesNumber()))
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
//计算营养乘数 菜品总量/100g=营养乘数
|
||||
BigDecimal divide = reduce.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP);
|
||||
BigDecimal bigDecimal = sum1.multiply(divide).setScale(0, RoundingMode.HALF_UP);
|
||||
dto.setNutritionName(entry.getKey());
|
||||
dto.setNutritionNumber(bigDecimal.toString());
|
||||
list.add(dto);
|
||||
for (Map.Entry<Long, List<OrderDetailDO>> entry1 : collect2.entrySet()) {
|
||||
List<OrderDetailDO> value1 = entry1.getValue();
|
||||
//获取菜品id
|
||||
List<Long> collect1 = value1.stream()
|
||||
.map(OrderDetailDO::getDishesId)
|
||||
.collect(Collectors.toList());
|
||||
//获取菜品营养信息
|
||||
List<DishesNutritionRespDTO> dishesList=new ArrayList<>();
|
||||
collect1.forEach(x-> dishesList.addAll(dishesNutritionApil.getDishesList(x)));
|
||||
//根据营养名称进行分组
|
||||
if(ObjUtil.isNotEmpty(dishesList)){
|
||||
BigDecimal reduce = value1.stream()
|
||||
.map(OrderDetailDO::getWeight)
|
||||
.filter(ObjectUtil::isNotEmpty)
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
Map<String, List<DishesNutritionRespDTO>> map = dishesList.stream()
|
||||
.collect(Collectors.groupingBy(DishesNutritionRespDTO::getNutritionName));
|
||||
for (Map.Entry<String, List<DishesNutritionRespDTO>> entry : map.entrySet()) {
|
||||
DishesNutritionRespDTO dto = getDishesNutritionRespDTO(entry, reduce);
|
||||
list.add(dto);
|
||||
}
|
||||
}
|
||||
}
|
||||
list = this.groupingBy(list);
|
||||
this.computePercentage(list);
|
||||
//转map
|
||||
List<Map> maps = BeanUtil.copyToList(list, Map.class);
|
||||
@ -587,10 +586,51 @@ public class MemberUserServiceImpl implements MemberUserService {
|
||||
}
|
||||
return maps;
|
||||
}
|
||||
|
||||
private static DishesNutritionRespDTO getDishesNutritionRespDTO(Map.Entry<String, List<DishesNutritionRespDTO>> entry, BigDecimal reduce) {
|
||||
DishesNutritionRespDTO dto = new DishesNutritionRespDTO();
|
||||
//计算当前菜品
|
||||
List<DishesNutritionRespDTO> value = entry.getValue();
|
||||
//当前营养的总和
|
||||
BigDecimal sum1 = new BigDecimal(value.get(0).getNutritionNumber());
|
||||
//计算营养乘数 菜品总量/100g=营养乘数
|
||||
BigDecimal divide = reduce.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP);
|
||||
BigDecimal bigDecimal = sum1.multiply(divide).setScale(0, RoundingMode.HALF_UP);
|
||||
dto.setNutritionName(entry.getKey());
|
||||
dto.setNutritionNumber(bigDecimal.toString());
|
||||
return dto;
|
||||
}
|
||||
|
||||
/**
|
||||
* @Description: 根据营养名称进行分组计算值
|
||||
* @Author: qjq
|
||||
* @Date: 2024/4/12 下午2:44
|
||||
* @return
|
||||
*/
|
||||
public List<DishesNutritionRespDTO> groupingBy(List<DishesNutritionRespDTO> list){
|
||||
List<DishesNutritionRespDTO> list1=new ArrayList<>();
|
||||
Map<String, List<DishesNutritionRespDTO>> collect = list.stream()
|
||||
.collect(Collectors.groupingBy(DishesNutritionRespDTO::getNutritionName));
|
||||
for (Map.Entry<String, List<DishesNutritionRespDTO>> entry : collect.entrySet()) {
|
||||
DishesNutritionRespDTO dto=new DishesNutritionRespDTO();
|
||||
BigDecimal reduce = entry.getValue()
|
||||
.stream()
|
||||
.filter(f -> ObjectUtil.isNotEmpty(f.getNutritionNumber()))
|
||||
.map(m -> new BigDecimal(m.getNutritionNumber()))
|
||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||
String key = entry.getKey();
|
||||
dto.setNutritionName(key);
|
||||
dto.setNutritionNumber(reduce.setScale(0, RoundingMode.HALF_UP).toString());
|
||||
list1.add(dto);
|
||||
}
|
||||
return list1;
|
||||
}
|
||||
public void computePercentage(List<DishesNutritionRespDTO> list){
|
||||
//获取所有营养数量
|
||||
double sum1 = list.stream().mapToDouble(m -> Double.parseDouble(m.getNutritionNumber())).sum();
|
||||
BigDecimal sum= BigDecimal.valueOf(sum1);
|
||||
BigDecimal sum = list.stream()
|
||||
.filter(f-> ObjectUtil.isNotEmpty(f.getNutritionNumber()))
|
||||
.map(m-> new BigDecimal(m.getNutritionNumber()))
|
||||
.reduce(BigDecimal.ZERO,BigDecimal::add);
|
||||
BigDecimal bigDecimal = new BigDecimal(0);
|
||||
for (int i = 0; i < list.size(); i++) {
|
||||
if(i < (list.size()-1)){
|
||||
|
Reference in New Issue
Block a user