package org.jeecg.yw.spark;

import com.alibaba.fastjson.JSONObject;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class index {
    // 获取分数
    public static double getScore(Map<String, Object> map) {
        // 值分为age，weight，sleepTime，tableData（是一个json数组）
        //计算规则如下，满分为100，其中年龄只做一个浮动值，从7-18岁，算法为总分*（100+岁数-10）%，即十岁以上的总分会比较高
        //体重，每减少1kg，总分减少1%，每增加1kg，总分增加1%，便准体重为
        //睡眠时间，每减少1小时，总分减少1%，每增加1小时，总分增加1%，便准睡眠时间为8小时
        //获取年龄，体重，睡眠时间
        int age = Integer.parseInt(map.get("age").toString());
        int weight = Integer.parseInt(map.get("weight").toString());
        int sleepTime = Integer.parseInt(map.get("sleepTime").toString());
        // 检查tableData是否是List类型
        Object tableDataObject = map.get("tableData");
        String tableData = map.get("tableData").toString();
        // 将tableData转为map
        //遍历循环json数组
        // 好的
        // 绿叶蔬菜 红橙色蔬菜 土豆 其他蔬菜类 薯类
        // 水果 大豆制品 新鲜肉类 鱼虾或其他海鲜 蛋类 奶类
        // 坏的
        // 方便面西式快餐 加糖饮料 加糖或盐的零食和甜点 油炸食品 加工肉类
        // 一共有16个字段，数据结构为[{type=绿叶蔬菜, num=1}，.. 其中数字为1-5
        // 计算方式为基础分数为100，每个好的食物加N*（1.X）分，每个坏的食物减N*（1.X）分 其中X是num,N是100/16=6.25
        double Score = 100;
        if (tableDataObject instanceof List) {
            List<Map<String, Object>> tableDataList = (List<Map<String, Object>>) tableDataObject;
            // 遍历列表
            for (Map<String, Object> item : tableDataList) {
                // 例如，获取type和num
                String type = item.get("type").toString();
                int num = Integer.parseInt(item.get("num").toString());
                if (type.equals("绿叶蔬菜") || type.equals("红橙色蔬菜") || type.equals("土豆") || type.equals("其他蔬菜类") || type.equals("薯类") || type.equals("水果") || type.equals("大豆制品") || type.equals("新鲜肉类") || type.equals("鱼虾或其他海鲜") || type.equals("蛋类") || type.equals("奶类")) {
                    Score += 6.25 * (10 + num) / 10;
                } else {
                    Score -= 9.25 * (10 + num) / 10;
                }
            }
        }
        // 计算年龄
        Score = (int) (Score * (100 + age - 10) / 100);
        // 计算体重
        Score = (int) (Score * (100 + weight - 60) / 100);
        // 计算睡眠时间
        Score = (int) (Score * (100 + sleepTime - 8) / 100);
        // 最高不超过97
        if (Score > 97) {
            Score = 97;
        }
        return Score;
    }
}
