This commit is contained in:
tiger_zhou 2023-04-23 18:04:39 +08:00
commit f861256107
9 changed files with 307 additions and 230 deletions

View File

@ -77,26 +77,4 @@ public class VoiceDiscriminateService {
replyParseService.doExec(result, simulation); // 回复执行
correctSourceService.doExec(result, simulation);// 原信息纠错
}
/**
* 处理聊天信息
* @param event 聊天事件信息
*/
@EventListener
public void handleMessage(SimulationConversationGroupMessageEvent event) {
ConversationGroup conversationGroup = event.getConversationGroup();
SimulationMember member = event.getMember();
List<SimulationMember> memberList = conversationGroup.getMemberList().stream()
.filter(cm -> cm.isRobot() && !Objects.equals(cm.getMember(), member))
.map(ConversationMember::getMember).collect(Collectors.toList());
if (CollectionUtils.isEmpty(memberList)) { // 人员全部为真实人员时直接返回
return;
}
// 增加机器人已读操作
memberList.forEach(m -> conversationGroupManagerService.readConversationGroup(event.getSimulation(), m, conversationGroup.getId()));
// 如果消息来源不为机器人则执行语音识别目前先不做语音识别回复
// if (!event.getMessage().getMember().isRobot()) {
// doAnalysis(event.getSimulation(), conversationGroup.getId(), event.getMessage().getContent(), memberList);
// }
}
}

View File

@ -1,10 +1,8 @@
package club.joylink.rtss.simulation.cbtc.conversation;
import club.joylink.rtss.simulation.cbtc.Simulation;
import club.joylink.rtss.simulation.cbtc.data.vo.ConversationGroupMessageVO;
import club.joylink.rtss.simulation.cbtc.member.SimulationMember;
import club.joylink.rtss.vo.conversation.ConversationGroupVO;
import lombok.Data;
import lombok.Getter;
import org.springframework.util.CollectionUtils;
@ -80,9 +78,10 @@ public class ConversationGroup extends Chat {
setMemberList(memberList);
}
public ConversationGroup(Long id, String name, LocalDateTime time, SimulationMember leader, List<SimulationMember> simulationMembers){
public ConversationGroup(Long id, String imageUrl, String name, LocalDateTime time, SimulationMember leader, List<SimulationMember> simulationMembers){
this.id = id;
this.name = name;
this.imageUrl = imageUrl;
setTime(time);
setCreator(leader);
int size = CollectionUtils.isEmpty(simulationMembers) ? 1 : simulationMembers.size() + 1;

View File

@ -11,16 +11,12 @@ import club.joylink.rtss.simulation.cbtc.exception.SimulationException;
import club.joylink.rtss.simulation.cbtc.exception.SimulationExceptionType;
import club.joylink.rtss.simulation.cbtc.member.SimulationMember;
import club.joylink.rtss.vo.AccountVO;
import club.joylink.rtss.vo.client.SocketMessageVO;
import club.joylink.rtss.vo.client.WebSocketMessageType;
import club.joylink.rtss.vo.client.factory.SocketMessageFactory;
import club.joylink.rtss.vo.client.voice.VoiceRecognitionResult;
import club.joylink.rtss.vo.client.voice.VoiceRecognitionVO;
import club.joylink.rtss.websocket.StompMessageService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@ -44,9 +40,6 @@ public class ConversationGroupHandlerService {
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
@Autowired
private StompMessageService stompMessageService;
/**
* 获取所有群组信息
* @param group 仿真ID
@ -68,17 +61,18 @@ public class ConversationGroupHandlerService {
*
* @param simulation 仿真
* @param member 用户
* @param imageUrl 群头像
* @param name 群组名称
* @param memberIds 群组成员
*/
public ConversationGroupVO createConversationGroup(Simulation simulation, SimulationMember member, String name, List<String> memberIds) {
public ConversationGroupVO createConversationGroup(Simulation simulation, SimulationMember member, String imageUrl, String name, List<String> memberIds) {
ConversationGroup conversationGroup = simulation.getConversationGroupByName(name);
if (conversationGroup != null) {
throw new SimulationException(SimulationExceptionType.Illegal_Argument, "" + name + "】已存在");
}
List<SimulationMember> simulationMembers = memberIds.stream().map(simulation::getSimulationMemberById).collect(Collectors.toList());
Long groupId = simulation.getMaxConversationGroupId();
conversationGroup = new ConversationGroup(groupId, name, simulation.getCorrectSystemTime(), member, simulationMembers);
conversationGroup = new ConversationGroup(groupId, imageUrl, name, simulation.getCorrectSystemTime(), member, simulationMembers);
simulation.addConversationGroup(conversationGroup);
// 通知用户消息
applicationEventPublisher.publishEvent(new SimulationConversationGroupCreateEvent(this, simulation, conversationGroup));
@ -90,7 +84,7 @@ public class ConversationGroupHandlerService {
*
* @param simulation 仿真
* @param member 用户
* @param groupId 群组主键
* @param id 群组主键
* @param name 群组名称
*/
public void updateConversationGroupName(Simulation simulation, SimulationMember member, Long id, String name) {
@ -285,140 +279,31 @@ public class ConversationGroupHandlerService {
}
/**
* 处理创建群组事件
* @param event 事件信息
* 机器人批量已读信息
* @param simulation 仿真
* @param memberList 成员列表
* @param id 用户群组ID
*/
@EventListener
public void handleCreate(SimulationConversationGroupCreateEvent event) {
ConversationGroup conversationGroup = event.getConversationGroup();
SimulationMember leader = conversationGroup.getLeader();
ConversationGroupSocketMessageVO messageVO = ConversationGroupSocketMessageVO.MessageType.JOIN.generateMessageVO(conversationGroup, null);
if (!leader.isRobot()) {
doSendMessage(event.getSimulation(), Set.of(leader.getUserId()), messageVO);
}
Set<String> userIds = conversationGroup.getMemberUserIdWithOutLeader();
if (CollectionUtils.isEmpty(userIds)) {
public void robotBatchRead(Simulation simulation, List<SimulationMember> memberList, Long id) {
// 查找群组
ConversationGroup conversationGroup = simulation.getConversationGroup(id);
Set<String> robotMemberIds = memberList.stream().map(SimulationMember::getId).collect(Collectors.toSet());
Set<String> allMemberIds = conversationGroup.getMemberList().stream().map(m -> m.getMember().getId()).collect(Collectors.toSet());
// 是否全部是群成员
if (!allMemberIds.containsAll(robotMemberIds)) {
return;
}
// 给非群主的群人员发送消息添加tips信息
messageVO.setMessageTips(String.format("你加入了【%s】", conversationGroup.getName()));
doSendMessage(event.getSimulation(), userIds, messageVO);
// 获取到所有没有读取的消息
List<ConversationGroupMessage> messageList = conversationGroup.getMessageList().stream()
.filter(m -> !m.isAllRead()).collect(Collectors.toList());
messageList.forEach(message -> {
message.getReaderSet().addAll(robotMemberIds);
if (allMemberIds.stream().filter(mid -> !Objects.equals(message.getMember().getId(), mid))
.allMatch(mid -> message.getReaderSet().contains(mid))) { // 除发送用户外全部已读
message.finishRead();
}
/**
* 处理更新群组信息事件
* @param event 事件信息
*/
@EventListener
public void handleUpdate(SimulationConversationGroupUpdateEvent event) {
ConversationGroup conversationGroup = event.getConversationGroup();
Set<String> userIds = conversationGroup.getMemberUserId();
if (CollectionUtils.isEmpty(userIds)) {
return;
}
ConversationGroupSocketMessageVO messageVO = event.getMessageType().generateMessageVO(conversationGroup, null);
doSendMessage(event.getSimulation(), userIds, messageVO);
}
/**
* 处理邀请成员事件
* @param event 事件信息
*/
@EventListener
public void handleInvite(SimulationConversationGroupInviteEvent event) {
ConversationGroup conversationGroup = event.getConversationGroup();
Set<String> newUserIdSet = new HashSet<>(); // 发送加入信息的用户列表
StringBuilder stringBuilder = new StringBuilder();
event.getNewMemberList().forEach(m -> {
if (!m.isRobot()) {
newUserIdSet.add(m.getUserId());
}
stringBuilder.append(m.getName()).append("");
});
// 通知新成员
if (!CollectionUtils.isEmpty(newUserIdSet)) {
ConversationGroupSocketMessageVO joinMessageVO = ConversationGroupSocketMessageVO.MessageType.JOIN.generateMessageVO(conversationGroup, null);
// 添加tips信息
joinMessageVO.setMessageTips(String.format("你加入了【%s】", conversationGroup.getName()));
doSendMessage(event.getSimulation(), newUserIdSet, joinMessageVO);
}
Set<String> oldUserIdSet = conversationGroup.getMemberUserId(event.getGroupMemberIds());
// 通知老成员
if (!CollectionUtils.isEmpty(oldUserIdSet)) {
ConversationGroupSocketMessageVO updateMessageVO = ConversationGroupSocketMessageVO.MessageType.UPDATE_MEMBER.generateMessageVO(conversationGroup, null);
updateMessageVO.setMessageTips("欢迎【" + stringBuilder.substring(0, stringBuilder.length() - 1) + "】加入本群");
doSendMessage(event.getSimulation(), conversationGroup.getMemberUserId(event.getGroupMemberIds()), updateMessageVO);
}
}
/**
* 群组移除人员事件
*
* @param event 事件信息
*/
@EventListener
public void handleRemove(SimulationConversationGroupRemoveEvent event) {
ConversationGroup conversationGroup = event.getConversationGroup();
Set<String> removeUserIdSet = event.getRemoveGroupMember().stream().filter(m -> !m.isRobot()).map(SimulationMember::getUserId).collect(Collectors.toSet());
// 通知移除
if (!CollectionUtils.isEmpty(removeUserIdSet)) {
ConversationGroupSocketMessageVO exitMessageVO = ConversationGroupSocketMessageVO.MessageType.EXIT.generateMessageVO(conversationGroup, null);
// 添加tips信息
exitMessageVO.setMessageTips(String.format("你被移出了【%s】", conversationGroup.getName()));
doSendMessage(event.getSimulation(), removeUserIdSet, exitMessageVO);
}
// 更新其他用户的成员列表
Set<String> userIdSet = conversationGroup.getMemberUserId();
if (CollectionUtils.isEmpty(userIdSet)) {
return;
}
ConversationGroupSocketMessageVO updateMessageVO = ConversationGroupSocketMessageVO.MessageType.UPDATE_MEMBER.generateMessageVO(conversationGroup, null);
doSendMessage(event.getSimulation(), userIdSet, updateMessageVO);
}
/**
* 处理退出群组事件
* @param event 事件信息
*/
@EventListener
public void handleExit(SimulationConversationGroupExitEvent event) {
if (event.getMember().isRobot()) {
return;
}
ConversationGroup conversationGroup = event.getConversationGroup();
ConversationGroupSocketMessageVO exitMessageVO = ConversationGroupSocketMessageVO.MessageType.EXIT.generateMessageVO(conversationGroup, null);
doSendMessage(event.getSimulation(), Set.of(event.getMember().getUserId()), exitMessageVO);
}
/**
* 解散群主事件
* @param event 事件信息
*/
@EventListener
public void handleDissolve(SimulationConversationGroupDissolveEvent event) {
ConversationGroup conversationGroup = event.getConversationGroup();
// 更新其他用户的成员列表
Set<String> userIdSet = conversationGroup.getMemberUserId();
if (CollectionUtils.isEmpty(userIdSet)) {
return;
}
ConversationGroupSocketMessageVO exitMessageVO = ConversationGroupSocketMessageVO.MessageType.EXIT.generateMessageVO(conversationGroup, null);
exitMessageVO.setMessageTips(String.format("【%s】解散了", conversationGroup.getName()));
doSendMessage(event.getSimulation(), userIdSet, exitMessageVO);
}
/**
* 处理消息状态
* @param event
*/
@EventListener
public void handleMessageStatus(SimulationConversationGroupMessageStatusEvent event) {
ConversationGroup conversationGroup = event.getConversationGroup();
event.getMessageList().stream().filter(m -> !m.getMember().isRobot()).forEach(message -> {
ConversationGroupSocketMessageVO messageStatusVO
= ConversationGroupSocketMessageVO.MessageType.MESSAGE_STATUS.generateMessageVO(conversationGroup, new ConversationGroupMessageVO(message));
doSendMessage(event.getSimulation(), Set.of(message.getMember().getUserId()), messageStatusVO);
});
applicationEventPublisher.publishEvent(new SimulationConversationGroupMessageStatusEvent(this, simulation, conversationGroup, messageList));
}
/**
@ -455,38 +340,16 @@ public class ConversationGroupHandlerService {
throw new SimulationException(SimulationExceptionType.Illegal_Argument, "非本组成员");
}
VoiceRecognitionResult recognitionResult = handleSupplier.get();
String upperCaseResult = recognitionResult.getResult().toUpperCase();
String handledContent = simulationVoiceHandler.handle(upperCaseResult);
// 对语音信息进行消息文字处理
String handledContent = StringUtils.isNotEmpty(recognitionResult.getFilePath()) ?
simulationVoiceHandler.handle(recognitionResult.getResult().toUpperCase()) : recognitionResult.getResult();
// 创建消息信息
String messageId = conversationGroup.generateMessageId();
ConversationGroupMessage message = new ConversationGroupMessage(messageId, member,
simulation.getCorrectSystemTime(), handledContent, recognitionResult.getFilePath());
conversationGroup.addMessage(message);
// 发送消息
ConversationGroupMessageVO messageVO = new ConversationGroupMessageVO(message);
Set<String> userIdSet = conversationGroup.getMemberUserId();
if (!CollectionUtils.isEmpty(userIdSet)) {
doSendMessage(simulation, userIdSet, ConversationGroupSocketMessageVO.MessageType.MESSAGE.generateMessageVO(conversationGroup, messageVO));
}
// 语音识别开始
applicationEventPublisher.publishEvent(new SimulationConversationGroupMessageEvent(this, simulation, conversationGroup, member, message));
return messageVO;
applicationEventPublisher.publishEvent(new SimulationConversationGroupMessageEvent(this, simulation, conversationGroup, message));
return new ConversationGroupMessageVO(message);
}
/**
* 发送消息
*
* @param simulation 仿真
* @param userSet 用户列表
* @param messageVO 消息体
*/
private void doSendMessage(Simulation simulation, Set<String> userSet, ConversationGroupSocketMessageVO messageVO) {
if (CollectionUtils.isEmpty(userSet)) {
return;
}
SocketMessageVO<ConversationGroupSocketMessageVO> chatMessage =
SocketMessageFactory.build(WebSocketMessageType.Simulation_Conversation_Group, simulation.getId(), messageVO);
stompMessageService.sendToUser(userSet, chatMessage);
}
}

View File

@ -0,0 +1,218 @@
package club.joylink.rtss.simulation.cbtc.conversation;
import club.joylink.rtss.simulation.cbtc.Simulation;
import club.joylink.rtss.simulation.cbtc.data.vo.ConversationGroupMessageVO;
import club.joylink.rtss.simulation.cbtc.data.vo.ConversationGroupSocketMessageVO;
import club.joylink.rtss.simulation.cbtc.event.conversation.*;
import club.joylink.rtss.simulation.cbtc.member.SimulationMember;
import club.joylink.rtss.vo.client.SocketMessageVO;
import club.joylink.rtss.vo.client.WebSocketMessageType;
import club.joylink.rtss.vo.client.factory.SocketMessageFactory;
import club.joylink.rtss.websocket.StompMessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 用户群组事件监听器
*/
@Component
public class ConversationGroupListener {
@Autowired
private StompMessageService stompMessageService;
@Autowired
private ConversationGroupHandlerService conversationGroupHandlerService;
/**
* 处理创建群组事件
* @param event 事件信息
*/
@EventListener
public void handleCreate(SimulationConversationGroupCreateEvent event) {
ConversationGroup conversationGroup = event.getConversationGroup();
SimulationMember leader = conversationGroup.getLeader();
ConversationGroupSocketMessageVO messageVO = ConversationGroupSocketMessageVO.MessageType.JOIN.generateMessageVO(conversationGroup, null);
if (!leader.isRobot()) {
doSendMessage(event.getSimulation(), Set.of(leader.getUserId()), messageVO);
}
Set<String> userIds = conversationGroup.getMemberUserIdWithOutLeader();
if (CollectionUtils.isEmpty(userIds)) {
return;
}
// 给非群主的群人员发送消息添加tips信息
messageVO.setMessageTips(String.format("你加入了【%s】", conversationGroup.getName()));
doSendMessage(event.getSimulation(), userIds, messageVO);
}
/**
* 处理更新群组信息事件
* @param event 事件信息
*/
@EventListener
public void handleUpdate(SimulationConversationGroupUpdateEvent event) {
ConversationGroup conversationGroup = event.getConversationGroup();
Set<String> userIds = conversationGroup.getMemberUserId();
if (CollectionUtils.isEmpty(userIds)) {
return;
}
ConversationGroupSocketMessageVO messageVO = event.getMessageType().generateMessageVO(conversationGroup, null);
doSendMessage(event.getSimulation(), userIds, messageVO);
}
/**
* 处理邀请成员事件
* @param event 事件信息
*/
@EventListener
public void handleInvite(SimulationConversationGroupInviteEvent event) {
ConversationGroup conversationGroup = event.getConversationGroup();
Set<String> newUserIdSet = new HashSet<>(); // 发送加入信息的用户列表
StringBuilder stringBuilder = new StringBuilder();
event.getNewMemberList().forEach(m -> {
if (!m.isRobot()) {
newUserIdSet.add(m.getUserId());
}
stringBuilder.append(m.getMemberName()).append("");
});
// 通知新成员
if (!CollectionUtils.isEmpty(newUserIdSet)) {
ConversationGroupSocketMessageVO joinMessageVO = ConversationGroupSocketMessageVO.MessageType.JOIN.generateMessageVO(conversationGroup, null);
// 添加tips信息
joinMessageVO.setMessageTips(String.format("你加入了【%s】", conversationGroup.getName()));
doSendMessage(event.getSimulation(), newUserIdSet, joinMessageVO);
}
Set<String> oldUserIdSet = conversationGroup.getMemberUserId(event.getGroupMemberIds());
// 通知老成员
if (!CollectionUtils.isEmpty(oldUserIdSet)) {
ConversationGroupSocketMessageVO updateMessageVO = ConversationGroupSocketMessageVO.MessageType.UPDATE_MEMBER.generateMessageVO(conversationGroup, null);
updateMessageVO.setMessageTips("欢迎【" + stringBuilder.substring(0, stringBuilder.length() - 1) + "】加入本群");
doSendMessage(event.getSimulation(), conversationGroup.getMemberUserId(event.getGroupMemberIds()), updateMessageVO);
}
}
/**
* 群组移除人员事件
*
* @param event 事件信息
*/
@EventListener
public void handleRemove(SimulationConversationGroupRemoveEvent event) {
ConversationGroup conversationGroup = event.getConversationGroup();
Set<String> removeUserIdSet = event.getRemoveGroupMember().stream().filter(m -> !m.isRobot()).map(SimulationMember::getUserId).collect(Collectors.toSet());
// 通知移除
if (!CollectionUtils.isEmpty(removeUserIdSet)) {
ConversationGroupSocketMessageVO exitMessageVO = ConversationGroupSocketMessageVO.MessageType.EXIT.generateMessageVO(conversationGroup, null);
// 添加tips信息
exitMessageVO.setMessageTips(String.format("你被移出了【%s】", conversationGroup.getName()));
doSendMessage(event.getSimulation(), removeUserIdSet, exitMessageVO);
}
// 更新其他用户的成员列表
Set<String> userIdSet = conversationGroup.getMemberUserId();
if (CollectionUtils.isEmpty(userIdSet)) {
return;
}
ConversationGroupSocketMessageVO updateMessageVO = ConversationGroupSocketMessageVO.MessageType.UPDATE_MEMBER.generateMessageVO(conversationGroup, null);
doSendMessage(event.getSimulation(), userIdSet, updateMessageVO);
}
/**
* 处理退出群组事件
* @param event 事件信息
*/
@EventListener
public void handleExit(SimulationConversationGroupExitEvent event) {
if (event.getMember().isRobot()) {
return;
}
ConversationGroup conversationGroup = event.getConversationGroup();
ConversationGroupSocketMessageVO exitMessageVO = ConversationGroupSocketMessageVO.MessageType.EXIT.generateMessageVO(conversationGroup, null);
doSendMessage(event.getSimulation(), Set.of(event.getMember().getUserId()), exitMessageVO);
}
/**
* 解散群主事件
* @param event 事件信息
*/
@EventListener
public void handleDissolve(SimulationConversationGroupDissolveEvent event) {
ConversationGroup conversationGroup = event.getConversationGroup();
// 更新其他用户的成员列表
Set<String> userIdSet = conversationGroup.getMemberUserId();
if (CollectionUtils.isEmpty(userIdSet)) {
return;
}
ConversationGroupSocketMessageVO exitMessageVO = ConversationGroupSocketMessageVO.MessageType.EXIT.generateMessageVO(conversationGroup, null);
exitMessageVO.setMessageTips(String.format("【%s】解散了", conversationGroup.getName()));
doSendMessage(event.getSimulation(), userIdSet, exitMessageVO);
}
/**
* 处理消息状态
* @param event
*/
@EventListener
public void handleMessageStatus(SimulationConversationGroupMessageStatusEvent event) {
ConversationGroup conversationGroup = event.getConversationGroup();
event.getMessageList().stream().filter(m -> !m.getMember().isRobot()).forEach(message -> {
ConversationGroupSocketMessageVO messageStatusVO
= ConversationGroupSocketMessageVO.MessageType.MESSAGE_STATUS.generateMessageVO(conversationGroup, new ConversationGroupMessageVO(message));
doSendMessage(event.getSimulation(), Set.of(message.getMember().getUserId()), messageStatusVO);
});
}
/**
* 处理聊天信息
* @param event 聊天事件信息
*/
@EventListener
public void handleMessage(SimulationConversationGroupMessageEvent event) {
Simulation simulation = event.getSimulation();
ConversationGroup conversationGroup = event.getConversationGroup();
ConversationGroupMessage message = event.getMessage();
// 发送消息
ConversationGroupMessageVO messageVO = new ConversationGroupMessageVO(message);
Set<String> userIdSet = conversationGroup.getMemberUserId();
if (!CollectionUtils.isEmpty(userIdSet)) {
doSendMessage(simulation, userIdSet, ConversationGroupSocketMessageVO.MessageType.MESSAGE.generateMessageVO(conversationGroup, messageVO));
}
// 发送人员
SimulationMember member = message.getMember();
List<SimulationMember> memberList = conversationGroup.getMemberList().stream()
.filter(cm -> cm.isRobot() && !Objects.equals(cm.getMember(), member))
.map(ConversationMember::getMember).collect(Collectors.toList());
if (CollectionUtils.isEmpty(memberList)) { // 人员全部为真实人员时直接返回
return;
}
// 增加机器人已读操作批量操作
conversationGroupHandlerService.robotBatchRead(simulation, memberList, conversationGroup.getId());
// 如果消息来源不为机器人则执行语音识别目前先不做语音识别回复
// if (!event.getMessage().getMember().isRobot()) {
// VoiceDiscriminateService.doAnalysis(event.getSimulation(), conversationGroup.getId(), event.getMessage().getContent(), memberList);
// }
}
/**
* 发送消息
*
* @param simulation 仿真
* @param userSet 用户列表
* @param messageVO 消息体
*/
private void doSendMessage(Simulation simulation, Set<String> userSet, ConversationGroupSocketMessageVO messageVO) {
if (CollectionUtils.isEmpty(userSet)) {
return;
}
SocketMessageVO<ConversationGroupSocketMessageVO> chatMessage =
SocketMessageFactory.build(WebSocketMessageType.Simulation_Conversation_Group, simulation.getId(), messageVO);
stompMessageService.sendToUser(userSet, chatMessage);
}
}

View File

@ -2,11 +2,9 @@ package club.joylink.rtss.simulation.cbtc.conversation;
import club.joylink.rtss.simulation.cbtc.member.SimulationMember;
import lombok.Getter;
import org.springframework.util.StringUtils;
import java.time.LocalDateTime;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**

View File

@ -25,12 +25,13 @@ public class ConversationGroupOperateHandler {
* 创建群组信息
* @param simulation 仿真
* @param member 创建人
* @param name
* @param memberIds
* @param imageUrl 群图像
* @param name 群名称
* @param memberIds 群成员
*/
@OperateHandlerMapping(type = Operation.Type.Conversation_Group_Create)
public ConversationGroupVO createConversationGroup(Simulation simulation, SimulationMember member, String name, List<String> memberIds) {
return conversationGroupManagerService.createConversationGroup(simulation, member, name, memberIds);
public ConversationGroupVO createConversationGroup(Simulation simulation, SimulationMember member, String imageUrl, String name, List<String> memberIds) {
return conversationGroupManagerService.createConversationGroup(simulation, member, imageUrl, name, memberIds);
}
/**

View File

@ -18,21 +18,15 @@ public class SimulationConversationGroupMessageEvent extends AbstractSimulationE
*/
private ConversationGroup conversationGroup;
/**
* 操作用户
*/
private SimulationMember member;
/**
* 消息内容
*/
private ConversationGroupMessage message;
public SimulationConversationGroupMessageEvent(Object source, Simulation simulation, ConversationGroup conversationGroup
, SimulationMember member, ConversationGroupMessage message) {
, ConversationGroupMessage message) {
super(source, simulation);
this.conversationGroup = conversationGroup;
this.member = member;
this.message = message;
}
}

View File

@ -92,6 +92,9 @@ public class MemberManager {
// this.addRole(simulation, SimulationMember.Type.SCHEDULING);
// 车务段段长
this.addRole(simulation, SimulationMember.Type.TRAIN_MASTER);
// NCC调度员
this.addRole(simulation, SimulationMember.Type.NCC_DISPATCHER);
}
/**

View File

@ -6,6 +6,7 @@ import club.joylink.rtss.simulation.cbtc.data.map.MapNamedElement;
import club.joylink.rtss.simulation.vo.SimulationMemberVO;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
import javax.validation.constraints.NotNull;
import java.util.Objects;
@ -120,6 +121,20 @@ public class SimulationMember extends club.joylink.rtss.simulation.SimulationMem
return String.format("仿真成员[%s][%s][%s]", getId(), getType(), getName());
}
public String getMemberName() {
if (StringUtils.isNotEmpty(this.name)) {
return this.name;
}
StringBuilder memberName = new StringBuilder();
if (device instanceof MapNamedElement) {
memberName.append(((MapNamedElement) device).getName());
}
if (this.type != null) {
memberName.append(this.type.getDescription());
}
return memberName.toString();
}
@Override
public String toString() {
String deviceInfo = null;
@ -155,95 +170,103 @@ public class SimulationMember extends club.joylink.rtss.simulation.SimulationMem
int TRAIN = 3;
/** 大铁车务段 */
int TRAIN_DEPOT = 4;
/** */
int NCC = 5;
}
/**
* 仿真成员岗位
*/
@Getter
public enum Type {
/**
* 值班主任
*/
SHIFT_MANAGER(Area.OCC),
SHIFT_MANAGER(Area.OCC, "值班主任"),
/**
* 中心调度员
*/
DISPATCHER(Area.OCC),
DISPATCHER(Area.OCC, "值班主任"),
/**
* 电力调度
*/
ELECTRIC_DISPATCHER(Area.OCC),
ELECTRIC_DISPATCHER(Area.OCC, "电力调度"),
/**
* 环控调度
*/
ENVIRONMENT_DISPATCHER(Area.OCC),
ENVIRONMENT_DISPATCHER(Area.OCC, "环控调度"),
/**
* 车辆段调度
*/
DEPOT_DISPATCHER(Area.VEHICLE_DEPOT),
DEPOT_DISPATCHER(Area.VEHICLE_DEPOT, "车辆段调度"),
/**
* 车站值班员
*/
STATION_SUPERVISOR(Area.STATION),
STATION_SUPERVISOR(Area.STATION, "车站值班员"),
/**
* 司机
*/
DRIVER(Area.TRAIN),
DRIVER(Area.TRAIN, "司机"),
/**
* 通号
*/
MAINTAINER(Area.STATION),
MAINTAINER(Area.STATION, "通号"),
/**
* 车辆段/停车场信号楼
*/
SIGNAL_BUILDING(Area.VEHICLE_DEPOT),
SIGNAL_BUILDING(Area.VEHICLE_DEPOT, "车辆段/停车场信号楼"),
/**
* 上级部门
*/
@Deprecated(since = "2022-10-17", forRemoval = true)
PARENT_DEPARTMENT(Area.OCC),
PARENT_DEPARTMENT(Area.OCC, "上级部门"),
/**
* 派班员
*/
@Deprecated(since = "2022-10-17", forRemoval = true)
SCHEDULING(Area.OCC),
SCHEDULING(Area.OCC, "派班员"),
/**
* 车务段段长
*/
TRAIN_MASTER(Area.TRAIN_DEPOT),
TRAIN_MASTER(Area.TRAIN_DEPOT, "车务段段长"),
/**
* 车站助理
*/
STATION_ASSISTANT(Area.STATION),
/*** 车站站长 */
STATION_MASTER(Area.STATION),
STATION_ASSISTANT(Area.STATION, "车站助理"),
/**
* 车站站长
* */
STATION_MASTER(Area.STATION, "车站站长"),
/**
* 车站信号员
*/
STATION_SIGNALER(Area.STATION),
STATION_SIGNALER(Area.STATION, "车站信号员"),
/**
* 车站客运员
*/
STATION_PASSENGER(Area.STATION),
STATION_PASSENGER(Area.STATION, "车站客运员"),
/** 车站扳道员 */
STATION_SWITCH_MAN(Area.STATION),
STATION_SWITCH_MAN(Area.STATION, "车站扳道员"),
/** 车站引导员 */
STATION_FACILITATOR(Area.STATION),
STATION_FACILITATOR(Area.STATION, "车站引导员"),
/** 车站工务工*/
STATION_WORKER(Area.STATION),
STATION_WORKER(Area.STATION, "车站工务工"),
/** 设备管理员 */
DEVICE_MANAGER(Area.STATION),
DEVICE_MANAGER(Area.STATION, "设备管理员"),
/**
* 电力工务
*/
STATION_ELECTRIC_WORKER(Area.STATION);
STATION_ELECTRIC_WORKER(Area.STATION, "电力工务"),
NCC_DISPATCHER(Area.NCC, "NCC调度员");
private final int area;
Type(int area) {
private final String description;
Type(int area, String description) {
this.area = area;
this.description = description;
}
}