From f935aa679779c49d576a168c02a39d1ce977070f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=96=B9=E6=B5=B7?= Date: Wed, 5 Jun 2024 15:46:36 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E6=97=B6=E6=8C=81=E4=BB=93=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=EF=BC=8C=E8=B5=84=E9=87=91=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RealTimeClientBanlanceService.cs | 4 +- .../PayoffSwapCalcService.cs | 4 +- .../ClientNoDMABalanceTask.cs | 72 ++++++++++++++----- .../appsettings.json | 20 ++---- 4 files changed, 63 insertions(+), 37 deletions(-) diff --git a/YLErpDAL/BLL/EodSettlement/RealTimeClientBanlanceService.cs b/YLErpDAL/BLL/EodSettlement/RealTimeClientBanlanceService.cs index 6b3ad5bc..cf069486 100644 --- a/YLErpDAL/BLL/EodSettlement/RealTimeClientBanlanceService.cs +++ b/YLErpDAL/BLL/EodSettlement/RealTimeClientBanlanceService.cs @@ -53,11 +53,11 @@ namespace YLErp.BLL.Eod /// 获取DMA资金 /// /// - public IEnumerable GetDMABalances() + public IEnumerable GetBalances() { using var clientDb = new ClientDBContext(); - var dmaClients = clientDb.client.Where(x => x.SwapTradeType == 1).ToList(); + var dmaClients = clientDb.client.ToList(); var clientIds = dmaClients.Select(s => s.id); return GetBanlances(clientIds, valuedateBLL.ValueDate, calcDate: valuedateBLL.ValueDate); } diff --git a/YLErpDAL/Modules/CalculationModule/PayoffSwapCalcService.cs b/YLErpDAL/Modules/CalculationModule/PayoffSwapCalcService.cs index 920730f5..95d1ffe9 100644 --- a/YLErpDAL/Modules/CalculationModule/PayoffSwapCalcService.cs +++ b/YLErpDAL/Modules/CalculationModule/PayoffSwapCalcService.cs @@ -175,8 +175,8 @@ namespace YLErp.Modules.CalculationModule if (data.IsBond()) { var bondPrice = EodPriceQueryService.GetBondPrice(valuedateBLL.ValueDate, data.UnderlyingCode); - vobp = bondPrice.Vobp ?? 0; - var price = Convert.ToDecimal(bondPrice.ClosePrice); + vobp = bondPrice?.Vobp ?? 0; + var price = Convert.ToDecimal(bondPrice?.ClosePrice??0); eodSwap.FloatingPnL = (price - item.PosiGrossPrice) * item.PosiQuantity * item.ContractSize * shortRatio * directionRatio; } } diff --git a/YLWinSer/RealTimeCalcPositionService/ClientNoDMABalanceTask.cs b/YLWinSer/RealTimeCalcPositionService/ClientNoDMABalanceTask.cs index 787f8bcd..2d5e32b8 100644 --- a/YLWinSer/RealTimeCalcPositionService/ClientNoDMABalanceTask.cs +++ b/YLWinSer/RealTimeCalcPositionService/ClientNoDMABalanceTask.cs @@ -15,10 +15,12 @@ using YLErp.Abstract; using YLErp.BLL; using YLErp.BLL.Eod; using YLErp.Cache; +using YLErp.DBModels; using YLErp.Helpers; using YLErp.Model; using YLErp.Modules; using YLErp.Modules.ClientModule; +using YLErp.Modules.EodModule.QueryModule; namespace RealTimeCalcPositionService { @@ -26,11 +28,16 @@ namespace RealTimeCalcPositionService { private readonly IYcLogger _logger; private readonly CancellationTokenSource _cts = new CancellationTokenSource(); + private IKafkaProduce kafkaProduceHelper; + private string onRspAccountCapitalTopicTopic = string.Empty; + private Dictionary clientDic = new Dictionary(); private IYLCache _yLCache; - public ClientNoDMABalanceTask(IYLCache yLCache) + public ClientNoDMABalanceTask(IKafkaProduce kafkaProduce, IYLCache yLCache) { _logger = LogFactory.GetLogger("ClientNoDMABalanceTask"); - _yLCache= yLCache; + onRspAccountCapitalTopicTopic = Environment.GetEnvironmentVariable("KafkaConfig_OnRspAccountCapitalTopic"); + kafkaProduceHelper = kafkaProduce; + _yLCache = yLCache; } public void Dispose() { @@ -49,27 +56,58 @@ namespace RealTimeCalcPositionService try { using var clientDb = new ClientDBContext(); - var clients= clientDb.client.Where(x=>x.SwapTradeType==0).ToList(); + var clients= clientDb.client.ToList(); //系统交易日 var valuedate = valuedateBLL.ValueDate; - foreach (var client in clients) + var clientSettles = new RealTimeClientBanlanceService(new OptUserInfo(0, "实时客户资金服务", OptUserFrom.Service)).GetBalances(); + foreach (var cb in clientSettles) { - var cb = ClientAssetDataService.GetClientLatestBalance(null, valuedate, client.id, false, false, false); cb.AvailableAmount = cb.AmountFund + cb.TotalCredit + cb.PayableMargin + cb.GuaranteesTotalAmount; - var obj = new ClientBalanceForTrsResponse + Result result = new Result(); + try { - TotalAmountTotal = cb.RoundedTotalAmountTotal, - AvailableAmount = Math.Round(cb.AvailableAmount, 2), - PositionPv = cb.RoundedPositionPv, - PositionPnl = cb.RoundedPositionPnl, - DaliyPnl = Math.Round(cb.DaliyPnl, 2), - ClientId = client.id, - ClientType = cb.ClientType, - Credit = cb.TotalCredit - }; - if (_yLCache != null) + var obj = new ClientBalanceForTrsResponse + { + TotalAmountTotal = cb.RoundedTotalAmount, + AvailableAmount = Math.Round(cb.AvailableAmount, 2), + PositionPv = cb.RoundedPositionPv, + PositionPnl = cb.RoundedPositionPnl, + DaliyPnl = Math.Round(cb.DaliyPnl, 2), + ClientId = cb.ClientId, + ClientType = cb.ClientType, + Credit = cb.TotalCredit + }; + result.success = true; + result.obj = obj; + if (_yLCache != null) + { + _yLCache.StringSet("ClientBalance:" + cb.ClientId, obj); + } + } + catch (Exception ex) { - _yLCache.StringSet("ClientBalance:" + cb.ClientId, obj); + result.msg = ex.Message; + result.success = false; + } + string resultStr = JsonConvert.SerializeObject(result); + string newEncryStr = DataProtectHelper.Encrypt(resultStr); + bool needProduce = false; + if (clientDic.TryGetValue(cb.ClientId, out string encryStr)) + { + if (encryStr != newEncryStr) + { + needProduce = true; + clientDic[cb.ClientId] = newEncryStr; + } + } + else + { + clientDic.Add(cb.ClientId, newEncryStr); + needProduce = true; + } + if (needProduce) + { + kafkaProduceHelper.Produce(onRspAccountCapitalTopicTopic, resultStr); } } Thread.Sleep(3000); diff --git a/YLWinSer/RealTimeCalcPositionService/appsettings.json b/YLWinSer/RealTimeCalcPositionService/appsettings.json index 5e028392..09f5757b 100644 --- a/YLWinSer/RealTimeCalcPositionService/appsettings.json +++ b/YLWinSer/RealTimeCalcPositionService/appsettings.json @@ -16,10 +16,10 @@ } }, "ConnectionStrings": { - "ylcms": "server=221.229.106.161;uid=roottest;pooling=true;port=20306;pwd=YieldChain!@#$2020;database=yltrs_ylcms;charset=utf8;Allow User Variables=True;SslMode=none;Connection Timeout=30;IgnoreCommandTransaction=true;", - "yladmin": "server=221.229.106.161;uid=roottest;pooling=true;port=20306;pwd=YieldChain!@#$2020;database=yltrs_admin;charset=utf8;Allow User Variables=True;SslMode=none;Connection Timeout=30;IgnoreCommandTransaction=true;", - "ylclient": "server=221.229.106.161;uid=roottest;pooling=true;port=20306;pwd=YieldChain!@#$2020;database=yltrs_client;charset=utf8;Allow User Variables=True;SslMode=none;Connection Timeout=30;IgnoreCommandTransaction=true;", - "bondoms": "server=221.229.106.161;uid=roottest;pooling=true;port=20306;pwd=YieldChain!@#$2020;database=bond_oms;charset=utf8;Allow User Variables=True;SslMode=none;Connection Timeout=30;IgnoreCommandTransaction=true;" + "ylcms": "server=139.196.109.225;uid=root;pooling=true;port=3306;pwd=Midnight001!@#$;database=yltrs_ylcms;charset=utf8;Allow User Variables=True;SslMode=none;Connection Timeout=30;IgnoreCommandTransaction=true;", + "yladmin": "server=139.196.109.225;uid=root;pooling=true;port=3306;pwd=Midnight001!@#$;database=yltrs_admin;charset=utf8;Allow User Variables=True;SslMode=none;Connection Timeout=30;IgnoreCommandTransaction=true;", + "ylclient": "server=139.196.109.225;uid=root;pooling=true;port=3306;pwd=Midnight001!@#$;database=yltrs_client;charset=utf8;Allow User Variables=True;SslMode=none;Connection Timeout=30;IgnoreCommandTransaction=true;", + "bondoms": "server=139.196.109.225;uid=root;pooling=true;port=3306;pwd=Midnight001!@#$;database=bond_oms;charset=utf8;Allow User Variables=True;SslMode=none;Connection Timeout=30;IgnoreCommandTransaction=true;" }, "AppSettings": { "RunInterval": "1000", @@ -36,19 +36,7 @@ "HedgingAccountTopic": "ylHedgingAccountTopic", //对冲账户生产topic "ReqAccountCapitalTopic": "ReqAccountCapital", //账户资金请求topic "OnRspAccountCapitalTopic": "OnRspAccountCapital", //账户资金请求返回topic - "ReqInterestRateSwapInsertTopic": "ReqInterestRateSwapInsert", //收益互换交易推送请求topic - "OnRspInterestRateSwapInsertTopic": "OnRspInterestRateSwapInsert", //收益互换交易推送请求响应topic - "OnRspInterestRateSwapInsertTopicGroupId": "OnRspInterestRateSwapInsertConsumer", //收益互换交易推送请求响应消费组 "AccountCapitalTopicGroupId": "YiLian_OnRspAccountCapitalConsumer", //账户资金消费组 - "ReqAssetSwapInsertTopic": "ReqAssetSwapInsert", //互换资产交易推送请求 - "OnRspAssetSwapInsertTopic": "OnRspAssetSwapInsert", //互换资产交易推送请求响应 - "OnRspAssetSwapInsertTopicGroupId": "OnRspAssetSwapInsertConsumer", //互换资产交易推送请求响应消费组 - "ReqMarginInsertTopic": "ReqMarginInsert", //预付金交易推送请求 - "OnRspMarginInsertTopic": "OnRspMarginInsert", //预付金交易推送请求响应 - "OnRspMarginInsertTopicGroupId": "OnRspMarginInsertConsumer", //预付金交易推送请求响应消费组 - "ReqAcctSwapTerminateTopic": "ReqAcctSwapTerminate", //平仓推送请求 - "OnRspAcctSwapTerminateTopic": "OnRspAcctSwapTerminate", //平仓推送请求响应 - "OnRspAcctSwapTerminateTopicGroupId": "OnRspAcctSwapTerminateConsumer", //平仓推送请求响应消费组 "ReqCalcBondTopic": "ReqCalcBond", //互换成交收益率计算器topic "OnRspCalcBondTopic": "OnRspCalcBond", //互换成交收益率计算器消费topic "OnRspCalcBondTopicGroupId": "OnRspCalcBondConsumer", //互换成交收益率计算器消费topic消费组