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

173 lines
4.7 KiB
Markdown
Raw Normal View History

2023-08-14 16:19:25 +00:00
### 소스셋팅
- 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 쿼리 튜닝
#### 송신현황 관련 오브젝트 생성 및 컴파일
```SQL
/*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);
```