package com.its.op.scheduler; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.its.op.dto.its.oper.TbUserMsgDto; import com.its.op.websocket.ItsWebSocketMessage; import com.its.op.websocket.ItsWebSocketSessionManager; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import org.springframework.web.socket.TextMessage; import javax.annotation.PostConstruct; @Slf4j @RequiredArgsConstructor @Component public class ItsApiAfterTaskCompleted { private final ItsWebSocketSessionManager itsWebSocketSessionManager; private ObjectMapper mapper; @PostConstruct public void init() { this.mapper = new ObjectMapper(); } @Async public void executeFcltUserMsgNotify(Long msgNmbr) { // 시설물 사용자 유지보수 메시지 작성 완료 후 웹소켓으로 접속한 사용자에게 통보 try { int broadcastCount = 0; TbUserMsgDto.TbUserMsgNotify msg = TbUserMsgDto.TbUserMsgNotify.builder() .msgNmbr(msgNmbr) .build(); ItsWebSocketMessage itsMessage = new ItsWebSocketMessage("fcltUserMsg", msg); String itsSttsJsonData = this.mapper.writeValueAsString(itsMessage); broadcastCount = this.itsWebSocketSessionManager.sendBroadcastUserMessage(itsMessage.getCommand(), new TextMessage(itsSttsJsonData)); if (broadcastCount > 0) { log.info("executeFcltUserMsgNotify: {} EA.", broadcastCount); } } catch(JsonProcessingException e){ log.error("ItsApiAfterTaskCompleted: executeFcltUserMsgNotify Json parsing Exception"); } catch (Exception ea) { log.error("ItsApiAfterTaskCompleted: Exception"); } } }