package com.hdl.photovoltaic.ui.test; import androidx.recyclerview.widget.LinearLayoutManager; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import com.hdl.linkpm.sdk.core.exception.HDLException; import com.hdl.photovoltaic.base.CustomBaseActivity; import com.hdl.photovoltaic.config.UserConfigManage; import com.hdl.photovoltaic.databinding.ActivityTestMainBinding; import com.hdl.photovoltaic.enums.ShowErrorMode; import com.hdl.photovoltaic.internet.TcpClient; import com.hdl.photovoltaic.internet.api.TopicApi; import com.hdl.photovoltaic.listener.CloudCallBeak; import com.hdl.photovoltaic.listener.LinkCallBack; import com.hdl.photovoltaic.other.HdlDeviceLogic; import com.hdl.photovoltaic.other.HdlThreadLogic; import com.hdl.photovoltaic.ui.bean.CloudInverterChildDeviceBean; import com.hdl.photovoltaic.ui.bean.OidBean; import com.hdl.photovoltaic.widget.ConfirmationCancelDialog; import com.hdl.sdk.link.common.exception.HDLLinkException; import com.hdl.sdk.link.core.bean.gateway.GatewayBean; import com.hdl.sdk.link.core.bean.response.BaseLocalResponse; import com.hdl.sdk.link.core.callback.GatewayCallBack; import com.hdl.sdk.link.core.callback.HDLLinkCallBack; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; /** * 测试网关数据主入口界面 */ public class TestMainActivity extends CustomBaseActivity implements View.OnClickListener { private ActivityTestMainBinding viewBinding; private TestTitleAdapter testTitleAdapter; private List mOidList; @Override public Object getContentView() { viewBinding = ActivityTestMainBinding.inflate(getLayoutInflater()); return viewBinding.getRoot(); } @Override public void onBindView(Bundle savedInstanceState) { LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); testTitleAdapter = new TestTitleAdapter(getTitleList()); viewBinding.listItemRl.setLayoutManager(linearLayoutManager); viewBinding.listItemRl.setAdapter(testTitleAdapter); initView(); initEvent(); } /** * 初始化 */ private void initView() { String homeId = "测试住宅ID=" + UserConfigManage.getInstance().getHomeId(); String homeName = "测试住宅名称=" + UserConfigManage.getInstance().getHomeName(); viewBinding.homeIdTv.setText(homeId); viewBinding.homeNameTv.setText(homeName); } private void initEvent() { viewBinding.topBackBtn.setOnClickListener(this); viewBinding.topLogBtn.setOnClickListener(this); viewBinding.clickCommandTv.setOnClickListener(this); testTitleAdapter.setItemOnClickListener(new TestTitleAdapter.OnClickListener() { @Override public void OnClick(int position, String title) { if (TextUtils.isEmpty(UserConfigManage.getInstance().getHomeId())) { // TODO: 10/30/23 请先选择住宅进行测试,否则无法进行逆变器指令测试; TipDialog("请先选择住宅进行测试,否则无法进行逆变器指令测试.", null); return; } GatewayBean gatewayBean = HdlDeviceLogic.getInstance().getCurrentHomeMainGateway(UserConfigManage.getInstance().getHomeId()); if (gatewayBean == null && !title.equals("搜索逆变器列表(0)") && !title.equals("搜索【住宅】逆变器列表(1)")) { // TODO: 10/30/23 找不到住宅的主逆变器,请先确认是否绑定逆变器,再进行逆变器指令测试; TipDialog("找不到住宅的【主逆变器】,请先确认是否绑定过逆变器,再进行逆变器指令测试.", null); return; } showLoading(); startRequest(position, gatewayBean); } }); } @Override public void onClick(View v) { int id = v.getId(); if (id == viewBinding.topBackBtn.getId()) { finish(); } else if (id == viewBinding.topLogBtn.getId()) { startActivity(TestLogActivity.class); } else if (id == viewBinding.clickCommandTv.getId()) { } } /** * 自定义的标题 * * @return - */ private List getTitleList() { List s = new ArrayList<>(); s.add("搜索逆变器列表(0)"); s.add("搜索【住宅】逆变器列表(1)"); s.add("获取逆变器oid列表(2)"); s.add("读取逆变器详情(3)"); s.add("清除逆变器住宅Id(4)"); s.add("上传oid列表给云端(5)"); s.add("获取逆变器下挂设备列表(6)"); return s; } /** * 请求指令 * * @param position 索引值 */ private void startRequest(int position, GatewayBean gatewayBean) { String title = getTitleList().get(position); switch (title) { case "搜索逆变器列表(0)": { HdlDeviceLogic.getInstance().searchAllGateway(new GatewayCallBack() { @Override public void onSuccess(List gatewayBeanList) { List newGatewayBeanList = new ArrayList<>(); for (int i = 0; i < gatewayBeanList.size(); i++) { if (HdlDeviceLogic.getInstance().isGatewaySpk(gatewayBeanList.get(i).getGatewayType())) { newGatewayBeanList.add(gatewayBeanList.get(i)); } } gsonConvertJsonStr(newGatewayBeanList); } @Override public void onError(HDLLinkException e) { setError(e.getMsg(), e.getCode()); } }); } break; case "搜索【住宅】逆变器列表(1)": { HdlDeviceLogic.getInstance().searchCurrentHomeGateway(new GatewayCallBack() { @Override public void onSuccess(List gatewayBeanList) { gsonConvertJsonStr(gatewayBeanList); } @Override public void onError(HDLLinkException e) { setError(e.getMsg(), e.getCode()); } }); } break; case "获取逆变器oid列表(2)": { HdlDeviceLogic.getInstance().getInverterOidList(gatewayBean.getDevice_mac(), new LinkCallBack>() { @Override public void onSuccess(List obj) { mOidList = obj; gsonConvertJsonStr(obj); } @Override public void onError(HDLLinkException e) { setError(e.getMsg(), e.getCode()); } }); } break; case "读取逆变器详情(3)": { HdlDeviceLogic.getInstance().getGatewayInfo(gatewayBean.getDevice_mac(), new LinkCallBack() { @Override public void onSuccess(GatewayBean obj) { gsonConvertJsonStr(obj); } @Override public void onError(HDLLinkException e) { setError(e.getMsg(), e.getCode()); } }); } break; case "清除逆变器住宅Id(4)": { TipDialog("一旦清除掉逆变器住宅id,逆变器需要重新绑定住宅,否则无法测试逆变器指令;", new Listener() { @Override public void Confirmation() { HdlDeviceLogic.getInstance().clearInverterHomeId(gatewayBean.getDevice_mac(), new LinkCallBack() { @Override public void onSuccess(Boolean obj) { gsonConvertJsonStr(obj); } @Override public void onError(HDLLinkException e) { setError(e.getMsg(), e.getCode()); } }); } }); } break; case "上传oid列表给云端(5)": { if (this.mOidList == null || this.mOidList.size() == 0) { hideLoading(); HdlThreadLogic.toast(this, "没有oid列表数据,请先获取逆变器oid列表数据,再重新上传."); return; } HdlDeviceLogic.getInstance().fullUpdateOid(UserConfigManage.getInstance().getHomeId(), this.mOidList, new CloudCallBeak() { @Override public void onSuccess(Boolean obj) { gsonConvertJsonStr(obj); } @Override public void onFailure(HDLException e) { setError(e.getMsg(), e.getCode()); } }); } break; case "获取逆变器下挂设备列表(6)": { HdlDeviceLogic.getInstance().getInverterDeviceChildDeviceList(UserConfigManage.getInstance().getHomeId(), gatewayBean.getOid(), new CloudCallBeak>() { @Override public void onSuccess(List obj) { gsonConvertJsonStr(obj); } @Override public void onFailure(HDLException e) { setError(e.getMsg(), e.getCode()); } }); } break; default: { HdlThreadLogic.runMainThread(new Runnable() { @Override public void run() { hideLoading(); } }, this, ShowErrorMode.YES); break; } } } private void setError(String msg, int code) { String error = msg + "(" + code + ")"; showText(error); } private void gsonConvertJsonStr(Object src) { Gson gson = new Gson(); String json = gson.toJson(src); showText(json); } /** * 回复的数据 * * @param s 数据 */ private void showText(String s) { HdlThreadLogic.runMainThread(new Runnable() { @Override public void run() { hideLoading(); String s1 = "数据回复:\r\n" + s; viewBinding.replyContentTv.setText(s1); } }, this, ShowErrorMode.YES); } /** * @param s 错误信息 */ private void TipDialog(String s, Listener listener) { ConfirmationCancelDialog confirmationCancelDialog = new ConfirmationCancelDialog(this); confirmationCancelDialog.setTitle("提示"); confirmationCancelDialog.setContent(s); confirmationCancelDialog.setConfirmation("确认"); confirmationCancelDialog.setCancel("取消"); confirmationCancelDialog.show(); confirmationCancelDialog.setNoOnclickListener(new ConfirmationCancelDialog.onNoOnclickListener() { @Override public void Cancel() { confirmationCancelDialog.dismiss(); hideLoading(); } }); confirmationCancelDialog.setYesOnclickListener(new ConfirmationCancelDialog.onYesOnclickListener() { @Override public void Confirm() { hideLoading(); confirmationCancelDialog.dismiss(); if (listener != null) { listener.Confirmation(); } } }); } public interface Listener { void Confirmation(); } }