using BaseOUDAL; using YLErp.Model; using YLErp.Modules.DataProviderModule; using YLErp.Modules.RiskModule; using YLErp.QdpModule; namespace YLErp.Modules.SuperviseReportModule.XingZhengReport.Service { public class SuperviseReportSwapService : SuperviseReportBaseService { public SuperviseReportSwapService(OptUserInfo userInfo, SuperviseReportReq req) : base(userInfo, req) { } private SearchListResult ReportQuery(SuperviseReportReq req) { var query = from et in DbContext.eod_trade join risk in DbContext.eod_trade_risk on new { et.TradeId, et.ValueDate } equals new { risk.TradeId, risk.ValueDate } //join cfm in DbContext.trade_contract_r.Where(O => O.IsValid && O.Type == "交易确认书") //on et.TradeId equals cfm.TradeId into cfmTemp //from cfm in cfmTemp.DefaultIfEmpty() where et.ValueDate == req.ValueDate && et.TradeType == "收益互换" && et.TradeType != "现金流交易" orderby et.TradeId descending select new { et = new xodTradeBase() { TradeJson = et.TradeJson }, risk = risk, //cfm.ContractCode, }; var searchTradeInfo = query.ToSearchList(req, false); List modelList = new List(); var tradeList = searchTradeInfo.rows.Select(O => O.et.trade).ToList(); var priceProvider = new EodPriceProvider(req.ValueDate).GetPriceProvider(SettlementTypeEnum.ClosePrice); var service = new QuotaMonitorService(OptUser); service.GetHedgeGroup(tradeList, priceProvider, out _, out _, out _, out var hedgeGroup, out _); //service.GetRiskScale(tradeList,) foreach (var item in searchTradeInfo.rows) { var trade = item.et.trade; var risk = item.risk; var obj = new SuperviseReportSwapModel(); FormatModel(obj, trade, hedgeGroup, trade.TradeNumber); modelList.Add(obj); } searchTradeInfo.total = Math.Max(1, (int)Math.Ceiling((double)searchTradeInfo.records / searchTradeInfo.rows.Count())); return new SearchListResult(searchTradeInfo, modelList); } public override SearchListResult SearchReportList() { return ReportQuery(RequestInfo); } protected override void FormatModel(SuperviseReportSwapModel model, trade trade, IEnumerable hedgeGroup, string contractCode) { base.FormatModel(model, trade, hedgeGroup, contractCode); var client = DataCacheProvider.GetClientDataSource().GetData(trade.ClientId); var um = DataCacheProvider.GetUnderlyingDataSource().GetData(trade.UnderlyingCode); model.HoldAcct = trade.AssetBookName; model.CutpNo = client.Number; model.EqyFlag = (um.IsStock() || um.IsStockIndex()) ? "1" : "2"; model.InsmTgt = um.UnderlyingName; model.TgtSecuCd = um.UnderlyingCode; model.ExchCd = base.getTgtExchCd(um.MarketName); model.NomnVal = trade.OriginalStockEqvNotional; model.AhedEndDt = trade.UnWindDate?.ToString("yyyyMMdd"); model.ValtnDays = QdpCalendarHelper.GetNonHolidayDaysBetween(trade.StartDate.GetValueOrDefault(), trade.ExerciseDate.GetValueOrDefault()); model.FixPrftPayType = ""; //model.FixPrftRate = 0; model.FlotPrftPayDay = ""; //model.EnhPrftRate = 0; //model.XyzqPrftPay = 0; model.SrvlNomnVal = trade.StockEqvNotionalReal; } } }