Added database registration for packege and subject
This commit is contained in:
parent
ace8bd46e4
commit
2b5bd8c120
5 changed files with 110 additions and 1 deletions
9
src/main/java/ru/nbch/credit_tracker/enums/Status.java
Normal file
9
src/main/java/ru/nbch/credit_tracker/enums/Status.java
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
package ru.nbch.credit_tracker.enums;
|
||||||
|
|
||||||
|
public enum Status {
|
||||||
|
ON_MONITORING, // пакет стоит на мониторинге в оф. сервисе
|
||||||
|
REJECTED, // отклонен на стороне НБКИ
|
||||||
|
PROCESSING, // идет поиск телефона и расчет флагов по пакету
|
||||||
|
DELETED, // пакет удален
|
||||||
|
ERROR; // произошла ошибка при постановке пакета на мониторинг в оф. сервис
|
||||||
|
}
|
||||||
|
|
@ -11,6 +11,7 @@ import ru.nbch.credit_tracker.entities.monitoring_request.MonitoringRequest;
|
||||||
import ru.nbch.credit_tracker.enums.SignalError;
|
import ru.nbch.credit_tracker.enums.SignalError;
|
||||||
import ru.nbch.credit_tracker.exceptions.ValidationException;
|
import ru.nbch.credit_tracker.exceptions.ValidationException;
|
||||||
import ru.nbch.credit_tracker.service.FailureAnswerGenerator;
|
import ru.nbch.credit_tracker.service.FailureAnswerGenerator;
|
||||||
|
import ru.nbch.credit_tracker.service.SignalService;
|
||||||
import ru.nbch.credit_tracker.service.scoring.AuthorizationService;
|
import ru.nbch.credit_tracker.service.scoring.AuthorizationService;
|
||||||
import ru.nbch.credit_tracker.service.xml.IXmlProcessor;
|
import ru.nbch.credit_tracker.service.xml.IXmlProcessor;
|
||||||
import ru.nbch.credit_tracker.service.xml.XmlUtilService;
|
import ru.nbch.credit_tracker.service.xml.XmlUtilService;
|
||||||
|
|
@ -25,15 +26,18 @@ public class SignalFacade {
|
||||||
|
|
||||||
private final CreditTrackerSettings config;
|
private final CreditTrackerSettings config;
|
||||||
private final AuthorizationService authorizationService;
|
private final AuthorizationService authorizationService;
|
||||||
|
private final SignalService signalService;
|
||||||
private final FailureAnswerGenerator failureAnswerGenerator;
|
private final FailureAnswerGenerator failureAnswerGenerator;
|
||||||
private final XmlUtilService xmlUtilService;
|
private final XmlUtilService xmlUtilService;
|
||||||
|
|
||||||
public SignalFacade(CreditTrackerSettings config,
|
public SignalFacade(CreditTrackerSettings config,
|
||||||
AuthorizationService authorizationService,
|
AuthorizationService authorizationService,
|
||||||
|
SignalService signalService,
|
||||||
FailureAnswerGenerator failureAnswerGenerator,
|
FailureAnswerGenerator failureAnswerGenerator,
|
||||||
XmlUtilService xmlUtilService) {
|
XmlUtilService xmlUtilService) {
|
||||||
this.config = config;
|
this.config = config;
|
||||||
this.authorizationService = authorizationService;
|
this.authorizationService = authorizationService;
|
||||||
|
this.signalService = signalService;
|
||||||
this.failureAnswerGenerator = failureAnswerGenerator;
|
this.failureAnswerGenerator = failureAnswerGenerator;
|
||||||
this.xmlUtilService = xmlUtilService;
|
this.xmlUtilService = xmlUtilService;
|
||||||
}
|
}
|
||||||
|
|
@ -93,6 +97,7 @@ public class SignalFacade {
|
||||||
validateRequestByXsd(zipInputStream);
|
validateRequestByXsd(zipInputStream);
|
||||||
|
|
||||||
} catch (ValidationException e) {
|
} catch (ValidationException e) {
|
||||||
|
// записать REJECTED
|
||||||
return getBadResponse(SignalError.ERROR_011); // TODO вычленять конкретный элемент
|
return getBadResponse(SignalError.ERROR_011); // TODO вычленять конкретный элемент
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(e.getMessage(), e);
|
log.error(e.getMessage(), e);
|
||||||
|
|
@ -100,17 +105,27 @@ public class SignalFacade {
|
||||||
return ResponseEntity.internalServerError().body(new PathResource(errorPath));
|
return ResponseEntity.internalServerError().body(new PathResource(errorPath));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MonitoringRequest monitoringRequest;
|
||||||
// Xml валиден. Производим анмаршаллинг
|
// Xml валиден. Производим анмаршаллинг
|
||||||
try (ZipInputStream zipInputStream = new ZipInputStream(file.getInputStream())) {
|
try (ZipInputStream zipInputStream = new ZipInputStream(file.getInputStream())) {
|
||||||
zipInputStream.getNextEntry();
|
zipInputStream.getNextEntry();
|
||||||
|
|
||||||
IXmlProcessor processor = xmlUtilService.createJaxbProcessor();
|
IXmlProcessor processor = xmlUtilService.createJaxbProcessor();
|
||||||
MonitoringRequest monitoringRequest = processor.read(zipInputStream, MonitoringRequest.class);
|
monitoringRequest = processor.read(zipInputStream, MonitoringRequest.class);
|
||||||
|
|
||||||
if (!authorizationService.hasAuthorization(monitoringRequest.getUserId(), monitoringRequest.getPassword())) {
|
if (!authorizationService.hasAuthorization(monitoringRequest.getUserId(), monitoringRequest.getPassword())) {
|
||||||
|
// записать REJECTED
|
||||||
return getBadResponse(SignalError.ERROR_005);
|
return getBadResponse(SignalError.ERROR_005);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (signalService.isPackageNotUnique(monitoringRequest)) {
|
||||||
|
// записать REJECTED
|
||||||
|
// signalService.insertPackage(monitoringRequest, Status.REJECTED);
|
||||||
|
return getBadResponse(SignalError.ERROR_007);
|
||||||
|
}
|
||||||
|
|
||||||
|
signalService.registerPackage(monitoringRequest);
|
||||||
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(e.getMessage(), e);
|
log.error(e.getMessage(), e);
|
||||||
String errorPath = failureAnswerGenerator.generateFailureAnswer(SignalError.ERROR_001);
|
String errorPath = failureAnswerGenerator.generateFailureAnswer(SignalError.ERROR_001);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
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.monitoring_request.MonitoringRequest;
|
||||||
|
import ru.nbch.credit_tracker.entities.monitoring_request.Subject;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface SignalMapper {
|
||||||
|
|
||||||
|
boolean isPackageNotUnique(@Param("userId") String userId, @Param("packageName") String packageName);
|
||||||
|
|
||||||
|
Integer registerPackage(@Param("request") MonitoringRequest request, @Param("creadedAt") LocalDateTime creadedAt, @Param("status") String status);
|
||||||
|
|
||||||
|
void registerSubjects(@Param("subjects") List<Subject> subjects, @Param("packageId") Integer packageId);
|
||||||
|
|
||||||
|
void insertPackage(@Param("request") MonitoringRequest request, @Param("creadedAt") LocalDateTime creadedAt, @Param("status") String status);
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
package ru.nbch.credit_tracker.service;
|
||||||
|
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
import ru.nbch.credit_tracker.entities.monitoring_request.MonitoringRequest;
|
||||||
|
import ru.nbch.credit_tracker.enums.Status;
|
||||||
|
import ru.nbch.credit_tracker.mapper.signal.SignalMapper;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class SignalService {
|
||||||
|
private final SignalMapper mapper;
|
||||||
|
|
||||||
|
public SignalService(SignalMapper mapper) {
|
||||||
|
this.mapper = mapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPackageNotUnique(MonitoringRequest request) {
|
||||||
|
String userId = request.getUserId();
|
||||||
|
return mapper.isPackageNotUnique(userId.substring(0, 6),request.getPackageName());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerPackage(MonitoringRequest request) {
|
||||||
|
Integer packageId = mapper.registerPackage(request, LocalDateTime.now(), Status.PROCESSING.name());
|
||||||
|
mapper.registerSubjects(request.getSubjects().getSubject(), packageId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void insertPackage(MonitoringRequest request, Status status) {
|
||||||
|
mapper.insertPackage(request, LocalDateTime.now(), status.name());
|
||||||
|
}
|
||||||
|
}
|
||||||
33
src/main/resources/mybatis/mapper/signal/SignalMapper.xml
Normal file
33
src/main/resources/mybatis/mapper/signal/SignalMapper.xml
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper
|
||||||
|
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
|
||||||
|
<mapper namespace="ru.nbch.credit_tracker.mapper.signal.SignalMapper">
|
||||||
|
|
||||||
|
<select id="isPackageNotUnique" resultType="boolean">
|
||||||
|
SELECT COUNT(*) > 0
|
||||||
|
FROM signals_user_packages
|
||||||
|
WHERE membercode IS NOT NULL AND LEFT(membercode, 6) = #{userId} AND package_name = #{packageName}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="registerPackage" resultType="java.lang.Integer" parameterType="ru.nbch.credit_tracker.entities.monitoring_request.MonitoringRequest" >
|
||||||
|
INSERT INTO signals_user_packages (membercode, package_name, created_at, status)
|
||||||
|
values (#{request.userId}, #{request.packageName}, #{creadedAt}, #{status})
|
||||||
|
RETURNING id
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<insert id="insertPackage" parameterType="ru.nbch.credit_tracker.entities.monitoring_request.MonitoringRequest" >
|
||||||
|
INSERT INTO signals_user_packages (membercode, package_name, created_at, status)
|
||||||
|
values (#{request.userId}, #{request.packageName}, #{creadedAt}, #{status})
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
<insert id="registerSubjects" parameterType="java.util.List">
|
||||||
|
INSERT INTO signals_phone_fid_map (subject_id, phone, fid, package_id)
|
||||||
|
values
|
||||||
|
<foreach collection="subjects" item="subject" separator=",">
|
||||||
|
(#{subject.id}, #{subject.clientId}, NULL, #{packageId})
|
||||||
|
</foreach>
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
</mapper>
|
||||||
Loading…
Add table
Reference in a new issue