feat: 新增TRS合约日终Kafka推送
- 在日终任务的逐日循环中,于当日收盘、风险监控和日终文件生成完成后, 按 valueDate 推送一条 TRS 合约全量快照;区间收盘逐日推送,空日推送空快照。 - 基于 eod_swap、trade、eod_swap_position、swap_position 组装合约字段, Kafka Key 使用 yyyy-MM-dd 格式的 valueDate。 - 新增带 Key 的 Kafka 发送重载;保留原有无 Key 发送及其吞异常行为,避免影响既有调用。 - 推送失败最多尝试 3 次;最终失败记录 Error 日志,并按 eod_swap.id 写入 push_status, 空快照失败使用 record_id=0。 - 增加 ContractTopic 配置,默认及各部署环境使用 onederiv.trs.contract.v1。 - 增加定向单测,覆盖空快照、区间逐日推送、重试成功、三次失败和字段映射。
This commit is contained in:
@@ -10,6 +10,12 @@ using YLErp.Modules.SystemModule;
|
||||
using YLErp.Modules.TradeDalModule;
|
||||
using YLErp.Modules.TradeModule.DealModule;
|
||||
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Options;
|
||||
using YieldChain.Commons;
|
||||
using YLErp.Abstract;
|
||||
using YLErp.Model;
|
||||
|
||||
namespace YLErp.Modules.EodModule.SettlementModule
|
||||
{
|
||||
/// <summary>
|
||||
@@ -445,12 +451,35 @@ where {nameof(t.TaskStartTime)}>'{startDateStr}' and {nameof(t.TaskState)}={(int
|
||||
}
|
||||
ClientBalanceUtility.saveClientRiskMonitor(eodTask.ValueDate);
|
||||
new EodFileService(this.OptUser).GenerateFileAfterEod(eodTask.ValueDate);
|
||||
PushTrsContractSnapshot(eodTask.ValueDate);
|
||||
//执行下一日
|
||||
eodTask.ValueDate = eodTask.ValueDate.AddDays(1);
|
||||
eodTask.TaskEndTime = DateTime.Now;
|
||||
}
|
||||
}
|
||||
|
||||
private void PushTrsContractSnapshot(DateTime valueDate)
|
||||
{
|
||||
try
|
||||
{
|
||||
var provider = YLServiceLocator.ServiceProvider;
|
||||
var kafkaProduce = provider?.GetService<IKafkaProduce>();
|
||||
var kafkaOptions = provider?.GetService<IOptions<KafkaConfig>>();
|
||||
if (kafkaProduce == null || kafkaOptions?.Value == null)
|
||||
{
|
||||
LogFactory.GetLogger("TRS合约日终Kafka推送").Error("Kafka service or configuration is unavailable");
|
||||
return;
|
||||
}
|
||||
|
||||
using var pushDbContext = DbContextFactory.GetYLDbContext();
|
||||
new TrsContractKafkaPushService(pushDbContext, kafkaProduce, kafkaOptions.Value.ContractTopic).Push(valueDate);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogFactory.GetLogger("TRS合约日终Kafka推送").Error($"TRS contract snapshot task failed, valueDate:{valueDate:yyyy-MM-dd}", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 查找第一个可用的任务
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user