using System.Diagnostics; namespace YLErp.Modules.TradeRiskCalcModule { /// /// /// class TradeRiskCalcTest { public void Execute(TradeRiskCalcTestRequest request) { AppContext.SetSwitch("DisableTradeRiskCalcTaskRunner", true); if (string.IsNullOrWhiteSpace(request.VolType)) { request.VolType = "对冲"; } var request2 = new TradeRiskCalcTestRequest2 { TradeType = request.TradeType, UnderlyingCodes = (request.UnderlyingCode ?? string.Empty).Split(new[] { ',', ',' }, StringSplitOptions.RemoveEmptyEntries), IncludeExchange = request.IncludeExchange }; try { if (!string.IsNullOrWhiteSpace(request.TradeNumber)) { var trad = DbContextFactory.GetYLDbContext().trade.FirstOrDefault(n => n.TradeNumber == request.TradeNumber); if (trad == null) { throw new ServiceException("没有找到交易数据,交易编号:" + request.TradeNumber); } request2 = new TradeRiskCalcTestRequest2 { TradeId = trad.id, ClientId = trad.ClientId, AssetBookId = trad.AssetId, UnderlyingCodes = new[] { trad.UnderlyingCode }, TradeType = trad.TradeType }; } else { if (!string.IsNullOrWhiteSpace(request.ClientName)) { var clientId = DataCacheProvider.GetClientDataSource().AsQueryable().Where(n => n.Name == request.ClientName) .Select(n => (int?)n.id).FirstOrDefault() ?? 0; if (clientId == 0) { Trace.WriteLine("[ERROR]未获取到ClientID:" + request.ClientName, "实时风险调试"); } request2.ClientId = clientId; } } var context = new TradeRiskCalcTestContext(request, request2); var tradeDataSource = new TradeDataSource(request.ValueDate, request2) { Trace = context.Trace }; var service = new TradeRiskCalcService(context, request.Skip_TradeType); var list = service.Calculate(tradeDataSource, null); var riskReqModel = new TradingRiskReqModel { IncludeStock = true, VolType = request.VolType, AssetTypes = new[] { request2.TradeType }, BookIds = new List() { request2.AssetBookId }, ClientIds = new List() { request2.ClientId }, UnderlyingCodes = request2.UnderlyingCodes }; riskReqModel.Normalize(); var result = TradingRiskReqService.GroupingResults( new TradingRiskResult { ValueDate = context.ValueDate, PreDate = context.PreSettleDate, TradeRiskList = list, }, riskReqModel); context.Trace.WriteData(result, "执行结果数据"); context.Trace.WriteLine("结束!!!"); } catch (Exception ex) { MessageBox.Show("发生错误:" + ex.ToString()); } } //public void CompareWithOldVersion() //{ // var trace = new TraceWrap("新旧版本风险比较"); // var request = new TradeRiskCalcTestRequest // { // VolType = "持仓", // ValueDate = BLL.valuedateBLL.ValueDate // }; // var request2 = new TradeRiskCalcTestRequest2 // { // //TradeId= 113565 // }; // var context = new TradeRiskCalcTestContext(request, request2); // var tradeDataSource = new TradeDataSource(request.ValueDate, request2) { Trace = context.Trace }; // var service1 = new TradeRiskCalcServiceOld(context); // var list1 = service1.Calculate(tradeDataSource); // Trace.WriteLine("旧版本计算结果条数:" + list1.Count()); // tradeDataSource = new TradeDataSource(request.ValueDate, request2) { Trace = context.Trace }; // var service2 = new TradeRiskCalcService(context); // var list2 = service2.Calculate(tradeDataSource); // trace.WriteLine("新版本计算结果条数:" + list2.Count()); // var dic2 = list2.ToDictionary(n => n.TradeId); // CompareLogic compareLogic = new CompareLogic // { // Config = new ComparisonConfig // { // DoublePrecision = 1e-8, // MaxDifferences = 100 // } // }; // var checkset = new HashSet(); // foreach (var item1 in list1) // { // if (dic2.TryGetValue(item1.TradeId, out var item2)) // { // ComparisonResult result = compareLogic.Compare(item1, item2); // if (result.Differences.Any()) // { // trace.WriteData(item1, result.DifferencesString); // } // else // { // trace.WriteData(item1, $"{item1.TradeType}--{item1.TradeNumber}--{item1.ExchangeOptionCode??item1.UnderlyingCode}--相同"); // } // checkset.Add(item1.TradeId); // } // else // { // trace.WriteData(item1, "未找到新版本数据"); // } // } // foreach (var item2 in list2) // { // if (checkset.Add(item2.TradeId)) // { // trace.WriteData(item2, "未找到旧版本数据"); // } // } //} } }