REQ-3282: 替换单位相关接口

This commit is contained in:
yanglin 2024-12-23 17:36:03 +08:00
parent 25b1226d87
commit 9e246b0382
16 changed files with 253 additions and 229 deletions

View File

@ -1,29 +1,26 @@
package cn.axzo.im.account;
import cn.axzo.basics.profiles.dto.basic.PersonProfileDto;
import cn.axzo.framework.rocketmq.Event;
import cn.axzo.framework.rocketmq.EventConsumer;
import cn.axzo.framework.rocketmq.EventHandler;
import cn.axzo.im.center.api.vo.req.AccountAbsentQuery;
import cn.axzo.im.center.api.vo.resp.UserAccountResp;
import cn.axzo.im.center.common.enums.AppTypeEnum;
import cn.axzo.im.gateway.ProfilesApiGateway;
import cn.axzo.im.gateway.OrgJobGateway;
import cn.axzo.im.gateway.OrganizationalNodeUserApiGateway;
import cn.axzo.im.job.PersonIdAndOu;
import cn.axzo.im.service.AccountService;
import cn.axzo.im.utils.ImProperties;
import cn.axzo.maokai.api.client.OrganizationalJobApi;
import cn.axzo.maokai.api.client.OrganizationalNodeUserApi;
import cn.axzo.maokai.api.vo.response.OrganizationalJobResp;
import cn.axzo.maokai.api.vo.response.OrganizationalNodeUserVO;
import cn.axzo.orggateway.api.job.resp.OrgJobResp;
import cn.axzo.orggateway.api.nodeuser.resp.OrganizationalNodeUserDTO;
import cn.axzo.tyr.client.model.enums.IdentityType;
import com.alibaba.fastjson.JSON;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
@ -37,10 +34,9 @@ public class CreateAccountOnNodeUserListener implements EventHandler, Initializi
private final EventConsumer eventConsumer;
private final AccountService accountService;
private final OrganizationalNodeUserApi organizationalNodeUserApi;
private final OrganizationalJobApi organizationalJobApi;
private final OrganizationalNodeUserApiGateway organizationalNodeUserApiGateway;
private final OrgJobGateway orgJobGateway;
private final ImProperties props;
private final ProfilesApiGateway profilesApiGateway;
@Override
public void onEvent(Event event, EventConsumer.Context context) {
@ -61,7 +57,7 @@ public class CreateAccountOnNodeUserListener implements EventHandler, Initializi
log.info("消息体里没有node user id, 跳过生成. event={}", JSON.toJSONString(event));
return;
}
OrganizationalNodeUserVO nodeUser = organizationalNodeUserApi.getNodeUser(eventNodeUser.getId()).getData();
OrganizationalNodeUserDTO nodeUser = organizationalNodeUserApiGateway.getById(eventNodeUser.getId());
if (nodeUser == null) {
log.info("没有通过node user id查询到node user记录, 跳过生成");
return;
@ -85,7 +81,7 @@ public class CreateAccountOnNodeUserListener implements EventHandler, Initializi
pou.getPersonId(), pou.getOuId(), JSON.toJSONString(resp));
}
private boolean shouldGenImAccount(OrganizationalNodeUserVO nodeUser) {
private boolean shouldGenImAccount(OrganizationalNodeUserDTO nodeUser) {
if (shouldGenByIdentityType(nodeUser)) {
return true;
}
@ -94,13 +90,11 @@ public class CreateAccountOnNodeUserListener implements EventHandler, Initializi
log.info("无效的job id, 跳过生成账号. node user={}", JSON.toJSONString(nodeUser));
return false;
}
List<OrganizationalJobResp> jobs = organizationalJobApi
.getByIds(Collections.singletonList(jobId)).getData();
if (CollectionUtils.isEmpty(jobs)) {
OrgJobResp job = orgJobGateway.getById(jobId);
if (job == null) {
log.info("没有通过job id查询到job记录, 跳过生成账号. node user={}", JSON.toJSONString(nodeUser));
return false;
}
OrganizationalJobResp job = jobs.get(0);
boolean shouldGen = props.getGenImAccountJobCodes().contains(job.getCode());
if (shouldGen) {
log.info("通过身份判断需要生成管理端账号. node user={}, job={}",
@ -109,7 +103,7 @@ public class CreateAccountOnNodeUserListener implements EventHandler, Initializi
return shouldGen;
}
boolean shouldGenByIdentityType(OrganizationalNodeUserVO nodeUser) {
boolean shouldGenByIdentityType(OrganizationalNodeUserDTO nodeUser) {
return Objects.equals(nodeUser.getIdentityType(), IdentityType.PRACTITIONER.getCode())
|| Objects.equals(nodeUser.getIdentityType(), IdentityType.WORKER_LEADER.getCode());
}

View File

@ -0,0 +1,45 @@
package cn.axzo.im.dependency;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.im.utils.BizAssertions;
import cn.axzo.orggateway.api.unit.OrgGatewayUnitApi;
import cn.axzo.orggateway.api.unit.req.OrgUnitPageQueryReq;
import cn.axzo.orggateway.api.unit.resp.OrgUnitResp;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Component;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import static java.util.function.Function.identity;
import static java.util.stream.Collectors.toMap;
/**
* @author yanglin
*/
@Component
@RequiredArgsConstructor
public class UnitGateway {
private final OrgGatewayUnitApi orgGatewayUnitApi;
public Map<Long, OrgUnitResp> getByOuIdsMapped(Collection<Long> ouIds) {
return getByOuIds(ouIds).stream().collect(toMap(OrgUnitResp::getId, identity(), (f, s) -> f));
}
public List<OrgUnitResp> getByOuIds(Collection<Long> ouIds) {
if (CollectionUtils.isEmpty(ouIds))
return Collections.emptyList();
PageResp<OrgUnitResp> page = BizAssertions.assertResponse(orgGatewayUnitApi.page(OrgUnitPageQueryReq.builder()
.pageSize(Integer.MAX_VALUE)
.unitIds(Lists.newArrayList(Sets.newHashSet(ouIds)))
.build()));
return page.getData() == null ? Collections.emptyList() : page.getData();
}
}

View File

@ -1,43 +0,0 @@
package cn.axzo.im.gateway;
import cn.axzo.im.utils.BizAssertions;
import cn.axzo.maokai.api.client.OrgJobApi;
import cn.axzo.maokai.api.vo.request.OrgJobListReq;
import cn.axzo.maokai.api.vo.response.OrgJobRes;
import cn.axzo.pokonyan.util.RpcUtil;
import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Objects;
@Service("orgJobApiGateway")
@Slf4j
@RequiredArgsConstructor
public class OrgJobApiGateway {
private final OrgJobApi orgJobApi;
public OrgJobRes fetchJobCodeByJobId(Long jobId) {
if (Objects.isNull(jobId)) {
return OrgJobRes.builder().build();
}
OrgJobListReq req = new OrgJobListReq();
req.setJobIdList(Lists.newArrayList(jobId));
List<OrgJobRes> orgJobRes = RpcUtil.rpcApiResultProcessor(() -> orgJobApi.list(req), "fetchJobCodeByJobId", jobId);
BizAssertions.assertNotEmpty(orgJobRes, "根据jobId:{}获取Job为空", jobId);
return orgJobRes.get(0);
}
public List<OrgJobRes> fetchJobCodesByJobIds(List<Long> jobIds) {
if (CollectionUtils.isEmpty(jobIds)) {
return Lists.newArrayList();
}
OrgJobListReq req = new OrgJobListReq();
req.setJobIdList(jobIds);
return RpcUtil.rpcApiResultProcessor(() -> orgJobApi.list(req), "fetchJobCodesByJobIds", jobIds);
}
}

View File

@ -0,0 +1,38 @@
package cn.axzo.im.gateway;
import cn.axzo.orggateway.api.job.OrgJobApi;
import cn.axzo.orggateway.api.job.req.PageOrgJobReq;
import cn.axzo.orggateway.api.job.resp.OrgJobResp;
import com.google.common.collect.Sets;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@Service("orgJobApiGateway")
@Slf4j
@RequiredArgsConstructor
public class OrgJobGateway {
private final OrgJobApi orgJobApi;
public OrgJobResp getById(Long jobId) {
List<OrgJobResp> jobs = getByIds(Collections.singletonList(jobId));
return jobs.isEmpty() ? null : jobs.get(0);
}
public List<OrgJobResp> getByIds(Collection<Long> jobIds) {
if (CollectionUtils.isEmpty(jobIds))
return Collections.emptyList();
List<OrgJobResp> jobs = orgJobApi.page(PageOrgJobReq.builder()
.pageSize(jobIds.size())
.jobIds(Sets.newHashSet(jobIds))
.build()).getData().getData();
return jobs == null ? Collections.emptyList() : jobs;
}
}

View File

@ -1,29 +0,0 @@
package cn.axzo.im.gateway;
import cn.axzo.maokai.api.client.OrganizationalNodeApi;
import cn.axzo.maokai.api.vo.request.OrganizationalNodeBatchQueryVO;
import cn.axzo.maokai.api.vo.response.OrganizationalNodeVO;
import cn.axzo.pokonyan.util.RpcUtil;
import com.alibaba.fastjson.JSON;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
@Service("organizationalNodeApiGateway")
@Slf4j
@RequiredArgsConstructor
public class OrganizationalNodeApiGateway {
private final OrganizationalNodeApi organizationalNodeApi;
public List<OrganizationalNodeVO> fetchNodesByNodeIds(List<Long> nodeIdList) {
OrganizationalNodeBatchQueryVO organizationalNodeBatchQueryVO = new OrganizationalNodeBatchQueryVO();
organizationalNodeBatchQueryVO.setNodeIds(nodeIdList);
organizationalNodeBatchQueryVO.setContainsDeleted(false);
List<OrganizationalNodeVO> nodeVOList = organizationalNodeApi.listNode(organizationalNodeBatchQueryVO).getData();
return RpcUtil.rpcApiResultProcessor(() -> organizationalNodeApi.listNode(organizationalNodeBatchQueryVO), "fetchNodesByNodeIds", JSON.toJSONString(nodeVOList));
}
}

View File

@ -1,13 +1,14 @@
package cn.axzo.im.gateway;
import cn.axzo.maokai.api.client.OrganizationalNodeUserApi;
import cn.axzo.maokai.api.vo.request.OrgNodeUserDetailByIdReq;
import cn.axzo.maokai.api.vo.request.OrganizationalNodeUserSearchReq;
import cn.axzo.maokai.api.vo.response.OrganizationalNodeUserVO;
import cn.axzo.pokonyan.util.RpcUtil;
import com.alibaba.fastjson.JSON;
import cn.axzo.foundation.page.PageResp;
import cn.axzo.foundation.result.ApiResult;
import cn.axzo.im.utils.BizAssertions;
import cn.axzo.orggateway.api.nodeuser.OrgNodeUserApi;
import cn.axzo.orggateway.api.nodeuser.req.ListOrgNodeUserReq;
import cn.axzo.orggateway.api.nodeuser.resp.OrganizationalNodeUserDTO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Service;
import java.util.List;
@ -18,44 +19,62 @@ import java.util.Set;
@RequiredArgsConstructor
public class OrganizationalNodeUserApiGateway {
private final OrganizationalNodeUserApi organizationalNodeUserApi;
private final OrgNodeUserApi orgNodeUserApi;
public List<OrganizationalNodeUserVO> searchNodeUser(Long nodeId, Long workspaceId, Set<String> jobCodes, Long personId, Boolean needJobCode) {
OrganizationalNodeUserSearchReq searchReq = new OrganizationalNodeUserSearchReq();
searchReq.setOrganizationNodeId(nodeId);
public List<OrganizationalNodeUserDTO> searchNodeUser(Long nodeId, Long workspaceId, Set<String> jobCodes, Long personId, Boolean needJobCode) {
ListOrgNodeUserReq searchReq = new ListOrgNodeUserReq();
searchReq.setOrganizationalNodeId(nodeId);
searchReq.setWorkspaceId(workspaceId);
searchReq.setJobCodes(jobCodes);
searchReq.setOrganizationalJobCodes(jobCodes);
searchReq.setPersonId(personId);
searchReq.setNeedJobCode(needJobCode);
return RpcUtil.rpcApiResultProcessor(() -> organizationalNodeUserApi.list(searchReq), "searchNodeUser", JSON.toJSONString(searchReq));
searchReq.setNeeds(ListOrgNodeUserReq.Needs.builder()
.job(needJobCode)
.build());
ApiResult<PageResp<OrganizationalNodeUserDTO>> response = orgNodeUserApi.list(searchReq);
return BizAssertions.assertResponse(response).getData();
}
public List<OrganizationalNodeUserVO> fetchNodeUsersByWorkspaceNodeIdJobCodes(Long workspaceId, Long nodeId,Set<String> jobCodes) {
OrganizationalNodeUserSearchReq searchReq = new OrganizationalNodeUserSearchReq();
public List<OrganizationalNodeUserDTO> fetchNodeUsersByWorkspaceNodeIdJobCodes(Long workspaceId, Long nodeId, Set<String> jobCodes) {
ListOrgNodeUserReq searchReq = new ListOrgNodeUserReq();
searchReq.setWorkspaceId(workspaceId);
searchReq.setOrganizationNodeId(nodeId);
searchReq.setJobCodes(jobCodes);//班组长/带班长
return RpcUtil.rpcApiResultProcessor(() -> organizationalNodeUserApi.list(searchReq), "fetchNodeUsersByWorkspaceOuIdJobCodes", JSON.toJSONString(searchReq));
searchReq.setOrganizationalNodeId(nodeId);
searchReq.setOrganizationalJobCodes(jobCodes);
searchReq.setNeeds(ListOrgNodeUserReq.Needs.builder()
.job(true)
.build());
return BizAssertions.assertResponse(orgNodeUserApi.list(searchReq)).getData();
}
public List<OrganizationalNodeUserVO> fetchNodeUsersByWorkspaceIdJobCodes(Long workspaceId, Set<String> jobCodes) {
OrganizationalNodeUserSearchReq searchReq = new OrganizationalNodeUserSearchReq();
public List<OrganizationalNodeUserDTO> fetchNodeUsersByWorkspaceIdJobCodes(Long workspaceId, Set<String> jobCodes) {
ListOrgNodeUserReq searchReq = new ListOrgNodeUserReq();
searchReq.setWorkspaceId(workspaceId);
searchReq.setJobCodes(jobCodes);
return RpcUtil.rpcApiResultProcessor(() -> organizationalNodeUserApi.list(searchReq), "fetchNodeUsersByWorkspaceIdJobCodes", JSON.toJSONString(searchReq));
searchReq.setOrganizationalJobCodes(jobCodes);
searchReq.setNeeds(ListOrgNodeUserReq.Needs.builder()
.job(true)
.build());
return BizAssertions.assertResponse(orgNodeUserApi.list(searchReq)).getData();
}
public List<OrganizationalNodeUserVO> fetchNodeUsersByWorkspaceOuIdJobCodes(Long workspaceId, Long ouId, Set<String> jobCodes) {
OrganizationalNodeUserSearchReq searchReq = new OrganizationalNodeUserSearchReq();
public List<OrganizationalNodeUserDTO> fetchNodeUsersByWorkspaceOuIdJobCodes(Long workspaceId, Long ouId, Set<String> jobCodes) {
ListOrgNodeUserReq searchReq = new ListOrgNodeUserReq();
searchReq.setWorkspaceId(workspaceId);
searchReq.setOrganizationalUnitId(ouId);
searchReq.setJobCodes(jobCodes);
return RpcUtil.rpcApiResultProcessor(() -> organizationalNodeUserApi.list(searchReq), "fetchNodeUsersByWorkspaceOuIdJobCodes", JSON.toJSONString(searchReq));
searchReq.setOrganizationalJobCodes(jobCodes);
searchReq.setNeeds(ListOrgNodeUserReq.Needs.builder()
.job(true)
.build());
return BizAssertions.assertResponse(orgNodeUserApi.list(searchReq)).getData();
}
public OrganizationalNodeUserVO getById(Long id) {
OrgNodeUserDetailByIdReq req = OrgNodeUserDetailByIdReq.builder().id(id).build();
return RpcUtil.rpcApiResultProcessor(() -> organizationalNodeUserApi.detailById(req), "detailById", req);
public OrganizationalNodeUserDTO getById(Long id) {
List<OrganizationalNodeUserDTO> records = BizAssertions.assertResponse(
orgNodeUserApi.list(ListOrgNodeUserReq.builder()
.id(id)
.needs(ListOrgNodeUserReq.Needs.builder()
.job(true)
.build())
.build())).getData();
return CollectionUtils.isEmpty(records) ? null : records.get(0);
}
}

View File

@ -11,7 +11,7 @@ import cn.axzo.im.event.inner.EventTypeEnum;
import cn.axzo.im.event.payload.ChatGroupCreatePayload;
import cn.axzo.im.gateway.ProfilesApiGateway;
import cn.axzo.im.service.ChatGroupService;
import cn.axzo.maokai.api.vo.response.OrganizationalNodeUserVO;
import cn.axzo.orggateway.api.nodeuser.resp.OrganizationalNodeUserDTO;
import cn.hutool.core.lang.Pair;
import com.alibaba.excel.util.StringUtils;
import com.alibaba.fastjson.JSON;
@ -87,15 +87,15 @@ public class ChatGroupEventHandler implements EventHandler, InitializingBean {
*/
public Set<String> chatGroupOfMembers(ChatGroupCreateReq req) {
//Pair,key:管理人员集合;value:工人集合
Pair<List<OrganizationalNodeUserVO>, List<OrganizationalNodeUserVO>> adminWorkerPair = chatGroupService.fetchUsersByWorkspaceOuId(req.getCrowType(), req.getWorkspaceId(), req.getOuId(), this.chatGroupService.buildJobCodesByCrowType(req.getCrowType()), req.getCreator());
List<OrganizationalNodeUserVO> adminSet = adminWorkerPair.getKey();
List<OrganizationalNodeUserVO> workerSet = adminWorkerPair.getValue();
Pair<List<OrganizationalNodeUserDTO>, List<OrganizationalNodeUserDTO>> adminWorkerPair = chatGroupService.fetchUsersByWorkspaceOuId(req.getCrowType(), req.getWorkspaceId(), req.getOuId(), this.chatGroupService.buildJobCodesByCrowType(req.getCrowType()), req.getCreator());
List<OrganizationalNodeUserDTO> adminSet = adminWorkerPair.getKey();
List<OrganizationalNodeUserDTO> workerSet = adminWorkerPair.getValue();
Map<Long, PersonProfileDto> personProfileMap = this.buildPersonProfileMap(adminWorkerPair);
Set<String> userAccountRespList = Sets.newHashSet();
for (OrganizationalNodeUserVO item : adminSet) {
for (OrganizationalNodeUserDTO item : adminSet) {
PersonProfileDto personProfileDto = personProfileMap.get(item.getPersonId());
if (Objects.isNull(personProfileDto) || Objects.isNull(personProfileDto.getId())) {
log.info("admin-personProfileDto is null");
@ -107,7 +107,7 @@ public class ChatGroupEventHandler implements EventHandler, InitializingBean {
}
}
for (OrganizationalNodeUserVO worker : workerSet) {
for (OrganizationalNodeUserDTO worker : workerSet) {
PersonProfileDto personProfileDto = personProfileMap.get(worker.getPersonId());
if (Objects.isNull(personProfileDto) || Objects.isNull(personProfileDto.getId())) {
log.info("worker-personProfileDto is null");
@ -125,14 +125,14 @@ public class ChatGroupEventHandler implements EventHandler, InitializingBean {
* 构建personProfile的Map
* key:id,value:personProfile
*/
private Map<Long, PersonProfileDto> buildPersonProfileMap(Pair<List<OrganizationalNodeUserVO>, List<OrganizationalNodeUserVO>> adminWorkerPair) {
private Map<Long, PersonProfileDto> buildPersonProfileMap(Pair<List<OrganizationalNodeUserDTO>, List<OrganizationalNodeUserDTO>> adminWorkerPair) {
List<OrganizationalNodeUserVO> adminSet = CollectionUtils.isNotEmpty(adminWorkerPair.getKey()) ? adminWorkerPair.getKey() : Lists.newArrayList();
List<OrganizationalNodeUserVO> workerSet = CollectionUtils.isNotEmpty(adminWorkerPair.getValue()) ? adminWorkerPair.getValue() : Lists.newArrayList();
List<OrganizationalNodeUserDTO> adminSet = CollectionUtils.isNotEmpty(adminWorkerPair.getKey()) ? adminWorkerPair.getKey() : Lists.newArrayList();
List<OrganizationalNodeUserDTO> workerSet = CollectionUtils.isNotEmpty(adminWorkerPair.getValue()) ? adminWorkerPair.getValue() : Lists.newArrayList();
List<Long> adminWorkerList = Lists.newArrayList();
adminWorkerList.addAll(Lists.newArrayList(adminSet.stream().map(OrganizationalNodeUserVO::getPersonId).collect(Collectors.toList())));
adminWorkerList.addAll(Lists.newArrayList(workerSet.stream().map(OrganizationalNodeUserVO::getPersonId).collect(Collectors.toList())));
adminWorkerList.addAll(Lists.newArrayList(adminSet.stream().map(OrganizationalNodeUserDTO::getPersonId).collect(Collectors.toList())));
adminWorkerList.addAll(Lists.newArrayList(workerSet.stream().map(OrganizationalNodeUserDTO::getPersonId).collect(Collectors.toList())));
List<PersonProfileDto> personProfileDtoList = profilesApiGateway.getPersonProfilesByIds(adminWorkerList);
return personProfileDtoList.stream().collect(Collectors.toMap(PersonProfileDto::getId, Function.identity(), (x, y) -> x));

View File

@ -16,13 +16,13 @@ import cn.axzo.im.event.inner.EventTypeEnum;
import cn.axzo.im.event.payload.OrganizationalNodeUser;
import cn.axzo.im.event.payload.OrganizationalNodeUserPayload;
import cn.axzo.im.event.payload.OrganizationalNodeUserUpsertedPayload;
import cn.axzo.im.gateway.OrgJobApiGateway;
import cn.axzo.im.gateway.OrgJobGateway;
import cn.axzo.im.gateway.OrganizationalNodeUserApiGateway;
import cn.axzo.im.service.ChatGroupService;
import cn.axzo.im.utils.BizAssertions;
import cn.axzo.im.utils.JobCodeUtils;
import cn.axzo.maokai.api.vo.response.OrgJobRes;
import cn.axzo.maokai.api.vo.response.OrganizationalNodeUserVO;
import cn.axzo.orggateway.api.job.resp.OrgJobResp;
import cn.axzo.orggateway.api.nodeuser.resp.OrganizationalNodeUserDTO;
import com.alibaba.excel.util.StringUtils;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
@ -64,7 +64,7 @@ public class OrganizationalNodeUserChangeEventHandler implements EventHandler, I
private NimChannelService nimChannelService;
@Autowired
private OrgJobApiGateway orgJobApiGateway;
private OrgJobGateway orgJobGateway;
@Autowired
private JobCodeProperties jobCodeProperties;
@ -150,7 +150,7 @@ public class OrganizationalNodeUserChangeEventHandler implements EventHandler, I
*/
private OrgNodeUserPayLoad buildPayload(Long nodeUserId) {
OrganizationalNodeUserVO newNodeUserVO = organizationalNodeUserApiGateway.getById(nodeUserId);
OrganizationalNodeUserDTO newNodeUserVO = organizationalNodeUserApiGateway.getById(nodeUserId);
return OrgNodeUserPayLoad.builder()
.workspaceId(newNodeUserVO.getWorkspaceId())
.ouId(newNodeUserVO.getOrganizationalUnitId())
@ -228,7 +228,7 @@ public class OrganizationalNodeUserChangeEventHandler implements EventHandler, I
* 获取岗位code
*/
private String fetchJobCodeByJobId(Long jobId) {
OrgJobRes orgJobRes = orgJobApiGateway.fetchJobCodeByJobId(jobId);
OrgJobResp orgJobRes = orgJobGateway.getById(jobId);
if (Objects.nonNull(orgJobRes) && StringUtils.isNotBlank(orgJobRes.getCode())) {
return orgJobRes.getCode();
}

View File

@ -1,19 +1,18 @@
package cn.axzo.im.job;
import cn.axzo.framework.domain.web.result.ApiPageResult;
import cn.axzo.im.center.api.vo.req.AccountAbsentQuery;
import cn.axzo.im.center.api.vo.resp.UserAccountResp;
import cn.axzo.im.center.common.enums.AppTypeEnum;
import cn.axzo.im.channel.IMChannelProvider;
import cn.axzo.im.dao.repository.AccountRegisterDao;
import cn.axzo.im.entity.AccountRegister;
import cn.axzo.im.gateway.OrgJobGateway;
import cn.axzo.im.service.AccountService;
import cn.axzo.im.utils.ImProperties;
import cn.axzo.maokai.api.client.OrganizationalJobApi;
import cn.axzo.maokai.api.client.OrganizationalNodeUserApi;
import cn.axzo.maokai.api.vo.request.OrganizationalNodeUserPageReq;
import cn.axzo.maokai.api.vo.response.OrganizationalJobResp;
import cn.axzo.maokai.api.vo.response.OrganizationalNodeUserVO;
import cn.axzo.orggateway.api.job.resp.OrgJobResp;
import cn.axzo.orggateway.api.nodeuser.OrgNodeUserApi;
import cn.axzo.orggateway.api.nodeuser.req.ListOrgNodeUserReq;
import cn.axzo.orggateway.api.nodeuser.resp.OrganizationalNodeUserDTO;
import cn.axzo.tyr.client.model.enums.IdentityType;
import com.alibaba.fastjson.JSON;
import com.google.common.cache.Cache;
@ -51,8 +50,8 @@ import static java.util.stream.Collectors.toSet;
@RequiredArgsConstructor
public class CreateAccountJob extends IJobHandler {
private final OrganizationalNodeUserApi organizationalNodeUserApi;
private final OrganizationalJobApi organizationalJobApi;
private final OrgJobGateway orgJobGateway;
private final OrgNodeUserApi orgNodeUserApi;
private final AccountService accountService;
private final IMChannelProvider imChannelProvider;
private final AccountRegisterDao accountRegisterDao;
@ -98,13 +97,12 @@ public class CreateAccountJob extends IJobHandler {
log.info("执行被中断...");
return;
}
OrganizationalNodeUserPageReq request = new OrganizationalNodeUserPageReq();
ListOrgNodeUserReq request = new ListOrgNodeUserReq();
request.setPageSize(pageSize);
request.setPage(page);
log.info("开始查询 node user 表, page={}", page);
ApiPageResult<OrganizationalNodeUserVO> resp = organizationalNodeUserApi.page(request);
List<OrganizationalNodeUserDTO> nodeUsers = orgNodeUserApi.list(request).getData().getData();
page++;
List<OrganizationalNodeUserVO> nodeUsers = resp.getData().getList();
if (CollectionUtils.isNotEmpty(nodeUsers)) {
tryGenImAccount(param, nodeUsers);
}
@ -113,10 +111,10 @@ public class CreateAccountJob extends IJobHandler {
}
}
private void tryGenImAccount(Param param, List<OrganizationalNodeUserVO> nodeUsers) {
private void tryGenImAccount(Param param, List<OrganizationalNodeUserDTO> nodeUsers) {
// 过滤本次job已经处理过的
ArrayList<OrganizationalNodeUserVO> noAccessed = new ArrayList<>();
for (OrganizationalNodeUserVO nodeUser : nodeUsers) {
ArrayList<OrganizationalNodeUserDTO> noAccessed = new ArrayList<>();
for (OrganizationalNodeUserDTO nodeUser : nodeUsers) {
PersonIdAndOu pou = new PersonIdAndOu(nodeUser.getPersonId(), nodeUser.getOrganizationalUnitId());
if (param.accessed.getIfPresent(pou) == null)
noAccessed.add(nodeUser);
@ -125,7 +123,7 @@ public class CreateAccountJob extends IJobHandler {
return;
// 过滤已经存在的im账号
Function<OrganizationalNodeUserVO, String> imAccountBuilder = nodeUser ->
Function<OrganizationalNodeUserDTO, String> imAccountBuilder = nodeUser ->
accountService.buildUserIdWrapper(String.valueOf(nodeUser.getPersonId()),
AppTypeEnum.CMP.getCode(), nodeUser.getOrganizationalUnitId());
List<String> allImAccounts = noAccessed.stream().map(imAccountBuilder).distinct().collect(toList());
@ -139,8 +137,8 @@ public class CreateAccountJob extends IJobHandler {
.map(AccountRegister::getImAccount)
.collect(toSet());
}
ArrayList<OrganizationalNodeUserVO> toCreateImAccounts = new ArrayList<>();
for (OrganizationalNodeUserVO nodeUser : noAccessed) {
ArrayList<OrganizationalNodeUserDTO> toCreateImAccounts = new ArrayList<>();
for (OrganizationalNodeUserDTO nodeUser : noAccessed) {
String imAccount = imAccountBuilder.apply(nodeUser);
if (!existsImAccounts.contains(imAccount))
toCreateImAccounts.add(nodeUser);
@ -150,12 +148,12 @@ public class CreateAccountJob extends IJobHandler {
}
// 避免url过长
for (List<OrganizationalNodeUserVO> batchNodeUsers : Lists.partition(toCreateImAccounts, param.queryJobMaxSize)) {
for (List<OrganizationalNodeUserDTO> batchNodeUsers : Lists.partition(toCreateImAccounts, param.queryJobMaxSize)) {
List<Long> jobIds = param.determineNeedToQueryJobIds(batchNodeUsers);
if (!jobIds.isEmpty()) {
param.addJobs(organizationalJobApi.getByIds(jobIds).getData());
param.addJobs(orgJobGateway.getByIds(jobIds));
}
for (OrganizationalNodeUserVO nodeUser : batchNodeUsers) {
for (OrganizationalNodeUserDTO nodeUser : batchNodeUsers) {
if (Thread.currentThread().isInterrupted()) {
log.info("执行被中断...");
return;
@ -198,7 +196,7 @@ public class CreateAccountJob extends IJobHandler {
// !! helpers for running
final AtomicInteger genCount = new AtomicInteger(0);
final Map<Long, OrganizationalJobResp> jobId2Job = new HashMap<>();
final Map<Long, OrgJobResp> jobId2Job = new HashMap<>();
final Cache<PersonIdAndOu, Boolean> accessed = CacheBuilder.newBuilder()
.maximumSize(10000)
.build();
@ -211,17 +209,17 @@ public class CreateAccountJob extends IJobHandler {
return rateLimiter;
}
void addJobs(List<OrganizationalJobResp> jobs) {
void addJobs(List<OrgJobResp> jobs) {
if (jobs == null) return;
for (OrganizationalJobResp job : jobs) {
for (OrgJobResp job : jobs) {
jobId2Job.put(job.getId(), job);
}
}
List<Long> determineNeedToQueryJobIds(List<OrganizationalNodeUserVO> nodeUsers) {
List<Long> determineNeedToQueryJobIds(List<OrganizationalNodeUserDTO> nodeUsers) {
return nodeUsers.stream()
.filter(nodeUser -> !shouldGenByIdentityType(nodeUser))
.map(OrganizationalNodeUserVO::getOrganizationalJobId)
.map(OrganizationalNodeUserDTO::getOrganizationalJobId)
.filter(Objects::nonNull)
.filter(jobId -> !jobId2Job.containsKey(jobId))
.filter(jobId -> jobId > 0)
@ -229,16 +227,16 @@ public class CreateAccountJob extends IJobHandler {
.collect(toList());
}
boolean shouldGenByIdentityType(OrganizationalNodeUserVO nodeUser) {
boolean shouldGenByIdentityType(OrganizationalNodeUserDTO nodeUser) {
return Objects.equals(nodeUser.getIdentityType(), IdentityType.PRACTITIONER.getCode())
|| Objects.equals(nodeUser.getIdentityType(), IdentityType.WORKER_LEADER.getCode());
}
boolean shouldGenImAccount(ImProperties props, OrganizationalNodeUserVO nodeUser) {
boolean shouldGenImAccount(ImProperties props, OrganizationalNodeUserDTO nodeUser) {
if (shouldGenByIdentityType(nodeUser)) {
return true;
}
OrganizationalJobResp job = jobId2Job.get(nodeUser.getOrganizationalJobId());
OrgJobResp job = jobId2Job.get(nodeUser.getOrganizationalJobId());
return job != null && props.getGenImAccountJobCodes().contains(job.getCode());
}

View File

@ -2,7 +2,7 @@ package cn.axzo.im.service;
import cn.axzo.basics.profiles.dto.basic.PersonProfileDto;
import cn.axzo.im.entity.AccountRegister;
import cn.axzo.maokai.api.vo.response.OrganizationalUnitVO;
import cn.axzo.orggateway.api.unit.resp.OrgUnitResp;
import cn.axzo.pokonyan.dao.page.IPageParam;
import cn.axzo.pokonyan.dao.wrapper.CriteriaField;
import cn.axzo.pokonyan.dao.wrapper.Operator;
@ -104,11 +104,11 @@ public interface AccountRegisterService extends IService<AccountRegister> {
private PersonProfileDto personProfile;
private OrganizationalUnitVO organizationalUnit;
private OrgUnitResp organizationalUnit;
public static AccountRegisterDTO from(AccountRegister accountRegister,
Map<String, PersonProfileDto> personProfiles,
Map<Long, OrganizationalUnitVO> organizationals) {
Map<Long, OrgUnitResp> organizationals) {
AccountRegisterDTO accountRegisterDTO = AccountRegisterDTO.builder().build();
BeanUtils.copyProperties(accountRegister, accountRegisterDTO);

View File

@ -17,7 +17,7 @@ import cn.axzo.im.center.api.vo.resp.ChatGroupQueryResp;
import cn.axzo.im.center.api.vo.resp.HistoryMsgQueryResp;
import cn.axzo.im.center.common.enums.ChatGroupUserDataSourceEnum;
import cn.axzo.im.entity.ChatGroup;
import cn.axzo.maokai.api.vo.response.OrganizationalNodeUserVO;
import cn.axzo.orggateway.api.nodeuser.resp.OrganizationalNodeUserDTO;
import cn.hutool.core.lang.Pair;
import com.baomidou.mybatisplus.extension.service.IService;
@ -39,7 +39,7 @@ public interface ChatGroupService extends IService<ChatGroup> {
/**
* 获取IM账号
*/
Pair<List<OrganizationalNodeUserVO>, List<OrganizationalNodeUserVO>> fetchUsersByWorkspaceOuId(ChatGroupCreateReq.CrowTypeEnum crowType, Long workspaceId, Long ouId, Set<String> jobCodes, Long personId);
Pair<List<OrganizationalNodeUserDTO>, List<OrganizationalNodeUserDTO>> fetchUsersByWorkspaceOuId(ChatGroupCreateReq.CrowTypeEnum crowType, Long workspaceId, Long ouId, Set<String> jobCodes, Long personId);
/**
* 根据项目Id/单位Id/节点Id获取班组内成员

View File

@ -1,10 +1,9 @@
package cn.axzo.im.service;
import cn.axzo.basics.profiles.dto.basic.PersonProfileDto;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.im.center.api.vo.req.UpdateTemplateSendPriorityRequest;
import cn.axzo.im.entity.MessageHistory;
import cn.axzo.maokai.api.vo.response.OrganizationalUnitVO;
import cn.axzo.orggateway.api.unit.resp.OrgUnitResp;
import cn.axzo.pokonyan.dao.page.IPageParam;
import cn.axzo.pokonyan.dao.wrapper.CriteriaField;
import cn.axzo.pokonyan.dao.wrapper.Operator;
@ -15,8 +14,6 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import org.springframework.beans.BeanUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import java.util.List;
import java.util.Map;
@ -94,11 +91,11 @@ public interface MessageHistoryService extends IService<MessageHistory> {
class MessageHistoryDTO extends MessageHistory {
private PersonProfileDto receivePersonProfile;
private OrganizationalUnitVO receiveOrganizationalUnit;
private OrgUnitResp receiveOrganizationalUnit;
public static MessageHistoryDTO from(MessageHistory messageHistory,
Map<String, PersonProfileDto> personProfiles,
Map<Long, OrganizationalUnitVO> organizationals) {
Map<Long, OrgUnitResp> organizationals) {
MessageHistoryDTO messageHistoryDTO = MessageHistoryDTO.builder().build();
BeanUtils.copyProperties(messageHistory, messageHistoryDTO);

View File

@ -5,11 +5,10 @@ import cn.axzo.basics.profiles.dto.basic.PersonProfileDto;
import cn.axzo.im.center.common.enums.AccountTypeEnum;
import cn.axzo.im.channel.IMChannelProvider;
import cn.axzo.im.dao.mapper.AccountRegisterMapper;
import cn.axzo.im.dependency.UnitGateway;
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.orggateway.api.unit.resp.OrgUnitResp;
import cn.axzo.pokonyan.dao.converter.PageConverter;
import cn.axzo.pokonyan.dao.mysql.QueryWrapperHelper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@ -38,9 +37,9 @@ public class AccountRegisterServiceImpl extends ServiceImpl<AccountRegisterMappe
@Autowired
private IMChannelProvider imChannelProvider;
@Autowired
private OrganizationalUnitApi organizationalUnitApi;
@Autowired
private UserProfileServiceApi userProfileServiceApi;
@Autowired
private UnitGateway unitGateway;
@Override
public Page<AccountRegisterDTO> page(PageAccountRegisterParam param) {
@ -53,7 +52,7 @@ public class AccountRegisterServiceImpl extends ServiceImpl<AccountRegisterMappe
Map<String, PersonProfileDto> personProfiles = listUserPersonProfile(param, page.getRecords());
Map<Long, OrganizationalUnitVO> organizationals = listOrganizational(param, page.getRecords());
Map<Long, OrgUnitResp> organizationals = listOrganizational(param, page.getRecords());
return PageConverter.convert(page, (record) -> AccountRegisterDTO.from(record,
personProfiles,
@ -94,8 +93,8 @@ public class AccountRegisterServiceImpl extends ServiceImpl<AccountRegisterMappe
.collect(Collectors.toMap(e -> e.getId().toString(), Function.identity()));
}
private Map<Long, OrganizationalUnitVO> listOrganizational(PageAccountRegisterParam param,
List<AccountRegister> accountRegisters) {
private Map<Long, OrgUnitResp> listOrganizational(PageAccountRegisterParam param,
List<AccountRegister> accountRegisters) {
if (CollectionUtils.isEmpty(accountRegisters) || BooleanUtils.isNotTrue(param.isNeedOuInfo())) {
return Collections.emptyMap();
}
@ -109,10 +108,6 @@ public class AccountRegisterServiceImpl extends ServiceImpl<AccountRegisterMappe
return Collections.emptyMap();
}
return organizationalUnitApi.page(OrganizationalUnitQuery.builder().unitIds(ouIds).build())
.getData()
.getList()
.stream()
.collect(Collectors.toMap(OrganizationalUnitVO::getId, Function.identity(), (f, s) -> f));
return unitGateway.getByOuIdsMapped(ouIds);
}
}

View File

@ -60,7 +60,7 @@ import cn.axzo.im.service.OperateLogService;
import cn.axzo.im.utils.BizAssertions;
import cn.axzo.im.utils.DateFormatUtil;
import cn.axzo.im.utils.JobCodeUtils;
import cn.axzo.maokai.api.vo.response.OrganizationalNodeUserVO;
import cn.axzo.orggateway.api.nodeuser.resp.OrganizationalNodeUserDTO;
import cn.axzo.tyr.client.common.enums.RoleTypeEnum;
import cn.axzo.tyr.client.model.roleuser.dto.SaasRoleUserV2DTO;
import cn.hutool.core.bean.BeanUtil;
@ -216,11 +216,11 @@ public class ChatGroupServiceImpl extends ServiceImpl<ChatGroupMapper, ChatGrou
//2 人数超限校验
//Pair,key:管理人员集合;value:工人集合
Pair<List<OrganizationalNodeUserVO>, List<OrganizationalNodeUserVO>> adminWorkerPair = this.fetchUsersByWorkspaceOuId(req.getCrowType(), req.getWorkspaceId(), req.getOuId(), this.buildJobCodesByCrowType(req.getCrowType()), req.getCreator());
List<OrganizationalNodeUserVO> adminSet = adminWorkerPair.getKey();
List<OrganizationalNodeUserVO> workerSet = adminWorkerPair.getValue();
Pair<List<OrganizationalNodeUserDTO>, List<OrganizationalNodeUserDTO>> adminWorkerPair = this.fetchUsersByWorkspaceOuId(req.getCrowType(), req.getWorkspaceId(), req.getOuId(), this.buildJobCodesByCrowType(req.getCrowType()), req.getCreator());
List<OrganizationalNodeUserDTO> adminSet = adminWorkerPair.getKey();
List<OrganizationalNodeUserDTO> workerSet = adminWorkerPair.getValue();
Integer chatGroupAdminMemberCount = CollectionUtils.isEmpty(adminSet) ? 0 : adminSet.stream().map(OrganizationalNodeUserVO::getPersonId).collect(Collectors.toSet()).contains(ownerId) ? adminSet.size() : adminSet.size() + 1;
Integer chatGroupAdminMemberCount = CollectionUtils.isEmpty(adminSet) ? 0 : adminSet.stream().map(OrganizationalNodeUserDTO::getPersonId).collect(Collectors.toSet()).contains(ownerId) ? adminSet.size() : adminSet.size() + 1;
Integer chatGroupWorkerMemberCount = CollectionUtils.isNotEmpty(workerSet) ? workerSet.size() : 0;
if ((chatGroupAdminMemberCount + chatGroupWorkerMemberCount) < 2) {
@ -333,7 +333,7 @@ public class ChatGroupServiceImpl extends ServiceImpl<ChatGroupMapper, ChatGrou
break;
case TEAM:
//获取personId在workspaceId下项目班组对象(角色列表班组长/带班长/小组长/工人)
OrganizationalNodeUserVO projectTeamUser = this.fetchProjectTeamLeaderWorkspacePersonId(workspaceId, personId);
OrganizationalNodeUserDTO projectTeamUser = this.fetchProjectTeamLeaderWorkspacePersonId(workspaceId, personId);
resp.setTeamNodeId(projectTeamUser.getOrganizationalNodeId());
ownerId = personId;
@ -359,23 +359,23 @@ public class ChatGroupServiceImpl extends ServiceImpl<ChatGroupMapper, ChatGrou
/**
* 获取IM账号
*/
public Pair<List<OrganizationalNodeUserVO>, List<OrganizationalNodeUserVO>> fetchUsersByWorkspaceOuId(ChatGroupCreateReq.CrowTypeEnum crowType, Long workspaceId, Long ouId, Set<String> jobCodes,Long personId) {
public Pair<List<OrganizationalNodeUserDTO>, List<OrganizationalNodeUserDTO>> fetchUsersByWorkspaceOuId(ChatGroupCreateReq.CrowTypeEnum crowType, Long workspaceId, Long ouId, Set<String> jobCodes,Long personId) {
switch (crowType) {
case WORKSPACE:
List<OrganizationalNodeUserVO> userListWhenWorkspace = organizationalNodeUserApiGateway.fetchNodeUsersByWorkspaceIdJobCodes(workspaceId, jobCodes);
List<OrganizationalNodeUserDTO> userListWhenWorkspace = organizationalNodeUserApiGateway.fetchNodeUsersByWorkspaceIdJobCodes(workspaceId, jobCodes);
BizAssertions.assertNotEmpty(userListWhenWorkspace, "人群类型是项目时成员列表为空项目Id{},单位Id{}", workspaceId, ouId);
return Pair.of(userListWhenWorkspace, Lists.newArrayList());
case OU:
List<OrganizationalNodeUserVO> userListWhenOuId = organizationalNodeUserApiGateway.fetchNodeUsersByWorkspaceOuIdJobCodes(workspaceId,ouId,jobCodes);
List<OrganizationalNodeUserDTO> userListWhenOuId = organizationalNodeUserApiGateway.fetchNodeUsersByWorkspaceOuIdJobCodes(workspaceId,ouId,jobCodes);
BizAssertions.assertNotEmpty(userListWhenOuId, "人群类型是单位时成员列表为空项目Id{}单位Id{}", workspaceId, ouId);
return Pair.of(userListWhenOuId, Lists.newArrayList());
case TEAM:
//获取personId在workspaceId下项目班组对象(角色列表班组长/带班长/小组长/工人)
OrganizationalNodeUserVO projectTeamUser = this.fetchProjectTeamLeaderWorkspacePersonId(workspaceId, personId);
OrganizationalNodeUserDTO projectTeamUser = this.fetchProjectTeamLeaderWorkspacePersonId(workspaceId, personId);
//班组长/带班长
List<OrganizationalNodeUserVO> teamerList = this.fetchUsersByWorkspaceIdJobCodes(workspaceId, ouId,projectTeamUser.getOrganizationalNodeId(), Sets.newHashSet("projTeamLeader", "projectTeamManager"), true);
List<OrganizationalNodeUserVO> workerList = this.fetchUsersByWorkspaceIdJobCodes(workspaceId, ouId,projectTeamUser.getOrganizationalNodeId(), Sets.newHashSet("projWorker","projectTeamGPLeader"), false);
List<OrganizationalNodeUserDTO> teamerList = this.fetchUsersByWorkspaceIdJobCodes(workspaceId, ouId,projectTeamUser.getOrganizationalNodeId(), Sets.newHashSet("projTeamLeader", "projectTeamManager"), true);
List<OrganizationalNodeUserDTO> workerList = this.fetchUsersByWorkspaceIdJobCodes(workspaceId, ouId,projectTeamUser.getOrganizationalNodeId(), Sets.newHashSet("projWorker","projectTeamGPLeader"), false);
return Pair.of(teamerList,workerList);
default:
throw new ServiceException("人群不存在");
@ -387,19 +387,19 @@ public class ChatGroupServiceImpl extends ServiceImpl<ChatGroupMapper, ChatGrou
*/
public Set<String> teamOfMembers(Long workspaceId, Long ouId, Long nodeId) {
//班组长/带班长
List<OrganizationalNodeUserVO> teamerList = this.fetchUsersByWorkspaceIdJobCodes(workspaceId, ouId,nodeId, Sets.newHashSet("projTeamLeader", "projectTeamManager"), true);
List<OrganizationalNodeUserVO> workerList = this.fetchUsersByWorkspaceIdJobCodes(workspaceId, ouId,nodeId, Sets.newHashSet("projWorker","projectTeamGPLeader"), false);
List<OrganizationalNodeUserDTO> teamerList = this.fetchUsersByWorkspaceIdJobCodes(workspaceId, ouId,nodeId, Sets.newHashSet("projTeamLeader", "projectTeamManager"), true);
List<OrganizationalNodeUserDTO> workerList = this.fetchUsersByWorkspaceIdJobCodes(workspaceId, ouId,nodeId, Sets.newHashSet("projWorker","projectTeamGPLeader"), false);
Set<String> userAccountRespList = Sets.newHashSet();
if (CollectionUtils.isNotEmpty(teamerList)) {
for (OrganizationalNodeUserVO item : teamerList) {
for (OrganizationalNodeUserDTO item : teamerList) {
userAccountRespList.add(this.registerAccountIfAbsent(AppTypeEnum.CMP.getCode(), item.getPersonId(), item.getOrganizationalUnitId()));
}
}
if (CollectionUtils.isNotEmpty(workerList)) {
for (OrganizationalNodeUserVO worker : workerList) {
for (OrganizationalNodeUserDTO worker : workerList) {
userAccountRespList.add(this.registerAccountIfAbsent(AppTypeEnum.CM.getCode(), worker.getPersonId(), worker.getOrganizationalUnitId()));
}
}
@ -412,15 +412,15 @@ public class ChatGroupServiceImpl extends ServiceImpl<ChatGroupMapper, ChatGrou
* @param personId 人员Id
* @return 项目内班组的OrganizationalNode组织对象
*/
private OrganizationalNodeUserVO fetchProjectTeamLeaderWorkspacePersonId(Long workspaceId, Long personId) {
List<OrganizationalNodeUserVO> projectTeamUserList = this.organizationalNodeUserApiGateway.searchNodeUser( null, workspaceId, Sets.newHashSet(JobCodeUtils.PROJECT_TEAM_LEADER_JOB_CODE), personId, false);
private OrganizationalNodeUserDTO fetchProjectTeamLeaderWorkspacePersonId(Long workspaceId, Long personId) {
List<OrganizationalNodeUserDTO> projectTeamUserList = this.organizationalNodeUserApiGateway.searchNodeUser( null, workspaceId, Sets.newHashSet(JobCodeUtils.PROJECT_TEAM_LEADER_JOB_CODE), personId, false);
BizAssertions.assertNotEmpty(projectTeamUserList, "人员Id{}在项目Id{},不是班组长", personId, workspaceId);
return projectTeamUserList.get(0);
}
private List<OrganizationalNodeUserVO> fetchUsersByWorkspaceIdJobCodes(Long workspaceId, Long ouId, Long nodeId,Set<String> jobCodes, boolean isAdmin) {
List<OrganizationalNodeUserVO> userListWhenTeamer = organizationalNodeUserApiGateway.fetchNodeUsersByWorkspaceNodeIdJobCodes(workspaceId, nodeId, jobCodes);
private List<OrganizationalNodeUserDTO> fetchUsersByWorkspaceIdJobCodes(Long workspaceId, Long ouId, Long nodeId,Set<String> jobCodes, boolean isAdmin) {
List<OrganizationalNodeUserDTO> userListWhenTeamer = organizationalNodeUserApiGateway.fetchNodeUsersByWorkspaceNodeIdJobCodes(workspaceId, nodeId, jobCodes);
if (isAdmin) {
BizAssertions.assertNotEmpty(userListWhenTeamer, "人群是班组时,{}为空workspaceId{}ouId{}", isAdmin ? "班组长/带班长" : "工人", workspaceId, ouId);
}
@ -478,9 +478,9 @@ public class ChatGroupServiceImpl extends ServiceImpl<ChatGroupMapper, ChatGrou
}
Set<ChatGroupCreateReq.CrowTypeEnum> jobResult = Sets.newHashSet();
List<OrganizationalNodeUserVO> nodeUserVOList = organizationalNodeUserApiGateway.searchNodeUser(null, workspaceId, null, personId, true);
List<OrganizationalNodeUserDTO> nodeUserVOList = organizationalNodeUserApiGateway.searchNodeUser(null, workspaceId, null, personId, true);
if (CollectionUtils.isNotEmpty(nodeUserVOList)) {
for(OrganizationalNodeUserVO nodeUserVO : nodeUserVOList) {
for(OrganizationalNodeUserDTO nodeUserVO : nodeUserVOList) {
if (JobCodeUtils.isProjectManaGpWorkerLeader(nodeUserVO.getOrganizationalJobCode())) {
continue;
}
@ -733,20 +733,20 @@ public class ChatGroupServiceImpl extends ServiceImpl<ChatGroupMapper, ChatGrou
*/
public Set<String> chatGroupOfMembers(ChatGroupCreateReq.CrowTypeEnum crowType, Long workspaceId, Long ouId, Long creator) {
//Pair,key:管理人员集合;value:工人集合
Pair<List<OrganizationalNodeUserVO>, List<OrganizationalNodeUserVO>> adminWorkerPair = this.fetchUsersByWorkspaceOuId(crowType, workspaceId, ouId, this.buildJobCodesByCrowType(crowType), creator);
List<OrganizationalNodeUserVO> adminSet = adminWorkerPair.getKey();
List<OrganizationalNodeUserVO> workerSet = adminWorkerPair.getValue();
Pair<List<OrganizationalNodeUserDTO>, List<OrganizationalNodeUserDTO>> adminWorkerPair = this.fetchUsersByWorkspaceOuId(crowType, workspaceId, ouId, this.buildJobCodesByCrowType(crowType), creator);
List<OrganizationalNodeUserDTO> adminSet = adminWorkerPair.getKey();
List<OrganizationalNodeUserDTO> workerSet = adminWorkerPair.getValue();
Set<String> userAccountRespList = Sets.newHashSet();
if (CollectionUtils.isNotEmpty(adminSet)) {
for (OrganizationalNodeUserVO item : adminSet) {
for (OrganizationalNodeUserDTO item : adminSet) {
userAccountRespList.add(this.registerAccountIfAbsent(AppTypeEnum.CMP.getCode(), item.getPersonId(), item.getOrganizationalUnitId()));
}
}
if (CollectionUtils.isNotEmpty(workerSet)) {
for (OrganizationalNodeUserVO worker : workerSet) {
for (OrganizationalNodeUserDTO worker : workerSet) {
userAccountRespList.add(this.registerAccountIfAbsent(AppTypeEnum.CM.getCode(), worker.getPersonId(), worker.getOrganizationalUnitId()));
}
}

View File

@ -10,6 +10,7 @@ import cn.axzo.im.channel.netease.dto.MessageBatchDispatchRequest;
import cn.axzo.im.channel.netease.dto.MessageBatchDispatchResponse;
import cn.axzo.im.config.MqProducer;
import cn.axzo.im.dao.mapper.MessageHistoryMapper;
import cn.axzo.im.dependency.UnitGateway;
import cn.axzo.im.entity.HistoryRecordExt;
import cn.axzo.im.entity.MessageHistory;
import cn.axzo.im.enums.MessageHistoryStatus;
@ -17,9 +18,7 @@ import cn.axzo.im.event.payload.MessageHistoryCreatedPayload;
import cn.axzo.im.event.payload.MessageHistoryUpdatedPayload;
import cn.axzo.im.service.AccountService;
import cn.axzo.im.service.MessageHistoryService;
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.orggateway.api.unit.resp.OrgUnitResp;
import cn.axzo.pokonyan.client.RateLimiter;
import cn.axzo.pokonyan.client.RateLimiterClient;
import cn.axzo.pokonyan.dao.converter.PageConverter;
@ -59,7 +58,7 @@ public class MessageHistoryServiceImpl extends ServiceImpl<MessageHistoryMapper,
implements MessageHistoryService, InitializingBean {
@Autowired
private OrganizationalUnitApi organizationalUnitApi;
private UnitGateway unitGateway;
@Autowired
private UserProfileServiceApi userProfileServiceApi;
@Autowired
@ -113,7 +112,7 @@ public class MessageHistoryServiceImpl extends ServiceImpl<MessageHistoryMapper,
Map<String, PersonProfileDto> personProfiles = listReceiveUserPersonProfile(param, page.getRecords());
Map<Long, OrganizationalUnitVO> organizationals = listReceiveOrganizational(param, page.getRecords());
Map<Long, OrgUnitResp> organizationals = listReceiveOrganizational(param, page.getRecords());
return PageConverter.convert(page, (record) -> MessageHistoryDTO.from(record,
personProfiles,
@ -318,8 +317,8 @@ public class MessageHistoryServiceImpl extends ServiceImpl<MessageHistoryMapper,
.collect(Collectors.toMap(e -> e.getId().toString(), Function.identity()));
}
private Map<Long, OrganizationalUnitVO> listReceiveOrganizational(PageMessageHistoryParam param,
List<MessageHistory> messageHistories) {
private Map<Long, OrgUnitResp> listReceiveOrganizational(PageMessageHistoryParam param,
List<MessageHistory> messageHistories) {
if (CollectionUtils.isEmpty(messageHistories) || BooleanUtils.isNotTrue(param.isNeedReceiveOuInfo())) {
return Collections.emptyMap();
}
@ -333,14 +332,7 @@ public class MessageHistoryServiceImpl extends ServiceImpl<MessageHistoryMapper,
return Collections.emptyMap();
}
OrganizationalUnitQuery query = new OrganizationalUnitQuery();
query.setUnitIds(ouIds);
query.setPageSize(param.getPageSize() + 1L);
return organizationalUnitApi.page(query)
.getData()
.getList()
.stream()
.collect(Collectors.toMap(OrganizationalUnitVO::getId, Function.identity(), (f, s) -> f));
return unitGateway.getByOuIdsMapped(ouIds);
}

View File

@ -139,4 +139,22 @@ public class BizAssertions {
return response.getData();
}
public static <T> T assertResponse(cn.axzo.foundation.result.ApiResult<T> response) {
return assertResponse(response, "error resp={}", JSON.toJSONString(response));
}
public static <T> T assertResponse(cn.axzo.foundation.result.ApiResult<T> response, String message, Object... args) {
if (!response.isSuccess()) {
String finalMsg = MessageFormatter.arrayFormat(message, args).getMessage();
if (StringUtils.isNotBlank(response.getMsg())) {
finalMsg += ": " + response.getMsg();
}
ServiceException e = new ServiceException(finalMsg);
log.warn("remote call response with error. response={}", JSON.toJSONString(response), e);
throw e;
}
return response.getData();
}
}