package com.bonus.canteen.core.nutrition.common.vo;

import com.baomidou.mybatisplus.annotation.TableField;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.math.BigDecimal;

@ApiModel("菜品营养信息 实体类")
public class HealthDishesNutritionVo {
   @TableField("dishes_id")
   @ApiModelProperty("菜品id")
   private @NotNull(
   message = "[菜品id]不能为空"
) Long dishesId;
   @TableField("dishes_name")
   @ApiModelProperty("菜品名称")
   private @NotBlank(
   message = "[菜品名称]不能为空"
) @Size(
   max = 255,
   message = "编码长度不能超过255"
) @Length(
   max = 255,
   message = "编码长度不能超过255"
) String dishesName;
   @TableField("actual_weight")
   @ApiModelProperty("菜品实际重量(g)")
   private @NotNull(
   message = "[菜品实际重量(g)]不能为空"
) BigDecimal actualWeight;
   @TableField("standard_weight")
   @ApiModelProperty("菜品标准重量(g)")
   private @NotNull(
   message = "[菜品标准重量(g)]不能为空"
) BigDecimal standardWeight;
   @TableField("mealtime_type")
   @ApiModelProperty("餐次类型 1-早餐 2-午餐 3-晚餐 4-下午茶 5-夜宵")
   private @NotNull(
   message = "[餐次类型 1-早餐 2-午餐 3-晚餐 4-下午茶 5-夜宵]不能为空"
) Integer mealtimeType;
   @TableField("dishes_source")
   @ApiModelProperty("类型(1-APP端自定义添加,2-菜品库)")
   private @NotNull(
   message = "[类型(1-APP端自定义添加,2-菜品库)]不能为空"
) Integer dishesSource;
   @TableField("calories")
   @ApiModelProperty("标准重量下包含的热量(千卡)")
   private @NotNull(
   message = "[热量(千卡)]不能为空"
) BigDecimal calories;
   @TableField("protein")
   @ApiModelProperty("标准重量下包含的蛋白质(g)")
   private @NotNull(
   message = "[蛋白质(g)]不能为空"
) BigDecimal protein;
   @TableField("carbohydrate")
   @ApiModelProperty("标准重量下包含的碳水化合物(g)")
   private @NotNull(
   message = "[碳水化合物(g)]不能为空"
) BigDecimal carbohydrate;
   @TableField("fat")
   @ApiModelProperty("标准重量下包含的脂肪(g)")
   private @NotNull(
   message = "[脂肪(g)]不能为空"
) BigDecimal fat;
   @TableField("dietary_fiber")
   @ApiModelProperty("标准重量下包含的膳食纤维(g)")
   private @NotNull(
   message = "[膳食纤维(g)]不能为空"
) BigDecimal dietaryFiber;
   @TableField("sodium")
   @ApiModelProperty("标准重量下包含的钠(mg)")
   private @NotNull(
   message = "[钠(mg)]不能为空"
) BigDecimal sodium;
   @ApiModelProperty("标准重量下包含的微量元素")
   private HealthDishTraceElementsVo healthDishTraceElementsVo;

   public HealthDishesNutritionVo() {
   }

   public static HealthDishesNutritionVoBuilder builder() {
      return new HealthDishesNutritionVoBuilder();
   }

   public Long getDishesId() {
      return this.dishesId;
   }

   public String getDishesName() {
      return this.dishesName;
   }

   public BigDecimal getActualWeight() {
      return this.actualWeight;
   }

   public BigDecimal getStandardWeight() {
      return this.standardWeight;
   }

   public Integer getMealtimeType() {
      return this.mealtimeType;
   }

   public Integer getDishesSource() {
      return this.dishesSource;
   }

   public BigDecimal getCalories() {
      return this.calories;
   }

   public BigDecimal getProtein() {
      return this.protein;
   }

   public BigDecimal getCarbohydrate() {
      return this.carbohydrate;
   }

   public BigDecimal getFat() {
      return this.fat;
   }

   public BigDecimal getDietaryFiber() {
      return this.dietaryFiber;
   }

   public BigDecimal getSodium() {
      return this.sodium;
   }

   public HealthDishTraceElementsVo getHealthDishTraceElementsVo() {
      return this.healthDishTraceElementsVo;
   }

   public void setDishesId(final Long dishesId) {
      this.dishesId = dishesId;
   }

   public void setDishesName(final String dishesName) {
      this.dishesName = dishesName;
   }

   public void setActualWeight(final BigDecimal actualWeight) {
      this.actualWeight = actualWeight;
   }

   public void setStandardWeight(final BigDecimal standardWeight) {
      this.standardWeight = standardWeight;
   }

   public void setMealtimeType(final Integer mealtimeType) {
      this.mealtimeType = mealtimeType;
   }

