feat:feature-REQ/2129 修改发送cmp用户时,根据ouId解析正确的ouId,因为有班组需要转成企业ouId去发送

This commit is contained in:
lilong 2024-04-08 11:32:48 +08:00
parent 593aeb6899
commit 907e50f0c0
2 changed files with 44 additions and 7 deletions

View File

@ -4,6 +4,8 @@ import cn.axzo.im.center.api.vo.req.SendMessageParam;
import cn.axzo.im.center.common.enums.AppTypeEnum;
import cn.axzo.im.center.common.enums.BizTypeEnum;
import cn.axzo.im.config.BaseListTypeHandler;
import cn.axzo.maokai.api.client.OrganizationalTeamOuRelationApi;
import cn.axzo.maokai.api.vo.response.OrganizationalTeamOuRelationResp;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
@ -24,6 +26,7 @@ import org.springframework.cglib.beans.BeanMap;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import static cn.axzo.im.config.BizResultCode.MESSAGE_TASK_STATUS_ERROR;
@ -185,7 +188,7 @@ public class MessageTask {
private Long workspaceId;
public String buildKey() {
public String buildKey(Map<Long, Long> ouIdMap) {
if (StringUtils.isNotBlank(this.getImAccount())) {
return this.getImAccount();
}
@ -195,7 +198,7 @@ public class MessageTask {
return this.getPersonId() + "_" + this.getAppType().getCode();
}
return this.getPersonId() + "_" + this.getAppType().getCode() + "_" + this.getOuId();
return this.getPersonId() + "_" + this.getAppType().getCode() + "_" + ouIdMap.getOrDefault(this.getOuId(), this.getOuId());
}
}

View File

@ -1,5 +1,6 @@
package cn.axzo.im.service.impl;
import cn.axzo.framework.domain.web.result.ApiResult;
import cn.axzo.im.center.api.vo.req.SendMessageParam;
import cn.axzo.im.center.common.enums.AccountTypeEnum;
import cn.axzo.im.center.common.enums.AppTypeEnum;
@ -13,6 +14,9 @@ import cn.axzo.im.entity.MessageTask;
import cn.axzo.im.service.AccountRegisterService;
import cn.axzo.im.service.MessageHistoryService;
import cn.axzo.im.service.MessageTaskService;
import cn.axzo.maokai.api.client.OrganizationalTeamOuRelationApi;
import cn.axzo.maokai.api.vo.request.OrganizationalTeamOuRelationReq;
import cn.axzo.maokai.api.vo.response.OrganizationalTeamOuRelationResp;
import cn.axzo.pokonyan.dao.converter.PageConverter;
import cn.axzo.pokonyan.dao.mysql.QueryWrapperHelper;
import cn.axzo.pokonyan.exception.Aassert;
@ -54,6 +58,8 @@ public class MessageTaskServiceImpl extends ServiceImpl<MessageTaskMapper, Messa
private AccountRegisterService accountRegisterService;
@Autowired
private MessageHistoryService messageHistoryService;
@Autowired
private OrganizationalTeamOuRelationApi organizationalTeamOuRelationApi;
private static final Integer DEFAULT_PAGE_SIZE = 500;
@ -152,9 +158,14 @@ public class MessageTaskServiceImpl extends ServiceImpl<MessageTaskMapper, Messa
Set<String> existPersons = listExistPerson(receivePersons, messageTask);
Set<String> existImAccounts = listExistImAccount(receivePersons, messageTask);
Map<Long, Long> ouIdMap = resolveOuId(receivePersons.stream()
.map(MessageTask.ReceivePerson::getOuId)
.filter(Objects::nonNull)
.collect(Collectors.toSet()));
List<MessageTask.ReceivePerson> absentReceivePersons = receivePersons.stream()
.filter(e -> {
String key = e.buildKey();
String key = e.buildKey(ouIdMap);
return !existPersons.contains(key) && !existImAccounts.contains(key);
})
.collect(Collectors.toList());
@ -170,12 +181,16 @@ public class MessageTaskServiceImpl extends ServiceImpl<MessageTaskMapper, Messa
Map<String, AccountRegisterService.AccountRegisterDTO> imAccounts = listImAccount(absentReceivePersons);
List<MessageHistory> messageHistories = absentReceivePersons.stream()
.map(receivePerson -> resolveMessageHistory(messageTask, receivePerson, imAccounts, accountRegisters))
.map(receivePerson -> resolveMessageHistory(messageTask, receivePerson, imAccounts, accountRegisters, ouIdMap))
.collect(Collectors.toList());
messageHistoryService.createBatch(messageHistories);
}
private MessageHistory resolveMessageHistory(MessageTask messageTask, MessageTask.ReceivePerson receivePerson, Map<String, AccountRegisterService.AccountRegisterDTO> imAccounts, Map<String, String> accountRegisters) {
private MessageHistory resolveMessageHistory(MessageTask messageTask,
MessageTask.ReceivePerson receivePerson,
Map<String, AccountRegisterService.AccountRegisterDTO> imAccounts,
Map<String, String> accountRegisters,
Map<Long, Long> ouIdMap) {
MessageHistory messageHistory = new MessageHistory();
messageHistory.setBizId(Optional.ofNullable(messageTask.getBizId()).orElseGet(() -> messageTask.getId().toString()));
messageHistory.setImMessageTaskId(messageTask.getId());
@ -198,9 +213,9 @@ public class MessageTaskServiceImpl extends ServiceImpl<MessageTaskMapper, Messa
messageHistory.setToAccount(receivePerson.getImAccount());
}
} else {
String key = receivePerson.buildKey();
String key = receivePerson.buildKey(ouIdMap);
String imAccount = accountRegisters.get(key);
messageHistory.setReceiveOuId(receivePerson.getOuId());
messageHistory.setReceiveOuId(ouIdMap.getOrDefault(receivePerson.getOuId(), receivePerson.getOuId()));
messageHistory.setReceivePersonId(receivePerson.getPersonId());
messageHistory.setAppType(receivePerson.getAppType().getCode());
messageHistory.setToAccount(imAccount);
@ -352,4 +367,23 @@ public class MessageTaskServiceImpl extends ServiceImpl<MessageTaskMapper, Messa
return JSONUtil.toJsonStr(messageBody);
}
/**
* 需要根据接收方的ouId转成真正的ouId因为平台班组的需要转企业团队的ouId
* 特殊逻辑
* @param ouIds
* @return
*/
private Map<Long, Long> resolveOuId(Set<Long> ouIds) {
if (CollectionUtils.isEmpty(ouIds)) {
return Collections.emptyMap();
}
OrganizationalTeamOuRelationReq organizationalTeamOuRelationReq = new OrganizationalTeamOuRelationReq();
organizationalTeamOuRelationReq.setTeamOuIds(ouIds);
List<OrganizationalTeamOuRelationResp> ouRelationResps = organizationalTeamOuRelationApi.relationListByParam(organizationalTeamOuRelationReq).getData();
return ouRelationResps.stream()
.collect(Collectors.toMap(OrganizationalTeamOuRelationResp::getTeamOuId, OrganizationalTeamOuRelationResp::getOuId, (f, s) -> f));
}
}