每日总结
package com.mentalhealth.service;
import com.mentalhealth.entity.ConsultationMode;
import com.mentalhealth.entity.ConsultationRoom;
import com.mentalhealth.entity.RoomParticipant;
import com.mentalhealth.repository.ConsultationRoomRepository;
import com.mentalhealth.repository.RoomParticipantRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import java.util.UUID;
@Service
@RequiredArgsConstructor
public class ConsultationRoomService {
private final ConsultationRoomRepository consultationRoomRepository;
private final RoomParticipantRepository roomParticipantRepository;
public ConsultationRoom getRoomBySessionId(Long sessionId) {
return consultationRoomRepository.findBySessionId(sessionId)
.orElseThrow(() -> new RuntimeException("咨询室不存在"));
}
public Optional<ConsultationRoom> getRoomByRoomId(String roomId) {
return consultationRoomRepository.findByRoomId(roomId);
}
@Transactional
public ConsultationRoom activateRoom(Long sessionId) {
ConsultationRoom room = consultationRoomRepository.findBySessionId(sessionId)
.orElseThrow(() -> new RuntimeException("咨询室不存在"));
room.setIsActive(true);
return consultationRoomRepository.save(room);
}
@Transactional
public ConsultationRoom createRoom(Long sessionId) {
ConsultationRoom room = new ConsultationRoom();
room.setSessionId(sessionId);
room.setRoomId(generateRoomId());
room.setCurrentMode(ConsultationMode.TEXT); // 修正:直接使用 ConsultationMode.TEXT
room.setIsActive(false);
room.setCreatedAt(LocalDateTime.now());
return consultationRoomRepository.save(room);
}
@Transactional
public ConsultationRoom changeRoomMode(String roomId, String newMode) {
ConsultationRoom room = consultationRoomRepository.findByRoomId(roomId)
.orElseThrow(() -> new RuntimeException("咨询室不存在"));
room.setCurrentMode(ConsultationMode.valueOf(newMode)); // 修正:直接使用 ConsultationMode
return consultationRoomRepository.save(room);
}
@Transactional
public void joinRoom(String roomId, Long userId) {
RoomParticipant participant = roomParticipantRepository.findByRoomIdAndUserId(roomId, userId)
.orElse(new RoomParticipant());
participant.setRoomId(roomId);
participant.setUserId(userId);
participant.setJoinedAt(LocalDateTime.now());
participant.setIsOnline(true);
participant.setLastActivity(LocalDateTime.now());
roomParticipantRepository.save(participant);
}
@Transactional
public void leaveRoom(String roomId, Long userId) {
roomParticipantRepository.markUserOffline(roomId, userId);
}
@Transactional
public void updateUserActivity(String roomId, Long userId) {
roomParticipantRepository.updateLastActivity(roomId, userId);
}
public List<RoomParticipant> getOnlineParticipants(String roomId) {
return roomParticipantRepository.findByRoomIdAndIsOnlineTrue(roomId);
}
public String generateRoomId() {
return "room_" + UUID.randomUUID().toString().substring(0, 8);
}
}


浙公网安备 33010602011771号