   public void setDishesSource(final Integer dishesSource) {
      this.dishesSource = dishesSource;
   }

   public void setCalories(final BigDecimal calories) {
      this.calories = calories;
   }

   public void setProtein(final BigDecimal protein) {
      this.protein = protein;
   }

   public void setCarbohydrate(final BigDecimal carbohydrate) {
      this.carbohydrate = carbohydrate;
   }

   public void setFat(final BigDecimal fat) {
      this.fat = fat;
   }

   public void setDietaryFiber(final BigDecimal dietaryFiber) {
      this.dietaryFiber = dietaryFiber;
   }

   public void setSodium(final BigDecimal sodium) {
      this.sodium = sodium;
   }

   public void setHealthDishTraceElementsVo(final HealthDishTraceElementsVo healthDishTraceElementsVo) {
      this.healthDishTraceElementsVo = healthDishTraceElementsVo;
   }

   public HealthDishesNutritionVo(final Long dishesId, final String dishesName, final BigDecimal actualWeight, final BigDecimal standardWeight, final Integer mealtimeType, final Integer dishesSource, final BigDecimal calories, final BigDecimal protein, final BigDecimal carbohydrate, final BigDecimal fat, final BigDecimal dietaryFiber, final BigDecimal sodium, final HealthDishTraceElementsVo healthDishTraceElementsVo) {
      this.dishesId = dishesId;
      this.dishesName = dishesName;
      this.actualWeight = actualWeight;
      this.standardWeight = standardWeight;
      this.mealtimeType = mealtimeType;
      this.dishesSource = dishesSource;
      this.calories = calories;
      this.protein = protein;
      this.carbohydrate = carbohydrate;
      this.fat = fat;
      this.dietaryFiber = dietaryFiber;
      this.sodium = sodium;
      this.healthDishTraceElementsVo = healthDishTraceElementsVo;
   }

   public static class HealthDishesNutritionVoBuilder {
      private Long dishesId;
      private String dishesName;
      private BigDecimal actualWeight;
      private BigDecimal standardWeight;
      private Integer mealtimeType;
      private Integer dishesSource;
      private BigDecimal calories;
      private BigDecimal protein;
      private BigDecimal carbohydrate;
      private BigDecimal fat;
      private BigDecimal dietaryFiber;
      private BigDecimal sodium;
      private HealthDishTraceElementsVo healthDishTraceElementsVo;

      HealthDishesNutritionVoBuilder() {
      }

      public HealthDishesNutritionVoBuilder dishesId(final Long dishesId) {
         this.dishesId = dishesId;
         return this;
      }

      public HealthDishesNutritionVoBuilder dishesName(final String dishesName) {
         this.dishesName = dishesName;
         return this;
      }

      public HealthDishesNutritionVoBuilder actualWeight(final BigDecimal actualWeight) {
         this.actualWeight = actualWeight;
         return this;
      }

      public HealthDishesNutritionVoBuilder standardWeight(final BigDecimal standardWeight) {
         this.standardWeight = standardWeight;
         return this;
      }

      public HealthDishesNutritionVoBuilder mealtimeType(final Integer mealtimeType) {
         this.mealtimeType = mealtimeType;
         return this;
      }

      public HealthDishesNutritionVoBuilder dishesSource(final Integer dishesSource) {
         this.dishesSource = dishesSource;
         return this;
      }

      public HealthDishesNutritionVoBuilder calories(final BigDecimal calories) {
         this.calories = calories;
         return this;
      }

      public HealthDishesNutritionVoBuilder protein(final BigDecimal protein) {
         this.protein = protein;
         return this;
      }

      public HealthDishesNutritionVoBuilder carbohydrate(final BigDecimal carbohydrate) {
         this.carbohydrate = carbohydrate;
         return this;
      }

      public HealthDishesNutritionVoBuilder fat(final BigDecimal fat) {
         this.fat = fat;
         return this;
      }

      public HealthDishesNutritionVoBuilder dietaryFiber(final BigDecimal dietaryFiber) {
         this.dietaryFiber = dietaryFiber;
         return this;
      }

      public HealthDishesNutritionVoBuilder sodium(final BigDecimal sodium) {
         this.sodium = sodium;
         return this;
      }

      public HealthDishesNutritionVoBuilder healthDishTraceElementsVo(final HealthDishTraceElementsVo healthDishTraceElementsVo) {
         this.healthDishTraceElementsVo = healthDishTraceElementsVo;
         return this;
      }

      public HealthDishesNutritionVo build() {
         return new HealthDishesNutritionVo(this.dishesId, this.dishesName, this.actualWeight, this.standardWeight, this.mealtimeType, this.dishesSource, this.calories, this.protein, this.carbohydrate, this.fat, this.dietaryFiber, this.sodium, this.healthDishTraceElementsVo);
      }

   }
}
