package com.hdl.photovoltaic.other; import com.google.gson.Gson; import com.google.gson.JsonObject; 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 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) { HDLLinkPMUser.getInstance().regionByAccount(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端账号) * 通过账号和密码 * * @param account 手机或者邮箱 * @param loginPwd 密码 * @param callBack - */ public void loginByPassword(String account, String loginPwd, ILoginCallBack callBack) { 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"); HDLLinkPMUser.getInstance().loginByPassword(account, loginPwd, new ILoginCallBack() { @Override public void onSuccess(HDLLoginBean loginBean) { if (callBack != null) { saveUserData(loginBean); callBack.onSuccess(loginBean); } } @Override public void onFailure(HDLException error) { if (callBack != null) { callBack.onFailure(error); } } }); } /** * 修改密码(B端账号) * * @param isPhone true表示手机号,否则是邮箱 * @param account 账号 (手机或者邮箱) * @param loginPwd 新密码 * @param verifyCode 验证码 * @param cloudCallBeak - */ public void changeBPassword(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); } } }); } /** * 刷新Token(B端账号) * * @param account 手机或者邮箱 * @param loginPwd 密码 * @param cloudCallBeak - */ public void refreshToken(String account, String loginPwd, CloudCallBeak cloudCallBeak) { String requestUrl = HttpApi.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); } } }); } // endregion // region --------【C端账号】--------- /** * 注册账号(C端账号) * 注意:B * * @param isPhone true表示手机号,否则是邮箱 * @param account 账号 (手机或者邮箱) * @param loginPwd 密码 * @param verifyCode 验证码 * @param cloudCallBeak - */ public void registerAccount(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 changeCPassword(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); } } }); } // endregion /** * 发送验证码 * * @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);//手机号前缀 } 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; //通知云端,已经退出登陆 } 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); } /** * 登录成功保存登录信息 */ private void saveUserData(HDLLoginBean obj) { if (obj != null) { UserConfigManage.getInstance().setLogin(true);//是否登录 UserConfigManage.getInstance().setAcceiptPolicy(true);//是否选择隐私政策 UserConfigManage.getInstance().setLoginDateTime(System.currentTimeMillis());//登录时间 UserConfigManage.getInstance().setUserId(obj.getUserId());//用户id UserConfigManage.getInstance().setAccount(obj.getAccount());//账号 UserConfigManage.getInstance().setToken(obj.getAccessToken());//Token UserConfigManage.getInstance().setHeaderPrefix(obj.getHeaderPrefix());//认证请求头前缀(底层请求统一加) UserConfigManage.getInstance().setRefreshToken(obj.getRefreshToken());//刷新Token用的刷新Token用的 boolean isUserId = UserConfigManage.getInstance().getUserId().equals(obj.getUserId()); UserConfigManage.getInstance().setTheSameLoginAccount(isUserId);//与上一个账号是否同一个 } } }