shjung 2 rokov pred
rodič
commit
d8360fa7d3

+ 1 - 0
src/main/java/com/its/op/aop/LoggingAspect.java

@@ -29,4 +29,5 @@ public class LoggingAspect {
 
         return proceed;
     }
+
 }

+ 5 - 1
src/main/java/com/its/op/controller/its/facility/TbUserMsgController.java

@@ -4,6 +4,7 @@ import com.its.op.dto.its.common.NewIdLongDto;
 import com.its.op.dto.its.oper.TbUserMsgDto;
 import com.its.op.dto.its.oper.TbUserMsgToDto;
 import com.its.op.entity.its.oper.TbUserMsgToKey;
+import com.its.op.scheduler.ItsApiAfterTaskCompleted;
 import com.its.op.service.its.oper.TbUserMsgService;
 import com.its.op.service.its.oper.TbUserMsgToService;
 import io.swagger.annotations.Api;
@@ -25,6 +26,7 @@ public class TbUserMsgController {
 
     private final TbUserMsgService service;
     private final TbUserMsgToService toService;
+    private final ItsApiAfterTaskCompleted afterTaskCompleted;
 
     @ApiOperation(value = "사용자 메시지 전체조회(TB_USER_MSG)", response = TbUserMsgDto.class, responseContainer = "ArrayList")
     @GetMapping(value = "/list", produces = {"application/json; charset=utf8"})
@@ -41,7 +43,9 @@ public class TbUserMsgController {
     @ApiOperation(value = "사용자 메시지 정보변경/생성-개별(TB_USER_MSG)", response = TbUserMsgDto.class)
     @PostMapping(value = "/{msgNmbr}", produces = {"application/json; charset=utf8"})
     public TbUserMsgDto mergeInfo(@PathVariable("msgNmbr") final Long msgNmbr, @RequestBody @Valid final TbUserMsgDto.TbUserMsgUpdReq req) {
-        return this.service.mergeInfo(req);
+        TbUserMsgDto result = this.service.mergeInfo(req);
+        this.afterTaskCompleted.executeFcltUserMsgNotify(req.getMsgNmbr());
+        return result;
     }
 
     @ApiOperation(value = "사용자 메시지 정보삭제-개별(TB_USER_MSG)", response = TbUserMsgDto.class)

+ 13 - 0
src/main/java/com/its/op/dto/its/oper/TbUserMsgDto.java

@@ -57,6 +57,19 @@ public class TbUserMsgDto implements Serializable {
     @JsonProperty("msg_desc")    // MSG_CD
     private String msgDesc;
 
+    @ApiModel("TbUserMsgNotify(사용자 메시지 정보변경 통지)")
+    @Getter
+    @Setter
+    @ToString
+    @Builder
+    public static class TbUserMsgNotify {
+
+        @ApiModelProperty("메시지 관리번호, Nullable = N, NUMBER(10)")  // N NUMBER(10)
+        @JsonProperty("msg_nmbr")
+        @PositiveOrZero
+        private Long msgNmbr;
+    }
+
     @ApiModel("TbUserMsgUpdReq(사용자 메시지 정보변경)")
     @Getter
     @Setter

+ 45 - 0
src/main/java/com/its/op/scheduler/ItsApiAfterTaskCompleted.java

@@ -0,0 +1,45 @@
+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 ObjectMapper mapper;
+
+    @PostConstruct
+    public void init() {
+        this.mapper = new ObjectMapper();
+    }
+
+    @Async
+    public void executeFcltUserMsgNotify(Long msgNmbr) {
+        // 시설물 사용자 유지보수 메시지 작성 완료 후 웹소켓으로 접속한 사용자에게 통보
+        try {
+            TbUserMsgDto.TbUserMsgNotify msg = TbUserMsgDto.TbUserMsgNotify.builder()
+                    .msgNmbr(msgNmbr)
+                    .build();
+            ItsWebSocketMessage itsMessage = new ItsWebSocketMessage("fcltUserMsg", msg);
+            String itsSttsJsonData = this.mapper.writeValueAsString(itsMessage);
+            ItsWebSocketSessionManager.getInstance().sendBroadcastUserMessage(itsMessage.getCommand(), new TextMessage(itsSttsJsonData));
+        }
+        catch(JsonProcessingException e){
+            log.error("ItsApiAfterTaskCompleted: executeFcltUserMsgNotify Json parsing Exception: {}", e.getMessage());
+        }
+        catch (Exception ea) {
+            log.error("ItsApiAfterTaskCompleted: Exception: {}", ea.getMessage());
+        }
+    }
+}

+ 9 - 0
src/main/java/com/its/op/websocket/ItsWebSocketSessionManager.java

@@ -72,4 +72,13 @@ public class ItsWebSocketSessionManager {
             }
         });
     }
+
+    public void sendBroadcastUserMessage(String command, TextMessage message) {
+        this.sessionMap.forEach((key, session) -> {
+            if (!"wall".equals(session.getGroupId())) {
+                session.sendMessage(command, message);
+            }
+        });
+    }
+
 }

+ 2 - 0
src/main/resources/static/application/op/00.main/main-func.js

@@ -74,6 +74,8 @@ function onSocketReceived(AClientType, AMessage) {
         fetchTraffic();
     } else if (command === "form-save") {
         // VMS 메시지 생성 저장
+    } else if ( command === "fcltUserMsg" ) {
+        
     }
 }