Update process begin

apache_commons_compress
Terekhin Alexandr 5 years ago
parent d75777afef
commit 898636c80a
  1. 2
      pom.xml
  2. 1
      src/main/java/me/bearns/fias/config/ApplicationConfig.java
  3. 52
      src/main/java/me/bearns/fias/service/FiasUpdater.java
  4. 8
      src/main/java/me/bearns/fias/service/OnlineVersion.java
  5. 58
      src/main/java/me/bearns/fias/service/SOAPClient.java
  6. 6
      src/main/java/me/bearns/fias/service/Updater.java
  7. 7
      src/test/java/me/bearns/fias/VersionRepositoryTests.java

@ -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,11 +57,60 @@ public class SOAPClient implements OnlineVersion {
@Override
public long getLastVersionId() {
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) return fileInfo.getVersionId();
if(fileInfo !=null) {
return 0;
//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) {

@ -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());
}
}

Loading…
Cancel
Save