mac
2024-03-12 0b6f27a6aeeb6eb3d5ee55b500797875c2bd5d2c
app/src/main/java/com/hdl/photovoltaic/other/HdlUniLogic.java
@@ -18,6 +18,7 @@
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import com.alibaba.fastjson.JSON;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.hdl.linkpm.sdk.core.exception.HDLException;
@@ -35,10 +36,16 @@
import com.hdl.photovoltaic.internet.HttpServer.MyNanoHttpServer;
import com.hdl.photovoltaic.listener.CloudCallBeak;
import com.hdl.photovoltaic.listener.LinkCallBack;
import com.hdl.photovoltaic.ui.StartActivity;
import com.hdl.photovoltaic.ui.bean.CloudInverterDeviceBean;
import com.hdl.photovoltaic.ui.bean.DeviceTimeBean;
import com.hdl.photovoltaic.ui.bean.Geolocation;
import com.hdl.photovoltaic.ui.bean.OidBean;
import com.hdl.photovoltaic.ui.me.AsRegardsActivity;
import com.hdl.photovoltaic.ui.me.PersonalDataActivity;
import com.hdl.photovoltaic.ui.me.SetActivity;
import com.hdl.photovoltaic.ui.newC.MessageCenterList;
import com.hdl.photovoltaic.ui.newC.PowerStationsListEdit;
import com.hdl.photovoltaic.uni.HDLUniMP;
import com.hdl.photovoltaic.uni.HDLUniMPSDKManager;
import com.hdl.photovoltaic.utils.NetworkUtils;
@@ -58,10 +65,13 @@
import java.io.File;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicInteger;
import io.dcloud.feature.unimp.DCUniMPJSCallback;
import okhttp3.ResponseBody;
@@ -107,7 +117,8 @@
                return;
            }
            String type = getKeyValue("type", data);//小类
            String mode_type = "大类->" + topic + "--->小类->" + type;//用来打印的
            String mode_type = "大类->" + topic + "--->" + "小类->" + type;//用来打印的
            HdlLogLogic.print("uni--->发送--->" + mode_type + "\r\n" + data, true);
            if (HDLUniMP.UNI_EVENT_REPLY_HOME_MODEL.equals(topic)) {
                //住宅模块
                switch (type) {
@@ -157,6 +168,11 @@
                    case HDLUniMP.UNI_EVENT_REPLY_DEVICE_ADD: {
                        this.uniAddInverterDeviceToCloud(mode_type, data, callback);
                    }
                    //添加多个逆变器到云端
                    case HDLUniMP.UNI_EVENT_REPLY_DEVICE_ADD_All: {
                        this.uniAddAllInverterDeviceToCloud(mode_type, data, callback);
                    }
                    break;
                    //删除云端逆变器
                    case HDLUniMP.UNI_EVENT_REPLY_DEVICE_DEL: {
@@ -313,7 +329,6 @@
                }
            } else if (HDLUniMP.UNI_EVENT_REPLY_OTHER_MODEL.equals(topic)) {
                //其它模块
                switch (type) {
                    //获取温度单位
@@ -336,8 +351,54 @@
                        HdlLogLogic.print("uni--->log--->" + customizeContentFormat, true);
                    }
                }
            } else if (HDLUniMP.UNI_EVENT_REPLY_MINE_MODEL.equals(topic)) {
                //我的模块
                switch (type) {
                    //资料编辑
                    case HDLUniMP.UNI_EVENT_REPLY_MINE_EDIT_USER_INFO: {
                        Intent intent = new Intent();
                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        intent.setClass(HDLApp.getInstance(), PersonalDataActivity.class);
                        HDLApp.getInstance().startActivity(intent);
                    }
                    break;
                    //电站选择
                    case HDLUniMP.UNI_EVENT_REPLY_MINE_SELECTED_POWERSTATION: {
                        Intent intent = new Intent();
                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        intent.setClass(HDLApp.getInstance(), PowerStationsListEdit.class);
                        HDLApp.getInstance().startActivity(intent);
                    }
                    break;
                    //消息中心
                    case HDLUniMP.UNI_EVENT_REPLY_MINE_MESSAGE_CENTER: {
                        Intent intent = new Intent();
                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        intent.setClass(HDLApp.getInstance(), MessageCenterList.class);
                        HDLApp.getInstance().startActivity(intent);
                    }
                    break;
                    //关于
                    case HDLUniMP.UNI_EVENT_REPLY_MINE_ABOUT: {
                        Intent intent = new Intent();
                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        intent.setClass(HDLApp.getInstance(), AsRegardsActivity.class);
                        HDLApp.getInstance().startActivity(intent);
                    }
                    break;
                    //设置
                    case HDLUniMP.UNI_EVENT_REPLY_MINE_SETTING: {
                        Intent intent = new Intent();
                        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                        intent.setClass(HDLApp.getInstance(), SetActivity.class);
                        HDLApp.getInstance().startActivity(intent);
                    }
                    break;
                }
            }
            HdlLogLogic.print("uni--->发送--->" + mode_type + "\r\n" + data, true);
        } catch (Exception e) {
            HdlLogLogic.print("uni--->发送--->" + e.getMessage(), true);
        }
