From f5f9d439cfc6b45acc486ec52ed7a0288e92d189 Mon Sep 17 00:00:00 2001
From: wjc <1243177876@qq.com>
Date: 星期四, 08 六月 2023 20:34:39 +0800
Subject: [PATCH] 2023年06月08日20:34:33

---
 app/src/main/java/com/hdl/photovoltaic/listener/CloudCallBeak.java              |    9 
 app/src/main/java/com/hdl/photovoltaic/listener/BaseFailureCallBack.java        |    8 
 app/src/main/java/com/hdl/photovoltaic/bean/ResponsePack.java                   |   44 ++
 app/src/main/AndroidManifest.xml                                                |    5 
 app/src/main/java/com/hdl/photovoltaic/bean/LoginBean.java                      |  177 ++++++++++
 app/src/main/java/com/hdl/photovoltaic/config/UserManagement.java               |    5 
 .idea/misc.xml                                                                  |    2 
 app/src/main/java/com/hdl/photovoltaic/internet/HttpClient.java                 |  199 +++++++++++
 app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java                  |   59 +-
 app/src/main/java/com/hdl/photovoltaic/bean/LoginUserRegionBean.java            |   68 ++++
 app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java                |    4 
 app/src/main/java/com/hdl/photovoltaic/listener/BaseSuccessFailureCallBeak.java |   11 
 app/src/main/java/com/hdl/photovoltaic/config/ConfigManagement.java             |   75 ++++
 app/src/main/java/com/hdl/photovoltaic/other/HdlAccountLogic.java               |  134 +++++--
 app/src/main/java/com/hdl/photovoltaic/ui/HomeLoginActivity.java                |   22 
 app/src/main/java/com/hdl/photovoltaic/utils/HDLMD5Utils.java                   |  177 ++++++++++
 16 files changed, 920 insertions(+), 79 deletions(-)

diff --git a/.idea/misc.xml b/.idea/misc.xml
index 25d34a4..4bc4fc6 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="ExternalStorageConfigurationManager" enabled="true" />
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="11" project-jdk-type="JavaSDK" />
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK" />
 </project>
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 85db82f..01aad1e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,9 +7,12 @@
         android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
         tools:ignore="ProtectedPermissions" />
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.CAMERA" />
     <uses-permission android:name="android.permission.VIBRATE" />
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+
 
     <application
         android:name=".HDLApp"
