This commit is contained in:
AKurakin 2024-08-20 19:15:35 +03:00
parent 1a2b284bd9
commit a0f99a2dc6

View file

@ -10,6 +10,7 @@ import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import ru.clearing.classes.statics.data.misc.Market;
import ru.clearing.classes.statics.data.misc.STrades;
import ru.clearing.classes.statics.data.scheduler.ClearingCalendar;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.platform.messaging.domain.cud.utilities.STradesImportedRequest;
import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender;
@ -25,8 +26,10 @@ import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.time.DayOfWeek;
import java.time.Instant;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
@ -34,6 +37,7 @@ import java.util.function.Consumer;
import java.util.function.Supplier;
import static ru.spcex.clearing.platform.messaging.domain.Consts.S_TRADES_IMPORTED;
import static ru.spcex.clearing.scheduler.ISchedulerChecker.isWorkDayByTradingCalendar;
import static ru.spcex.clearing.trade.importer.error.TradeImporterError.sTradesNotValid;
@Service
@ -42,6 +46,7 @@ public class TradeImporterService {
private final Logger log = LoggerFactory.getLogger(getClass());
private final Imdg<STrades> sTradesImdg;
private final Imdg<Market> marketImdg;
private final Imdg<ClearingCalendar> clearingCalendarImdg;
private final JdbcTemplate jdbcTemplate;
private final Supplier<KafkaSender> kafka;
private final IMessageResolver messageResolver;
@ -54,6 +59,7 @@ public class TradeImporterService {
imdgProvider.waitAvailable();
this.sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class);
this.marketImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_Market, Market.class);
this.clearingCalendarImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_ClearingCalendar, ClearingCalendar.class);
this.jdbcTemplate = jdbcTemplate;
this.kafka = kafka;
this.messageResolver = messageResolver;
@ -65,6 +71,17 @@ public class TradeImporterService {
}
public synchronized void process(boolean byCommand) {
if (!byCommand) {
LocalDate today = LocalDate.now();
log.debug("Verify trading day {} by calendar", today);
ClearingCalendar calendar = clearingCalendarImdg.getFirstObjectByFieldValues(Map.of("clearingDate", today));
boolean isWeekend = Arrays.asList(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY).contains(today.getDayOfWeek());
boolean isTradingDay = calendar == null ? !isWeekend : isWorkDayByTradingCalendar(calendar, isWeekend);
if (!isTradingDay) {
log.trace("Ignore by scheduler no trading day {}", today);
return;
}
}
log.info("Start process import STrades from DB. byCommand={}", byCommand);
if (log.isDebugEnabled()) {
String countQuery = String.format("SELECT count(*) FROM %s.Trades", schema);