Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
ialbert 2023-01-31 20:09:36 +03:00
commit fc56cbe360
14 changed files with 124 additions and 78 deletions

View file

@ -6,7 +6,6 @@ import io.swagger.annotations.ApiModelProperty;
import ru.spcex.clearing.backendapi.domain.actions.IAction;
import ru.spcex.clearing.backendapi.errors.BackEndError;
import ru.spcex.clearing.platform.messaging.domain.ActionType;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportWithPeriodRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
import ru.spcex.platform.enumeration.Task;
import ru.spcex.platform.utils.enumeration.EnumMessage;
@ -31,18 +30,12 @@ public class LauncherNew implements IAction<Object> {
@Override
public Object toRequest() {
if (Task.createReport_GREP.equalsByKey(task)) {
ReportWithPeriodRequest reportCommand = new ReportWithPeriodRequest();
reportCommand.setReportId(task);
return reportCommand;
} else {
LauncherCommandRequest taskRunnerCommandRequest = new LauncherCommandRequest();
taskRunnerCommandRequest.setTaskName(task);
taskRunnerCommandRequest.setCompanyId(companyId);
taskRunnerCommandRequest.setSecurityId(securityId);
taskRunnerCommandRequest.setUserId(userId);
return taskRunnerCommandRequest;
}
LauncherCommandRequest taskRunnerCommandRequest = new LauncherCommandRequest();
taskRunnerCommandRequest.setTaskName(task);
taskRunnerCommandRequest.setCompanyId(companyId);
taskRunnerCommandRequest.setSecurityId(securityId);
taskRunnerCommandRequest.setUserId(userId);
return taskRunnerCommandRequest;
}
@Override

View file

@ -21,7 +21,7 @@ import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.ActionType;
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.platform.messaging.domain.Consts;
import ru.spcex.clearing.platform.messaging.domain.cud.registry.CoveredDealRegisterNewRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.registry.DealRegisterNewRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.securitites.MoneyMarketSecurityNewRequest;
import ru.spcex.platform.enumeration.Allowed;
import ru.spcex.platform.enumeration.Market;
@ -85,8 +85,9 @@ public class ExecutionDepositComponent {
/**
* Сбрасывать каждый день в 01:00:01 "0 1 0 1 * ?"
*/
@Scheduled(cron = "${clearing-service.scheduler.check-s-trade}")
@Scheduled(cron = "0 1 0 1 * ?")
public void resetTradingDay() {
log.trace("Recheck today trading day for search STrade. Current state: tradeNum={}, tradeDat={}", tradeNum, tradingDay);
Instant today = TimeUtil.localDateToInstant(LocalDate.now());
if (tradingDay == null || !tradingDay.equals(today)) {
tradeNum = -1L;
@ -95,8 +96,9 @@ public class ExecutionDepositComponent {
log.info("Reset trading day for search STrade: tradeNum={}, tradeDat={}", tradeNum, tradingDay);
}
@Scheduled(cron = "${clearing-service.scheduler.check-s-trade}")
public void processNewTS() {
Long tradeNum = -1L; // todo уточнить как он обновляется
log.debug("Start check new S_TRADE. Start tradeNum={}", tradeNum);
ImdgPredicateBuilder pb = sTradeImdg.predicateBuilder();
ImdgPredicate sql = pb.and(pb.greater("tradeNum", tradeNum), pb.greatEqual("tradeDateTime", tradingDay));
Collection<STrade> sTrades = sTradeImdg.getCollectionObjectsByPredicate(sql);
@ -166,7 +168,7 @@ public class ExecutionDepositComponent {
Long newMaxTradeNum = sTrades.stream().mapToLong(STrade::getTradeNum).max().orElseGet(() -> tradeNum);
log.debug("Next tradeNum is {}", newMaxTradeNum);
log.info("Process completed. Next tradeNum is {}", newMaxTradeNum);
}
protected void verification(ExecutionDeposit forED) throws ClearingException {
@ -236,26 +238,13 @@ public class ExecutionDepositComponent {
}
protected void sendNotification(ExecutionDeposit forED) {
final String destination = Consts.REGISTRY_COVERED_DEAL_REGISTER_NEW;
CoveredDealRegisterNewRequest requestPayload = new CoveredDealRegisterNewRequest();
final String destination = Consts.REGISTRY_DEAL_REGISTER_NEW;
DealRegisterNewRequest requestPayload = new DealRegisterNewRequest();
requestPayload.setExecutionId(forED.getId());
// requestPayload.setCompanyFullName(forED.getCompanyFullName());
requestPayload.setTradingDate(forED.getTradingDate());
requestPayload.setClearingDate(forED.getClearingDate());
requestPayload.setExchangeExecutionId(forED.getExchangeExecutionId());
requestPayload.setExchangeExecutionTime(forED.getExchangeExecutionTime());
requestPayload.setSecuritySymbol(forED.getSecuritySymbol());
requestPayload.setSecurityFullName(forED.getSecurityFullName());
// requestPayload.setSellerFullName(forED.getSellerFullName());
// requestPayload.setSellerClearingCode(forED.getSellerClearingCode());
// String requestPayload.setSellerAccount(forED.getAccountId());
// String requestPayload.setBuyerFullName(forED.getBuyerFullName());
// requestPayload.setBuyerClearingCode(forED.getBuyerClearingCode());
// String requestPayload.setBuyerAccount(forED.getBuyerAccount());
// BigDecimal requestPayload.setAmount(forED.getAmount());
requestPayload.setId(idGenerator.nextId());
requestPayload.setCreatedAt(forED.getCreated());
requestPayload.setUpdatedAt(forED.getUpdated());
requestPayload.setClearingDate(forED.getClearingDate());
// requestPayload.setId(idGenerator.nextId());
BaseRequest<Object> request = new BaseRequest<>();
request.setId(idGenerator.nextId());

View file

@ -20,4 +20,4 @@ clearing-service.kafka-producer.linger-ms=1
clearing-service.kafka-producer.buffer-memory=33554432
clearing-service.scheduler.check-payment-instruction=*/5 * * * * *
clearing-service.scheduler.check-s-trade=0 1 0 1 * ?
clearing-service.scheduler.check-s-trade=0 * 0 1 * ?

View file

@ -8,7 +8,7 @@ import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportWithPeriodRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
import ru.spcex.clearing.platform.messaging.service.QueueConsumer;
import ru.spcex.clearing.reports.config.element.ReportsServiceSettings;
import ru.spcex.platform.enumeration.Task;
@ -40,20 +40,23 @@ public class QCommandExecutor extends QueueConsumer implements InitializingBean
@Override
public void afterPropertiesSet() {
log.info("Init queue listener {}", getClass().getSimpleName());
callback(ReportWithPeriodRequest.class)
callback(LauncherCommandRequest.class)
.setConsumer(this::newReportWithPeriod)
.forDestination(Task.createReport_GREP.topic(), callbacks::put);
init();
}
private void newReportWithPeriod(BaseRequest<ReportWithPeriodRequest> reportRequest) {
ReportWithPeriodRequest request = reportRequest.getRequestPayload();
private void newReportWithPeriod(BaseRequest<LauncherCommandRequest> reportRequest) {
LauncherCommandRequest request = reportRequest.getRequestPayload();
log.info("newReportWithPeriod request received: {}", request);
final String taskName = QUEUE_RUN_REPORT_COMMAND; //request.getTaskName();
if (StringUtils.isBlank(request.getReportId()))
throw new IllegalStateException("ReportID is empty");
LocalDate startDate = request.getStartDate();
LocalDate endDate = request.getEndDate();
// if (StringUtils.isBlank(request.getReportId()))
// throw new IllegalStateException("ReportID is empty");
// LocalDate startDate = request.getStartDate();
// LocalDate endDate = request.getEndDate();
LocalDate startDate = null;
LocalDate endDate = null;
if (startDate == null && endDate == null) {
endDate = LocalDate.now();
startDate = LocalDate.of(endDate.getYear(), endDate.getMonth(), 1);
@ -65,18 +68,18 @@ public class QCommandExecutor extends QueueConsumer implements InitializingBean
throw new IllegalStateException("StartDate > EndDate");
try {
if (QUEUE_RUN_REPORT_COMMAND.equals(request.getReportId())
|| QUEUE_RUN_DAILY_REPORT_COMMAND.equals(request.getReportId())) {
log.info("Generate all report by command {}", request.getReportId());
reportsServiceCommand.generateReportAll(request.getReportId(), startDate, endDate);
if (QUEUE_RUN_REPORT_COMMAND.equals(taskName)
|| QUEUE_RUN_DAILY_REPORT_COMMAND.equals(taskName)) {
log.info("Generate all report by command {}", taskName);
reportsServiceCommand.generateReportAll(taskName, startDate, endDate);
} else {
log.info("Generate single report by command {}", request.getReportId());
reportsServiceCommand.generateReportById(request.getReportId(), startDate, endDate);
log.info("Generate single report by command {}", taskName);
reportsServiceCommand.generateReportById(taskName, startDate, endDate);
}
log.debug("successfully processed");
} catch (IOException e) {
log.error("Error create report {}: {}", request.getReportId(), ExceptionUtils.getStackTrace(e));
log.error("Error create report {}: {}", taskName, ExceptionUtils.getStackTrace(e));
}
}

View file

@ -20,9 +20,9 @@ public abstract class ReportWithPeriodCollector<T extends AbstractReport> extend
LocalDate startDate,
LocalDate endDate) {
ImdgPredicateBuilder pb = liabilitiesClaimsAssetsImdg.predicateBuilder();
Instant dateTimeLo = toInstantStartDay(startDate);
Instant dateTimeHi = toInstantStartDay(endDate);
ImdgPredicate p = pb.and(pb.greatEqual("refundDate", dateTimeLo), pb.lessEqual("refundDate", dateTimeHi));
// Instant dateTimeLo = toInstantStartDay(startDate);
// Instant dateTimeHi = toInstantEndDay(endDate);
ImdgPredicate p = pb.and(pb.greatEqual("refundDate", startDate), pb.lessEqual("refundDate", endDate));
Collection<LiabilitiesClaimsAssets> liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsByPredicate(p);
return liabilities;
}
@ -31,9 +31,9 @@ public abstract class ReportWithPeriodCollector<T extends AbstractReport> extend
LocalDate startDate, LocalDate endDate,
Long allowClearingStatusId) {
ImdgPredicateBuilder pb = liabilitiesClaimsAssetsImdg.predicateBuilder();
Instant dateTimeLo = toInstantStartDay(startDate);
Instant dateTimeHi = toInstantStartDay(endDate);
ImdgPredicate p = pb.and(pb.greatEqual("refundDate", dateTimeLo), pb.lessEqual("refundDate", dateTimeHi),
// Instant dateTimeLo = toInstantStartDay(startDate);
// Instant dateTimeHi = toInstantEndDay(endDate);
ImdgPredicate p = pb.and(pb.greatEqual("refundDate", startDate), pb.lessEqual("refundDate", endDate),
pb.equals("clearingStatus", allowClearingStatusId));
Collection<LiabilitiesClaimsAssets> liabilities = liabilitiesClaimsAssetsImdg.getCollectionObjectsByPredicate(p);
return liabilities;

View file

@ -45,7 +45,7 @@ public class ReportBR_0420314_P2_Collector extends ReportWithPeriodCollector<Rep
Collection<PaymentInstruction> searchPaymentInstruction(LocalDate startDate, LocalDate endDate) {
ImdgPredicateBuilder pb = paymentInstructionImdg.predicateBuilder();
Instant dateTimeLo = toInstantStartDay(startDate);
Instant dateTimeHi = toInstantStartDay(endDate);
Instant dateTimeHi = toInstantEndDay(endDate);
ImdgPredicate p = pb.and(pb.greatEqual("created", dateTimeLo), pb.lessEqual("created", dateTimeHi));
Collection<PaymentInstruction> paymentInstructionsAll = paymentInstructionImdg.getCollectionObjectsByPredicate(p);
return paymentInstructionsAll;

View file

@ -35,7 +35,7 @@ public class ReportBR_0420317_Collector extends ReportWithPeriodCollector<Report
Collection<Relation> searchRelation(LocalDate startDate, LocalDate endDate, String service) {
ImdgPredicateBuilder pb = relationImdg.predicateBuilder();
Instant dateTimeLo = toInstantStartDay(startDate);
Instant dateTimeHi = toInstantStartDay(endDate);
Instant dateTimeHi = toInstantEndDay(endDate);
ImdgPredicate p = pb.and(pb.greatEqual("updated", dateTimeLo), pb.lessEqual("updated", dateTimeHi),
pb.equals("service", service));
Collection<Relation> relations = relationImdg.getCollectionObjectsByPredicate(p);

View file

@ -49,8 +49,8 @@ public class ReportPA_B_Collector extends ReportWithPeriodCollector<ReportPA_B>
ImdgPredicateBuilder builder = liabilitiesClaimsAssetsImdg.predicateBuilder();
ImdgPredicate refundDatePredicate = builder.and(
builder.greatEqual("refundDate", toInstantStartDay(startDate)),
builder.lessEqual("refundDate", toInstantStartDay(endDate))
builder.greatEqual("refundDate", (startDate)),
builder.lessEqual("refundDate", (endDate))
);
ImdgPredicate companyIdPredicates = builder.in("companyId", companyIds.toArray(new Comparable[0]));
ImdgPredicate finalPredicate = builder.and(refundDatePredicate, companyIdPredicates);

View file

@ -55,8 +55,8 @@ public class ReportPA_IV_Collector extends ReportWithPeriodCollector<ReportPA_IV
ImdgPredicateBuilder builder = liabilitiesClaimsAssetsImdg.predicateBuilder();
ImdgPredicate refundDatePredicate = builder.and(
builder.greatEqual("refundDate", toInstantStartDay(startDate)),
builder.lessEqual("refundDate", toInstantStartDay(endDate))
builder.greatEqual("refundDate", (startDate)),
builder.lessEqual("refundDate", (endDate))
);
ImdgPredicate companyIdPredicates = builder.in("companyId", companyIds.toArray(new Comparable[0]));
ImdgPredicate finalPredicate = builder.and(refundDatePredicate, companyIdPredicates);

View file

@ -14,7 +14,7 @@ class AbstractReportCollectorTest extends AbstractReportCollector {
@Test
void testToString() {
AbstractReportCollectorTest instance = new AbstractReportCollectorTest();
assertEquals(null, instance.toString((Long) null));
assertEquals("", instance.toString((Long) null));
assertEquals("1", instance.toString((Long) 1L));
assertEquals("1230", instance.toString((Long) 1230L));
@ -23,7 +23,7 @@ class AbstractReportCollectorTest extends AbstractReportCollector {
@Test
void testToString1() {
AbstractReportCollectorTest instance = new AbstractReportCollectorTest();
assertEquals(null, instance.toString((Instant) null));
assertEquals("", instance.toString((Instant) null));
Instant val = Instant.ofEpochMilli(1672058774338L);
assertEquals("26.12.2022T15:46:14", instance.toString(val)); // msk timezone
}
@ -38,7 +38,7 @@ class AbstractReportCollectorTest extends AbstractReportCollector {
@Test
void testToString3() {
AbstractReportCollectorTest instance = new AbstractReportCollectorTest();
assertEquals(null, instance.toString((BigDecimal)null));
assertEquals("", instance.toString((BigDecimal)null));
assertEquals("0.00", instance.toString(BigDecimal.ZERO));
assertEquals("1.10", instance.toString(BigDecimal.valueOf(1.10)));
assertEquals("100.12", instance.toString(BigDecimal.valueOf(100.12)));
@ -49,7 +49,7 @@ class AbstractReportCollectorTest extends AbstractReportCollector {
@Test
void testToString4() {
AbstractReportCollectorTest instance = new AbstractReportCollectorTest();
assertEquals(null, instance.toString((Double) null));
assertEquals("", instance.toString((Double) null));
assertEquals("0.00", instance.toString(0.0));
assertEquals("1.10", instance.toString(1.10));
assertEquals("100.12", instance.toString(100.12));

View file

@ -10,7 +10,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import ru.spcex.clearing.platform.messaging.domain.ActionType;
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.reports.ReportWithPeriodRequest;
import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest;
import ru.spcex.platform.enumeration.Task;
import ru.spcex.platform.imdg.api.ImdgId;
@ -33,16 +32,10 @@ public class LauncherSender {
protected BaseRequest<Object> makeCmdRequest(Task byTask, Long userId) {
Object toRequest;
if (Task.createReport_GREP.equals(byTask)) { // см. ru.spcex.clearing.backendapi.controller.request.cud.schedule.LauncherNew#toRequest
ReportWithPeriodRequest reportCommand = new ReportWithPeriodRequest();
reportCommand.setReportId(byTask.getKey());
toRequest = reportCommand;
} else {
LauncherCommandRequest taskRunnerCommandRequest = new LauncherCommandRequest();
taskRunnerCommandRequest.setTaskName(byTask.getKey());
taskRunnerCommandRequest.setUserId(userId);
toRequest = taskRunnerCommandRequest;
}
LauncherCommandRequest taskRunnerCommandRequest = new LauncherCommandRequest();
taskRunnerCommandRequest.setTaskName(byTask.getKey());
taskRunnerCommandRequest.setUserId(userId);
toRequest = taskRunnerCommandRequest;
BaseRequest<Object> request = new BaseRequest<>();
request.setId(idGenerator.nextId());
request.setActionType(ActionType.NEW);

View file

@ -58,7 +58,7 @@ public class LauncherService extends QueueConsumer implements InitializingBean {
launcher.setUpdated(created);
launcherMap.insert(launcher);
log.debug("successfully processed, new id {}", launcher.getId());
kafkaProducer.send(new ProducerRecord<>("launcher-" + launcher.getTask(), req));
kafkaProducer.send(new ProducerRecord<>("launcher-" + launcher.getTask(), userRequest));
}
}

View file

@ -57,6 +57,7 @@ public interface Consts {
String REGISTRY_COVERED_DEAL_REGISTER_NEW = "registry-covered-deal-register-new";
String REGISTRY_ADMITTED_DEAL_REGISTER_NEW = "registry-admitted-deal-register-new";
String REGISTRY_DEAL_REGISTER_NEW = "registry-deal-register-new";
String REGISTRY_ORDER_REGISTER_NEW = "registry-order-register-new";
String REGISTRY_CONTRACT_REGISTER_NEW = "registry-contract-register-new";

View file

@ -0,0 +1,67 @@
package ru.spcex.clearing.platform.messaging.domain.cud.registry;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.math.BigDecimal;
import java.time.Instant;
import java.time.LocalDate;
public class DealRegisterNewRequest {
@JsonProperty
public Long executionId;
@JsonProperty
public Long exchangeExecutionId;
@JsonProperty
public Instant exchangeExecutionTime;
@JsonProperty
public Long id;
@JsonProperty
public LocalDate clearingDate;
public Long getExecutionId() {
return executionId;
}
public void setExecutionId(Long executionId) {
this.executionId = executionId;
}
public Long getExchangeExecutionId() {
return exchangeExecutionId;
}
public void setExchangeExecutionId(Long exchangeExecutionId) {
this.exchangeExecutionId = exchangeExecutionId;
}
public Instant getExchangeExecutionTime() {
return exchangeExecutionTime;
}
public void setExchangeExecutionTime(Instant exchangeExecutionTime) {
this.exchangeExecutionTime = exchangeExecutionTime;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public LocalDate getClearingDate() {
return clearingDate;
}
public void setClearingDate(LocalDate clearingDate) {
this.clearingDate = clearingDate;
}
}