diff --git a/im-center-server/pom.xml b/im-center-server/pom.xml index 06b35f7..25a3be7 100644 --- a/im-center-server/pom.xml +++ b/im-center-server/pom.xml @@ -21,6 +21,11 @@ + + cn.axzo.org + org-api + 1.0.0-SNAPSHOT + com.alibaba druid diff --git a/im-center-server/src/main/java/cn/axzo/im/controller/PrivateController.java b/im-center-server/src/main/java/cn/axzo/im/controller/PrivateController.java index 795abae..2bb5ec5 100644 --- a/im-center-server/src/main/java/cn/axzo/im/controller/PrivateController.java +++ b/im-center-server/src/main/java/cn/axzo/im/controller/PrivateController.java @@ -8,7 +8,6 @@ import cn.axzo.im.channel.netease.dto.RevokeMessageRequest; import cn.axzo.im.job.CreateMessageHistoryJob; import cn.axzo.im.job.ExpungeImTaskJob; import cn.axzo.im.job.RevokeAllMessagesJob; -import cn.axzo.im.job.UpdateImAccountOuIdJob; import cn.axzo.im.service.AccountRegisterService; import cn.azxo.framework.common.model.CommonResponse; import com.alibaba.fastjson.JSONObject; @@ -29,7 +28,6 @@ public class PrivateController { private final NimClient nimClient; private final RevokeAllMessagesJob revokeAllMessagesJob; - private final UpdateImAccountOuIdJob updateImAccountOuIdJob; private final AccountRegisterService accountRegisterService; private final CreateMessageHistoryJob createMessageHistoryJob; private final MessageController messageController; @@ -55,11 +53,6 @@ public class PrivateController { return revokeAllMessagesJob.execute(param); } - @PostMapping("/private/im-account/ou-id/update") - public Object updateImAccountOuId(@RequestBody UpdateImAccountOuIdJob.UpdateImAccountOuIdParam param) throws Exception { - return updateImAccountOuIdJob.execute(JSONObject.toJSONString(param)); - } - @PostMapping("/private/account-register/page") public Object pageAccountRegister(@RequestBody AccountRegisterService.PageAccountRegisterParam param) throws Exception { return accountRegisterService.page(param); diff --git a/im-center-server/src/main/java/cn/axzo/im/job/UpdateImAccountOuIdJob.java b/im-center-server/src/main/java/cn/axzo/im/job/UpdateImAccountOuIdJob.java deleted file mode 100644 index dfc0256..0000000 --- a/im-center-server/src/main/java/cn/axzo/im/job/UpdateImAccountOuIdJob.java +++ /dev/null @@ -1,160 +0,0 @@ -package cn.axzo.im.job; - -import cn.axzo.basics.common.constant.enums.OrganizationalUnitTypeEnum; -import cn.axzo.im.center.common.enums.AccountTypeEnum; -import cn.axzo.im.center.common.enums.AppTypeEnum; -import cn.axzo.im.entity.AccountRegister; -import cn.axzo.im.service.AccountRegisterService; -import cn.axzo.maokai.api.client.OrganizationalUnitApi; -import cn.axzo.maokai.api.vo.request.OrganizationalUnitQuery; -import cn.axzo.maokai.api.vo.response.OrganizationalUnitVO; -import cn.axzo.tyr.client.feign.TyrSaasRoleUserApi; -import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserDTO; -import cn.axzo.tyr.client.model.roleuser.req.RoleUserParam; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.google.common.collect.Lists; -import com.xxl.job.core.biz.model.ReturnT; -import com.xxl.job.core.handler.IJobHandler; -import com.xxl.job.core.handler.annotation.XxlJob; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.Collections; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; -import java.util.stream.Collectors; - -/** - * 把appType = CMP、accountType = 'user'的账号的ouId更新成用户最后加入的企业id - * 因为用户在管理版的IM云信消息要按照企业隔离,历史的账号是跟企业没绑定,要保持数据不丢失 - */ -@Slf4j -@Component -@RequiredArgsConstructor -public class UpdateImAccountOuIdJob extends IJobHandler { - - @Autowired - private AccountRegisterService accountRegisterService; - @Autowired - private TyrSaasRoleUserApi tyrSaasRoleUserApi; - @Autowired - private OrganizationalUnitApi organizationalUnitApi; - - private static final Integer DEFAULT_PAGE_SIZE = 500; - - @Override - @XxlJob("updateImAccountOuIdJob") - public ReturnT execute(String s) throws Exception { - - log.info("start updateImAccountOuIdJob,s:{}", s); - UpdateImAccountOuIdParam updateImAccountOuIdParam = Optional.ofNullable(s) - .map(e -> JSONObject.parseObject(e, UpdateImAccountOuIdParam.class)) - .orElseGet(() -> UpdateImAccountOuIdParam.builder().build()); - Integer pageNumber = 1; - while (true) { - AccountRegisterService.PageAccountRegisterParam req = AccountRegisterService.PageAccountRegisterParam.builder() - .ids(updateImAccountOuIdParam.getIds()) - .appType(AppTypeEnum.CMP.getCode()) - .accountType(AccountTypeEnum.USER.getCode()) - .accountWrapperEW("cmp") - .page(pageNumber++) - .pageSize(DEFAULT_PAGE_SIZE) - .build(); - - Page page = accountRegisterService.page(req); - if (CollectionUtils.isNotEmpty(page.getRecords())) { - - Map nodeUsers = listNodeUsers(page.getRecords()); - - updateAccountRegister(page.getRecords(), nodeUsers); - } - - if (!page.hasNext()) { - break; - } - } - log.info("end updateImAccountOuIdJob"); - return ReturnT.SUCCESS; - } - - private void updateAccountRegister(List accountRegisters, Map nodeUsers) { - List update = accountRegisters.stream() - .filter(accountRegister -> nodeUsers.get(accountRegister.getAccountId()) != null) - .map(accountRegister -> { - Long ouId = nodeUsers.get(accountRegister.getAccountId()); - - if (ouId == null) { - return null; - } - AccountRegister result = new AccountRegister(); - result.setId(accountRegister.getId()); - result.setOuId(ouId); - result.setUpdateAt(new Date()); - return result; - }) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - if (CollectionUtils.isEmpty(accountRegisters)) { - log.info("updateImAccountOuIdJob: no data update"); - return; - } - - accountRegisterService.updateBatchById(update); - } - - private Map listNodeUsers(List accountRegisters) { - if (CollectionUtils.isEmpty(accountRegisters)) { - return Collections.EMPTY_MAP; - } - Set accountIds = accountRegisters.stream() - .map(AccountRegister::getAccountId) - .filter(Objects::nonNull) - .filter(StringUtils::isNumeric) - .map(Long::valueOf) - .collect(Collectors.toSet()); - if (CollectionUtils.isEmpty(accountIds)) { - return Collections.EMPTY_MAP; - } - - List saasRoleUsers = accountIds.stream() - .flatMap(e -> tyrSaasRoleUserApi.roleUserList(RoleUserParam.builder().personId(e).build()).getData().stream()) - .collect(Collectors.toList()); - - List ouIds = Lists.transform(saasRoleUsers, SaasRoleUserDTO::getOuId); - - if (CollectionUtils.isEmpty(ouIds)) { - return Collections.EMPTY_MAP; - } - - Set effectOuIds = organizationalUnitApi.list(OrganizationalUnitQuery.builder().unitIds(ouIds).build()).getData() - .stream() - .filter(e -> !Objects.equals(e.getType(), OrganizationalUnitTypeEnum.PROJECT_OUT_TEAM.getValue())) - .map(OrganizationalUnitVO::getId) - .collect(Collectors.toSet()); - - return saasRoleUsers.stream() - .filter(e -> effectOuIds.contains(e.getOuId())) - .collect(Collectors.toMap(e -> e.getNaturalPersonId().toString(), SaasRoleUserDTO::getOuId, (f, s) -> f)); - } - - @Data - @Builder - @NoArgsConstructor - @AllArgsConstructor - public static class UpdateImAccountOuIdParam { - private List ids; - } -}