diff --git a/stdiet-common/src/main/java/com/stdiet/common/utils/HealthyUtils.java b/stdiet-common/src/main/java/com/stdiet/common/utils/HealthyUtils.java index e9e07cf79..baff6a9a5 100644 --- a/stdiet-common/src/main/java/com/stdiet/common/utils/HealthyUtils.java +++ b/stdiet-common/src/main/java/com/stdiet/common/utils/HealthyUtils.java @@ -2,10 +2,22 @@ package com.stdiet.common.utils; public class HealthyUtils { - public static final double maxHeatEveryDayLess = 250.0; + public static final long maxHeatEveryDayLess = 250; + + //每克蛋白质对应热量(千卡) + public static final int proteinHeat = 4; + + //每克脂肪对应热量(千卡) + public static final int fatHeat = 9; + + //每克碳水对应热量(千卡) + public static final int carbonWaterHeat = 4; + + //营养成分比例 + public static final Integer[] nutritionRate = {30, 20, 50}; /** - * 计算每天最大摄入量 + * 计算减脂每天最大摄入量(千卡) * @param age 年龄 * @param tall 身高 * @param weight 体重 @@ -15,6 +27,119 @@ public class HealthyUtils { age = age == null ? 0 : age; tall = tall == null ? 0 : tall; weight = weight == null ? 0.0 : weight; - return Math.round(655+(9.5*weight/2)+(1.8*tall)-(4.7*age) - maxHeatEveryDayLess); + return calculateMetabolizeHeat(age, tall, weight) - maxHeatEveryDayLess; } + + /** + * 计算基础代谢BMR(千卡) + * @param age + * @param tall + * @param weight + * @return + */ + public static Long calculateMetabolizeHeat(Integer age, Integer tall, Double weight){ + return Math.round(655+(9.5*weight/2)+(1.8*tall)-(4.7*age)); + } + + /** + * 计算每公斤体重占比(千卡/公斤) + * @param metabolizeHeat 基础代谢BMR(千卡) + * @param weight 体重(斤) + * @return + */ + public static double calculateHeatRateByWeight(long metabolizeHeat, double weight){ + return NumberUtils.getNumberByRoundHalfUp(metabolizeHeat/weight*2, 2).doubleValue(); + } + + /** + * 计算每公斤体重占比目标范围 + * @param heatRateByWeight 每公斤体重占比(千卡/公斤) + * @return + */ + public static double[] calculateHeatTargetRate(double heatRateByWeight){ + double[] heatArray = new double[2]; + heatArray[0] = heatRateByWeight - 10; + heatArray[1] = heatRateByWeight - 5; + return heatArray; + } + + /** + * 计算减脂热量控制范围(千卡) + * @param heatTargetRateArray 每公斤体重占比目标范围 + * @param fatRateWeight 每公斤体重脂肪占比(克/公斤) + * @return + */ + public static long[] calculateStandardHeatScopeRate(double[] heatTargetRateArray, double fatRateWeight){ + long[] heatArray = new long[2]; + heatArray[0] = Math.round(heatTargetRateArray[0] * fatRateWeight / 2); + heatArray[1] = Math.round(heatTargetRateArray[1] * fatRateWeight / 2); + return heatArray; + } + + + /** + * 根据蛋白质、脂肪、碳水质量计算热量 + * @param proteinQuality 蛋白质质量(克) + * @param fatQuality 脂肪质量(克) + * @param carbonWaterQuality 碳水质量(克) + * @return + */ + public static int calculateTotalHeatByProteinFatCarbonWater(Integer proteinQuality, Integer fatQuality, Integer carbonWaterQuality){ + return calculateHeatByProteinQuality(proteinQuality) + calculateHeatByFatQuality(fatQuality) + calculateHeatByCarbonWaterQuality(carbonWaterQuality); + } + + /** + * 根据蛋白质质量计算热量 + * @return + */ + public static int calculateHeatByProteinQuality(Integer proteinQuality){ + proteinQuality = proteinQuality == null ? 0 : proteinQuality; + return proteinQuality * proteinHeat; + } + + /** + * 根据脂肪质量计算热量 + * @return + */ + public static int calculateHeatByFatQuality(Integer fatQuality){ + fatQuality = fatQuality == null ? 0 : fatQuality; + return fatQuality * fatHeat; + } + + /** + * 根据碳水质量计算热量 + * @return + */ + public static int calculateHeatByCarbonWaterQuality(Integer carbonWaterQuality){ + carbonWaterQuality = carbonWaterQuality == null ? 0 : carbonWaterQuality; + return carbonWaterQuality * carbonWaterHeat; + } + + /** + * 根据身高计算标准体重 + * @param tall 身高(厘米) + * @return + */ + public static double calculateStandardWeight(int tall){ + return (tall-107.5)*2; + } + + /** + * 返回蛋白质、脂肪、碳水对应热量、质量 + * @param metabolizeHeat + * @return + */ + public static Integer[][] calculateNutritionHeatAndQuality(int metabolizeHeat){ + Integer[] heatArray = new Integer[3]; + Integer[] qualityArray = new Integer[3]; + heatArray[0] = Math.round(nutritionRate[0] * metabolizeHeat /100); + heatArray[1] = Math.round(nutritionRate[1] * metabolizeHeat /100); + heatArray[2] = Math.round(nutritionRate[2] * metabolizeHeat /100); + qualityArray[0] = (int)Math.round(Double.parseDouble(heatArray[0]+"")/proteinHeat); + qualityArray[1] = (int)Math.round(Double.parseDouble(heatArray[1]+"")/fatHeat); + qualityArray[2] = (int)Math.round(Double.parseDouble(heatArray[2]+"")/carbonWaterHeat); + Integer[][] result = {heatArray, qualityArray}; + return result; + } + } diff --git a/stdiet-common/src/main/java/com/stdiet/common/utils/NumberUtils.java b/stdiet-common/src/main/java/com/stdiet/common/utils/NumberUtils.java new file mode 100644 index 000000000..e89ec6e59 --- /dev/null +++ b/stdiet-common/src/main/java/com/stdiet/common/utils/NumberUtils.java @@ -0,0 +1,17 @@ +package com.stdiet.common.utils; + +import java.math.BigDecimal; + +public class NumberUtils { + + /** + * 对double数字进行四舍五入,返回BigDecimal + * @param number 数字 + * @param decimalPlaces 保留的小数点位数 + * @return + */ + public static BigDecimal getNumberByRoundHalfUp(double number, int decimalPlaces){ + return BigDecimal.valueOf(number).setScale(decimalPlaces, BigDecimal.ROUND_HALF_UP); + } + +} diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysCustomerHeatStatistics.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysCustomerHeatStatistics.java index 003594e16..1827dfbf6 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysCustomerHeatStatistics.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysCustomerHeatStatistics.java @@ -52,6 +52,15 @@ public class SysCustomerHeatStatistics extends BaseEntity //食材热量 private Integer[] foodHeatList; + //食材蛋白质质量 + private Integer[] proteinQualityList; + + //食材脂肪质量 + private Integer[] fatQualityList; + + //食材碳水质量 + private Integer[] carbonWaterQualityList; + //具体食材集合 private List foodHeatStatisticsList; } \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysFoodHeatStatistics.java b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysFoodHeatStatistics.java index 4865b2317..973fb208f 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysFoodHeatStatistics.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/domain/SysFoodHeatStatistics.java @@ -44,6 +44,18 @@ public class SysFoodHeatStatistics extends BaseEntity @Excel(name = "类型,0早 1中 2晚") private Integer edibleType; + /** 蛋白质质量,克 */ + @Excel(name = "蛋白质质量,克") + private Integer proteinQuality; + + /** 脂肪质量,克 */ + @Excel(name = "脂肪质量,克") + private Integer fatQuality; + + /** 碳水质量,克 */ + @Excel(name = "碳水质量,克") + private Integer carbonWaterQuality; + /** 热量数值 */ @Excel(name = "热量数值") private Integer heatValue; diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/dto/response/NutritionalCalories.java b/stdiet-custom/src/main/java/com/stdiet/custom/dto/response/NutritionalCalories.java new file mode 100644 index 000000000..958e4e733 --- /dev/null +++ b/stdiet-custom/src/main/java/com/stdiet/custom/dto/response/NutritionalCalories.java @@ -0,0 +1,72 @@ +package com.stdiet.custom.dto.response; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class NutritionalCalories implements Serializable { + + private static final long serialVersionUID = 1L; + + //姓名 + public String name; + + //实际体重(斤) + public double weight; + + //实际身高(厘米) + public int tall; + + //年龄 + public int age; + + //标准体重(斤) + public double standardWeight; + + //超重(斤) + public double overWeight; + + //活动因子 + public double activityFactor; + + //基础代谢BMR(千卡) + public int metabolizeHeat; + + //减脂最大摄入量(千卡) + public int maxIntakeHeat; + + //不运动总热量(千卡) + public int withoutExerciseHeat; + + //运动总热量(千卡) + public int exerciseHeat; + + //每公斤体重占比(千卡/公斤) + public double everyWeightHeat; + + //目标范围(千卡/公斤) + public double[] targetEveryWeightHeat; + + //减脂热量标准范围(千卡/公斤) + public double[] standardEveryWeightHeat; + + //蛋白质、脂肪、碳水比例 + public Integer[] nutritionalRate; + + //蛋白质、脂肪、碳水对应热量(千卡) + public Integer[] nutritionalHeat; + + //蛋白质、脂肪、碳水对应质量(克) + public Integer[] nutritionalQuality; + + //每公斤体重对应蛋白质、脂肪、碳水占比(克/公斤) + public double[] weightNutritionalRate; + + //蛋白质、脂肪、碳水已摄入热量(千卡) + public Integer[] ingestedNutritionalHeat; + + //蛋白质、脂肪、碳水剩余可摄入热量 + public Integer[] surplusNutritionalHeat; + +} diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysCustomerHeatStatisticsMapper.java b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysCustomerHeatStatisticsMapper.java index a47ff33eb..336cd42dc 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysCustomerHeatStatisticsMapper.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/mapper/SysCustomerHeatStatisticsMapper.java @@ -1,7 +1,10 @@ package com.stdiet.custom.mapper; import java.util.List; + +import com.stdiet.custom.domain.SysCustomer; import com.stdiet.custom.domain.SysCustomerHeatStatistics; +import com.stdiet.custom.dto.response.NutritionalCalories; /** * 外食热量统计Mapper接口 diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysCustomerHeatStatisticsService.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysCustomerHeatStatisticsService.java index 007d85668..207a6b730 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysCustomerHeatStatisticsService.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/ISysCustomerHeatStatisticsService.java @@ -2,6 +2,7 @@ package com.stdiet.custom.service; import java.util.List; import com.stdiet.custom.domain.SysCustomerHeatStatistics; +import com.stdiet.custom.dto.response.NutritionalCalories; /** * 外食热量统计Service接口 @@ -65,4 +66,18 @@ public interface ISysCustomerHeatStatisticsService * @return */ public int calculateCustomerHeat(SysCustomerHeatStatistics sysCustomerHeatStatistics); + + /** + * 根据日期查询是否客户热量统计 + * @param sysCustomerHeatStatistics + * @return + */ + SysCustomerHeatStatistics getCustomerHeatStatisticsByDate(SysCustomerHeatStatistics sysCustomerHeatStatistics); + + /** + * 根据客户热量食材统计ID查询详情 + * @param id + * @return + */ + public NutritionalCalories getNutritionalCaloriesByCustomer(Long id); } \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysCustomerHeatStatisticsServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysCustomerHeatStatisticsServiceImpl.java index 3d26ebcd4..a0428ffec 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysCustomerHeatStatisticsServiceImpl.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysCustomerHeatStatisticsServiceImpl.java @@ -1,14 +1,16 @@ package com.stdiet.custom.service.impl; +import java.math.BigDecimal; import java.util.List; import com.stdiet.common.utils.DateUtils; import com.stdiet.common.utils.HealthyUtils; import com.stdiet.custom.domain.SysCustomerHealthy; import com.stdiet.custom.domain.SysCustomerPhysicalSigns; import com.stdiet.custom.domain.SysFoodHeatStatistics; -import com.stdiet.custom.mapper.SysFoodHeatStatisticsMapper; +import com.stdiet.custom.dto.response.NutritionalCalories; import com.stdiet.custom.service.ISysCustomerHealthyService; import com.stdiet.custom.service.ISysCustomerPhysicalSignsService; +import com.stdiet.custom.service.ISysFoodHeatStatisticsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.stdiet.custom.mapper.SysCustomerHeatStatisticsMapper; @@ -30,7 +32,7 @@ public class SysCustomerHeatStatisticsServiceImpl implements ISysCustomerHeatSta private SysCustomerHeatStatisticsMapper sysCustomerHeatStatisticsMapper; @Autowired - private SysFoodHeatStatisticsMapper sysFoodHeatStatisticsMapper; + private ISysFoodHeatStatisticsService sysFoodHeatStatisticsService; @Autowired private ISysCustomerPhysicalSignsService sysCustomerPhysicalSignsService; @@ -112,6 +114,15 @@ public class SysCustomerHeatStatisticsServiceImpl implements ISysCustomerHeatSta return sysCustomerHeatStatisticsMapper.deleteSysCustomerHeatStatisticsById(id); } + /** + * 根据日期查询是否客户热量统计 + * @param sysCustomerHeatStatistics + * @return + */ + public SysCustomerHeatStatistics getCustomerHeatStatisticsByDate(SysCustomerHeatStatistics sysCustomerHeatStatistics){ + return sysCustomerHeatStatisticsMapper.getCustomerHeatStatisticsByDate(sysCustomerHeatStatistics); + } + /** * 更新食材热量并计算当天总热量 * @param sysCustomerHeatStatistics @@ -121,34 +132,81 @@ public class SysCustomerHeatStatisticsServiceImpl implements ISysCustomerHeatSta public int calculateCustomerHeat(SysCustomerHeatStatistics sysCustomerHeatStatistics){ Long[] foodHeatId = sysCustomerHeatStatistics.getFoodHeatIdList(); Integer[] foodHeat = sysCustomerHeatStatistics.getFoodHeatList(); - if(foodHeatId != null && foodHeatId.length > 0 && foodHeat != null && foodHeat.length == foodHeatId.length){ + if(foodHeatId != null && foodHeatId.length > 0){ SysFoodHeatStatistics sysFoodHeatStatistics = new SysFoodHeatStatistics(); int totalHeatCalue = 0; for (int i = 0; i < foodHeatId.length; i++) { sysFoodHeatStatistics.setId(foodHeatId[i]); - sysFoodHeatStatistics.setHeatValue(foodHeat[i]); - sysFoodHeatStatisticsMapper.updateSysFoodHeatStatistics(sysFoodHeatStatistics); - totalHeatCalue += foodHeat[i]; + sysFoodHeatStatistics.setProteinQuality(sysCustomerHeatStatistics.getProteinQualityList()[i]); + sysFoodHeatStatistics.setFatQuality(sysCustomerHeatStatistics.getFatQualityList()[i]); + sysFoodHeatStatistics.setCarbonWaterQuality(sysCustomerHeatStatistics.getCarbonWaterQualityList()[i]); + //根据蛋白质、脂肪、碳水计算热量 + sysFoodHeatStatistics.setHeatValue(HealthyUtils.calculateTotalHeatByProteinFatCarbonWater(sysCustomerHeatStatistics.getProteinQualityList()[i], + sysCustomerHeatStatistics.getFatQualityList()[i], sysCustomerHeatStatistics.getCarbonWaterQualityList()[i])); + sysFoodHeatStatisticsService.updateSysFoodHeatStatistics(sysFoodHeatStatistics); + totalHeatCalue += sysFoodHeatStatistics.getHeatValue(); } sysCustomerHeatStatistics.setHeatValue(totalHeatCalue); - Long maxHeatValue = getMaxHeatValue(sysCustomerHeatStatistics.getCustomerId()); - sysCustomerHeatStatistics.setMaxHeatValue(maxHeatValue.intValue()); - sysCustomerHeatStatistics.setHeatGap(maxHeatValue.intValue() - totalHeatCalue); + sysCustomerHeatStatistics.setHeatGap(sysCustomerHeatStatistics.getMaxHeatValue() - totalHeatCalue); return sysCustomerHeatStatisticsMapper.updateSysCustomerHeatStatistics(sysCustomerHeatStatistics); } return 0; } - public long getMaxHeatValue(Long customerId){ + /** + * 根据客户热量食材统计ID查询详情 + * @param id + * @return + */ + public NutritionalCalories getNutritionalCaloriesByCustomer(Long id){ + NutritionalCalories nutritionalCalories = new NutritionalCalories(); + SysCustomerHeatStatistics sysCustomerHeatStatistics = sysCustomerHeatStatisticsMapper.selectSysCustomerHeatStatisticsById(id); + if(sysCustomerHeatStatistics != null){ + SysCustomerHealthy sysCustomerHealthy = getSysCustomerHealthy(sysCustomerHeatStatistics.getCustomerId()); + if(sysCustomerHealthy != null){ + nutritionalCalories.setName(sysCustomerHealthy.getName()); + nutritionalCalories.setAge(sysCustomerHealthy.getAge().intValue()); + nutritionalCalories.setTall(sysCustomerHealthy.getTall()); + nutritionalCalories.setWeight(sysCustomerHealthy.getWeight().doubleValue()); + nutritionalCalories.setStandardWeight(HealthyUtils.calculateStandardWeight(nutritionalCalories.getTall())); + double overHeight = nutritionalCalories.getWeight() - nutritionalCalories.getStandardWeight(); + overHeight = overHeight > 0 ? overHeight : 0; + nutritionalCalories.setOverWeight(overHeight); + nutritionalCalories.setMetabolizeHeat(HealthyUtils.calculateMetabolizeHeat(nutritionalCalories.getAge(), nutritionalCalories.getTall(), nutritionalCalories.getWeight()).intValue()); + nutritionalCalories.setMaxIntakeHeat(sysCustomerHeatStatistics.getMaxHeatValue()); + nutritionalCalories.setEveryWeightHeat(HealthyUtils.calculateHeatRateByWeight(nutritionalCalories.getMetabolizeHeat(), nutritionalCalories.getWeight())); + nutritionalCalories.setTargetEveryWeightHeat(HealthyUtils.calculateHeatTargetRate(nutritionalCalories.getEveryWeightHeat())); + //nutritionalCalories.setStandardEveryWeightHeat(HealthyUtils.calculateHeatTargetRate() ); + nutritionalCalories.setNutritionalRate(HealthyUtils.nutritionRate); + Integer[][] nutritionalHeatAndQuality = HealthyUtils.calculateNutritionHeatAndQuality(nutritionalCalories.getMetabolizeHeat()); + nutritionalCalories.setNutritionalHeat(nutritionalHeatAndQuality[0]); + nutritionalCalories.setNutritionalQuality(nutritionalHeatAndQuality[1]); + } + } + return nutritionalCalories; + } + + /** + * 根据用户ID查询该用户每天最大摄入量 + * @param customerId + * @return + */ + private SysCustomerHealthy getSysCustomerHealthy(Long customerId){ SysCustomerHealthy sysCustomerHealthy = sysCustomerHealthyService.selectSysCustomerHealthyByCustomerId(customerId); if(sysCustomerHealthy != null){ - return HealthyUtils.calculateMaxHeatEveryDay(sysCustomerHealthy.getAge().intValue(),sysCustomerHealthy.getTall(),sysCustomerHealthy.getWeight().doubleValue()); + return sysCustomerHealthy; } //查询体征信息 SysCustomerPhysicalSigns sysCustomerPhysicalSigns = sysCustomerPhysicalSignsService.selectSysCustomerPhysicalSignsByCusId(customerId); if(sysCustomerPhysicalSigns != null){ - return HealthyUtils.calculateMaxHeatEveryDay(sysCustomerPhysicalSigns.getAge().intValue(),sysCustomerPhysicalSigns.getTall(),sysCustomerPhysicalSigns.getWeight().doubleValue()); + sysCustomerHealthy = new SysCustomerHealthy(); + sysCustomerHealthy.setName(sysCustomerPhysicalSigns.getName()); + sysCustomerHealthy.setTall(sysCustomerPhysicalSigns.getTall()); + sysCustomerHealthy.setAge(sysCustomerPhysicalSigns.getAge().longValue()); + sysCustomerHealthy.setWeight(BigDecimal.valueOf(sysCustomerPhysicalSigns.getWeight())); } - return 0; + return sysCustomerHealthy; } + + } \ No newline at end of file diff --git a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysFoodHeatStatisticsServiceImpl.java b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysFoodHeatStatisticsServiceImpl.java index 2129b7cda..e727ae8f2 100644 --- a/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysFoodHeatStatisticsServiceImpl.java +++ b/stdiet-custom/src/main/java/com/stdiet/custom/service/impl/SysFoodHeatStatisticsServiceImpl.java @@ -1,17 +1,19 @@ package com.stdiet.custom.service.impl; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; +import java.util.*; import com.alibaba.fastjson.JSON; import com.stdiet.common.utils.DateUtils; +import com.stdiet.common.utils.HealthyUtils; import com.stdiet.common.utils.StringUtils; import com.stdiet.common.utils.sign.AesUtils; +import com.stdiet.custom.domain.SysCustomerHealthy; import com.stdiet.custom.domain.SysCustomerHeatStatistics; +import com.stdiet.custom.domain.SysCustomerPhysicalSigns; import com.stdiet.custom.dto.request.FoodHeatCalculatorRequest; -import com.stdiet.custom.mapper.SysCustomerHeatStatisticsMapper; +import com.stdiet.custom.service.ISysCustomerHealthyService; +import com.stdiet.custom.service.ISysCustomerHeatStatisticsService; +import com.stdiet.custom.service.ISysCustomerPhysicalSignsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.stdiet.custom.mapper.SysFoodHeatStatisticsMapper; @@ -19,6 +21,8 @@ import com.stdiet.custom.domain.SysFoodHeatStatistics; import com.stdiet.custom.service.ISysFoodHeatStatisticsService; import org.springframework.transaction.annotation.Transactional; +import javax.xml.crypto.Data; + /** * 外食热量统计Service业务层处理 * @@ -33,7 +37,13 @@ public class SysFoodHeatStatisticsServiceImpl implements ISysFoodHeatStatisticsS private SysFoodHeatStatisticsMapper sysFoodHeatStatisticsMapper; @Autowired - private SysCustomerHeatStatisticsMapper sysCustomerHeatStatisticsMapper; + private ISysCustomerHeatStatisticsService sysCustomerHeatStatisticsService; + + @Autowired + private ISysCustomerPhysicalSignsService sysCustomerPhysicalSignsService; + + @Autowired + private ISysCustomerHealthyService sysCustomerHealthyService; /** * 查询外食热量统计 @@ -118,29 +128,67 @@ public class SysFoodHeatStatisticsServiceImpl implements ISysFoodHeatStatisticsS public int addMuchFoodHeat(FoodHeatCalculatorRequest foodHeatCalculatorRequest){ //客户ID解密 String customerId = StringUtils.isNotEmpty(foodHeatCalculatorRequest.getCustomerEncId()) ? AesUtils.decrypt(foodHeatCalculatorRequest.getCustomerEncId(), null) : ""; - if(StringUtils.isEmpty(customerId)){ + if(StringUtils.isEmpty(customerId) || StringUtils.isEmpty(foodHeatCalculatorRequest.getIngredientArray())){ return 0; } - //先判断该日期下是否已存在 - SysCustomerHeatStatistics sysCustomerHeatStatistics = new SysCustomerHeatStatistics(); - sysCustomerHeatStatistics.setCustomerId(Long.parseLong(customerId)); - sysCustomerHeatStatistics.setEdibleDate(new Date()); - SysCustomerHeatStatistics customerHeatResult = sysCustomerHeatStatisticsMapper.getCustomerHeatStatisticsByDate(sysCustomerHeatStatistics); - if(customerHeatResult == null){ - sysCustomerHeatStatisticsMapper.insertSysCustomerHeatStatistics(sysCustomerHeatStatistics); - }else{ - sysCustomerHeatStatistics.setId(customerHeatResult.getId()); + List foodHeatList = JSON.parseArray(foodHeatCalculatorRequest.getIngredientArray(), HashMap.class); + if(foodHeatList == null || foodHeatList.size() == 0){ + return 0; } - if(sysCustomerHeatStatistics.getId() != null){ - List list = new ArrayList<>(); - if(StringUtils.isNotEmpty(foodHeatCalculatorRequest.getIngredientArray())){ - List foodHeatList = JSON.parseArray(foodHeatCalculatorRequest.getIngredientArray(), HashMap.class); - for(HashMap map : foodHeatList){ - map.put("customerHeatId", sysCustomerHeatStatistics.getId()); - } - return sysFoodHeatStatisticsMapper.insertFoodHeatBatch(foodHeatList); + Map> dateFoodMap = new HashMap<>(); + //根据日期分类 + for(HashMap map : foodHeatList){ + String edibleDate = map.get("edibleDate").toString(); + if(dateFoodMap.containsKey(edibleDate)){ + dateFoodMap.get(edibleDate).add(map); + }else{ + List list = new ArrayList<>(); + list.add(map); + dateFoodMap.put(edibleDate, list); } } - return 0; + int row = 0; + int maxHeatValue = getMaxHeatValue(Long.parseLong(customerId)).intValue(); + for (String dateKey : dateFoodMap.keySet()) { + //先判断该日期下是否已存在 + SysCustomerHeatStatistics sysCustomerHeatStatistics = new SysCustomerHeatStatistics(); + sysCustomerHeatStatistics.setCustomerId(Long.parseLong(customerId)); + sysCustomerHeatStatistics.setEdibleDate(DateUtils.parseDate(dateKey)); + SysCustomerHeatStatistics customerHeatResult = sysCustomerHeatStatisticsService.getCustomerHeatStatisticsByDate(sysCustomerHeatStatistics); + if(customerHeatResult == null){ + sysCustomerHeatStatistics.setMaxHeatValue(maxHeatValue); + sysCustomerHeatStatisticsService.insertSysCustomerHeatStatistics(sysCustomerHeatStatistics); + }else{ + sysCustomerHeatStatistics.setId(customerHeatResult.getId()); + } + if(sysCustomerHeatStatistics.getId() != null){ + for(HashMap map : dateFoodMap.get(dateKey)){ + map.put("customerHeatId", sysCustomerHeatStatistics.getId()); + map.put("number", map.get("number") != null && "".equals(map.get("number").toString().trim()) ? null : map.get("number")); + map.put("unit", map.get("unit") != null && "".equals(map.get("unit").toString().trim()) ? null : map.get("unit")); + map.put("quantity", map.get("quantity") != null && "".equals(map.get("quantity").toString().trim()) ? null : map.get("quantity")); + } + row = sysFoodHeatStatisticsMapper.insertFoodHeatBatch(dateFoodMap.get(dateKey)); + } + } + return row; + } + + /** + * 根据用户ID查询该用户每天最大摄入量 + * @param customerId + * @return + */ + private Long getMaxHeatValue(Long customerId){ + SysCustomerHealthy sysCustomerHealthy = sysCustomerHealthyService.selectSysCustomerHealthyByCustomerId(customerId); + if(sysCustomerHealthy != null){ + return HealthyUtils.calculateMaxHeatEveryDay(sysCustomerHealthy.getAge().intValue(),sysCustomerHealthy.getTall(),sysCustomerHealthy.getWeight().doubleValue()); + } + //查询体征信息 + SysCustomerPhysicalSigns sysCustomerPhysicalSigns = sysCustomerPhysicalSignsService.selectSysCustomerPhysicalSignsByCusId(customerId); + if(sysCustomerPhysicalSigns != null){ + return HealthyUtils.calculateMaxHeatEveryDay(sysCustomerPhysicalSigns.getAge().intValue(),sysCustomerPhysicalSigns.getTall(),sysCustomerPhysicalSigns.getWeight().doubleValue()); + } + return 0L; } } \ No newline at end of file diff --git a/stdiet-custom/src/main/resources/mapper/custom/SysCustomerHeatStatisticsMapper.xml b/stdiet-custom/src/main/resources/mapper/custom/SysCustomerHeatStatisticsMapper.xml index 671fac2c7..edb9d6ef8 100644 --- a/stdiet-custom/src/main/resources/mapper/custom/SysCustomerHeatStatisticsMapper.xml +++ b/stdiet-custom/src/main/resources/mapper/custom/SysCustomerHeatStatisticsMapper.xml @@ -124,7 +124,10 @@ + + + @@ -135,7 +138,7 @@ - select sfhs.id, sfhs.customer_heat_id, sfhs.ingredient, sfhs.unit, sfhs.number, sfhs.quantity, sfhs.edible_type, sfhs.heat_value,cusUnit.dict_label as unitName + select sfhs.id, sfhs.customer_heat_id, sfhs.ingredient, sfhs.unit, sfhs.number, sfhs.quantity, sfhs.edible_type, sfhs.protein_quality, sfhs.fat_quality, sfhs.carbon_water_quality,sfhs.heat_value,cusUnit.dict_label as unitName from sys_food_heat_statistics as sfhs LEFT JOIN (SELECT dict_label, dict_value FROM sys_dict_data WHERE dict_type = 'cus_cus_unit') AS cusUnit ON cusUnit.dict_value = sfhs.unit where sfhs.del_flag = 0 @@ -47,7 +50,10 @@ number, quantity, edible_type, + protein_quality, heat_value, + fat_quality, + carbon_water_quality, create_time, create_by, update_time, @@ -61,7 +67,10 @@ #{number}, #{quantity}, #{edibleType}, + #{proteinQuality}, #{heatValue}, + #{fatQuality}, + #{carbonWaterQuality}, #{createTime}, #{createBy}, #{updateTime}, @@ -79,7 +88,10 @@ number = #{number}, quantity = #{quantity}, edible_type = #{edibleType}, + protein_quality = #{proteinQuality}, heat_value = #{heatValue}, + fat_quality = #{fatQuality}, + carbon_water_quality = #{carbonWaterQuality}, create_time = #{createTime}, create_by = #{createBy}, update_time = #{updateTime}, diff --git a/stdiet-ui/src/components/HeatStatisticsCalculate/index.vue b/stdiet-ui/src/components/HeatStatisticsCalculate/index.vue index ce2147a34..f26041425 100644 --- a/stdiet-ui/src/components/HeatStatisticsCalculate/index.vue +++ b/stdiet-ui/src/components/HeatStatisticsCalculate/index.vue @@ -1,13 +1,18 @@