Update process begin
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>2.2.2.RELEASE</version>
|
||||
<version>2.2.6.RELEASE</version>
|
||||
<relativePath/> <!-- lookup parent from repository -->
|
||||
</parent>
|
||||
<groupId>me.bearns</groupId>
|
||||
|
||||
@@ -60,5 +60,4 @@ class ApplicationConfig {
|
||||
return txManager;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -3,9 +3,10 @@ package me.bearns.fias.service;
|
||||
import me.bearns.fias.domain.FiasVersion;
|
||||
import me.bearns.fias.repository.FiasVersionRepository;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class FiasUpdater implements Updater {
|
||||
|
||||
@@ -18,11 +19,52 @@ public class FiasUpdater implements Updater {
|
||||
@Override
|
||||
public void update() {
|
||||
|
||||
long lastVersion = downloadService.getLastVersionId();
|
||||
|
||||
//Max value
|
||||
FiasVersion dbVersion = versions.findTopByOrderByVersionIdDesc();
|
||||
FiasVersion dbVersionObj = versions.findTopByOrderByVersionIdDesc();
|
||||
|
||||
if(dbVersionObj != null) {
|
||||
|
||||
final Long dbVersion = dbVersionObj.getVersionId();
|
||||
|
||||
final long lastOnlineVersion = downloadService.getLastVersionId();
|
||||
|
||||
if(lastOnlineVersion > dbVersion) {
|
||||
//need update
|
||||
|
||||
final List<FiasVersion> updates = downloadService.getVersionsAfter(dbVersion);
|
||||
|
||||
if(updates != null && !updates.isEmpty()) {
|
||||
processUpdates(updates, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("update() Ok");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reload(Long... regions) {
|
||||
|
||||
final List<FiasVersion> lastVersion = downloadService.getLastVersion();
|
||||
if(lastVersion != null) {
|
||||
processUpdates(lastVersion, true, regions);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//transaction from here
|
||||
private void processUpdates(List<FiasVersion> updates, boolean reloadFlag, Long ... regions) {
|
||||
|
||||
updates.sort((o1, o2) -> Math.toIntExact(o1.getVersionId() - o2.getVersionId()));
|
||||
|
||||
//pre-fetch files if update multiple version
|
||||
|
||||
for (FiasVersion update : updates) {
|
||||
|
||||
final String url = reloadFlag ? update.getFiasCompleteXmlUrl() : update.getFiasDeltaXmlUrl();
|
||||
|
||||
//run update here
|
||||
}
|
||||
|
||||
System.out.println("get Ok");
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,14 @@
|
||||
package me.bearns.fias.service;
|
||||
|
||||
import me.bearns.fias.domain.FiasVersion;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface OnlineVersion {
|
||||
|
||||
long getLastVersionId();
|
||||
|
||||
List<FiasVersion> getVersionsAfter(long version);
|
||||
|
||||
List<FiasVersion> getLastVersion();
|
||||
}
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package me.bearns.fias.service;
|
||||
|
||||
import me.bearns.fias.domain.FiasVersion;
|
||||
import org.springframework.stereotype.Component;
|
||||
import ru.nalog.fias.ArrayOfDownloadFileInfo;
|
||||
import ru.nalog.fias.DownloadFileInfo;
|
||||
import ru.nalog.fias.IDownloadService;
|
||||
import ru.nalog.fias.IDownloadService_Service;
|
||||
@@ -13,7 +15,10 @@ import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.StandardCopyOption;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static javax.xml.ws.BindingProvider.ENDPOINT_ADDRESS_PROPERTY;
|
||||
|
||||
@@ -52,13 +57,62 @@ public class SOAPClient implements OnlineVersion {
|
||||
@Override
|
||||
public long getLastVersionId() {
|
||||
|
||||
DownloadFileInfo fileInfo = downloadService.getLastDownloadFileInfo();
|
||||
|
||||
if(fileInfo != null) return fileInfo.getVersionId();
|
||||
FiasVersion last = getLast();
|
||||
if(last != null) return last.getVersionId();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FiasVersion> getVersionsAfter(long version) {
|
||||
|
||||
final ArrayOfDownloadFileInfo allDownloadFileInfo = downloadService.getAllDownloadFileInfo();
|
||||
|
||||
if(allDownloadFileInfo != null) {
|
||||
|
||||
final List<DownloadFileInfo> fileInfos = allDownloadFileInfo.getDownloadFileInfo();
|
||||
|
||||
if(fileInfos != null) {
|
||||
return fileInfos.stream()
|
||||
.filter(f -> f.getVersionId() > version)
|
||||
.map(f -> new FiasVersion(f.getVersionId(),f.getTextVersion(),f.getFiasCompleteXmlUrl(),f.getFiasDeltaXmlUrl()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FiasVersion> getLastVersion() {
|
||||
|
||||
final FiasVersion last = getLast();
|
||||
|
||||
if(last != null) {
|
||||
|
||||
final ArrayList<FiasVersion> list = new ArrayList<>(1);
|
||||
list.add(last);
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private FiasVersion getLast() {
|
||||
|
||||
DownloadFileInfo fileInfo = downloadService.getLastDownloadFileInfo();
|
||||
|
||||
if(fileInfo !=null) {
|
||||
|
||||
//TODO check null in getVersionId()
|
||||
|
||||
return new FiasVersion(fileInfo.getVersionId(), fileInfo.getTextVersion(), fileInfo.getFiasCompleteXmlUrl(), fileInfo.getFiasDeltaXmlUrl());
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private static void setRedirect(final Object bindingProvider) {
|
||||
try {
|
||||
if(bindingProvider instanceof BindingProvider) {
|
||||
|
||||
@@ -7,4 +7,10 @@ public interface Updater {
|
||||
* Run online update for fias database
|
||||
*/
|
||||
public void update();
|
||||
|
||||
/**
|
||||
* Load or reload database for selected regions
|
||||
* @param regions
|
||||
*/
|
||||
public void reload(Long ... regions);
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ public class VersionRepositoryTests {
|
||||
private FiasVersionRepository repository;
|
||||
|
||||
@Test
|
||||
public void testFindById() {
|
||||
public void testPersist() {
|
||||
FiasVersion fiasVersion = new FiasVersion(1L, "last", "c", "d");
|
||||
entityManager.persist(fiasVersion);
|
||||
|
||||
@@ -48,14 +48,15 @@ public class VersionRepositoryTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSve() {
|
||||
public void testSave() {
|
||||
FiasVersion fiasVersion = new FiasVersion(1L, "last", "c", "d");
|
||||
repository.save(fiasVersion);
|
||||
repository.flush();
|
||||
|
||||
Optional<FiasVersion> byId = repository.findById(fiasVersion.getVersionId());
|
||||
|
||||
FiasVersion version = byId.get();
|
||||
|
||||
assertThat(version).extracting(FiasVersion::getVersionId).isEqualTo(fiasVersion.getVersionId());
|
||||
assertThat(version).extracting(FiasVersion::getFiasDeltaXmlUrl).isEqualTo(fiasVersion.getFiasDeltaXmlUrl());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user