客户费率调整

This commit is contained in:
gongpei
2025-12-30 11:03:30 +08:00
committed by zheng.zhang
parent 3867c0cf8f
commit 7336fdaf70
3 changed files with 21 additions and 125 deletions
+6 -109
View File
@@ -14,6 +14,7 @@ using OfficeOpenXml;
using YieldChain.Commons;
using YLErp.Abstract;
using Microsoft.Extensions.DependencyInjection;
using YLErp.Cache;
namespace YLErp.Modules.SwapModule
{
@@ -75,7 +76,7 @@ namespace YLErp.Modules.SwapModule
/// </summary>
/// <param name="req"></param>
/// <exception cref="Exception"></exception>
public void SaveSwapRate(SwapRate req)
public void SaveSwapRate(SwapRate req, IYLCache ylCache)
{
var changeClient = DataCacheProvider.GetClientDataSource().GetData(req.ClientId);
req.ClientNumber = changeClient?.Number;
@@ -112,6 +113,9 @@ namespace YLErp.Modules.SwapModule
// swapRate.BackDeskChargeIsPercent = req.BackDeskChargeIsPercent;
swapRate.OfflineRate = req.OfflineRate;
swapRate.SetOpt(UserId, UserName);
// 盘中修改了阶梯费率,存储到redis中
ylCache.StringSetWithNoPrefix<string>("TRS:Update:ClientRate:" + swapRate.ClientId, swapRate.id, TimeSpan.FromHours(8));
}
else
{
@@ -357,113 +361,6 @@ namespace YLErp.Modules.SwapModule
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
return new ExcelTemplateGenerator().SetTemplateFile(sourceFileName).SetTemplateData(modelDict).Output();
}
/// <summary>
/// 将最新的费率发送到kafka
/// </summary>
/// <param name="clientId"></param>
/// <param name="kafkaProvider"></param>
public void SendSwapRateToKafka(int clientId)
{
var swapRate = GetClientSwapRate(clientId);
if (swapRate == null)
{
swapRate = new SwapRate()
{
ClientId = clientId,
};
}
var monthStart = GetMonthStart();
var clientPosiNotional = DbContext.trade.Where(x => x.TradeDate >= monthStart
&& x.ValidState != ConsGlobal.InValid
&& x.TradeType == "收益互换"
&& x.ClientId == clientId
&& ConsTrade.TradeStatusCustomexport.Contains(x.TradeStatus)).ToList().Sum(s => s.OriginalStockEqvNotional ?? 0);
SendToKafka(swapRate, clientPosiNotional);
}
public void SendAllSwapRateToKafka()
{
var swapRates = DbContext.swap_rate.Where(x => x.TakeEffectDate <= DateTime.Now.Date).ToList().GroupBy(g => g.ClientId).Select(g => g.OrderByDescending(o => o.TakeEffectDate).FirstOrDefault()).ToList();
var swapRateAll = DbContext.swap_rate
.Where(x => x.ClientId == 0 && x.TakeEffectDate <= DateTime.Now.Date)
.OrderByDescending(o => o.TakeEffectDate)
.FirstOrDefault();
var monthStart = GetMonthStart();
// 预计算客户持仓总额(在数据库端完成聚合)
var posiNotionalValues = DbContext.trade
.Where(x => x.TradeDate >= monthStart &&
x.ValidState != ConsGlobal.InValid &&
x.TradeType == "收益互换" &&
ConsTrade.TradeStatusCustomexport.Contains(x.TradeStatus))
.GroupBy(x => x.ClientId)
.Select(g => new
{
ClientId = g.Key,
Total = g.Sum(s => s.OriginalStockEqvNotional ?? 0)
})
.AsNoTracking()
.ToDictionary(x => x.ClientId, x => x.Total);
using ClientDBContext clientDBContext = new ClientDBContext();
var clients = clientDBContext.client.Where(x => x.ProcessStatus == "已开户").AsQueryable().ToList();
foreach (var client in clients)
{
SwapRate swapRate = swapRates.FirstOrDefault(s => s.ClientId == client.id);
if (swapRate == null)
{
swapRate = swapRateAll;
}
if (swapRate == null)
{
swapRate = new SwapRate() { ClientId = client.id };
}
else
{
swapRate.ClientId= client.id;
}
posiNotionalValues.TryGetValue(client.id, out var clientPosiNotional);
SendToKafka(swapRate,clientPosiNotional);
}
}
/// <summary>
/// 获取月初
/// </summary>
/// <returns></returns>
private DateTime GetMonthStart()
{
DateTime currentDate = DateTime.Today; // 获取当前日期(包括当前年月日)
DateTime monthStart = new DateTime(currentDate.Year, currentDate.Month, 1);
return monthStart;
}
private void SendToKafka(SwapRate swapRate, double clientPosiNotional)
{
SwapRateKafkaModel swapRateKafkaModel = new SwapRateKafkaModel();
swapRateKafkaModel.clientId = swapRate.ClientId;
//swapRateKafkaModel.frontDeskCharge = swapRate.FrontDeskCharge ?? 0;
//swapRateKafkaModel.isFrontDeskChargePercent = swapRate.FrontDeskChargeIsPercent ?? true;
//swapRateKafkaModel.backDeskCharge = swapRate.BackDeskCharge ?? 0;
//swapRateKafkaModel.isBackDeskChargePercent = swapRate.BackDeskChargeIsPercent ?? true;
if (swapRate.TempRate.HasValue)
{
swapRateKafkaModel.isRate = swapRate.TempRateIsPercent;
swapRateKafkaModel.rate = swapRate.TempRate ?? 0;
}
else
{
swapRateKafkaModel.isRate = swapRate.BaseRateIsPercent;
swapRateKafkaModel.rate = swapRate.BaseRate ?? 0;
swapRateKafkaModel.disRateDown = swapRate.DiscountAccDown ?? 0;
if (swapRate.DiscountAccDown.HasValue && Convert.ToDecimal(clientPosiNotional) >= swapRateKafkaModel.disRateDown)
{
swapRateKafkaModel.isDisRate = swapRate.DiscountRateIsPercent;
swapRateKafkaModel.disRate = swapRate.DiscountRate ?? 0;
swapRateKafkaModel.rate = swapRateKafkaModel.disRate;
}
}
kafkaProduceHelper.Produce(Environment.GetEnvironmentVariable("KafkaConfig_ClientRateTopic"), JsonConvert.SerializeObject(swapRateKafkaModel));
}
private SwapRate GetClientSwapRate(int clientId)
{
return DbContext.swap_rate.Where(x => x.ClientId == clientId && x.TakeEffectDate <= DateTime.Now.Date).OrderByDescending(o => o.TakeEffectDate).FirstOrDefault();
}
}
}