get rid of external_package_name, FID_CHANGED, PROCESSING_REPEATED, NO_FID

This commit is contained in:
Mikhail Trofimov 2026-07-06 09:54:30 +03:00
parent 0cfe976670
commit 7004a1b7e3
17 changed files with 23 additions and 180 deletions

View file

@ -1,9 +1,10 @@
package ru.nbch.credit_tracker.component.comparator;
import ru.nbch.credit_tracker.entities.app.UserPackage;
import ru.nbch.credit_tracker.enums.Status;
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 {
@ -15,7 +16,7 @@ public class DeletePackageStatusComparator {
try {
Status status = Status.valueOf(str);
return switch (status) {
case ON_MONITORING, PROCESSING_REPEATED, NO_FID -> 1;
case ON_MONITORING -> 1;
case DELETED -> 0;
default -> -1;
};

View file

@ -1,15 +1,16 @@
package ru.nbch.credit_tracker.component.comparator;
import ru.nbch.credit_tracker.entities.app.UserPackage;
import ru.nbch.credit_tracker.enums.Status;
import java.util.Comparator;
import java.util.EnumSet;
import java.util.function.ToIntFunction;
import ru.nbch.credit_tracker.entities.app.UserPackage;
import ru.nbch.credit_tracker.enums.Status;
public class ReportListPackageStatusComparator {
public static final EnumSet<Status> reportedStatuses = EnumSet.of(
Status.ON_MONITORING, Status.PROCESSING_REPEATED
Status.ON_MONITORING
);
public static Comparator<UserPackage> INSTANCE = Comparator
@ -24,7 +25,7 @@ public class ReportListPackageStatusComparator {
try {
Status status = Status.valueOf(str);
return switch (status) {
case ON_MONITORING, PROCESSING_REPEATED -> 1;
case ON_MONITORING -> 1;
default -> -1;
};
} catch (Throwable e) {

View file

@ -2,10 +2,8 @@ package ru.nbch.credit_tracker.enums;
public enum Status {
ON_MONITORING, // пакет стоит на мониторинге в оф. сервисе
NO_FID,
REJECTED, // отклонен на стороне НБКИ
PROCESSING, // идет поиск телефона и расчет флагов по пакету
PROCESSING_REPEATED,
ACCEPTED,
DELETED, // пакет удален
ERROR; // произошла ошибка при постановке пакета на мониторинг в оф. сервис

View file

@ -223,8 +223,7 @@ public class SignalFacade {
pack.setPackageName(data.getPackageName());
pack.setCreatedAt(data.getCreatedAt() != null ? data.getCreatedAt().toString() : null);
Status packageStatus = EnumUtil.getEnum(Status.class, data.getStatus());
Status statusForClient = packageStatus == Status.ACCEPTED ? Status.PROCESSING :
Arrays.asList(Status.PROCESSING_REPEATED, Status.NO_FID).contains(packageStatus) ? Status.ON_MONITORING : packageStatus;
Status statusForClient = packageStatus == Status.ACCEPTED ? Status.PROCESSING : packageStatus;
assert statusForClient != null;
pack.setStatus(statusForClient.name());
if (packageStatus == Status.DELETED) {
@ -244,7 +243,7 @@ public class SignalFacade {
-> clientExcp(SignalError.ERROR_016, XmlErrorFormat.MonitoringPackageDeleteError, packageName));
Status status = EnumUtil.getEnum(Status.class, packageToDelete.getStatus());
if (!Arrays.asList(Status.ON_MONITORING, Status.NO_FID).contains(status)) {
if (Status.ON_MONITORING != status) {
throw clientExcp(deleteStatusError(status), XmlErrorFormat.MonitoringPackageDeleteError, packageName);
}
@ -266,7 +265,6 @@ public class SignalFacade {
case PROCESSING, ACCEPTED -> SignalError.ERROR_023;
case REJECTED, ERROR -> SignalError.ERROR_024;
case DELETED -> SignalError.ERROR_025;
case PROCESSING_REPEATED -> SignalError.ERROR_026;
default -> throw new IllegalStateException("Unexpected value: " + status);
};
}

View file

@ -17,10 +17,6 @@ public interface PackagesRecordsMapper {
@Param("limit") int limit,
@Param("offset") int offset);
List<Long> uniquePackageIdByPhones(@Param("json") String json);
List<Long> uniquePackageIdByInnAndRegNum(@Param("json") String json);
List<UserPackagePhoneData> selectUserPackagePhoneData(@Param("json") String json);
List<UserPackageLegalData> selectUserPackageLegalData(@Param("json") String json);

View file

@ -25,14 +25,8 @@ public interface UserPackageMapper {
void updatePackageOnMonitoringSuccess(@Param("id") Long id,
@Param("monitoringAt") LocalDateTime monitoringAt);
void updateNoFidMonitoring(@Param("id") Long id);
void setFidChanged(@Param("packageIds") List<Long> id);
UserPackage findPackage(@Param("id") Long id);
List<UserPackage> findForRepeatedPackages();
List<UserPackage> findUserPackages(@Param("userId") String userId,
@Param("statuses") List<String> status);

View file

@ -59,17 +59,13 @@ public class UserPackageService {
}
public List<UserPackage> findActivePackages(String userId) {
return userPackageMapper.findUserPackages(userId.substring(0, 6), Arrays.asList(Status.ON_MONITORING.name(), Status.NO_FID.name()));
return userPackageMapper.findUserPackages(userId.substring(0, 6), Arrays.asList(Status.ON_MONITORING.name()));
}
public UserPackage findByPackageName(String packageName) {
return userPackageMapper.findByPackageName(packageName);
}
public void setFidChanged(List<Long> id) {
userPackageMapper.setFidChanged(id);
}
public List<UserPackage> findAllPackages(String userId) {
return userPackageMapper.findAllPackagesByUserId(userId.substring(0, 6));
}

View file

@ -100,7 +100,7 @@ public class StartupRestoreService {
}
private void processingRestore() {
List<UserPackage> packages = userPackageMapper.findAllPackagesByStatus(Status.PROCESSING.name(), Status.PROCESSING_REPEATED.name());
List<UserPackage> packages = userPackageMapper.findAllPackagesByStatus(Status.PROCESSING.name());
log.debug("Found {} packages in status PROCESSING", packages.size());
for (UserPackage userPackage : packages) {
if (userPackage.getSubjectType() == 1) {

View file

@ -5,15 +5,12 @@ import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
import ru.nbch.credit_tracker.entities.app.UserPackage;
import ru.nbch.credit_tracker.mapper.signal.LegalsMapMapper;
import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper;
import ru.nbch.credit_tracker.service.signal.PhonesMapService;
import ru.nbch.credit_tracker.service.task.*;
import ru.nbch.credit_tracker.service.task.impl.PipelineMode;
import ru.nbch.pipeline.engine.core.Pipeline;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@Slf4j
@ -24,9 +21,6 @@ public class UpdatingFidService {
private final LpPipelinePackageFabric lpPipelinePackageFabric;
private final NpPipelineRecalcOrchestrator npPipelineRecalcOrchestrator;
private final LpPipelineRecalcOrchestrator lpPipelineRecalcOrchestrator;
private final NpPipelinePackageOrchestrator npPipelinePackageOrchestrator;
private final LpPipelinePackageOrchestrator lpPipelinePackageOrchestrator;
private final UserPackageMapper userPackageMapper;
private final PhonesMapService phonesMapService;
private final LegalsMapMapper legalsMapMapper;
@ -35,18 +29,12 @@ public class UpdatingFidService {
LpPipelinePackageFabric lpPipelinePackageFabric,
NpPipelineRecalcOrchestrator npPipelineRecalcOrchestrator,
LpPipelineRecalcOrchestrator lpPipelineRecalcOrchestrator,
NpPipelinePackageOrchestrator npPipelinePackageOrchestrator,
LpPipelinePackageOrchestrator lpPipelinePackageOrchestrator,
UserPackageMapper userPackageMapper,
PhonesMapService phonesMapService,
LegalsMapMapper legalsMapMapper) {
this.npPipelinePackageFabric = npPipelinePackageFabric;
this.lpPipelinePackageFabric = lpPipelinePackageFabric;
this.npPipelineRecalcOrchestrator = npPipelineRecalcOrchestrator;
this.lpPipelineRecalcOrchestrator = lpPipelineRecalcOrchestrator;
this.npPipelinePackageOrchestrator = npPipelinePackageOrchestrator;
this.lpPipelinePackageOrchestrator = lpPipelinePackageOrchestrator;
this.userPackageMapper = userPackageMapper;
this.phonesMapService = phonesMapService;
this.legalsMapMapper = legalsMapMapper;
}
@ -59,7 +47,7 @@ public class UpdatingFidService {
}
log.info("Delete unused phones");
phonesMapService.deleteUnusedPhones();
log.info("Start updating fids and PD");
log.info("Start updating fids");
try {
Pipeline pipeline = npPipelinePackageFabric.buildRecalculationPD(new SetupParam(null, 1, PipelineMode.RECALC_FID));
CompletableFuture<?> future = npPipelineRecalcOrchestrator.startOrReject(pipeline);
@ -70,17 +58,7 @@ public class UpdatingFidService {
return;
}
List<UserPackage> packagesRepeated = userPackageMapper.findForRepeatedPackages();
packagesRepeated.forEach(userPackage -> {
Long packageId = userPackage.getId();
SetupParam setupParam = new SetupParam(packageId, 1, PipelineMode.RESEND);
try {
Pipeline makeXmlByCache = npPipelinePackageFabric.build(setupParam);
npPipelinePackageOrchestrator.startOrDelay(makeXmlByCache, packageId);
} catch (Exception e) {
log.error("Failed to build pipeline", e);
}
});
log.info("Updating NP fids successfully completed.");
} finally {
log.info("pipeline finished");
pipeline.close();
@ -98,7 +76,7 @@ public class UpdatingFidService {
log.info("The previous task has not yet been completed.");
return;
}
log.info("Delete unused phones");
log.info("Delete unused lp maps");
legalsMapMapper.deleteUnusedMaps();
log.info("Start updating fids");
try {
@ -111,17 +89,7 @@ public class UpdatingFidService {
return;
}
List<UserPackage> packagesRepeated = userPackageMapper.findForRepeatedPackages();
packagesRepeated.forEach(userPackage -> {
Long packageId = userPackage.getId();
SetupParam setupParam = new SetupParam(packageId, 2, PipelineMode.RESEND);
try {
Pipeline setupPipeline = lpPipelinePackageFabric.build(setupParam);
lpPipelinePackageOrchestrator.startOrDelay(setupPipeline, packageId);
} catch (Exception e) {
log.error("Failed to build pipeline", e);
}
});
log.info("Updating LP fids successfully completed.");
} finally {
log.info("pipeline finished");
pipeline.close();

View file

@ -110,34 +110,6 @@ public class PackageRecordsService {
}
}
public List<Long> selectNpUniquePackageIds(List<Long> phones) {
try {
String json = entityToJsonMapper.writeValueAsString(phones.stream()
.filter(Objects::nonNull)
.map(phone -> new HashMap<String, Object>() {{
put("phone", phone);
}}).toList());
return packagesRecordsMapper.uniquePackageIdByPhones(json);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
public List<Long> selectLpUniquePackageIds(List<LegalsMap> legalsMaps) {
try {
String json = entityToJsonMapper.writeValueAsString(legalsMaps.stream()
.filter(Objects::nonNull)
.map(s -> new HashMap<String, Object>() {{
put("inn", s.getInn());
put("reg_num", s.getRegNum());
}}).toList());
return packagesRecordsMapper.uniquePackageIdByInnAndRegNum(json);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
}
public List<UserPackagePhoneData> selectUserPackagePhoneData(Set<Long> phones) {
try {
String json = entityToJsonMapper.writeValueAsString(phones.stream()

View file

@ -112,8 +112,6 @@ public abstract class PackageOrchestrator {
}
if (!res.hasFids()) {
log.info("No one fid was found by packageId : {}.", packageId);
userPackageMapper.updateNoFidMonitoring(packageId);
return;
}
PipelineMode mode = ctx.get(PackageVariable.mode);

View file

@ -107,12 +107,6 @@ public class LpFidUpdater implements Handler<SubjectPayload, VoidPayload> {
legalsMapService.updateSearchedAt(notChangingFidLegalMaps);
}
if (!changingFids.isEmpty()) {
List<Long> packageIds = packageRecordsService.selectLpUniquePackageIds(changingFids);
if (!packageIds.isEmpty()) {
userPackageService.setFidChanged(packageIds);
}
}
return new VoidPayload();
}

View file

@ -8,9 +8,7 @@ import ru.nbch.credit_tracker.model.SubjectProfile;
import ru.nbch.credit_tracker.model.impl.PackageVariable;
import ru.nbch.credit_tracker.model.impl.SubjectPayload;
import ru.nbch.credit_tracker.model.impl.VoidPayload;
import ru.nbch.credit_tracker.service.UserPackageService;
import ru.nbch.credit_tracker.service.indic.PersonService;
import ru.nbch.credit_tracker.service.signal.PackageRecordsService;
import ru.nbch.credit_tracker.service.signal.PhonesMapService;
import ru.nbch.credit_tracker.utils.CTUtil;
import ru.nbch.pipeline.engine.core.Handler;
@ -25,20 +23,14 @@ import java.util.stream.Stream;
public class NpFidUpdater implements Handler<SubjectPayload, VoidPayload> {
private final PersonService personService;
private final CreditTrackerSettings creditTrackerSettings;
private final PackageRecordsService packageRecordsService;
private final PhonesMapService phonesMapService;
private final UserPackageService userPackageService;
public NpFidUpdater(PersonService personService,
CreditTrackerSettings creditTrackerSettings,
PackageRecordsService packageRecordsService,
PhonesMapService phonesMapService,
UserPackageService userPackageService) {
PhonesMapService phonesMapService) {
this.personService = personService;
this.creditTrackerSettings = creditTrackerSettings;
this.packageRecordsService = packageRecordsService;
this.phonesMapService = phonesMapService;
this.userPackageService = userPackageService;
}
@Override
@ -79,12 +71,6 @@ public class NpFidUpdater implements Handler<SubjectPayload, VoidPayload> {
phonesMapService.updateSearchedAt(notChangedPhones);
}
if (!changingFids.isEmpty()) {
List<Long> packageIds = packageRecordsService.selectNpUniquePackageIds(changingFids);
if (!packageIds.isEmpty()) {
userPackageService.setFidChanged(packageIds);
}
}
return new VoidPayload();
}

View file

@ -231,8 +231,7 @@
AND sup.status IN
(
'ON_MONITORING',
'PROCESSING',
'PROCESSING_REPEATED'
'PROCESSING'
))
</delete>

View file

@ -42,30 +42,6 @@
</foreach>
</select>
<select id="uniquePackageIdByPhones" resultType="java.lang.Long">
WITH src AS (SELECT phone
FROM json_to_recordset(#{json}::json) AS t(
phone bigint
))
select distinct (package_id)
FROM signals_phone_fid_map spr
join signals_user_packages sup on sup.id = spr.package_id
where spr.phone_l in (select * from src) and sup.status = 'ON_MONITORING'
</select>
<select id="uniquePackageIdByInnAndRegNum" resultType="java.lang.Long">
WITH src AS (SELECT inn, reg_num
FROM json_to_recordset(#{json}::json) AS t(
inn bigint,
reg_num bigint
))
select distinct (package_id)
FROM signals_legal_fid_map slfm
JOIN signals_user_packages sup ON sup.id = slfm.package_id
WHERE (slfm.inn, slfm.reg_num) IN (SELECT inn, reg_num FROM src)
AND sup.status = 'ON_MONITORING'
</select>
<select id="selectUserPackagePhoneData" resultType="ru.nbch.credit_tracker.model.UserPackagePhoneData">
WITH src AS (SELECT phone
FROM json_to_recordset(#{json}::json) AS t(

View file

@ -210,8 +210,7 @@
AND sup.status IN
(
'ON_MONITORING',
'PROCESSING',
'PROCESSING_REPEATED'
'PROCESSING'
))
</delete>
</mapper>

View file

@ -16,7 +16,6 @@
<result property="monitoringAt" column="monitoring_at"/>
<result property="rejectStatus" column="reject_status"/>
<result property="signalTypes" column="signal_types"/>
<result property="externalPackageName" column="external_package_name"/>
</resultMap>
<select id="isPackageNotUnique" resultType="boolean">
@ -63,8 +62,8 @@
<select id="insertPackage" resultType="java.lang.Long"
parameterType="ru.nbch.credit_tracker.entities.app.UserPackage">
INSERT INTO signals_user_packages (membercode, package_name, subject_type, signal_types, created_at, status, external_package_name)
values (#{userPackage.userId}, #{userPackage.packageName}, #{userPackage.subjectType}, #{userPackage.signalTypes}, #{userPackage.createdAt}, #{userPackage.status}, concat(substring(#{userPackage.userId}, 1, 6), '_', #{userPackage.packageName})) RETURNING id
INSERT INTO signals_user_packages (membercode, package_name, subject_type, signal_types, created_at, status)
values (#{userPackage.userId}, #{userPackage.packageName}, #{userPackage.subjectType}, #{userPackage.signalTypes}, #{userPackage.createdAt}, #{userPackage.status}) RETURNING id
</select>
<update id="updatePackageStatus">
@ -73,16 +72,6 @@
WHERE id = #{packageId}
</update>
<update id="setFidChanged">
UPDATE signals_user_packages
SET fid_changed = 1,
status = 'PROCESSING_REPEATED'
WHERE id in
<foreach item="packageId" collection="packageIds" open="(" separator="," close=")">
#{packageId}
</foreach>
</update>
<update id="updatePackageLastDownloadedReport" parameterType="string">
WITH src AS (
SELECT
@ -105,14 +94,7 @@
<if test="monitoringAt != null">
monitoring_at = #{monitoringAt},
</if>
status = 'ON_MONITORING',
fid_changed = null
WHERE id = #{id}
</update>
<update id="updateNoFidMonitoring">
UPDATE signals_user_packages
SET monitoring_at = created_at, status = 'NO_FID', fid_changed = null
status = 'ON_MONITORING'
WHERE id = #{id}
</update>
@ -154,21 +136,6 @@
LIMIT 1
</select>
<select id="findForRepeatedPackages" resultMap="packageDataResultMap">
SELECT id,
membercode,
package_name,
created_at,
status,
deactivated_at,
last_downloaded_report,
monitoring_at,
reject_status,
signal_types
FROM signals_user_packages
WHERE fid_changed = 1 and status = 'PROCESSING_REPEATED'
</select>
<select id="findOnMonitoringPackages" resultMap="packageDataResultMap">
SELECT id,
membercode,