wjc
2025-05-07 5d3efa4c93dde0cde474951e5310bb72ebbf4184
app/src/main/java/com/hdl/photovoltaic/other/HdlESLocalJsonLogic.java
@@ -1,5 +1,6 @@
package com.hdl.photovoltaic.other;
import android.os.Build;
import android.text.TextUtils;
import com.hdl.linkpm.sdk.core.exception.HDLException;
@@ -7,8 +8,11 @@
import com.hdl.photovoltaic.internet.HttpClient;
import com.hdl.photovoltaic.listener.CloudCallBeak;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
 * 本地json缓存逻辑
@@ -38,6 +42,10 @@
     */
    private static final String address = "https://hdl-hz-dev.oss-cn-hangzhou.aliyuncs.com/ecu";
    /**
     * 拼接符号
     */
    private final String concatenation_symbol = "%";
    /**
     * 拼接新地址
@@ -48,42 +56,69 @@
     * @return 新地址
     */
    private String getStrJointNewUrl(String fileName, String deviceType, String deviceModel) {
        return address + "/" + UserConfigManage.getInstance().getCurrentAppLanguage() + "/" + deviceType + "/" + deviceModel + "/" + fileName;
        String joinFileName = fileName + concatenation_symbol + deviceType + concatenation_symbol + deviceModel;
        if (joinFileName.equals(FileName.hdl_inv_ecu_info_pv + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.INV)
                || joinFileName.equals(FileName.hdl_inv_ecu_info_output + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.INV)
                || joinFileName.equals(FileName.hdl_inv_ecu_info_item + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.INV)
                || joinFileName.equals(FileName.hdl_inv_ecu_info_signal + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.INV)
                || joinFileName.equals(FileName.hdl_inv_ecu_info_pv + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.OFF_INV)
                || joinFileName.equals(FileName.hdl_inv_ecu_info_output + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.OFF_INV)
                || joinFileName.equals(FileName.hdl_inv_ecu_info_item + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.OFF_INV)
                || joinFileName.equals(FileName.hdl_inv_ecu_info_signal + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.OFF_INV)
                || joinFileName.equals(FileName.hdl_inv_ecu_info_input_off + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.OFF_INV)
        ) {
            return address + "/" + UserConfigManage.getInstance().getCurrentAppLanguage() + "/" + deviceType + "/" + deviceModel + "/info/" + fileName + this.getVersion(joinFileName) + ".json";
        }
        return address + "/" + UserConfigManage.getInstance().getCurrentAppLanguage() + "/" + deviceType + "/" + deviceModel + "/" + fileName + this.getVersion(joinFileName) + ".json";
    }
    /**
     * 初始化脚本url
     * 获取办版本号
     *
     * @return map
     */
    private Map<String, String> getUrlMap() {
        //注意(逆变器:ME-GSE-S5K,负载中心:ME-GSE-SPG63A,bms:ME-GSE-BMS15K,电池包:ME-GSE-B5K)设备型号不一样
    private String getVersion(String fileName) {
        Map<String, String> map = this.getFeliAndVersion();
        for (Map.Entry<String, String> entry : map.entrySet()) {
            if (entry.getKey().equals(fileName)) {
                return entry.getValue();
            }
        }
        return "";
    }
    /**
     * 文件对应版本号
     *
     * @return map
     */
    private Map<String, String> getFeliAndVersion() {
        Map<String, String> map = new HashMap<>();
        map.put(this.getStrJointNewUrl(FileName.hdl_lc_ecu_info_item, DeviceType.LC, DeviceModel.LC), DeviceModel.LC);//获取负载控制中心
        map.put(this.getStrJointNewUrl(FileName.hdl_lc_ecu_quick, DeviceType.LC, DeviceModel.LC), DeviceModel.LC); //创建电站-负载控制中心参数配置
        map.put(this.getStrJointNewUrl(FileName.hdl_inv_ecu_quick, DeviceType.INV, DeviceModel.INV), DeviceModel.INV);//创建电站-逆变器参数配置
        map.put(this.getStrJointNewUrl(FileName.hdl_inv_ecu, DeviceType.INV, DeviceModel.INV), DeviceModel.INV);//逆变器参数配置
        map.put(this.getStrJointNewUrl(FileName.hdl_inv_ecu_info_pv, DeviceType.INV, DeviceModel.INV), DeviceModel.INV);// 逆变器详情-pv
        map.put(this.getStrJointNewUrl(FileName.hdl_inv_ecu_info_output, DeviceType.INV, DeviceModel.INV), DeviceModel.INV);//逆变器详情-输出
        map.put(this.getStrJointNewUrl(FileName.hdl_inv_ecu_info_item, DeviceType.INV, DeviceModel.INV), DeviceModel.INV);//逆变器详情-item项
        map.put(this.getStrJointNewUrl(FileName.hdl_inv_ecu_info_signal, DeviceType.INV, DeviceModel.INV), DeviceModel.INV);//逆变器详情-信号点
        map.put(this.getStrJointNewUrl(FileName.hdl_bms_ecu, DeviceType.BMS, DeviceModel.INV_BMS), DeviceModel.INV_BMS);//获取BMS信息
        map.put(this.getStrJointNewUrl(FileName.hdl_battery_ecu, DeviceType.BATTERY, DeviceModel.INV_BATTERY), DeviceModel.INV_BATTERY);//电池包信息
        map.put(this.getStrJointNewUrl(FileName.hdl_battery_ecu_cell, DeviceType.BATTERY, DeviceModel.INV_BATTERY), DeviceModel.INV_BATTERY);//电池包-电芯信息
        //拼接规则:文件名_设备类型_设备信号
        map.put(FileName.hdl_lc_ecu_info_item + concatenation_symbol + DeviceType.LC + concatenation_symbol + DeviceModel.LC, Version.v_1_5_0);//获取负载控制中心
        map.put(FileName.hdl_lc_ecu_quick + concatenation_symbol + DeviceType.LC + concatenation_symbol + DeviceModel.LC, Version.v_1_5_2);//创建电站-负载控制中心参数配置
        map.put(FileName.hdl_inv_ecu_quick + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.INV, Version.v_1_5_1);//创建电站-逆变器参数配置
        map.put(FileName.hdl_inv_ecu + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.INV, Version.v_1_5_3);//逆变器参数配置//更新到v_1_5_3,目前硬件不支持
        map.put(FileName.hdl_inv_ecu_info_pv + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.INV, Version.v_1_4_2);// 逆变器详情-pv
        map.put(FileName.hdl_inv_ecu_info_output + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.INV, Version.v_1_4_2);//逆变器详情-输出
        map.put(FileName.hdl_inv_ecu_info_item + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.INV, Version.v_1_5_2);//逆变器详情-item项//更新到v_1_5_2,目前硬件不支持¬
        map.put(FileName.hdl_inv_ecu_info_signal + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.INV, Version.v_1_4_1);//逆变器详情-信号点
        map.put(FileName.hdl_bms_ecu + concatenation_symbol + DeviceType.BMS + concatenation_symbol + DeviceModel.INV_BMS, Version.v_1_4_2);//获取BMS信息
        map.put(FileName.hdl_battery_ecu + concatenation_symbol + DeviceType.BATTERY + concatenation_symbol + DeviceModel.INV_BATTERY, Version.v_1_4_2);//电池包信息
        map.put(FileName.hdl_battery_ecu_cell + concatenation_symbol + DeviceType.BATTERY + concatenation_symbol + DeviceModel.INV_BATTERY, Version.v_1_4_2);//电池包-电芯信息
        //离网逆变器
        map.put(this.getStrJointNewUrl(FileName.hdl_inv_ecu_quick_off, DeviceType.INV, DeviceModel.OFF_INV), DeviceModel.OFF_INV);//离网逆变器快速配置
        map.put(this.getStrJointNewUrl(FileName.hdl_inv_master_ecu_off, DeviceType.INV, DeviceModel.OFF_INV), DeviceModel.OFF_INV);//离网逆变器主机配置
        map.put(this.getStrJointNewUrl(FileName.hdl_inv_slave_ecu_off, DeviceType.INV, DeviceModel.OFF_INV), DeviceModel.OFF_INV);//离网逆变器从机配置
        map.put(this.getStrJointNewUrl(FileName.hdl_inv_ecu_info_pv_off, DeviceType.INV, DeviceModel.OFF_INV), DeviceModel.OFF_INV);//离网逆变器详情光伏输入
        map.put(this.getStrJointNewUrl(FileName.hdl_inv_ecu_info_input_off, DeviceType.INV, DeviceModel.OFF_INV), DeviceModel.OFF_INV);//离网逆变器详情交流输入
        map.put(this.getStrJointNewUrl(FileName.hdl_inv_ecu_info_output_off, DeviceType.INV, DeviceModel.OFF_INV), DeviceModel.OFF_INV);//离网逆变器详情交流输出
        map.put(this.getStrJointNewUrl(FileName.hdl_inv_ecu_info_item_off, DeviceType.INV, DeviceModel.OFF_INV), DeviceModel.OFF_INV);//离网逆变器详情基础参数
        map.put(this.getStrJointNewUrl(FileName.hdl_inv_ecu_info_signal_off, DeviceType.INV, DeviceModel.OFF_INV), DeviceModel.OFF_INV);//离网逆变器详情统计
        map.put(this.getStrJointNewUrl(FileName.hdl_bms_ecu_off, DeviceType.BMS, DeviceModel.OFF_INV_BMS), DeviceModel.OFF_INV_BMS);//离网逆变器BMS详情
        map.put(this.getStrJointNewUrl(FileName.hdl_battery_ecu_off, DeviceType.BATTERY, DeviceModel.OFF_INV_BATTERY), DeviceModel.OFF_INV_BATTERY);//离网逆变器电池详情
        map.put(this.getStrJointNewUrl(FileName.hdl_battery_ecu_cell_off, DeviceType.BATTERY, DeviceModel.OFF_INV_BATTERY), DeviceModel.OFF_INV_BATTERY);//离网逆变器电池电芯
        map.put(FileName.hdl_inv_ecu_quick_off + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.OFF_INV, Version.v_1_5_2);//离网逆变器快速配置
        map.put(FileName.hdl_inv_master_ecu_off + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.OFF_INV, Version.v_1_5_3);//离网逆变器快速配置
        map.put(FileName.hdl_inv_slave_ecu_off + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.OFF_INV, Version.v_1_5_2);//离网逆变器快速配置
        map.put(FileName.hdl_inv_ecu_info_pv_off + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.OFF_INV, Version.v_1_5_2);//离网逆变器快速配置
        map.put(FileName.hdl_inv_ecu_info_input_off + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.OFF_INV, Version.v_1_5_2);//离网逆变器快速配置
        map.put(FileName.hdl_inv_ecu_info_output_off + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.OFF_INV, Version.v_1_5_2);//离网逆变器快速配置
        map.put(FileName.hdl_inv_ecu_info_item_off + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.OFF_INV, Version.v_1_5_2);//离网逆变器快速配置
        map.put(FileName.hdl_inv_ecu_info_signal_off + concatenation_symbol + DeviceType.INV + concatenation_symbol + DeviceModel.OFF_INV, Version.v_1_5_2);//离网逆变器快速配置
        map.put(FileName.hdl_bms_ecu_off + concatenation_symbol + DeviceType.BMS + concatenation_symbol + DeviceModel.OFF_INV_BMS, Version.v_1_5_2);//离网逆变器快速配置
        map.put(FileName.hdl_battery_ecu_off + concatenation_symbol + DeviceType.BATTERY + concatenation_symbol + DeviceModel.OFF_INV_BATTERY, Version.v_1_5_2);//离网逆变器快速配置
        map.put(FileName.hdl_battery_ecu_cell_off + concatenation_symbol + DeviceType.BATTERY + concatenation_symbol + DeviceModel.OFF_INV_BATTERY, Version.v_1_5_2);//离网逆变器快速配置
        return map;
    }
@@ -91,26 +126,38 @@
     * 向云端获取Json【所有】脚本
     */
    public void getAllHdlESLocalJson() {
        for (Map.Entry<String, String> entry : getUrlMap().entrySet()) {
            this.getHdlESLocalJson(entry.getKey(), entry.getValue(), null);
        for (Map.Entry<String, String> str : this.getFeliAndVersion().entrySet()) {
            if (TextUtils.isEmpty(str.getKey())) {
                continue;
            }
            String[] ary = str.getKey().split(concatenation_symbol);
            String fileName = ary[0];
            String deviceType = ary[1];
            String deviceMode = ary[2];
            this.getHdlESLocalJson(fileName, deviceType, deviceMode, true, null);
        }
    }
    /**
     * 向云端获取Json【单个】脚本
     *
     * @param url         地址
     * @param fileName    文件名
     * @param deviceType  设备类型
     * @param deviceModel 设备型号
     * @param isDelPath   是否删除(true表示删除,否则不删除)
     */
    public void getHdlESLocalJson(String url, String deviceModel, CloudCallBeak<String> callBeak) {
    public void getHdlESLocalJson(String fileName, String deviceType, String deviceModel, boolean isDelPath, CloudCallBeak<String> callBeak) {
        //拼接地址
        String url = getStrJointNewUrl(fileName, deviceType, deviceModel);
        HttpClient.getInstance().requestJsonHttpGet(url, new CloudCallBeak<String>() {
            @Override
            public void onSuccess(String str) {
                saveJson(url, deviceModel, str);
                HdlLogLogic.print("获取云端脚本---" + url + "\r\n" + str, false);
            public void onSuccess(String json) {
                saveJson(fileName, deviceModel, json, isDelPath);
                HdlLogLogic.print("获取云端脚本---" + url + "\r\n" + json, false);
                if (callBeak != null) {
                    callBeak.onSuccess(str);
                    callBeak.onSuccess(json);
                }
            }
@@ -127,31 +174,24 @@
    /**
     * 读取本地json数据
     *
     * @param url         地址
     * @param fileName    文件名
     * @param deviceModel 设备型号
     */
    public String readHdlESLocalJson(String url, String deviceModel) {
        return this.readJson(url, deviceModel);
    public String readHdlESLocalJson(String fileName, String deviceModel) {
        return this.readJson(fileName, deviceModel);
    }
    /**
     * 保存json数据
     *
     * @param fileUrlOrFileName 地址或者文件名
     * @param deviceModel       设备型号(逆变器,负载中心,bms,电池包)
     * @param json              内容
     * @param fileName    文件名
     * @param deviceModel 设备型号(逆变器,负载中心,bms,电池包)
     * @param json        json内容
     * @param isDelPath   是否删除(true表示删除,否则不删除)
     */
    private void saveJson(String fileUrlOrFileName, String deviceModel, String json) {
    private void saveJson(String fileName, String deviceModel, String json, boolean isDelPath) {
        try {
            if (TextUtils.isEmpty(json)) {
                return;
            }
            String fileName = fileUrlOrFileName;
            if (fileUrlOrFileName.contains("/")) {
                //表示链接,截取最后一个索引表示文件名
                fileName = fileUrlOrFileName.split("/")[fileUrlOrFileName.split("/").length - 1];
            }
            if (TextUtils.isEmpty(fileName)) {
                return;
            }
            //英文文件路径
@@ -160,7 +200,9 @@
                //中文文件路径
                fullPath = HdlFileLogic.getInstance().getHdlESLocalJsonZhFilePath(deviceModel, fileName);
            }
            if (isDelPath) {
                HdlFileLogic.getInstance().deleteFile(fullPath);
            }
            HdlFileLogic.getInstance().writeFile(fullPath, json);
        } catch (Exception ignored) {
        }
@@ -169,16 +211,11 @@
    /**
     * 读取json数据
     *
     * @param fileUrlOrFileName 地址或者文件名
     * @param deviceModel       设备型号(逆变器,负载中心,bms,电池包)
     * @param fileName    文件名
     * @param deviceModel 设备型号(逆变器,负载中心,bms,电池包)
     */
    private String readJson(String fileUrlOrFileName, String deviceModel) {
    private String readJson(String fileName, String deviceModel) {
        try {
            String fileName = fileUrlOrFileName;
            if (fileUrlOrFileName.contains("/")) {
                //表示链接,截取最后一个索引表示文件名
                fileName = fileUrlOrFileName.split("/")[fileUrlOrFileName.split("/").length - 1];
            }
            if (TextUtils.isEmpty(fileName)) {
                return "";
            }
@@ -201,115 +238,130 @@
        /**
         * 创建电站-逆变器参数配置
         */
        String hdl_inv_ecu_quick = "modbus_hdl_inv_ecu_quick_v1.5.1.json";
        /**
         * 创建电站-负载控制中心参数配置
         */
        String hdl_lc_ecu_quick = "modbus_hdl_lc_ecu_quick_v1.5.0.json";
        String hdl_inv_ecu_quick = "modbus_hdl_inv_ecu_quick_v";
        /**
         * 逆变器参数配置(config)
         */
        String hdl_inv_ecu = "modbus_hdl_inv_ecu_v1.5.2.json";
        String hdl_inv_ecu = "modbus_hdl_inv_ecu_v";
        /**
         * 逆变器详情-pv
         */
        String hdl_inv_ecu_info_pv = "info/modbus_hdl_inv_ecu_info_pv_v1.4.2.json";
        String hdl_inv_ecu_info_pv = "modbus_hdl_inv_ecu_info_pv_v";
        /**
         * 逆变器详情-输出
         */
        String hdl_inv_ecu_info_output = "info/modbus_hdl_inv_ecu_info_output_v1.4.2.json";
        String hdl_inv_ecu_info_output = "modbus_hdl_inv_ecu_info_output_v";
        /**
         * 逆变器详情-item项
         */
        String hdl_inv_ecu_info_item = "info/modbus_hdl_inv_ecu_info_item_v1.5.2.json";
        String hdl_inv_ecu_info_item = "modbus_hdl_inv_ecu_info_item_v";
        /**
         * 创建电站-负载控制中心参数配置
         */
        String hdl_lc_ecu_quick = "modbus_hdl_lc_ecu_quick_v";
        /**
         * 获取负载控制中心
         */
        String hdl_lc_ecu_info_item = "modbus_hdl_lc_ecu_info_item_v1.5.0.json";
        String hdl_lc_ecu_info_item = "modbus_hdl_lc_ecu_info_item_v";
        /**
         * 获取BMS信息
         */
        String hdl_bms_ecu = "modbus_hdl_bms_ecu_v1.4.2.json";
        String hdl_bms_ecu = "modbus_hdl_bms_ecu_v";
        /**
         * 电池包信息
         */
        String hdl_battery_ecu = "modbus_hdl_battery_ecu_v1.4.2.json";
        String hdl_battery_ecu = "modbus_hdl_battery_ecu_v";
        /**
         * 电池包-电芯信息
         */
        String hdl_battery_ecu_cell = "modbus_hdl_battery_ecu_cell_v1.4.2.json";
        String hdl_battery_ecu_cell = "modbus_hdl_battery_ecu_cell_v";
        /**
         * 逆变器详情-信号点
         */
        String hdl_inv_ecu_info_signal = "info/modbus_hdl_inv_ecu_info_signal_v1.4.1.json";
        String hdl_inv_ecu_info_signal = "modbus_hdl_inv_ecu_info_signal_v";
        /**
         * 离网逆变器快速配置
         */
        String hdl_inv_ecu_quick_off = "modbus_hdl_inv_ecu_quick_v1.5.2.json";
        String hdl_inv_ecu_quick_off = "modbus_hdl_inv_ecu_quick_v";
        /**
         * 离网逆变器主机配置
         */
        String hdl_inv_master_ecu_off = "modbus_hdl_inv_master_ecu_v1.5.2.json";
        String hdl_inv_master_ecu_off = "modbus_hdl_inv_master_ecu_v";
        /**
         * 离网逆变器从机配置
         */
        String hdl_inv_slave_ecu_off = "modbus_hdl_inv_slave_ecu_v1.5.2.json";
        String hdl_inv_slave_ecu_off = "modbus_hdl_inv_slave_ecu_v";
        /**
         * 离网逆变器详情光伏输入
         */
        String hdl_inv_ecu_info_pv_off = "modbus_hdl_inv_ecu_info_pv_v1.5.2.json";
        String hdl_inv_ecu_info_pv_off = "modbus_hdl_inv_ecu_info_pv_v";
        /**
         * 离网逆变器详情交流输入
         */
        String hdl_inv_ecu_info_input_off = "modbus_hdl_inv_ecu_info_input_v1.5.2.json";
        String hdl_inv_ecu_info_input_off = "modbus_hdl_inv_ecu_info_input_v";
        /**
         * 离网逆变器详情交流输出
         */
        String hdl_inv_ecu_info_output_off = "modbus_hdl_inv_ecu_info_output_v1.5.2.json";
        String hdl_inv_ecu_info_output_off = "modbus_hdl_inv_ecu_info_output_v";
        /**
         * 离网逆变器详情基础参数
         */
        String hdl_inv_ecu_info_item_off = "modbus_hdl_inv_ecu_info_item_v1.5.2.json";
        String hdl_inv_ecu_info_item_off = "modbus_hdl_inv_ecu_info_item_v";
        /**
         * 离网逆变器详情统计
         */
        String hdl_inv_ecu_info_signal_off = "modbus_hdl_inv_ecu_info_signal_v1.5.2.json";
        String hdl_inv_ecu_info_signal_off = "modbus_hdl_inv_ecu_info_signal_v";
        /**
         * 离网逆变器BMS详情
         */
        String hdl_bms_ecu_off = "modbus_hdl_bms_ecu_v1.5.2.json";
        String hdl_bms_ecu_off = "modbus_hdl_bms_ecu_v";
        /**
         * 离网逆变器电池详情
         */
        String hdl_battery_ecu_off = "modbus_hdl_battery_ecu_v1.5.2.json";
        String hdl_battery_ecu_off = "modbus_hdl_battery_ecu_v";
        /**
         * 离网逆变器电池电芯
         */
        String hdl_battery_ecu_cell_off = "modbus_hdl_battery_ecu_cell_v1.5.2.json";
        String hdl_battery_ecu_cell_off = "modbus_hdl_battery_ecu_cell_v";
        /**
         * 获取逆变器所有json中文
         */
        String hdl_inv_ecu_all_zh = "/zh/all_v1.5.1.json";
        String hdl_inv_ecu_all_zh = "/zh/all_v";
        /**
         * 获取逆变器所有json英文
         */
        String hdl_inv_ecu_all_en = "/en/all_v1.5.1.json";
        String hdl_inv_ecu_all_en = "/en/all_v";
    }
    /**
     * 版本号
     */
    public @interface Version {
        String v_1_4_1 = "1.4.1";
        String v_1_4_2 = "1.4.2";
        String v_1_5_0 = "1.5.0";
        String v_1_5_1 = "1.5.1";
        String v_1_5_2 = "1.5.2";
        String v_1_5_3 = "1.5.3";
    }