diff --git a/services/devicemanagerservice/include/auth/hichain_connector.h b/services/devicemanagerservice/include/auth/hichain_connector.h index b1cec9bd52605366febde82b4ceffbb64c446034..0bb50c2d3e581c3f24f0b496ad8c000208a89e6b 100644 --- a/services/devicemanagerservice/include/auth/hichain_connector.h +++ b/services/devicemanagerservice/include/auth/hichain_connector.h @@ -79,6 +79,9 @@ public: void OnGroupCreated(int64_t requestId, const std::string &returnData); void GetSyncGroupList(std::vector &groupList, std::vector &syncGroupList); void OnMemberJoin(int64_t requestId, int32_t status); + int32_t GetGroupInfo(std::string queryParams, std::vector &groupList); + int32_t IsGroupCreated(std::string groupName, GroupInfo &groupInfo); + private: std::string GetConnectPara(std::string deviceId, std::shared_ptr msgResponseAuth); bool IsGroupInfoInvalid(GroupInfo &group); diff --git a/services/devicemanagerservice/src/auth/hichain_connector.cpp b/services/devicemanagerservice/src/auth/hichain_connector.cpp index 06c3716fed75e510367a4420f8640d9e644861dd..ca36a5db8bd92f5133e21e56990e5a5c6c715cd1 100644 --- a/services/devicemanagerservice/src/auth/hichain_connector.cpp +++ b/services/devicemanagerservice/src/auth/hichain_connector.cpp @@ -106,6 +106,11 @@ int32_t HichainConnector::CreateGroup(int64_t requestId, const std::string &grou return FAIL; } + GroupInfo groupInfo; + if (IsGroupCreated(groupName, groupInfo)) { + DeleteGroup(groupInfo.groupId); + } + DMLOG(DM_LOG_INFO, "HichainConnector::CreateGroup requestId %lld", requestId); char localDeviceId[DEVICE_UUID_LENGTH] = {0}; GetDevUdid(localDeviceId, DEVICE_UUID_LENGTH); @@ -127,6 +132,61 @@ int32_t HichainConnector::CreateGroup(int64_t requestId, const std::string &grou return SUCCESS; } +int32_t HichainConnector::IsGroupCreated(std::string groupName, GroupInfo &groupInfo) +{ + nlohmann::json jsonObj; + jsonObj[FIELD_GROUP_NAME] = groupName.c_str(); + std::string queryParams = jsonObj.dump(); + + std::vector groupList; + if (GetGroupInfo(queryParams, groupList)) { + groupInfo = groupList[0]; + return true; + } + + return false; +} + +int32_t HichainConnector::GetGroupInfo(std::string queryParams, std::vector &groupList) +{ + char *groupVec = nullptr; + uint32_t num = 0; + + int32_t ret = deviceGroupManager_->getGroupInfo(DEVICE_MANAGER_APP.c_str(), queryParams.c_str(), &groupVec, &num); + if (ret != 0) { + DMLOG(DM_LOG_ERROR, "HichainConnector::GetGroupInfo faild , ret: %d.", ret); + return false; + } + + if (groupVec == nullptr) { + DMLOG(DM_LOG_ERROR, "HichainConnector::GetGroupInfo faild , returnGroups is nullptr"); + return false; + } + + if (num == 0) { + DMLOG(DM_LOG_ERROR, "HichainConnector::GetGroupInfo group failed, groupNum is 0."); + return false; + } + + DMLOG(DM_LOG_INFO, "HichainConnector::GetGroupInfo group(%s), groupNum(%d)", groupVec, num); + std::string relatedGroups = std::string(groupVec); + deviceGroupManager_->destroyInfo(&groupVec); + nlohmann::json jsonObject = nlohmann::json::parse(relatedGroups); + if (jsonObject.is_discarded()) { + DMLOG(DM_LOG_ERROR, "returnGroups parse error"); + return false; + } + + std::vector groupInfos = jsonObject.get>(); + if (groupInfos.size() == 0) { + DMLOG(DM_LOG_ERROR, "HichainConnector::GetGroupInfo group failed, groupInfos is empty."); + return false; + } + + groupList = groupInfos; + return true; +} + void HichainConnector::RegisterConnectorCallback(std::shared_ptr callback) { hichainConnectorCallback_ = callback;