From dfd898e6de2a68de78f048ce7f54e200078833c0 Mon Sep 17 00:00:00 2001 From: HYOJIN Date: Wed, 4 Mar 2026 13:45:02 +0900 Subject: [PATCH] =?UTF-8?q?feat(aistargetdbsync):=20core20=20=ED=85=8C?= =?UTF-8?q?=EC=9D=B4=EB=B8=94=20=EC=B5=9C=EC=8B=A0=20=EC=9C=84=EC=B9=98=20?= =?UTF-8?q?=EB=8F=99=EA=B8=B0=ED=99=94=20=EB=8C=80=EC=83=81=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ShipLastPositionSyncRepository.java | 1 + .../ShipLastPositionSyncRepositoryImpl.java | 61 +++++++++++++------ .../tasklet/ShipLastPositionSyncTasklet.java | 1 + 3 files changed, 44 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/snp/batch/jobs/aistargetdbsync/batch/repository/ShipLastPositionSyncRepository.java b/src/main/java/com/snp/batch/jobs/aistargetdbsync/batch/repository/ShipLastPositionSyncRepository.java index acc19f6..f94a549 100644 --- a/src/main/java/com/snp/batch/jobs/aistargetdbsync/batch/repository/ShipLastPositionSyncRepository.java +++ b/src/main/java/com/snp/batch/jobs/aistargetdbsync/batch/repository/ShipLastPositionSyncRepository.java @@ -12,4 +12,5 @@ import java.util.List; public interface ShipLastPositionSyncRepository { int updateLastPositions(List entities); + void updateLastPositionsTemp(List entities); } diff --git a/src/main/java/com/snp/batch/jobs/aistargetdbsync/batch/repository/ShipLastPositionSyncRepositoryImpl.java b/src/main/java/com/snp/batch/jobs/aistargetdbsync/batch/repository/ShipLastPositionSyncRepositoryImpl.java index 84e3e6c..dca9491 100644 --- a/src/main/java/com/snp/batch/jobs/aistargetdbsync/batch/repository/ShipLastPositionSyncRepositoryImpl.java +++ b/src/main/java/com/snp/batch/jobs/aistargetdbsync/batch/repository/ShipLastPositionSyncRepositoryImpl.java @@ -59,24 +59,27 @@ public class ShipLastPositionSyncRepositoryImpl implements ShipLastPositionSyncR ancrg_yn = ? WHERE imo_no = ? """.formatted(getTableName()); -// return """ -// UPDATE new_snp.core20 -// SET lastseen = ?::timestamptz, -// lastport = ?, -// position_latitude = ?, -// position_longitude = ?, -// destination = ?, -// eta = ?::timestamptz, -// heading = ?, -// cog = ?, -// speedservice = ?, -// navstat = ?, -// tonnes_cargo = ?, -// extra_info = ?, -// in_sts = ?, -// on_berth = ? -// WHERE lrno = ?; -// """; + } + + private String getCoreUpdateSql() { + return """ + UPDATE new_snp.core20 + SET lastseen = ?::timestamptz, + lastport = ?, + position_latitude = ?, + position_longitude = ?, + destination = ?, + eta = ?::timestamptz, + heading = ?, + cog = ?, + speedservice = ?, + navstat = ?, + tonnes_cargo = ?, + extra_info = ?, + in_sts = ?, + on_berth = ? + WHERE lrno = ?; + """; } @Override @@ -100,10 +103,30 @@ public class ShipLastPositionSyncRepositoryImpl implements ShipLastPositionSyncR } } - log.info("Ship Last Position 동기화 완료: 대상={} 건, 갱신={} 건", entities.size(), totalUpdated); + log.info("Ship Last Position 동기화 완료 ({}): 대상={} 건, 갱신={} 건", tableName, entities.size(), totalUpdated); return totalUpdated; } + @Override + @Transactional + public void updateLastPositionsTemp(List entities) { + + String sql = getCoreUpdateSql(); + int totalUpdated = 0; + + int[][] batchResults = jdbcTemplate.batchUpdate(sql, entities, BATCH_SIZE, + (ps, entity) -> setUpdateParameters(ps, entity)); + + for (int[] batchResult : batchResults) { + for (int result : batchResult) { + if (result > 0) { + totalUpdated += result; + } + } + } + log.info("Ship Last Position 동기화 완료 (Core20): 대상={} 건, 갱신={} 건", entities.size(), totalUpdated); + } + private void setUpdateParameters(PreparedStatement ps, AisTargetEntity entity) throws java.sql.SQLException { int idx = 1; diff --git a/src/main/java/com/snp/batch/jobs/aistargetdbsync/batch/tasklet/ShipLastPositionSyncTasklet.java b/src/main/java/com/snp/batch/jobs/aistargetdbsync/batch/tasklet/ShipLastPositionSyncTasklet.java index 1a044b8..3182da5 100644 --- a/src/main/java/com/snp/batch/jobs/aistargetdbsync/batch/tasklet/ShipLastPositionSyncTasklet.java +++ b/src/main/java/com/snp/batch/jobs/aistargetdbsync/batch/tasklet/ShipLastPositionSyncTasklet.java @@ -98,6 +98,7 @@ public class ShipLastPositionSyncTasklet implements Tasklet { // 4. DB UPDATE int updated = repository.updateLastPositions(latestPerImo); + repository.updateLastPositionsTemp(latestPerImo); // 임시 추가 long elapsed = System.currentTimeMillis() - startTime; -- 2.45.2