SUPPORT-8842: test(1)

This commit is contained in:
Artyom Hackimullin 2025-01-14 14:47:46 +03:00
parent 55f87746ad
commit 317f681ada
6 changed files with 34 additions and 18 deletions

View file

@ -10,7 +10,7 @@ import ervu.model.okopf.OkopfModel;
* @author Artyom Hackimullin * @author Artyom Hackimullin
*/ */
public interface OkopfDao { public interface OkopfDao {
void save(List<OkopfModel> recordModels); void saveOrUpdate(List<OkopfModel> recordModels);
String fetchTitleByLeg(String leg); String fetchTitleByLeg(String leg);
} }

View file

@ -1,8 +1,11 @@
package ervu.dao.okopf; package ervu.dao.okopf;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import ervu.model.okopf.OkopfModel; import ervu.model.okopf.OkopfModel;
import ervu_lkrp_ul.ervu_lkrp_ul.db_beans.public_.tables.records.OkopfRecordsRecord;
import org.jooq.DSLContext; import org.jooq.DSLContext;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
@ -20,18 +23,12 @@ public class OkopfDaoImpl implements OkopfDao {
private DSLContext dsl; private DSLContext dsl;
@Override @Override
public void save(List<OkopfModel> recordModels) { public void saveOrUpdate(List<OkopfModel> okopfModels) {
var queries = recordModels.stream().map(record -> deleteNotActualOkopfRecords(okopfModels);
dsl.insertInto(OKOPF_RECORDS, OKOPF_RECORDS.OKOPF_RECORDS_ID, OKOPF_RECORDS.NAME, OKOPF_RECORDS.VERSION) dsl.batchUpdate(okopfModels.stream()
.values(record.getCode(), record.getName(), record.getVersion()) .map(this::mapOkopfModelToRecord)
.onConflict(OKOPF_RECORDS.OKOPF_RECORDS_ID) .toList())
.doUpdate() .execute();
.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();
} }
@Override @Override
@ -41,4 +38,23 @@ public class OkopfDaoImpl implements OkopfDao {
.where(OKOPF_RECORDS.OKOPF_RECORDS_ID.eq(leg)) .where(OKOPF_RECORDS.OKOPF_RECORDS_ID.eq(leg))
.fetchOne(OKOPF_RECORDS.NAME); .fetchOne(OKOPF_RECORDS.NAME);
} }
private void deleteNotActualOkopfRecords(List<OkopfModel> recordModels) {
Set<String> 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;
}
} }

View file

@ -13,7 +13,6 @@ import ervu.model.okopf.OkopfAttributeValueModel;
import ervu.model.okopf.OkopfDataModel; import ervu.model.okopf.OkopfDataModel;
import ervu.model.okopf.OkopfModel; import ervu.model.okopf.OkopfModel;
import ervu.model.okopf.OkopfOrgModel; import ervu.model.okopf.OkopfOrgModel;
import ru.micord.ervu.exception.JsonParsingException;
import net.javacrumbs.shedlock.core.SchedulerLock; import net.javacrumbs.shedlock.core.SchedulerLock;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -23,6 +22,7 @@ import org.springframework.context.annotation.DependsOn;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; 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.scheduling.config.ScheduledTaskRegistrar.CRON_DISABLED;
import static org.springframework.util.StringUtils.hasText; import static org.springframework.util.StringUtils.hasText;
@ -69,7 +69,7 @@ public class EsnsiOkopfSchedulerServiceImpl implements EsnsiOkopfSchedulerServic
OkopfOrgModel orgModel = mapper.readValue(data, OkopfOrgModel.class); OkopfOrgModel orgModel = mapper.readValue(data, OkopfOrgModel.class);
int currentVersion = mapper.readTree(data).findValue("version").asInt(); int currentVersion = mapper.readTree(data).findValue("version").asInt();
List<OkopfModel> okopfRecords = mapToOkopfRecords(orgModel.getData(), currentVersion); List<OkopfModel> okopfRecords = mapToOkopfRecords(orgModel.getData(), currentVersion);
okopfDao.save(okopfRecords); okopfDao.saveOrUpdate(okopfRecords);
} }
} }
catch (JsonProcessingException e) { catch (JsonProcessingException e) {

View file

@ -49,7 +49,7 @@ ERVU_KAFKA_PASSWORD=Blfi9d2OFG
ERVU_KAFKA_EXCERPT_REPLY_TOPIC=ervu.lkrp.excerpt.response ERVU_KAFKA_EXCERPT_REPLY_TOPIC=ervu.lkrp.excerpt.response
ERVU_KAFKA_EXCERPT_REQUEST_TOPIC=ervu.lkrp.excerpt.request 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_CRON_LOAD=0 0 */1 * * *
ESNSI_OKOPF_RETRY_MAX_ATTEMPTS_LOAD=3 ESNSI_OKOPF_RETRY_MAX_ATTEMPTS_LOAD=3
ESNSI_OKOPF_RETRY_DELAY_LOAD=1000 ESNSI_OKOPF_RETRY_DELAY_LOAD=1000

View file

@ -45,7 +45,7 @@ ERVU_KAFKA_USERNAME=user1
ERVU_KAFKA_PASSWORD=Blfi9d2OFG ERVU_KAFKA_PASSWORD=Blfi9d2OFG
ERVU_KAFKA_EXCERPT_REPLY_TOPIC=ervu.lkrp.excerpt.response ERVU_KAFKA_EXCERPT_REPLY_TOPIC=ervu.lkrp.excerpt.response
ERVU_KAFKA_EXCERPT_REQUEST_TOPIC=ervu.lkrp.excerpt.request 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_CRON_LOAD=0 0 */1 * * *
ESNSI_OKOPF_RETRY_MAX_ATTEMPTS_LOAD=3 ESNSI_OKOPF_RETRY_MAX_ATTEMPTS_LOAD=3
ESNSI_OKOPF_RETRY_DELAY_LOAD=1000 ESNSI_OKOPF_RETRY_DELAY_LOAD=1000

View file

@ -84,7 +84,7 @@
<property name="ervu.kafka.username" value="user1"/> <property name="ervu.kafka.username" value="user1"/>
<property name="ervu.kafka.password" value="Blfi9d2OFG"/> <property name="ervu.kafka.password" value="Blfi9d2OFG"/>
<property name="esnsi.okopf.cron.load" value="0 0 */1 * * *"/> <property name="esnsi.okopf.cron.load" value="0 0 */1 * * *"/>
<property name="esnsi.okopf.url" value="https://esnsi.gosuslugi.ru/rest/ext/v1/classifiers/11465/file?extension=JSON&amp;encoding=UTF_8"/> <property name="esnsi.okopf.url" value="https://esnsi.gosuslugi.ru/rest/ext/v1/classifiers/16271/file?extension=JSON&amp;encoding=UTF_8"/>
<property name="esnsi.okop.retry.delay.load" value="1000"/> <property name="esnsi.okop.retry.delay.load" value="1000"/>
<property name="esnsi.okopf.retry.max.attempts.load" value="3"/> <property name="esnsi.okopf.retry.max.attempts.load" value="3"/>
<property name="ervu.kafka.journal.request.topic" value="ervu.organization.journal.request"/> <property name="ervu.kafka.journal.request.topic" value="ervu.organization.journal.request"/>