Obsidian/Recognition/Work Related/프로젝트/D-MHFH/유지보수/위치보고요청 로직 변경요청.md

282 lines
8.0 KiB
Markdown

#디지털중단파
현재)
- 현재 선박별로 최종 수신된 주파수를 선택하여(TB_LC_FSHOPRRPT_20xx) 하나의 주파수만으로 강화,울진,고흥 전송.
- 모뎀별 20sec 간격전송 *2
문제점)
- 3개 채널중 한 채널로만 전송하기 떄문에 응답 수신율 저하원인중 하나.
- 하나의 요청당 시간이 많이소요됨 (총2분)
개선)
- 강화,울진,고흥의 각 채널을 달리하여 3개채널에 한번에 전송
- 각 20sec 간격으로 총 3회 전송.
![[Pasted image 20220427164814.png|400]]
MD001,MD102,MD203,MD002,MD103,MD201,MD003,MD101,MD202
- 위치수신 성공하면 나머지 전송 중단.
- 선박 출항 상태인 경우만 호출.
- 자동 수신이 없더라도 출항한 시점으로부터 마지막 수신 90분 체크
- 일정시간 미수신 선박 자동 위치보고요청 시간 변경(90분, 180분)
- 가장 최근 성공한 수신기쪽으로 요청보내기.
---
- 전송대상 모뎀 리스트 설정로직 변경
> 소스 : CheckLastLcController.insertPassivLC
>변경로직 : TB_LC_FSHOPRRPT_20xx -> TB_MODEM, TB_MODEM_STTUS
- ~~procces구분 추가 : 7-성공수신후 전송취소~~
- 몆번째 수신 성공했는지 구분할 수 있는 컬럼 추가
![[Pasted image 20220427160054.png|100]]
| 메시지ID | 요청순서 | 요청모뎀 | 주파수 |
| --- | --- | --- | --- |
| 11 | 1 | MD001 | 4M |
| 11 | 1 | MD102 | 6M |
| 11 | 1 | MD203 | 8M |
| 11 | 2 | MD002 | 6M |
| 11 | 2 | MD103 | 8M |
| 11 | 2 | MD201 | 4M |
| 11 | 3 | MD003 | 8M |
| 11 | 3 | MD101 | 4M |
| 11 | 3 | MD202 | 6M |
1. TB_PASSIVLC_REQUST 1건당 1row만 생성
- [ ] ~~TB_PASSIVLC_REQUST.MODEM_LIST 수신성공한 모뎀 그룹지정~~
- [ ] TB_PASSIVLC_REQUST.FAILR_MODEM_LIST 모뎀 그룹중 실패한 모뎀 그룹
2. 최종 수신 주파수 + 수신 모뎀 위치로 우선순위 지정
- [x] TB_MODEM.AREA 컬럼 최신화
- [x] msgGW에서 모뎀ID, 주파수를 같이 넘길수 있는지 확인
- [x] + 모뎀리스트 설정 부분 확인
CheckLastLcController.java [:131 ~ 165]
165 line : String modemList = packetController.modemList(modem); [in: 1440]
- [x] 위치보고요청 가변/방송 확인
brdcst -> 0 : 가변
- [x] 요청그룹별 sleep방안 검토
- [x] tb_last_lc modem1,2,3 update부분 확인.
3. 요청중 이전요청에서 성공 수신되면 나머지 중단.
- [x] 성공수신받으면 삭제할 Que 확인
(송신:sendQue | 수신:packetQ)
- [x] Send Method에서 전송취소 기준이될 오브젝트 확인.
packetMap.get(key).get(6) // 성공카운트 0이상인것.
int sucCnt = Integer.parseInt(resultMap.get(6));
4. 이전요청이 처리되지 않았으면 요청자료 생성 안함.
---
### 90분 180분 자동 요청으로 변경
- [x] 수정해야할 로직 위치 확인
MainController.java : 268,
CheckLastLcController.java : 105, 109
---
### eyeSV_MSG 수정
- Db5.xml
```xml
<select id="getRequestModemArray" resultType="String">
select 'MD001,MD002,MD003' as modemArray
from dual
</select>
```
- CheckLastLcController.java [165]
- Db5Mapper.java [154]
- PassivlcService.java [47]
- PacketController [579, 609]
- 주석처리 : // Collections.sort(modemArray);
- // 수동 위치보고 인경우 modemList의 특문(§) 마다 Thread sleep용 추가...
- MainController [553, 439]
- if (msgArray[0] == "$HB") return ;
- // 수동위치보고인경우 "§"마다 Sleep(22.05월 수정)...
---
## Test Data생성
``` SQL
-- 특정선박 입/출항 시각 조정
SELECT *
FROM V_ARS_INOUT2
WHERE SHIP_NO = '00020016267100'
-- 자료 생성 : TB_LC_FSHOPRRPT_20yyMM
INSERT INTO TB_LC_FSHOPRRPT_202205
SELECT *
FROM TB_LC_FSHOPRRPT_202112
WHERE SLOT_NO = '306'
AND to_char(INSERT_DT, 'yyyymmdd') LIKE '2021122%'
-- TB_LAST_LC.REPORT_DT 수정
SELECT *
FROM TB_LAST_LC ts
WHERE SLOT_NO = '306'
-- TB_LC_FSHOPRRPT_20yyMM 비슷한 시각으로 맞추기
UPDATE TB_LC_FSHOPRRPT_202205
SET REPORT_DT = ( to_date('2022-05-03 05:45:01', 'yyyy-mm-dd hh24:mi:ss') - ((TO_NUMBER(TRIM(TO_CHAR(DBMS_RANDOM.VALUE(1,60),'99'))) / 60 /24 )) )
-- TB_LC_FSHOPRRPT_20yyMM.REPORT_DT 수정
SELECT *
FROM TB_LC_FSHOPRRPT_202205
ORDER BY 2 desc
-- 요청데이터 확인(행 삭제)
SELECT *
FROM TB_PASSIVLC_REQUST
WHERE SLOT_NO = '306'
AND to_char(INSERT_DT, 'yyyymmdd') LIKE '20220503%'
```
```SQL
-- 일자 UTC 확인
-- 2022-05-03 14:10:01.000
SELECT (to_date('2022-05-12 16:18:01', 'yyyy-mm-dd hh24:mi:ss') - INTERVAL '9' HOUR) FROM dual
SELECT (to_date('2022-05-16 13:20:00', 'yyyy-mm-dd hh24:mi:ss') - INTERVAL '9' HOUR) FROM dual
SELECT (sysdate - INTERVAL '9' HOUR) FROM dual
```
## BD5.xml
``` SQL
-- selectLastLcList [선박최종위치 30분/60분 조회]
SELECT
SLOT_NO
, REPORT_DT
, MODEM1
, MODEM2
, MODEM3
, MSSAGE_TY
, (SYSDATE - INTERVAL '9' HOUR) AS UTC_NOW_DT
FROM TB_LAST_LC
WHERE (REPORT_DT + INTERVAL '9' HOUR) BETWEEN (SYSDATE-(INTERVAL '2' HOUR)) AND SYSDATE
AND (REPORT_DT + INTERVAL '9' HOUR) < (SYSDATE - INTERVAL :ar_min MINUTE)
ORDER BY REPORT_DT ASC
-- selectPassiv30or60Min [선박최종위치 30분/60분 조회] 기요청한내역 확인 쿼리
SELECT COUNT(*)
FROM TB_PASSIVLC_REQUST
WHERE SLOT_NO = 306
AND REQUST_AT = 1
AND (to_date(:ar_report_dt, 'yyyy-mm-dd hh24:mi:ss') + INTERVAL '9' HOUR)
< (INSERT_DT - INTERVAL :ar_min MINUTE)
-- selectPassivLastModem [마지막 수신 모뎀 조회 , message_ty = 12]
SELECT * FROM (
SELECT
MODEM_ID AS last_modem
, FQNC AS last_fqnc
, LA AS last_la
, LO AS last_lo
, CASE
WHEN substr(FQNC, 0, 2) = '04' THEN 'MD'||substr(MODEM_ID, 3, 1)||'01'
WHEN substr(FQNC, 0, 2) = '06' THEN 'MD'||substr(MODEM_ID, 3, 1)||'02'
WHEN substr(FQNC, 0, 2) = '08' THEN 'MD'||substr(MODEM_ID, 3, 1)||'03'
WHEN substr(FQNC, 0, 2) = '16' THEN 'MD'||substr(MODEM_ID, 3, 1)||'05'
END AS snd_modem
FROM
TB_PASSIVLC_RSPNS
WHERE
SLOT_NO = 306
AND
REPORT_DT = to_date('2022-05-04 00:40:00', 'yyyy-mm-dd hh24:mi:ss')
ORDER BY
REPORT_DT DESC
) WHERE rownum = 1
-- selectLastModem [마지막 수신 모뎀 조회 , message_ty <> 12]
SELECT * FROM (
SELECT
MODEM AS last_modem
, FQNC AS last_fqnc
, LA AS last_la
, LO AS last_lo
, CASE
WHEN substr(FQNC, 0, 2) = '04' THEN 'MD'||substr(MODEM, 3, 1)||'01'
WHEN substr(FQNC, 0, 2) = '06' THEN 'MD'||substr(MODEM, 3, 1)||'02'
WHEN substr(FQNC, 0, 2) = '08' THEN 'MD'||substr(MODEM, 3, 1)||'03'
WHEN substr(FQNC, 0, 2) = '16' THEN 'MD'||substr(MODEM, 3, 1)||'05'
END AS snd_modem
FROM
TB_LC_FSHOPRRPT_202205 -- [TB_LC_FSHOPRRPT_20YYMM]
WHERE
SLOT_NO = 306
AND
REPORT_DT = to_date('2022-05-04 00:40:00', 'yyyy-mm-dd hh24:mi:ss')
ORDER BY
REPORT_DT DESC
) WHERE rownum = 1
-- selectSendPassivlc(getSendPassivlc) [수동위치보고요청 리스트]
SELECT * FROM(
SELECT
MSSAGE_ID
, MMSI
, SLOT_NO
, MODEM_LIST
, COMM_TY
, BRDCST
, PROCESS
, PROCESS_DT
, INSERT_DT
FROM
TB_PASSIVLC_REQUST
WHERE
PROCESS = 0
ORDER BY
MSSAGE_ID ASC
) WHERE ROWNUM = 1
select FUNC_GET_REQ_MODEMS('MD139', '06246500') as modemArray from dual
```
---
## TEST
~~1. 서로다른 주파수 3회 전송 [OK]
- 최근주파수기준 송신모뎀 우선순위 설정 확인 [OK]
- 주파수별 전송후 설정한 시간 만큼 sleep확인 [OK]
* SlotNO : 306
* 보고시각(KST) : 2022-05-11 00:40:01
오류 : PassivlcController listResult 잃어버림 [OK]
~~2. 자동수신 없는 선박 출항 시간 체크하는지 확인 [OK]
* SlotNO : 153, 10060016501106
* 출항시각 : 20220511 0944
오류 : insertPassivLC : SLOT_NO = 153 tmpVO is null [OK]
~~3. 미수신 선박 판단기준 시간 옵션처리 [OK]
- MainController -> checkLastLcThread [OK]
- CheckLastLcController -> Requst_at 셋팅, 기요청자료 확인 부분 [OK]
~~4. 전송도중 위치수신 받은경우
- packetMap 삭제되는지 확인
- send에서 전송안하고 스킵하는지 확인
오류:
~~5. 요청자료 생성 이후 입항한경우 [OK]
6. TB_PASSIVELC_REQUEST 모뎀 컬럼 update 확인
7. 전체 Cycle 60초 확인