Update process begin
This commit is contained in:
@@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-parent</artifactId>
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
<version>2.2.2.RELEASE</version>
|
<version>2.2.6.RELEASE</version>
|
||||||
<relativePath/> <!-- lookup parent from repository -->
|
<relativePath/> <!-- lookup parent from repository -->
|
||||||
</parent>
|
</parent>
|
||||||
<groupId>me.bearns</groupId>
|
<groupId>me.bearns</groupId>
|
||||||
|
|||||||
@@ -60,5 +60,4 @@ class ApplicationConfig {
|
|||||||
return txManager;
|
return txManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -3,9 +3,10 @@ package me.bearns.fias.service;
|
|||||||
import me.bearns.fias.domain.FiasVersion;
|
import me.bearns.fias.domain.FiasVersion;
|
||||||
import me.bearns.fias.repository.FiasVersionRepository;
|
import me.bearns.fias.repository.FiasVersionRepository;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class FiasUpdater implements Updater {
|
public class FiasUpdater implements Updater {
|
||||||
|
|
||||||
@@ -18,11 +19,52 @@ public class FiasUpdater implements Updater {
|
|||||||
@Override
|
@Override
|
||||||
public void update() {
|
public void update() {
|
||||||
|
|
||||||
long lastVersion = downloadService.getLastVersionId();
|
|
||||||
|
|
||||||
//Max value
|
//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;
|
package me.bearns.fias.service;
|
||||||
|
|
||||||
|
import me.bearns.fias.domain.FiasVersion;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public interface OnlineVersion {
|
public interface OnlineVersion {
|
||||||
|
|
||||||
long getLastVersionId();
|
long getLastVersionId();
|
||||||
|
|
||||||
|
List<FiasVersion> getVersionsAfter(long version);
|
||||||
|
|
||||||
|
List<FiasVersion> getLastVersion();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package me.bearns.fias.service;
|
package me.bearns.fias.service;
|
||||||
|
|
||||||
|
import me.bearns.fias.domain.FiasVersion;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import ru.nalog.fias.ArrayOfDownloadFileInfo;
|
||||||
import ru.nalog.fias.DownloadFileInfo;
|
import ru.nalog.fias.DownloadFileInfo;
|
||||||
import ru.nalog.fias.IDownloadService;
|
import ru.nalog.fias.IDownloadService;
|
||||||
import ru.nalog.fias.IDownloadService_Service;
|
import ru.nalog.fias.IDownloadService_Service;
|
||||||
@@ -13,7 +15,10 @@ import java.io.InputStream;
|
|||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.StandardCopyOption;
|
import java.nio.file.StandardCopyOption;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static javax.xml.ws.BindingProvider.ENDPOINT_ADDRESS_PROPERTY;
|
import static javax.xml.ws.BindingProvider.ENDPOINT_ADDRESS_PROPERTY;
|
||||||
|
|
||||||
@@ -52,13 +57,62 @@ public class SOAPClient implements OnlineVersion {
|
|||||||
@Override
|
@Override
|
||||||
public long getLastVersionId() {
|
public long getLastVersionId() {
|
||||||
|
|
||||||
DownloadFileInfo fileInfo = downloadService.getLastDownloadFileInfo();
|
FiasVersion last = getLast();
|
||||||
|
if(last != null) return last.getVersionId();
|
||||||
if(fileInfo != null) return fileInfo.getVersionId();
|
|
||||||
|
|
||||||
return 0;
|
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) {
|
private static void setRedirect(final Object bindingProvider) {
|
||||||
try {
|
try {
|
||||||
if(bindingProvider instanceof BindingProvider) {
|
if(bindingProvider instanceof BindingProvider) {
|
||||||
|
|||||||
@@ -7,4 +7,10 @@ public interface Updater {
|
|||||||
* Run online update for fias database
|
* Run online update for fias database
|
||||||
*/
|
*/
|
||||||
public void update();
|
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;
|
private FiasVersionRepository repository;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testFindById() {
|
public void testPersist() {
|
||||||
FiasVersion fiasVersion = new FiasVersion(1L, "last", "c", "d");
|
FiasVersion fiasVersion = new FiasVersion(1L, "last", "c", "d");
|
||||||
entityManager.persist(fiasVersion);
|
entityManager.persist(fiasVersion);
|
||||||
|
|
||||||
@@ -48,14 +48,15 @@ public class VersionRepositoryTests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSve() {
|
public void testSave() {
|
||||||
FiasVersion fiasVersion = new FiasVersion(1L, "last", "c", "d");
|
FiasVersion fiasVersion = new FiasVersion(1L, "last", "c", "d");
|
||||||
repository.save(fiasVersion);
|
repository.save(fiasVersion);
|
||||||
|
repository.flush();
|
||||||
|
|
||||||
Optional<FiasVersion> byId = repository.findById(fiasVersion.getVersionId());
|
Optional<FiasVersion> byId = repository.findById(fiasVersion.getVersionId());
|
||||||
|
|
||||||
FiasVersion version = byId.get();
|
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