Obsidian/Recognition/Work Related/프로젝트/D-MHFH/소프트웨어/EyeSV_MSG.md

4.7 KiB

소스셋팅

  • eyegw_core_java 프로젝트 추가
  • ApplicationStartup.java 주석처리 -> //import javafx.print.Collation;
  • Java Compiler -> Annotation Processing -> Factory Path에서 아래 5가지 체크해제

bootstrap-4.5.1.jar 나머지는 Source -> repository에서 복붙 jquery-3.5.1.jar dist-datatables-1.10.21.jar jquery-dist-3.5.1.jar is-buffer-2.0.4.jar

  • Java 1.8 32bit 적용

관련 테이블

시설 : TB_FCLTY 모뎀 : TB_MODEM 모뎀위치 : TB_MODEM_LC 모뎀상태이력 : TB_MODEM_STTUS_H ALE송신현황 : TB_ALE_SEND_STTUS 미수신 현황 이력 : TB_UNRCV_STTUS_YYYYMM 선박 : TB_SHIP 설정 : TB_SETTING

최종_위치 : TB_LAST_LC 항적_월별 : TB_TRACK_MM 최종_위치_이력 : TB_LAST_LC_YYYYMM

호출_요청 : TB_CALL_REQUST 수동위치_응답 : TB_PASSIVLC_RSPNS 수동위치_요청 : TB_PASSIVLC_REQUST

모뎀상태 : TB_MODEM_STTUS 모뎀제어 : TB_MODEM_CTRL


테스트 정규식 msg console에서 테스트 패킷 추출 : \$SYENC,30.+1,1,1,1\*[0-9]{2}

소스분석

MainController.java

sendThread

  • for : process { 미처리 (0), 일부실패재전송(3) } for : msgArr { - 조난응답(14), - 개별/영역호출(16) - 단문자(3) - 수동위치요청(11) - 기상특보(18) - 기상예보(5) - 태풍(6) - 이미지(4) - 채팅(30) } -> send(msgArr, process);
  • Thread.sleep(sendIntvl);

sendIntvl : 2초

checkLastLcThread

  • for : passivLcSndCnt := 2 -> checkLastLcController.CheckLastLc(min := 30 = min + 30); -> Thread.sleep(10000); // 10분

hbThread

  • 서버 커넥션 체크용 패킷전송 ($HB)

packetController.makePacket

  • 프로토콜을 기주능로 각 방송의 패킷 데이터 생성
  • return : List<String> packet

checkLastLcThread

-> send(2., 1.) 2번 반복 -> sendQue = passivlcController.getPassivlcRequst(process, repeat) -> 20초 sleep (포항,고흥)

packetMap

key : key = mssage_id+modem_id+totalBlCnt+blNo; 0 := 요청 패킷데이터 ($SYENC,28,MD203...... ) {packetController.makePacket(MSG_TY,passivlcVO);} 1 := 실패횟수 (reTryTimeOut()) 2 := 데이터조회 일시 (포항,고흥은 +20초) 3 := table name 4 := ColumnNm 5 := 전송대상 모뎀리스트 6 := 성공횟수 (갱신하는부분 확인) 7 := Slot_no (추가)

getMssage_ty (LastLcTrackVO)

-- 메시지타입? TB_LAST_LC.MSSAGE_TY

요청 packet 0 := $SYENC, 1 := 28, 2 := MD003, 3 := 0, 4 := 0, 5 := 20220130165331342, 6 := 1, 7 := 1|11, 8 := 20220201150056, 9 := 440224590, 10 := 492, 11 := ARo9S04ewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1BxlnUykm/k=*0E

응답 패킷 $SYENC,30,MD003,0,0,20220130165331341,1,1,1*7F

!Pasted image 20220419180044.png


로직 분석

공통

메시지 발송 순서

  • 각 메시지 신규전송 1회씩
  • 이후 일부실패재전송 1회씩
  • 전송이후 2초 sleep

수동위치요청 (11)

  • PROCESS = 0인 자료중 MSSAGE_ID로 정렬하여 1건 조회
  • 대상모뎀컬럼 데이터가 없으면 실패처리 ( PROCESS := 9)
  • 처리중으로 업데이트 ( PROCESS := 1)
  • 조회한 데이터로 Packet 생성
  • packetMap.put(...) EyeSV_MSG#^b72528

    데이터 조회 일시 가공 : 포항, 고흥에 20초씩 추가

  • passivlcQue에 패킷데이터 추가 (모뎀별 1~ 6개)
  • 포항, 고흥인경우 20초 sleep 후 패킷전송

배포

CORE

  • SettingVO.java [gmt.proj.sv_msg.vo]
  • PassivlcVO.java [gmt.proj.sv_msg.vo]

MSG

  • MainController.java

  • PassivlcController.java [kr.gmtc.eyesvmsg.send.passivlc]

  • Db5Mapper.java [kr.gmtc.eyesvmsg.mapper.dao5]

  • PassivlcService.java [kr.gmtc.eyesvmsg.send.passivlc]

  • CheckLastLcController.java [kr.gmtc.eyesvmsg.send.passivlc]

  • Db5.xml [src/main/resources]

  • SpecialNewsService.java [kr.gmtc.eyesvmsg.send.specialnews]

  • WeatherService.java [kr.gmtc.eyesvmsg.send.weather]

  • TyphnService.java [kr.gmtc.eyesvmsg.send.typhoon]

DB

상황관제시스템 API 쿼리 튜닝

송신현황 관련 오브젝트 생성 및 컴파일

/*Index 생성*/
CREATE INDEX idx_TB_SMS_SND_indt ON TB_SMS_SND(insert_dt);
CREATE INDEX idx_TB_ALE_SEND_STTUS_snddt ON TB_ALE_SEND_STTUS(SND_DT);
CREATE INDEX idx_TB_SPECIALNEWS_indt ON TB_SPECIALNEWS(insert_dt);
CREATE INDEX idx_TB_WETHR_SND_M_indt ON TB_WETHR_SND_M(insert_dt);
CREATE INDEX idx_TB_TYPHN_SND_M_indt ON TB_TYPHN_SND_M(insert_dt);
CREATE INDEX idx_TB_PASSIVLC_REQUST_indt ON TB_PASSIVLC_REQUST(insert_dt);
CREATE INDEX idx_TB_SMS_SND_indt ON TB_SMS_SND(insert_dt);
CREATE INDEX idx_TB_DSAST_RSPNS_indt ON TB_DSAST_RSPNS(insert_dt);
CREATE INDEX idx_TB_CALL_REQUST_indt ON TB_CALL_REQUST(MSSAGE_TY, insert_dt);