Added code for test load time
This commit is contained in:
parent
249b351428
commit
5b6f3ce63c
9 changed files with 292 additions and 4 deletions
19
pom.xml
19
pom.xml
|
|
@ -300,6 +300,25 @@
|
|||
</configuration>
|
||||
</execution>
|
||||
|
||||
<execution>
|
||||
<id>build-monitoring-test</id>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>repackage</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<mainClass>ru.nbch.credit_tracker.service.mode.test_monitoring.CTMonitoringTestApplication</mainClass>
|
||||
<classifier>monitoring-test</classifier>
|
||||
<attach>true</attach>
|
||||
<excludes>
|
||||
<exclude>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
</exclude>
|
||||
</excludes>
|
||||
</configuration>
|
||||
</execution>
|
||||
|
||||
<execution>
|
||||
<id>build-migration</id>
|
||||
<phase>package</phase>
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ 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.PackagesRecordsMap;
|
||||
import ru.nbch.credit_tracker.model.UserPackagePhoneData;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -18,7 +19,13 @@ public interface PackagesRecordsMapper {
|
|||
|
||||
List<Long> uniquePackageIdByPhones(@Param("json") String json);
|
||||
|
||||
List<UserPackagePhoneData> selectUserPackagePhoneData(@Param("json") String json);
|
||||
|
||||
Long deleteByPackageId(@Param("packageId") Long id);
|
||||
|
||||
PackagesRecordsMap findById(Long id);
|
||||
|
||||
List<PackagesRecordsMap> findByPhone(@Param("phone") Long phone);
|
||||
|
||||
List<PackagesRecordsMap> findByPhones(@Param("phones") List<Long> phones);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,4 +37,8 @@ public interface PhonesMapMapper {
|
|||
void registerJson(@Param("json") String json);
|
||||
|
||||
void deleteUnusedPhones();
|
||||
|
||||
List<PhonesMap> findByFid(@Param("fid") Integer fid);
|
||||
|
||||
List<PhonesMap> findByFids(@Param("fids") List<Integer> fids);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
package ru.nbch.credit_tracker.model;
|
||||
|
||||
import lombok.*;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class UserPackagePhoneData {
|
||||
private Long packageId;
|
||||
private String signalTypes;
|
||||
private Long phone;
|
||||
private String subjectId;
|
||||
}
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
package ru.nbch.credit_tracker.service.mode.test_monitoring;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.WebApplicationType;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.context.annotation.FilterType;
|
||||
|
||||
@SpringBootApplication
|
||||
@ComponentScan(
|
||||
value = {"ru.nbch.credit_tracker"},
|
||||
excludeFilters = {
|
||||
@ComponentScan.Filter(
|
||||
type = FilterType.REGEX,
|
||||
pattern = {
|
||||
"ru\\.nbch\\.credit_tracker\\.service\\.mode\\.common..*",
|
||||
"ru\\.nbch\\.credit_tracker\\.service\\.mode\\.migration..*",
|
||||
"ru\\.nbch\\.credit_tracker\\.service\\.mode\\.monitoring..*"
|
||||
}
|
||||
)
|
||||
}
|
||||
)
|
||||
public class CTMonitoringTestApplication {
|
||||
public static void main(String[] args) throws JsonProcessingException {
|
||||
SpringApplication application = new SpringApplication(CTMonitoringTestApplication.class);
|
||||
application.setWebApplicationType(WebApplicationType.NONE);
|
||||
ConfigurableApplicationContext ctx = application.run(args);
|
||||
MonitoringService monitoringService = ctx.getBean(MonitoringService.class);
|
||||
monitoringService.run();
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,110 @@
|
|||
package ru.nbch.credit_tracker.service.mode.test_monitoring;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ru.nbch.credit_tracker.entities.app.PackagesRecordsMap;
|
||||
import ru.nbch.credit_tracker.entities.app.PhonesMap;
|
||||
import ru.nbch.credit_tracker.entities.app.UserPackage;
|
||||
import ru.nbch.credit_tracker.mapper.signal.UserPackageMapper;
|
||||
import ru.nbch.credit_tracker.model.UserPackagePhoneData;
|
||||
import ru.nbch.credit_tracker.service.signal.PackageRecordsService;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Сервис периодического опроса официального сервиса сигналов на наличие новых отчетов по пакетам находящимся в статусе ON_MONITORING
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class MonitoringService {
|
||||
|
||||
private final PackageRecordsService packageRecordsService;
|
||||
private final UserPackageMapper userPackageMapper;
|
||||
|
||||
public MonitoringService(PackageRecordsService packageRecordsService,
|
||||
UserPackageMapper userPackageMapper) {
|
||||
this.packageRecordsService = packageRecordsService;
|
||||
this.userPackageMapper = userPackageMapper;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
List<Integer> fids = new ArrayList<>();
|
||||
|
||||
for (int i = 1000; i < 2000; i++) {
|
||||
fids.add(i);
|
||||
}
|
||||
|
||||
fids.add(114885613);
|
||||
fids.add(16445000);
|
||||
fids.add(114829813);
|
||||
fids.add(109837221);
|
||||
fids.add(108550768);
|
||||
fids.add(108546145);
|
||||
fids.add(111098278);
|
||||
|
||||
|
||||
long start = System.currentTimeMillis();
|
||||
log.info("Start selecting by one");
|
||||
monitorByOne(fids);
|
||||
log.info("Finish selecting by one. Time: {} ms", System.currentTimeMillis() - start);
|
||||
|
||||
start = System.currentTimeMillis();
|
||||
log.info("Start selecting by batch");
|
||||
monitorbyBatch(fids);
|
||||
log.info("Finish selecting by bacth. Time: {} ms", System.currentTimeMillis() - start);
|
||||
}
|
||||
|
||||
private void monitorByOne(List<Integer> fids) {
|
||||
for (Integer fid : fids) {
|
||||
List<PhonesMap> phonesMaps = packageRecordsService.findCachedByFid(fid);
|
||||
for (PhonesMap phonesMap : phonesMaps) {
|
||||
if (phonesMap != null) {
|
||||
Long clientId = phonesMap.getPhone();
|
||||
Integer flagDebt5000 = phonesMap.getFlagDebt5000();
|
||||
Integer flag90days = phonesMap.getFlag90days();
|
||||
List<PackagesRecordsMap> packageRecords = packageRecordsService.findByPhone(clientId);
|
||||
for (PackagesRecordsMap packageRecord : packageRecords) {
|
||||
Long packageId = packageRecord.getPackageId();
|
||||
String subjectId = packageRecord.getSubjectId();
|
||||
UserPackage userPackage = userPackageMapper.findPackage(packageId);
|
||||
String status = userPackage.getStatus();
|
||||
String signalTypes = userPackage.getSignalTypes();
|
||||
|
||||
// проверить статус ON_MPNITORING + разрешенные signalTypes
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void monitorbyBatch(List<Integer> fids) {
|
||||
List<PhonesMap> phonesMaps = packageRecordsService.findCachedByFids(fids);
|
||||
// key: phone; value: флаги просрочек
|
||||
Map<Long, PhonesMap> phonesDataMap = phonesMaps.stream()
|
||||
.collect(
|
||||
Collectors.toMap(PhonesMap::getPhone, Function.identity())
|
||||
);
|
||||
|
||||
// subjectId, packageId, signalTypes, phone только для статуса ON_MONITORING
|
||||
List<UserPackagePhoneData> userPackagePhoneDataList = packageRecordsService
|
||||
.selectUserPackagePhoneData(phonesDataMap.keySet());
|
||||
|
||||
// остались только нужные номера, те что не вошли в userPackagePhoneDataList игнорируются
|
||||
for (UserPackagePhoneData userPackagePhoneData : userPackagePhoneDataList) {
|
||||
Long clientId = userPackagePhoneData.getPhone();
|
||||
String subjectId = userPackagePhoneData.getSubjectId();
|
||||
String signalTypes = userPackagePhoneData.getSignalTypes();
|
||||
|
||||
PhonesMap phonesMap = phonesDataMap.get(clientId);
|
||||
Integer flagDebt5000 = phonesMap.getFlagDebt5000();
|
||||
Integer flag90days = phonesMap.getFlag90days();
|
||||
|
||||
// проверить разрешенные signalTypes
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -11,11 +11,9 @@ import ru.nbch.credit_tracker.mapper.signal.PhonesMapMapper;
|
|||
import ru.nbch.credit_tracker.model.FlagData;
|
||||
import ru.nbch.credit_tracker.model.IdData;
|
||||
import ru.nbch.credit_tracker.model.SubjectProfile;
|
||||
import ru.nbch.credit_tracker.model.UserPackagePhoneData;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
|
@ -84,6 +82,19 @@ public class PackageRecordsService {
|
|||
}
|
||||
}
|
||||
|
||||
public List<UserPackagePhoneData> selectUserPackagePhoneData(Set<Long> phones) {
|
||||
try {
|
||||
String json = entityToJsonMapper.writeValueAsString(phones.stream()
|
||||
.filter(Objects::nonNull)
|
||||
.map(phone -> new HashMap<String, Object>() {{
|
||||
put("phone", phone);
|
||||
}}).toList());
|
||||
return packagesRecordsMapper.selectUserPackagePhoneData(json);
|
||||
} catch (JsonProcessingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
public void updateIdCache(List<IdData> idData) {
|
||||
try {
|
||||
String json = entityToJsonMapper.writeValueAsString(idData.stream()
|
||||
|
|
@ -121,4 +132,20 @@ public class PackageRecordsService {
|
|||
public PackagesRecordsMap findPackageRecordsById(Long id) {
|
||||
return packagesRecordsMapper.findById(id);
|
||||
}
|
||||
|
||||
public List<PhonesMap> findCachedByFid(Integer fid) {
|
||||
return phonesMapMapper.findByFid(fid);
|
||||
}
|
||||
|
||||
public List<PhonesMap> findCachedByFids(List<Integer> fids) {
|
||||
return phonesMapMapper.findByFids(fids);
|
||||
}
|
||||
|
||||
public List<PackagesRecordsMap> findByPhone(Long phone) {
|
||||
return packagesRecordsMapper.findByPhone(phone);
|
||||
}
|
||||
|
||||
public List<PackagesRecordsMap> findByPhones(List<Long> phones) {
|
||||
return phones.isEmpty() ? Collections.emptyList() : packagesRecordsMapper.findByPhones(phones);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,6 +23,29 @@
|
|||
WHERE id = #{id}
|
||||
</select>
|
||||
|
||||
<select id="findByPhone" parameterType="long" resultMap="PhoneFidMapResultMap">
|
||||
SELECT id,
|
||||
package_id,
|
||||
subject_id,
|
||||
phone_l,
|
||||
error_text
|
||||
FROM signals_phone_fid_map
|
||||
WHERE phone_l = #{phone}
|
||||
</select>
|
||||
|
||||
<select id="findByPhones" resultMap="PhoneFidMapResultMap">
|
||||
SELECT id,
|
||||
package_id,
|
||||
subject_id,
|
||||
phone_l,
|
||||
error_text
|
||||
FROM signals_phone_fid_map
|
||||
WHERE phone_l IN
|
||||
<foreach item='phone' collection='phones' open='(' separator=',' close=')'>
|
||||
#{phone}
|
||||
</foreach>
|
||||
</select>
|
||||
|
||||
<select id="uniquePackageIdByPhones" resultType="java.lang.Long">
|
||||
WITH src AS (SELECT phone
|
||||
FROM json_to_recordset(#{json}::json) AS t(
|
||||
|
|
@ -34,6 +57,17 @@
|
|||
where spr.phone_l in (select * 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(
|
||||
phone bigint
|
||||
))
|
||||
select sup.id AS packageId, sup.signal_types AS signalTypes, spr.phone_l AS phone, spr.subject_id AS subjectId
|
||||
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="registerJson" parameterType="string" resultType="long">
|
||||
WITH src AS (SELECT row_number() OVER () AS rn,
|
||||
subject_id,
|
||||
|
|
|
|||
|
|
@ -39,6 +39,45 @@
|
|||
WHERE phone = #{phone}
|
||||
</select>
|
||||
|
||||
<select id="findByFid" resultMap="PhoneMap">
|
||||
select id,
|
||||
fid,
|
||||
phone,
|
||||
name_1,
|
||||
first,
|
||||
middle,
|
||||
birth_dt,
|
||||
ser_num,
|
||||
id_type,
|
||||
flag_debt5000,
|
||||
flag_90_12,
|
||||
searched_at,
|
||||
calculated_at
|
||||
FROM signals_phones_map
|
||||
WHERE fid = #{fid}
|
||||
</select>
|
||||
|
||||
<select id="findByFids" resultMap="PhoneMap">
|
||||
select id,
|
||||
fid,
|
||||
phone,
|
||||
name_1,
|
||||
first,
|
||||
middle,
|
||||
birth_dt,
|
||||
ser_num,
|
||||
id_type,
|
||||
flag_debt5000,
|
||||
flag_90_12,
|
||||
searched_at,
|
||||
calculated_at
|
||||
FROM signals_phones_map
|
||||
WHERE fid in
|
||||
<foreach item='fid' collection='fids' open='(' separator=',' close=')'>
|
||||
#{fid}
|
||||
</foreach>
|
||||
</select>
|
||||
|
||||
<select id="searchedAtLessThan" resultMap="PhoneMap">
|
||||
select id,
|
||||
fid,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue