using YLErp.BLL; using YLErp.Models; namespace YLErp.Modules.VolatilityModule.ApiModule { /// /// 曲面波动率提供(用于API服务) /// public class UnderlyingVolService : YLBaseService { public UnderlyingVolService(OptUserInfo userInfo) : base(userInfo) { } /// /// API获取波动率 /// public List GetUnderlyingVolSurfaces(BatchVolatilityRequest2 request) { request.TradeVolWithBidAsk = true; var vols = new VolatilityQueryService(this).GetVolatilities(request, false); if (request.VolType != "交易") { return vols.Select(x => new UnderlyingVol() { VolTable = x.VolTable, UnderlyingCode = x.ContractCode }).ToList(); } return vols.ToLookup(n => n.ContractCode).Select(n => new UnderlyingVol { UnderlyingCode = n.Key, VolTable = n.FirstOrDefault(y => y.VolType == "交易")?.VolTable, VolTableBid = n.FirstOrDefault(y => y.VolType == "报价Bid")?.VolTable, VolTableAsk = n.FirstOrDefault(y => y.VolType == "报价Ask")?.VolTable }).ToList(); } /// /// API保存波动率 /// public volatility SaveVolatility(volatility vol) { var targetUnderlying = underlying_managerBLL.GetByCode(vol.ContractCode); if (targetUnderlying != null) { vol.UnderlyingId = targetUnderlying.id; vol.ContractCode = targetUnderlying.UnderlyingCode; } if (string.IsNullOrEmpty(vol.Data)) { throw new ServiceException("缺少VolTable"); } var vols = new VolatilitySaveService(this).SaveVol(vol); return vols.FirstOrDefault(); } public class UnderlyingVol { public string UnderlyingCode { get; set; } public List VolTable { get; set; } public List VolTableBid { get; set; } public List VolTableAsk { get; set; } } } }