From 317f681adaed856fa7cbb5102448c458e59e35b2 Mon Sep 17 00:00:00 2001 From: Artyom Hackimullin Date: Tue, 14 Jan 2025 14:47:46 +0300 Subject: [PATCH] SUPPORT-8842: test(1) --- .../main/java/ervu/dao/okopf/OkopfDao.java | 2 +- .../java/ervu/dao/okopf/OkopfDaoImpl.java | 40 +++++++++++++------ .../EsnsiOkopfSchedulerServiceImpl.java | 4 +- config/local.env | 2 +- config/micord.env | 2 +- config/standalone/dev/standalone.xml | 2 +- 6 files changed, 34 insertions(+), 18 deletions(-) diff --git a/backend/src/main/java/ervu/dao/okopf/OkopfDao.java b/backend/src/main/java/ervu/dao/okopf/OkopfDao.java index b576f826..fafa7689 100644 --- a/backend/src/main/java/ervu/dao/okopf/OkopfDao.java +++ b/backend/src/main/java/ervu/dao/okopf/OkopfDao.java @@ -10,7 +10,7 @@ import ervu.model.okopf.OkopfModel; * @author Artyom Hackimullin */ public interface OkopfDao { - void save(List recordModels); + void saveOrUpdate(List recordModels); String fetchTitleByLeg(String leg); } diff --git a/backend/src/main/java/ervu/dao/okopf/OkopfDaoImpl.java b/backend/src/main/java/ervu/dao/okopf/OkopfDaoImpl.java index aa7fa197..5c732bdf 100644 --- a/backend/src/main/java/ervu/dao/okopf/OkopfDaoImpl.java +++ b/backend/src/main/java/ervu/dao/okopf/OkopfDaoImpl.java @@ -1,8 +1,11 @@ package ervu.dao.okopf; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; import ervu.model.okopf.OkopfModel; +import ervu_lkrp_ul.ervu_lkrp_ul.db_beans.public_.tables.records.OkopfRecordsRecord; import org.jooq.DSLContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; @@ -20,18 +23,12 @@ public class OkopfDaoImpl implements OkopfDao { private DSLContext dsl; @Override - public void save(List recordModels) { - var queries = recordModels.stream().map(record -> - dsl.insertInto(OKOPF_RECORDS, OKOPF_RECORDS.OKOPF_RECORDS_ID, OKOPF_RECORDS.NAME, OKOPF_RECORDS.VERSION) - .values(record.getCode(), record.getName(), record.getVersion()) - .onConflict(OKOPF_RECORDS.OKOPF_RECORDS_ID) - .doUpdate() - .set(OKOPF_RECORDS.NAME, record.getName()) - .set(OKOPF_RECORDS.VERSION, record.getVersion()) - .where(OKOPF_RECORDS.OKOPF_RECORDS_ID.eq(record.getCode())) - ).toList(); - - dsl.batch(queries).execute(); + public void saveOrUpdate(List okopfModels) { + deleteNotActualOkopfRecords(okopfModels); + dsl.batchUpdate(okopfModels.stream() + .map(this::mapOkopfModelToRecord) + .toList()) + .execute(); } @Override @@ -41,4 +38,23 @@ public class OkopfDaoImpl implements OkopfDao { .where(OKOPF_RECORDS.OKOPF_RECORDS_ID.eq(leg)) .fetchOne(OKOPF_RECORDS.NAME); } + + private void deleteNotActualOkopfRecords(List recordModels) { + Set ids = recordModels + .stream() + .map(OkopfModel::getCode) + .collect(Collectors.toSet()); + + dsl.deleteFrom(OKOPF_RECORDS) + .where(OKOPF_RECORDS.OKOPF_RECORDS_ID.notIn(ids)) + .execute(); + } + + private OkopfRecordsRecord mapOkopfModelToRecord(OkopfModel model) { + OkopfRecordsRecord record = dsl.newRecord(OKOPF_RECORDS); + record.setValue(OKOPF_RECORDS.OKOPF_RECORDS_ID, model.getCode()); + record.setValue(OKOPF_RECORDS.NAME, model.getName()); + record.setValue(OKOPF_RECORDS.VERSION, model.getVersion()); + return record; + } } diff --git a/backend/src/main/java/ervu/service/scheduler/EsnsiOkopfSchedulerServiceImpl.java b/backend/src/main/java/ervu/service/scheduler/EsnsiOkopfSchedulerServiceImpl.java index 0c69636e..b182f553 100644 --- a/backend/src/main/java/ervu/service/scheduler/EsnsiOkopfSchedulerServiceImpl.java +++ b/backend/src/main/java/ervu/service/scheduler/EsnsiOkopfSchedulerServiceImpl.java @@ -13,7 +13,6 @@ import ervu.model.okopf.OkopfAttributeValueModel; import ervu.model.okopf.OkopfDataModel; import ervu.model.okopf.OkopfModel; import ervu.model.okopf.OkopfOrgModel; -import ru.micord.ervu.exception.JsonParsingException; import net.javacrumbs.shedlock.core.SchedulerLock; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -23,6 +22,7 @@ import org.springframework.context.annotation.DependsOn; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import ru.micord.ervu.exception.JsonParsingException; import static org.springframework.scheduling.config.ScheduledTaskRegistrar.CRON_DISABLED; import static org.springframework.util.StringUtils.hasText; @@ -69,7 +69,7 @@ public class EsnsiOkopfSchedulerServiceImpl implements EsnsiOkopfSchedulerServic OkopfOrgModel orgModel = mapper.readValue(data, OkopfOrgModel.class); int currentVersion = mapper.readTree(data).findValue("version").asInt(); List okopfRecords = mapToOkopfRecords(orgModel.getData(), currentVersion); - okopfDao.save(okopfRecords); + okopfDao.saveOrUpdate(okopfRecords); } } catch (JsonProcessingException e) { diff --git a/config/local.env b/config/local.env index 323006f6..14538f14 100644 --- a/config/local.env +++ b/config/local.env @@ -49,7 +49,7 @@ ERVU_KAFKA_PASSWORD=Blfi9d2OFG ERVU_KAFKA_EXCERPT_REPLY_TOPIC=ervu.lkrp.excerpt.response ERVU_KAFKA_EXCERPT_REQUEST_TOPIC=ervu.lkrp.excerpt.request -ESNSI_OKOPF_URL=https://esnsi.gosuslugi.ru/rest/ext/v1/classifiers/11465/file?extension=JSON&encoding=UTF_8 +ESNSI_OKOPF_URL=https://esnsi.gosuslugi.ru/rest/ext/v1/classifiers/16271/file?extension=JSON&encoding=UTF_8 ESNSI_OKOPF_CRON_LOAD=0 0 */1 * * * ESNSI_OKOPF_RETRY_MAX_ATTEMPTS_LOAD=3 ESNSI_OKOPF_RETRY_DELAY_LOAD=1000 diff --git a/config/micord.env b/config/micord.env index 84b1f637..53692220 100644 --- a/config/micord.env +++ b/config/micord.env @@ -45,7 +45,7 @@ ERVU_KAFKA_USERNAME=user1 ERVU_KAFKA_PASSWORD=Blfi9d2OFG ERVU_KAFKA_EXCERPT_REPLY_TOPIC=ervu.lkrp.excerpt.response ERVU_KAFKA_EXCERPT_REQUEST_TOPIC=ervu.lkrp.excerpt.request -ESNSI_OKOPF_URL=https://esnsi.gosuslugi.ru/rest/ext/v1/classifiers/11465/file?extension=JSON&encoding=UTF_8 +ESNSI_OKOPF_URL=https://esnsi.gosuslugi.ru/rest/ext/v1/classifiers/16271/file?extension=JSON&encoding=UTF_8 ESNSI_OKOPF_CRON_LOAD=0 0 */1 * * * ESNSI_OKOPF_RETRY_MAX_ATTEMPTS_LOAD=3 ESNSI_OKOPF_RETRY_DELAY_LOAD=1000 diff --git a/config/standalone/dev/standalone.xml b/config/standalone/dev/standalone.xml index 4f9f6c92..75ebaa8d 100644 --- a/config/standalone/dev/standalone.xml +++ b/config/standalone/dev/standalone.xml @@ -84,7 +84,7 @@ - +