Удаление пакета с мониторинга
This commit is contained in:
parent
e18e1f3724
commit
d0f9459ce8
14 changed files with 292 additions and 61 deletions
|
|
@ -0,0 +1,27 @@
|
||||||
|
package ru.nbch.credit_tracker.component.comparator;
|
||||||
|
|
||||||
|
import java.util.Comparator;
|
||||||
|
import java.util.function.ToIntFunction;
|
||||||
|
import ru.nbch.credit_tracker.entities.app.UserPackage;
|
||||||
|
import ru.nbch.credit_tracker.enums.Status;
|
||||||
|
|
||||||
|
public class DeletePackageStatusComparator {
|
||||||
|
|
||||||
|
public static Comparator<UserPackage> INSTANCE = Comparator
|
||||||
|
.comparingInt((ToIntFunction<UserPackage>) userPackage -> statusToInt(userPackage.getStatus()))
|
||||||
|
.thenComparingLong(UserPackage::getId);
|
||||||
|
|
||||||
|
public static int statusToInt(String str) {
|
||||||
|
try {
|
||||||
|
Status status = Status.valueOf(str);
|
||||||
|
return switch (status) {
|
||||||
|
case ON_MONITORING -> 1;
|
||||||
|
case DELETED -> 0;
|
||||||
|
default -> -1;
|
||||||
|
};
|
||||||
|
} catch (Throwable e) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
package ru.nbch.credit_tracker.config.xml;
|
package ru.nbch.credit_tracker.config.xml;
|
||||||
|
|
||||||
import jakarta.xml.bind.JAXBException;
|
import jakarta.xml.bind.JAXBException;
|
||||||
|
import java.nio.charset.Charset;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Supplier;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
|
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
|
||||||
|
|
@ -12,12 +16,15 @@ import ru.nbch.credit_tracker.entities.user_response.errors.MonitoringError;
|
||||||
import ru.nbch.credit_tracker.entities.user_response.success.MonitoringSetupResponse;
|
import ru.nbch.credit_tracker.entities.user_response.success.MonitoringSetupResponse;
|
||||||
import ru.nbch.credit_tracker.service.xml.jaxb.IXmlProcessor;
|
import ru.nbch.credit_tracker.service.xml.jaxb.IXmlProcessor;
|
||||||
import ru.nbch.credit_tracker.service.xml.jaxb.XmlProcessorImplAnyClasses;
|
import ru.nbch.credit_tracker.service.xml.jaxb.XmlProcessorImplAnyClasses;
|
||||||
import ru.nbch.credit_tracker.service.xml.stax.*;
|
import ru.nbch.credit_tracker.service.xml.stax.MonitoringReportErrorsStaxtReader;
|
||||||
|
import ru.nbch.credit_tracker.service.xml.stax.MonitoringRequestStaxReader;
|
||||||
import java.nio.charset.Charset;
|
import ru.nbch.credit_tracker.service.xml.stax.MonitoringSignalResponseStaxXmlReader;
|
||||||
import java.util.ArrayList;
|
import ru.nbch.credit_tracker.service.xml.stax.OnlineDownloadReportPersonsStaxReader;
|
||||||
import java.util.List;
|
import ru.nbch.credit_tracker.service.xml.stax.SgnlReportDeletedStaxReader;
|
||||||
import java.util.function.Supplier;
|
import ru.nbch.credit_tracker.service.xml.stax.SgnlReportStatusStaxReader;
|
||||||
|
import ru.nbch.credit_tracker.service.xml.stax.StaxReader;
|
||||||
|
import ru.nbch.credit_tracker.service.xml.stax.StaxXmlProcessor;
|
||||||
|
import ru.nbch.credit_tracker.service.xml.stax.XmlProcessorStaxImpl;
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
public class XmlConfig {
|
public class XmlConfig {
|
||||||
|
|
@ -39,6 +46,7 @@ public class XmlConfig {
|
||||||
public StaxXmlProcessor staxXmlProcessor() {
|
public StaxXmlProcessor staxXmlProcessor() {
|
||||||
List<Supplier<StaxReader<?>>> staxReader = new ArrayList<>();
|
List<Supplier<StaxReader<?>>> staxReader = new ArrayList<>();
|
||||||
staxReader.add(SgnlReportStatusStaxReader::new);
|
staxReader.add(SgnlReportStatusStaxReader::new);
|
||||||
|
staxReader.add(SgnlReportDeletedStaxReader::new);
|
||||||
staxReader.add(MonitoringRequestStaxReader::new);
|
staxReader.add(MonitoringRequestStaxReader::new);
|
||||||
staxReader.add(OnlineDownloadReportPersonsStaxReader::new);
|
staxReader.add(OnlineDownloadReportPersonsStaxReader::new);
|
||||||
staxReader.add(MonitoringSignalResponseStaxXmlReader::new);
|
staxReader.add(MonitoringSignalResponseStaxXmlReader::new);
|
||||||
|
|
|
||||||
|
|
@ -64,7 +64,12 @@ public class SignalControllerV3 {
|
||||||
|
|
||||||
@PostMapping(value = "/delete", params = {"username", "packageName"}, produces = MediaType.APPLICATION_XML_VALUE)
|
@PostMapping(value = "/delete", params = {"username", "packageName"}, produces = MediaType.APPLICATION_XML_VALUE)
|
||||||
public ResponseEntity<MonitoringPackageDeleteResponse> deletePackage(@RequestParam("username") String username, @RequestParam("packageName") String packageName) {
|
public ResponseEntity<MonitoringPackageDeleteResponse> deletePackage(@RequestParam("username") String username, @RequestParam("packageName") String packageName) {
|
||||||
return signalFacadeV3.deletePackage(username, packageName);
|
try {
|
||||||
|
return signalFacadeV3.deletePackage(username, packageName);
|
||||||
|
} catch (Exception e) {
|
||||||
|
throwOrWrap(SignalError.ERROR_017, XmlErrorFormat.MonitoringPackageDeleteError, e);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping(value = "/report_list", params = {"username", "packageName"}, produces = MediaType.APPLICATION_XML_VALUE)
|
@GetMapping(value = "/report_list", params = {"username", "packageName"}, produces = MediaType.APPLICATION_XML_VALUE)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
package ru.nbch.credit_tracker.entities.external_response.list_package;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
import lombok.Setter;
|
||||||
|
|
||||||
|
@Setter
|
||||||
|
@Getter
|
||||||
|
public class SgnlReportDeleted {
|
||||||
|
private Integer deleteFlag;
|
||||||
|
|
||||||
|
public Integer getDeleteFlag() {
|
||||||
|
return deleteFlag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDeleteFlag(Integer deleteFlag) {
|
||||||
|
this.deleteFlag = deleteFlag;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -21,7 +21,12 @@ public enum SignalError implements IEnumKeyCode {
|
||||||
ERROR_019("019", "У данного пользователя не найдено ни одного пакета"),
|
ERROR_019("019", "У данного пользователя не найдено ни одного пакета"),
|
||||||
ERROR_020("020", "Пакет {} был отклонён при установке на мониторинг. Отчеты не формируются."),
|
ERROR_020("020", "Пакет {} был отклонён при установке на мониторинг. Отчеты не формируются."),
|
||||||
ERROR_021("021", "Обработка пакета {} завершилась с ошибкой, отчёты недоступны. Обратитесь в техническую поддержку."),
|
ERROR_021("021", "Обработка пакета {} завершилась с ошибкой, отчёты недоступны. Обратитесь в техническую поддержку."),
|
||||||
ERROR_022("022", "Пакет {} снят с мониторинга, отчёты больше недоступны.");
|
ERROR_022("022", "Пакет {} снят с мониторинга, отчёты больше недоступны."),
|
||||||
|
ERROR_023("023", "Пакет {} находится в обработке, удаление невозможно. Дождитесь его установки на мониторинг и повторите попытку."),
|
||||||
|
ERROR_024("024", "Пакет {} отклонен или при его установке произошла ошибка. Удаление невозможно."),
|
||||||
|
ERROR_025("025", "Пакет {} уже был удален ранее, удаление невозможно."),
|
||||||
|
ERROR_026("026", "Пакет {} обновляется. Удаление невозможно. Дождитесь завершения обновления и повторите попытку."),
|
||||||
|
;
|
||||||
|
|
||||||
|
|
||||||
private final String code;
|
private final String code;
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@ public enum Status {
|
||||||
ON_MONITORING, // пакет стоит на мониторинге в оф. сервисе
|
ON_MONITORING, // пакет стоит на мониторинге в оф. сервисе
|
||||||
REJECTED, // отклонен на стороне НБКИ
|
REJECTED, // отклонен на стороне НБКИ
|
||||||
PROCESSING, // идет поиск телефона и расчет флагов по пакету
|
PROCESSING, // идет поиск телефона и расчет флагов по пакету
|
||||||
|
PROCESSING_REPEATED,
|
||||||
|
ACCEPTED,
|
||||||
DELETED, // пакет удален
|
DELETED, // пакет удален
|
||||||
ERROR; // произошла ошибка при постановке пакета на мониторинг в оф. сервис
|
ERROR; // произошла ошибка при постановке пакета на мониторинг в оф. сервис
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
import ru.nbch.credit_tracker.component.MonitoringRequestValidator;
|
import ru.nbch.credit_tracker.component.MonitoringRequestValidator;
|
||||||
|
import ru.nbch.credit_tracker.component.comparator.DeletePackageStatusComparator;
|
||||||
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
|
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
|
||||||
import ru.nbch.credit_tracker.entities.app.UserPackage;
|
import ru.nbch.credit_tracker.entities.app.UserPackage;
|
||||||
import ru.nbch.credit_tracker.entities.user_request.active_packages.MonitoringActivePackagesRequest;
|
import ru.nbch.credit_tracker.entities.user_request.active_packages.MonitoringActivePackagesRequest;
|
||||||
|
|
@ -36,6 +37,7 @@ import ru.nbch.credit_tracker.service.scoring.AuthorizationService;
|
||||||
import ru.nbch.credit_tracker.service.signal.SignalRestService;
|
import ru.nbch.credit_tracker.service.signal.SignalRestService;
|
||||||
import ru.nbch.credit_tracker.service.task.PipelinePackageManager;
|
import ru.nbch.credit_tracker.service.task.PipelinePackageManager;
|
||||||
import ru.nbch.credit_tracker.utils.CTUtil;
|
import ru.nbch.credit_tracker.utils.CTUtil;
|
||||||
|
import ru.nbch.credit_tracker.utils.EnumUtil;
|
||||||
import ru.nbch.credit_tracker.utils.LogUtil;
|
import ru.nbch.credit_tracker.utils.LogUtil;
|
||||||
import ru.nbch.credit_tracker.utils.ZipUtils;
|
import ru.nbch.credit_tracker.utils.ZipUtils;
|
||||||
import static ru.nbch.credit_tracker.utils.error.ExceptionUtils.clientExcp;
|
import static ru.nbch.credit_tracker.utils.error.ExceptionUtils.clientExcp;
|
||||||
|
|
@ -182,28 +184,43 @@ public class SignalFacadeV3 {
|
||||||
}
|
}
|
||||||
|
|
||||||
public ResponseEntity<MonitoringPackageDeleteResponse> deletePackage(String username, String packageName) {
|
public ResponseEntity<MonitoringPackageDeleteResponse> deletePackage(String username, String packageName) {
|
||||||
try {
|
UserPackage packageToDelete = signalService.findByMemberCodeAndPackageName(username, packageName)
|
||||||
if (!signalService.isPackageExists(username, packageName)) {
|
.stream()
|
||||||
throw clientExcp(SignalError.ERROR_016, XmlErrorFormat.MonitoringPackageDeleteError, packageName);
|
.max(DeletePackageStatusComparator.INSTANCE)
|
||||||
}
|
.orElseThrow(()
|
||||||
|
-> clientExcp(SignalError.ERROR_016, XmlErrorFormat.MonitoringPackageDeleteError, packageName));
|
||||||
|
|
||||||
LocalDateTime deactivatedAt = LocalDateTime.now();
|
Status status = EnumUtil.getEnum(Status.class, packageToDelete.getStatus());
|
||||||
signalService.deletePackage(username, packageName, deactivatedAt);
|
if (!Status.ON_MONITORING.equals(status)) {
|
||||||
|
throw clientExcp(deleteStatusError(status), XmlErrorFormat.MonitoringPackageDeleteError, packageName);
|
||||||
MonitoringPackageDeleteResponse response = new MonitoringPackageDeleteResponse();
|
|
||||||
response.setStatus("Deleted");
|
|
||||||
response.setPackageName(packageName);
|
|
||||||
response.setDeactivatedAt(deactivatedAt.toString());
|
|
||||||
|
|
||||||
signalRestService.deletePackage(username, packageName);
|
|
||||||
log.info("Package {} deleted", packageName);
|
|
||||||
return ResponseEntity.ok(response);
|
|
||||||
} catch (Exception e) {
|
|
||||||
if (e instanceof SignalClientException) {
|
|
||||||
throw (SignalClientException) e;
|
|
||||||
}
|
|
||||||
throw serverExcp(SignalError.ERROR_017, XmlErrorFormat.MonitoringPackageDeleteError, e);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean successfullyDeleted = signalRestService.deletePackage(username, packageName);
|
||||||
|
if (!successfullyDeleted) {
|
||||||
|
throw clientExcp(SignalError.ERROR_017, XmlErrorFormat.MonitoringPackageDeleteError, packageName);
|
||||||
|
}
|
||||||
|
|
||||||
|
LocalDateTime deactivatedAt = LocalDateTime.now();
|
||||||
|
signalService.deletePackageById(packageToDelete.getId(), deactivatedAt);
|
||||||
|
MonitoringPackageDeleteResponse response = new MonitoringPackageDeleteResponse();
|
||||||
|
response.setStatus("Deleted");
|
||||||
|
response.setPackageName(packageName);
|
||||||
|
response.setDeactivatedAt(deactivatedAt.toString());
|
||||||
|
|
||||||
|
log.info("Package {} deleted", packageName);
|
||||||
|
return ResponseEntity.ok(response);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private SignalError deleteStatusError(Status status) {
|
||||||
|
if (status == null) return SignalError.ERROR_017;
|
||||||
|
return switch (status) {
|
||||||
|
case PROCESSING, ACCEPTED -> SignalError.ERROR_016;
|
||||||
|
case REJECTED, ERROR -> SignalError.ERROR_024;
|
||||||
|
case DELETED -> SignalError.ERROR_025;
|
||||||
|
case PROCESSING_REPEATED -> SignalError.ERROR_026;
|
||||||
|
default -> throw new IllegalStateException("Unexpected value: " + status);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public ResponseEntity<MonitoringReportListResponse> getReportList(String username, String packageName) {
|
public ResponseEntity<MonitoringReportListResponse> getReportList(String username, String packageName) {
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,10 @@
|
||||||
package ru.nbch.credit_tracker.mapper.signal;
|
package ru.nbch.credit_tracker.mapper.signal;
|
||||||
|
|
||||||
import org.apache.ibatis.annotations.Mapper;
|
|
||||||
import org.apache.ibatis.annotations.Param;
|
|
||||||
import ru.nbch.credit_tracker.entities.app.UserPackage;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import ru.nbch.credit_tracker.entities.app.UserPackage;
|
||||||
|
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface UserPackageMapper {
|
public interface UserPackageMapper {
|
||||||
|
|
@ -18,6 +17,8 @@ public interface UserPackageMapper {
|
||||||
|
|
||||||
void deletePackage(@Param("userId") String userId, @Param("packageName") String packageName, @Param("status") String newStatus, @Param("previousStatus") String previousStatus, @Param("deactivatedAt") LocalDateTime deactivatedAt);
|
void deletePackage(@Param("userId") String userId, @Param("packageName") String packageName, @Param("status") String newStatus, @Param("previousStatus") String previousStatus, @Param("deactivatedAt") LocalDateTime deactivatedAt);
|
||||||
|
|
||||||
|
void deletePackageById(@Param("id") Long id, @Param("status") String newStatus, @Param("deactivatedAt") LocalDateTime deactivatedAt);
|
||||||
|
|
||||||
Long insertPackage(@Param("userPackage") UserPackage userPackage);
|
Long insertPackage(@Param("userPackage") UserPackage userPackage);
|
||||||
|
|
||||||
void updatePackageStatus(@Param("packageId") Long packageId, @Param("status") String status);
|
void updatePackageStatus(@Param("packageId") Long packageId, @Param("status") String status);
|
||||||
|
|
@ -33,4 +34,6 @@ public interface UserPackageMapper {
|
||||||
List<UserPackage> findAllPackagesByStatus(@Param("status") String status);
|
List<UserPackage> findAllPackagesByStatus(@Param("status") String status);
|
||||||
|
|
||||||
List<UserPackage> findAllPackagesByUserId(@Param("userId") String userId);
|
List<UserPackage> findAllPackagesByUserId(@Param("userId") String userId);
|
||||||
|
List<UserPackage> findByMemberCodeAndPackageName(@Param("memberCode") String memberCode,
|
||||||
|
@Param("packageName") String packageName);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,10 @@ public class SignalServiceV2 {
|
||||||
return userPackageService.isPackageExists(username, packageName, Status.ON_MONITORING);
|
return userPackageService.isPackageExists(username, packageName, Status.ON_MONITORING);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<UserPackage> findByMemberCodeAndPackageName(String memberCode, String packageName) {
|
||||||
|
return userPackageService.findByMemberCodeAndPackageName(memberCode, packageName);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isPackagesByStatusExist(String username, String packageName, Status status) {
|
public boolean isPackagesByStatusExist(String username, String packageName, Status status) {
|
||||||
return userPackageService.hasActivePackages(username, packageName, status);
|
return userPackageService.hasActivePackages(username, packageName, status);
|
||||||
}
|
}
|
||||||
|
|
@ -67,4 +71,8 @@ public class SignalServiceV2 {
|
||||||
public void deletePackage(String username, String packageName, LocalDateTime deactivatedAt) {
|
public void deletePackage(String username, String packageName, LocalDateTime deactivatedAt) {
|
||||||
userPackageService.deletePackage(username, packageName, Status.DELETED, Status.ON_MONITORING, deactivatedAt);
|
userPackageService.deletePackage(username, packageName, Status.DELETED, Status.ON_MONITORING, deactivatedAt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void deletePackageById(Long id, LocalDateTime deactivatedAt) {
|
||||||
|
userPackageService.deletePackageById(id, deactivatedAt);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,6 @@
|
||||||
package ru.nbch.credit_tracker.service.signal;
|
package ru.nbch.credit_tracker.service.signal;
|
||||||
|
|
||||||
import jakarta.xml.bind.DatatypeConverter;
|
import jakarta.xml.bind.DatatypeConverter;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
|
||||||
import org.springframework.core.io.FileUrlResource;
|
|
||||||
import org.springframework.core.io.Resource;
|
|
||||||
import org.springframework.http.*;
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import org.springframework.util.LinkedMultiValueMap;
|
|
||||||
import org.springframework.util.MultiValueMap;
|
|
||||||
import org.springframework.web.client.RestTemplate;
|
|
||||||
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
|
|
||||||
import ru.nbch.credit_tracker.entities.external_response.errors.SgnlReport;
|
|
||||||
import ru.nbch.credit_tracker.entities.external_response.monitoring_report_file.SgnlReportMonitorigSetupError;
|
|
||||||
import ru.nbch.credit_tracker.entities.external_response.online_report.SgnlOnlineReport;
|
|
||||||
import ru.nbch.credit_tracker.service.SignalService;
|
|
||||||
import ru.nbch.credit_tracker.service.xml.jaxb.IXmlProcessor;
|
|
||||||
import ru.nbch.credit_tracker.service.xml.stax.StaxXmlProcessor;
|
|
||||||
import ru.nbch.credit_tracker.utils.CTUtil;
|
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
@ -28,9 +10,34 @@ import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.security.MessageDigest;
|
import java.security.MessageDigest;
|
||||||
import java.util.Base64;
|
import java.util.Base64;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.zip.GZIPInputStream;
|
import java.util.zip.GZIPInputStream;
|
||||||
import java.util.zip.GZIPOutputStream;
|
import java.util.zip.GZIPOutputStream;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
|
import org.springframework.core.io.FileUrlResource;
|
||||||
|
import org.springframework.core.io.Resource;
|
||||||
|
import org.springframework.http.HttpEntity;
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
|
import org.springframework.http.HttpMethod;
|
||||||
|
import org.springframework.http.HttpStatusCode;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.util.LinkedMultiValueMap;
|
||||||
|
import org.springframework.util.MultiValueMap;
|
||||||
|
import org.springframework.web.client.RestTemplate;
|
||||||
|
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
|
||||||
|
import ru.nbch.credit_tracker.entities.external_response.errors.SgnlReport;
|
||||||
|
import ru.nbch.credit_tracker.entities.external_response.list_package.SgnlReportDeleted;
|
||||||
|
import ru.nbch.credit_tracker.entities.external_response.monitoring_report_file.SgnlReportMonitorigSetupError;
|
||||||
|
import ru.nbch.credit_tracker.entities.external_response.online_report.SgnlOnlineReport;
|
||||||
|
import ru.nbch.credit_tracker.service.SignalService;
|
||||||
|
import ru.nbch.credit_tracker.service.xml.jaxb.IXmlProcessor;
|
||||||
|
import ru.nbch.credit_tracker.service.xml.stax.StaxXmlProcessor;
|
||||||
|
import ru.nbch.credit_tracker.utils.CTUtil;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Service
|
@Service
|
||||||
|
|
@ -170,8 +177,9 @@ public class SignalRestService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Удаляет пакет с мониторинга
|
* Удаляет пакет с мониторинга
|
||||||
|
* @return Успешность удаления пакета
|
||||||
*/
|
*/
|
||||||
public void deletePackage(String username, String packageName) {
|
public boolean deletePackage(String username, String packageName) {
|
||||||
String packCode = username.substring(0, 6) + "_" + packageName;
|
String packCode = username.substring(0, 6) + "_" + packageName;
|
||||||
String url = DELETE_URI + "?packCode=" + packCode;
|
String url = DELETE_URI + "?packCode=" + packCode;
|
||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = new HttpHeaders();
|
||||||
|
|
@ -179,18 +187,72 @@ public class SignalRestService {
|
||||||
|
|
||||||
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(headers);
|
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(headers);
|
||||||
|
|
||||||
ResponseEntity<String> response = restTemplate.exchange(
|
ResponseEntity<String> responseEntity = restTemplate.exchange(
|
||||||
url,
|
url,
|
||||||
HttpMethod.GET,
|
HttpMethod.GET,
|
||||||
requestEntity,
|
requestEntity,
|
||||||
String.class
|
String.class
|
||||||
);
|
);
|
||||||
String answer = response.getBody();
|
HttpStatusCode statusCode = responseEntity.getStatusCode();
|
||||||
|
SgnlReport response = staxProcessor.read(responseEntity.getBody(), SgnlReport.class);
|
||||||
|
|
||||||
SgnlReport error = staxProcessor.read(answer, SgnlReport.class);
|
if (statusCode.value() == 200 && !isError(response)) { //все ок
|
||||||
if (error.getError().getDescription() != null) {
|
return true;
|
||||||
log.error("Ошибка при удалении пакета из сервиса НБКИ. packCode={}. Описание: {}", packCode, error.getError().getDescription());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.error("Ошибка при удалении пакета из сервиса НБКИ. packCode={}. status={}. Описание: {}",
|
||||||
|
packCode,
|
||||||
|
statusCode.value(),
|
||||||
|
errorDescription(response));
|
||||||
|
|
||||||
|
if (statusCode.value() != 200) { //была фатальная ошибка
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return isRemotePackageStatedDeleted(username, packageName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isRemotePackageStatedDeleted(String username, String packageName) {
|
||||||
|
HttpHeaders headers = new HttpHeaders();
|
||||||
|
headers.setBasicAuth(authToken);
|
||||||
|
HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(headers);
|
||||||
|
String packCode = username.substring(0, 6) + "_" + packageName;
|
||||||
|
ResponseEntity<String> responseEntity = restTemplate.exchange(
|
||||||
|
GET_REPORT_URI + "?packCode=" + packCode,
|
||||||
|
HttpMethod.GET,
|
||||||
|
requestEntity,
|
||||||
|
String.class
|
||||||
|
);
|
||||||
|
HttpStatusCode statusCode = responseEntity.getStatusCode();
|
||||||
|
SgnlReportDeleted response = staxProcessor.read(responseEntity.getBody(), SgnlReportDeleted.class);
|
||||||
|
Integer deletedFlag = Optional.ofNullable(response)
|
||||||
|
.map(SgnlReportDeleted::getDeleteFlag)
|
||||||
|
.orElse(null);
|
||||||
|
|
||||||
|
if ((deletedFlag == null) || statusCode.value() != 200) {
|
||||||
|
log.error("couldn't perform report for {}: HTTP code: {}; delete flag {}",
|
||||||
|
packCode, statusCode.value(), deletedFlag);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (deletedFlag != 0) {
|
||||||
|
log.info("{} was not deleted", packCode);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("{} was deleted", packCode);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static boolean isError(SgnlReport response) {
|
||||||
|
return response.getError() != null
|
||||||
|
&& (!StringUtils.isEmpty(response.getError().getDescription()) || !StringUtils.isEmpty(response.getError().getName()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String errorDescription(SgnlReport response) {
|
||||||
|
if (response.getError() == null)
|
||||||
|
return "unknown error";
|
||||||
|
return "%s: %s".formatted(response.getError().getName(), response.getError().getDescription());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,12 @@
|
||||||
package ru.nbch.credit_tracker.service.signal;
|
package ru.nbch.credit_tracker.service.signal;
|
||||||
|
|
||||||
import org.springframework.stereotype.Service;
|
|
||||||
import ru.nbch.credit_tracker.entities.app.UserPackage;
|
|
||||||
import ru.nbch.credit_tracker.enums.Status;
|
|
||||||
import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper;
|
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import ru.nbch.credit_tracker.entities.app.UserPackage;
|
||||||
|
import ru.nbch.credit_tracker.enums.Status;
|
||||||
|
import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class UserPackageService {
|
public class UserPackageService {
|
||||||
|
|
@ -34,6 +33,10 @@ public class UserPackageService {
|
||||||
mapper.deletePackage(userId.substring(0, 6), packageName, newStatus.name(), previousStatus.name(), deactivatedAt);
|
mapper.deletePackage(userId.substring(0, 6), packageName, newStatus.name(), previousStatus.name(), deactivatedAt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void deletePackageById(Long id, LocalDateTime deactivatedAt) {
|
||||||
|
mapper.deletePackageById(id, Status.DELETED.name(), deactivatedAt);
|
||||||
|
}
|
||||||
|
|
||||||
public Long insertPackage(UserPackage userPackage) {
|
public Long insertPackage(UserPackage userPackage) {
|
||||||
return mapper.insertPackage(userPackage);
|
return mapper.insertPackage(userPackage);
|
||||||
}
|
}
|
||||||
|
|
@ -62,6 +65,10 @@ public class UserPackageService {
|
||||||
return mapper.findAllPackagesByUserId(userId.substring(0, 6));
|
return mapper.findAllPackagesByUserId(userId.substring(0, 6));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<UserPackage> findByMemberCodeAndPackageName(String memberCode, String packageName) {
|
||||||
|
return mapper.findByMemberCodeAndPackageName(memberCode, packageName);
|
||||||
|
}
|
||||||
|
|
||||||
public List<UserPackage> findAllPackagesByStatus(Status status) {
|
public List<UserPackage> findAllPackagesByStatus(Status status) {
|
||||||
return mapper.findAllPackagesByStatus(status.name());
|
return mapper.findAllPackagesByStatus(status.name());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
package ru.nbch.credit_tracker.service.xml.stax;
|
||||||
|
|
||||||
|
import javax.xml.stream.XMLStreamReader;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import ru.nbch.credit_tracker.entities.external_response.list_package.SgnlReportDeleted;
|
||||||
|
import ru.nbch.credit_tracker.utils.error.ExceptionUtils;
|
||||||
|
|
||||||
|
public class SgnlReportDeletedStaxReader extends BaseStaxReader<SgnlReportDeleted> {
|
||||||
|
private final Logger log = LoggerFactory.getLogger(getClass());
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<SgnlReportDeleted> type() {
|
||||||
|
return SgnlReportDeleted.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected SgnlReportDeleted createObject() {
|
||||||
|
return new SgnlReportDeleted();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Integer parseDeleteFlag(String text) {
|
||||||
|
try {
|
||||||
|
return Integer.parseInt(text);
|
||||||
|
} catch (Throwable e) {
|
||||||
|
log.error("couldn't parse delete flag: {}", ExceptionUtils.getStackTrace(e));
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean innerProcess(XMLStreamReader reader, SgnlReportDeleted obj) {
|
||||||
|
String text = buffer.toString();
|
||||||
|
String currPath = getPath();
|
||||||
|
if (currPath.equals("/SgnlReport/OperationReport/PackageForNextReport/deleteFlag")) {
|
||||||
|
obj.setDeleteFlag(parseDeleteFlag(text));
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void innerProcessStartElement(XMLStreamReader reader, SgnlReportDeleted obj) {
|
||||||
|
}
|
||||||
|
}
|
||||||
13
src/main/java/ru/nbch/credit_tracker/utils/EnumUtil.java
Normal file
13
src/main/java/ru/nbch/credit_tracker/utils/EnumUtil.java
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
package ru.nbch.credit_tracker.utils;
|
||||||
|
|
||||||
|
public class EnumUtil {
|
||||||
|
public static <E extends Enum<E>> E getEnum(final Class<E> enumClass, final String name) {
|
||||||
|
E[] enumConstants = enumClass.getEnumConstants();
|
||||||
|
for (E e : enumConstants) {
|
||||||
|
if (e.name().equals(name)) {
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -52,6 +52,12 @@
|
||||||
#{previousStatus}
|
#{previousStatus}
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
<update id="deletePackageById">
|
||||||
|
UPDATE signals_user_packages
|
||||||
|
SET status = #{status}, deactivated_at = #{deactivatedAt}
|
||||||
|
WHERE id =#{id}
|
||||||
|
</update>
|
||||||
|
|
||||||
<select id="insertPackage" resultType="java.lang.Long"
|
<select id="insertPackage" resultType="java.lang.Long"
|
||||||
parameterType="ru.nbch.credit_tracker.entities.app.UserPackage">
|
parameterType="ru.nbch.credit_tracker.entities.app.UserPackage">
|
||||||
INSERT INTO signals_user_packages (membercode, package_name, created_at, status)
|
INSERT INTO signals_user_packages (membercode, package_name, created_at, status)
|
||||||
|
|
@ -111,4 +117,10 @@
|
||||||
WHERE status = #{status}
|
WHERE status = #{status}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="findByMemberCodeAndPackageName" resultMap="packageDataResultMap">
|
||||||
|
SELECT id, membercode, package_name, created_at, status, deactivated_at, last_downloaded_report, monitoring_at
|
||||||
|
FROM signals_user_packages
|
||||||
|
WHERE membercode = #{memberCode} AND package_name = #{packageName}
|
||||||
|
</select>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
||||||
Loading…
Add table
Reference in a new issue