package net.dev123.yibome; import java.text.ParseException; import java.util.Date; import java.util.List; import net.dev123.commons.Paging; import net.dev123.commons.ServiceProvider; import net.dev123.commons.http.HttpMethod; import net.dev123.commons.http.HttpRequestHelper; import net.dev123.commons.http.HttpRequestMessage; import net.dev123.commons.http.auth.Authorization; import net.dev123.commons.util.DateTimeUtil; import net.dev123.commons.util.EncryptUtil; import net.dev123.commons.util.ListUtil; import net.dev123.commons.util.StringUtil; import net.dev123.entity.StatusUpdate; import net.dev123.exception.ExceptionCode; import net.dev123.exception.LibException; import net.dev123.mblog.entity.Status; import net.dev123.mblog.entity.User; import net.dev123.yibome.converter.AccountJSONConverter; import net.dev123.yibome.converter.ConfigAppConverter; import net.dev123.yibome.converter.GroupJSONConverter; import net.dev123.yibome.converter.PointLevelJSONConverter; import net.dev123.yibome.converter.PointOrderInfoJSONConverter; import net.dev123.yibome.converter.StatusJSONConverter; import net.dev123.yibome.converter.StatusSyncJSONConverter; import net.dev123.yibome.converter.StringListJSONConverter; import net.dev123.yibome.converter.UserJSONConverter; import net.dev123.yibome.entity.Account; import net.dev123.yibome.entity.AccountSyncResult; import net.dev123.yibome.entity.ConfigApp; import net.dev123.yibome.entity.GroupSyncResult; import net.dev123.yibome.entity.LocalGroup; import net.dev123.yibome.entity.PointLevel; import net.dev123.yibome.entity.PointOrderInfo; import net.dev123.yibome.entity.StatusSyncResult; import net.dev123.yibome.entity.SubscribeCatalog; import net.dev123.yibome.entity.UserExtInfo; import net.dev123.yibome.entity.UserGroup; import net.dev123.yibome.entity.UserGroupSyncResult; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public class YiBoMeImpl extends YiBoMe { public YiBoMeImpl(Authorization auth) { super(auth); } @Override public AccountSyncResult syncAccounts(List<? extends Account> accounts) throws LibException{ try { JSONArray jsonArray = AccountJSONConverter.toJSONArray(accounts); HttpRequestMessage httpRequestMessage = new HttpRequestMessage( HttpMethod.POST, conf.getAccountSyncURL(), auth); httpRequestMessage.addParameter("accounts", jsonArray.toString()); httpRequestMessage.addParameter("flag", 1); // 增加此标志,表明加密 String response = HttpRequestHelper.execute(httpRequestMessage, responseHandler); JSONObject json = new JSONObject(response); AccountSyncResult syncResult = new AccountSyncResult(); if (!json.isNull("to_be_added")) { JSONArray toBeAddedArray = json.getJSONArray("to_be_added"); List<Account> toBeAdded = AccountJSONConverter.toAccountList(toBeAddedArray); syncResult.setToBeAdded(toBeAdded); } if (!json.isNull("to_be_deleted")) { JSONArray toBeDeletedArray = json.getJSONArray("to_be_deleted"); List<Account> toBeDeleted = AccountJSONConverter.toAccountList(toBeDeletedArray); syncResult.setToBeDeleted(toBeDeleted); } if (!json.isNull("to_be_updated")) { JSONArray toBeUpdatedArray = json.getJSONArray("to_be_updated"); List<Account> toBeUpdated = AccountJSONConverter.toAccountList(toBeUpdatedArray); syncResult.setToBeUpdated(toBeUpdated); } return syncResult; } catch (JSONException e) { throw new LibException(ExceptionCode.JSON_PARSE_ERROR); } catch (ParseException e) { throw new LibException(ExceptionCode.DATE_PARSE_ERROR); } } @Override public GroupSyncResult syncGroups(List<LocalGroup> groups) throws LibException { try { JSONArray jsonArray = GroupJSONConverter.toJSONArray(groups); HttpRequestMessage httpRequestMessage = new HttpRequestMessage( HttpMethod.POST, conf.getAccountSyncURL(), auth); httpRequestMessage.addParameter("groups", jsonArray.toString()); String response = HttpRequestHelper.execute(httpRequestMessage, responseHandler); JSONObject json = new JSONObject(response); GroupSyncResult groupSyncResult = new GroupSyncResult(); if (!json.isNull("to_be_added")) { JSONArray toBeAddedArray = json.getJSONArray("to_be_added"); List<LocalGroup> toBeAdded = GroupJSONConverter.toGroupList(toBeAddedArray); groupSyncResult.setToBeAdded(toBeAdded); } if (!json.isNull("to_be_deleted")) { JSONArray toBeDeletedArray = json.getJSONArray("to_be_deleted"); List<LocalGroup> toBeDeleted = GroupJSONConverter.toGroupList(toBeDeletedArray); groupSyncResult.setToBeDeleted(toBeDeleted); } if (!json.isNull("to_update_name")) { JSONArray toUpdateNameArray = json.getJSONArray("to_update_name"); List<LocalGroup> toUpdateName = GroupJSONConverter.toGroupList(toUpdateNameArray); groupSyncResult.setToUpdateName(toUpdateName); } if (!json.isNull("to_update_id")) { JSONArray toUpdateIdArray = json.getJSONArray("to_update_id"); List<LocalGroup> toUpdateId = GroupJSONConverter.toGroupList(toUpdateIdArray); groupSyncResult.setToUpdateId(toUpdateId); } return groupSyncResult; } catch (JSONException e) { throw new LibException(ExceptionCode.JSON_PARSE_ERROR); } } @Override public UserGroupSyncResult syncGroupUsers(Long groupId, List<UserGroup> userGroups, ServiceProvider sp) throws LibException{ try { JSONArray jsonArray = new JSONArray(); for (UserGroup userGroup : userGroups) { JSONObject json = new JSONObject(); json.put("user_id", userGroup.getUserId()); json.put("state", userGroup.getState()); jsonArray.put(json); } HttpRequestMessage httpRequestMessage = new HttpRequestMessage( HttpMethod.POST, conf.getAccountSyncURL(), auth); httpRequestMessage.addParameter("service_provider", sp.getServiceProviderNo()); httpRequestMessage.addParameter("group_id", groupId); httpRequestMessage.addParameter("users", jsonArray.toString()); String response = HttpRequestHelper.execute(httpRequestMessage, responseHandler); UserGroupSyncResult userGroupSyncResult = new UserGroupSyncResult(); JSONObject json = new JSONObject(response); userGroupSyncResult.setGroupId(json.getLong("group_id")); userGroupSyncResult.setServiceProviderNo(json.getInt("service_provider")); if (!json.isNull("to_be_added")) { JSONArray toBeAddedArray = json.getJSONArray("to_be_added"); List<String> toBeAdded = StringListJSONConverter.toStringList(toBeAddedArray); userGroupSyncResult.setToBeAdded(toBeAdded); } if (!json.isNull("to_be_deleted")) { JSONArray toBeDeletedArray = json.getJSONArray("to_be_deleted"); List<String> toBeDeleted = StringListJSONConverter.toStringList(toBeDeletedArray); userGroupSyncResult.setToBeDeleted(toBeDeleted); } return userGroupSyncResult; } catch (JSONException e) { throw new LibException(ExceptionCode.JSON_PARSE_ERROR); } } @Override public List<Status> getStatusSubscribe(SubscribeCatalog catalog, ServiceProvider sp, Paging<Status> paging) throws LibException { if (catalog == null || catalog == SubscribeCatalog.NONE || sp == null || paging == null) { throw new LibException(ExceptionCode.PARAMETER_NULL); } HttpRequestMessage httpRequestMessage = new HttpRequestMessage( HttpMethod.POST, conf.getStatusSubscribeURL(), auth); httpRequestMessage.addParameter("serviceProvider", sp.getServiceProviderNo()); httpRequestMessage.addParameter("catalog", catalog.getSubscribeCatalogNo()); httpRequestMessage.addParameter("pageIndex", paging.getPageIndex()); httpRequestMessage.addParameter("pageSize", paging.getPageSize()); String response = HttpRequestHelper.execute(httpRequestMessage, responseHandler); List<Status> statusList = StatusJSONConverter.createStatusList(response); if (ListUtil.isEmpty(statusList) || statusList.size() < paging.getPageSize() / 2) { paging.setLastPage(true); } return statusList; } @Override public User getUserBaseInfo(String userId, ServiceProvider sp) throws LibException { if (StringUtil.isEmpty(userId) || sp == null) { throw new LibException(ExceptionCode.PARAMETER_NULL); } HttpRequestMessage httpRequestMessage = new HttpRequestMessage( HttpMethod.POST, conf.getUserBaseInfoURL(), auth); httpRequestMessage.addParameter("userId", userId); httpRequestMessage.addParameter("serviceProvider", sp.getServiceProviderNo()); String response = HttpRequestHelper.execute(httpRequestMessage, responseHandler); User user = UserJSONConverter.createUser(response); return user; } @Override public UserExtInfo getUserExtInfo(String userId, ServiceProvider sp) throws LibException { if (StringUtil.isEmpty(userId) || sp == null) { throw new LibException(ExceptionCode.PARAMETER_NULL); } HttpRequestMessage httpRequestMessage = new HttpRequestMessage( HttpMethod.POST, conf.getUserExtInfoURL(), auth); httpRequestMessage.addParameter("userId", userId); httpRequestMessage.addParameter("serviceProvider", sp.getServiceProviderNo()); String response = HttpRequestHelper.execute(httpRequestMessage, responseHandler); UserExtInfo userExtInfo = UserJSONConverter.createUserExtInfo(response); return userExtInfo; } @Override public List<StatusSyncResult> syncStatus(StatusUpdate updateStatus, String accountInfos) throws LibException { if (updateStatus == null || StringUtil.isEmpty(updateStatus.getStatus()) || StringUtil.isEmpty(accountInfos)) { throw new LibException(ExceptionCode.PARAMETER_NULL); } HttpRequestMessage httpRequestMessage = new HttpRequestMessage( HttpMethod.POST, conf.getStatusSyncURL(), auth); httpRequestMessage.addParameter("text", updateStatus.getStatus()); httpRequestMessage.addParameter("accounts_info", accountInfos); if (updateStatus.getImage() != null) { httpRequestMessage.addParameter("image", updateStatus.getImage()); } if (updateStatus.getLocation() != null) { httpRequestMessage.addParameter( "latitude", updateStatus.getLocation().getLatitude()); httpRequestMessage.addParameter( "longitude", updateStatus.getLocation().getLongitude()); } String response = HttpRequestHelper.execute(httpRequestMessage, responseHandler); return StatusSyncJSONConverter.createStatusSyncResultList(response); } @Override public List<StatusSyncResult> syncStatus(StatusUpdate updateStatus, List<? extends Account> accountList) throws LibException { if (updateStatus == null || StringUtil.isEmpty(updateStatus.getStatus()) || accountList == null || accountList.size() < 1) { throw new LibException(ExceptionCode.PARAMETER_NULL); } JSONArray accountsInfoJsonArray = StatusSyncJSONConverter.createAccountInfos(accountList); return syncStatus(updateStatus, accountsInfoJsonArray.toString()); } @Override public PointLevel getPoints() throws LibException { HttpRequestMessage httpRequestMessage = new HttpRequestMessage( HttpMethod.POST, conf.getPointsURL(), auth); String response = HttpRequestHelper.execute(httpRequestMessage, responseHandler); return PointLevelJSONConverter.createPointLevel(response); } @Override public PointOrderInfo addLoginPoints() throws LibException { HttpRequestMessage httpRequestMessage = new HttpRequestMessage( HttpMethod.POST, conf.getLoginPointsAddURL(), auth); String sig = sign(); httpRequestMessage.addParameter("sig", sig); String response = HttpRequestHelper.execute(httpRequestMessage, responseHandler); return PointOrderInfoJSONConverter.createPointOrder(response); } private String sign(Object... params) { StringBuffer sb = new StringBuffer(); if (params == null || params.length == 0) { return sb.toString(); } for (int i = 0; i < params.length; i++) { Object param = params[i]; sb.append(param.toString()); //if (i != params.length -1) { // sb.append("|"); //} } sb.append(DateTimeUtil.getShortFormat(new Date())); return EncryptUtil.getMD5(sb.toString()); } public List<ConfigApp> getMyConfigApps() throws LibException { return getMyConfigApps(null); } public List<ConfigApp> getMyConfigApps(ServiceProvider sp) throws LibException { HttpRequestMessage httpRequestMessage = new HttpRequestMessage( HttpMethod.POST, conf.getMyConfigAppsURL(), auth); if (sp != null) { httpRequestMessage.addParameter("service_provider_no", sp.getServiceProviderNo()); } String response = HttpRequestHelper.execute(httpRequestMessage, responseHandler); List<ConfigApp> appList = ConfigAppConverter.createConfigAppList(response); return appList; } }