@@ -386,42 +447,49 @@
     * 获取位置信息,包括经纬度
     */
    private void uniGetLocationInfo(String type, Object data, DCUniMPJSCallback callback) {
        // 初始化LocationManager对象
        LocationManager locationManager = (LocationManager) HDLApp.getInstance().getSystemService(Context.LOCATION_SERVICE);
        Geolocation geolocation = new Geolocation();
        //INTERNET   允许使用网络
        //ACCESS_FINE_LOCATION   允许使用GPS定位
        //ACCESS_COARSE_LOCATION   允许使用WIFI热点或基站来获取粗略的定位
        if (ActivityCompat.checkSelfPermission(HDLApp.getInstance(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(HDLApp.getInstance(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            geolocation.setResult(-2);
            geolocation.setDes(HDLApp.getInstance().getString(R.string.exception_no_location_information_permission));
        try {
            // 初始化LocationManager对象
            LocationManager locationManager = (LocationManager) HDLApp.getInstance().getSystemService(Context.LOCATION_SERVICE);
            Geolocation geolocation = new Geolocation();
            //INTERNET   允许使用网络
            //ACCESS_FINE_LOCATION   允许使用GPS定位
            //ACCESS_COARSE_LOCATION   允许使用WIFI热点或基站来获取粗略的定位
            if (ActivityCompat.checkSelfPermission(HDLApp.getInstance(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(HDLApp.getInstance(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                geolocation.setResult(-2);
                geolocation.setDes(HDLApp.getInstance().getString(R.string.exception_no_location_information_permission));
                uniCallbackData(type, geolocation, callback);
                return;
            }
            // 判断设备是否支持定位功能
            if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
                geolocation.setResult(-1);
                geolocation.setDes(HDLApp.getInstance().getString(R.string.exception_the_location_function_is_not_enabled));
                //todo 提示用户打开定位功能或者引导用户去系统设置页面打开定位功能
                uniCallbackData(type, geolocation, callback);
                return;
            }
            Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
            if (location == null) {
                geolocation.setResult(-3);
                geolocation.setDes(HDLApp.getInstance().getString(R.string.exception_unable_location_move10_meters_later));
                uniCallbackData(type, geolocation, callback);
                return;
            }
            geolocation.setResult(0);
            geolocation.setDes(HDLApp.getInstance().getString(R.string.succeed));
            BigDecimal latitude = BigDecimal.valueOf(location.getLatitude());//经度
            BigDecimal longitude = BigDecimal.valueOf(location.getLongitude());//纬度
            double lat = latitude.setScale(6, RoundingMode.HALF_DOWN).doubleValue();
            double lon = longitude.setScale(6, RoundingMode.HALF_DOWN).doubleValue();
            geolocation.setLatitude(lat);//经度
            geolocation.setLongitude(lon);//纬度
            uniCallbackData(type, geolocation, callback);
            return;
        }
        // 判断设备是否支持定位功能
        if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
            geolocation.setResult(-1);
            geolocation.setDes(HDLApp.getInstance().getString(R.string.exception_the_location_function_is_not_enabled));
            //todo 提示用户打开定位功能或者引导用户去系统设置页面打开定位功能
        } catch (Exception e) {
            Geolocation geolocation = new Geolocation();
            geolocation.setResult(-4);
            geolocation.setDes(e.getMessage());
            uniCallbackData(type, geolocation, callback);
            return;
        }
        Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
        if (location == null) {
            geolocation.setResult(-3);
            geolocation.setDes(HDLApp.getInstance().getString(R.string.exception_the_location_function_is_not_enabled));
            uniCallbackData(type, geolocation, callback);
            return;
        }
        geolocation.setResult(0);
        geolocation.setDes(HDLApp.getInstance().getString(R.string.succeed));
        geolocation.setLongitude(location.getLatitude());//纬度
        geolocation.setLatitude(location.getLongitude());//经度
        uniCallbackData(type, geolocation, callback);
        HdlLogLogic.print("经纬度--->经度:" + location.getLongitude() + "纬度:" + location.getLatitude(), true);
    }
    /**
@@ -1121,6 +1189,7 @@
    }
    /**
     * 逆变器添加到云端上
     *
@@ -1167,6 +1236,73 @@
                uniCallbackData(type, null, e.getCode(), e.getMsg(), callback);
            }
        });
    }
    /**
     * 多个逆变器添加到云端上
     *
     * @param data     uni数据
     * @param callback uni回调
     */
    private void uniAddAllInverterDeviceToCloud(String type, Object data, DCUniMPJSCallback callback) {
//        com.alibaba.fastjson.JSONArray jsonArray = JSON.parseArray(data);
        String mac = getKeyValue("mac", getKeyValue("data", data));
        String homeId = UserConfigManage.getInstance().getHomeId();
        GatewayBean gatewayBean = HDLLinkLocalGateway.getInstance().getLocalGateway(mac);
        if (gatewayBean == null) {
            uniCallbackData(type, null, -100, HDLApp.getInstance().getString(R.string.The_gateway_cannot_be_found_locally), callback);
            return;
        }
        List<GatewayBean> list = new ArrayList<>();
        //记录条数
        AtomicInteger atomicInteger = new AtomicInteger(0);
        final boolean[] is_boolean = {false};
        for (int i = 0; i < list.size(); i++) {
            HdlDeviceLogic.getInstance().setGatewayRemoteParam(homeId, mac, new LinkCallBack<Boolean>() {
                @Override
                public void onSuccess(Boolean obj) {
                    HdlDeviceLogic.getInstance().editGatewayParam(mac, new LinkCallBack<Boolean>() {
                        @Override
                        public void onSuccess(Boolean obj) {
                            atomicInteger.set(atomicInteger.get() + 1);
                            //最后一条才做添加逆变器逻辑处理
                            if (atomicInteger.get() == list.size()) {
                                HdlDeviceLogic.getInstance().addAllInverterDeviceToCloud(homeId, mac,list , new CloudCallBeak<Boolean>() {
                                    @Override
                                    public void onSuccess(Boolean obj) {
                                        uniCallbackData(type, null, callback);
                                    }
                                    @Override
                                    public void onFailure(HDLException e) {
                                        uniCallbackData(type, null, e.getCode(), e.getMsg(), callback);
                                    }
                                });
                            }
                        }
                        @Override
                        public void onError(HDLLinkException e) {
                            uniCallbackData(type, null, e.getCode(), e.getMsg(), callback);
                            is_boolean[0] = true;
                        }
                    });
                }
                @Override
                public void onError(HDLLinkException e) {
                    uniCallbackData(type, null, e.getCode(), e.getMsg(), callback);
                    is_boolean[0] = true;
                }
            });
            if (is_boolean[0]) {
                //只有中间有一条指令设置失败,默认全部失败;
                break;
            }
        }
    }
    /**
@@ -1362,10 +1498,9 @@
                callback.invoke(getJSONObject(uniCallBackBaseBean));
//                callback.invoke(uniCallBackBaseBean);
                HdlLogLogic.print("uni--->接收--->" + type + "--->" + new Gson().toJson(uniCallBackBaseBean), true);
            }
        } catch (Exception e) {
            HdlLogLogic.print("uni--->接收--->" + type + "--->" + e.getMessage(), false);
            HdlLogLogic.print("uni--->接收--->" + type + "--->" + e.getMessage(), true);
        }