SUPPORT-8471: new changes
This commit is contained in:
parent
e04b8c0c5f
commit
5fa5d5a3d6
11 changed files with 92 additions and 175 deletions
|
|
@ -24,7 +24,7 @@ public class EsnsiOkopfClient {
|
|||
|
||||
private static final Logger logger = LoggerFactory.getLogger(EsnsiOkopfClient.class);
|
||||
|
||||
@Value("${ervu.esnsi.okopf.file.url:#{null}}")
|
||||
@Value("${ervu.esnsi.okopf.file.url:https://esnsi.gosuslugi.ru/rest/ext/v1/classifiers/11465/file?extension=JSON&encoding=UTF_8}")
|
||||
private String uri;
|
||||
|
||||
@Retryable(value = {TimeoutException.class}, backoff =
|
||||
|
|
|
|||
|
|
@ -8,8 +8,6 @@ import org.jooq.DSLContext;
|
|||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import static ervu_lkrp_ul.ervu_lkrp_ul.db_beans.public_.Tables.RECORD_ATTRIBUTES;
|
||||
import static ervu_lkrp_ul.ervu_lkrp_ul.db_beans.public_.tables.ClassifierAttributes.CLASSIFIER_ATTRIBUTES;
|
||||
|
||||
/**
|
||||
* @author Artyom Hackimullin
|
||||
|
|
@ -23,21 +21,21 @@ public class OkopfAttributeDaoImpl implements OkopfAttributeDao {
|
|||
public void save(OkopfAttributeModel[] okopfAttributeModels) {
|
||||
var queries = Arrays.stream(okopfAttributeModels).map(attribute -> {
|
||||
var uid = UUID.fromString(attribute.getUid());
|
||||
return dsl.insertInto(CLASSIFIER_ATTRIBUTES)
|
||||
.set(CLASSIFIER_ATTRIBUTES.CLASSIFIER_ATTRIBUTE_ID, uid)
|
||||
.set(CLASSIFIER_ATTRIBUTES.ATTRIBUTE_NAME, attribute.getName())
|
||||
.onConflict(CLASSIFIER_ATTRIBUTES.CLASSIFIER_ATTRIBUTE_ID)
|
||||
return dsl.insertInto(OKOPF_ATTRIBUTES)
|
||||
.set(OKOPF_ATTRIBUTES.OKOPF_ATTRIBUTE_ID, uid)
|
||||
.set(OKOPF_ATTRIBUTES.ATTRIBUTE_NAME, attribute.getName())
|
||||
.onConflict(OKOPF_ATTRIBUTES.OKOPF_ATTRIBUTE_ID)
|
||||
.doUpdate()
|
||||
.set(CLASSIFIER_ATTRIBUTES.ATTRIBUTE_NAME, attribute.getName());
|
||||
.set(OKOPF_ATTRIBUTES.ATTRIBUTE_NAME, attribute.getName());
|
||||
}).toList();
|
||||
dsl.batch(queries).execute();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteIfNotExistRecords() {
|
||||
dsl.deleteFrom(CLASSIFIER_ATTRIBUTES).whereNotExists(dsl.selectOne()
|
||||
.from(RECORD_ATTRIBUTES)
|
||||
.where(RECORD_ATTRIBUTES.ATTRIBUTE_ID.eq(CLASSIFIER_ATTRIBUTES.CLASSIFIER_ATTRIBUTE_ID)))
|
||||
dsl.deleteFrom(OKOPF_ATTRIBUTES).whereNotExists(dsl.selectOne()
|
||||
.from(OKOPF_ATTRIBUTES)
|
||||
.where(OKOPF_RECORDS.ATTRIBUTE_ID.eq(OKOPF_ATTRIBUTES.OKOPF_ATTRIBUTE_ID)))
|
||||
.execute();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -8,8 +8,6 @@ import org.jooq.DSLContext;
|
|||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import static ervu_lkrp_ul.ervu_lkrp_ul.db_beans.public_.tables.ClassifierAttributes.CLASSIFIER_ATTRIBUTES;
|
||||
import static ervu_lkrp_ul.ervu_lkrp_ul.db_beans.public_.tables.RecordAttributes.RECORD_ATTRIBUTES;
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -30,19 +28,19 @@ public class OkopfRecordDaoImpl implements OkopfRecordDao {
|
|||
var attributeUid = UUID.fromString(attribute.getAttributeUid());
|
||||
var value = attribute.getValue();
|
||||
|
||||
return dsl.insertInto(RECORD_ATTRIBUTES,
|
||||
RECORD_ATTRIBUTES.RECORD_ID,
|
||||
RECORD_ATTRIBUTES.ATTRIBUTE_ID,
|
||||
RECORD_ATTRIBUTES.ATTRIBUTE_VALUE,
|
||||
RECORD_ATTRIBUTES.VERSION
|
||||
return dsl.insertInto(OKOPF_RECORDS,
|
||||
OKOPF_RECORDS.RECORD_ID,
|
||||
OKOPF_RECORDS.ATTRIBUTE_ID,
|
||||
OKOPF_RECORDS.VALUE,
|
||||
OKOPF_RECORDS.VERSION
|
||||
)
|
||||
.values(recordUid, attributeUid, value, version)
|
||||
.onConflict(RECORD_ATTRIBUTES.RECORD_ID, RECORD_ATTRIBUTES.ATTRIBUTE_ID)
|
||||
.onConflict(OKOPF_RECORDS.RECORD_ID, OKOPF_RECORDS.ATTRIBUTE_ID)
|
||||
.doUpdate()
|
||||
.set(RECORD_ATTRIBUTES.ATTRIBUTE_VALUE, value)
|
||||
.set(RECORD_ATTRIBUTES.VERSION, version)
|
||||
.where(RECORD_ATTRIBUTES.RECORD_ID.eq(recordUid)
|
||||
.and(RECORD_ATTRIBUTES.ATTRIBUTE_ID.eq(attributeUid)));
|
||||
.set(OKOPF_RECORDS.VALUE, value)
|
||||
.set(OKOPF_RECORDS.VERSION, version)
|
||||
.where(OKOPF_RECORDS.RECORD_ID.eq(recordUid)
|
||||
.and(OKOPF_RECORDS.ATTRIBUTE_ID.eq(attributeUid)));
|
||||
}))
|
||||
.toList();
|
||||
|
||||
|
|
@ -51,24 +49,24 @@ public class OkopfRecordDaoImpl implements OkopfRecordDao {
|
|||
|
||||
@Override
|
||||
public String fetchVersion() {
|
||||
return dsl.select(RECORD_ATTRIBUTES.VERSION)
|
||||
.from(RECORD_ATTRIBUTES)
|
||||
return dsl.select(OKOPF_RECORDS.VERSION)
|
||||
.from(OKOPF_RECORDS)
|
||||
.limit(1)
|
||||
.fetchOptional(RECORD_ATTRIBUTES.VERSION)
|
||||
.fetchOptional(OKOPF_RECORDS.VERSION)
|
||||
.orElse("0");
|
||||
}
|
||||
|
||||
@Override
|
||||
public String fetchTitleByLeg(String leg) {
|
||||
return dsl.select(RECORD_ATTRIBUTES.ATTRIBUTE_VALUE)
|
||||
.from(RECORD_ATTRIBUTES)
|
||||
.join(CLASSIFIER_ATTRIBUTES)
|
||||
.on(RECORD_ATTRIBUTES.ATTRIBUTE_ID.eq(CLASSIFIER_ATTRIBUTES.CLASSIFIER_ATTRIBUTE_ID))
|
||||
.where(CLASSIFIER_ATTRIBUTES.ATTRIBUTE_NAME.eq("title")
|
||||
.and(RECORD_ATTRIBUTES.RECORD_ID.eq(
|
||||
dsl.select(RECORD_ATTRIBUTES.RECORD_ID)
|
||||
.from(RECORD_ATTRIBUTES)
|
||||
.where(RECORD_ATTRIBUTES.ATTRIBUTE_VALUE.equal(leg))
|
||||
return dsl.select(OKOPF_RECORDS.VALUE)
|
||||
.from(OKOPF_RECORDS)
|
||||
.join(OKOPF_ATTRIBUTES)
|
||||
.on(OKOPF_RECORDS.ATTRIBUTE_ID.eq(OKOPF_ATTRIBUTES.OKOPF_ATTRIBUTE_ID))
|
||||
.where(OKOPF_ATTRIBUTES.ATTRIBUTE_NAME.eq("title")
|
||||
.and(OKOPF_RECORDS.RECORD_ID.eq(
|
||||
dsl.select(OKOPF_RECORDS.RECORD_ID)
|
||||
.from(OKOPF_RECORDS)
|
||||
.where(OKOPF_RECORDS.VALUE.equal(leg))
|
||||
.fetchOneInto(UUID.class)))
|
||||
)
|
||||
.fetchOneInto(String.class);
|
||||
|
|
@ -76,8 +74,8 @@ public class OkopfRecordDaoImpl implements OkopfRecordDao {
|
|||
|
||||
@Override
|
||||
public void deleteAllByVersion(String version) {
|
||||
dsl.deleteFrom(RECORD_ATTRIBUTES)
|
||||
.where(RECORD_ATTRIBUTES.VERSION.eq(version))
|
||||
dsl.deleteFrom(OKOPF_RECORDS)
|
||||
.where(OKOPF_RECORDS.VERSION.eq(version))
|
||||
.execute();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,41 +0,0 @@
|
|||
package ervu.service.classifier.model;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
|
||||
/**
|
||||
* @author Artyom Hackimullin
|
||||
*/
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class ClassifierFormModel implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private ClassifierOrgModel classifier;
|
||||
|
||||
private ClassifierNodeModel data;
|
||||
|
||||
public ClassifierOrgModel getClassifier() {
|
||||
return classifier;
|
||||
}
|
||||
|
||||
public void setClassifier(ClassifierOrgModel classifier) {
|
||||
this.classifier = classifier;
|
||||
}
|
||||
|
||||
public ClassifierNodeModel getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
public void setData(ClassifierNodeModel data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "ClassifierFormModel{" +
|
||||
"classifier=" + classifier +
|
||||
", data=" + data +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
|
@ -2,13 +2,9 @@ package ervu.service.classifier.model;
|
|||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonRootName;
|
||||
|
||||
/**
|
||||
* @author Artyom Hackimullin
|
||||
*/
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class OkopfAttributeModel implements Serializable {
|
||||
private final static long serialVersionUID = 1L;
|
||||
|
||||
|
|
|
|||
|
|
@ -2,13 +2,11 @@ package ervu.service.classifier.model;
|
|||
|
||||
import java.io.Serializable;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
/**
|
||||
* @author Artyom Hackimullin
|
||||
*/
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class OkopfFormDataModel implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
|
|
|
|||
|
|
@ -5,12 +5,10 @@ import java.time.LocalDateTime;
|
|||
import java.util.Arrays;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
||||
|
||||
/**
|
||||
* @author Artyom Hackimullin
|
||||
*/
|
||||
@JsonIgnoreProperties(ignoreUnknown = true)
|
||||
public class OkopfOrgModel implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,30 +0,0 @@
|
|||
package ervu.service.classifier.model;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* @author Artyom Hackimullin
|
||||
*/
|
||||
public class RecordModel implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String uid;
|
||||
|
||||
private RecordAttributeModel[] attributeValues;
|
||||
|
||||
public RecordAttributeModel[] getAttributeValues() {
|
||||
return attributeValues;
|
||||
}
|
||||
|
||||
public void setAttributeValues(RecordAttributeModel[] attributeValues) {
|
||||
this.attributeValues = attributeValues;
|
||||
}
|
||||
|
||||
public String getUid() {
|
||||
return uid;
|
||||
}
|
||||
|
||||
public void setUid(String uid) {
|
||||
this.uid = uid;
|
||||
}
|
||||
}
|
||||
|
|
@ -3,8 +3,8 @@ package ervu.service.scheduer;
|
|||
/**
|
||||
* @author Artyom Hackimullin
|
||||
*/
|
||||
public interface SchedulerService {
|
||||
public interface EsnsiOkopfSchedulerService {
|
||||
|
||||
void loadEveryPeriod();
|
||||
void load();
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
package ervu.service.scheduer;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import ervu.client.classified.EsnsiOkopfClient;
|
||||
import ervu.dao.classifier.OkopfAttributeDao;
|
||||
import ervu.dao.classifier.OkopfRecordDao;
|
||||
import ervu.service.classifier.model.OkopfAttributeModel;
|
||||
import ervu.service.classifier.model.OkopfFormDataModel;
|
||||
import ervu.service.classifier.model.OkopfGroupRecordModel;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* @author Artyom Hackimullin
|
||||
*/
|
||||
@Service
|
||||
public class EsnsiOkopfSchedulerServiceImpl implements EsnsiOkopfSchedulerService {
|
||||
@Autowired
|
||||
private EsnsiOkopfClient esnsiOkopfClient;
|
||||
@Autowired
|
||||
private OkopfAttributeDao okopfAttributeDao;
|
||||
@Autowired
|
||||
private OkopfRecordDao okopfRecordDao;
|
||||
@Autowired
|
||||
private ObjectMapper mapper;
|
||||
|
||||
@Scheduled(cron = "${ervu.esnsi.okopf.cron:0 0 */1 * * *}")
|
||||
@Transactional
|
||||
public void load() {
|
||||
try {
|
||||
String json = Objects.requireNonNull(esnsiOkopfClient.getJsonOkopFormData());
|
||||
OkopfFormDataModel classifierFormModel = mapper.readValue(json, OkopfFormDataModel.class);
|
||||
OkopfAttributeModel[] okopfAttributeModels = classifierFormModel.getOkopfOrg()
|
||||
.getAttributes();
|
||||
OkopfGroupRecordModel[] recordModels = classifierFormModel.getOkopfNode().getOkopfGroups();
|
||||
String currentVersion = classifierFormModel.getOkopfOrg().getVersion();
|
||||
var newVersion = Integer.parseInt(classifierFormModel.getOkopfOrg().getVersion());
|
||||
var versionFromDb = Integer.parseInt(okopfRecordDao.fetchVersion());
|
||||
|
||||
okopfAttributeDao.save(okopfAttributeModels);
|
||||
okopfRecordDao.save(recordModels, currentVersion);
|
||||
|
||||
if (versionFromDb != 0 && versionFromDb < newVersion) {
|
||||
okopfRecordDao.deleteAllByVersion(String.valueOf(versionFromDb));
|
||||
okopfAttributeDao.deleteIfNotExistRecords();
|
||||
}
|
||||
}
|
||||
catch (JsonProcessingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,57 +0,0 @@
|
|||
package ervu.service.scheduer;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import ervu.client.classified.ClassifierOrgClient;
|
||||
import ervu.dao.classifier.ClassifierAttributeDao;
|
||||
import ervu.dao.classifier.RecordAttributesDao;
|
||||
import ervu.service.classifier.model.ClassifierAttributeModel;
|
||||
import ervu.service.classifier.model.ClassifierFormModel;
|
||||
import ervu.service.classifier.model.RecordModel;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* @author Artyom Hackimullin
|
||||
*/
|
||||
@Service
|
||||
public class SchedulerServiceImpl implements SchedulerService {
|
||||
@Autowired
|
||||
private ClassifierOrgClient classifierOrgClient;
|
||||
@Autowired
|
||||
private ClassifierAttributeDao classifierAttributeDao;
|
||||
@Autowired
|
||||
private RecordAttributesDao recordAttributesDao;
|
||||
@Autowired
|
||||
private ObjectMapper mapper;
|
||||
|
||||
@Scheduled(cron = "${ervu.cron.load.time:0 0 */1 * * *}")
|
||||
@Transactional
|
||||
public void loadEveryPeriod() {
|
||||
try {
|
||||
String json = Objects.requireNonNull(classifierOrgClient.getJsonClassifierOrgResponse());
|
||||
ClassifierFormModel classifierFormModel = mapper.readValue(json, ClassifierFormModel.class);
|
||||
ClassifierAttributeModel[] classifierAttributeModels = classifierFormModel.getClassifier()
|
||||
.getAttributes();
|
||||
RecordModel[] recordModels = classifierFormModel.getData().getRecords();
|
||||
String currentVersion = classifierFormModel.getClassifier().getVersion();
|
||||
var newVersion = Integer.parseInt(classifierFormModel.getClassifier().getVersion());
|
||||
var versionFromDb = Integer.parseInt(recordAttributesDao.fetchVersion());
|
||||
|
||||
classifierAttributeDao.save(classifierAttributeModels);
|
||||
recordAttributesDao.save(recordModels, currentVersion);
|
||||
|
||||
if (versionFromDb != 0 && versionFromDb < newVersion) {
|
||||
recordAttributesDao.deleteAllByVersion(String.valueOf(versionFromDb));
|
||||
classifierAttributeDao.deleteIfNotExistRecords();
|
||||
}
|
||||
}
|
||||
catch (JsonProcessingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue