package com.syjy.calculate.util;

import com.googlecode.aviator.AviatorEvaluator;
import com.syjy.calculate.entity.CalculateResult;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.stereotype.Component;

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

/**
 * 生成sql文件工具
 *
 * @author zcl
 * @version 1.0
 * @since 2022/8/8 9:30
 */
@Component
public class Common {

    /**
     *
     * @param formulaContent 公式内容
     * @param province 省调
     * @param formulaType 公式类型
     * @param electricType 场站类型
     * @param calculateType 计算类型(计算/规则)
     */
    public String initFormula(String formulaContent ,String province, String formulaType, String electricType, String calculateType) {
        //缓存公式名称
        String scriptName = province + CalculateResult.UNDERLINE + formulaType + CalculateResult.UNDERLINE + electricType + CalculateResult.UNDERLINE + calculateType;
        // 初始化公式并缓存公式
        if (AviatorEvaluator.getInstance().getCachedExpressionByKey(scriptName) == null) {
            AviatorEvaluator.getInstance().compile(scriptName, formulaContent, true);
        }
        return scriptName;
    }


    /**
     * 实体类转换为Map
     * @param data 计算类型(计算/规则)
     */
    public <T> Map<String ,Object> beanToMap(T data) {
        // 上下文
        Map<String, Object> env = new HashMap<>();
        BeanMap map = BeanMap.create(data);
        // 将考核bean转为map
        for (Object key : map.keySet()) {
            env.put(String.valueOf(key), map.get(key));
        }
        return env;
    }



}
