客户费率调整
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user