diff --git a/app/src/main/java/com/hdl/photovoltaic/bean/LoginBean.java b/app/src/main/java/com/hdl/photovoltaic/bean/LoginBean.java
new file mode 100644
index 0000000..419527c
--- /dev/null
+++ b/app/src/main/java/com/hdl/photovoltaic/bean/LoginBean.java
@@ -0,0 +1,177 @@
+package com.hdl.photovoltaic.bean;
+
+import androidx.annotation.NonNull;
+
+import java.io.Serializable;
+
+public class LoginBean implements Serializable {
+    /// 鐢ㄦ埛鏈夋晥韬唤Token
+    private String accessToken;
+    /// 鐢ㄦ埛鏈夋晥韬唤Token杩囨湡鏃堕棿
+    private String expiration;
+    /// 鍒锋柊Token
+    private String refreshToken;
+    /// 鍒锋柊Token杩囨湡鏃堕棿
+    private String refreshExpiration;
+    /// 鐢ㄦ埛鍞竴ID
+    private String userId;
+    /// 鐧诲綍甯愬彿
+    private String account;
+    /// headerPrefix
+    private String headerPrefix;
+    private String tokenUuid;
+    private String tokenType;
+    private String expiresIn;
+    private String refreshExpiresIn;
+    private String userType;
+    private String name;
+    private String userPhone;
+    /// 鐢ㄦ埛閭
+    private String userEmail;
+    ///浼佷笟鍗曚綅id
+    private String companyId;
+
+    @NonNull
+    public String getAccessToken() {
+        return accessToken == null ? "" : accessToken;
+    }
+
+    public void setAccessToken(@NonNull String accessToken) {
+        this.accessToken = accessToken;
+    }
+
+    @NonNull
+    public String getExpiration() {
+        return expiration == null ? "" : expiration;
+    }
+
+    public void setExpiration(@NonNull String expiration) {
+        this.expiration = expiration;
+    }
+
+    @NonNull
+    public String getRefreshToken() {
+        return refreshToken == null ? "" : refreshToken;
+    }
+
+    public void setRefreshToken(@NonNull String refreshToken) {
+        this.refreshToken = refreshToken;
+    }
+
+    @NonNull
+    public String getRefreshExpiration() {
+        return refreshExpiration == null ? "" : refreshExpiration;
+    }
+
+    public void setRefreshExpiration(@NonNull String refreshExpiration) {
+        this.refreshExpiration = refreshExpiration;
+    }
+
+    @NonNull
+    public String getUserId() {
+        return userId == null ? "" : userId;
+    }
+
+    public void setUserId(@NonNull String userId) {
+        this.userId = userId;
+    }
+
+    @NonNull
+    public String getAccount() {
+        return account == null ? "" : account;
+    }
+
+    public void setAccount(@NonNull String account) {
+        this.account = account;
+    }
+
+    @NonNull
+    public String getHeaderPrefix() {
+        return headerPrefix == null ? "" : headerPrefix;
+    }
+
+    public void setHeaderPrefix(@NonNull String headerPrefix) {
+        this.headerPrefix = headerPrefix;
+    }
+
+    @NonNull
+    public String getTokenUuid() {
+        return tokenUuid == null ? "" : tokenUuid;
+    }
+
+    public void setTokenUuid(@NonNull String tokenUuid) {
+        this.tokenUuid = tokenUuid;
+    }
+
+    @NonNull
+    public String getTokenType() {
+        return tokenType == null ? "" : tokenType;
+    }
+
+    public void setTokenType(@NonNull String tokenType) {
+        this.tokenType = tokenType;
+    }
+
+    @NonNull
+    public String getExpiresIn() {
+        return expiresIn == null ? "" : expiresIn;
+    }
+
+    public void setExpiresIn(@NonNull String expiresIn) {
+        this.expiresIn = expiresIn;
+    }
+
+    @NonNull
+    public String getRefreshExpiresIn() {
+        return refreshExpiresIn == null ? "" : refreshExpiresIn;
+    }
+
+    public void setRefreshExpiresIn(@NonNull String refreshExpiresIn) {
+        this.refreshExpiresIn = refreshExpiresIn;
+    }
+
+    @NonNull
+    public String getUserType() {
+        return userType == null ? "" : userType;
+    }
+
+    public void setUserType(@NonNull String userType) {
+        this.userType = userType;
+    }
+
+    @NonNull
+    public String getName() {
+        return name == null ? "" : name;
+    }
+
+    public void setName(@NonNull String name) {
+        this.name = name;
+    }
+
+    @NonNull
+    public String getUserPhone() {
+        return userPhone == null ? "" : userPhone;
+    }
+
+    public void setUserPhone(@NonNull String userPhone) {
+        this.userPhone = userPhone;
+    }
+
+    @NonNull
+    public String getUserEmail() {
+        return userEmail == null ? "" : userEmail;
+    }
+
+    public void setUserEmail(@NonNull String userEmail) {
+        this.userEmail = userEmail;
+    }
+
+    @NonNull
+    public String getCompanyId() {
+        return companyId == null ? "" : companyId;
+    }
+
+    public void setCompanyId(@NonNull String companyId) {
+        this.companyId = companyId;
+    }
+}
diff --git a/app/src/main/java/com/hdl/photovoltaic/bean/LoginUserRegionBean.java b/app/src/main/java/com/hdl/photovoltaic/bean/LoginUserRegionBean.java
new file mode 100644
index 0000000..1e96ee5
--- /dev/null
+++ b/app/src/main/java/com/hdl/photovoltaic/bean/LoginUserRegionBean.java
@@ -0,0 +1,68 @@
+package com.hdl.photovoltaic.bean;
+
+import androidx.annotation.NonNull;
+
+import java.io.Serializable;
+
+public class LoginUserRegionBean implements Serializable {
+    private String regionId;//鍖哄煙Id
+    private String regionName;//鍖哄煙鍚嶇О
+    private String regionMark;
+    private String regionMqttUrl;
+    private String regionSlbUrl;
+    private String regionUrl;//璐﹀彿鎵�鍦ㄥ尯鍩熷崗璁強鍦板潃
+
+    @NonNull
+    public String getRegionId() {
+        return regionId == null ? "" : regionId;
+    }
+
+    public void setRegionId(@NonNull String regionId) {
+        this.regionId = regionId;
+    }
+
+    @NonNull
+    public String getRegionName() {
+        return regionName == null ? "" : regionName;
+    }
+
+    public void setRegionName(@NonNull String regionName) {
+        this.regionName = regionName;
+    }
+
+    @NonNull
+    public String getRegionMark() {
+        return regionMark == null ? "" : regionMark;
+    }
+
+    public void setRegionMark(@NonNull String regionMark) {
+        this.regionMark = regionMark;
+    }
+
+    @NonNull
+    public String getRegionMqttUrl() {
+        return regionMqttUrl == null ? "" : regionMqttUrl;
+    }
+
+    public void setRegionMqttUrl(@NonNull String regionMqttUrl) {
+        this.regionMqttUrl = regionMqttUrl;
+    }
+
+    @NonNull
+    public String getRegionSlbUrl() {
+        return regionSlbUrl == null ? "" : regionSlbUrl;
+    }
+
+    public void setRegionSlbUrl(@NonNull String regionSlbUrl) {
+        this.regionSlbUrl = regionSlbUrl;
+    }
+
+    @NonNull
+    public String getRegionUrl() {
+        return regionUrl == null ? "" : regionUrl;
+    }
+
+    public void setRegionUrl(@NonNull String regionUrl) {
+        this.regionUrl = regionUrl;
+    }
+}
diff --git a/app/src/main/java/com/hdl/photovoltaic/bean/ResponsePack.java b/app/src/main/java/com/hdl/photovoltaic/bean/ResponsePack.java
new file mode 100644
index 0000000..8a4ab77
--- /dev/null
+++ b/app/src/main/java/com/hdl/photovoltaic/bean/ResponsePack.java
@@ -0,0 +1,44 @@
+package com.hdl.photovoltaic.bean;
+
+import java.io.Serializable;
+
+public class ResponsePack implements Serializable {
+    /**
+     * 鐘舵�佺爜
+     */
+    private String code;
+    /**
+     * 浜戠鐘舵�佺爜鐨勬秷鎭�
+     */
+    private String message;
+
+    /**
+     * 浜戠杩斿洖鐨勬暟鎹�
+     */
+    private Object data;
+
+    public String getCode() {
+        return code == null ? "" : code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMessage() {
+        return message.equals("") ? "" : message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public Object getData() {
+        return data;
+    }
+
+    public void setData(Object data) {
+        this.data = data;
+    }
+
+}
diff --git a/app/src/main/java/com/hdl/photovoltaic/config/ConfigManagement.java b/app/src/main/java/com/hdl/photovoltaic/config/ConfigManagement.java
new file mode 100644
index 0000000..bc18f82
--- /dev/null
+++ b/app/src/main/java/com/hdl/photovoltaic/config/ConfigManagement.java
@@ -0,0 +1,75 @@
+package com.hdl.photovoltaic.config;
+
+import com.hdl.photovoltaic.BuildConfig;
+
+public class ConfigManagement {
+
+
+    /*********鏄惁姝e紡鏈嶅姟鍣�*********/
+    private static final boolean isOnlineServer = true;
+    /*********姝e紡鐜*********/
+    private static final String APP_KEY_ONLINE = "CSZEMDJL";
+    private static final String APP_SECRET_ONLINE = "CSZEMDKBCSZEMDKR";
+    private static final String APP_REGIONURL_ONLINE = "https://nearest.hdlcontrol.com";
+    /*********娴嬭瘯鐜*********/
+    private static final String APP_KEY_TEST = "CTBGMNUV";
+    private static final String APP_SECRET_TEST = "CTBGMNVLCTBGMNWB";
+    private static final String APP_REGIONURL_TEST = "https://test-gz.hdlcontrol.com";
+
+    /*********鑾峰彇褰撳墠鏄惁浣跨敤姝e紡鏈嶅姟鍣ㄧ幆澧�*********/
+    public static boolean isIsOnlineServer() {
+        return isOnlineServer;
+    }
+
+    /// 鐢ㄦ埛娉ㄥ唽鎵�鍦ㄦ湇鍔″櫒鍩熷悕鍦板潃
+    private static String sUserRegionUrl;
+
+    public static String getUserRegionUrl() {
+        return sUserRegionUrl == null ? "" : sUserRegionUrl;
+    }
+
+    public static void setUserRegionUrl(String userRegionUrl) {
+        sUserRegionUrl = userRegionUrl;
+    }
+
+    /*********getAppKey*********/
+    public static String getAppKey() {
+        if (isOnlineServer) {
+            return APP_KEY_ONLINE;
+        } else {
+            return APP_KEY_TEST;
+        }
+    }
+
+    /*********getAppSecret*********/
+    public static String getAppSecret() {
+        if (isOnlineServer) {
+            return APP_SECRET_ONLINE;
+        } else {
+            return APP_SECRET_TEST;
+        }
+    }
+
+    /*********getAPP_RegionUrl*********/
+    public static String getAPPRegionUrl() {
+        if (isOnlineServer) {
+            return APP_REGIONURL_ONLINE;
+        } else {
+            return APP_REGIONURL_TEST;
+        }
+    }
+
+    /**
+     * 褰撳墠鏄惁涓鸿皟璇曟ā寮�
+     */
+    public static boolean isDebug() {
+        return BuildConfig.DEBUG;
+    }
+
+    /**
+     * 鑾峰彇褰撳墠搴旂敤鐨勭増鏈悕
+     */
+    public static String getVersionName() {
+        return BuildConfig.VERSION_NAME;
+    }
+}
diff --git a/app/src/main/java/com/hdl/photovoltaic/config/UserManagement.java b/app/src/main/java/com/hdl/photovoltaic/config/UserManagement.java
new file mode 100644
index 0000000..5a1c008
--- /dev/null
+++ b/app/src/main/java/com/hdl/photovoltaic/config/UserManagement.java
@@ -0,0 +1,5 @@
+package com.hdl.photovoltaic.config;
+
+public class UserManagement {
+
+}
diff --git a/app/src/main/java/com/hdl/photovoltaic/internet/HttpClient.java b/app/src/main/java/com/hdl/photovoltaic/internet/HttpClient.java
index e82d14e..8d2c3cd 100644
--- a/app/src/main/java/com/hdl/photovoltaic/internet/HttpClient.java
+++ b/app/src/main/java/com/hdl/photovoltaic/internet/HttpClient.java
@@ -1,4 +1,203 @@
 package com.hdl.photovoltaic.internet;
 
+import android.net.Uri;
+import android.text.TextUtils;
+
+import androidx.annotation.NonNull;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import com.google.gson.reflect.TypeToken;
+import com.hdl.hdlhttp.utils.GsonConvert;
+import com.hdl.photovoltaic.bean.ResponsePack;
+import com.hdl.photovoltaic.config.ConfigManagement;
+import com.hdl.photovoltaic.listener.BaseSuccessFailureCallBeak;
+import com.hdl.photovoltaic.utils.HDLMD5Utils;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+import okhttp3.Call;
+import okhttp3.Callback;
+import okhttp3.FormBody;
+import okhttp3.MediaType;
+import okhttp3.OkHttpClient;
+import okhttp3.Request;
+import okhttp3.RequestBody;
+import okhttp3.Response;
+
 public class HttpClient {
+
+    private static volatile HttpClient sHttpClient;
+
+    public static synchronized HttpClient getInstance() {
+        if (sHttpClient == null) {
+            synchronized (HttpClient.class) {
+                if (sHttpClient == null) {
+                    sHttpClient = new HttpClient();
+                }
+            }
+
+        }
+        return sHttpClient;
+    }
+
+    /**
+     * 璇锋眰鏈嶅姟鍣ㄧ殑鏂规硶
+     *
+     * @param requestUrl     璇锋眰鎺ュ彛
+     * @param json           璇锋眰鏁版嵁
+     * @param isBasicService 鏄惁鏄熀纭�鏈嶅姟鐨勬帴鍙�(鍩虹鏈嶅姟鐨勬帴鍙i渶瑕� appKey,timestamp,sign杩欎笁涓弬鏁�,褰撲负true鏃�,鍐呴儴浼氳嚜鍔ㄦ坊鍔�)
+     * @param isExecute      鏄惁鏄悓姝�(true=鍚屾,false=寮傛)
+     */
+    public void requestHttp(String requestUrl, String json, boolean isBasicService, boolean isExecute, BaseSuccessFailureCallBeak baseSuccessCallBeak) {
+        String fullUrl = ConfigManagement.getUserRegionUrl() + requestUrl;
+        this.requestHttps(fullUrl, json, isBasicService, isExecute, baseSuccessCallBeak);
+    }
+
+    /**
+     * 璇锋眰鏈嶅姟鍣ㄧ殑鏂规硶(鐩墠鍙敤鍦ㄨ幏鍙栬幏鍙栬处鍙峰尯鍩熶俊鎭�)
+     *
+     * @param fullUrl        缁濆鍦板潃(鍦板潃+鎺ュ彛)
+     * @param json           璇锋眰鏁版嵁
+     * @param isBasicService 鏄惁鏄熀纭�鏈嶅姟鐨勬帴鍙�(鍩虹鏈嶅姟鐨勬帴鍙i渶瑕� appKey,timestamp,sign杩欎笁涓弬鏁�,褰撲负true鏃�,鍐呴儴浼氳嚜鍔ㄦ坊鍔�)
+     * @param isExecute      鏄惁鏄悓姝�(true=鍚屾,false=寮傛)
+     */
+    public void requestFullHttp(String fullUrl, String json, boolean isBasicService, boolean isExecute, BaseSuccessFailureCallBeak baseSuccessCallBeak) {
+        this.requestHttps(fullUrl, json, isBasicService, isExecute, baseSuccessCallBeak);
+    }
+
+
+    /**
+     * 璇锋眰鏈嶅姟鍣ㄧ殑鏂规硶
+     *
+     * @param fullUrl        缁濆璇锋眰鍦板潃
+     * @param json           璇锋眰鏁版嵁
+     * @param isBasicService 鏄惁鏄熀纭�鏈嶅姟鐨勬帴鍙�(鍩虹鏈嶅姟鐨勬帴鍙i渶瑕� appKey,timestamp,sign杩欎笁涓弬鏁�,褰撲负true鏃�,鍐呴儴浼氳嚜鍔ㄦ坊鍔�)
+     * @param isExecute      鏄惁鏄悓姝�(true=鍚屾,false=寮傛)
+     */
+    private void requestHttps(String fullUrl, String json, boolean isBasicService, boolean isExecute, BaseSuccessFailureCallBeak baseSuccessCallBeak) {
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                try {
+                    OkHttpClient okHttpClient = new OkHttpClient();
+                    RequestBody requestBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), getJson(json));
+                    final Request request = new Request.Builder()
+                            .url(fullUrl)//璇锋眰鐨剈rl//
+                            .addHeader("Authorization", "accessToken")
+                            .post(requestBody)
+                            .build();
+                    if (isExecute) {
+                        Response response = okHttpClient.newCall(request).execute();//鍚屾
+                        if (response.isSuccessful()) {
+                            String s = Objects.requireNonNull(response.body()).string();
+                            ResponsePack responsePack = new Gson().fromJson(s, ResponsePack.class);
+                            baseSuccessCallBeak.onSuccess(responsePack);
+                        } else {
+                            //throw new IOException("Unexpected code " + response);
+                            baseSuccessCallBeak.onFailure(new Exception());
+                        }
+                    } else {
+
+                        Call call = okHttpClient.newCall(request);
+                        call.enqueue(new Callback() {//寮傛
+                            @Override
+                            public void onFailure(@NonNull Call call, @NonNull IOException e) {
+                                System.out.println("澶辫触" + e.toString());
+                            }
+
+                            @Override
+                            public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
+                                System.out.println("url杩炴帴淇℃伅" + response.code());
+                                if (response.code() == 200) {
+                                    String s = Objects.requireNonNull(response.body()).string();
+                                    ResponsePack responsePack = new Gson().fromJson(s, ResponsePack.class);
+                                    baseSuccessCallBeak.onSuccess(responsePack);
+                                } else {
+                                    baseSuccessCallBeak.onFailure(new Exception());
+                                }
+                            }
+                        });
+                    }
+                } catch (Exception e) {
+                    baseSuccessCallBeak.onFailure(e);
+                }
+
+            }
+
+        }).start();
+    }
+
+    /**
+     * 娣诲姞sign瀛楁
+     */
+    private String getJson(String json) {
+        final String timestamp = String.valueOf(System.currentTimeMillis());
+        final String appKey = ConfigManagement.getAppKey();
+        final String appSecret = ConfigManagement.getAppSecret();
+        JsonObject jsonObject = new Gson().fromJson(json, JsonObject.class);
+        if (jsonObject == null) {
+            jsonObject = new JsonObject();
+        }
+        jsonObject.addProperty("appKey", appKey);
+        jsonObject.addProperty("timestamp", timestamp);
+        jsonObject.addProperty("sign", getSign(jsonObject, appSecret));
+
+        return jsonObject.toString();
+    }
+
+    /**
+     * 闇�瑕佹寜瀛楁瘝鎺掑簭
+     *
+     * @param json 鎵�鏈夊瓧娈典娇鐢╱rlParameter鎷兼帴锛岄櫎浜哸ppSecret
+     */
+    private String getSign(JsonObject json, String appSecret) {
+        String builder = jsonToUrlParameter(json) +
+                appSecret;
+        return HDLMD5Utils.encodeMD5(builder);
+    }
+
+
+    private String jsonToUrlParameter(JsonObject object) {
+        final Map<String, String> map = GsonConvert.getGson().fromJson(object, new TypeToken<Map<String, String>>() {
+        }.getType());
+        final Uri.Builder builder = new Uri.Builder();
+        List<String> list = new ArrayList<>(map.keySet());
+        Collections.sort(list);
+        for (String key : list) {
+            //鍒ゆ柇褰撳墠鍊兼槸鍚﹂渶瑕佸弬涓庣鍚嶏紝淇濇寔璺熶簯绔竴鑷�
+            if (IfValueNeedSign(map.get(key))) {
+                builder.appendQueryParameter(key, map.get(key));
+//                HDLSDKLog.e("瑕佺鍚嶏細" + key + " 锛�" + map.get(key));
+            } else {
+//                HDLSDKLog.e("涓嶉渶瑕佺鍚嶏細" + key + " 锛�" + map.get(key));
+            }
+        }
+        return builder.build().getQuery();
+    }
+
+    /**
+     * 鍒ゆ柇褰撳墠鍊兼槸鍚﹂渶瑕佸弬涓庣鍚嶏紝淇濇寔璺熶簯绔竴鑷�
+     * 绌哄瓧绗︿覆涓嶅弬涓�
+     * 鏁扮粍,闆嗗悎,瀵硅薄涓嶅弬涓�
+     *
+     * @param valueStr -
+     * @return -
+     */
+    private boolean IfValueNeedSign(String valueStr) {
+        if (TextUtils.isEmpty(valueStr))
+            return false;
+        final char[] strChar = valueStr.substring(0, 1).toCharArray();
+        final char firstChar = strChar[0];
+        //System.out.println("getJSONType firstChar = "+firstChar);
+        if (firstChar != '{' && firstChar != '[')
+            return true;
+
+        return false;
+    }
 }
diff --git a/app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java b/app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java
index 75b8eec..c744fa1 100644
--- a/app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java
+++ b/app/src/main/java/com/hdl/photovoltaic/internet/api/HttpApi.java
@@ -7,7 +7,7 @@
     //鐧诲綍鎺ュ彛
     public static final String POST_Login = "/smart-footstone/user/oauth/login";
     //鍙戦�佹秷鎭獙璇佺爜
-    public static final String POST_VERIFICATION_CODE_SEND= "/smart-footstone/verification/message/send";
+    public static final String POST_VERIFICATION_CODE_SEND = "/smart-footstone/verification/message/send";
     //鐢ㄦ埛鎵惧洖瀵嗙爜 蹇樿瀵嗙爜,閫氳繃閭鍜屾墜鏈哄彿鎵惧洖
     public static final String POST_FORGET_PROGRAM_PWD = "/smart-footstone/user/oauth/forgetProgramPwd";
     //鏇存敼涓汉瀵嗙爜
@@ -15,7 +15,7 @@
     //鑾峰彇鍛樺伐鍒楄〃
     public static final String POST_GET_USER_LIST = "/smart-footstone/user/userInfo/getUserList";
     //鑾峰彇鐢ㄦ埛涓汉淇℃伅 C绔�
-    public static final String POST_GET_MEMBER_INFO= "/smart-footstone/member/memberInfo/getMemberInfo";
+    public static final String POST_GET_MEMBER_INFO = "/smart-footstone/member/memberInfo/getMemberInfo";
     //鏇存柊涓汉淇℃伅 C绔�
     public static final String POST_UPDATE_MEMBER_INFO = "/smart-footstone/member/memberInfo/updateMemberInfo";
     //涓婁紶鍥剧墖
diff --git a/app/src/main/java/com/hdl/photovoltaic/listener/BaseFailureCallBack.java b/app/src/main/java/com/hdl/photovoltaic/listener/BaseFailureCallBack.java
new file mode 100644
index 0000000..d287803
--- /dev/null
+++ b/app/src/main/java/com/hdl/photovoltaic/listener/BaseFailureCallBack.java
@@ -0,0 +1,8 @@
+package com.hdl.photovoltaic.listener;
+
+public interface BaseFailureCallBack {
+    /**
+     * 澶辫触
+     */
+    void onFailure(Exception exception);
+}
diff --git a/app/src/main/java/com/hdl/photovoltaic/listener/BaseSuccessFailureCallBeak.java b/app/src/main/java/com/hdl/photovoltaic/listener/BaseSuccessFailureCallBeak.java
new file mode 100644
index 0000000..bbcd77f
--- /dev/null
+++ b/app/src/main/java/com/hdl/photovoltaic/listener/BaseSuccessFailureCallBeak.java
@@ -0,0 +1,11 @@
+package com.hdl.photovoltaic.listener;
+
+import com.hdl.photovoltaic.bean.ResponsePack;
+
+public interface BaseSuccessFailureCallBeak extends BaseFailureCallBack {
+
+    /**
+     * 鎴愬姛鍥炶皟
+     */
+    void onSuccess(ResponsePack responsePack);
+}
diff --git a/app/src/main/java/com/hdl/photovoltaic/listener/CloudCallBeak.java b/app/src/main/java/com/hdl/photovoltaic/listener/CloudCallBeak.java
new file mode 100644
index 0000000..39ee496
--- /dev/null
+++ b/app/src/main/java/com/hdl/photovoltaic/listener/CloudCallBeak.java
@@ -0,0 +1,9 @@
+package com.hdl.photovoltaic.listener;
+
+public interface CloudCallBeak<T> extends BaseFailureCallBack {
+    /**
+     * 鎴愬姛鍥炶皟
+     */
+    void onSuccess(T obj);
+
+}
diff --git a/app/src/main/java/com/hdl/photovoltaic/other/HdlAccountLogic.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlAccountLogic.java
index 63c9ae5..27b8699 100644
--- a/app/src/main/java/com/hdl/photovoltaic/other/HdlAccountLogic.java
+++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlAccountLogic.java
@@ -1,6 +1,20 @@
 package com.hdl.photovoltaic.other;
 
 
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import com.hdl.photovoltaic.bean.LoginBean;
+import com.hdl.photovoltaic.bean.LoginUserRegionBean;
+import com.hdl.photovoltaic.bean.ResponsePack;
+import com.hdl.photovoltaic.config.ConfigManagement;
+import com.hdl.photovoltaic.internet.HttpClient;
+import com.hdl.photovoltaic.internet.api.HttpApi;
+import com.hdl.photovoltaic.listener.BaseSuccessFailureCallBeak;
+import com.hdl.photovoltaic.listener.CloudCallBeak;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 /**
  * 鐧婚檰鐣岄潰鐨勯�昏緫
  */
@@ -22,55 +36,89 @@
 
 
     /**
-     * 鍒濆鍖栬处鍙风殑Url鍖哄煙鍦板潃(鍙兘鐘舵�佺爜:Sucess  NotAccount  NotNetWork)
+     * 鍒濆鍖栬处鍙风殑Url鍖哄煙鍦板潃(鍙兘鐘舵�佺爜:Success  NotAccount  NotNetWork)
      *
-     * @param i_account
-     * @return
+     * @param i_account 璐﹀彿
      */
-    private void InitAccoutRegionInfo(String i_account) {
-//        String regionUrl = this.GetAccoutRegionInfo(i_account);
-//
-//
-//        if (regionUrl == null) {
-//            return AccountStatu.NotNetWork;
-//        }
-//        if (regionUrl == string.Empty) {
-//            return AccountStatu.NotAccount;
-//        }
-//
-//        return AccountStatu.Sucess;
+    public void regionByAccount(String i_account, CloudCallBeak<LoginUserRegionBean> cloudCallBeak) {
+        JsonObject jsonObject = new JsonObject();
+        jsonObject.addProperty("account", i_account);
+        String full = ConfigManagement.getAPPRegionUrl() + HttpApi.POST_RegionByUserAccount;
+        HttpClient.getInstance().requestFullHttp(full, jsonObject.toString(), true, true, new BaseSuccessFailureCallBeak() {
+            @Override
+            public void onSuccess(ResponsePack responsePack) {
+                if (responsePack.getData() != null) {
+                    Gson gson = new Gson();
+                    String json = gson.toJson(responsePack.getData());
+                    LoginUserRegionBean loginUserRegionBean = new Gson().fromJson(json, LoginUserRegionBean.class);
+                    if (cloudCallBeak != null) {
+                        cloudCallBeak.onSuccess(loginUserRegionBean);
+                    } else {
+                        cloudCallBeak.onFailure(new Exception());
+                    }
+                }
+            }
+
+            @Override
+            public void onFailure(Exception exception) {
+                if (cloudCallBeak != null) {
+                    cloudCallBeak.onFailure(exception);
+                }
+            }
+        });
     }
 
     /**
-     * 鑾峰彇璐﹀彿鎵�鍦ㄥ尯鍩�
+     * 鐧诲綍
+     * 閫氳繃璐﹀彿鍜屽瘑鐮�
      *
-     * @param account
-     * @param callBack
-     * @return https://nearest.hdlcontrol.com/smart-footstone/region/regionByUserAccount
+     * @param account       鎵嬫満鎴栬�呴偖绠�
+     * @param loginPwd      瀵嗙爜
+     * @param cloudCallBeak -
      */
-//    public Disposable regionByAccount(String account, IRegionByAccountCallBack callBack) {
-//        String requestUrl = HDLLinkPMSdk.getInitUrl() + HttpApi.POST_RegionByUserAccount;
-//        return HxHttp.builder()
-//                .url(requestUrl)
-//                .params("account", account)
-//                .build()
-//                .post()
-//                .subscribeWith(new HDLResponse<HDLUserRegionBean>() {
-//                    @Override
-//                    public void onResponse(HDLUserRegionBean response) {
-//                        if (callBack != null) {
-//                            callBack.onSuccess(response);
-//                        }
-//                    }
-//
-//                    @Override
-//                    public void onFailure(HDLException e) {
-//                        HDLExceptionSubmitUtils.submit(requestUrl, account, e);
-//                        if (callBack != null) {
-//                            callBack.onFailure(e);
-//                        }
-//                    }
-//                });
+    public void loginByPassword(String account, String loginPwd, CloudCallBeak<LoginBean> cloudCallBeak) {
+        String requestUrl = HttpApi.POST_Login;
+        JsonObject json = new JsonObject();
+        json.addProperty("account", account);
+        json.addProperty("loginPwd", loginPwd);
+//        json.addProperty("platform", "APP");
+        json.addProperty("grantType", "password");
 
-//    }
+        HttpClient.getInstance().requestHttp(requestUrl, json.toString(), true, true, new BaseSuccessFailureCallBeak() {
+            @Override
+            public void onSuccess(ResponsePack responsePack) {
+                if (responsePack.getData() != null) {
+                    Gson gson = new Gson();
+                    String json = gson.toJson(responsePack.getData());
+                    LoginBean loginBean = new Gson().fromJson(json, LoginBean.class);
+                    if (cloudCallBeak != null) {
+                        cloudCallBeak.onSuccess(loginBean);
+                    } else {
+                        cloudCallBeak.onFailure(new Exception());
+                    }
+                }
+            }
+
+            @Override
+            public void onFailure(Exception exception) {
+                if (cloudCallBeak != null) {
+                    cloudCallBeak.onFailure(exception);
+                }
+            }
+        });
+    }
+
+
+    public boolean isPhone(String phone) {
+        Pattern p = Pattern.compile("^((13[0-9])|(14[0|5|6|7|9])|(15[0-3])|(15[5-9])|(16[6|7])|(17[2|3|5|6|7|8])|(18[0-9])|(19[1|8|9]))\\d{8}$");
+        Matcher m = p.matcher(phone);
+        return m.matches();
+    }
+
+    public boolean isMailbox(String mailbox) {
+        String regex = "^(\\w+([-.][A-Za-z0-9]+)*){3,18}@\\w+([-.][A-Za-z0-9]+)*\\.\\w+([-.][A-Za-z0-9]+)*$";
+        return mailbox.matches(regex);
+    }
+
+
 }
diff --git a/app/src/main/java/com/hdl/photovoltaic/utils/FileUtils.java b/app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java
similarity index 79%
rename from app/src/main/java/com/hdl/photovoltaic/utils/FileUtils.java
rename to app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java
index 7984262..a4454fe 100644
--- a/app/src/main/java/com/hdl/photovoltaic/utils/FileUtils.java
+++ b/app/src/main/java/com/hdl/photovoltaic/other/HdlFileLogic.java
@@ -1,42 +1,53 @@
-package com.hdl.photovoltaic.utils;
+package com.hdl.photovoltaic.other;
 
-import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.util.Log;
 
-import com.hdl.photovoltaic.other.HdlLogLogic;
+import com.hdl.photovoltaic.HDLApp;
 
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.nio.charset.StandardCharsets;
-import java.util.Objects;
 
+public class HdlFileLogic {
 
-public class FileUtils {
+    private static volatile HdlFileLogic sHdlFileLogic;
+
+    public static synchronized HdlFileLogic getInstance() {
+        if (sHdlFileLogic == null) {
+            synchronized (HdlFileLogic.class) {
+                if (sHdlFileLogic == null) {
+                    sHdlFileLogic = new HdlFileLogic();
+                }
+            }
+
+        }
+        return sHdlFileLogic;
+    }
 
     private static final String TAG = "FileUtils";
 
+    public static final String userId = "";
+
     /**
      * 鑾峰彇鍐呴儴瀛樺偍鏂囦欢璺緞
-     *
-     * @param context 涓婁笅鏂�
-     * @return -
      */
-    public static String getInternalStoreFilesPath(Context context) {
-        if (context == null) {
-            return "";
-        }
-        return context.getFilesDir().getAbsolutePath();
+    private String getInternalStoreFilesPath() {
+        return HDLApp.getInstance().getFilesDir().getAbsolutePath();
     }
 
-    public static File createFile(String dirPath, String fileName) {
+    /**
+     * 鑾峰彇App瀛樻斁鏂囦欢鐨勬牴璺緞
+     */
+    public String getAppFilesPath() {
+        return HDLApp.getInstance().getFilesDir().getAbsolutePath() + userId + "/home";
+    }
+
+    public File createFile(String dirPath, String fileName) {
         try {
             File dirFile = new File(dirPath);
             if (!dirFile.exists()) {
@@ -71,7 +82,7 @@
     /**
      * 鍒涘缓鏂囦欢澶�---涔嬫墍浠ヨ涓�灞傚眰鍒涘缓锛屾槸鍥犱负涓�娆℃�у垱寤哄灞傛枃浠跺す鍙兘浼氬け璐ワ紒
      */
-    public static boolean createFileDir(File dirFile) {
+    public boolean createFileDir(File dirFile) {
         if (dirFile == null) {
             return true;
         }
@@ -92,7 +103,7 @@
         }
     }
 
-    public static void writeFile(String path, String data) {
+    public void writeFile(String path, String data) {
         try {
             File file = new File(path);
             if (!file.exists()) {
@@ -111,7 +122,7 @@
 
     }
 
-    public static String readFile(String filepath) {
+    public String readFile(String filepath) {
         try {
             String fileContent = "";
             if (null == filepath) {
@@ -140,7 +151,7 @@
     /**
      * 鎶婁綅鍥炬暟鎹繚瀛樺埌鎸囧畾璺緞鐨勫浘鐗囨枃浠�
      */
-    public static void writeImage(String path, Bitmap bitmap) {
+    public void writeImage(String path, Bitmap bitmap) {
         try {
             //鏍规嵁鎸囧畾鏂囦欢璺緞鏋勫缓缂撳瓨杈撳嚭娴佸璞�
             BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(path));
@@ -159,7 +170,7 @@
     /**
      * 浠庢寚瀹氳矾寰勭殑鍥剧墖鏂囦欢涓鍙栦綅鍥炬暟鎹�
      */
-    public static Bitmap readImage(String path) {
+    public Bitmap readImage(String path) {
         try {
             //鏍规嵁鎸囧畾鏂囦欢璺緞鏋勫缓缂撳瓨杈撳叆娴佸璞�
             BufferedInputStream bis = new BufferedInputStream(new FileInputStream(path));
@@ -174,8 +185,4 @@
         }
         return null;
     }
-
 }
-
-
-
diff --git a/app/src/main/java/com/hdl/photovoltaic/ui/HomeLoginActivity.java b/app/src/main/java/com/hdl/photovoltaic/ui/HomeLoginActivity.java
index b655da1..ba77b80 100644
--- a/app/src/main/java/com/hdl/photovoltaic/ui/HomeLoginActivity.java
+++ b/app/src/main/java/com/hdl/photovoltaic/ui/HomeLoginActivity.java
@@ -2,7 +2,6 @@
 
 
 import android.os.Bundle;
-import android.os.SystemClock;
 import android.text.Editable;
 import android.text.Spannable;
 import android.text.SpannableStringBuilder;
@@ -13,8 +12,6 @@
 import android.text.style.ForegroundColorSpan;
 import android.util.Log;
 import android.view.View;
-import android.view.animation.Animation;
-import android.view.animation.RotateAnimation;
 import android.widget.TextView;
 
 
@@ -22,9 +19,11 @@
 
 import com.hdl.photovoltaic.R;
 import com.hdl.photovoltaic.base.CustomBaseActivity;
+import com.hdl.photovoltaic.bean.LoginUserRegionBean;
+import com.hdl.photovoltaic.config.ConfigManagement;
 import com.hdl.photovoltaic.databinding.ActivityHomeLoginBinding;
-import com.hdl.photovoltaic.ui.MyPowerStationActivity;
-import com.hdl.photovoltaic.utils.FileUtils;
+import com.hdl.photovoltaic.listener.CloudCallBeak;
+import com.hdl.photovoltaic.other.HdlAccountLogic;
 
 
 public class HomeLoginActivity extends CustomBaseActivity {
@@ -160,7 +159,18 @@
         viewBinding.homeLoginExperienceTv.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                startActivity(MyPowerStationActivity.class);
+//                startActivity(MyPowerStationActivity.class);
+                HdlAccountLogic.getInstance().regionByAccount("18402017839", new CloudCallBeak<LoginUserRegionBean>() {
+                    @Override
+                    public void onSuccess(LoginUserRegionBean obj) {
+                        ConfigManagement.setUserRegionUrl(obj.getRegionUrl());
+                    }
+
+                    @Override
+                    public void onFailure(Exception exception) {
+
+                    }
+                });
 
             }
         });
diff --git a/app/src/main/java/com/hdl/photovoltaic/utils/HDLMD5Utils.java b/app/src/main/java/com/hdl/photovoltaic/utils/HDLMD5Utils.java
new file mode 100644
index 0000000..84ffec6
--- /dev/null
+++ b/app/src/main/java/com/hdl/photovoltaic/utils/HDLMD5Utils.java
@@ -0,0 +1,177 @@
+package com.hdl.photovoltaic.utils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.UnsupportedEncodingException;
+import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+public class HDLMD5Utils {
+    /**
+     * MD5杞瓧绗︿覆
+     */
+    public static String encodeMD5(String s) {
+        try {
+            MessageDigest digest = MessageDigest.getInstance("MD5");
+            digest.update(s.getBytes(StandardCharsets.UTF_8));
+            byte[] messageDigest = digest.digest();
+            return toHexString(messageDigest);
+        } catch (NoSuchAlgorithmException e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
+
+    private static String toHexString(byte[] keyData) {
+        if (keyData == null) {
+            return null;
+        }
+        int expectedStringLen = keyData.length * 2;
+        StringBuilder sb = new StringBuilder(expectedStringLen);
+        for (byte keyDatum : keyData) {
+            String hexStr = Integer.toString(keyDatum & 0x00FF, 16);
+            if (hexStr.length() == 1) {
+                hexStr = "0" + hexStr;
+            }
+            sb.append(hexStr);
+        }
+        return sb.toString();
+    }
+
+    /**
+     * MD5杞瓧绗︿覆
+     * 棰濆鍊�
+     */
+    public static String encodeMD52(String s) {
+        char[] hexDigits = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
+        try {
+            byte[] btInput = s.getBytes(StandardCharsets.UTF_8);
+            MessageDigest digest = MessageDigest.getInstance("MD5");
+            digest.update(btInput);
+            byte[] md = digest.digest();
+            int j = md.length;
+            char[] str = new char[j * 2];
+            int k = 0;
+            for (byte byte0 : md) {
+                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
+                str[k++] = hexDigits[byte0 & 0xf];
+            }
+            return new String(str);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * MD5鏂囦欢杞瓧绗︿覆
+     */
+    public static String encodeMD5(File f) {
+        if (!f.isFile()) {
+            return null;
+        }
+        MessageDigest digest;
+        byte[] buffer = new byte[1024];
+        int len;
+        try {
+            digest = MessageDigest.getInstance("MD5");
+            FileInputStream in = new FileInputStream(f);
+            while ((len = in.read(buffer, 0, 1024)) != -1) {
+                digest.update(buffer, 0, len);
+            }
+            in.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+        BigInteger bigInt = new BigInteger(1, digest.digest());
+        return bigInt.toString(16);
+    }
+
+    /**
+     * MD5鏂囦欢杞瓧绗︿覆
+     */
+    public static String encodeMD5(byte[] f) {
+        MessageDigest digest;
+        try {
+            digest = MessageDigest.getInstance("MD5");
+            digest.update(f);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+        BigInteger bigInt = new BigInteger(1, digest.digest());
+        return bigInt.toString(16);
+    }
+
+
+    public final static String md5(String plainText) {
+
+// 杩斿洖瀛楃涓�
+
+        String md5Str = null;
+
+        try {
+
+// 鎿嶄綔瀛楃涓�
+
+            StringBuffer buf = new StringBuffer();
+
+            MessageDigest md =
+
+                    MessageDigest.getInstance("MD5");
+
+// 娣诲姞瑕佽繘琛岃绠楁憳瑕佺殑淇℃伅,浣跨敤 plainText 鐨� byte
+
+
+            md.update(plainText.getBytes());
+
+// 璁$畻鍑烘憳瑕�,瀹屾垚鍝堝笇璁$畻銆�
+
+            byte b[] = md.digest();
+
+            int i;
+
+            for (int offset = 0; offset < b.length; offset++) {
+
+                i = b[offset];
+
+                if (i < 0) {
+
+                    i += 256;
+
+                }
+
+                if (i < 16) {
+
+                    buf.append("0");
+
+                }
+
+// 灏嗘暣鍨� 鍗佽繘鍒� i
+
+
+                buf.append(Integer.toHexString(i));
+
+            }
+
+// 32浣嶇殑鍔犲瘑
+
+            md5Str = buf.toString();
+
+// 16浣嶇殑鍔犲瘑
+
+// md5Str =  buf.toString().md5Strstring(8,24);
+
+        } catch (Exception e) {
+
+            e.printStackTrace();
+
+        }
+
+        return md5Str;
+
+    }
+}

--
Gitblit v1.8.0