173 lines
4.7 KiB
Markdown
173 lines
4.7 KiB
Markdown
|
### 소스셋팅
|
||
|
- 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);
|
||
|
|
||
|
|
||
|
|
||
|
```
|