Merge remote-tracking branch 'origin/feature/SUPPORT-8471_fix_load_okopf' into feature/SUPPORT-8471_fix_load_okopf
# Conflicts: # backend/src/main/java/ervu/client/classified/EsnsiOkopfClient.java # backend/src/main/java/ervu/dao/classifier/OkopfRecordDao.java # backend/src/main/java/ervu/service/classifier/model/OkopfRecordModel.java # backend/src/main/java/ervu/service/scheduer/EsnsiOkopfSchedulerServiceImpl.java # backend/src/main/resources/config/v_1.0/2024-29-08--01-create-table-record-attributes.xml
This commit is contained in:
commit
8a270cc563
7 changed files with 53 additions and 31 deletions
|
|
@ -24,12 +24,12 @@ public class EsnsiOkopfClient {
|
|||
|
||||
private static final Logger logger = LoggerFactory.getLogger(EsnsiOkopfClient.class);
|
||||
|
||||
@Value("${esnsi.okopf.url:#{null}}")
|
||||
@Value("${esnsi.okopf.url:#{null}")
|
||||
private String uri;
|
||||
|
||||
@Retryable(value = {TimeoutException.class}, backoff =
|
||||
@Backoff(delay = 2000))
|
||||
public String getData() {
|
||||
public String getJsonOkopFormData() {
|
||||
HttpClient client = HttpClient.newHttpClient();
|
||||
HttpRequest request = HttpRequest.newBuilder()
|
||||
.uri(URI.create(uri))
|
||||
|
|
|
|||
|
|
@ -1,17 +1,16 @@
|
|||
package ervu.dao.classifier;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import ervu.service.classifier.model.OkopfRecordModel;
|
||||
|
||||
|
||||
/**
|
||||
* @author Artyom Hackimullin
|
||||
*/
|
||||
public interface OkopfRecordDao {
|
||||
void save(OkopfRecordModel[] recordModels, String version);
|
||||
void save(List<OkopfRecordModel> recordModels, int version);
|
||||
|
||||
String fetchTitleByLeg(String leg);
|
||||
|
||||
void deleteAllByVersion(String version);
|
||||
|
||||
String fetchVersion();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,8 +2,6 @@ package ervu.service.classifier.model;
|
|||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonRootName;
|
||||
|
||||
/**
|
||||
* @author Artyom Hackimullin
|
||||
*/
|
||||
|
|
@ -34,4 +32,12 @@ public class OkopfRecordModel implements Serializable {
|
|||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "OkopfRecordModel{" +
|
||||
"code='" + code + '\'' +
|
||||
", name='" + name + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,6 @@
|
|||
package ervu.service.scheduer;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.StreamSupport;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
|
|
@ -30,14 +26,14 @@ public class EsnsiOkopfSchedulerServiceImpl implements EsnsiOkopfSchedulerServic
|
|||
@Autowired
|
||||
private ObjectMapper mapper;
|
||||
|
||||
@Scheduled(cron = "${ervu.esnsi.okopf.cron:0 0 */1 * * *}")
|
||||
@Scheduled(cron = "${esnsi.okopf.cron:0 0 */1 * * *}")
|
||||
@Transactional
|
||||
public void load() {
|
||||
String data = esnsiOkopfClient.getJsonOkopFormData();
|
||||
try {
|
||||
String okopfData = Objects.requireNonNull(esnsiOkopfClient.getData());
|
||||
List<OkopfRecordModel> okopfRecordModels = mapToOkopfRecords(okopfData);
|
||||
String version = mapper.readValue("version", String.class);
|
||||
|
||||
List<OkopfRecordModel> okopfRecords = mapToOkopfRecords(data);
|
||||
int currentVersion = mapper.readTree(data).findValue("version").asInt();
|
||||
okopfRecordDao.save(okopfRecords, currentVersion);
|
||||
}
|
||||
catch (JsonProcessingException e) {
|
||||
throw new RuntimeException(e);
|
||||
|
|
@ -45,14 +41,28 @@ public class EsnsiOkopfSchedulerServiceImpl implements EsnsiOkopfSchedulerServic
|
|||
}
|
||||
|
||||
private List<OkopfRecordModel> mapToOkopfRecords(String data) {
|
||||
JsonNode nodeRecords = mapper.valueToTree(data).at("/data/records");
|
||||
return StreamSupport.stream(nodeRecords.spliterator(), false)
|
||||
.flatMap(it -> StreamSupport.stream(it.at("/attributeValues").spliterator(), false))
|
||||
.toList()
|
||||
.stream()
|
||||
.filter(JsonNode::isArray)
|
||||
.limit(2)
|
||||
.map(it -> new OkopfRecordModel(it.get("attributeUid").asText(), it.get("value").asText()))
|
||||
try {
|
||||
JsonNode nodes = mapper.readTree(data).at("/data/records");
|
||||
return StreamSupport.stream(nodes.spliterator(), false).map(it -> {
|
||||
JsonNode attributeValues = it.get("attributeValues");
|
||||
String code = null;
|
||||
String name = null;
|
||||
for (JsonNode record : attributeValues) {
|
||||
String value = record.get("value").asText();
|
||||
if (value.matches("\\d+")) {
|
||||
code = value;
|
||||
}
|
||||
else {
|
||||
name = value;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return new OkopfRecordModel(code, name);
|
||||
})
|
||||
.toList();
|
||||
}
|
||||
catch (JsonProcessingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,9 +9,9 @@
|
|||
<sql>
|
||||
CREATE TABLE okopf_records
|
||||
(
|
||||
okopf_code_id varchar primary key,
|
||||
okopf_records_id varchar primary key,
|
||||
name varchar unique,
|
||||
version varchar
|
||||
version int not null
|
||||
);
|
||||
</sql>
|
||||
</changeSet>
|
||||
|
|
|
|||
|
|
@ -676,6 +676,13 @@ JBPM использует 3 корневых категории логирова
|
|||
<level name="TRACE"/>
|
||||
</logger>
|
||||
```
|
||||
# Взаимодействие с ЕСНСИ в части получения справочника ОКОПФ
|
||||
|
||||
Свойства задаются в файле config/standalone/dev/standalone.xml
|
||||
|
||||
## Параметры
|
||||
- `esnsi.okopf.cron.load` - указываем расписание для загрузки справочника окопф и сохранения данных по справкам в БД
|
||||
- `esnsi.okopf.url` - url который обращается к еснси для получения справочника окопф и скачивает данные спровочников организации в виде заархивированного json файл.
|
||||
|
||||
# Взаимодействие с ЕСНСИ в части получения справочника ОКОПФ
|
||||
|
||||
|
|
|
|||
|
|
@ -66,8 +66,8 @@
|
|||
<property name="ervu.fileupload.max_file_size" value="5242880"/>
|
||||
<property name="ervu.fileupload.max_request_size" value="6291456"/>
|
||||
<property name="ervu.fileupload.file_size_threshold" value="0"/>
|
||||
<property name="ervu.cron.load.time" value="0 0 */1 * * *"/>
|
||||
<property name="ervu.esnsi.classifier.url.load" value="https://esnsi.gosuslugi.ru/rest/ext/v1/classifiers/11465/file?extension=JSON&encoding=UTF_8"/>
|
||||
<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&encoding=UTF_8"/>
|
||||
</system-properties>
|
||||
<management>
|
||||
<audit-log>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue