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

8.0 KiB

#디지털중단파

현재)

  • 현재 선박별로 최종 수신된 주파수를 선택하여(TB_LC_FSHOPRRPT_20xx) 하나의 주파수만으로 강화,울진,고흥 전송.
  • 모뎀별 20sec 간격전송 *2

문제점)

  • 3개 채널중 한 채널로만 전송하기 떄문에 응답 수신율 저하원인중 하나.
  • 하나의 요청당 시간이 많이소요됨 (총2분)

개선)

  • 강화,울진,고흥의 각 채널을 달리하여 3개채널에 한번에 전송

  • 각 20sec 간격으로 총 3회 전송. !Pasted image 20220427164814.png 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

메시지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. 최종 수신 주파수 + 수신 모뎀 위치로 우선순위 지정
    • TB_MODEM.AREA 컬럼 최신화
    • msgGW에서 모뎀ID, 주파수를 같이 넘길수 있는지 확인
    • + 모뎀리스트 설정 부분 확인 CheckLastLcController.java [:131 ~ 165] 165 line : String modemList = packetController.modemList(modem); [in: 1440]
    • 위치보고요청 가변/방송 확인 brdcst -> 0 : 가변
    • 요청그룹별 sleep방안 검토
    • tb_last_lc modem1,2,3 update부분 확인.
  3. 요청중 이전요청에서 성공 수신되면 나머지 중단.
    • 성공수신받으면 삭제할 Que 확인 (송신:sendQue | 수신:packetQ)
    • Send Method에서 전송취소 기준이될 오브젝트 확인. packetMap.get(key).get(6) // 성공카운트 0이상인것. int sucCnt = Integer.parseInt(resultMap.get(6));
  4. 이전요청이 처리되지 않았으면 요청자료 생성 안함.

90분 180분 자동 요청으로 변경

  • 수정해야할 로직 위치 확인 MainController.java : 268, CheckLastLcController.java : 105, 109

eyeSV_MSG 수정

  • Db5.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생성


-- 특정선박 입/출항 시각 조정
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%' 

-- 일자 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


-- 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]

  1. TB_PASSIVELC_REQUEST 모뎀 컬럼 update 확인
  2. 전체 Cycle 60초 확인