Commit 26b592c4 authored by June's avatar June

v2- 新增 food-match

parent 0eeb8f98
......@@ -41,6 +41,19 @@
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.jiankangyouyi.cloud</groupId>
<artifactId>food-match-api</artifactId>
<version>2.2.2-TK-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.jiankangyouyi.cloud</groupId>
<artifactId>health-cloud-data-center-api</artifactId>
......
package com.jiankangyouyi.cloud.food_match.constant;
/**
* @description: redis相关常量类
* @author: zyj
* @email: zhaoyujie@jiankangyouyi. com
* @date: 2021/5/27 3:06 下午
*/
public interface RedisConstant {
/**
* 配餐锁 food_match:match:appId_userId_date
*/
String FOOD_MATCH_LOCK="food_match:match:%s_%s_%s";
}
package com.jiankangyouyi.cloud.food_match.enums;
import com.jiankangyouyi.cloud.core.constant.BaseEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @description:
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2022/1/13 10:42 上午
*/
@Getter
@AllArgsConstructor
public enum DictEnum implements BaseEnum {
EXTEND_UNIT("02","0208","食物库","扩展单位")
;
private String dictType;
private String dictSubType;
private String dictTypeShow;
private String dictSubTypeShow;
@Override
public String code() {
return String.format("%s_%s",getDictType(),getDictSubType());
}
@Override
public String message() {
return String.format("%s_%s",getDictTypeShow(),getDictSubTypeShow());
}
}
package com.jiankangyouyi.cloud.food_match.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.math.BigDecimal;
/**
* @description:
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2022/1/18 3:57 下午
*/
@Getter
@AllArgsConstructor
public enum EnergyRangeEnum {
/**碳水**/
ER_C_1("ER_C_1","40-55",BigDecimal.valueOf(0.4),BigDecimal.valueOf(0.55)),
ER_C_2("ER_C_2","45-65",BigDecimal.valueOf(0.45),BigDecimal.valueOf(0.65)),
ER_C_3("ER_C_3","50-55",BigDecimal.valueOf(0.5),BigDecimal.valueOf(0.55)),
ER_C_4("ER_C_4","50-60",BigDecimal.valueOf(0.5),BigDecimal.valueOf(0.6)),
ER_C_5("ER_C_5","50-65",BigDecimal.valueOf(0.5),BigDecimal.valueOf(0.65)),
ER_C_6("ER_C_6","55-65",BigDecimal.valueOf(0.55),BigDecimal.valueOf(0.65)),
ER_C_7("ER_C_7","60-65",BigDecimal.valueOf(0.6),BigDecimal.valueOf(0.65)),
ER_C_8("ER_C_7","60-70",BigDecimal.valueOf(0.6),BigDecimal.valueOf(0.7)),
/**蛋白质**/
ER_P_1("ER_P_1","10-15",BigDecimal.valueOf(0.1),BigDecimal.valueOf(0.15)),
ER_P_2("ER_P_2","10-13",BigDecimal.valueOf(0.1),BigDecimal.valueOf(0.13)),
ER_P_3("ER_P_3","10-20",BigDecimal.valueOf(0.1),BigDecimal.valueOf(0.2)),
ER_P_4("ER_P_4","13-15",BigDecimal.valueOf(0.13),BigDecimal.valueOf(0.15)),
ER_P_5("ER_P_5","13-17",BigDecimal.valueOf(0.13),BigDecimal.valueOf(0.17)),
ER_P_6("ER_P_6","15-20",BigDecimal.valueOf(0.15),BigDecimal.valueOf(0.2)),
ER_P_7("ER_P_7","15-18",BigDecimal.valueOf(0.15),BigDecimal.valueOf(0.18)),
/**脂肪**/
ER_F_1("ER_F_1","15-25",BigDecimal.valueOf(0.15),BigDecimal.valueOf(0.25)),
ER_F_2("ER_F_2","20-25",BigDecimal.valueOf(0.2),BigDecimal.valueOf(0.25)),
ER_F_3("ER_F_3","20-30",BigDecimal.valueOf(0.2),BigDecimal.valueOf(0.3)),
ER_F_4("ER_F_4","20-35",BigDecimal.valueOf(0.2),BigDecimal.valueOf(0.35)),
;
private String code;
private String name;
private BigDecimal min;
private BigDecimal max;
public static EnergyRangeEnum getEnumByCodeOrName(String condition) {
EnergyRangeEnum[] values = values();
if (condition == null) {
return null;
} else {
EnergyRangeEnum result = null;
for(EnergyRangeEnum temp : values){
if(temp.code.equals(condition) || temp.name.equals(condition)){
result = temp;
break;
}
}
return result;
}
}
public static EnergyRangeEnum getEnumByEnergy(BigDecimal min,BigDecimal max) {
EnergyRangeEnum[] values = values();
if (min == null || max == null) {
return null;
} else {
EnergyRangeEnum result = null;
for(EnergyRangeEnum temp : values){
if(temp.getMin().compareTo(min)==0 && temp.getMax().compareTo(max)==0){
result = temp;
break;
}
}
return result;
}
}
}
package com.jiankangyouyi.cloud.food_match.enums;
import lombok.Getter;
@Getter
public enum FoodHealthProblemEnum {
TYPE_2_DIABETES("TYPE_2_DIABETES", "2型糖尿病","4"),
HYPERTENSION("HYPERTENSION", "高血压","12"),
DYSLIPIDEMIA("DYSLIPIDEMIA", "血脂异常","8"),
CORONARY_DISEASE("CORONARY_DISEASE", "冠心病","11"),
OSTEOPOROSIS("OSTEOPOROSIS", "骨质疏松","7"),
GOUT("GOUT", "痛风","5"),
FATTY_LIVER("FATTY_LIVER", "脂肪肝","9"),
STROKE("STROKE", "脑卒中","10"),
GASTRIC_FUNCTION_DISORDER("GASTRIC_FUNCTION_DISORDER", "胃功能紊乱","6"),
INTESTINAL_FUNCTION_DISORDER("INTESTINAL_FUNCTION_DISORDER", "肠道功能紊乱","3"),
// HYPOIMMUNITY("HYPOIMMUNITY", "免疫力低下","16"),
OBESITY("OBESITY", "肥胖","13"),
HYPERURICEMIA("HYPERURICEMIA", "高尿酸血症","22"),
AD("AD", "阿尔兹海默症","28"),
COPD("COPD", "慢阻肺", "25"),
ASCVD("ASCVD", "动脉粥样硬化性心血管病", "23"),
ICVD("ICVD", "缺血性心血管病", "21"),
INSOMNIA("INSOMNIA", "失眠", "24"),
HPYPERLIPIDEMIA("HPYPERLIPIDEMIA", "高血脂", "8"),
IIH("IIH", "甲亢", "27"),
TSH("TSH", "甲减", "26"),
// CFS("CFS","慢性疲劳综合征"),
// POSTPARTUM_WEIGHT("POSTPARTUM_WEIGHT", "产后体重管理"),
// FGID("FGID","功能性胃肠病","33-1"),
FGID("FGID", "功能性胃肠病", "31"),
IMMUNITY("IMMUNITY", "免疫力", "16"),
CFS("CFS", "慢性疲劳综合征", "32"),
// region 营养不良
/**
* 饱和脂肪酸过量
*/
SFA_OVER("SFA_OVER", "营养不良-饱和脂肪酸过量", "15-2"),
/**
* n-3脂肪酸缺乏
*/
N3_EFA_LACK("N3_EFA_LACK","营养不良-n-3脂肪酸缺乏","15-3"),
/**
* 反式脂肪酸过量
*/
TFA_OVER("TFA_OVER","营养不良-反式脂肪酸过量","15-1"),
/**
* 胆固醇过量
*/
TC_OVER("TC_OVER","营养不良-胆固醇过量","15-4"),
/**
* 膳食纤维缺乏
*/
DIETARY_FIBER_LACK("DIETARY_FIBER_LACK","营养不良-膳食纤维缺乏","15-5"),
/**
* 优质蛋白缺乏
*/
QUALITY_PROTEIN_LACK("QUALITY_PROTEIN_LACK","营养不良-优质蛋白缺乏","15-6"),
/**
* 维生素A缺乏
*/
VITAMIN_A_LACK("VITAMIN_A_LACK","营养不良-维生素A缺乏","15-7"),
/**
* 维生素D缺乏
*/
VITAMIN_D_LACK("VITAMIN_D_LACK","营养不良-维生素D缺乏","15-8"),
/**
* 维生素E缺乏
*/
VITAMIN_E_LACK("VITAMIN_E_LACK","营养不良-维生素E缺乏","15-9"),
/**
* 维生素k缺乏
*/
VITAMIN_K_LACK("VITAMIN_K_LACK","营养不良-维生素k缺乏","15-10"),
/**
* 维生素c缺乏
*/
VITAMIN_C_LACK("VITAMIN_C_LACK","营养不良-维生素c缺乏","15-11"),
/**
* 维生素B1缺乏
*/
VITAMIN_B1_LACK("VITAMIN_B1_LACK","营养不良-维生素B1缺乏","15-12"),
/**
* 维生素B2缺乏
*/
VITAMIN_B2_LACK("VITAMIN_B2_LACK","营养不良-维生素B2缺乏","15-13"),
/**
* 烟酸缺乏
*/
NICOTINIC_ACID_LACK("NICOTINIC_ACID_LACK","营养不良-烟酸缺乏","15-14"),
/**
* 维生素B6缺乏
*/
VITAMIN_B6_LACK("VITAMIN_B6_LACK","营养不良-维生素B6缺乏","15-15"),
/**
* 叶酸缺乏
*/
FOLIC_ACID_LACK("FOLIC_ACID_LACK","营养不良-叶酸缺乏","15-16"),
/**
* 维生素B12缺乏
*/
VITAMIN_B12_LACK("VITAMIN_B12_LACK","营养不良-维生素B12缺乏","15-17"),
/**
* 生物素缺乏
*/
VH_LACK("VH_LACK","营养不良-生物素缺乏","15-18"),
/**
* 钙缺乏
*/
CALCIUM_LACK("CALCIUM_LACK","营养不良-钙缺乏","15-19"),
/**
* 镁缺乏
*/
MAGNESIUM_LACK("MAGNESIUM_LACK","营养不良-镁缺乏","15-20"),
/**
* 钾缺乏
*/
POTASSIUM_LACK("POTASSIUM_LACK","营养不良-钾缺乏","15-21"),
/**
* 铁缺乏
*/
IRON_LACK("IRON_LACK","营养不良-铁缺乏","15-22"),
/**
* 碘缺乏
*/
IODINE_LACK("IODINE_LACK","营养不良-碘缺乏","15-23"),
/**
* 碘过量
*/
IODINE_OVER("IODINE_OVER","营养不良-碘过量","15-24"),
/**
* 锌缺乏
*/
ZINC_LACK("ZINC_LACK","营养不良-锌缺乏","15-25"),
/**
* 硒缺乏
*/
SELENIUM_LACK("SELENIUM_LACK","营养不良-硒缺乏","15-26"),
/**
* 铜缺乏
*/
CIGS_LACK("CIGS_LACK","营养不良-铜缺乏","15-27"),
/**
* 铬缺乏
*/
CHROMIUM_LACK("CHROMIUM_LACK","营养不良-铬缺乏","15-28"),
//endregion
//region 产后人群
POSTPARTUM_GTE_7("POSTPARTUM_GTE_7","产后<=7天","33-1"),
POSTPARTUM_LT_7_LACTATION("POSTPARTUM_LT_7_LACTATION","产后>7天-哺乳期","33-2"),
POSTPARTUM_LT_7_NOLACTATION("POSTPARTUM_LT_7_NOLACTATION","产后>7天-非哺乳期","33-3"),
//endregion,
CVD("CVD","心血管疾病","34")
;
private String code;
private String name;
//转化为数据库code
private String dictCode;
/**
* 根据code 查询
* @param code
* @return
*/
public static FoodHealthProblemEnum getEnumByDictCode(String code) {
FoodHealthProblemEnum[] values = values();
if (code == null) {
return null;
} else {
FoodHealthProblemEnum[] var2 = values;
int var3 = values.length;
for(int var4 = 0; var4 < var3; ++var4) {
FoodHealthProblemEnum value = var2[var4];
if (code.equals(value.getCode())) {
return value;
}
}
return null;
}
}
public static void main(String[] args) {
getEnumByDictCode("26");
}
private FoodHealthProblemEnum(String code, String name,String dictCode) {
this.code = code;
this.name = name;
this.dictCode = dictCode;
}
}
package com.jiankangyouyi.cloud.food_match.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@AllArgsConstructor
@NoArgsConstructor
public enum FoodNatureEnum {
ONE_01("01", "干"),
ONE_02("02", "湿"),
ONE_03("03", "生"),
ONE_04("04", "熟"),
ONE_05("05", "素(主食)"),
ONE_06("06", "荤(主食)"),
ONE_07("07", "辛辣刺激"),
ONE_08("08", "深色蔬菜"),
ONE_09("09", "绿叶蔬菜"),
ONE_10("10", "热"),
ONE_11("11", "凉"),
ONE_12("12", "水产品-鱼"),
ONE_13("13", "水产品-贝"),
ONE_14("14", "水产品-虾"),
ONE_15("15", "水产品-蟹"),
ONE_16("16", "海产品");
private String code;
private String name;
/**
* 根据code 查询
* @param name
* @return
*/
public static FoodNatureEnum getEnumByDictName(String name) {
FoodNatureEnum[] values = values();
if (name == null) {
return null;
} else {
FoodNatureEnum[] var2 = values;
int var3 = values.length;
for(int var4 = 0; var4 < var3; ++var4) {
FoodNatureEnum value = var2[var4];
if (name.equals(value.getName())) {
return value;
}
}
return null;
}
}
}
package com.jiankangyouyi.cloud.food_match.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author : liuze
* @date: 2022/9/13 11:22
**/
@AllArgsConstructor
@Getter
public enum FoodQuantityLevelEnum {
QUANTITY_LEVEL_LOW("LOW","低",0,1600),
QUANTITY_LEVEL_MIDDLE("MIDDLE","中",1600,2600),
QUANTITY_LEVEL_HIGH("HIGH","高",2600,Integer.MAX_VALUE),
;
private String code;
private String name;
private Integer min;
private Integer max;
public static FoodQuantityLevelEnum getEnumByCodeOrName(String condition) {
FoodQuantityLevelEnum[] values = values();
if (condition == null) {
return null;
} else {
FoodQuantityLevelEnum result = null;
for(FoodQuantityLevelEnum temp : values){
if(temp.code.equals(condition) || temp.name.equals(condition)){
result = temp;
break;
}
}
return result;
}
}
}
package com.jiankangyouyi.cloud.food_match.enums;
import com.jiankangyouyi.cloud.core.constant.BaseEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @description:
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2022/1/18 3:57 下午
*/
@Getter
@AllArgsConstructor
public enum FooodClsEnum implements BaseEnum {
/**
* 坚果、种子类
*/
NUT("0115","坚果、种子类"),
/**
* 乳类及制品
*/
MILK("0113","乳类及制品"),
/**
* 薯类
*/
POTATO("022010","薯类"),
/**
* 芋类
*/
TANIA("022013","芋类"),
/**
* 主食类
*/
STAPLE_FOOD("0220","主食类"),
/**
* 水果类及制品
*/
FRUIT("0109","水果类及制品"),
;
private String clsCode;
private String clsName;
@Override
public String code() {
return getClsCode();
}
@Override
public String message() {
return getClsName();
}
}
package com.jiankangyouyi.cloud.food_match.enums;
import com.jiankangyouyi.cloud.core.constant.BaseEnum;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @description: 性别枚举
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2021/11/12 4:31 下午
*/
@AllArgsConstructor
@Getter
public enum GenderRealEnum implements BaseEnum {
MAN("1", "男"),
WOMAN("2", "女"),
;
private String code;
private String name;
@Override
public String code() {
return this.getCode();
}
@Override
public String message() {
return this.getName();
}
}
package com.jiankangyouyi.cloud.food_match.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.math.BigDecimal;
/**
* @description:
* @author: liuze
* @email: liuze@jiankangyouyi.com
* @date: 2022/1/18 3:57 下午
*/
@Getter
@AllArgsConstructor
public enum MealsEnergyRangeEnum {
/**加餐**/
MER_1("MER_1","3-5",BigDecimal.valueOf(0.03),BigDecimal.valueOf(0.05)),
MER_2("MER_2","3-8",BigDecimal.valueOf(0.03),BigDecimal.valueOf(0.08)),
MER_3("MER_3","5-10",BigDecimal.valueOf(0.05),BigDecimal.valueOf(0.1)),
MER_4("MER_4","15-25",BigDecimal.valueOf(0.15),BigDecimal.valueOf(0.25)),
MER_5("MER_5","20-30",BigDecimal.valueOf(0.2),BigDecimal.valueOf(0.3)),
MER_6("MER_6","25-35",BigDecimal.valueOf(0.25),BigDecimal.valueOf(0.35)),
MER_7("MER_7","28-38",BigDecimal.valueOf(0.28),BigDecimal.valueOf(0.38)),
MER_8("MER_8","29-39",BigDecimal.valueOf(0.29),BigDecimal.valueOf(0.39)),
MER_9("MER_9","30-37",BigDecimal.valueOf(0.3),BigDecimal.valueOf(0.37)),
MER_10("MER_10","30-40",BigDecimal.valueOf(0.3),BigDecimal.valueOf(0.4)),
MER_11("MER_11","35-45",BigDecimal.valueOf(0.35),BigDecimal.valueOf(0.45)),
;
private String code;
private String name;
private BigDecimal min;
private BigDecimal max;
public static MealsEnergyRangeEnum getEnumByCodeOrName(String condition) {
MealsEnergyRangeEnum[] values = values();
if (condition == null) {
return null;
} else {
MealsEnergyRangeEnum result = null;
for(MealsEnergyRangeEnum temp : values){
if(temp.code.equals(condition) || temp.name.equals(condition)){
result = temp;
break;
}
}
return result;
}
}
public static MealsEnergyRangeEnum getEnumByEnergy(BigDecimal min, BigDecimal max) {
MealsEnergyRangeEnum[] values = values();
if (min == null || max == null) {
return null;
} else {
MealsEnergyRangeEnum result = null;
for(MealsEnergyRangeEnum temp : values){
if(temp.getMin().compareTo(min)==0 && temp.getMax().compareTo(max)==0){
result = temp;
break;
}
}
return result;
}
}
}
package com.jiankangyouyi.cloud.food_match.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.math.BigDecimal;
/**
* @description:
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2022/1/18 3:57 下午
*/
@Getter
@AllArgsConstructor
public enum TotalEnergyRangeEnum {
TER_1("TER_1","1200-1300",BigDecimal.valueOf(1200),BigDecimal.valueOf(1300)),
TER_2("TER_2","1300-1400",BigDecimal.valueOf(1300),BigDecimal.valueOf(1400)),
TER_3("TER_3","1400-1500",BigDecimal.valueOf(1400),BigDecimal.valueOf(1500)),
TER_4("TER_4","1500-1600",BigDecimal.valueOf(1500),BigDecimal.valueOf(1600)),
TER_5("TER_5","1600-1700",BigDecimal.valueOf(1600),BigDecimal.valueOf(1700)),
TER_6("TER_6","1700-1800",BigDecimal.valueOf(1700),BigDecimal.valueOf(1800)),
TER_7("TER_7","1800-1900",BigDecimal.valueOf(1800),BigDecimal.valueOf(1900)),
TER_8("TER_8","1900-2000",BigDecimal.valueOf(1900),BigDecimal.valueOf(2000)),
TER_9("TER_9","2000-2100",BigDecimal.valueOf(2000),BigDecimal.valueOf(2100)),
TER_10("TER_10","2100-2200",BigDecimal.valueOf(2100),BigDecimal.valueOf(2200)),
TER_11("TER_11","2200-2300",BigDecimal.valueOf(2200),BigDecimal.valueOf(2300)),
TER_12("TER_12","2300-2400",BigDecimal.valueOf(2300),BigDecimal.valueOf(2400)),
TER_13("TER_13","2400-2500",BigDecimal.valueOf(2400),BigDecimal.valueOf(2500)),
TER_14("TER_14","2500-2600",BigDecimal.valueOf(2500),BigDecimal.valueOf(2600)),
TER_15("TER_15","2600-2700",BigDecimal.valueOf(2600),BigDecimal.valueOf(2700)),
TER_16("TER_16","2700-2800",BigDecimal.valueOf(2700),BigDecimal.valueOf(2800)),
TER_17("TER_17","2800-2900",BigDecimal.valueOf(2800),BigDecimal.valueOf(2900)),
TER_18("TER_18","2900-3000",BigDecimal.valueOf(2900),BigDecimal.valueOf(3000)),
TER_19("TER_19","3000-3500",BigDecimal.valueOf(3000),BigDecimal.valueOf(3500)),
;
private String code;
private String name;
private BigDecimal min;
private BigDecimal max;
public static TotalEnergyRangeEnum getEnumByCodeOrName(String condition) {
TotalEnergyRangeEnum[] values = values();
if (condition == null) {
return null;
} else {
TotalEnergyRangeEnum result = null;
for(TotalEnergyRangeEnum temp : values){
if(temp.code.equals(condition) || temp.name.equals(condition)){
result = temp;
break;
}
}
return result;
}
}
public static TotalEnergyRangeEnum getEnumByEnergy(BigDecimal energy) {
TotalEnergyRangeEnum[] values = values();
if (energy == null) {
return null;
} else {
if(TER_19.getMax().compareTo(energy)==0){
return TER_19;
}
TotalEnergyRangeEnum result = null;
for(TotalEnergyRangeEnum temp : values){
if(temp.getMin().compareTo(energy)<=0 && temp.getMax().compareTo(energy)>=0){
result = temp;
break;
}
}
return result;
}
}
}
package com.jiankangyouyi.cloud.food_match.enums.test;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
/**
* 配餐统计纬度
*
* @author june
* @date 2022/11/03
*/
@Getter
@AllArgsConstructor
@NoArgsConstructor
public enum FoodMatchResultCollectTypeEnum {
/**
* 能量
*/
ENERGY,
/**
* 碳水化合物
*/
CARBOHYDRATE,
/**
* 蛋白质
*/
PROTEIN,
/**
* 脂肪
*/
FAT,
/**
* 碳水化合物-比例
*/
CARBOHYDRATE_RATIO("碳水化合物", null),
/**
* 蛋白质-比例
*/
PROTEIN_RATIO("蛋白质", null),
/**
* 脂肪-比例
*/
FAT_RATIO("脂肪", null),
/**
* 早餐
*/
BREAKFAST,
/**
* 早加餐
*/
BREAKFAST_EXTRA,
/**
* 午餐
*/
LUNCH,
/**
* 午加餐
*/
LUNCH_EXTRA,
/**
* 晚餐
*/
SUPPER,
/**
* 晚加餐
*/
SUPPER_EXTRA,
/**
* 早餐-比例
*/
BREAKFAST_RATIO("早餐", null),
/**
* 早加餐-比例
*/
BREAKFAST_EXTRA_RATIO("早加餐", null),
/**
* 午餐-比例
*/
LUNCH_RATIO("午餐", null),
/**
* 午加餐-比例
*/
LUNCH_EXTRA_RATIO("午加餐", null),
/**
* 晚餐-比例
*/
SUPPER_RATIO("晚餐", null),
/**
* 晚加餐-比例
*/
SUPPER_EXTRA_RATIO("晚加餐", null),
/**
* 谷物
*/
CEREAL("膳食结构", "谷物", "g"),
/**
* 全谷物
*/
ALL_CEREAL("膳食结构", "全谷物", "g"),
/**
* 薯类
*/
POTATO("膳食结构", "薯类", "g"),
/**
* 蔬菜
*/
VEGETABLE("膳食结构", "蔬菜", "g"),
/**
* 水果
*/
FRUITS("膳食结构", "水果", "g"),
/**
* 禽畜肉蛋
*/
MEAT("膳食结构", "禽畜肉蛋", "g"),
/**
* 蛋及其制品
*/
EGGS("膳食结构", "蛋及其制品", "g"),
/**
* 鱼虾类
*/
SEAFOOD("膳食结构", "鱼虾类", "g"),
/**
* 奶
*/
MILK("膳食结构", "奶", "g"),
/**
* 大豆
*/
SOYA("膳食结构", "大豆", "g"),
/**
* 坚果
*/
NUT("膳食结构", "坚果", "g"),
/**
* 烹饪油
*/
OIL("膳食结构", "烹饪油", "g"),
/**
* 膳食纤维或可溶性膳食纤维
*/
DF,
/**
* 总胆固醇
*/
TOTAL_CHOLESTEROL,
/**
* 维生素a
*/
VA,
/**
* 维生素c
*/
VC,
/**
* 维生素d
*/
VD,
/**
* 维生素e
*/
VE,
/**
* 维生素b1
*/
VB1,
/**
* 维生素b2
*/
VB2,
/**
* 维生素b5
*/
VB5,
/**
* 维生素b6
*/
VB6,
/**
* 维生素b12
*/
VB12,
/**
* 叶酸
*/
FOLIC_ACID,
/**
* 烟酸
*/
NIACIN,
/**
* 生物素
*/
BIOTIN,
/**
* 维生素k
*/
VK,
/**
* 胆碱
*/
CHOLINE,
/**
* 钙
*/
CALCIUM,
/**
* 钾
*/
POTASSIUM,
/**
* 镁
*/
MAGNESIUM,
/**
* 铁
*/
IRON,
/**
* 锌
*/
ZINC,
/**
* 硒
*/
SELENIUM,
/**
* 铬
*/
CHROMIUM,
/**
* 锰
*/
MANGANESE,
/**
* 碘
*/
IODINE,
/**
* 钠
*/
SODIUM,
/**
* 磷
*/
PHOSPHORUS,
/**
* 铜
*/
COPPER,
/**
* 氟
*/
FLUORINE,
/**
* 钼
*/
MOLYBDENUM,
;
/**
* 父类名称
*/
private String parentName;
/**
* 当前类名称
*/
private String name;
/**
* 单位 默认百分比
*/
private String unit;
FoodMatchResultCollectTypeEnum(String name, String unit) {
this.name = name;
this.unit = unit;
}
/**
* 获取不匹配提示信息
*
* @param min 最小值
* @param max 最大值
* @return
*/
public String getNotMatchMessage(BigDecimal min, BigDecimal max) {
String messageName = StringUtils.isBlank(this.parentName) ? this.name : String.format("%s(%s)", this.parentName, this.name);
// 是否百分比
boolean isRatio = StringUtils.isBlank(this.unit);
String type = isRatio ? "占比" : "含量";
String range = isRatio ? String.format("%s%%~%s%%", getRatioString(min), getRatioString(max)) : String.format("%s%s~%s%s", min.toPlainString(), this.unit, max.toPlainString(), this.unit);
return String.format("%s%s不合理,合理范围为%s", messageName, type, range);
}
private static String getRatioString(BigDecimal ratio) {
return ratio.multiply(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP).toPlainString();
}
}
package com.jiankangyouyi.cloud.food_match.model.dto;
import lombok.Data;
@Data
public class ChangeFoodStatusDTO {
Boolean status;
}
package com.jiankangyouyi.cloud.food_match.model.dto.request;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @description:
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2021/12/21 12:53 下午
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class AbstractAuthHttpApiRequestDTO extends AbstractHttpApiRequestDTO {
private String configId;
}
package com.jiankangyouyi.cloud.food_match.model.dto.request;
import com.jiankangyouyi.cloud.core.validator.ValidDTO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
/**
* Http 请求DTO
*
* @author yangsongbo
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public abstract class AbstractHttpApiRequestDTO implements ValidDTO {
private static final long serialVersionUID = 1L;
public static final String FIELD_BIZ_TYPE = "bizType";
public static final String FIELD_APP_ID = "appId";
public static final String FIELD_IP = "ip";
/**
* 业务类型
*/
@NotBlank(message = "请求参数bizType不能为空")
@Size(max = 10, message = "请求参数bizType长度不合法")
private String bizType;
/**
* IP地址
*/
private String ip;
/**
* 应用ID
*/
@NotBlank(message = "获取appId失败")
@Size(max = 32, message = "appId长度不合法")
private String appId;
}
package com.jiankangyouyi.cloud.food_match.model.dto.request;
import lombok.Data;
/**
* @description: id相关请求
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2021/7/30 5:46 下午
*/
@Data
public class IdReuqestDTO extends AbstractHttpApiRequestDTO{
private String id;
}
package com.jiankangyouyi.cloud.food_match.model.dto.request.match;
import com.jiankangyouyi.cloud.core.validator.annotation.*;
import com.jiankangyouyi.cloud.data.center.api.enums.LactationStatusEnum;
import com.jiankangyouyi.cloud.data.center.api.model.entity.component.HealthProblemInfo;
import com.jiankangyouyi.cloud.data.center.api.model.entity.component.NutrientStateInfo;
import com.jiankangyouyi.cloud.food_match.api.enums.ExerciseLevelEnum;
import com.jiankangyouyi.cloud.food_match.enums.GenderRealEnum;
import com.jiankangyouyi.cloud.food_match.model.dto.request.AbstractAuthHttpApiRequestDTO;
import lombok.*;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.Pattern;
import java.util.List;
/**
* @description: 批量-配餐请求dto
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2021/7/26 3:32 下午
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class APIBatchMatchFoodRequestDTO extends AbstractAuthHttpApiRequestDTO {
private static final long serialVersionUID = 1L;
/**
* 用户id
*/
@NotEmptyHC
@SizeHC(value = 64)
private String userId;
/**
* 体重 kg
*/
@NotEmptyHC
@BigDecimalValHC
@MinHC(25)
@MaxHC(200)
private String weight;
/**
* 身高 cm
* @length 3
*/
@NotEmptyHC
@IntValHC
@MinHC(100)
@MaxHC(230)
private String height;
/**
* 出生年月日 yyyy-MM-dd
*/
@NotEmptyHC
@DateValHC(pattern = "yyyy-MM-dd")
private String birthday;
/**
* 性别 1:男2:女
* @length 1
*/
@NotEmptyHC
@EnumHC(enumTypes = GenderRealEnum.class)
@MinHC(value = 1, message = "gender 不合法")
private String gender;
/**
* 体力活动等级
* @length 1
*/
@NotEmptyHC
// @EnumHC(enumTypes = ActivityLevelEnum.class)
@Pattern(regexp = "^[1-5]$", message = "activityLevel 不合法")
private String activityLevel;
/**
* 运动等级
* @length 1
*/
@EnumHC(enumTypes = ExerciseLevelEnum.class)
private String exerciseRiskLevel;
/**
* 疾病情况
*/
private List<HealthProblemInfo> healthProblemInfos;
/**
* NULL 营养素状态信息 当健康问题包含 NUTRIENT_DEFICIENCY 时此处不可为空
*/
private List<NutrientStateInfo> nutrientStateInfos;
/**
* NUll 分娩日期,性别为女性时才能赋值 yyyy-MM-dd
*/
@DateValHC(pattern = "yyyy-MM-dd")
private String deliveryDate;
/**
* NULL 哺乳状态,性别为女性时才能赋值
* <p>
* {@link LactationStatusEnum}
*/
@EnumHC(enumTypes = LactationStatusEnum.class)
@SizeHC(1)
private String lactationStatus;
/**
* 过敏原禁忌标签 {@link com.jiankangyouyi.cloud.data.center.api.enums.AllergenTabooTagEnum}
*/
private List<String> allergenTabooTags;
/**
* NULL 民族 (膳食使用时数据来源——字典——字典大类:食物库,字典子类:禁忌民族)
*/
@SizeHC(value = 16)
private String nation;
/**
* 所在的地域
* (膳食使用时数据来源——字典——字典大类:食物库,字典子类:国家及地区)
*/
@SizeHC(value = 16)
private String area;
/**
* 喜好口味
* (膳食使用时数据来源——字典——字典大类:食物库,字典子类:口味)
*/
private List<String> taste;
/**
* 配餐日期-起
*/
@DateValHC(pattern = "yyyy-MM-dd")
@NotEmptyHC
@Length(max = 10, min = 10, message = "planningDateStart 不合法")
private String planningDateStart;
/**
* 配餐日期-止
*/
@DateValHC(pattern = "yyyy-MM-dd")
@NotEmptyHC
@Length(max = 10, min = 10, message = "planningDateEnd 不合法")
private String planningDateEnd;
/**
* 是否强行配餐<br/>true:无视已存计划重新生成所有<br/>false: 只填补不存在的计划
*/
@NotNullHC
@BooleanValHC
private String reMatch;
@NotEmptyHC
@SizeHC(64)
private String configId;
}
package com.jiankangyouyi.cloud.food_match.model.dto.request.match;
import com.jiankangyouyi.cloud.core.entity.page.Page;
import com.jiankangyouyi.cloud.core.validator.annotation.DateValHC;
import com.jiankangyouyi.cloud.core.validator.annotation.NotEmptyHC;
import com.jiankangyouyi.cloud.core.validator.annotation.SizeHC;
import com.jiankangyouyi.cloud.food_match.model.dto.request.AbstractAuthHttpApiRequestDTO;
import lombok.*;
import org.hibernate.validator.constraints.Length;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
/**
* @author : liuze
* @date: 2022/12/13 11:00
**/
@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class APIFindFoodMatchResRequestDTO extends AbstractAuthHttpApiRequestDTO {
/**
* 用户id
*/
@NotEmptyHC
@Length(max = 64, message = "userId 不合法")
private String userId;
@DateValHC(pattern = "yyyy-MM-dd")
@Length(max = 10, min = 10, message = "startDate 不合法")
private String startDate;
@DateValHC(pattern = "yyyy-MM-dd")
@Length(max = 10, min = 10, message = "endDate 不合法")
private String endDate;
@NotNull(message = "请求参数page不能为空")
@Valid
private Page page;
private String sortColumn;
private boolean desc;
}
package com.jiankangyouyi.cloud.food_match.model.dto.request.match;
import com.jiankangyouyi.cloud.core.validator.annotation.*;
import com.jiankangyouyi.cloud.data.center.api.enums.LactationStatusEnum;
import com.jiankangyouyi.cloud.data.center.api.model.entity.component.HealthProblemInfo;
import com.jiankangyouyi.cloud.data.center.api.model.entity.component.NutrientStateInfo;
import com.jiankangyouyi.cloud.food_match.api.enums.ExerciseLevelEnum;
import com.jiankangyouyi.cloud.food_match.enums.GenderRealEnum;
import com.jiankangyouyi.cloud.food_match.model.dto.request.AbstractAuthHttpApiRequestDTO;
import com.jiankangyouyi.cloud.food_match.model.dto.request.match.test.MatchTestParam;
import lombok.*;
import javax.validation.constraints.Pattern;
import java.util.List;
import java.util.Objects;
/**
* @description: 配餐请求dto
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2021/7/26 3:32 下午
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class APIMatchFoodV2RequestDTO extends AbstractAuthHttpApiRequestDTO {
private static final long serialVersionUID = 1L;
/**
* 用户id
*/
@NotEmptyHC
@SizeHC(value = 64)
private String userId;
/**
* 体重 kg
*/
@NotEmptyHC
@BigDecimalValHC
@MinHC(25)
@MaxHC(200)
private String weight;
/**
* 身高 cm
* @length 3
*/
@NotEmptyHC
@IntValHC
@MinHC(100)
@MaxHC(230)
private String height;
/**
* 出生年月日 yyyy-MM-dd
*/
@NotEmptyHC
@DateValHC(pattern = "yyyy-MM-dd")
private String birthday;
/**
* 性别 1:男2:女
* @length 1
*/
@NotEmptyHC
@EnumHC(enumTypes = GenderRealEnum.class)
private String gender;
/**
* 体力活动等级
* @length 1
*/
@NotEmptyHC
@Pattern(regexp = "^[1-5]$", message = "activityLevel 不合法")
private String activityLevel;
/**
* 运动等级
* @length 1
*/
@EnumHC(enumTypes = ExerciseLevelEnum.class)
private String exerciseRiskLevel;
/**
* 疾病情况
*/
private List<HealthProblemInfo> healthProblemInfos;
/**
* NULL 营养素状态信息 当健康问题包含 NUTRIENT_DEFICIENCY 时此处不可为空
*/
private List<NutrientStateInfo> nutrientStateInfos;
/**
* NUll 分娩日期,性别为女性时才能赋值 yyyy-MM-dd
*/
@DateValHC(pattern = "yyyy-MM-dd")
private String deliveryDate;
/**
* NULL 哺乳状态,性别为女性时才能赋值
* <p>
* {@link com.jiankangyouyi.cloud.data.center.api.enums.LactationStatusEnum}
*/
@EnumHC(enumTypes = LactationStatusEnum.class)
@SizeHC(1)
private String lactationStatus;
/**
* NULL 民族 (膳食使用时数据来源——字典——字典大类:食物库,字典子类:禁忌民族)
*/
@SizeHC(value = 16)
private String nation;
/**
* 所在的地域
* (膳食使用时数据来源——字典——字典大类:食物库,字典子类:国家及地区)
*/
@SizeHC(value = 16)
private String area;
/**
* 喜好口味
* (膳食使用时数据来源——字典——字典大类:食物库,字典子类:口味)
*/
private List<String> taste;
/**
* 过敏原禁忌标签 {@link com.jiankangyouyi.cloud.data.center.api.enums.AllergenTabooTagEnum}
*/
private List<String> allergenTabooTags;
/**
* 配餐日期
*/
@NotEmptyHC
@DateValHC(pattern = "yyyy-MM-dd")
private String planningDate;
/**
* 是否强行重新配餐
* @length 5
*/
@BooleanValHC
private String reMatch;
/**
* 糖尿病用药情况,不传默认4
* {@link com.jiankangyouyi.cloud.data.center.api.enums.Type2DiabetesPharmacyEnum}
*/
@SizeHC(1)
private String type2DiabetesPharmacyCode;
private Integer type;
private Integer recommendedIntakeEnergy;
/**
* 测试
*/
private MatchTestParam test;
public MatchTestParam getTest() {
if (Objects.isNull(test)) {
test = new MatchTestParam();
}
return test;
}
}
package com.jiankangyouyi.cloud.food_match.model.dto.request.match;
import com.jiankangyouyi.cloud.core.validator.annotation.*;
import com.jiankangyouyi.cloud.food_match.model.dto.request.AbstractHttpApiRequestDTO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
/**
* @description: 重新保存配餐结果
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2021/8/24 2:54 下午
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class APIReSaveFoodMatchResRequestDTOV2 extends AbstractHttpApiRequestDTO {
/**
* 配餐用户id
* @length 64
*/
@NotEmptyHC
@SizeHC(64)
private String userId;
/**
* 配餐日期
*/
@NotEmptyHC
@DateValHC(pattern = "yyyy-MM-dd")
private String recipesDate;
/**
* 餐次类型 <br/>1:早餐<br/>2早+餐<br/>3午餐<br/>4午+餐<br/>5晚餐<br/>6晚+餐
* @length 1
*/
@SizeHC(1)
@MinHC(1)
@MaxHC(6)
@NotEmptyHC
@IntValHC
private String mealType;
/**
* 替换食物id
* @length 32
*/
@NotEmptyHC
@SizeHC(32)
private String replaceFoodId;
/**
* 被替换食物id
* @length 32
*/
@NotEmptyHC
@SizeHC(32)
private String byReplaceFoodId;
/**
* 更换后的食物克数
* @length 4
*/
@NotEmptyHC
@IntValHC
@SizeHC(4)
private String gram;
}
package com.jiankangyouyi.cloud.food_match.model.dto.request.match;
import com.jiankangyouyi.cloud.core.validator.annotation.*;
import com.jiankangyouyi.cloud.data.center.api.enums.LactationStatusEnum;
import com.jiankangyouyi.cloud.data.center.api.model.entity.component.HealthProblemInfo;
import com.jiankangyouyi.cloud.data.center.api.model.entity.component.NutrientStateInfo;
import com.jiankangyouyi.cloud.food_match.api.enums.ExerciseLevelEnum;
import com.jiankangyouyi.cloud.food_match.enums.GenderRealEnum;
import com.jiankangyouyi.cloud.food_match.model.dto.request.AbstractHttpApiRequestDTO;
import lombok.*;
import javax.validation.constraints.Pattern;
import java.util.List;
/**
* @description: 配餐请求dto
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2021/7/26 3:32 下午
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class BatchMatchFoodRequestDTO extends AbstractHttpApiRequestDTO {
private static final long serialVersionUID = 1L;
/**
* 用户id
*/
@NotEmptyHC
@SizeHC(value = 64)
private String userId;
/**
* 体重 kg
*/
@NotEmptyHC
@BigDecimalValHC
@MinHC(25)
@MaxHC(200)
private String weight;
/**
* 身高 cm
*
* @length 3
*/
@NotEmptyHC
@IntValHC
@MinHC(100)
@MaxHC(230)
private String height;
/**
* 出生年月日 yyyy-MM-dd
*/
@NotEmptyHC
@DateValHC(pattern = "yyyy-MM-dd")
private String birthday;
/**
* 性别 1:男2:女
*
* @length 1
*/
@NotEmptyHC
@EnumHC(enumTypes = GenderRealEnum.class)
private String gender;
/**
* 体力活动等级
*
* @length 1
*/
@NotEmptyHC
@Pattern(regexp = "^[1-5]$", message = "activityLevel 不合法")
private String activityLevel;
/**
* 运动等级
*
* @length 1
*/
@EnumHC(enumTypes = ExerciseLevelEnum.class)
private String exerciseRiskLevel;
/**
* 疾病情况
*/
private List<HealthProblemInfo> healthProblemInfos;
/**
* NULL 营养素状态信息 当健康问题包含 NUTRIENT_DEFICIENCY 时此处不可为空
*/
private List<NutrientStateInfo> nutrientStateInfos;
/**
* NUll 分娩日期,性别为女性时才能赋值 yyyy-MM-dd
*/
@DateValHC(pattern = "yyyy-MM-dd")
private String deliveryDate;
/**
* NULL 哺乳状态,性别为女性时才能赋值
* <p>
* {@link com.jiankangyouyi.cloud.data.center.api.enums.LactationStatusEnum}
*/
@EnumHC(enumTypes = LactationStatusEnum.class)
@SizeHC(1)
private String lactationStatus;
/**
* NULL 民族 (膳食使用时数据来源——字典——字典大类:食物库,字典子类:禁忌民族)
*/
@SizeHC(value = 16)
private String nation;
/**
* 所在的地域
* (膳食使用时数据来源——字典——字典大类:食物库,字典子类:国家及地区)
*/
@SizeHC(value = 16)
private String area;
/**
* 喜好口味
* (膳食使用时数据来源——字典——字典大类:食物库,字典子类:口味)
*/
private List<String> taste;
/**
* 糖尿病用药情况,不传默认4
* {@link com.jiankangyouyi.cloud.data.center.api.enums.Type2DiabetesPharmacyEnum}
*/
@SizeHC(1)
private String type2DiabetesPharmacyCode;
/**
* 过敏原禁忌标签 {@link com.jiankangyouyi.cloud.data.center.api.enums.AllergenTabooTagEnum}
*/
private List<String> allergenTabooTags;
/**
* 配餐日期-起
*/
@NotEmptyHC
@DateValHC(pattern = "yyyy-MM-dd")
private String planningDateStart;
/**
* 配餐日期-止
*/
@NotEmptyHC
@DateValHC(pattern = "yyyy-MM-dd")
private String planningDateEnd;
/**
* 是否强行配餐,true:无视已存计划重新生成所有,false: 只填补不存在的计划
*/
@BooleanValHC
@NotNullHC
private Boolean reMatch;
}
package com.jiankangyouyi.cloud.food_match.model.dto.request.match;
import com.jiankangyouyi.cloud.data.center.api.model.entity.component.HealthProblemInfo;
import com.jiankangyouyi.cloud.food_match.model.dto.request.AbstractHttpApiRequestDTO;
import lombok.Data;
import org.apache.commons.collections4.CollectionUtils;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
/**
* @description: 换一换请求DTO
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2021/8/20 4:23 下午
*/
@Data
public class ChangeFoodApiRequestDTO extends AbstractHttpApiRequestDTO {
/**
* 用户id
*/
private String userId;
/**
* 体重 kg
*/
private BigDecimal weight;
/**
* 身高 cm
*/
private int height;
/**
* 出生年月日 yyyy-MM-dd
*/
private String birthday;
/**
* 性别 1:男2:女
*/
private String gender;
/**
* 体力活动等级
*/
private String activityLevel;
/**
* 运动等级
*/
private Integer exerciseRiskLevel;
/**
* 疾病情况
*/
private List<HealthProblemInfo> healthProblemInfos;
/**
* 时令
*/
private String userSeason;
/**
* 过敏原禁忌标签 {@link com.jiankangyouyi.cloud.data.center.api.enums.AllergenTabooTagEnum}
*/
private List<String> allergenTabooTags;
/**
* 需要换的餐次
*/
private String suitMeal;
/**
* NULL 民族 (膳食使用时数据来源——字典——字典大类:食物库,字典子类:禁忌民族)
*/
private String nation;
/**
* 所在的地域
* (膳食使用时数据来源——字典——字典大类:食物库,字典子类:国家及地区)
*/
private String area;
/**
* 喜好口味
* (膳食使用时数据来源——字典——字典大类:食物库,字典子类:口味)
*/
private List<String> taste;
/**
* 配餐日期
*/
private String planningDate;
/**
* 早餐食物
*/
private List<MatchResFoodInfo> breakfastRes;
/**
* 早+餐食物
*/
private List<MatchResFoodInfo> breakfastExtraRes;
/**
* 午餐食物
*/
private List<MatchResFoodInfo> lunchRes;
/**
* 午+餐食物
*/
private List<MatchResFoodInfo> lunchExtraRes;
/**
* 晚餐食物
*/
private List<MatchResFoodInfo> supperRes;
/**
* 晚+餐食物
*/
private List<MatchResFoodInfo> supperExtraRes;
/**
* 换一换食物所处餐次
* 1早餐 2早+ 3午餐 4午+ 5晚餐 6晚+
*/
private int changeMealCode;
/**
* 换一换食物所处位置,从0开始
*/
private int changeFoodIndex;
/**
* 食物候选列表数量
*/
private int foodNum;
/**
* 是否忽略餐次比例,不对外暴露,别写进文档
*/
private boolean ignoreMealRatio;
/**
* 是否放弃约束
*/
private Boolean isAbandonConstraint;
public Set<String> hasFoodIds() {
Set<String> res = new LinkedHashSet<>();
if (CollectionUtils.isNotEmpty(this.getBreakfastRes()))
res.addAll(this.getBreakfastRes().stream().collect(Collectors.groupingBy(MatchResFoodInfo::getFoodId)).keySet());
if (CollectionUtils.isNotEmpty(this.getBreakfastExtraRes()))
res.addAll(this.getBreakfastExtraRes().stream().collect(Collectors.groupingBy(MatchResFoodInfo::getFoodId)).keySet());
if (CollectionUtils.isNotEmpty(this.getLunchRes()))
res.addAll(this.getLunchRes().stream().collect(Collectors.groupingBy(MatchResFoodInfo::getFoodId)).keySet());
if (CollectionUtils.isNotEmpty(this.getLunchExtraRes()))
res.addAll(this.getLunchExtraRes().stream().collect(Collectors.groupingBy(MatchResFoodInfo::getFoodId)).keySet());
if (CollectionUtils.isNotEmpty(this.getSupperRes()))
res.addAll(this.getSupperRes().stream().collect(Collectors.groupingBy(MatchResFoodInfo::getFoodId)).keySet());
if (CollectionUtils.isNotEmpty(this.getSupperExtraRes()))
res.addAll(this.getSupperExtraRes().stream().collect(Collectors.groupingBy(MatchResFoodInfo::getFoodId)).keySet());
return res;
}
/**
* 配餐成功的食物精简结果
*/
@Data
public static class MatchResFoodInfo implements Serializable {
private String foodId;
private int gram;
}
}
package com.jiankangyouyi.cloud.food_match.model.dto.request.match;
import com.jiankangyouyi.cloud.core.validator.annotation.NotEmptyHC;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 手动换一换
*
* @author: june
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class ChangeFoodSelfRequestV4DTO extends APIReSaveFoodMatchResRequestDTOV2 {
/**
* 是否强制替换
*/
@NotEmptyHC
private Boolean isForce;
}
package com.jiankangyouyi.cloud.food_match.model.dto.request.match;
import com.jiankangyouyi.cloud.core.validator.annotation.*;
import com.jiankangyouyi.cloud.food_match.api.enums.FoodMealTypeEnum;
import com.jiankangyouyi.cloud.food_match.model.dto.request.AbstractHttpApiRequestDTO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Objects;
import java.util.Set;
/**
* @description: 整餐换一换请求dto
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2022/1/18 5:03 下午
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class ChangeMealRequestApiDTO extends AbstractHttpApiRequestDTO {
/**
* 日期 格式yyyy-MM-dd
*/
@NotEmptyHC
@DateValHC(pattern = "yyyy-MM-dd")
private String recipesDate;
/**
* 用户id
*/
@NotEmptyHC
@SizeHC(64)
private String userId;
/**
* 餐次类型 1早餐2早+3午餐4午+5晚餐6晚+
*/
@NotEmptyHC
@IntValHC
@EnumHC(enumTypes = FoodMealTypeEnum.class)
@SizeHC(1)
private String mealType;
/**
* 不可变食物ids
*/
private Set<String> immutableFoodIds;
/**
* 是否放弃约束条件
*/
private Boolean discard = false;
/**
* 是否限制热量 - 默认true
*/
private Boolean isLimitEnergy;
/**
* 是否放弃约束
*/
private Boolean isAbandonConstraint;
public Boolean getLimitEnergy() {
if (Objects.isNull(isLimitEnergy)) {
return true;
}
return isLimitEnergy;
}
}
package com.jiankangyouyi.cloud.food_match.model.dto.request.match;
import com.jiankangyouyi.cloud.core.validator.annotation.DateValHC;
import com.jiankangyouyi.cloud.core.validator.annotation.NotEmptyHC;
import com.jiankangyouyi.cloud.core.validator.annotation.SizeHC;
import com.jiankangyouyi.cloud.food_match.model.dto.request.AbstractHttpApiRequestDTO;
import lombok.*;
import org.hibernate.validator.constraints.Length;
/**
* @description: 删除指定日期以后配餐请求dto
* @author: 刘彬
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class DelMatchFoodRequestDTO extends AbstractHttpApiRequestDTO {
private static final long serialVersionUID = 1L;
/**
* 用户id
*/
@NotEmptyHC
@SizeHC(value = 64)
private String userId;
@NotEmptyHC
@DateValHC(pattern = "yyyy-MM-dd")
@Length(min = 10, max = 10, message = "请求参数delDateBegin不合法,支持格式yyyy-MM-dd")
private String delDateBegin;
}
package com.jiankangyouyi.cloud.food_match.model.dto.request.match;
import com.jiankangyouyi.cloud.core.validator.annotation.SizeHC;
import com.jiankangyouyi.cloud.data.center.api.model.entity.component.HealthProblemInfo;
import com.jiankangyouyi.cloud.data.center.api.model.entity.component.NutrientStateInfo;
import com.jiankangyouyi.cloud.food_match.model.dto.request.AbstractHttpApiRequestDTO;
import lombok.*;
import java.math.BigDecimal;
import java.util.List;
/**
* @description: 配餐请求dto
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2021/7/26 3:32 下午
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class MatchFoodV2RequestDTO extends AbstractHttpApiRequestDTO {
private static final long serialVersionUID = 1L;
/**
* 用户id
*/
private String userId;
/**
* 体重 kg
*/
private BigDecimal weight;
/**
* 身高 cm
*/
private int height;
/**
* 出生年月日 yyyy-MM-dd
*/
private String birthday;
/**
* 性别 1:男2:女
*/
private String gender;
/**
* 体力活动等级
*/
private String activityLevel;
/**
* 运动等级
*/
private Integer exerciseRiskLevel;
/**
* 疾病情况
*/
private List<HealthProblemInfo> healthProblemInfos;
/**
* NULL 营养素状态信息 当健康问题包含 NUTRIENT_DEFICIENCY 时此处不可为空
*/
private List<NutrientStateInfo> nutrientStateInfos;
/**
* NUll 分娩日期,性别为女性时才能赋值 yyyy-MM-dd
*/
private String deliveryDate;
/**
* NULL 哺乳状态,性别为女性时才能赋值
* <p>
* {@link com.jiankangyouyi.cloud.data.center.api.enums.LactationStatusEnum}
*/
private String lactationStatus;
/**
* NULL 民族 (膳食使用时数据来源——字典——字典大类:食物库,字典子类:禁忌民族)
*/
private String nation;
/**
* 所在的地域
* (膳食使用时数据来源——字典——字典大类:食物库,字典子类:国家及地区)
*/
private String area;
/**
* 喜好口味
* (膳食使用时数据来源——字典——字典大类:食物库,字典子类:口味)
*/
private List<String> taste;
/**
* 配餐日期
*/
private String planningDate;
/**
* 过敏原禁忌标签 {@link com.jiankangyouyi.cloud.data.center.api.enums.AllergenTabooTagEnum}
*/
private List<String> allergenTabooTags;
/**
* 是否强行重新配餐
*/
private boolean reMatch;
/**
* 糖尿病用药情况,不传默认4
* {@link com.jiankangyouyi.cloud.data.center.api.enums.Type2DiabetesPharmacyEnum}
*/
@SizeHC(1)
private String type2DiabetesPharmacyCode;
// /**
// * 调试时使用
// */
// private Integer type;
private Integer recommendedIntakeEnergy;
/**
* 区分产品 华为 ,标品
*/
private String standard;
}
package com.jiankangyouyi.cloud.food_match.model.dto.request.match;
import com.jiankangyouyi.cloud.core.validator.annotation.DateValHC;
import com.jiankangyouyi.cloud.core.validator.annotation.NotEmptyHC;
import com.jiankangyouyi.cloud.core.validator.annotation.SizeHC;
import com.jiankangyouyi.cloud.food_match.model.dto.request.AbstractHttpApiRequestDTO;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* @description: 营养素分析
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2021/11/15 9:34 上午
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class NutrientAnalysisRequestDTO extends AbstractHttpApiRequestDTO {
/**
* 配餐计划日期
*/
@NotEmptyHC
@DateValHC(pattern = "yyyy-MM-dd")
@SizeHC(value = 10)
private String planDate;
/**
* userId
*/
@NotEmptyHC
@SizeHC(value = 64)
private String userId;
}
package com.jiankangyouyi.cloud.food_match.model.dto.request.match;
import com.jiankangyouyi.cloud.food_match.model.dto.request.AbstractHttpApiRequestDTO;
import lombok.Data;
/**
* @description: 重新保存配餐结果
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2021/8/24 2:54 下午
*/
@Data
public class ReSaveFoodMatchResRequestDTO extends AbstractHttpApiRequestDTO {
/**
* 配餐用户id
*/
private String userId;
/**
* 配餐日期
*/
private String planningDate;
/**
* 换一换食物所处餐次 1早餐 2早+ 3午餐 4午+ 5晚餐 6晚+
*/
private int changeMealCode;
/**
* 换一换食物所处位置,从0开始
*/
private int changeFoodIndex;
/**
* 更换后食物id
*/
private String changeFoodId;
/**
* 更换后的食物克数
*/
private int gram;
}
package com.jiankangyouyi.cloud.food_match.model.dto.request.match;
import com.jiankangyouyi.cloud.core.validator.annotation.DateValHC;
import com.jiankangyouyi.cloud.core.validator.annotation.NotEmptyHC;
import com.jiankangyouyi.cloud.food_match.model.dto.request.AbstractHttpApiRequestDTO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
/**
* @description: 重新保存配餐结果
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2021/8/24 2:54 下午
*/
@EqualsAndHashCode(callSuper = true)
@Data
public class ReSaveFoodMatchResRequestDTOV2 extends AbstractHttpApiRequestDTO {
/**
* 配餐用户id
* @length 64
*/
private String userId;
/**
* 配餐日期
*/
@NotEmptyHC
@DateValHC(pattern = "yyyy-MM-dd")
private String recipesDate;
/**
* 餐次类型 <br/>1:早餐<br/>2早+餐<br/>3午餐<br/>4午+餐<br/>5晚餐<br/>6晚+餐
* @length 1
*/
@Min(value = 1,message = "mealType 范围为1~6")
@Max(value = 6,message = "mealType 范围为1~6")
private int mealType;
/**
* 替换食物id
* @length 32
*/
@NotEmptyHC
private String replaceFoodId;
/**
* 被替换食物id
* @length 32
*/
@NotEmptyHC
private String byReplaceFoodId;
/**
* 更换后的食物克数
* @length 4
*/
@NotEmptyHC
private int gram;
}
package com.jiankangyouyi.cloud.food_match.model.dto.request.match;
import com.jiankangyouyi.cloud.core.validator.annotation.DateValHC;
import com.jiankangyouyi.cloud.core.validator.annotation.NotEmptyHC;
import com.jiankangyouyi.cloud.food_match.model.dto.request.AbstractHttpApiRequestDTO;
import lombok.*;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
/**
* @description: 第三方换一换请求dto
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2021/10/9 2:05 下午
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class V3ChangeFoodRequestDTO extends AbstractHttpApiRequestDTO {
/**
* 日期 格式yyyy-MM-dd
*/
@NotEmptyHC
@DateValHC(pattern = "yyyy-MM-dd")
private String recipesDate;
/**
* 用户id
* @length 64
*/
@NotEmptyHC
private String userId;
/**
* 替换食物id
* @length 32
*/
@NotEmptyHC
private String replaceFoodId;
/**
* 餐次类型 <br/>1:早餐<br/>2早+餐<br/>3午餐<br/>4午+餐<br/>5晚餐<br/>6晚+餐
*/
@Min(value = 1, message = "mealType 范围为1~6")
@Max(value = 6, message = "mealType 范围为1~6")
private int mealType;
/**
* 是否放弃约束-默认放弃
*/
private Boolean isAbandonConstraint;
}
package com.jiankangyouyi.cloud.food_match.model.dto.request.match.food;
import com.jiankangyouyi.cloud.core.validator.annotation.IntValHC;
import com.jiankangyouyi.cloud.food_match.model.dto.request.AbstractHttpApiRequestDTO;
import lombok.*;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Objects;
/**
* @description: 配餐请求dto
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2021/7/26 3:32 下午
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class GetFoodNutrientInfoV2RequestDTO extends AbstractHttpApiRequestDTO {
private static final long serialVersionUID = 1L;
/**
* 食物id
*/
@NotBlank(message = "食物ID不能为空")
@Length(max = 64, message = "食物ID长度不能超过64")
private String foodId;
/**
* 克数
*/
@NotNull(message = "克数不能为空")
@IntValHC(message = "克数必须为整数")
@Min(value = 1, message = "克数不能小于1")
@Max(value = 9999, message = "克数长度不能超过4")
private String gram;
/**
* 过敏原禁忌标签 {@link com.jiankangyouyi.cloud.data.center.api.enums.AllergenTabooTagEnum}
*/
private List<String> allergenTabooTags;
public String getFoodId() {
return foodId;
}
public void setFoodId(String foodId) {
this.foodId = foodId;
}
public Integer getGram() {
if (Objects.isNull(gram)) {
return null;
}
return Integer.valueOf(gram);
}
public void setGram(String gram) {
this.gram = gram;
}
public void setGram(Integer gram) {
if (Objects.isNull(gram)) {
this.gram = null;
return;
}
this.gram = String.valueOf(getGram());
}
}
package com.jiankangyouyi.cloud.food_match.model.dto.request.match.test;
import com.jiankangyouyi.cloud.data.center.api.model.dto.response.EnergyBalancePlanInfoResponseDTO;
import com.jiankangyouyi.cloud.data.center.api.model.entity.EnergyRatio;
import com.jiankangyouyi.cloud.data.center.api.model.entity.MealRatio;
import com.jiankangyouyi.cloud.food_match.api.model.vo.FoodMatchVO;
import com.jiankangyouyi.cloud.food_match.model.dto.request.match.APIMatchFoodV2RequestDTO;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;
/**
* 测试参数
*
* @author june
* @date 2022/11/02
*/
@Data
@Slf4j
public class MatchTestParam {
public static final ThreadLocal<MatchTestParam> PARAM = new ThreadLocal<>();
/**
* 能量比例
*/
private EnergyRatio energyRatio;
/**
* 餐次比例
*/
private List<MealRatio> mealRatio;
/**
* 批次ID
*/
private String batchId;
/**
* 备注
*/
private String remark;
/**
* 三餐能量最小值缩减
*/
private BigDecimal mealsEnergyMinCut = BigDecimal.valueOf(0.005);
/**
* 三餐能量最大值缩减
*/
private BigDecimal mealsEnergyMaxCut = BigDecimal.valueOf(0.01);
/**
* 膳食结构带公式的下限缩减
*/
private BigDecimal dietaryMinCut = BigDecimal.valueOf(0.05);
/**
* 膳食结构带公式的上缩减
*/
private BigDecimal dietaryMaxCut = BigDecimal.valueOf(0.03);
/**
* 禽肉蛋-膳食结构 - g
*/
private BigDecimal dietaryEegCut = BigDecimal.valueOf(1);
// 以下参数不支持传参
/**
* 能量平衡计划
*/
private EnergyBalancePlanInfoResponseDTO energyBalancePlan;
/**
* 配餐结果
*/
private FoodMatchVO matchResult;
/**
* 配餐请求
*/
private APIMatchFoodV2RequestDTO matchRequest;
/**
* 是否插入日志
*/
private Boolean isInsertLog = Boolean.FALSE;
/**
* 设置测试参数
*
* @param testParam 测试参数
*/
public static void setTestParam(MatchTestParam testParam) {
if (Objects.isNull(testParam)) {
testParam = new MatchTestParam();
}
PARAM.set(testParam);
}
/**
* 获取测试参数
*
* @return {@link MatchTestParam}
*/
public static MatchTestParam getTestParam() {
MatchTestParam testParam = PARAM.get();
if (Objects.isNull(testParam)) {
testParam = new MatchTestParam();
setTestParam(testParam);
}
return testParam;
}
/**
* 清空测试参数
*/
public static void clearTestParam() {
PARAM.remove();
}
}
package com.jiankangyouyi.cloud.food_match.model.dto.request.rule;
import com.jiankangyouyi.cloud.data.center.api.model.entity.MealRatio;
import com.jiankangyouyi.cloud.data.center.api.model.entity.component.HealthProblemInfo;
import com.jiankangyouyi.cloud.data.center.api.model.entity.component.NutrientStateInfo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.Set;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MealFoodConditionRequestDTO {
/***
* 配餐 餐次
*/
List<MealRatio> mealRatio;
/**
* 排除的食物ids
*/
private Set<String> historyFoodIds;
/**
* 个人健康问题
*/
private List<HealthProblemInfo> healthProblemInfos;
/**
* NUll 分娩日期,性别为女性时才能赋值 yyyy-MM-dd
*/
private String deliveryDate;
/**
* 过敏原禁忌标签 {@link com.jiankangyouyi.cloud.data.center.api.enums.AllergenTabooTagEnum}
*/
private List<String> allergenTabooTags;
/**
* NULL 哺乳状态,性别为女性时才能赋值
* <p>
* {@link com.jiankangyouyi.cloud.data.center.api.enums.LactationStatusEnum}
*/
private String lactationStatus;
/**
* NULL 营养素状态信息 当健康问题包含 NUTRIENT_DEFICIENCY 时此处不可为空
*/
private List<NutrientStateInfo> nutrientStateInfos;
/**
* NULL 民族 (膳食使用时数据来源——字典——字典大类:食物库,字典子类:禁忌民族)
*/
private List<String> nations;
/**
* 所在的地域
* (膳食使用时数据来源——字典——字典大类:食物库,字典子类:国家及地区)
*/
private List<String> areas;
/**
* 喜好口味
* (膳食使用时数据来源——字典——字典大类:食物库,字典子类:口味)
*/
private List<String> taste;
/**
* 时令
*/
private String userSeason;
}
package com.jiankangyouyi.cloud.food_match.model.dto.response.match;
import com.jiankangyouyi.cloud.core.validator.annotation.SizeHC;
import com.jiankangyouyi.cloud.data.center.api.model.entity.component.HealthProblemInfo;
import com.jiankangyouyi.cloud.data.center.api.model.entity.component.NutrientStateInfo;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
/**
* @description: 用户最后一次配餐请求的请求信息
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2021/7/30 5:43 下午
*/
@Data
public class UserLastFoodMatchReqInfoResponseDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 用户id
*/
@SizeHC(value = 32)
private String userId;
/**
* 体重 kg
* @length 5,2
*/
private BigDecimal weight;
/**
* 身高 cm
* @length 3
*/
private int height;
/**
* 出生年月日 yyyy-MM-dd
* @length 10
*/
private String birthday;
/**
* 性别 1:男2:女
* @length 1
*/
private String gender;
/**
* 体力活动等级
* @length 1
*/
private String activityLevel;
/**
* 运动等级
* @length 1
*/
private Integer exerciseRiskLevel;
/**
* 疾病情况
*/
private List<HealthProblemInfo> healthProblemInfos;
/**
* NULL 营养素状态信息 当健康问题包含 NUTRIENT_DEFICIENCY 时此处不可为空
*/
private List<NutrientStateInfo> nutrientStateInfos;
/**
* NUll 分娩日期,性别为女性时才能赋值 yyyy-MM-dd
* @length 10
*/
private String deliveryDate;
/**
* NULL 哺乳状态,性别为女性时才能赋值
* <p>
* {@link com.jiankangyouyi.cloud.data.center.api.enums.LactationStatusEnum}
* @length 1
*/
private String lactationStatus;
/**
* 配餐日期 yyyy-MM-dd
* @length 10
*/
private String planningDate;
/**
* NULL 民族 (膳食使用时数据来源——字典——字典大类:食物库,字典子类:禁忌民族)
* @length 16
*/
private String nation;
/**
* 所在的地域
* (膳食使用时数据来源——字典——字典大类:食物库,字典子类:国家及地区)
* @length 16
*/
private String area;
/**
* 喜好口味
* (膳食使用时数据来源——字典——字典大类:食物库,字典子类:口味)
*/
private List<String> taste;
/**
* 过敏原禁忌标签 {@link com.jiankangyouyi.cloud.data.center.api.enums.AllergenTabooTagEnum}
*/
private List<String> allergenTabooTags;
/**
* 糖尿病用药情况
* {@link com.jiankangyouyi.cloud.data.center.api.enums.Type2DiabetesPharmacyEnum}
*/
@SizeHC(1)
private String type2DiabetesPharmacyCode;
}
package com.jiankangyouyi.cloud.food_match.model.entity.mongodb;
import com.jiankangyouyi.cloud.core.base.entity.BaseMongoEntity;
import lombok.*;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* 问题分类表
*
* @author fengxuanjun
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@CompoundIndexes(
value = {
@CompoundIndex(
name = "classifyId_-1",
def = "{'classifyId' : -1}"
)
}
)
@Document(collection = "v3.base.data.classify")
public class BaseDataClassifyDO extends BaseMongoEntity {
private static final long serialVersionUID = 1L;
/**
* NOT NULL 分类业务ID
*/
@Indexed(unique = true)
private String classifyId;
/**
* NOT NULL
* 业务属性
* 1 食材库
* 2 加工食品库
* 3 包装食品库
* 4 中医药材库
* 5 问题库
* 6 指标库
*/
private String bizProperty;
/**
* NOT NULL 上级业务ID 一级默认为”0“
*/
private String parentId;
/**
* NOT NULL 分类等级(例:一级:1,二级:2)
*/
private Integer classifyLevel;
/**
* NOT NULL 分类名称
*/
private String classifyName;
/**
* NOT NULL 分类编码(例:一级01,二级0101)
*/
private String classifyCode;
/**
* NOT NULL 排序(默认9999)
*/
private Integer rowOrder;
/**
* NULL 分类图片
*/
private String imageUrl;
/**
* 分类简介
*/
private String description;
/**
* 临床意义
*/
private String meaning;
public static final String FIELD_CLASSIFYID = "classifyId";
public static final String FIELD_BIZPROOERTY = "bizProperty";
public static final String FIELD_PARENTID = "parentId";
public static final String FIELD_CLASSIFYLEVEL = "classifyLevel";
public static final String FIELD_CLASSIFYNAME = "classifyName";
public static final String FIELD_CLASSIFYCODE = "classifyCode";
public static final String FIELD_ROWORDER = "rowOrder";
public static final String FIELD_IMAGEURL = "imageUrl";
public static final String FIELD_DESCRIPTION = "description";
public static final String FIELD_MEANING = "meaning";
}
package com.jiankangyouyi.cloud.food_match.model.entity.mongodb;
import com.jiankangyouyi.cloud.food_match.api.model.dto.response.match.FoodMatchV2ResponseDTO;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.FieldNameConstants;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.mapping.Document;
/**
* @description: 配餐结果do
*/
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@FieldNameConstants
@CompoundIndexes(
value = {
@CompoundIndex(
name = "key_-1_keyEnergy_-1",
def = "{'key' : -1, 'keyEnergy' : -1}",
unique = false
)
}
)
@Document(collection = "food_match.res_default5")
public class FoodMatchResDefaultDO extends FoodMatchV2ResponseDTO {
private static final long serialVersionUID = 1L;
@Id
private ObjectId id;
/**
* 早加
*/
private String key;
/**
* 摄入能量
*/
private Integer keyEnergy;
private String insertResultDate;
// private EnergyBalancePlanResponseDTO energyBalancePlanResponseDTO;
}
package com.jiankangyouyi.cloud.food_match.model.entity.mongodb;
import com.jiankangyouyi.cloud.food_match.enums.FoodQuantityLevelEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.FieldNameConstants;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.io.Serializable;
import java.util.List;
/**
* 动态配餐规 则
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@FieldNameConstants
@Document(collection = "v3.7.food_match.rule")
public class FoodMatchRuleDOV3_7 implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private ObjectId id;
/**
* 餐次类型 {@link com.jiankangyouyi.cloud.data.center.api.enums.MealType}
*/
private Integer mealTimesType;
/**
* 餐类 key 唯一标示
*/
private String mealKey;
/**
* 是否支持加餐
* v3.7
*/
private boolean extra;
/**
* 热量等级 {@link FoodQuantityLevelEnum}
* v3.7
*/
private List<String> quantityLevels;
/**
* 过敏原禁忌标签 {@link com.jiankangyouyi.cloud.data.center.api.enums.AllergenTabooTagEnum}
*/
private List<String> allergenTabooTags;
/**
* 推荐食物坑位
*/
private List<List<FoodMatchRuleFoodDOV3_7>> foodMatchRuleFoodList;
}
package com.jiankangyouyi.cloud.food_match.model.entity.mongodb;
import lombok.Data;
import java.util.List;
import java.util.Set;
@Data
public class FoodMatchRuleFoodDOV3_7 {
/**
* 一级分类 多个分类是或的关系
*/
private String classify1;
private String c1Name;
/**
* 二级分类 多个分类是或的关系
*/
private String classify2;
private String c2Name;
/**
* 三级分类是或的关系
*/
private String classify3;
private String c3Name;
/**
* 排除标签 只能为什么标签 比如只能为干标签
*/
private List<String> hasTag;
}
package com.jiankangyouyi.cloud.food_match.model.entity.mongodb;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jiankangyouyi.cloud.basedata.api.enums.food.AuditStatusValidEnum;
import com.jiankangyouyi.cloud.basedata.api.model.entity.foodv4.FoodMaterial;
import com.jiankangyouyi.cloud.core.validator.annotation.EnumHC;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import java.util.Date;
import java.util.List;
/**
* 食材表
*
* @author :yangsongbo
*/
@CompoundIndexes(
value = {
@CompoundIndex(
name = "foodId_-1",
def = "{'foodId' : -1}",
unique = true
),
@CompoundIndex(
name = "foodName_1",
def = "{'foodName' : 1}"
),
@CompoundIndex(
name = "updateTime_-1__id_-1",
def = "{'updateTime' : -1,'_id' : -1}"
)
}
)
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Document(collection = "v4.food.material")
public class FoodMaterialDO extends FoodMaterial {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@Id
private ObjectId _id;
/**
* 更新时间
*/
@DateTimeFormat(
pattern = "yyyy-MM-dd HH:mm:ss"
)
@JsonFormat(
timezone = "GMT+8",
pattern = "yyyy-MM-dd HH:mm:ss"
)
private Date updateTime;
/**
* 创建时间
*/
@DateTimeFormat(
pattern = "yyyy-MM-dd HH:mm:ss"
)
@JsonFormat(
timezone = "GMT+8",
pattern = "yyyy-MM-dd HH:mm:ss"
)
private Date createTime;
/**
* 创建日期 yyyy-MM-dd
*/
private String createDate;
/**
* 操作人账号
*/
private String operateAccount;
/**
* 审核状态
* <p>
* {@link AuditStatusValidEnum}
*/
@NotBlank(message = "请求参数auditStatus不能为空")
@EnumHC(enumTypes = AuditStatusValidEnum.class, message = "请求参数auditStatus不合法")
private String auditStatus;
/**
* 创建者账号
*/
private String createAccount;
/**
* 驳回理由
*/
private List<String> reasonsForRejection;
/**
* 采纳时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date adoptTime;
/**
* 采纳人账号
*/
private String adoptAccount;
public static final String FIELD_ID = "_id";
public static final String FIELD_UPDATETIME = "updateTime";
public static final String FIELD_CREATETIME = "createTime";
public static final String FIELD_ADOPTTIME = "adoptTime";
public static final String FIELD_AUDITSTATUS = "auditStatus";
public static final String FIELD_CREATEDATE = "createDate";
public static final String FIELD_OPERATEACCOUNT = "operateAccount";
public static final String FIELD_CREATE_ACCOUNT = "createAccount";
public static final String FIELD_ADOPT_ACCOUNT = "adoptAccount";
}
package com.jiankangyouyi.cloud.food_match.model.entity.mongodb;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.jiankangyouyi.cloud.basedata.api.enums.food.AuditStatusValidEnum;
import com.jiankangyouyi.cloud.basedata.api.model.entity.foodv4.FoodProcess;
import com.jiankangyouyi.cloud.core.validator.annotation.EnumHC;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotBlank;
import java.util.Date;
import java.util.List;
/**
* 加工食品表
*
* @author :yangsongbo
*/
@CompoundIndexes(
value = {
@CompoundIndex(
name = "foodId_-1",
def = "{'foodId' : -1}",
unique = true
),
@CompoundIndex(
name = "majorMaterials_foodId_-1_foodStatus_1",
def = "{'majorMaterials.foodId' : -1,'foodStatus':1}"
),
@CompoundIndex(
name = "minorMaterials_foodId_-1_foodStatus_1",
def = "{'minorMaterials.foodId' : -1,'foodStatus':1}"
),
@CompoundIndex(
name = "foodName_1",
def = "{'foodName' : 1}"
),
@CompoundIndex(
name = "updateTime_-1__id_-1",
def = "{'updateTime' : -1,'_id' : -1}"
)
}
)
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Document(collection = "v4.food.process")
public class FoodProcessDO extends FoodProcess {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@Id
private ObjectId _id;
/**
* 更新时间
*/
@DateTimeFormat(
pattern = "yyyy-MM-dd HH:mm:ss"
)
@JsonFormat(
timezone = "GMT+8",
pattern = "yyyy-MM-dd HH:mm:ss"
)
private Date updateTime;
/**
* 创建时间
*/
@DateTimeFormat(
pattern = "yyyy-MM-dd HH:mm:ss"
)
@JsonFormat(
timezone = "GMT+8",
pattern = "yyyy-MM-dd HH:mm:ss"
)
private Date createTime;
/**
* 创建时间 yyyy-MM-dd
*/
private String createDate;
/**
* 审核状态
* <p>
* {@link AuditStatusValidEnum}
*/
@NotBlank(message = "请求参数auditStatus不能为空")
@EnumHC(enumTypes = AuditStatusValidEnum.class, message = "请求参数auditStatus不合法")
private String auditStatus;
/**
* 操作人账号
*/
private String operateAccount;
/**
* 创建者账号
*/
private String createAccount;
/**
* 驳回理由
*/
private List<String> reasonsForRejection;
/**
* 采纳时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
private Date adoptTime;
/**
* 采纳人账号
*/
private String adoptAccount;
public static final String FIELD_ID = "_id";
public static final String FIELD_UPDATETIME = "updateTime";
public static final String FIELD_CREATETIME = "createTime";
public static final String FIELD_AUDITSTATUS = "auditStatus";
public static final String FIELD_CREATEDATE = "createDate";
public static final String FIELD_OPERATEACCOUNT = "operateAccount";
public static final String FIELD_CREATE_ACCOUNT = "createAccount";
}
package com.jiankangyouyi.cloud.food_match.model.entity.mongodb.test;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
/**
* 配餐日志 汇总信息
*
* @author june
* @date 2022/11/03
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class FoodMatchLogCollect37 {
/**
* 总和
*/
private BigDecimal total;
/**
* 上线值
*/
private BigDecimal limitMin;
/**
* 下限制
*/
private BigDecimal limitMax;
}
package com.jiankangyouyi.cloud.food_match.model.third_party.request;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.jiankangyouyi.cloud.core.util.json.serialize.QiniuKeyToUrlJsonSerialize;
import com.jiankangyouyi.cloud.core.validator.annotation.*;
import com.jiankangyouyi.cloud.food_match.api.enums.GenderEnum;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
/**
* @description: 配餐条件
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2021/10/9 9:47 上午
*/
@Data
public class ThirdPartyFoodMatchCondition implements Serializable {
/**
* 生日
*/
@DateValHC(pattern = "yyyy-MM-dd")
private String birthday;
/**
* 身高
*/
@IntValHC
@SizeHC(3)
@MinHC(100)
@MaxHC(230)
private String height;
/**
* 体重
*/
@BigDecimalValHC
@MinHC(25)
@MaxHC(200)
private String weight;
/**
* 性别
*/
@EnumHC(enumTypes = GenderEnum.class)
private String gender;
/**
* 口味
*/
private String taste;
/**
* 民族
*/
private String nation;
/**
* 地区
*/
private String region;
/**
* 加餐列表,没有的话默认三餐<p/>
* 1早2午3晚4早+5午+6晚+
*/
private List<String> extraMealList;
private List<NoEatFoodInfo> notEatFoodList;
/**
* 管理目标<p/>
* 1减脂2增肌3保持健康4塑形
*/
private String management;
private List<CrowdInfo> crowdManagement;
/**
* 摄入能量
*/
@NotNull(message = "energy not null")
// @Min(value = 1200,message = "energy最小为1000")
// @Max(value = 3000,message = "energy最大为3000")
private Integer energy;
/**
* 是否强制配餐
*/
private Boolean reMatch;
/**
* 不吃食物信息
*/
@Data
public static class NoEatFoodInfo implements Serializable {
private String foodId;
private String foodType;
private String foodName;
private int value;
private int heat;
@JsonSerialize(using = QiniuKeyToUrlJsonSerialize.class)
private String imageUrl;
private String unit;
private String minQuantity;
private String minQuantityEnergy;
}
@Data
public static class CrowdInfo implements Serializable {
private String crowd;
private String management;
}
}
package com.jiankangyouyi.cloud.food_match.model.third_party.response;
import com.jiankangyouyi.cloud.food_match.model.third_party.request.ThirdPartyFoodMatchCondition;
import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* @description: 第三方换一换响应
* @author: zyj
* @email: zhaoyujie@jiankangyouyi.com
* @date: 2021/10/9 2:15 下午
*/
@Data
public class ThirdPartyChangeFoodResponseDTO implements Serializable {
/**
* 换一换食物候选列表
*/
private List<ThirdPartyFoodMatchCondition.NoEatFoodInfo> foodList=new ArrayList<>();
/**
* 是否为最优方案
*/
private boolean optimalCase;
}
......@@ -27,6 +27,7 @@ public class Starter {
.parallelStream().map(GetClassCommentUtils::execute)
.filter(Optional::isPresent)
.map(Optional::get)
.distinct()
.sorted(Comparator.comparing(DocumentInfoDTO::getDocumentName))
.flatMap(dto -> MarkdownUtils.getOneDocumentContent(dto).stream())
.collect(Collectors.toList());
......
......@@ -90,5 +90,24 @@ public class DocumentInfoDTO {
this.describe = describe;
}
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
DocumentInfoDTO that = (DocumentInfoDTO) o;
return documentName.equals(that.documentName);
}
@Override
public int hashCode() {
return documentName.hashCode();
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment