package com.hdl.photovoltaic.other; import android.text.TextUtils; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import com.hdl.linkpm.sdk.core.exception.HDLException; import com.hdl.linkpm.sdk.user.HDLLinkPMUser; import com.hdl.linkpm.sdk.user.bean.HDLLoginBean; import com.hdl.linkpm.sdk.user.bean.HDLUserRegionBean; import com.hdl.linkpm.sdk.user.callback.ILoginCallBack; import com.hdl.linkpm.sdk.user.callback.IRegionByAccountCallBack; import com.hdl.photovoltaic.config.UserConfigManage; import com.hdl.photovoltaic.internet.HttpClient; import com.hdl.photovoltaic.internet.api.HttpApi; import com.hdl.photovoltaic.listener.CloudCallBeak; import com.hdl.photovoltaic.ui.bean.AuthorizationAccountBean; import com.hdl.photovoltaic.ui.bean.BUserInfo; import com.hdl.photovoltaic.ui.bean.CUserInfo; import java.io.File; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 账号逻辑 */ public class HdlAccountLogic { private static volatile HdlAccountLogic sHdlAccountLogic; /** * 获取当前对象 * * @return HdlAccountLogic */ public static synchronized HdlAccountLogic getInstance() { if (sHdlAccountLogic == null) { synchronized (HdlAccountLogic.class) { if (sHdlAccountLogic == null) { sHdlAccountLogic = new HdlAccountLogic(); } } } return sHdlAccountLogic; } // region --------【B端账号】--------- /** * 初始化账号的Url区域地址 * * @param i_account 账号 */ public void regionByAccount(String i_account, CloudCallBeak cloudCallBeak) { boolean isBooleanB = UserConfigManage.getInstance().isBAccount(); HDLLinkPMUser.getInstance().regionByAccount(isBooleanB, i_account, new IRegionByAccountCallBack() { @Override public void onSuccess(HDLUserRegionBean regionBean) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(regionBean); } } @Override public void onFailure(HDLException error) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(error); } } }); } /** * 登录(B,C端账号) * 通过账号和密码 * * @param account 手机或者邮箱 * @param loginPwd 密码 * @param callBack - */ public void loginByPassword(String account, String loginPwd, ILoginCallBack callBack) { boolean isBooleanB = UserConfigManage.getInstance().isBAccount(); JsonObject json = new JsonObject(); json.addProperty("account", account); json.addProperty("loginPwd", loginPwd); // json.addProperty("platform", "APP"); json.addProperty("grantType", "password"); HDLLinkPMUser.getInstance().loginByPassword(isBooleanB, account, loginPwd, new ILoginCallBack() { @Override public void onSuccess(HDLLoginBean loginBean) { if (callBack != null) { loginBean.setAccount(account); saveUserData(loginBean); callBack.onSuccess(loginBean); } } @Override public void onFailure(HDLException error) { if (callBack != null) { callBack.onFailure(error); } } }); } /** * 检验账号权限(B端账号) * * @param cloudCallBeak - */ public void getCompanyParterMenu_B(CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.B_POST_getCompanyParterMenu; JsonObject json = new JsonObject(); json.addProperty("sysCode", "xenterra-app"); HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String json) { if (cloudCallBeak != null) { if (TextUtils.isEmpty(json)) { cloudCallBeak.onSuccess(false); } else { Gson gson = new Gson(); Type type = new TypeToken>() { }.getType(); List authorizationAccounts = gson.fromJson(json, type); if (authorizationAccounts != null && !authorizationAccounts.isEmpty()) { cloudCallBeak.onSuccess(true); } else { cloudCallBeak.onSuccess(false); } } } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } /** * 修改密码(B端账号) * * @param isPhone true表示手机号,否则是邮箱 * @param account 账号 (手机或者邮箱) * @param loginPwd 新密码 * @param verifyCode 验证码 * @param cloudCallBeak - */ public void changePassword_B(boolean isPhone, String account, String loginPwd, String verifyCode, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.B_POST_FORGET_PROGRAM_PWD; JsonObject json = new JsonObject(); if (isPhone) { json.addProperty("userPhone", account);//用户手机号 手机号和邮箱必填其一 } else { json.addProperty("userEmail", account); } json.addProperty("loginPwd", loginPwd);//新密码 json.addProperty("verifyCode", verifyCode);//验证码 // json.addProperty("platform", "APP"); HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String str) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(true); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } /** * 更改个人密码(B端账号) * * @param loginOldPwd 老密码 * @param loginPwd 新密码 */ public void updatePassword_B(String loginOldPwd, String loginPwd, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.B_POST_UPDATE_PROGRAM_PASSWORD; JsonObject json = new JsonObject(); json.addProperty("userId", UserConfigManage.getInstance().getUserId()); json.addProperty("loginOldPwd", loginOldPwd);// 老密码 json.addProperty("loginPwd", loginPwd);//新密码 json.addProperty("confirmLoginPwd", loginPwd);//新密码确认密码 HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String str) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(str); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } /** * 刷新Token(C端账号) * * @param account 手机或者邮箱 * @param loginPwd 密码 * @param cloudCallBeak - */ public void refreshToken_B(String account, String loginPwd, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.C_POST_Login; JsonObject json = new JsonObject(); json.addProperty("grantType", "refresh_token"); // json.addProperty("refreshToken", UserConfigManage.getInstance().getRefreshToken()); HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String jsonStr) { Gson gson = new Gson(); HDLLoginBean loginBean = gson.fromJson(jsonStr, HDLLoginBean.class); // saveUserData(loginBean); if (cloudCallBeak != null) { cloudCallBeak.onSuccess(loginBean); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } /** * 获取用户详情信息(B端账号) * * @param cloudCallBeak - */ public void getUserInfo_B(CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.B_POST_GET_USERINFO; JsonObject json = new JsonObject(); json.addProperty("userId", UserConfigManage.getInstance().getUserId()); HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String jsonStr) { Gson gson = new Gson(); BUserInfo bUserInfo = gson.fromJson(jsonStr, BUserInfo.class); if (cloudCallBeak != null) { cloudCallBeak.onSuccess(bUserInfo); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } // endregion // region --------【C端账号】--------- /** * 上传用户头像 * * @param file 图片文件 * @param cloudCallBeak - */ public void uploadUserHeadImage_C(File file, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.C_POST_GET_IMAGE_URL; HttpClient.getInstance().uploadingFile(requestUrl, file, new CloudCallBeak() { @Override public void onSuccess(String jsonStr) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(jsonStr); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } /** * 获取用户头像路径(C端账号) * * @param imageKey 用户头像imageKey * @param cloudCallBeak - */ public void getImageKey_C(String imageKey, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.C_POST_GET_IMAGE_URL; JsonObject json = new JsonObject(); json.addProperty("imageKey", imageKey); HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String jsonStr) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(jsonStr); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } /** * 获取个人信息(C端账号) * * @param cloudCallBeak - */ public void getMemberInfo_C(CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.C_POST_GET_MEMBER_INFO; JsonObject json = new JsonObject(); HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String jsonStr) { Gson gson = new Gson(); CUserInfo cUserInfo = gson.fromJson(jsonStr, CUserInfo.class); if (cloudCallBeak != null) { cloudCallBeak.onSuccess(cUserInfo); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } /** * 下载子账号头像(C端账号) * * @param childAccountId 子账号id * @param childId 子账号(成员)id查找子账号接口获取到的数据id * @param homeId 住宅id * @param cloudCallBeak - */ public void getHeadPortrait_C(String childAccountId, String childId, String homeId, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.C_POST_GET_IMAGE_URL; JsonObject json = new JsonObject(); json.addProperty("childAccountId", childAccountId); if (TextUtils.isEmpty(childId)) { json.addProperty("childId", childId); } json.addProperty("homeId", homeId); HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String jsonStr) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(jsonStr); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } /** * 修改用户名称 * * @param memberName 用户名称 * @param cloudCallBeak - */ public void updateMemberName_C(String memberName, CloudCallBeak cloudCallBeak) { updateMemberInfo_C("", memberName, "", "", "", "", cloudCallBeak); } /** * 修改用户头像 * * @param memberHeadIcon 头像地址 * @param cloudCallBeak - */ public void updateMemberHeadIcon_C(String memberHeadIcon, CloudCallBeak cloudCallBeak) { updateMemberInfo_C("", "", "", memberHeadIcon, "", "", cloudCallBeak); } /** * 更新个人信息(C端账号) * * @param languageType 语言类型 * @param memberName 用户昵称 * @param memberBirthday 用户生日 * @param memberHeadIcon 用户头像 * @param loginName 登陆账号 * @param memberSex 用户性别 * @param cloudCallBeak - */ public void updateMemberInfo_C(String languageType, String memberName, String memberBirthday, String memberHeadIcon, String loginName, String memberSex, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.C_POST_UPDATE_MEMBER_INFO; JsonObject json = new JsonObject(); if (!TextUtils.isEmpty(languageType)) { json.addProperty("languageType", languageType);//语言类型 } if (!TextUtils.isEmpty(memberName)) { json.addProperty("memberName", memberName);//用户昵称 } if (!TextUtils.isEmpty(memberBirthday)) { json.addProperty("memberBirthday", memberBirthday);//用户生日 } if (!TextUtils.isEmpty(memberHeadIcon)) { json.addProperty("memberHeadIcon", memberHeadIcon);//用户头像 } if (!TextUtils.isEmpty(loginName)) { json.addProperty("loginName", loginName);//登陆账号 } if (!TextUtils.isEmpty(memberSex)) { json.addProperty("memberSex", memberSex);//用户性别 } HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String str) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(true); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } /** * 注册账号(C端账号) * 注意:B端不支持注册账号 * * @param isPhone true表示手机号,否则是邮箱 * @param account 账号 (手机或者邮箱) * @param loginPwd 密码 * @param verifyCode 验证码 * @param cloudCallBeak - */ public void registerAccount_C(boolean isPhone, String account, String loginPwd, String verifyCode, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.C_POST_GET_OAUTH_REGISTER; JsonObject json = new JsonObject(); if (isPhone) { json.addProperty("memberPhone", account);//用户手机号 手机号和邮箱必填其一 } else { json.addProperty("memberEmail", account); } json.addProperty("loginPwd", loginPwd);//登陆密码,需要MD5处理 json.addProperty("verifyCode", verifyCode);//验证码 // json.addProperty("platform", "APP"); // json.addProperty("memberName", "memberName");//会员昵称 HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String str) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(true); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } /** * 修改密码(C端账号) * * @param isPhone true表示手机号,否则是邮箱 * @param account 账号 (手机或者邮箱) * @param loginPwd 新密码 * @param verifyCode 验证码 * @param cloudCallBeak - */ public void changePassword_C(boolean isPhone, String account, String loginPwd, String verifyCode, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.C_POST_FORGET_PROGRAM_PWD; JsonObject json = new JsonObject(); if (isPhone) { json.addProperty("memberPhone", account);//用户手机号 手机号和邮箱必填其一 } else { json.addProperty("memberEmail", account); } json.addProperty("loginPwd", loginPwd);//新密码 json.addProperty("verifyCode", verifyCode);//验证码 // json.addProperty("platform", "APP"); HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String str) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(true); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } /** * 更改个人密码(C端账号) * * @param loginOldPwd 老密码 * @param loginPwd 新密码 */ public void updatePassword_C(String loginOldPwd, String loginPwd, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.C_POST_UPDATE_PROGRAM_PASSWORD; JsonObject json = new JsonObject(); json.addProperty("loginPwd", loginOldPwd);//老密码 json.addProperty("loginNewPwd", loginPwd);//新密码 HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String str) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(str); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } /** * 绑定认证(手机/邮箱)(C端账号) * * @param memberPhone 手机号(未绑定手机号参数传null) * @param memberEmail 邮箱(未绑定邮箱参数传null) * @param verifyCode 验证码 */ public void bindingAccount_C(String memberPhone, String memberEmail, String verifyCode, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.C_POST_MEMBERINFO_BINDWITHACCOUNT; JsonObject json = new JsonObject(); if (!TextUtils.isEmpty(memberPhone)) { json.addProperty("memberPhone", memberPhone);//手机号 } if (!TextUtils.isEmpty(memberEmail)) { json.addProperty("memberEmail", memberEmail);//邮箱 } json.addProperty("verifyCode", verifyCode);//验证码 HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String str) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(true); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } /** * 解绑认证(手机/邮箱)(C端账号) * * @param unBindLabel 解绑标识(PHONE EMAIL) */ public void unBindingAccount_C(String unBindLabel, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.C_POST_MEMBERINFO_UNBINDWITHACCOUNT; JsonObject json = new JsonObject(); json.addProperty("unBindLabel", unBindLabel);//手机号(PHONE EMAIL) HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String str) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(true); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } // endregion /** * 发送验证码(B和C端共用) * * @param isPhone true表示手机号,否则是邮箱 * @param account 账号 (手机或者邮箱) * @param phonePrefix 手机号前缀 * @param verifyType 1:注册 2:找回密码 3:绑定4:验证码登陆 5:敏感数据 * @param cloudCallBeak - */ public void sendVerifyCode(boolean isPhone, String account, String phonePrefix, int verifyType, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.POST_SEND_VERIFICATION; JsonObject json = new JsonObject(); if (isPhone) { json.addProperty("phone", account);//用户手机号 json.addProperty("phonePrefix", phonePrefix.replace("+", ""));//手机号前缀 } else { json.addProperty("mail", account);//邮箱 } json.addProperty("verifyType", verifyType);//1:注册 2:找回密码 3:绑定4:验证码登陆 5:敏感数据 // json.addProperty("languageType", loginPwd);//语言 // json.addProperty("expireSecond", expireSecond);//验证码过期时间(秒),默认5分钟 // json.addProperty("platform", "APP"); HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String str) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(true); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } /** * 退出登录时调用,清除推送数据 */ public void signOutClearData() { String requestUrl = HttpApi.POST_GET_IMAGE_LOGOUT; //通知云端,已经退出登陆 HttpClient.getInstance().requestHttp(requestUrl, new JsonObject().toString(), null); } 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); } /** * 注销账号(C端账号) * * @param pwd 账号密码 * @param cloudCallBeak - */ public void accountUnregisterC(String pwd, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.C_POST_MEMBER_UNREGISTER; JsonObject json = new JsonObject(); json.addProperty("userId", UserConfigManage.getInstance().getUserId()); json.addProperty("pwd", pwd); HttpClient.getInstance().requestHttp(requestUrl, json.toString(), new CloudCallBeak() { @Override public void onSuccess(String jsonStr) { if (cloudCallBeak != null) { cloudCallBeak.onSuccess(true); } } @Override public void onFailure(HDLException e) { if (cloudCallBeak != null) { cloudCallBeak.onFailure(e); } } }); } /** * 登录成功保存登录信息 */ private void saveUserData(HDLLoginBean obj) { if (obj != null) { boolean isUserId = UserConfigManage.getInstance().getUserId().equals(obj.getUserId()); UserConfigManage.getInstance().setTheSameLoginAccount(isUserId);//与上一个账号是否同一个 //UserConfigManage.getInstance().getUserId()表示第一次安装登录 if (!TextUtils.isEmpty(UserConfigManage.getInstance().getUserId()) && !UserConfigManage.getInstance().isTheSameLoginAccount()) { //不同账号,删除之前的旧账号日志信息; HdlFileLogic.getInstance().deleteDirectory(HdlFileLogic.getInstance().getCurrentUserRootPath()); HdlFileLogic.getInstance().deleteDirectory(HdlFileLogic.getInstance().getUserFilePath()); UserConfigManage.getInstance().setHomeId(""); } UserConfigManage.getInstance().setLogin(true);//是否登录 UserConfigManage.getInstance().setAcceiptPolicy(true);//是否选择隐私政策 UserConfigManage.getInstance().setLoginDateTime(System.currentTimeMillis());//登录时间 UserConfigManage.getInstance().setUserId(obj.getUserId());//用户id //b端和c端定义账号字段不一样 UserConfigManage.getInstance().setAccount(TextUtils.isEmpty(obj.getAccount()) ? obj.getUserPhone() : obj.getAccount());//账号 UserConfigManage.getInstance().setBingPhone(obj.getUserPhone());//绑定手机 UserConfigManage.getInstance().setBingEmail(obj.getUserEmail());//绑定邮箱 UserConfigManage.getInstance().setUserName(obj.getName()); UserConfigManage.getInstance().setToken(obj.getAccessToken());//Token UserConfigManage.getInstance().setHeaderPrefix(obj.getHeaderPrefix());//认证请求头前缀(底层请求统一加) UserConfigManage.getInstance().setRefreshToken(obj.getRefreshToken());//刷新Token用的 UserConfigManage.getInstance().Save(); } } }