|
@@ -24,7 +24,6 @@ import org.springframework.stereotype.Component;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.Comparator;
|
|
|
import java.util.Date;
|
|
|
-import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -43,13 +42,14 @@ public class EvaluatorFacade extends EvaluatorServiceImpl {
|
|
|
public static void main(String[] args) {
|
|
|
EvaluatorFacade evaluatorFacade = new EvaluatorFacade();
|
|
|
Evaluator evaluator = new Evaluator();
|
|
|
- evaluator.setMildValue(new BigDecimal(40.0)); // 平和体质
|
|
|
- evaluator.setFaintValue(new BigDecimal(40.0)); // 气虚体质
|
|
|
- evaluator.setWetValue(new BigDecimal(40.0)); // 湿滞体质
|
|
|
+ evaluator.setMildValue(new BigDecimal(42.0)); // 平和体质
|
|
|
+ evaluator.setFaintValue(new BigDecimal(41.0)); // 气虚体质
|
|
|
+ evaluator.setStagnantValue(new BigDecimal(82.00)); // 积滞同质
|
|
|
+ evaluator.setWetValue(new BigDecimal(41.0)); // 湿滞体质
|
|
|
evaluator.setHeartValue(new BigDecimal(41.)); // 心肝火旺体质
|
|
|
- evaluator.setStagnantValue(new BigDecimal(42.00)); // 积滞同质
|
|
|
evaluator.setExceptValue(new BigDecimal(42.01)); // 异禀体质
|
|
|
- evaluatorFacade.valueSort(evaluator);
|
|
|
+// evaluatorFacade.valueSort(evaluator);
|
|
|
+ evaluatorFacade.cal(evaluator);
|
|
|
|
|
|
}
|
|
|
|
|
@@ -62,8 +62,9 @@ public class EvaluatorFacade extends EvaluatorServiceImpl {
|
|
|
*/
|
|
|
public Evaluator cal(Evaluator evaluator) {
|
|
|
|
|
|
- Double max = getMax5(evaluator);
|
|
|
- Double min = getMin5(evaluator);
|
|
|
+ List<PhysicalVal> list = this.valueSort(evaluator);
|
|
|
+ Double max = list.get(0).getValue();
|
|
|
+ Double min = list.get(4).getValue();
|
|
|
/**
|
|
|
* 判断平和质:
|
|
|
* 平和质转化分≥60分,同时其他5种体质转化分均<30分,判断结果:“平和质”。
|
|
@@ -72,29 +73,42 @@ public class EvaluatorFacade extends EvaluatorServiceImpl {
|
|
|
* 不满足上述条件,判断结果:否。
|
|
|
*/
|
|
|
// 平和质转化分≥60分
|
|
|
- if (evaluator.getMildValue().doubleValue() >= 60.0) {
|
|
|
- if (max < 30) {
|
|
|
- // 同时其他5种体质转化分均<30分, max[2/3/4/5/6] < 30
|
|
|
- evaluator.setPhysicalRes("平和体质");
|
|
|
- evaluator.setPhysicalTypes(String.valueOf(PhysicalTypeEnum.mild.getKey()));
|
|
|
- } else if (max < 50 && min >= 30) {
|
|
|
- // 同时其他5种体质转化分均<50分,min[2/3/4/5/6] >= 30 and max[2/3/4/5/6] < 50
|
|
|
- evaluator.setPhysicalRes("基本是平和体质");
|
|
|
- evaluator.setPhysicalTypes(String.valueOf(PhysicalTypeEnum.mild.getKey()) );
|
|
|
- } else if (max < 50 && max >= 30 && min < 30){
|
|
|
- // 同时其他5种体质转化分有30-49分,max[2/3/4/5/6] < 50 and max[2/3/4/5/6] >= 30 and min[2/3/4/5/6] < 30
|
|
|
- Map map = getMap(evaluator);
|
|
|
- evaluator.setPhysicalRes("基本是平和体质兼倾向" + map.get("msg"));
|
|
|
- evaluator.setPhysicalTypes(String.valueOf(PhysicalTypeEnum.mild.getKey()) + "," + map.get("type"));
|
|
|
- } else if (max >= 50){
|
|
|
- // 同时其他5种体质转化分有>=50分, max[2/3/4/5/6] >= 50
|
|
|
- Map map = getMapWithMild(evaluator, max);
|
|
|
- // 最大值有多个【是XX体质兼有XX体质】,最大值只有1个【是XX体质】
|
|
|
- evaluator.setPhysicalRes(String.valueOf(map.get("msg")));
|
|
|
- evaluator.setPhysicalTypes(String.valueOf(map.get("type")));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
+ if (evaluator.getMildValue().doubleValue() >= 60.0) {
|
|
|
+ if (max < 30) {
|
|
|
+ // 同时其他5种体质转化分均<30分, max[2/3/4/5/6] < 30
|
|
|
+ evaluator.setPhysicalRes("平和体质");
|
|
|
+ evaluator.setPhysicalTypes(String.valueOf(PhysicalTypeEnum.mild.getKey()));
|
|
|
+ } else if (max < 50 && min >= 30) {
|
|
|
+ // 同时其他5种体质转化分均<50分,min[2/3/4/5/6] >= 30 and max[2/3/4/5/6] < 50
|
|
|
+ evaluator.setPhysicalRes("基本是平和体质");
|
|
|
+ evaluator.setPhysicalTypes(String.valueOf(PhysicalTypeEnum.mild.getKey()));
|
|
|
+ } else if (max < 50 && max >= 30 && min < 30) {
|
|
|
+ // 同时其他5种体质转化分有30-49分,max[2/3/4/5/6] < 50 and max[2/3/4/5/6] >= 30 and min[2/3/4/5/6] < 30
|
|
|
+ evaluator.setPhysicalRes("基本是平和体质兼倾向" + PhysicalTypeEnum.getName(list.get(0).getEnumNo()));
|
|
|
+ evaluator.setPhysicalTypes(String.valueOf(PhysicalTypeEnum.mild.getKey()) + "," + list.get(0).getEnumNo());
|
|
|
+ } else if (max >= 50) {
|
|
|
+ // 同时其他5种体质转化分有>=50分, max[2/3/4/5/6] >= 50
|
|
|
+ String msg = "";
|
|
|
+ String type = "";
|
|
|
+ if (evaluator.getMildValue().doubleValue() > max) {
|
|
|
+ msg = "是平和体质";
|
|
|
+ type = String.valueOf(PhysicalTypeEnum.mild.getKey());
|
|
|
+ } else if (evaluator.getMildValue().doubleValue() == max) {
|
|
|
+ msg = "是平和体质兼有" + PhysicalTypeEnum.getName(list.get(0).getEnumNo());
|
|
|
+ type = String.valueOf(PhysicalTypeEnum.mild.getKey()) + "," + list.get(0).getEnumNo();
|
|
|
+ } else {
|
|
|
+ if ((list.get(0).getValue() == list.get(1).getValue()) || (list.get(1).getValue() > 50)) {
|
|
|
+ msg = "是" + PhysicalTypeEnum.getName(list.get(0).getEnumNo()) + "兼有" + PhysicalTypeEnum.getName(list.get(1).getEnumNo());
|
|
|
+ type = list.get(0).getEnumNo() + "," + list.get(1).getEnumNo();
|
|
|
+ } else {
|
|
|
+ msg = "是" + PhysicalTypeEnum.getName(list.get(0).getEnumNo());
|
|
|
+ type = "" + list.get(0).getEnumNo();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ evaluator.setPhysicalRes(msg);
|
|
|
+ evaluator.setPhysicalTypes(type);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 判断偏颇体质:
|
|
@@ -109,260 +123,49 @@ public class EvaluatorFacade extends EvaluatorServiceImpl {
|
|
|
* 平和质转化分<60分,同时其他6种体质转化分30-49分,判断结果:倾向是XX体质。如果有两种或以上的得分一样,则按照6种偏颇体质的排列顺序为:气虚质、积滞质、湿滞质、心肝火旺质、异禀质,判断结果:“倾向是XX体质兼XX体质”,其余不考虑。如果等分倾向是体质有3个或以上,则仅选择分值最高的前两个,判断结果:“倾向是XX体质兼XX体质”,其余不考虑。
|
|
|
* 注意:有偏颇体质的不再考虑倾向体质。
|
|
|
*/
|
|
|
- else if (evaluator.getMildValue().doubleValue() < 60.0) {
|
|
|
+ else if (evaluator.getMildValue().doubleValue() < 60.0) {
|
|
|
if (max < 30) { // max[2/3/4/5/6] < 30
|
|
|
evaluator.setPhysicalRes("平和体质");
|
|
|
evaluator.setPhysicalTypes(String.valueOf(PhysicalTypeEnum.mild.getKey()));
|
|
|
- } else if (max < 50 && max >= 30 ) { // min[2/3/4/5/6] >= 30 and max[2/3/4/5/6] < 50
|
|
|
+ } else if (max < 50 && max >= 30) { // min[2/3/4/5/6] >= 30 and max[2/3/4/5/6] < 50
|
|
|
// 最大值有多个【倾向XX体质兼有XX体质】, 最大值只有1个【倾向XX体质】
|
|
|
- Map map = getMapNoMild(evaluator, "倾向是", max);
|
|
|
- evaluator.setPhysicalRes(String.valueOf(map.get("msg")));
|
|
|
- evaluator.setPhysicalTypes(String.valueOf(map.get("type")));
|
|
|
- } else if (max >= 50) { // max[2/3/4/5/6] >= 50
|
|
|
- // 最大值有多个【是XX体质兼有XX体质】,最大值只有1个【是XX体质】
|
|
|
- Map map = getMapNoMild(evaluator, "是", max);
|
|
|
- evaluator.setPhysicalRes(String.valueOf(map.get("msg")));
|
|
|
- evaluator.setPhysicalTypes(String.valueOf(map.get("type")));
|
|
|
- }
|
|
|
- }
|
|
|
- return evaluator;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取偏颇体质的最大值
|
|
|
- *
|
|
|
- * @param evaluator
|
|
|
- * @return 最大值
|
|
|
- */
|
|
|
- public Double getMax5(Evaluator evaluator) {
|
|
|
- Double max = evaluator.getFaintValue().doubleValue(); // 气虚质
|
|
|
- if (max < evaluator.getWetValue().doubleValue()) { // 湿滞质
|
|
|
- max = evaluator.getWetValue().doubleValue();
|
|
|
- }
|
|
|
- if (max < evaluator.getHeartValue().doubleValue()) { // 心肝火旺质
|
|
|
- max = evaluator.getHeartValue().doubleValue();
|
|
|
- }
|
|
|
- if (max < evaluator.getStagnantValue().doubleValue()) { // 积滞质
|
|
|
- max = evaluator.getStagnantValue().doubleValue();
|
|
|
- }
|
|
|
- if (max < evaluator.getExceptValue().doubleValue()) { // 异禀体质
|
|
|
- max = evaluator.getExceptValue().doubleValue();
|
|
|
- }
|
|
|
- return max;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取偏颇体质的最小值
|
|
|
- *
|
|
|
- * @param evaluator
|
|
|
- * @return 最小值
|
|
|
- */
|
|
|
- public Double getMin5(Evaluator evaluator) {
|
|
|
- Double min = evaluator.getFaintValue().doubleValue();// 气虚质
|
|
|
- if (min > evaluator.getWetValue().doubleValue()) { // 湿滞质
|
|
|
- min = evaluator.getWetValue().doubleValue();
|
|
|
- }
|
|
|
- if (min > evaluator.getHeartValue().doubleValue()) { // 心肝火旺质
|
|
|
- min = evaluator.getHeartValue().doubleValue();
|
|
|
- }
|
|
|
- if (min > evaluator.getStagnantValue().doubleValue()) { // 积滞质
|
|
|
- min = evaluator.getStagnantValue().doubleValue();
|
|
|
- }
|
|
|
- if (min > evaluator.getExceptValue().doubleValue()) { // 异禀体质
|
|
|
- min = evaluator.getExceptValue().doubleValue();
|
|
|
- }
|
|
|
- return min;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取无平和体质下的结果
|
|
|
- *
|
|
|
- * @param evaluator 参数
|
|
|
- * @param prefix 前缀
|
|
|
- * @param max 最大值
|
|
|
- * @return
|
|
|
- */
|
|
|
- public Map getMapNoMild(Evaluator evaluator, String prefix, Double max) {
|
|
|
- Map map = new HashMap<>();
|
|
|
- String msg = "";
|
|
|
- String type = "";
|
|
|
- max = getMax5(evaluator);
|
|
|
- int flag = 0;
|
|
|
- if (evaluator.getFaintValue().doubleValue() == max) {
|
|
|
- ++flag; // 最大值加1
|
|
|
- msg = prefix + "气虚体质";
|
|
|
- type = "2";
|
|
|
- }
|
|
|
- if (evaluator.getWetValue().doubleValue() == max && flag < 2) {
|
|
|
- if (flag == 1) {
|
|
|
- msg += "兼有湿滞体质";
|
|
|
- type += ",3";
|
|
|
- } else {
|
|
|
- msg = prefix + "湿滞体质";
|
|
|
- type = "3";
|
|
|
- }
|
|
|
- ++flag;
|
|
|
- }
|
|
|
- if (evaluator.getHeartValue().doubleValue() == max && flag < 2) {
|
|
|
- if (flag == 1) {
|
|
|
- msg += "兼有心肝火旺体质";
|
|
|
- type += ",4";
|
|
|
- } else {
|
|
|
- msg = prefix + "心肝火旺体质";
|
|
|
- type = "4";
|
|
|
- }
|
|
|
- ++flag;
|
|
|
- }
|
|
|
- if (evaluator.getStagnantValue().doubleValue() == max && flag < 2) {
|
|
|
- if (flag == 1) {
|
|
|
- msg += "兼有积滞体质";
|
|
|
- type += ",5";
|
|
|
- } else {
|
|
|
- msg = prefix + "积滞体质";
|
|
|
- type = "5";
|
|
|
- }
|
|
|
- ++flag;
|
|
|
- }
|
|
|
- if (evaluator.getExceptValue().doubleValue() == max && flag < 2) {
|
|
|
- if (flag == 1) {
|
|
|
- msg += "兼有异禀体质";
|
|
|
- type += ",6";
|
|
|
- } else {
|
|
|
- msg = prefix + "异禀体质";
|
|
|
- type = "6";
|
|
|
- }
|
|
|
- }
|
|
|
- map.put("msg", msg);
|
|
|
- map.put("type", type);
|
|
|
- return map;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取有平和体质下的结果
|
|
|
- *
|
|
|
- * @param evaluator 参数
|
|
|
- * @param max 前缀
|
|
|
- * @return
|
|
|
- */
|
|
|
- public Map getMapWithMild(Evaluator evaluator, Double max) {
|
|
|
- Map map = new HashMap<>();
|
|
|
- String msg = "";
|
|
|
- String type = "";
|
|
|
- max = getMax5(evaluator);
|
|
|
- if (evaluator.getMildValue().doubleValue() > max) {
|
|
|
- msg = "是平和体质";
|
|
|
- type = String.valueOf(PhysicalTypeEnum.mild.getKey());
|
|
|
- } else if (evaluator.getMildValue().doubleValue() == max) {
|
|
|
- if (evaluator.getFaintValue().doubleValue() == max) {
|
|
|
- msg = "是平和体质兼有气虚体质";
|
|
|
- type = "1,2";
|
|
|
- } else if (evaluator.getWetValue().doubleValue() == max) {
|
|
|
- msg = "是平和体质兼有湿滞体质";
|
|
|
- type = "1,3";
|
|
|
- } else if (evaluator.getHeartValue().doubleValue() == max) {
|
|
|
- msg = "是平和体质兼有心肝火旺体质";
|
|
|
- type = "1,4";
|
|
|
- } else if (evaluator.getFaintValue().doubleValue() == max) {
|
|
|
- msg = "是平和体质兼有积滞同质";
|
|
|
- type = "1,5";
|
|
|
- } else if (evaluator.getExceptValue().doubleValue() == max) {
|
|
|
- msg = "是平和体质兼有异禀体质";
|
|
|
- type = "1,6";
|
|
|
- }
|
|
|
- } else {
|
|
|
- int flag = 0;
|
|
|
- if (evaluator.getFaintValue().doubleValue() == max) {
|
|
|
- ++flag; // 最大值加1
|
|
|
- msg = "是气虚体质";
|
|
|
- type = "2";
|
|
|
- }
|
|
|
- if (evaluator.getWetValue().doubleValue() == max && flag < 2) {
|
|
|
- if (flag == 1) {
|
|
|
- msg += "兼有湿滞体质";
|
|
|
- type += ",3";
|
|
|
- } else {
|
|
|
- msg = "是湿滞体质";
|
|
|
- type = "3";
|
|
|
- }
|
|
|
- ++flag;
|
|
|
- }
|
|
|
- if (evaluator.getHeartValue().doubleValue() == max && flag < 2) {
|
|
|
- if (flag == 1) {
|
|
|
- msg += "兼有心肝火旺体质";
|
|
|
- type += ",4";
|
|
|
+ if (list.get(0).getValue() == list.get(1).getValue()) {
|
|
|
+ evaluator.setPhysicalRes(
|
|
|
+ "倾向是" +
|
|
|
+ PhysicalTypeEnum.getName(list.get(0).getEnumNo())
|
|
|
+ + "兼有" +
|
|
|
+ PhysicalTypeEnum.getName(list.get(1).getEnumNo()));
|
|
|
+ evaluator.setPhysicalTypes("" + list.get(0).getEnumNo() + "," + list.get(1).getEnumNo());
|
|
|
} else {
|
|
|
- msg = "是心肝火旺体质";
|
|
|
- type = "4";
|
|
|
+ evaluator.setPhysicalRes("倾向是" +
|
|
|
+ PhysicalTypeEnum.getName(list.get(0).getEnumNo()));
|
|
|
+ evaluator.setPhysicalTypes("" + list.get(0).getEnumNo());
|
|
|
}
|
|
|
- ++flag;
|
|
|
- }
|
|
|
- if (evaluator.getStagnantValue().doubleValue() == max && flag < 2) {
|
|
|
- if (flag == 1) {
|
|
|
- msg += "兼有积滞同质";
|
|
|
- type += ",5";
|
|
|
- } else {
|
|
|
- msg = "是积滞同质";
|
|
|
- type = "5";
|
|
|
- }
|
|
|
- ++flag;
|
|
|
- }
|
|
|
- if (evaluator.getExceptValue().doubleValue() == max && flag < 2) {
|
|
|
- if (flag == 1) {
|
|
|
- msg += "兼有异禀体质";
|
|
|
- type += ",6";
|
|
|
+ } else if (max >= 50) { // max[2/3/4/5/6] >= 50
|
|
|
+ // 最大值有多个【是XX体质兼有XX体质】,最大值只有1个【是XX体质】
|
|
|
+ if ((list.get(0).getValue() == list.get(1).getValue()) || (list.get(1).getValue() > 50)) {
|
|
|
+ evaluator.setPhysicalRes("是" +
|
|
|
+ PhysicalTypeEnum.getName(list.get(0).getEnumNo())
|
|
|
+ + "兼有" +
|
|
|
+ PhysicalTypeEnum.getName(list.get(1).getEnumNo()));
|
|
|
+ evaluator.setPhysicalTypes("" + list.get(0).getEnumNo() + "," + list.get(1).getEnumNo());
|
|
|
} else {
|
|
|
- msg = "是异禀体质";
|
|
|
- type = "6";
|
|
|
+ evaluator.setPhysicalRes("是" +
|
|
|
+ PhysicalTypeEnum.getName(list.get(0).getEnumNo()));
|
|
|
+ evaluator.setPhysicalTypes("" + list.get(0).getEnumNo());
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- map.put("msg", msg);
|
|
|
- map.put("type", type);
|
|
|
- return map;
|
|
|
+ return evaluator;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
- * 获取平和体质下的结果
|
|
|
+ * 对偏颇体质排序
|
|
|
*
|
|
|
* @param evaluator
|
|
|
- * @return
|
|
|
+ * @return 列表
|
|
|
*/
|
|
|
- public Map getMap(Evaluator evaluator) {
|
|
|
- Map map = new HashMap<>();
|
|
|
- String msg = "气虚体质";
|
|
|
- String type = String.valueOf(PhysicalTypeEnum.faint.getKey());
|
|
|
- Double max = evaluator.getFaintValue().doubleValue(); // 气虚质
|
|
|
-
|
|
|
- if (max < evaluator.getWetValue().doubleValue()) { // 湿滞质
|
|
|
- max = evaluator.getWetValue().doubleValue();
|
|
|
- msg = "湿滞体质";
|
|
|
- type = String.valueOf(PhysicalTypeEnum.wet.getKey());
|
|
|
- }
|
|
|
- if (max < evaluator.getHeartValue().doubleValue()) { // 心肝火旺质
|
|
|
- max = evaluator.getHeartValue().doubleValue();
|
|
|
- msg = "心肝火旺体质";
|
|
|
- type = String.valueOf(PhysicalTypeEnum.heart.getKey());
|
|
|
- }
|
|
|
- if (max < evaluator.getStagnantValue().doubleValue()) { // 积滞质
|
|
|
- max = evaluator.getStagnantValue().doubleValue();
|
|
|
- msg = "积滞体质";
|
|
|
- type = String.valueOf(PhysicalTypeEnum.stagnant.getKey());
|
|
|
- }
|
|
|
- if (max < evaluator.getExceptValue().doubleValue()) { // 异禀体质
|
|
|
- max = evaluator.getExceptValue().doubleValue();
|
|
|
- msg = "异禀体质";
|
|
|
- type = String.valueOf(PhysicalTypeEnum.except.getKey());
|
|
|
- }
|
|
|
- map.put("msg", msg);
|
|
|
- map.put("type", type);
|
|
|
- return map;
|
|
|
- }
|
|
|
-
|
|
|
private List<PhysicalVal> valueSort(Evaluator evaluator){
|
|
|
List<PhysicalVal> res = ListUtil.newArrayList();
|
|
|
//气虚体质转化分
|