每日总结

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);
}

}
屏幕截图 2026-01-06 032009

posted @ 2025-11-10 21:58  李蕊lr  阅读(1)  评论(0)    收藏  举报