using BaseOUDAL; using System.Data; using System.Linq.Expressions; using YLErp.BLL; using YLErp.DBModels.Consts; using YLErp.DBModels.Enums; using YLErp.Helpers; using YLErp.Modules.SuperviseReportModule.SAC.Common; using YLErp.Modules.SuperviseReportModule.SAC.Model; using YLErp.QdpModule; using static YLErp.DBModels.Consts.ConsReport; namespace YLErp.Modules.SuperviseReportModule.SAC.Service { class ReportPeriodicReportSACService : ReportBaseService { public ReportPeriodicReportSACService(OptUserInfo optUser) : base(optUser) { } protected override string _excelDataSourcePath => "定期报告\\"; protected override string _excelDataSourceFileName => "import_SAC_template.xlsx"; protected override DataFlagsEnum BusiDataType => DataFlagsEnum.A1011; private List _validOperationType = null; public override List ValidOperationType { get { if (_validOperationType == null) { _validOperationType = new List() { OptFlagsEnum.A, OptFlagsEnum.U, OptFlagsEnum.D, }; } return _validOperationType; } } DateTime minDate = DateTime.MinValue; DateTime maxDate = DateTime.MinValue; protected override SuperviseReportTypeEnum ReportType => SuperviseReportTypeEnum.SAC_PeriodicReportSAC; readonly List noteList = new List(); public override bool CheckRequestParamer(ReportInfo req, out string errMsg) { if (!base.CheckRequestParamer(req, out errMsg)) { return false; } if (req.SACReportDate == null) { errMsg = "SAC定期报告对应的报告月份不应为空"; return false; } switch (req.SACReportStatus) { case OptFlagsEnum.U: case OptFlagsEnum.D: minDate = req.SACReportDate.Value.Date.AddDays(-req.SACReportDate.Value.Day).AddDays(1); maxDate = req.SACReportDate.Value.Date.AddMonths(1).AddDays(-req.SACReportDate.Value.Day); var note = base.GetReportNotes(ReportType, formatInfoTag(req.SACReportDate?.ToString("yyyy-MM"))).FirstOrDefault(); if (note == null) { errMsg = $"{minDate.ToString("yyyy-MM-dd")}~{maxDate.ToString("yyyy-MM-dd")}不存在报送成功的SAC定期报告记录,请重新选择"; return false; } break; case OptFlagsEnum.A: if (base.GetReportNotes(ReportType, formatInfoTag(req.SACReportDate.Value.ToString("yyyy-MM"))).Any()) { minDate = req.SACReportDate.Value.Date.AddDays(-req.SACReportDate.Value.Day).AddDays(1); maxDate = req.SACReportDate.Value.Date.AddMonths(1).AddDays(-req.SACReportDate.Value.Day); errMsg = $"{minDate.ToString("yyyy-MM-dd")}~{maxDate.ToString("yyyy-MM-dd")}最新SAC定期报告记录已报送成功,请选择补正"; return false; } break; default: break; } errMsg = ""; return true; } protected override BodyModel GenerateBody(out bool noData, out List fileList) { fileList = new List(); noData = true; var model = new BodyModel(); var cacheKey = $"{BusiDataType}"; var cacheValue = formatInfoTag(_reqInfo.SACReportDate.Value.ToString("yyyy-MM")); if (ReportStatus.CheckCacheInfo(cacheKey, cacheValue)) { return model; } var note = base.GetReportNotes(ReportType, cacheValue).FirstOrDefault(); if (note == null && _operationType == OptFlagsEnum.A) { note = new SACReportNotes() { InfoCache = $"{{\"Tag\":\"{_reqInfo.SACReportDate.Value.ToString("yyyy-MM")}\"}}", IsValid = true, }; } else { switch (_operationType) { case OptFlagsEnum.A: noData = true;//新增数据已报送,跳过 return model; case OptFlagsEnum.U: note.IsValid = true; break; case OptFlagsEnum.D: note.IsValid = false; break; case OptFlagsEnum.NONE: default: throw new ServiceException("未知操作类型"); } } //if (((PS.Config.ErpElement.SAC_ReportDataSource & SAC_ReportDataSourceEnum.Template) == SAC_ReportDataSourceEnum.Template) && ((PS.Config.ErpElement.SAC_ReportDataSource & SAC_ReportDataSourceEnum.System) == SAC_ReportDataSourceEnum.System)) //{ // model.PeriodicReportSAC = GetPeriodicReportSACFromExcelAndDb(); //} //else if ((PS.Config.ErpElement.SAC_ReportDataSource & SAC_ReportDataSourceEnum.System) == SAC_ReportDataSourceEnum.System) //{ // model.PeriodicReportSAC = GetPeriodicReportSACFromDb(); //} //else if ((PS.Config.ErpElement.SAC_ReportDataSource & SAC_ReportDataSourceEnum.Template) == SAC_ReportDataSourceEnum.Template) //{ // model.PeriodicReportSAC = GetPeriodicReportSACFromExcel(); //} model.PeriodicReportSAC = GetPeriodicReportSACFromExcel(); model.PeriodicReportSAC.OperationType = _operationType; noData = string.IsNullOrWhiteSpace(model?.PeriodicReportSAC?.MainAgreementAddedThisMonth); ReportStatus.AddCacheInfo(cacheKey, cacheValue); if (!noData) { if (_operationType != OptFlagsEnum.A) { model.PeriodicReportSAC.BizID = note.BizId; } model.PeriodicReportSAC.ExceID = base.formatExceID(); note.id = 0; note.ExceId = model.PeriodicReportSAC.ExceID; note.CreateTime = DateTime.Now; note.FileTag = FileTag; note.ReportType = ReportType; note.ReportDate = _reqInfo.ReportDate; note.InfoTag = formatInfoTag(_reqInfo.SACReportDate.Value.ToString("yyyy-MM"), true); note.OptTime = note.CreateTime; note.RetCode = ""; note.RetMsg = ""; note.ReportResponse = false; note.BizId = ""; note.changeStatus = false; noteList.Add(note); } return model; } private PeriodicReportSACModel GetPeriodicReportSACFromDb() { var monthStart = QdpCalendarHelper.GetNonHoliday(_reqInfo.SACReportDate.Value.AddDays(-_reqInfo.SACReportDate.Value.Day + 1)); var lastMonthEnd = QdpCalendarHelper.GetNonHolidayDefore(monthStart.AddDays(-1)); var monthEnd = QdpCalendarHelper.GetNonHolidayDefore(monthStart.AddMonths(1).AddDays(-monthStart.Day)); var yearStart = QdpCalendarHelper.GetNonHoliday(new DateTime(_reqInfo.SACReportDate.Value.Year, 01, 01)); var lastYearEnd = QdpCalendarHelper.GetNonHolidayDefore(yearStart.AddDays(-1)); var yearEnd = monthEnd; var model = new PeriodicReportSACModel(); using (var baseDb = new ClientDBContext()) { using (var db = new YLContext()) { model.Year = _reqInfo.SACReportDate.Value.Year.ToString("0000"); model.Month = _reqInfo.SACReportDate.Value.Month.ToString("0"); model.MainAgreementAddedThisMonth = DbContext.sac_report_notes.Where(O => O.ReportDate >= monthStart && O.ReportDate <= monthEnd && O.ReportType == SuperviseReportTypeEnum.SAC_MasterAgrmt && O.ReportResponse && O.InfoTag.EndsWith("_A")).Count().ToString(); model.MainAgreementAccumulatedThisYear = DbContext.sac_report_notes.Where(O => O.ReportDate >= yearStart && O.ReportDate <= yearEnd && O.ReportType == SuperviseReportTypeEnum.SAC_MasterAgrmt && O.ReportResponse && O.InfoTag.EndsWith("_A")).Count().ToString(); model.MainAgreementValidedAtEndOfThisMonth = DbContext.sac_report_notes.Where(O => O.ReportDate <= monthEnd && O.ReportType == SuperviseReportTypeEnum.SAC_MasterAgrmt && O.ReportResponse && O.InfoTag.EndsWith("_A") && O.IsValid).Count().ToString(); model.SupplementalAgreementAddedThisMonth = DbContext.sac_report_notes.Where(O => O.ReportDate >= monthStart && O.ReportDate <= monthEnd && O.ReportType == SuperviseReportTypeEnum.SAC_SupAgrmt && O.ReportResponse && O.InfoTag.EndsWith("_A")).Count().ToString(); model.SupplementalAgreementAccumulatedThisYear = DbContext.sac_report_notes.Where(O => O.ReportDate >= yearStart && O.ReportDate <= yearEnd && O.ReportType == SuperviseReportTypeEnum.SAC_SupAgrmt && O.ReportResponse && O.InfoTag.EndsWith("_A")).Count().ToString(); model.SupplementalAgreementValidedAtTheEndOfThisMonth = DbContext.sac_report_notes.Where(O => O.ReportDate <= monthEnd && O.ReportType == SuperviseReportTypeEnum.SAC_SupAgrmt && O.ReportResponse && O.InfoTag.EndsWith("_A") && O.IsValid).Count().ToString(); model.PerformanceGuaranteeAgreementAddedThisMonth = DbContext.sac_report_notes.Where(O => O.ReportDate >= monthStart && O.ReportDate <= monthEnd && O.ReportType == SuperviseReportTypeEnum.SAC_PerformanceGuaranteeAgrmt && O.ReportResponse && O.InfoTag.EndsWith("_A")).Count().ToString(); model.PerformanceGuaranteeAgreementAccumulatedThisYear = DbContext.sac_report_notes.Where(O => O.ReportDate >= yearStart && O.ReportDate <= yearEnd && O.ReportType == SuperviseReportTypeEnum.SAC_PerformanceGuaranteeAgrmt && O.ReportResponse && O.InfoTag.EndsWith("_A")).Count().ToString(); model.PerformanceGuaranteeAgreementValidedAtEndOfThisMonth = DbContext.sac_report_notes.Where(O => O.ReportDate <= monthEnd && O.ReportType == SuperviseReportTypeEnum.SAC_PerformanceGuaranteeAgrmt && O.ReportResponse && O.InfoTag.EndsWith("_A") && O.IsValid).Count().ToString(); var contractCount = from tc in db.trade_cash join tr in db.trade_contract_r on tc.id equals tr.TradeCashId where tr.Type == "交易确认书" && !tc.IsDeleted && tr.IsValid select tc.ValueDate; model.TransactionConfirmationAddedThisMonth = contractCount.Where(O => O >= monthStart && O <= monthEnd).Count().ToString(); model.TransactionConfirmationBookAccumulatedThisYear = contractCount.Where(O => O >= yearStart && O <= yearEnd).Count().ToString(); model.TransactionConfirmationValidedAtEndOfThisMonth = contractCount.Where(O => O <= monthEnd).Count().ToString(); var endAction = new List() { "系统操作-平仓费", "系统操作-行权费" }; var selfClientInfos = baseDb.client.Where(O => O.ProcessOptDate <= monthEnd && O.ProcessStatus == "已开户" && O.ClientType == "产品").Select(O => O.id).ToList(); var dotSelfClientInfos = baseDb.client.Where(O => O.ProcessOptDate <= monthEnd && O.ProcessStatus == "已开户" && O.ClientType != "产品").Select(O => O.id).ToList(); var latestTradeInfos = (from et in db.eod_trade where et.ValueDate == monthEnd && et.TradeStatus == "确认成交" join ep in db.eod_trade_position on new { et.TradeId, et.ValueDate } equals new { ep.TradeId, ep.ValueDate } join um in db.underlying_manager on et.UnderlyingCode equals um.UnderlyingCode join tr in db.trade_contract_r.Where(O => O.Type == "交易确认书" && O.IsValid) on et.TradeId equals tr.TradeId into tempTr from tr in tempTr.DefaultIfEmpty() select new { et = new xodTradeBase() { TradeJson = et.TradeJson }, um, tr, ep.Pv, }) .ToArray().Select(O => new { O.et.trade.StockEqvNotional, O.et.trade.TradeType, O.um.UnderlyingInstrumentType, O.et.trade.ClientId, O.et.trade.StockEqvNotionalReal, O.et.trade.StartDate, O.et.trade.ExerciseDate, O.et.trade.TradePrice, O.et.trade.PremiumRate, O.et.trade.OriginalStockEqvNotional, ContractCode = O.tr?.ContractCode, O.um.CommodityCode, O.et.trade.ParticipationRate, O.et.trade.AnnualizeFactor, O.um.UnderlyingName, O.um.UnderlyingCode, O.um.MarketCode, O.um.MarketName, O.et.trade.PositionMarginRate, O.et.trade.trade_swap, O.Pv, }).ToArray(); var lastMonthTradeInfos = (from et in db.eod_trade join um in db.underlying_manager on et.UnderlyingCode equals um.UnderlyingCode join ts in db.trade_span.Where(O => O.ValueDate == lastMonthEnd) on et.TradeId equals ts.TradeId where et.ValueDate == lastMonthEnd && et.TradeStatus == "确认成交" select new { et = new xodTradeBase() { TradeJson = et.TradeJson }, ts.WorstCastClientPayable, um }).ToArray().Select(O => new { O.et.trade.id, O.et.trade.StockEqvNotional, O.et.TradeType, O.um.UnderlyingInstrumentType, O.WorstCastClientPayable }).ToArray(); var latestMonthNewTradeInfos = (from t in db.trade join tc in db.trade_cash.Where(O => O.ValueDate >= monthStart && O.ValueDate <= monthEnd && O.Action == "系统操作-期权费" && O.ValidState != "InValid" && !O.IsDeleted) on t.id equals tc.TradeId join um in db.underlying_manager on t.UnderlyingCode equals um.UnderlyingCode join tr in db.trade_contract_r on tc.id equals tr.TradeCashId into tempTr from tr in tempTr.DefaultIfEmpty() where tr.IsValid select new { t.id, StockEqvNotional = t.OriginalStockEqvNotional, t.TradeType, um.UnderlyingInstrumentType, t.ClientId, t.StockEqvNotionalReal, t.StartDate, t.ExerciseDate, t.TradePrice, t.PremiumRate, t.OriginalStockEqvNotional, tr.ContractCode, um.CommodityCode, um.UnderlyingName, um.UnderlyingCode, um.MarketName }).ToArray(); var latestMonthEndTradeInfos = (from t in db.trade join tc in db.trade_cash.Where(O => O.ValueDate >= monthStart && O.ValueDate <= monthEnd && endAction.Contains(O.Action) && O.ValidState != "InValid" && !O.IsDeleted) on t.id equals tc.TradeId join um in db.underlying_manager on t.UnderlyingCode equals um.UnderlyingCode select new { t.id, StockEqvNotional = (tc.UnwindNotional / t.OriginalNotional * t.OriginalStockEqvNotional), t.TradeType, um.UnderlyingInstrumentType }).ToArray(); var latestMonthTradeInfos = (from et in db.eod_trade join um in db.underlying_manager on et.UnderlyingCode equals um.UnderlyingCode join ts in db.trade_span.Where(O => O.ValueDate == monthEnd) on et.TradeId equals ts.TradeId where et.ValueDate == monthEnd && et.TradeStatus == "确认成交" select new { et = new xodTradeBase() { TradeJson = et.TradeJson }, ts.WorstCastClientPayable, um }).ToArray().Select(O => new { O.et.trade.id, O.et.trade.StockEqvNotional, O.et.TradeType, O.um.UnderlyingInstrumentType, O.WorstCastClientPayable }).ToArray(); var latestYearNewTradeInfos = (from t in db.trade join tc in db.trade_cash.Where(O => O.ValueDate >= yearStart && O.ValueDate <= yearEnd && O.Action == "系统操作-期权费" && O.ValidState != "InValid" && !O.IsDeleted) on t.id equals tc.TradeId join um in db.underlying_manager on t.UnderlyingCode equals um.UnderlyingCode select new { t.id, StockEqvNotional = t.OriginalStockEqvNotional, t.TradeType, um.UnderlyingInstrumentType }).ToArray(); var totleStockEqvNotional = (latestTradeInfos.Sum(O => (double?)O.StockEqvNotional) ?? 0); var latestNetAssets = _reqInfo.LatestNetAssets; model.ToCarryOutSelfEquitySecuritiesAndOTCDerivativesScaleStockOptionBusinessCorrespondence = totleStockEqvNotional.ToString(); model.NetCapitalAtEndOfTheMonth = latestNetAssets.ToString(); model.ToCarryOutSelfEquitySecuritiesAndOTCDerivativesScaleStockOptionsBusinessAccountedForTheProportionOfTheCorrespondingNetCapital = latestNetAssets == 0 ? "0" : (totleStockEqvNotional / latestNetAssets * 100).ToString("0.00"); model.OTCOptionHasSignedByLegalPerson = dotSelfClientInfos.Count.ToString(); model.OTCOptionsHaveContractedProducts = selfClientInfos.Count.ToString(); model.OTCOptionsForTheMonthOfTheNewAddLegalPerson = baseDb.client.Where(O => O.ProcessStatus == "已开户" && O.ProcessOptDate >= monthStart && O.ProcessOptDate <= monthEnd && O.ClientType != "产品").Count().ToString(); model.OTCOptionsForTheMonthOfTheNewAddProduct = baseDb.client.Where(O => O.ProcessStatus == "已开户" && O.ProcessOptDate >= monthStart && O.ProcessOptDate <= monthEnd && O.ClientType == "产品").Count().ToString(); model.OTCOptionsLegalPersonInDurationForThisMouth = dotSelfClientInfos.Count.ToString(); model.OTCOptionsProductsInDurationForThisMouth = selfClientInfos.Count.ToString(); model.IncomeSwapHasSignedLegalPersonNumber = dotSelfClientInfos.Count.ToString(); model.IncomeSwapHasSignedProductNumber = selfClientInfos.Count.ToString(); model.IncomeSwapForTheMonthOfTheNewAddLegalPerson = model.OTCOptionsForTheMonthOfTheNewAddLegalPerson; model.IncomeSwapForTheMonthOfTheNewAddProduct = model.OTCOptionsForTheMonthOfTheNewAddProduct; model.IncomeSwapLegalPersonInDurationForThisMouth = dotSelfClientInfos.Count.ToString(); model.IncomeSwapProductsInDurationForThisMouth = selfClientInfos.Count.ToString(); var tempList = new List { "StockIF", "Stock", "CommodityFutures" }; model.OTCStockIndexOptionsWithinTheLastMonthTheExistenceOfScale = (lastMonthTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "StockIF").Sum(O => (double?)O.StockEqvNotional) ?? 0).ToString(); model.OTCOptionsWithinIndividualStocksLateLastMonthDurationScale = (lastMonthTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "Stock").Sum(O => (double?)O.StockEqvNotional) ?? 0).ToString(); model.OTCOptionsCommoditiesLastMonthDurationScale = (lastMonthTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "CommodityFutures").Sum(O => (double?)O.StockEqvNotional) ?? 0).ToString(); model.OTCOptionsOtherSubjectLastMonthDurationScale = (lastMonthTradeInfos.Where(O => O.TradeType != "收益互换" && !tempList.Contains(O.UnderlyingInstrumentType)).Sum(O => (double?)O.StockEqvNotional) ?? 0).ToString(); model.RevenueExchangeDomesticStockIndexLastMonthDurationScale = (lastMonthTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "StockIF").Sum(O => (double?)O.StockEqvNotional) ?? 0).ToString(); model.RevenueExchangeDomesticIndividualStocksLastMonthDurationScale = (lastMonthTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "Stock").Sum(O => (double?)O.StockEqvNotional) ?? 0).ToString(); model.RevenueExchangeCommoditiesLastMonthDurationScale = (lastMonthTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "CommodityFutures").Sum(O => (double?)O.StockEqvNotional) ?? 0).ToString(); model.RevenueExchangeOtherSubjectLastMonthDurationScale = (lastMonthTradeInfos.Where(O => O.TradeType == "收益互换" && !tempList.Contains(O.UnderlyingInstrumentType)).Sum(O => (double?)O.StockEqvNotional) ?? 0).ToString(); model.TotalOfLastMonthDurationScale = (lastMonthTradeInfos.Sum(O => (double?)O.StockEqvNotional) ?? 0).ToString(); model.OTCOptionsWithinTheIndexThisMonthOfTheNewScale = (latestMonthNewTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "StockIF").Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.OTCOptionsToAddScaleDomesticStocksInThisMonth = (latestMonthNewTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "Stock").Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.OTCOptionsCommoditiesTheNewSizeOfTheIncreaseInThisMonth = (latestMonthNewTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "CommodityFutures").Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.OTCOptionsOtherSubjectTheNewSizeOfTheIncreaseInThisMonth = (latestMonthNewTradeInfos.Where(O => O.TradeType != "收益互换" && !tempList.Contains(O.UnderlyingInstrumentType)).Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.RevenueExchangeDomesticStockIndexTheNewSizeOfTheIncreaseInThisMonth = (latestMonthNewTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "StockIF").Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.RevenueExchangeDomesticIndividualStocksTheNewSizeOfTheIncreaseInThisMonth = (latestMonthNewTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "Stock").Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.RevenueExchangeCommoditiesTheNewSizeOfTheIncreaseInThisMonth = (latestMonthNewTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "CommodityFutures").Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.RevenueExchangeOtherSubjectTheNewSizeOfTheIncreaseInThisMonth = (latestMonthNewTradeInfos.Where(O => O.TradeType == "收益互换" && !tempList.Contains(O.UnderlyingInstrumentType)).Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.TotalOfTheNewSizeOfTheIncreaseInThisMonth = (latestMonthNewTradeInfos.Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.OTCOptionsTerminateScaleDomesticStockIndexThisMonth = (latestMonthEndTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "StockIF").Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.OTCOptionsTerminateScaleDomesticStocksInThisMonth = (latestMonthEndTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "Stock").Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.OTCOptionsCommoditiesTerminationOfTheScaleOfThisMonth = (latestMonthEndTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "CommodityFutures").Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.OTCOptionsOtherSubjectTerminationOfTheScaleOfThisMonth = (latestMonthEndTradeInfos.Where(O => O.TradeType != "收益互换" && !tempList.Contains(O.UnderlyingInstrumentType)).Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.RevenueExchangeDomesticStockIndexTerminationOfTheScaleOfThisMonth = (latestMonthEndTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "StockIF").Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.RevenueExchangeDomesticIndividualStocksTerminationOfTheScaleOfThisMonth = (latestMonthEndTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "Stock").Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.RevenueExchangeCommoditiesTerminationOfTheScaleOfThisMonth = (latestMonthEndTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "CommodityFutures").Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.RevenueExchangeOtherSubjectTerminationOfTheScaleOfThisMonth = (latestMonthEndTradeInfos.Where(O => O.TradeType == "收益互换" && !tempList.Contains(O.UnderlyingInstrumentType)).Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.TotalOfTerminationOfTheScaleOfThisMonth = (latestMonthEndTradeInfos.Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.OTCStockIndexOptionsWithinThisMonthOfTheExistenceOfScale = (latestMonthTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "StockIF").Sum(O => (double?)O.StockEqvNotional) ?? 0).ToString(); model.OTCOptionsWithinIndividualStocksInThisMonthDurationScale = (latestMonthTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "Stock").Sum(O => (double?)O.StockEqvNotional) ?? 0).ToString(); model.OTCOptionsCommoditiesInThisMonthDurationScale = (latestMonthTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "CommodityFutures").Sum(O => (double?)O.StockEqvNotional) ?? 0).ToString(); model.OTCOptionsOtherSubjectThisMonthDurationScale = (latestMonthTradeInfos.Where(O => O.TradeType != "收益互换" && !tempList.Contains(O.UnderlyingInstrumentType)).Sum(O => (double?)O.StockEqvNotional) ?? 0).ToString(); model.RevenueExchangeDomesticStockIndexThisMonthDurationScale = (latestMonthTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "StockIF").Sum(O => (double?)O.StockEqvNotional) ?? 0).ToString(); model.RevenueExchangeDomesticIndividualStocksThisMonthDurationScale = (latestMonthTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "Stock").Sum(O => (double?)O.StockEqvNotional) ?? 0).ToString(); model.RevenueExchangeCommoditiesThisMonthDurationScale = (latestMonthTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "CommodityFutures").Sum(O => (double?)O.StockEqvNotional) ?? 0).ToString(); model.RevenueExchangeOtherSubjectThisMonthDurationScale = (latestMonthTradeInfos.Where(O => O.TradeType == "收益互换" && !tempList.Contains(O.UnderlyingInstrumentType)).Sum(O => (double?)O.StockEqvNotional) ?? 0).ToString(); model.TotalOfThisMonthDurationScale = (latestMonthTradeInfos.Sum(O => (double?)O.StockEqvNotional) ?? 0).ToString(); model.OTCOptionsStockIndexThisYearCumulativeScaleOfNewTerritory = (latestYearNewTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "StockIF").Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.OTCOptionsStockThisYearCumulativeScaleOfNewTerritory = (latestYearNewTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "Stock").Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.OTCOptionsCommoditiesThisYearCumulativeScaleOfNewTerritory = (latestYearNewTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "CommodityFutures").Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.OTCOptionsOtherSubjectThisYearCumulativeScaleOfNewTerritory = (latestYearNewTradeInfos.Where(O => O.TradeType != "收益互换" && !tempList.Contains(O.UnderlyingInstrumentType)).Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.IncomeSwapDomesticStockIndexHasAddedNewScaleInThisYear = (latestYearNewTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "StockIF").Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.IncomeSwapDomesticStockHasAddedNewScaleInThisYear = (latestYearNewTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "Stock").Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.IncomeSwapCommoditiesIndexHasAddedNewScaleInThisYear = (latestYearNewTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "CommodityFutures").Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.IncomeSwapOtherSubjectIndexHasAddedNewScaleInThisYear = (latestYearNewTradeInfos.Where(O => O.TradeType == "收益互换" && !tempList.Contains(O.UnderlyingInstrumentType)).Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.TotalNewScaleInThisYear = (latestYearNewTradeInfos.Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.OTCOptionsStockIndexAtTheEndOfLastMonth = lastMonthTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "StockIF").GroupBy(O => O.id).Count().ToString(); model.OTCOptionsStockAtTheEndOfLastMonth = lastMonthTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "Stock").GroupBy(O => O.id).Count().ToString(); model.OTCOptionsCommoditiesAtTheEndOfLastMonth = lastMonthTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "CommodityFutures").GroupBy(O => O.id).Count().ToString(); model.OTCOptionsOtherSubjectAtTheEndOfLastMonth = lastMonthTradeInfos.Where(O => O.TradeType != "收益互换" && !tempList.Contains(O.UnderlyingInstrumentType)).GroupBy(O => O.id).Count().ToString(); model.IncomeExchangeDomesticStockIndexNumberOfRemainingContractsAtTheEndOfLastMonth = lastMonthTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "StockIF").GroupBy(O => O.id).Count().ToString(); model.IncomeExchangeDomesticStockNumberOfRemainingContractsAtTheEndOfLastMonth = lastMonthTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "Stock").GroupBy(O => O.id).Count().ToString(); model.IncomeExchangeCommoditiesNumberOfRemainingContractsAtTheEndOfLastMonth = lastMonthTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "CommodityFutures").GroupBy(O => O.id).Count().ToString(); model.IncomeExchangeOtherSubjectNumberOfRemainingContractsAtTheEndOfLastMonth = lastMonthTradeInfos.Where(O => O.TradeType == "收益互换" && !tempList.Contains(O.UnderlyingInstrumentType)).GroupBy(O => O.id).Count().ToString(); model.TotalNumberOfContractsAtTheEndOfLastMonth = lastMonthTradeInfos.GroupBy(O => O.id).Count().ToString(); model.OTCOptionsStockIndexThisMonthNewDomesticContractNumber = latestMonthNewTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "StockIF").GroupBy(O => O.id).Count().ToString(); model.OTCOptionsStockThisMonthNewDomesticContractNumber = latestMonthNewTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "Stock").GroupBy(O => O.id).Count().ToString(); model.OTCOptionsCommoditiesThisMonthNewDomesticContractNumber = latestMonthNewTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "CommodityFutures").GroupBy(O => O.id).Count().ToString(); model.OTCOptionsOtherSubjectThisMonthNewDomesticContractNumber = latestMonthNewTradeInfos.Where(O => O.TradeType != "收益互换" && !tempList.Contains(O.UnderlyingInstrumentType)).GroupBy(O => O.id).Count().ToString(); model.IncomeSwapDomesticStockIndexNewContractInThisMonth = latestMonthNewTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "StockIF").GroupBy(O => O.id).Count().ToString(); model.IncomeSwapDomesticStockNewContractInThisMonth = latestMonthNewTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "Stock").GroupBy(O => O.id).Count().ToString(); model.IncomeSwapCommoditiesNewContractInThisMonth = latestMonthNewTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "CommodityFutures").GroupBy(O => O.id).Count().ToString(); model.IncomeSwapOtherSubjectNewContractInThisMonth = latestMonthNewTradeInfos.Where(O => O.TradeType == "收益互换" && !tempList.Contains(O.UnderlyingInstrumentType)).GroupBy(O => O.id).Count().ToString(); model.TotalNumberOfNewContractsInThisMonth = latestMonthNewTradeInfos.GroupBy(O => O.id).Count().ToString(); model.OTCOptionsThisMonthToTerminateTheContractWithinTheTerritoryOfTheStockIndexNumber = latestMonthEndTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "StockIF").GroupBy(O => O.id).Count().ToString(); model.OTCOptionsThisMonthToTerminateTheContractWithinTheTerritoryOfTheStockNumber = latestMonthEndTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "Stock").GroupBy(O => O.id).Count().ToString(); model.OTCOptionsThisMonthToTerminateTheContractWithinTheTerritoryOfTheCommoditiesNumber = latestMonthEndTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "CommodityFutures").GroupBy(O => O.id).Count().ToString(); model.OTCOptionsThisMonthToTerminateTheContractWithinTheTerritoryOfTheOtherSubjectNumber = latestMonthEndTradeInfos.Where(O => O.TradeType != "收益互换" && !tempList.Contains(O.UnderlyingInstrumentType)).GroupBy(O => O.id).Count().ToString(); model.IncomeSwapDomesticStockIndexTerminatesTheNumberOfContractsThisMonth = latestMonthEndTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "StockIF").GroupBy(O => O.id).Count().ToString(); model.IncomeSwapDomesticStockTerminatesTheNumberOfContractsThisMonth = latestMonthEndTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "Stock").GroupBy(O => O.id).Count().ToString(); model.IncomeSwapCommoditiesTerminatesTheNumberOfContractsThisMonth = latestMonthEndTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "CommodityFutures").GroupBy(O => O.id).Count().ToString(); model.IncomeSwapOtherSubjectTerminatesTheNumberOfContractsThisMonth = latestMonthEndTradeInfos.Where(O => O.TradeType == "收益互换" && !tempList.Contains(O.UnderlyingInstrumentType)).GroupBy(O => O.id).Count().ToString(); model.TotalNumberOfContractsTerminatedThisMonth = latestMonthEndTradeInfos.GroupBy(O => O.id).Count().ToString(); model.OTCDomesticStockIndexNumberOfRemainingContractsAtTheEndOfThisMonth = latestMonthTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "StockIF").GroupBy(O => O.id).Count().ToString(); model.OTCDomesticStockNumberOfRemainingContractsAtTheEndOfThisMonth = latestMonthTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "Stock").GroupBy(O => O.id).Count().ToString(); model.OTCCommoditiesNumberOfRemainingContractsAtTheEndOfThisMonth = latestMonthTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "CommodityFutures").GroupBy(O => O.id).Count().ToString(); model.OTCOtherSubjectNumberOfRemainingContractsAtTheEndOfThisMonth = latestMonthTradeInfos.Where(O => O.TradeType != "收益互换" && !tempList.Contains(O.UnderlyingInstrumentType)).GroupBy(O => O.id).Count().ToString(); model.IncomeExchangeDomesticStockIndexNumberOfRemainingContractsAtTheEndOfThisMonth = latestMonthTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "StockIF").GroupBy(O => O.id).Count().ToString(); model.IncomeExchangeDomesticStockNumberOfRemainingContractsAtTheEndOfThisMonth = latestMonthTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "Stock").GroupBy(O => O.id).Count().ToString(); model.IncomeExchangeCommoditiesNumberOfRemainingContractsAtTheEndOfThisMonth = latestMonthTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "CommodityFutures").GroupBy(O => O.id).Count().ToString(); model.IncomeExchangeOtherSubjectNumberOfRemainingContractsAtTheEndOfThisMonth = latestMonthTradeInfos.Where(O => O.TradeType == "收益互换" && !tempList.Contains(O.UnderlyingInstrumentType)).GroupBy(O => O.id).Count().ToString(); model.TotalNumberOfContractsAtTheEndOfThisMonth = latestMonthTradeInfos.GroupBy(O => O.id).Count().ToString(); model.OTCOptionsStockIndexCumulativeDomesticNewContractNumberInThisYear = latestYearNewTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "StockIF").GroupBy(O => O.id).Count().ToString(); model.OTCOptionsStockCumulativeDomesticNewContractNumberInThisYear = latestYearNewTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "Stock").GroupBy(O => O.id).Count().ToString(); model.OTCOptionsCommoditiesCumulativeDomesticNewContractNumberInThisYear = latestYearNewTradeInfos.Where(O => O.TradeType != "收益互换" && O.UnderlyingInstrumentType == "CommodityFutures").GroupBy(O => O.id).Count().ToString(); model.OTCOptionsOtherSubjectCumulativeDomesticNewContractNumberInThisYear = latestYearNewTradeInfos.Where(O => O.TradeType != "收益互换" && !tempList.Contains(O.UnderlyingInstrumentType)).GroupBy(O => O.id).Count().ToString(); model.IncomeSwapDomesticStockIndexCumulativeNumberOfNewContractsInThisYear = latestYearNewTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "StockIF").GroupBy(O => O.id).Count().ToString(); model.IncomeSwapDomesticStockCumulativeNumberOfNewContractsInThisYear = latestYearNewTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "Stock").GroupBy(O => O.id).Count().ToString(); model.IncomeSwapCommoditiesCumulativeNumberOfNewContractsInThisYear = latestYearNewTradeInfos.Where(O => O.TradeType == "收益互换" && O.UnderlyingInstrumentType == "CommodityFutures").GroupBy(O => O.id).Count().ToString(); model.IncomeSwapOtherSubjectCumulativeNumberOfNewContractsInThisYear = latestYearNewTradeInfos.Where(O => O.TradeType == "收益互换" && !tempList.Contains(O.UnderlyingInstrumentType)).GroupBy(O => O.id).Count().ToString(); model.TotalNumberOfNewContractsInThisYear = latestYearNewTradeInfos.GroupBy(O => O.id).Count().ToString(); var totalNominalPrincipalAmountOfSwapThisMonth = latestMonthTradeInfos.Where(O => O.TradeType == "收益互换").Sum(O => (double?)O.StockEqvNotional) ?? 0; var totalNominalPrincipalAmountOfSwapLastMonth = lastMonthTradeInfos.Where(O => O.TradeType == "收益互换").Sum(O => (double?)O.StockEqvNotional) ?? 0; model.TotalNominalPrincipalAmountOfSwapThisMonth = totalNominalPrincipalAmountOfSwapThisMonth.ToString(); model.TotalNominalPrincipalAmountOfSwapLastMonth = totalNominalPrincipalAmountOfSwapLastMonth.ToString(); var theValueOfTheStockSwapInTheCorrespondingPerformanceGuaranteeThisMonth = latestMonthTradeInfos.Where(O => O.TradeType == "收益互换").Sum(O => O.WorstCastClientPayable) ?? 0; var theValueOfTheStockSwapInTheCorrespondingPerformanceGuaranteeLastMonth = lastMonthTradeInfos.Where(O => O.TradeType == "收益互换").Sum(O => O.WorstCastClientPayable) ?? 0; model.TheValueOfTheStockSwapInTheCorrespondingPerformanceGuaranteeThisMonth = theValueOfTheStockSwapInTheCorrespondingPerformanceGuaranteeThisMonth.ToString(); model.TheValueOfTheStockSwapInTheCorrespondingPerformanceGuaranteeLastMonth = theValueOfTheStockSwapInTheCorrespondingPerformanceGuaranteeLastMonth.ToString(); model.SwapCashCollateralValueThisMonth = theValueOfTheStockSwapInTheCorrespondingPerformanceGuaranteeThisMonth.ToString(); model.SwapCashCollateralValueLastMonth = theValueOfTheStockSwapInTheCorrespondingPerformanceGuaranteeLastMonth.ToString(); model.SwapSecuritiesCollateralValueThisMonth = 0.ToString(); model.SwapSecuritiesCollateralValueLastMonthThisMonth = 0.ToString(); model.ProportionOfTheOverallPerformanceOfTheSwapBusinessThisMonthFull = 0.ToString(); model.ProportionOfTheOverallPerformanceOfTheSwapBusinessLastMonthFull = 0.ToString(); model.ProportionOfTheOverallPerformanceOfTheSwapBusinessThisMonthNet = 0.ToString(); model.ProportionOfTheOverallPerformanceOfTheSwapBusinessLastMonthNet = 0.ToString(); model.SwapNumberOfDefaultCustomersAtThisMonthThisMonth = 0.ToString(); model.SwapNumberOfDefaultCustomersAtThisMonthLastMonth = 0.ToString(); model.SwapDefaultTransactionNumberAtThisMonthThisMonth = 0.ToString(); model.SwapDefaultTransactionNumberAtThisMonthLastMonth = 0.ToString(); model.TotalSwapDefaultCustomerNumberInThisYearThisMonth = 0.ToString(); model.TotalSwapDefaultCustomerNumberInThisYearLastMonth = 0.ToString(); model.SwapNumberOfDefaultCustomersInThisYearThisMonth = 0.ToString(); model.SwapNumberOfDefaultCustomersInThisYearLastMonth = 0.ToString(); var totalNominalPrincipalAmountOfOptionThisMonth = latestMonthTradeInfos.Where(O => O.TradeType == "远期").Sum(O => (double?)O.StockEqvNotional) ?? 0; var totalNominalPrincipalAmountOfOptionLastMonth = lastMonthTradeInfos.Where(O => O.TradeType == "远期").Sum(O => (double?)O.StockEqvNotional) ?? 0; model.TotalNominalPrincipalAmountOfOptionThisMonth = totalNominalPrincipalAmountOfOptionThisMonth.ToString(); model.TotalNominalPrincipalAmountOfOptionLastMonth = totalNominalPrincipalAmountOfOptionLastMonth.ToString(); var theValueOfTheStockOptionCorrespondingPerformanceGuaranteeThisMonth = latestMonthTradeInfos.Where(O => O.TradeType == "远期").Sum(O => O.WorstCastClientPayable) ?? 0; var theValueOfTheStockOptionCorrespondingPerformanceGuaranteeLastMonth = lastMonthTradeInfos.Where(O => O.TradeType == "远期").Sum(O => O.WorstCastClientPayable) ?? 0; model.TheValueOfTheStockOptionCorrespondingPerformanceGuaranteeThisMonth = theValueOfTheStockOptionCorrespondingPerformanceGuaranteeThisMonth.ToString(); model.TheValueOfTheStockOptionCorrespondingPerformanceGuaranteeLastMonth = theValueOfTheStockOptionCorrespondingPerformanceGuaranteeLastMonth.ToString(); model.OptionCashCollateralValueThisMonth = theValueOfTheStockOptionCorrespondingPerformanceGuaranteeThisMonth.ToString(); model.OptionCashCollateralValueLastMonth = theValueOfTheStockOptionCorrespondingPerformanceGuaranteeLastMonth.ToString(); model.OptionSecuritiesCollateralValueThisMonth = 0.ToString(); model.OptionSecuritiesCollateralValueLastMonth = 0.ToString(); model.ProportionOfTheOverallPerformanceOfTheOptionBusinessThisMonthFull = 0.ToString(); model.ProportionOfTheOverallPerformanceOfTheOptionBusinessLastMonthFull = 0.ToString(); model.ProportionOfTheOverallPerformanceOfTheOptionBusinessThisMonthNet = 0.ToString(); model.ProportionOfTheOverallPerformanceOfTheOptionBusinessLastMonthNet = 0.ToString(); model.OptionNumberOfDefaultCustomersAtThisMonthThisMonth = 0.ToString(); model.OptionNumberOfDefaultCustomersAtThisMonthLastMonth = 0.ToString(); model.OptionTransactionNumberAtThisMonthThisMonth = 0.ToString(); model.OptionTransactionNumberAtThisMonthLastMonth = 0.ToString(); model.TotalOptionDefaultCustomerNumberInThisYearThisMonth = 0.ToString(); model.TotalOptionDefaultCustomerNumberInThisYearLastMonth = 0.ToString(); model.OptionNumberOfDefaultCustomersInThisYearThisMonth = 0.ToString(); model.OptionNumberOfDefaultCustomersInThisYearLastMonth = 0.ToString(); model.StockTradingCorrespondsToValueOfCollateralAtEndOfThisMonth = (latestMonthTradeInfos.Sum(O => O.WorstCastClientPayable) ?? 0).ToString(); model.StockTradingCorrespondsToValueOfCollateralAtEndOfLastMonth = (lastMonthTradeInfos.Sum(O => O.WorstCastClientPayable) ?? 0).ToString(); model.CashBalanceAtEndOfThisMonth = _reqInfo.LatestMonthCash.ToString("0.00"); model.CashBalanceAtEndOfLastMonth = _reqInfo.LastMonthCash.ToString("0.00"); var positionTradeTypes = new List() { "股票", "债券", "银行理财", "信托", "保险" }; var latestMonthPosition = db.eod_trade_position.Where(O => O.ValueDate == monthEnd && O.ClientId == 0).Select(O => new { O.TradeType, O.Pv }); var lastMonthPosition = db.eod_trade_position.Where(O => O.ValueDate == lastMonthEnd && O.ClientId == 0).Select(O => new { O.TradeType, O.Pv }); model.HoldStockMarketValueAtEndOfThisMonth = (latestMonthPosition.Where(O => O.TradeType == "股票").Sum(O => (double?)O.Pv) ?? 0).ToString(); model.HoldStockMarketValueAtEndOfLastMonth = (lastMonthPosition.Where(O => O.TradeType == "股票").Sum(O => (double?)O.Pv) ?? 0).ToString(); model.HoldMarketValueOfBondsAtTheEndOfThisMonth = 0.ToString();// latestMonthPosition.Where(O => O.TradeType == "债券").Sum(O => O.Pv).ToString(); model.HoldMarketValueOfBondsAtTheEndOfLastMonth = 0.ToString();// lastMonthPosition.Where(O => O.TradeType == "债券").Sum(O => O.Pv).ToString(); model.OwnedAssetManagementProductsAtTheEndOfThisMonth = 0.ToString();// latestMonthPosition.Where(O => O.TradeType == "债券").Sum(O => O.Pv).ToString(); model.OwnedAssetManagementProductsAtTheEndOfLastMonth = 0.ToString();// lastMonthPosition.Where(O => O.TradeType == "债券").Sum(O => O.Pv).ToString(); model.OwnedBankFinanceAtTheEndOfThisMonth = 0.ToString();// latestMonthPosition.Where(O => O.TradeType == "银行理财").Sum(O => O.Pv).ToString(); model.OwnedBankFinanceAtTheEndOfLastMonth = 0.ToString();// lastMonthPosition.Where(O => O.TradeType == "银行理财").Sum(O => O.Pv).ToString(); model.HoldTrustProductAtTheEndOfThisMonth = 0.ToString();// latestMonthPosition.Where(O => O.TradeType == "信托").Sum(O => O.Pv).ToString(); model.HoldTrustProductAtTheEndOfLastMonth = 0.ToString();// lastMonthPosition.Where(O => O.TradeType == "信托").Sum(O => O.Pv).ToString(); model.InsuranceProductsAreHeldAtTheEndOfThisMonth = 0.ToString();// latestMonthPosition.Where(O => O.TradeType == "保险").Sum(O => O.Pv).ToString(); model.InsuranceProductsAreHeldAtTheEndOfLastMonth = 0.ToString();// lastMonthPosition.Where(O => O.TradeType == "保险").Sum(O => O.Pv).ToString(); model.HoldOtherProductsAtTheEndOfThisMonth = (latestMonthPosition.Where(O => !positionTradeTypes.Contains(O.TradeType)).Sum(O => (double?)O.Pv) ?? 0).ToString(); model.HoldOtherProductsAtTheEndOfLastMonth = (lastMonthPosition.Where(O => !positionTradeTypes.Contains(O.TradeType)).Sum(O => (double?)O.Pv) ?? 0).ToString(); var monthEndTrades = (from t in db.trade join tc in db.trade_cash on t.id equals tc.TradeId where tc.ValueDate >= monthStart && tc.ValueDate <= monthEnd && tc.Action != "系统操作-期权费" && !tc.IsDeleted && tc.ValidState != "InValid" select new { t, tc.Amount }).ToArray(); model.SettledSwapItemsAtThisMonth = latestMonthEndTradeInfos.Where(O => O.TradeType == "收益互换").GroupBy(O => O.id).Count().ToString(); model.SettledSwapTransactionInvolvesNotionalPrincipalAtThisMonth = (latestMonthEndTradeInfos.Where(O => O.TradeType == "收益互换").Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.SwapIncomeCashFlow = (monthEndTrades.Where(O => O.t.TradeType == "收益互换").Sum(O => (double?)(O.Amount > 0 ? O.Amount : 0)) ?? 0).ToString(); model.SwapExpensesCashFlow = (monthEndTrades.Where(O => O.t.TradeType == "收益互换").Sum(O => (double?)(O.Amount < 0 ? O.Amount : 0)) ?? 0).ToString(); model.CashFlowCorrespondingToNetIncomeOnSwapMargin = (monthEndTrades.Where(O => O.t.TradeType == "收益互换").Sum(O => (double?)O.Amount) ?? 0).ToString(); model.SwapHedgeCost = 0.ToString(); var tradeTypes = new List() { "收益互换", "远期" }; model.SettledOptionItemsAtThisMonth = latestMonthEndTradeInfos.Where(O => !tradeTypes.Contains(O.TradeType)).GroupBy(O => O.id).Count().ToString(); model.SettledOptionTransactionInvolvesNotionalPrincipalAtThisMonth = (latestMonthEndTradeInfos.Where(O => !tradeTypes.Contains(O.TradeType)).Sum(O => O.StockEqvNotional) ?? 0).ToString(); model.OptionPremiumIncome = (monthEndTrades.Where(O => !tradeTypes.Contains(O.t.TradeType)).Sum(O => O.t.TradePrice * (O.t.BuySell == "买入" ? -1 : 1)) ?? 0).ToString(); model.OptionHedgeCost = 0.ToString(); var balanceOfSwapRealizedGainsAndLossesAtThisMonth = GetRealizedPnl(PredicateBuilder.Create(t => t.TradeType == "收益互换"), monthStart, monthEnd); var balanceOfOptionRealizedGainsAndLossesAtThisMonth = GetRealizedPnl(PredicateBuilder.Create(t => !tradeTypes.Contains(t.TradeType)), monthStart, monthEnd); model.BalanceOfSwapRealizedGainsAndLossesAtThisMonth = balanceOfSwapRealizedGainsAndLossesAtThisMonth.ToString(); model.BalanceOfOptionRealizedGainsAndLossesAtThisMonth = balanceOfOptionRealizedGainsAndLossesAtThisMonth.ToString(); var balanceOfSwapRealizedGainsAndLossesAtThisYear = GetRealizedPnl(PredicateBuilder.Create(t => t.TradeType == "收益互换"), yearStart, yearEnd); var balanceOfOptionRealizedGainsAndLossesAtThisYear = GetRealizedPnl(PredicateBuilder.Create(t => !tradeTypes.Contains(t.TradeType)), yearStart, yearEnd); model.BalanceOfSwapRealizedGainsAndLossesAtThisYear = balanceOfSwapRealizedGainsAndLossesAtThisYear.ToString(); model.BalanceOfOptionRealizedGainsAndLossesAtThisYear = balanceOfOptionRealizedGainsAndLossesAtThisYear.ToString(); var balanceOfSwapChangedGainsAndLossesInFairValueAtThisMonth = GetPositionPnl(PredicateBuilder.Create(t => t.TradeType == "收益互换"), lastMonthEnd, monthEnd); var balanceOfOptionChangedGainsAndLossesInFairValueAtThisMonth = GetPositionPnl(PredicateBuilder.Create(t => !tradeTypes.Contains(t.TradeType)), lastMonthEnd, monthEnd); model.BalanceOfSwapChangedGainsAndLossesInFairValueAtThisMonth = balanceOfSwapChangedGainsAndLossesInFairValueAtThisMonth.ToString(); model.BalanceOfOptionChangedGainsAndLossesInFairValueAtThisMonth = balanceOfOptionChangedGainsAndLossesInFairValueAtThisMonth.ToString(); var balanceOfSwapChangedGainsAndLossesInFairValueAtThisYear = GetPositionPnl(PredicateBuilder.Create(t => t.TradeType == "收益互换"), lastYearEnd, yearEnd); var balanceOfOptionChangedGainsAndLossesInFairValueAtThisYear = GetPositionPnl(PredicateBuilder.Create(t => !tradeTypes.Contains(t.TradeType)), lastYearEnd, yearEnd); model.BalanceOfSwapChangedGainsAndLossesInFairValueAtThisYear = balanceOfSwapChangedGainsAndLossesInFairValueAtThisYear.ToString(); model.BalanceOfOptionChangedGainsAndLossesInFairValueAtThisYear = balanceOfOptionChangedGainsAndLossesInFairValueAtThisYear.ToString(); model.BalanceOfSwapTotalGainsAndLossesAtThisMonth = (balanceOfSwapRealizedGainsAndLossesAtThisMonth + balanceOfSwapChangedGainsAndLossesInFairValueAtThisMonth).ToString(); model.BalanceOfOptionTotalGainsAndLossesAtThisMonth = (balanceOfOptionRealizedGainsAndLossesAtThisMonth + balanceOfOptionChangedGainsAndLossesInFairValueAtThisMonth).ToString(); model.BalanceOfSwapTotalGainsAndLossesAtThisYear = (balanceOfSwapRealizedGainsAndLossesAtThisYear + balanceOfSwapChangedGainsAndLossesInFairValueAtThisYear).ToString(); model.BalanceOfOptionTotalGainsAndLossesAtThisYear = (balanceOfOptionRealizedGainsAndLossesAtThisYear + balanceOfOptionChangedGainsAndLossesInFairValueAtThisYear).ToString(); model.MarginOfSubsistSwap = "0"; model.HedgedMarketValueOfSwap = "0"; model.LeverageRatiOfSwap = "0"; model.MarginOfSubsistStockIndexSwap = "0"; model.HedgedMarketValueOfStockIndexSwap = "0"; model.LeverageRatioOfStockIndexSwap = "0"; model.MarginOfSubsistStockSwap = "0"; model.HedgedMarketValueOfStockSwap = "0"; model.LeverageRatioOfStockSwap = "0"; model.MarginandPremiumOfSubsistOption = "0"; model.HedgedMarketValueOfOption = "0"; model.LeverageRatioOfOption = "0"; model.MarginandPremiumOfSubsistStockIndexOption = "0"; model.HedgedMarketValueOfStockIndexOption = "0"; model.LeverageRatioOfStockIndexOption = "0"; model.MarginandPremiumOfSubsistStockOption = "0"; model.HedgedMarketValueOfStockOption = "0"; model.LeverageRatioOfStockOption = "0"; model.IncreaseBusinessDetailsThisMonthTuple = new List(); var config = db.valuedate.FirstOrDefault(x => x.State == valuedate.当前使用); foreach (var item in latestMonthNewTradeInfos) { var client = DataCacheProvider.GetClientDataSource().GetData(item.ClientId); var newTrade = new IncreaseBusinessDetailsThisMonthModel(); newTrade.NameOfSecuritiesCompany = config.SuperviseMainName; newTrade.NameOfCounterparty = client.Name; if (client.ClientType == "产品") { newTrade.CounterpartyProductName = client.Name; } newTrade.TransactionConfirmationNumber = base.GetBizIdFromInfoTag(item.ContractCode); switch (item.TradeType) { case "收益互换": newTrade.BusinessType = BusinessTypeMap["互换"]; newTrade.ReturnSwapObjectSecondClass = GetSACUndrlygAssetDtldTypeMap(SwapUndrlygAssetDtldTypeMap, item.UnderlyingInstrumentType, item.CommodityCode); break; case "远期": newTrade.BusinessType = BusinessTypeMap["远期"]; break; default: newTrade.BusinessType = BusinessTypeMap["期权"]; newTrade.OptionObjectSecondClass = GetSACUndrlygAssetDtldTypeMap(UndrlygAssetDtldTypeMap, item.UnderlyingInstrumentType, item.CommodityCode); newTrade.NonAnnualOptionFee = ((item.PremiumRate ?? (item.TradePrice / item.OriginalStockEqvNotional) ?? 0) * 100).ToString("0.##"); switch (item.TradeType) { case "香草期权": newTrade.OptionType = OptionStructureTypeMap["香草"]; break; case "二元期权": newTrade.OptionType = OptionStructureTypeMap["二元"]; break; case "价差期权": newTrade.OptionType = OptionStructureTypeMap["价差"]; break; case "障碍期权": newTrade.OptionType = OptionStructureTypeMap["障碍"]; break; case "双鲨期权": newTrade.OptionType = OptionStructureTypeMap["双鲨"]; break; default: newTrade.OptionType = OptionStructureTypeMap["其他"]; break; } break; } newTrade.NotionalPrincipalAmountLNotionalPrincipalAmount = ((item.StockEqvNotional ?? 0) / 1e9).ToString("0.0000"); //newTrade.SNotionalPrincipalAmount = ((item.StockEqvNotional ?? 0) / 1e9).ToString("0.0000");//当前版本中不存在多空组合的交易 newTrade.StartDate = item.StartDate?.ToString("yyyy-MM-dd"); newTrade.DueDate = item.ExerciseDate?.ToString("yyyy-MM-dd"); newTrade.UndrlygAssetName = item.UnderlyingName; newTrade.UndrlygAssetCode = item.UnderlyingCode; newTrade.UndrlygAssetTradgPlc = string.IsNullOrWhiteSpace(item.MarketName) ? "其他" : item.MarketName; switch (ConsGlobal.InstrumentType.GetDesc(item.UnderlyingInstrumentType)) { case "股票": newTrade.InvestmentTargetType = UndrlygAssetTypeMap["权益类"]; break; case "股指期货": case "商品期货": case "商品现货": newTrade.InvestmentTargetType = UndrlygAssetTypeMap["大宗商品"]; break; default: newTrade.InvestmentTargetType = UndrlygAssetTypeMap["其他"]; break; } model.IncreaseBusinessDetailsThisMonthTuple.Add(newTrade); } model.InventoryBusinessDetailsAtTheEndOfThisMonthTuple = new List(); foreach (var item in latestTradeInfos) { var client = DataCacheProvider.GetClientDataSource().GetData(item.ClientId); var newTrade = new InventoryBusinessDetailsAtTheEndOfThisMonthModel(); newTrade.NameOfSecuritiesCompany = config.SuperviseMainName; newTrade.NameOfCounterparty = client.Name; if (client.ClientType == "产品") { newTrade.NameOfCounterpartyProduct = client.Name; } newTrade.TransactionConfirmationNumber = item.ContractCode; switch (item.TradeType) { case "收益互换": newTrade.BusinessType = BusinessTypeMap["互换"]; newTrade.ExchangeSumInvestmentTargetType = GetSACUndrlygAssetDtldTypeMap(SwapUndrlygAssetDtldTypeMap, item.UnderlyingInstrumentType, item.CommodityCode); break; case "远期": newTrade.BusinessType = BusinessTypeMap["远期"]; break; default: newTrade.BusinessType = BusinessTypeMap["期权"]; newTrade.OptionSumInvestmentTargetType = GetSACUndrlygAssetDtldTypeMap(UndrlygAssetDtldTypeMap, item.UnderlyingInstrumentType, item.CommodityCode); newTrade.OptionFee = Math.Abs((item.PremiumRate ?? (item.TradePrice / item.OriginalStockEqvNotional) ?? 0) * 100).ToString("0.##"); switch (item.TradeType) { case "香草期权": newTrade.OptionType = OptionStructureTypeMap["香草"]; break; case "二元期权": newTrade.OptionType = OptionStructureTypeMap["二元"]; break; case "价差期权": newTrade.OptionType = OptionStructureTypeMap["价差"]; break; case "障碍期权": newTrade.OptionType = OptionStructureTypeMap["障碍"]; break; case "双鲨期权": newTrade.OptionType = OptionStructureTypeMap["双鲨"]; break; default: newTrade.OptionType = OptionStructureTypeMap["其他"]; break; } break; } newTrade.NotionalPrincipalAmountLNotionalPrincipalAmount = (item.StockEqvNotional / 1e9).ToString("0.0000"); //newTrade.SNotionalPrincipalAmount = (item.StockEqvNotional / 1e9).ToString("0.0000");//当前版本中不存在多空组合的交易 newTrade.StartDay = item.StartDate?.ToString("yyyy-MM-dd"); newTrade.DueDate = item.ExerciseDate?.ToString("yyyy-MM-dd"); newTrade.UndrlygAssetName = item.UnderlyingName; newTrade.UndrlygAssetCode = item.UnderlyingCode; newTrade.MaitainMarginRation = (item.PositionMarginRate * 100).ToString("0.00"); var longShort = item.trade_swap?.GetLongShort ?? item.trade_swap?.PayLongShort; if (longShort == "空头") { newTrade.ShortPositionContractValue = (item.Pv).ToString("0.00"); } else { newTrade.LongPositionContractValue = (item.Pv).ToString("0.00"); } newTrade.UndrlygAssetTradgPlc = string.IsNullOrWhiteSpace(item.MarketName) ? "其他" : item.MarketName; switch (ConsGlobal.InstrumentType.GetDesc(item.UnderlyingInstrumentType)) { case "股票": newTrade.SumInvestmentTargetType = UndrlygAssetTypeMap["权益类"]; break; case "股指期货": case "商品期货": case "商品现货": newTrade.SumInvestmentTargetType = UndrlygAssetTypeMap["大宗商品"]; break; default: newTrade.SumInvestmentTargetType = UndrlygAssetTypeMap["其他"]; break; } model.InventoryBusinessDetailsAtTheEndOfThisMonthTuple.Add(newTrade); } model.TargetCaseAndHedgeTuple = new List(); var eodtradeposition = (from ep in db.eod_trade_position join um in db.underlying_manager on ep.UnderlyingCode equals um.UnderlyingCode where ep.ValueDate == _reqInfo.SACReportDate.Value && ep.ClientId == 0 select new { ep, um }) .ToArray().GroupBy(O => O.ep.TradeType == "股票" ? O.ep.UnderlyingCode : O.um.CommodityCode) .Select(O => new { O.Key, Amount = O.Sum(B => B.ep.Amount * (B.ep.PositionType == "long" ? 1 : -1)), Cost = O.Sum(B => B.ep.Cost * (B.ep.PositionType == "long" ? 1 : -1)), O.FirstOrDefault()?.ep.TradeType, O.FirstOrDefault()?.um.UnderlyingInstrumentType, O.FirstOrDefault()?.um.CommodityCode, O.FirstOrDefault()?.um.UnderlyingCode, O.FirstOrDefault()?.um.MarketName, }).ToArray(); foreach (var item in eodtradeposition) { var info = new TargetCaseAndHedgeModel(); info.NameOfSecuritiesCompany = config.SuperviseMainName; switch (ConsGlobal.InstrumentType.GetDesc(item.UnderlyingInstrumentType)) { case "股票": info.SumInvestmentTargetType = HedgeSACUndrlygAssetDtldTypeMap["权益类"]; break; case "股指期货": case "商品期货": case "商品现货": info.SumInvestmentTargetType = HedgeSACUndrlygAssetDtldTypeMap["大宗商品"]; break; default: info.SumInvestmentTargetType = HedgeSACUndrlygAssetDtldTypeMap["其他"]; break; } switch (item.TradeType) { case "收益互换": info.BusinessType = BusinessTypeMap["互换"]; break; default: info.BusinessType = BusinessTypeMap["期权"]; break; } info.SumInvestmentTargetName = item.Key; info.UndrlygAssetCode = item.UnderlyingCode; info.UndrlygAssetTradgPlc = item.MarketName; info.BuyingImpulseVolume = "0"; info.SellingImpulseVolume = "0"; info.ImpulseVolume = "0"; info.PositionAtTheEndOfThisMonth = item.Cost.ToString(); info.TheNumberOfPositionsHeldAtTheEndOfThisMonth = item.Amount.ToString(); info.AveragePriceAtTheEndOfTheMonth = (item.Cost / item.Amount).ToString(); model.TargetCaseAndHedgeTuple.Add(info); } } } return model; } private PeriodicReportSACModel GetPeriodicReportSACFromExcelAndDb() { var dbInfo = GetPeriodicReportSACFromDb(); var excelInfo = GetPeriodicReportSACFromExcel(); var model = new PeriodicReportSACModel(); model.Year = _reqInfo.SACReportDate.Value.Year.ToString("0000"); model.Month = _reqInfo.SACReportDate.Value.Month.ToString("0"); model.MainAgreementAddedThisMonth = Sum(dbInfo.MainAgreementAddedThisMonth, excelInfo.MainAgreementAddedThisMonth); model.MainAgreementAccumulatedThisYear = Sum(dbInfo.MainAgreementAccumulatedThisYear, excelInfo.MainAgreementAccumulatedThisYear); model.MainAgreementValidedAtEndOfThisMonth = Sum(dbInfo.MainAgreementValidedAtEndOfThisMonth, excelInfo.MainAgreementValidedAtEndOfThisMonth); model.SupplementalAgreementAddedThisMonth = Sum(dbInfo.SupplementalAgreementAddedThisMonth, excelInfo.SupplementalAgreementAddedThisMonth); model.SupplementalAgreementAccumulatedThisYear = Sum(dbInfo.SupplementalAgreementAccumulatedThisYear, excelInfo.SupplementalAgreementAccumulatedThisYear); model.SupplementalAgreementValidedAtTheEndOfThisMonth = Sum(dbInfo.SupplementalAgreementValidedAtTheEndOfThisMonth, excelInfo.SupplementalAgreementValidedAtTheEndOfThisMonth); model.PerformanceGuaranteeAgreementAddedThisMonth = Sum(dbInfo.PerformanceGuaranteeAgreementAddedThisMonth, excelInfo.PerformanceGuaranteeAgreementAddedThisMonth); model.PerformanceGuaranteeAgreementAccumulatedThisYear = Sum(dbInfo.PerformanceGuaranteeAgreementAccumulatedThisYear, excelInfo.PerformanceGuaranteeAgreementAccumulatedThisYear); model.PerformanceGuaranteeAgreementValidedAtEndOfThisMonth = Sum(dbInfo.PerformanceGuaranteeAgreementValidedAtEndOfThisMonth, excelInfo.PerformanceGuaranteeAgreementValidedAtEndOfThisMonth); model.TransactionConfirmationAddedThisMonth = Sum(dbInfo.TransactionConfirmationAddedThisMonth, excelInfo.TransactionConfirmationAddedThisMonth); model.TransactionConfirmationBookAccumulatedThisYear = Sum(dbInfo.TransactionConfirmationBookAccumulatedThisYear, excelInfo.TransactionConfirmationBookAccumulatedThisYear); model.TransactionConfirmationValidedAtEndOfThisMonth = Sum(dbInfo.TransactionConfirmationValidedAtEndOfThisMonth, excelInfo.TransactionConfirmationValidedAtEndOfThisMonth); model.ToCarryOutSelfEquitySecuritiesAndOTCDerivativesScaleStockOptionBusinessCorrespondence = Sum(dbInfo.ToCarryOutSelfEquitySecuritiesAndOTCDerivativesScaleStockOptionBusinessCorrespondence, excelInfo.ToCarryOutSelfEquitySecuritiesAndOTCDerivativesScaleStockOptionBusinessCorrespondence); model.NetCapitalAtEndOfTheMonth = Sum(dbInfo.NetCapitalAtEndOfTheMonth, excelInfo.NetCapitalAtEndOfTheMonth); model.ToCarryOutSelfEquitySecuritiesAndOTCDerivativesScaleStockOptionsBusinessAccountedForTheProportionOfTheCorrespondingNetCapital = Sum(dbInfo.ToCarryOutSelfEquitySecuritiesAndOTCDerivativesScaleStockOptionsBusinessAccountedForTheProportionOfTheCorrespondingNetCapital, excelInfo.ToCarryOutSelfEquitySecuritiesAndOTCDerivativesScaleStockOptionsBusinessAccountedForTheProportionOfTheCorrespondingNetCapital); model.OTCOptionHasSignedByLegalPerson = Sum(dbInfo.OTCOptionHasSignedByLegalPerson, excelInfo.OTCOptionHasSignedByLegalPerson); model.OTCOptionsHaveContractedProducts = Sum(dbInfo.OTCOptionsHaveContractedProducts, excelInfo.OTCOptionsHaveContractedProducts); model.OTCOptionsForTheMonthOfTheNewAddLegalPerson = Sum(dbInfo.OTCOptionsForTheMonthOfTheNewAddLegalPerson, excelInfo.OTCOptionsForTheMonthOfTheNewAddLegalPerson); model.OTCOptionsForTheMonthOfTheNewAddProduct = Sum(dbInfo.OTCOptionsForTheMonthOfTheNewAddProduct, excelInfo.OTCOptionsForTheMonthOfTheNewAddProduct); model.OTCOptionsLegalPersonInDurationForThisMouth = Sum(dbInfo.OTCOptionsLegalPersonInDurationForThisMouth, excelInfo.OTCOptionsLegalPersonInDurationForThisMouth); model.OTCOptionsProductsInDurationForThisMouth = Sum(dbInfo.OTCOptionsProductsInDurationForThisMouth, excelInfo.OTCOptionsProductsInDurationForThisMouth); model.IncomeSwapHasSignedLegalPersonNumber = Sum(dbInfo.IncomeSwapHasSignedLegalPersonNumber, excelInfo.IncomeSwapHasSignedLegalPersonNumber); model.IncomeSwapHasSignedProductNumber = Sum(dbInfo.IncomeSwapHasSignedProductNumber, excelInfo.IncomeSwapHasSignedProductNumber); model.IncomeSwapForTheMonthOfTheNewAddLegalPerson = Sum(dbInfo.IncomeSwapForTheMonthOfTheNewAddLegalPerson, excelInfo.IncomeSwapForTheMonthOfTheNewAddLegalPerson); model.IncomeSwapForTheMonthOfTheNewAddProduct = Sum(dbInfo.IncomeSwapForTheMonthOfTheNewAddProduct, excelInfo.IncomeSwapForTheMonthOfTheNewAddProduct); model.IncomeSwapLegalPersonInDurationForThisMouth = Sum(dbInfo.IncomeSwapLegalPersonInDurationForThisMouth, excelInfo.IncomeSwapLegalPersonInDurationForThisMouth); model.IncomeSwapProductsInDurationForThisMouth = Sum(dbInfo.IncomeSwapProductsInDurationForThisMouth, excelInfo.IncomeSwapProductsInDurationForThisMouth); model.OTCStockIndexOptionsWithinTheLastMonthTheExistenceOfScale = Sum(dbInfo.OTCStockIndexOptionsWithinTheLastMonthTheExistenceOfScale, excelInfo.OTCStockIndexOptionsWithinTheLastMonthTheExistenceOfScale); model.OTCOptionsWithinIndividualStocksLateLastMonthDurationScale = Sum(dbInfo.OTCOptionsWithinIndividualStocksLateLastMonthDurationScale, excelInfo.OTCOptionsWithinIndividualStocksLateLastMonthDurationScale); model.OTCOptionsCommoditiesLastMonthDurationScale = Sum(dbInfo.OTCOptionsCommoditiesLastMonthDurationScale, excelInfo.OTCOptionsCommoditiesLastMonthDurationScale); model.OTCOptionsOtherSubjectLastMonthDurationScale = Sum(dbInfo.OTCOptionsOtherSubjectLastMonthDurationScale, excelInfo.OTCOptionsOtherSubjectLastMonthDurationScale); model.RevenueExchangeDomesticStockIndexLastMonthDurationScale = Sum(dbInfo.RevenueExchangeDomesticStockIndexLastMonthDurationScale, excelInfo.RevenueExchangeDomesticStockIndexLastMonthDurationScale); model.RevenueExchangeDomesticIndividualStocksLastMonthDurationScale = Sum(dbInfo.RevenueExchangeDomesticIndividualStocksLastMonthDurationScale, excelInfo.RevenueExchangeDomesticIndividualStocksLastMonthDurationScale); model.RevenueExchangeCommoditiesLastMonthDurationScale = Sum(dbInfo.RevenueExchangeCommoditiesLastMonthDurationScale, excelInfo.RevenueExchangeCommoditiesLastMonthDurationScale); model.RevenueExchangeOtherSubjectLastMonthDurationScale = Sum(dbInfo.RevenueExchangeOtherSubjectLastMonthDurationScale, excelInfo.RevenueExchangeOtherSubjectLastMonthDurationScale); model.TotalOfLastMonthDurationScale = Sum(dbInfo.TotalOfLastMonthDurationScale, excelInfo.TotalOfLastMonthDurationScale); model.OTCOptionsWithinTheIndexThisMonthOfTheNewScale = Sum(dbInfo.OTCOptionsWithinTheIndexThisMonthOfTheNewScale, excelInfo.OTCOptionsWithinTheIndexThisMonthOfTheNewScale); model.OTCOptionsToAddScaleDomesticStocksInThisMonth = Sum(dbInfo.OTCOptionsToAddScaleDomesticStocksInThisMonth, excelInfo.OTCOptionsToAddScaleDomesticStocksInThisMonth); model.OTCOptionsCommoditiesTheNewSizeOfTheIncreaseInThisMonth = Sum(dbInfo.OTCOptionsCommoditiesTheNewSizeOfTheIncreaseInThisMonth, excelInfo.OTCOptionsCommoditiesTheNewSizeOfTheIncreaseInThisMonth); model.OTCOptionsOtherSubjectTheNewSizeOfTheIncreaseInThisMonth = Sum(dbInfo.OTCOptionsOtherSubjectTheNewSizeOfTheIncreaseInThisMonth, excelInfo.OTCOptionsOtherSubjectTheNewSizeOfTheIncreaseInThisMonth); model.RevenueExchangeDomesticStockIndexTheNewSizeOfTheIncreaseInThisMonth = Sum(dbInfo.RevenueExchangeDomesticStockIndexTheNewSizeOfTheIncreaseInThisMonth, excelInfo.RevenueExchangeDomesticStockIndexTheNewSizeOfTheIncreaseInThisMonth); model.RevenueExchangeDomesticIndividualStocksTheNewSizeOfTheIncreaseInThisMonth = Sum(dbInfo.RevenueExchangeDomesticIndividualStocksTheNewSizeOfTheIncreaseInThisMonth, excelInfo.RevenueExchangeDomesticIndividualStocksTheNewSizeOfTheIncreaseInThisMonth); model.RevenueExchangeCommoditiesTheNewSizeOfTheIncreaseInThisMonth = Sum(dbInfo.RevenueExchangeCommoditiesTheNewSizeOfTheIncreaseInThisMonth, excelInfo.RevenueExchangeCommoditiesTheNewSizeOfTheIncreaseInThisMonth); model.RevenueExchangeOtherSubjectTheNewSizeOfTheIncreaseInThisMonth = Sum(dbInfo.RevenueExchangeOtherSubjectTheNewSizeOfTheIncreaseInThisMonth, excelInfo.RevenueExchangeOtherSubjectTheNewSizeOfTheIncreaseInThisMonth); model.TotalOfTheNewSizeOfTheIncreaseInThisMonth = Sum(dbInfo.TotalOfTheNewSizeOfTheIncreaseInThisMonth, excelInfo.TotalOfTheNewSizeOfTheIncreaseInThisMonth); model.OTCOptionsTerminateScaleDomesticStockIndexThisMonth = Sum(dbInfo.OTCOptionsTerminateScaleDomesticStockIndexThisMonth, excelInfo.OTCOptionsTerminateScaleDomesticStockIndexThisMonth); model.OTCOptionsTerminateScaleDomesticStocksInThisMonth = Sum(dbInfo.OTCOptionsTerminateScaleDomesticStocksInThisMonth, excelInfo.OTCOptionsTerminateScaleDomesticStocksInThisMonth); model.OTCOptionsCommoditiesTerminationOfTheScaleOfThisMonth = Sum(dbInfo.OTCOptionsCommoditiesTerminationOfTheScaleOfThisMonth, excelInfo.OTCOptionsCommoditiesTerminationOfTheScaleOfThisMonth); model.OTCOptionsOtherSubjectTerminationOfTheScaleOfThisMonth = Sum(dbInfo.OTCOptionsOtherSubjectTerminationOfTheScaleOfThisMonth, excelInfo.OTCOptionsOtherSubjectTerminationOfTheScaleOfThisMonth); model.RevenueExchangeDomesticStockIndexTerminationOfTheScaleOfThisMonth = Sum(dbInfo.RevenueExchangeDomesticStockIndexTerminationOfTheScaleOfThisMonth, excelInfo.RevenueExchangeDomesticStockIndexTerminationOfTheScaleOfThisMonth); model.RevenueExchangeDomesticIndividualStocksTerminationOfTheScaleOfThisMonth = Sum(dbInfo.RevenueExchangeDomesticIndividualStocksTerminationOfTheScaleOfThisMonth, excelInfo.RevenueExchangeDomesticIndividualStocksTerminationOfTheScaleOfThisMonth); model.RevenueExchangeCommoditiesTerminationOfTheScaleOfThisMonth = Sum(dbInfo.RevenueExchangeCommoditiesTerminationOfTheScaleOfThisMonth, excelInfo.RevenueExchangeCommoditiesTerminationOfTheScaleOfThisMonth); model.RevenueExchangeOtherSubjectTerminationOfTheScaleOfThisMonth = Sum(dbInfo.RevenueExchangeOtherSubjectTerminationOfTheScaleOfThisMonth, excelInfo.RevenueExchangeOtherSubjectTerminationOfTheScaleOfThisMonth); model.TotalOfTerminationOfTheScaleOfThisMonth = Sum(dbInfo.TotalOfTerminationOfTheScaleOfThisMonth, excelInfo.TotalOfTerminationOfTheScaleOfThisMonth); model.OTCStockIndexOptionsWithinThisMonthOfTheExistenceOfScale = Sum(dbInfo.OTCStockIndexOptionsWithinThisMonthOfTheExistenceOfScale, excelInfo.OTCStockIndexOptionsWithinThisMonthOfTheExistenceOfScale); model.OTCOptionsWithinIndividualStocksInThisMonthDurationScale = Sum(dbInfo.OTCOptionsWithinIndividualStocksInThisMonthDurationScale, excelInfo.OTCOptionsWithinIndividualStocksInThisMonthDurationScale); model.OTCOptionsCommoditiesInThisMonthDurationScale = Sum(dbInfo.OTCOptionsCommoditiesInThisMonthDurationScale, excelInfo.OTCOptionsCommoditiesInThisMonthDurationScale); model.OTCOptionsOtherSubjectThisMonthDurationScale = Sum(dbInfo.OTCOptionsOtherSubjectThisMonthDurationScale, excelInfo.OTCOptionsOtherSubjectThisMonthDurationScale); model.RevenueExchangeDomesticStockIndexThisMonthDurationScale = Sum(dbInfo.RevenueExchangeDomesticStockIndexThisMonthDurationScale, excelInfo.RevenueExchangeDomesticStockIndexThisMonthDurationScale); model.RevenueExchangeDomesticIndividualStocksThisMonthDurationScale = Sum(dbInfo.RevenueExchangeDomesticIndividualStocksThisMonthDurationScale, excelInfo.RevenueExchangeDomesticIndividualStocksThisMonthDurationScale); model.RevenueExchangeCommoditiesThisMonthDurationScale = Sum(dbInfo.RevenueExchangeCommoditiesThisMonthDurationScale, excelInfo.RevenueExchangeCommoditiesThisMonthDurationScale); model.RevenueExchangeOtherSubjectThisMonthDurationScale = Sum(dbInfo.RevenueExchangeOtherSubjectThisMonthDurationScale, excelInfo.RevenueExchangeOtherSubjectThisMonthDurationScale); model.TotalOfThisMonthDurationScale = Sum(dbInfo.TotalOfThisMonthDurationScale, excelInfo.TotalOfThisMonthDurationScale); model.OTCOptionsStockIndexThisYearCumulativeScaleOfNewTerritory = Sum(dbInfo.OTCOptionsStockIndexThisYearCumulativeScaleOfNewTerritory, excelInfo.OTCOptionsStockIndexThisYearCumulativeScaleOfNewTerritory); model.OTCOptionsStockThisYearCumulativeScaleOfNewTerritory = Sum(dbInfo.OTCOptionsStockThisYearCumulativeScaleOfNewTerritory, excelInfo.OTCOptionsStockThisYearCumulativeScaleOfNewTerritory); model.OTCOptionsCommoditiesThisYearCumulativeScaleOfNewTerritory = Sum(dbInfo.OTCOptionsCommoditiesThisYearCumulativeScaleOfNewTerritory, excelInfo.OTCOptionsCommoditiesThisYearCumulativeScaleOfNewTerritory); model.OTCOptionsOtherSubjectThisYearCumulativeScaleOfNewTerritory = Sum(dbInfo.OTCOptionsOtherSubjectThisYearCumulativeScaleOfNewTerritory, excelInfo.OTCOptionsOtherSubjectThisYearCumulativeScaleOfNewTerritory); model.IncomeSwapDomesticStockIndexHasAddedNewScaleInThisYear = Sum(dbInfo.IncomeSwapDomesticStockIndexHasAddedNewScaleInThisYear, excelInfo.IncomeSwapDomesticStockIndexHasAddedNewScaleInThisYear); model.IncomeSwapDomesticStockHasAddedNewScaleInThisYear = Sum(dbInfo.IncomeSwapDomesticStockHasAddedNewScaleInThisYear, excelInfo.IncomeSwapDomesticStockHasAddedNewScaleInThisYear); model.IncomeSwapCommoditiesIndexHasAddedNewScaleInThisYear = Sum(dbInfo.IncomeSwapCommoditiesIndexHasAddedNewScaleInThisYear, excelInfo.IncomeSwapCommoditiesIndexHasAddedNewScaleInThisYear); model.IncomeSwapOtherSubjectIndexHasAddedNewScaleInThisYear = Sum(dbInfo.IncomeSwapOtherSubjectIndexHasAddedNewScaleInThisYear, excelInfo.IncomeSwapOtherSubjectIndexHasAddedNewScaleInThisYear); model.TotalNewScaleInThisYear = Sum(dbInfo.TotalNewScaleInThisYear, excelInfo.TotalNewScaleInThisYear); model.OTCOptionsStockIndexAtTheEndOfLastMonth = Sum(dbInfo.OTCOptionsStockIndexAtTheEndOfLastMonth, excelInfo.OTCOptionsStockIndexAtTheEndOfLastMonth); model.OTCOptionsStockAtTheEndOfLastMonth = Sum(dbInfo.OTCOptionsStockAtTheEndOfLastMonth, excelInfo.OTCOptionsStockAtTheEndOfLastMonth); model.OTCOptionsCommoditiesAtTheEndOfLastMonth = Sum(dbInfo.OTCOptionsCommoditiesAtTheEndOfLastMonth, excelInfo.OTCOptionsCommoditiesAtTheEndOfLastMonth); model.OTCOptionsOtherSubjectAtTheEndOfLastMonth = Sum(dbInfo.OTCOptionsOtherSubjectAtTheEndOfLastMonth, excelInfo.OTCOptionsOtherSubjectAtTheEndOfLastMonth); model.IncomeExchangeDomesticStockIndexNumberOfRemainingContractsAtTheEndOfLastMonth = Sum(dbInfo.IncomeExchangeDomesticStockIndexNumberOfRemainingContractsAtTheEndOfLastMonth, excelInfo.IncomeExchangeDomesticStockIndexNumberOfRemainingContractsAtTheEndOfLastMonth); model.IncomeExchangeDomesticStockNumberOfRemainingContractsAtTheEndOfLastMonth = Sum(dbInfo.IncomeExchangeDomesticStockNumberOfRemainingContractsAtTheEndOfLastMonth, excelInfo.IncomeExchangeDomesticStockNumberOfRemainingContractsAtTheEndOfLastMonth); model.IncomeExchangeCommoditiesNumberOfRemainingContractsAtTheEndOfLastMonth = Sum(dbInfo.IncomeExchangeCommoditiesNumberOfRemainingContractsAtTheEndOfLastMonth, excelInfo.IncomeExchangeCommoditiesNumberOfRemainingContractsAtTheEndOfLastMonth); model.IncomeExchangeOtherSubjectNumberOfRemainingContractsAtTheEndOfLastMonth = Sum(dbInfo.IncomeExchangeOtherSubjectNumberOfRemainingContractsAtTheEndOfLastMonth, excelInfo.IncomeExchangeOtherSubjectNumberOfRemainingContractsAtTheEndOfLastMonth); model.TotalNumberOfContractsAtTheEndOfLastMonth = Sum(dbInfo.TotalNumberOfContractsAtTheEndOfLastMonth, excelInfo.TotalNumberOfContractsAtTheEndOfLastMonth); model.OTCOptionsStockIndexThisMonthNewDomesticContractNumber = Sum(dbInfo.OTCOptionsStockIndexThisMonthNewDomesticContractNumber, excelInfo.OTCOptionsStockIndexThisMonthNewDomesticContractNumber); model.OTCOptionsStockThisMonthNewDomesticContractNumber = Sum(dbInfo.OTCOptionsStockThisMonthNewDomesticContractNumber, excelInfo.OTCOptionsStockThisMonthNewDomesticContractNumber); model.OTCOptionsCommoditiesThisMonthNewDomesticContractNumber = Sum(dbInfo.OTCOptionsCommoditiesThisMonthNewDomesticContractNumber, excelInfo.OTCOptionsCommoditiesThisMonthNewDomesticContractNumber); model.OTCOptionsOtherSubjectThisMonthNewDomesticContractNumber = Sum(dbInfo.OTCOptionsOtherSubjectThisMonthNewDomesticContractNumber, excelInfo.OTCOptionsOtherSubjectThisMonthNewDomesticContractNumber); model.IncomeSwapDomesticStockIndexNewContractInThisMonth = Sum(dbInfo.IncomeSwapDomesticStockIndexNewContractInThisMonth, excelInfo.IncomeSwapDomesticStockIndexNewContractInThisMonth); model.IncomeSwapDomesticStockNewContractInThisMonth = Sum(dbInfo.IncomeSwapDomesticStockNewContractInThisMonth, excelInfo.IncomeSwapDomesticStockNewContractInThisMonth); model.IncomeSwapCommoditiesNewContractInThisMonth = Sum(dbInfo.IncomeSwapCommoditiesNewContractInThisMonth, excelInfo.IncomeSwapCommoditiesNewContractInThisMonth); model.IncomeSwapOtherSubjectNewContractInThisMonth = Sum(dbInfo.IncomeSwapOtherSubjectNewContractInThisMonth, excelInfo.IncomeSwapOtherSubjectNewContractInThisMonth); model.TotalNumberOfNewContractsInThisMonth = Sum(dbInfo.TotalNumberOfNewContractsInThisMonth, excelInfo.TotalNumberOfNewContractsInThisMonth); model.OTCOptionsThisMonthToTerminateTheContractWithinTheTerritoryOfTheStockIndexNumber = Sum(dbInfo.OTCOptionsThisMonthToTerminateTheContractWithinTheTerritoryOfTheStockIndexNumber, excelInfo.OTCOptionsThisMonthToTerminateTheContractWithinTheTerritoryOfTheStockIndexNumber); model.OTCOptionsThisMonthToTerminateTheContractWithinTheTerritoryOfTheStockNumber = Sum(dbInfo.OTCOptionsThisMonthToTerminateTheContractWithinTheTerritoryOfTheStockNumber, excelInfo.OTCOptionsThisMonthToTerminateTheContractWithinTheTerritoryOfTheStockNumber); model.OTCOptionsThisMonthToTerminateTheContractWithinTheTerritoryOfTheCommoditiesNumber = Sum(dbInfo.OTCOptionsThisMonthToTerminateTheContractWithinTheTerritoryOfTheCommoditiesNumber, excelInfo.OTCOptionsThisMonthToTerminateTheContractWithinTheTerritoryOfTheCommoditiesNumber); model.OTCOptionsThisMonthToTerminateTheContractWithinTheTerritoryOfTheOtherSubjectNumber = Sum(dbInfo.OTCOptionsThisMonthToTerminateTheContractWithinTheTerritoryOfTheOtherSubjectNumber, excelInfo.OTCOptionsThisMonthToTerminateTheContractWithinTheTerritoryOfTheOtherSubjectNumber); model.IncomeSwapDomesticStockIndexTerminatesTheNumberOfContractsThisMonth = Sum(dbInfo.IncomeSwapDomesticStockIndexTerminatesTheNumberOfContractsThisMonth, excelInfo.IncomeSwapDomesticStockIndexTerminatesTheNumberOfContractsThisMonth); model.IncomeSwapDomesticStockTerminatesTheNumberOfContractsThisMonth = Sum(dbInfo.IncomeSwapDomesticStockTerminatesTheNumberOfContractsThisMonth, excelInfo.IncomeSwapDomesticStockTerminatesTheNumberOfContractsThisMonth); model.IncomeSwapCommoditiesTerminatesTheNumberOfContractsThisMonth = Sum(dbInfo.IncomeSwapCommoditiesTerminatesTheNumberOfContractsThisMonth, excelInfo.IncomeSwapCommoditiesTerminatesTheNumberOfContractsThisMonth); model.IncomeSwapOtherSubjectTerminatesTheNumberOfContractsThisMonth = Sum(dbInfo.IncomeSwapOtherSubjectTerminatesTheNumberOfContractsThisMonth, excelInfo.IncomeSwapOtherSubjectTerminatesTheNumberOfContractsThisMonth); model.TotalNumberOfContractsTerminatedThisMonth = Sum(dbInfo.TotalNumberOfContractsTerminatedThisMonth, excelInfo.TotalNumberOfContractsTerminatedThisMonth); model.OTCDomesticStockIndexNumberOfRemainingContractsAtTheEndOfThisMonth = Sum(dbInfo.OTCDomesticStockIndexNumberOfRemainingContractsAtTheEndOfThisMonth, excelInfo.OTCDomesticStockIndexNumberOfRemainingContractsAtTheEndOfThisMonth); model.OTCDomesticStockNumberOfRemainingContractsAtTheEndOfThisMonth = Sum(dbInfo.OTCDomesticStockNumberOfRemainingContractsAtTheEndOfThisMonth, excelInfo.OTCDomesticStockNumberOfRemainingContractsAtTheEndOfThisMonth); model.OTCCommoditiesNumberOfRemainingContractsAtTheEndOfThisMonth = Sum(dbInfo.OTCCommoditiesNumberOfRemainingContractsAtTheEndOfThisMonth, excelInfo.OTCCommoditiesNumberOfRemainingContractsAtTheEndOfThisMonth); model.OTCOtherSubjectNumberOfRemainingContractsAtTheEndOfThisMonth = Sum(dbInfo.OTCOtherSubjectNumberOfRemainingContractsAtTheEndOfThisMonth, excelInfo.OTCOtherSubjectNumberOfRemainingContractsAtTheEndOfThisMonth); model.IncomeExchangeDomesticStockIndexNumberOfRemainingContractsAtTheEndOfThisMonth = Sum(dbInfo.IncomeExchangeDomesticStockIndexNumberOfRemainingContractsAtTheEndOfThisMonth, excelInfo.IncomeExchangeDomesticStockIndexNumberOfRemainingContractsAtTheEndOfThisMonth); model.IncomeExchangeDomesticStockNumberOfRemainingContractsAtTheEndOfThisMonth = Sum(dbInfo.IncomeExchangeDomesticStockNumberOfRemainingContractsAtTheEndOfThisMonth, excelInfo.IncomeExchangeDomesticStockNumberOfRemainingContractsAtTheEndOfThisMonth); model.IncomeExchangeCommoditiesNumberOfRemainingContractsAtTheEndOfThisMonth = Sum(dbInfo.IncomeExchangeCommoditiesNumberOfRemainingContractsAtTheEndOfThisMonth, excelInfo.IncomeExchangeCommoditiesNumberOfRemainingContractsAtTheEndOfThisMonth); model.IncomeExchangeOtherSubjectNumberOfRemainingContractsAtTheEndOfThisMonth = Sum(dbInfo.IncomeExchangeOtherSubjectNumberOfRemainingContractsAtTheEndOfThisMonth, excelInfo.IncomeExchangeOtherSubjectNumberOfRemainingContractsAtTheEndOfThisMonth); model.TotalNumberOfContractsAtTheEndOfThisMonth = Sum(dbInfo.TotalNumberOfContractsAtTheEndOfThisMonth, excelInfo.TotalNumberOfContractsAtTheEndOfThisMonth); model.OTCOptionsStockIndexCumulativeDomesticNewContractNumberInThisYear = Sum(dbInfo.OTCOptionsStockIndexCumulativeDomesticNewContractNumberInThisYear, excelInfo.OTCOptionsStockIndexCumulativeDomesticNewContractNumberInThisYear); model.OTCOptionsStockCumulativeDomesticNewContractNumberInThisYear = Sum(dbInfo.OTCOptionsStockCumulativeDomesticNewContractNumberInThisYear, excelInfo.OTCOptionsStockCumulativeDomesticNewContractNumberInThisYear); model.OTCOptionsCommoditiesCumulativeDomesticNewContractNumberInThisYear = Sum(dbInfo.OTCOptionsCommoditiesCumulativeDomesticNewContractNumberInThisYear, excelInfo.OTCOptionsCommoditiesCumulativeDomesticNewContractNumberInThisYear); model.OTCOptionsOtherSubjectCumulativeDomesticNewContractNumberInThisYear = Sum(dbInfo.OTCOptionsOtherSubjectCumulativeDomesticNewContractNumberInThisYear, excelInfo.OTCOptionsOtherSubjectCumulativeDomesticNewContractNumberInThisYear); model.IncomeSwapDomesticStockIndexCumulativeNumberOfNewContractsInThisYear = Sum(dbInfo.IncomeSwapDomesticStockIndexCumulativeNumberOfNewContractsInThisYear, excelInfo.IncomeSwapDomesticStockIndexCumulativeNumberOfNewContractsInThisYear); model.IncomeSwapDomesticStockCumulativeNumberOfNewContractsInThisYear = Sum(dbInfo.IncomeSwapDomesticStockCumulativeNumberOfNewContractsInThisYear, excelInfo.IncomeSwapDomesticStockCumulativeNumberOfNewContractsInThisYear); model.IncomeSwapCommoditiesCumulativeNumberOfNewContractsInThisYear = Sum(dbInfo.IncomeSwapCommoditiesCumulativeNumberOfNewContractsInThisYear, excelInfo.IncomeSwapCommoditiesCumulativeNumberOfNewContractsInThisYear); model.IncomeSwapOtherSubjectCumulativeNumberOfNewContractsInThisYear = Sum(dbInfo.IncomeSwapOtherSubjectCumulativeNumberOfNewContractsInThisYear, excelInfo.IncomeSwapOtherSubjectCumulativeNumberOfNewContractsInThisYear); model.TotalNumberOfNewContractsInThisYear = Sum(dbInfo.TotalNumberOfNewContractsInThisYear, excelInfo.TotalNumberOfNewContractsInThisYear); model.MarginOfSubsistSwap = Sum(dbInfo.MarginOfSubsistSwap, excelInfo.MarginOfSubsistSwap); model.HedgedMarketValueOfSwap = Sum(dbInfo.HedgedMarketValueOfSwap, excelInfo.HedgedMarketValueOfSwap); model.LeverageRatiOfSwap = Sum(dbInfo.LeverageRatiOfSwap, excelInfo.LeverageRatiOfSwap); model.MarginOfSubsistStockIndexSwap = Sum(dbInfo.MarginOfSubsistStockIndexSwap, excelInfo.MarginOfSubsistStockIndexSwap); model.HedgedMarketValueOfStockIndexSwap = Sum(dbInfo.HedgedMarketValueOfStockIndexSwap, excelInfo.HedgedMarketValueOfStockIndexSwap); model.LeverageRatioOfStockIndexSwap = Sum(dbInfo.LeverageRatioOfStockIndexSwap, excelInfo.LeverageRatioOfStockIndexSwap); model.MarginOfSubsistStockSwap = Sum(dbInfo.MarginOfSubsistStockSwap, excelInfo.MarginOfSubsistStockSwap); model.HedgedMarketValueOfStockSwap = Sum(dbInfo.HedgedMarketValueOfStockSwap, excelInfo.HedgedMarketValueOfStockSwap); model.LeverageRatioOfStockSwap = Sum(dbInfo.LeverageRatioOfStockSwap, excelInfo.LeverageRatioOfStockSwap); model.MarginandPremiumOfSubsistOption = Sum(dbInfo.MarginandPremiumOfSubsistOption, excelInfo.MarginandPremiumOfSubsistOption); model.HedgedMarketValueOfOption = Sum(dbInfo.HedgedMarketValueOfOption, excelInfo.HedgedMarketValueOfOption); model.LeverageRatioOfOption = Sum(dbInfo.LeverageRatioOfOption, excelInfo.LeverageRatioOfOption); model.MarginandPremiumOfSubsistStockIndexOption = Sum(dbInfo.MarginandPremiumOfSubsistStockIndexOption, excelInfo.MarginandPremiumOfSubsistStockIndexOption); model.HedgedMarketValueOfStockIndexOption = Sum(dbInfo.HedgedMarketValueOfStockIndexOption, excelInfo.HedgedMarketValueOfStockIndexOption); model.LeverageRatioOfStockIndexOption = Sum(dbInfo.LeverageRatioOfStockIndexOption, excelInfo.LeverageRatioOfStockIndexOption); model.MarginandPremiumOfSubsistStockOption = Sum(dbInfo.MarginandPremiumOfSubsistStockOption, excelInfo.MarginandPremiumOfSubsistStockOption); model.HedgedMarketValueOfStockOption = Sum(dbInfo.HedgedMarketValueOfStockOption, excelInfo.HedgedMarketValueOfStockOption); model.LeverageRatioOfStockOption = Sum(dbInfo.LeverageRatioOfStockOption, excelInfo.LeverageRatioOfStockOption); model.TotalNominalPrincipalAmountOfSwapThisMonth = Sum(dbInfo.TotalNominalPrincipalAmountOfSwapThisMonth, excelInfo.TotalNominalPrincipalAmountOfSwapThisMonth); model.TotalNominalPrincipalAmountOfSwapLastMonth = Sum(dbInfo.TotalNominalPrincipalAmountOfSwapLastMonth, excelInfo.TotalNominalPrincipalAmountOfSwapLastMonth); model.TheValueOfTheStockSwapInTheCorrespondingPerformanceGuaranteeThisMonth = Sum(dbInfo.TheValueOfTheStockSwapInTheCorrespondingPerformanceGuaranteeThisMonth, excelInfo.TheValueOfTheStockSwapInTheCorrespondingPerformanceGuaranteeThisMonth); model.TheValueOfTheStockSwapInTheCorrespondingPerformanceGuaranteeLastMonth = Sum(dbInfo.TheValueOfTheStockSwapInTheCorrespondingPerformanceGuaranteeLastMonth, excelInfo.TheValueOfTheStockSwapInTheCorrespondingPerformanceGuaranteeLastMonth); model.SwapCashCollateralValueThisMonth = Sum(dbInfo.SwapCashCollateralValueThisMonth, excelInfo.SwapCashCollateralValueThisMonth); model.SwapCashCollateralValueLastMonth = Sum(dbInfo.SwapCashCollateralValueLastMonth, excelInfo.SwapCashCollateralValueLastMonth); model.SwapSecuritiesCollateralValueThisMonth = Sum(dbInfo.SwapSecuritiesCollateralValueThisMonth, excelInfo.SwapSecuritiesCollateralValueThisMonth); model.SwapSecuritiesCollateralValueLastMonthThisMonth = Sum(dbInfo.SwapSecuritiesCollateralValueLastMonthThisMonth, excelInfo.SwapSecuritiesCollateralValueLastMonthThisMonth); model.ProportionOfTheOverallPerformanceOfTheSwapBusinessThisMonthFull = Sum(dbInfo.ProportionOfTheOverallPerformanceOfTheSwapBusinessThisMonthFull, excelInfo.ProportionOfTheOverallPerformanceOfTheSwapBusinessThisMonthFull); model.ProportionOfTheOverallPerformanceOfTheSwapBusinessLastMonthFull = Sum(dbInfo.ProportionOfTheOverallPerformanceOfTheSwapBusinessLastMonthFull, excelInfo.ProportionOfTheOverallPerformanceOfTheSwapBusinessLastMonthFull); model.ProportionOfTheOverallPerformanceOfTheSwapBusinessThisMonthNet = Sum(dbInfo.ProportionOfTheOverallPerformanceOfTheSwapBusinessThisMonthNet, excelInfo.ProportionOfTheOverallPerformanceOfTheSwapBusinessThisMonthNet); model.ProportionOfTheOverallPerformanceOfTheSwapBusinessLastMonthNet = Sum(dbInfo.ProportionOfTheOverallPerformanceOfTheSwapBusinessLastMonthNet, excelInfo.ProportionOfTheOverallPerformanceOfTheSwapBusinessLastMonthNet); model.SwapNumberOfDefaultCustomersAtThisMonthThisMonth = Sum(dbInfo.SwapNumberOfDefaultCustomersAtThisMonthThisMonth, excelInfo.SwapNumberOfDefaultCustomersAtThisMonthThisMonth); model.SwapNumberOfDefaultCustomersAtThisMonthLastMonth = Sum(dbInfo.SwapNumberOfDefaultCustomersAtThisMonthLastMonth, excelInfo.SwapNumberOfDefaultCustomersAtThisMonthLastMonth); model.SwapDefaultTransactionNumberAtThisMonthThisMonth = Sum(dbInfo.SwapDefaultTransactionNumberAtThisMonthThisMonth, excelInfo.SwapDefaultTransactionNumberAtThisMonthThisMonth); model.SwapDefaultTransactionNumberAtThisMonthLastMonth = Sum(dbInfo.SwapDefaultTransactionNumberAtThisMonthLastMonth, excelInfo.SwapDefaultTransactionNumberAtThisMonthLastMonth); model.TotalSwapDefaultCustomerNumberInThisYearThisMonth = Sum(dbInfo.TotalSwapDefaultCustomerNumberInThisYearThisMonth, excelInfo.TotalSwapDefaultCustomerNumberInThisYearThisMonth); model.TotalSwapDefaultCustomerNumberInThisYearLastMonth = Sum(dbInfo.TotalSwapDefaultCustomerNumberInThisYearLastMonth, excelInfo.TotalSwapDefaultCustomerNumberInThisYearLastMonth); model.SwapNumberOfDefaultCustomersInThisYearThisMonth = Sum(dbInfo.SwapNumberOfDefaultCustomersInThisYearThisMonth, excelInfo.SwapNumberOfDefaultCustomersInThisYearThisMonth); model.SwapNumberOfDefaultCustomersInThisYearLastMonth = Sum(dbInfo.SwapNumberOfDefaultCustomersInThisYearLastMonth, excelInfo.SwapNumberOfDefaultCustomersInThisYearLastMonth); model.TotalNominalPrincipalAmountOfOptionThisMonth = Sum(dbInfo.TotalNominalPrincipalAmountOfOptionThisMonth, excelInfo.TotalNominalPrincipalAmountOfOptionThisMonth); model.TotalNominalPrincipalAmountOfOptionLastMonth = Sum(dbInfo.TotalNominalPrincipalAmountOfOptionLastMonth, excelInfo.TotalNominalPrincipalAmountOfOptionLastMonth); model.TheValueOfTheStockOptionCorrespondingPerformanceGuaranteeThisMonth = Sum(dbInfo.TheValueOfTheStockOptionCorrespondingPerformanceGuaranteeThisMonth, excelInfo.TheValueOfTheStockOptionCorrespondingPerformanceGuaranteeThisMonth); model.TheValueOfTheStockOptionCorrespondingPerformanceGuaranteeLastMonth = Sum(dbInfo.TheValueOfTheStockOptionCorrespondingPerformanceGuaranteeLastMonth, excelInfo.TheValueOfTheStockOptionCorrespondingPerformanceGuaranteeLastMonth); model.OptionCashCollateralValueThisMonth = Sum(dbInfo.OptionCashCollateralValueThisMonth, excelInfo.OptionCashCollateralValueThisMonth); model.OptionCashCollateralValueLastMonth = Sum(dbInfo.OptionCashCollateralValueLastMonth, excelInfo.OptionCashCollateralValueLastMonth); model.OptionSecuritiesCollateralValueThisMonth = Sum(dbInfo.OptionSecuritiesCollateralValueThisMonth, excelInfo.OptionSecuritiesCollateralValueThisMonth); model.OptionSecuritiesCollateralValueLastMonth = Sum(dbInfo.OptionSecuritiesCollateralValueLastMonth, excelInfo.OptionSecuritiesCollateralValueLastMonth); model.ProportionOfTheOverallPerformanceOfTheOptionBusinessThisMonthFull = Sum(dbInfo.ProportionOfTheOverallPerformanceOfTheOptionBusinessThisMonthFull, excelInfo.ProportionOfTheOverallPerformanceOfTheOptionBusinessThisMonthFull); model.ProportionOfTheOverallPerformanceOfTheOptionBusinessLastMonthFull = Sum(dbInfo.ProportionOfTheOverallPerformanceOfTheOptionBusinessLastMonthFull, excelInfo.ProportionOfTheOverallPerformanceOfTheOptionBusinessLastMonthFull); model.ProportionOfTheOverallPerformanceOfTheOptionBusinessThisMonthNet = Sum(dbInfo.ProportionOfTheOverallPerformanceOfTheOptionBusinessThisMonthNet, excelInfo.ProportionOfTheOverallPerformanceOfTheOptionBusinessThisMonthNet); model.ProportionOfTheOverallPerformanceOfTheOptionBusinessLastMonthNet = Sum(dbInfo.ProportionOfTheOverallPerformanceOfTheOptionBusinessLastMonthNet, excelInfo.ProportionOfTheOverallPerformanceOfTheOptionBusinessLastMonthNet); model.OptionNumberOfDefaultCustomersAtThisMonthThisMonth = Sum(dbInfo.OptionNumberOfDefaultCustomersAtThisMonthThisMonth, excelInfo.OptionNumberOfDefaultCustomersAtThisMonthThisMonth); model.OptionNumberOfDefaultCustomersAtThisMonthLastMonth = Sum(dbInfo.OptionNumberOfDefaultCustomersAtThisMonthLastMonth, excelInfo.OptionNumberOfDefaultCustomersAtThisMonthLastMonth); model.OptionTransactionNumberAtThisMonthThisMonth = Sum(dbInfo.OptionTransactionNumberAtThisMonthThisMonth, excelInfo.OptionTransactionNumberAtThisMonthThisMonth); model.OptionTransactionNumberAtThisMonthLastMonth = Sum(dbInfo.OptionTransactionNumberAtThisMonthLastMonth, excelInfo.OptionTransactionNumberAtThisMonthLastMonth); model.TotalOptionDefaultCustomerNumberInThisYearThisMonth = Sum(dbInfo.TotalOptionDefaultCustomerNumberInThisYearThisMonth, excelInfo.TotalOptionDefaultCustomerNumberInThisYearThisMonth); model.TotalOptionDefaultCustomerNumberInThisYearLastMonth = Sum(dbInfo.TotalOptionDefaultCustomerNumberInThisYearLastMonth, excelInfo.TotalOptionDefaultCustomerNumberInThisYearLastMonth); model.OptionNumberOfDefaultCustomersInThisYearThisMonth = Sum(dbInfo.OptionNumberOfDefaultCustomersInThisYearThisMonth, excelInfo.OptionNumberOfDefaultCustomersInThisYearThisMonth); model.OptionNumberOfDefaultCustomersInThisYearLastMonth = Sum(dbInfo.OptionNumberOfDefaultCustomersInThisYearLastMonth, excelInfo.OptionNumberOfDefaultCustomersInThisYearLastMonth); model.StockTradingCorrespondsToValueOfCollateralAtEndOfThisMonth = Sum(dbInfo.StockTradingCorrespondsToValueOfCollateralAtEndOfThisMonth, excelInfo.StockTradingCorrespondsToValueOfCollateralAtEndOfThisMonth); model.StockTradingCorrespondsToValueOfCollateralAtEndOfLastMonth = Sum(dbInfo.StockTradingCorrespondsToValueOfCollateralAtEndOfLastMonth, excelInfo.StockTradingCorrespondsToValueOfCollateralAtEndOfLastMonth); model.CashBalanceAtEndOfThisMonth = Sum(dbInfo.CashBalanceAtEndOfThisMonth, excelInfo.CashBalanceAtEndOfThisMonth); model.CashBalanceAtEndOfLastMonth = Sum(dbInfo.CashBalanceAtEndOfLastMonth, excelInfo.CashBalanceAtEndOfLastMonth); model.HoldStockMarketValueAtEndOfThisMonth = Sum(dbInfo.HoldStockMarketValueAtEndOfThisMonth, excelInfo.HoldStockMarketValueAtEndOfThisMonth); model.HoldStockMarketValueAtEndOfLastMonth = Sum(dbInfo.HoldStockMarketValueAtEndOfLastMonth, excelInfo.HoldStockMarketValueAtEndOfLastMonth); model.HoldMarketValueOfBondsAtTheEndOfThisMonth = Sum(dbInfo.HoldMarketValueOfBondsAtTheEndOfThisMonth, excelInfo.HoldMarketValueOfBondsAtTheEndOfThisMonth); model.HoldMarketValueOfBondsAtTheEndOfLastMonth = Sum(dbInfo.HoldMarketValueOfBondsAtTheEndOfLastMonth, excelInfo.HoldMarketValueOfBondsAtTheEndOfLastMonth); model.OwnedAssetManagementProductsAtTheEndOfThisMonth = Sum(dbInfo.OwnedAssetManagementProductsAtTheEndOfThisMonth, excelInfo.OwnedAssetManagementProductsAtTheEndOfThisMonth); model.OwnedAssetManagementProductsAtTheEndOfLastMonth = Sum(dbInfo.OwnedAssetManagementProductsAtTheEndOfLastMonth, excelInfo.OwnedAssetManagementProductsAtTheEndOfLastMonth); model.OwnedBankFinanceAtTheEndOfThisMonth = Sum(dbInfo.OwnedBankFinanceAtTheEndOfThisMonth, excelInfo.OwnedBankFinanceAtTheEndOfThisMonth); model.OwnedBankFinanceAtTheEndOfLastMonth = Sum(dbInfo.OwnedBankFinanceAtTheEndOfLastMonth, excelInfo.OwnedBankFinanceAtTheEndOfLastMonth); model.HoldTrustProductAtTheEndOfThisMonth = Sum(dbInfo.HoldTrustProductAtTheEndOfThisMonth, excelInfo.HoldTrustProductAtTheEndOfThisMonth); model.HoldTrustProductAtTheEndOfLastMonth = Sum(dbInfo.HoldTrustProductAtTheEndOfLastMonth, excelInfo.HoldTrustProductAtTheEndOfLastMonth); model.InsuranceProductsAreHeldAtTheEndOfThisMonth = Sum(dbInfo.InsuranceProductsAreHeldAtTheEndOfThisMonth, excelInfo.InsuranceProductsAreHeldAtTheEndOfThisMonth); model.InsuranceProductsAreHeldAtTheEndOfLastMonth = Sum(dbInfo.InsuranceProductsAreHeldAtTheEndOfLastMonth, excelInfo.InsuranceProductsAreHeldAtTheEndOfLastMonth); model.HoldOtherProductsAtTheEndOfThisMonth = Sum(dbInfo.HoldOtherProductsAtTheEndOfThisMonth, excelInfo.HoldOtherProductsAtTheEndOfThisMonth); model.HoldOtherProductsAtTheEndOfLastMonth = Sum(dbInfo.HoldOtherProductsAtTheEndOfLastMonth, excelInfo.HoldOtherProductsAtTheEndOfLastMonth); model.SettledSwapItemsAtThisMonth = Sum(dbInfo.SettledSwapItemsAtThisMonth, excelInfo.SettledSwapItemsAtThisMonth); model.SettledSwapTransactionInvolvesNotionalPrincipalAtThisMonth = Sum(dbInfo.SettledSwapTransactionInvolvesNotionalPrincipalAtThisMonth, excelInfo.SettledSwapTransactionInvolvesNotionalPrincipalAtThisMonth); model.SwapIncomeCashFlow = Sum(dbInfo.SwapIncomeCashFlow, excelInfo.SwapIncomeCashFlow); model.SwapExpensesCashFlow = Sum(dbInfo.SwapExpensesCashFlow, excelInfo.SwapExpensesCashFlow); model.CashFlowCorrespondingToNetIncomeOnSwapMargin = Sum(dbInfo.CashFlowCorrespondingToNetIncomeOnSwapMargin, excelInfo.CashFlowCorrespondingToNetIncomeOnSwapMargin); model.SwapHedgeCost = Sum(dbInfo.SwapHedgeCost, excelInfo.SwapHedgeCost); model.SettledOptionItemsAtThisMonth = Sum(dbInfo.SettledOptionItemsAtThisMonth, excelInfo.SettledOptionItemsAtThisMonth); model.SettledOptionTransactionInvolvesNotionalPrincipalAtThisMonth = Sum(dbInfo.SettledOptionTransactionInvolvesNotionalPrincipalAtThisMonth, excelInfo.SettledOptionTransactionInvolvesNotionalPrincipalAtThisMonth); model.OptionPremiumIncome = Sum(dbInfo.OptionPremiumIncome, excelInfo.OptionPremiumIncome); model.OptionHedgeCost = Sum(dbInfo.OptionHedgeCost, excelInfo.OptionHedgeCost); model.BalanceOfSwapRealizedGainsAndLossesAtThisMonth = Sum(dbInfo.BalanceOfSwapRealizedGainsAndLossesAtThisMonth, excelInfo.BalanceOfSwapRealizedGainsAndLossesAtThisMonth); model.BalanceOfOptionRealizedGainsAndLossesAtThisMonth = Sum(dbInfo.BalanceOfOptionRealizedGainsAndLossesAtThisMonth, excelInfo.BalanceOfOptionRealizedGainsAndLossesAtThisMonth); model.BalanceOfSwapRealizedGainsAndLossesAtThisYear = Sum(dbInfo.BalanceOfSwapRealizedGainsAndLossesAtThisYear, excelInfo.BalanceOfSwapRealizedGainsAndLossesAtThisYear); model.BalanceOfOptionRealizedGainsAndLossesAtThisYear = Sum(dbInfo.BalanceOfOptionRealizedGainsAndLossesAtThisYear, excelInfo.BalanceOfOptionRealizedGainsAndLossesAtThisYear); model.BalanceOfSwapChangedGainsAndLossesInFairValueAtThisMonth = Sum(dbInfo.BalanceOfSwapChangedGainsAndLossesInFairValueAtThisMonth, excelInfo.BalanceOfSwapChangedGainsAndLossesInFairValueAtThisMonth); model.BalanceOfOptionChangedGainsAndLossesInFairValueAtThisMonth = Sum(dbInfo.BalanceOfOptionChangedGainsAndLossesInFairValueAtThisMonth, excelInfo.BalanceOfOptionChangedGainsAndLossesInFairValueAtThisMonth); model.BalanceOfSwapChangedGainsAndLossesInFairValueAtThisYear = Sum(dbInfo.BalanceOfSwapChangedGainsAndLossesInFairValueAtThisYear, excelInfo.BalanceOfSwapChangedGainsAndLossesInFairValueAtThisYear); model.BalanceOfOptionChangedGainsAndLossesInFairValueAtThisYear = Sum(dbInfo.BalanceOfOptionChangedGainsAndLossesInFairValueAtThisYear, excelInfo.BalanceOfOptionChangedGainsAndLossesInFairValueAtThisYear); model.BalanceOfSwapTotalGainsAndLossesAtThisMonth = Sum(dbInfo.BalanceOfSwapTotalGainsAndLossesAtThisMonth, excelInfo.BalanceOfSwapTotalGainsAndLossesAtThisMonth); model.BalanceOfOptionTotalGainsAndLossesAtThisMonth = Sum(dbInfo.BalanceOfOptionTotalGainsAndLossesAtThisMonth, excelInfo.BalanceOfOptionTotalGainsAndLossesAtThisMonth); model.BalanceOfSwapTotalGainsAndLossesAtThisYear = Sum(dbInfo.BalanceOfSwapTotalGainsAndLossesAtThisYear, excelInfo.BalanceOfSwapTotalGainsAndLossesAtThisYear); model.BalanceOfOptionTotalGainsAndLossesAtThisYear = Sum(dbInfo.BalanceOfOptionTotalGainsAndLossesAtThisYear, excelInfo.BalanceOfOptionTotalGainsAndLossesAtThisYear); model.IncreaseBusinessDetailsThisMonthTuple = new List(); if (dbInfo.IncreaseBusinessDetailsThisMonthTuple != null) { model.IncreaseBusinessDetailsThisMonthTuple.AddRange(dbInfo.IncreaseBusinessDetailsThisMonthTuple); } if (excelInfo.IncreaseBusinessDetailsThisMonthTuple != null) { model.IncreaseBusinessDetailsThisMonthTuple.AddRange(excelInfo.IncreaseBusinessDetailsThisMonthTuple); } model.InventoryBusinessDetailsAtTheEndOfThisMonthTuple = new List(); if (dbInfo.InventoryBusinessDetailsAtTheEndOfThisMonthTuple != null) { model.InventoryBusinessDetailsAtTheEndOfThisMonthTuple.AddRange(dbInfo.InventoryBusinessDetailsAtTheEndOfThisMonthTuple); } if (excelInfo.InventoryBusinessDetailsAtTheEndOfThisMonthTuple != null) { model.InventoryBusinessDetailsAtTheEndOfThisMonthTuple.AddRange(excelInfo.InventoryBusinessDetailsAtTheEndOfThisMonthTuple); } model.TargetCaseAndHedgeTuple = new List(); if (dbInfo.TargetCaseAndHedgeTuple != null) { model.TargetCaseAndHedgeTuple.AddRange(dbInfo.TargetCaseAndHedgeTuple); } if (excelInfo.TargetCaseAndHedgeTuple != null) { model.TargetCaseAndHedgeTuple.AddRange(excelInfo.TargetCaseAndHedgeTuple); } return model; } private string Sum(string param1, string param2) { var status1 = double.TryParse(param1, out var v1); var status2 = double.TryParse(param2, out var v2); if (status1 || status2) { return (v1 + v2).ToString(); } return ""; } private PeriodicReportSACModel GetPeriodicReportSACFromExcel() { var model = new PeriodicReportSACModel(); if (_excelDataSource != null) { var dt = _excelDataSource.Tables["业务统计"]; if (string.IsNullOrWhiteSpace(GetDataSetValue(dt, 2, 1))) { return model; } model.Year = _reqInfo.SACReportDate.Value.Year.ToString("0000"); model.Month = _reqInfo.SACReportDate.Value.Month.ToString("0"); GetPotocolInfo(model, dt, 2, 1); GetStockOptionBusinessInfo(model, dt, 12, 1); GetClientInfo(model, dt, 19, 1); GetExchangeInfo(model, dt, 28, 1); GetLeverInfo(model, dt, 44, 2); dt = _excelDataSource.Tables["履约担保情况"]; GetSwapPerformanceGuaranteeInfo(model, dt, 2, 1); GetOptionPerformanceGuaranteeInfo(model, dt, 16, 1); GetPerformanceGuaranteeInfo(model, dt, 30, 1); dt = _excelDataSource.Tables["盈亏情况"]; GetSettleTradeWinlossInfo(model, dt, 2, 2); GetWinlossInfo(model, dt, 17, 1); model.IncreaseBusinessDetailsThisMonthTuple = new List(); model.IncreaseBusinessDetailsThisMonthTuple.AddRange(GetIncreaseBusinessDetailsThisMonthTuple()); model.InventoryBusinessDetailsAtTheEndOfThisMonthTuple = new List(); model.InventoryBusinessDetailsAtTheEndOfThisMonthTuple.AddRange(GetInventoryBusinessDetailsAtTheEndOfThisMonth()); model.TargetCaseAndHedgeTuple = new List(); model.TargetCaseAndHedgeTuple.AddRange(GetTargetCaseAndHedgeTuple()); } return model; } /// /// 获取本月了结交易盈亏情况统计 /// /// /// /// /// private void GetSettleTradeWinlossInfo(PeriodicReportSACModel model, DataTable dt, int startRow, int startCol) { model.SettledSwapItemsAtThisMonth = GetDataSetValueToDouble(dt, startRow + 0, startCol + 0).ToString(); model.SettledSwapTransactionInvolvesNotionalPrincipalAtThisMonth = GetDataSetValueToDouble(dt, startRow + 1, startCol + 0).ToString(); model.SwapIncomeCashFlow = GetDataSetValueToDouble(dt, startRow + 2, startCol + 0).ToString(); model.SwapExpensesCashFlow = GetDataSetValueToDouble(dt, startRow + 3, startCol + 0).ToString(); model.CashFlowCorrespondingToNetIncomeOnSwapMargin = GetDataSetValueToDouble(dt, startRow + 4, startCol + 0).ToString(); model.SwapHedgeCost = GetDataSetValueToDouble(dt, startRow + 5, startCol + 0).ToString(); model.SettledOptionItemsAtThisMonth = GetDataSetValueToDouble(dt, startRow + 6, startCol + 0).ToString(); model.SettledOptionTransactionInvolvesNotionalPrincipalAtThisMonth = GetDataSetValueToDouble(dt, startRow + 7, startCol + 0).ToString(); model.OptionPremiumIncome = GetDataSetValueToDouble(dt, startRow + 8, startCol + 0).ToString(); model.OptionHedgeCost = GetDataSetValueToDouble(dt, startRow + 9, startCol + 0).ToString(); } /// /// 获取本月会计损益统计固定表格 /// /// /// /// /// private void GetWinlossInfo(PeriodicReportSACModel model, DataTable dt, int startRow, int startCol) { var balanceOfSwapRealizedGainsAndLossesAtThisMonth = GetDataSetValueToDouble(dt, startRow + 0, startCol + 0); var balanceOfOptionRealizedGainsAndLossesAtThisMonth = GetDataSetValueToDouble(dt, startRow + 0, startCol + 1); model.BalanceOfSwapRealizedGainsAndLossesAtThisMonth = balanceOfSwapRealizedGainsAndLossesAtThisMonth.ToString(); model.BalanceOfOptionRealizedGainsAndLossesAtThisMonth = balanceOfOptionRealizedGainsAndLossesAtThisMonth.ToString(); var balanceOfSwapRealizedGainsAndLossesAtThisYear = GetDataSetValueToDouble(dt, startRow + 0, startCol + 2); var balanceOfOptionRealizedGainsAndLossesAtThisYear = GetDataSetValueToDouble(dt, startRow + 0, startCol + 3); model.BalanceOfSwapRealizedGainsAndLossesAtThisYear = balanceOfSwapRealizedGainsAndLossesAtThisYear.ToString(); model.BalanceOfOptionRealizedGainsAndLossesAtThisYear = balanceOfOptionRealizedGainsAndLossesAtThisYear.ToString(); var balanceOfSwapChangedGainsAndLossesInFairValueAtThisMonth = GetDataSetValueToDouble(dt, startRow + 1, startCol + 0); var balanceOfOptionChangedGainsAndLossesInFairValueAtThisMonth = GetDataSetValueToDouble(dt, startRow + 1, startCol + 1); model.BalanceOfSwapChangedGainsAndLossesInFairValueAtThisMonth = balanceOfSwapChangedGainsAndLossesInFairValueAtThisMonth.ToString(); model.BalanceOfOptionChangedGainsAndLossesInFairValueAtThisMonth = balanceOfOptionChangedGainsAndLossesInFairValueAtThisMonth.ToString(); var balanceOfSwapChangedGainsAndLossesInFairValueAtThisYear = GetDataSetValueToDouble(dt, startRow + 1, startCol + 2); var balanceOfOptionChangedGainsAndLossesInFairValueAtThisYear = GetDataSetValueToDouble(dt, startRow + 1, startCol + 3); model.BalanceOfSwapChangedGainsAndLossesInFairValueAtThisYear = balanceOfSwapChangedGainsAndLossesInFairValueAtThisYear.ToString(); model.BalanceOfOptionChangedGainsAndLossesInFairValueAtThisYear = balanceOfOptionChangedGainsAndLossesInFairValueAtThisYear.ToString(); var balanceOfSwapTotalGainsAndLossesAtThisMonth = GetDataSetValueToDouble(dt, startRow + 2, startCol + 0); if (balanceOfSwapTotalGainsAndLossesAtThisMonth == 0) { balanceOfSwapTotalGainsAndLossesAtThisMonth = balanceOfSwapRealizedGainsAndLossesAtThisMonth + balanceOfSwapChangedGainsAndLossesInFairValueAtThisMonth; } var balanceOfOptionTotalGainsAndLossesAtThisMonth = GetDataSetValueToDouble(dt, startRow + 2, startCol + 1); if (balanceOfOptionTotalGainsAndLossesAtThisMonth == 0) { balanceOfOptionTotalGainsAndLossesAtThisMonth = balanceOfOptionRealizedGainsAndLossesAtThisMonth + balanceOfOptionChangedGainsAndLossesInFairValueAtThisMonth; } model.BalanceOfSwapTotalGainsAndLossesAtThisMonth = balanceOfSwapTotalGainsAndLossesAtThisMonth.ToString(); model.BalanceOfOptionTotalGainsAndLossesAtThisMonth = balanceOfOptionTotalGainsAndLossesAtThisMonth.ToString(); var balanceOfSwapTotalGainsAndLossesAtThisYear = GetDataSetValueToDouble(dt, startRow + 2, startCol + 2); if (balanceOfSwapTotalGainsAndLossesAtThisYear == 0) { balanceOfSwapTotalGainsAndLossesAtThisYear = balanceOfSwapRealizedGainsAndLossesAtThisYear + balanceOfSwapChangedGainsAndLossesInFairValueAtThisYear; } var balanceOfOptionTotalGainsAndLossesAtThisYear = GetDataSetValueToDouble(dt, startRow + 2, startCol + 3); if (balanceOfOptionTotalGainsAndLossesAtThisYear == 0) { balanceOfOptionTotalGainsAndLossesAtThisYear = balanceOfOptionRealizedGainsAndLossesAtThisYear + balanceOfOptionChangedGainsAndLossesInFairValueAtThisYear; } model.BalanceOfSwapTotalGainsAndLossesAtThisYear = balanceOfSwapTotalGainsAndLossesAtThisYear.ToString(); model.BalanceOfOptionTotalGainsAndLossesAtThisYear = balanceOfOptionTotalGainsAndLossesAtThisYear.ToString(); } /// /// 获取签署协议统计 /// /// /// /// /// private void GetPotocolInfo(PeriodicReportSACModel model, DataTable dt, int startRow, int startCol) { model.MainAgreementAddedThisMonth = GetDataSetValueToDouble(dt, startRow + 0, startCol + 0).ToString(); model.MainAgreementAccumulatedThisYear = GetDataSetValueToDouble(dt, startRow + 0, startCol + 1).ToString(); model.MainAgreementValidedAtEndOfThisMonth = GetDataSetValueToDouble(dt, startRow + 0, startCol + 2).ToString(); model.SupplementalAgreementAddedThisMonth = GetDataSetValueToDouble(dt, startRow + 1, startCol + 0).ToString(); model.SupplementalAgreementAccumulatedThisYear = GetDataSetValueToDouble(dt, startRow + 1, startCol + 1).ToString(); model.SupplementalAgreementValidedAtTheEndOfThisMonth = GetDataSetValueToDouble(dt, startRow + 1, startCol + 2).ToString(); model.PerformanceGuaranteeAgreementAddedThisMonth = GetDataSetValueToDouble(dt, startRow + 2, startCol + 0).ToString(); model.PerformanceGuaranteeAgreementAccumulatedThisYear = GetDataSetValueToDouble(dt, startRow + 2, startCol + 1).ToString(); model.PerformanceGuaranteeAgreementValidedAtEndOfThisMonth = GetDataSetValueToDouble(dt, startRow + 2, startCol + 2).ToString(); model.TransactionConfirmationAddedThisMonth = GetDataSetValueToDouble(dt, startRow + 3, startCol + 0).ToString(); model.TransactionConfirmationBookAccumulatedThisYear = GetDataSetValueToDouble(dt, startRow + 3, startCol + 1).ToString(); model.TransactionConfirmationValidedAtEndOfThisMonth = GetDataSetValueToDouble(dt, startRow + 3, startCol + 2).ToString(); } /// /// 场外个股期权业务规模情况 /// /// /// /// /// private void GetStockOptionBusinessInfo(PeriodicReportSACModel model, DataTable dt, int startRow, int startCol) { var totleStockEqvNotional = GetDataSetValueToDouble(dt, startRow + 0, startCol + 0); var latestNetAssets = GetDataSetValueToDouble(dt, startRow + 0, startCol + 1); var capitalRate = GetDataSetValueToDouble(dt, startRow + 0, startCol + 2); if (capitalRate == 0) { capitalRate = latestNetAssets == 0 ? latestNetAssets : (totleStockEqvNotional / latestNetAssets * 100); } model.ToCarryOutSelfEquitySecuritiesAndOTCDerivativesScaleStockOptionBusinessCorrespondence = totleStockEqvNotional.ToString(); model.NetCapitalAtEndOfTheMonth = latestNetAssets.ToString(); model.ToCarryOutSelfEquitySecuritiesAndOTCDerivativesScaleStockOptionsBusinessAccountedForTheProportionOfTheCorrespondingNetCapital = capitalRate.ToString("0.00"); } /// /// 获取交易对手情况表(交易确认书) /// /// /// /// /// private void GetClientInfo(PeriodicReportSACModel model, DataTable dt, int startRow, int startCol) { int row = startRow + 0; model.OTCOptionHasSignedByLegalPerson = GetDataSetValueToDouble(dt, row, startCol + 0).ToString(); model.OTCOptionsHaveContractedProducts = GetDataSetValueToDouble(dt, row, startCol + 1).ToString(); model.OTCOptionsForTheMonthOfTheNewAddLegalPerson = GetDataSetValueToDouble(dt, row, startCol + 2).ToString(); model.OTCOptionsForTheMonthOfTheNewAddProduct = GetDataSetValueToDouble(dt, row, startCol + 3).ToString(); model.OTCOptionsLegalPersonInDurationForThisMouth = GetDataSetValueToDouble(dt, row, startCol + 4).ToString(); model.OTCOptionsProductsInDurationForThisMouth = GetDataSetValueToDouble(dt, row, startCol + 5).ToString(); row = startRow + 1; model.IncomeSwapHasSignedLegalPersonNumber = GetDataSetValueToDouble(dt, row, startCol + 0).ToString(); model.IncomeSwapHasSignedProductNumber = GetDataSetValueToDouble(dt, row, startCol + 1).ToString(); model.IncomeSwapForTheMonthOfTheNewAddLegalPerson = GetDataSetValueToDouble(dt, row, startCol + 2).ToString(); model.IncomeSwapForTheMonthOfTheNewAddProduct = GetDataSetValueToDouble(dt, row, startCol + 3).ToString(); model.IncomeSwapLegalPersonInDurationForThisMouth = GetDataSetValueToDouble(dt, row, startCol + 4).ToString(); model.IncomeSwapProductsInDurationForThisMouth = GetDataSetValueToDouble(dt, row, startCol + 5).ToString(); } /// /// 获取场外衍生品规模及标的情况 /// /// /// private void GetExchangeInfo(PeriodicReportSACModel model, DataTable dt, int startRow, int startCol) { int row = startRow + 0; model.OTCStockIndexOptionsWithinTheLastMonthTheExistenceOfScale = GetDataSetValueToDouble(dt, row, startCol + 0).ToString(); model.OTCOptionsWithinIndividualStocksLateLastMonthDurationScale = GetDataSetValueToDouble(dt, row, startCol + 1).ToString(); model.OTCOptionsCommoditiesLastMonthDurationScale = GetDataSetValueToDouble(dt, row, startCol + 2).ToString(); model.OTCOptionsOtherSubjectLastMonthDurationScale = GetDataSetValueToDouble(dt, row, startCol + 3).ToString(); model.RevenueExchangeDomesticStockIndexLastMonthDurationScale = GetDataSetValueToDouble(dt, row, startCol + 4).ToString(); model.RevenueExchangeDomesticIndividualStocksLastMonthDurationScale = GetDataSetValueToDouble(dt, row, startCol + 5).ToString(); model.RevenueExchangeCommoditiesLastMonthDurationScale = GetDataSetValueToDouble(dt, row, startCol + 6).ToString(); model.RevenueExchangeOtherSubjectLastMonthDurationScale = GetDataSetValueToDouble(dt, row, startCol + 7).ToString(); model.TotalOfLastMonthDurationScale = GetDataSetValueToDouble(dt, row, startCol + 8).ToString(); row = startRow + 1; model.OTCOptionsWithinTheIndexThisMonthOfTheNewScale = GetDataSetValueToDouble(dt, row, startCol + 0).ToString(); model.OTCOptionsToAddScaleDomesticStocksInThisMonth = GetDataSetValueToDouble(dt, row, startCol + 1).ToString(); model.OTCOptionsCommoditiesTheNewSizeOfTheIncreaseInThisMonth = GetDataSetValueToDouble(dt, row, startCol + 2).ToString(); model.OTCOptionsOtherSubjectTheNewSizeOfTheIncreaseInThisMonth = GetDataSetValueToDouble(dt, row, startCol + 3).ToString(); model.RevenueExchangeDomesticStockIndexTheNewSizeOfTheIncreaseInThisMonth = GetDataSetValueToDouble(dt, row, startCol + 4).ToString(); model.RevenueExchangeDomesticIndividualStocksTheNewSizeOfTheIncreaseInThisMonth = GetDataSetValueToDouble(dt, row, startCol + 5).ToString(); model.RevenueExchangeCommoditiesTheNewSizeOfTheIncreaseInThisMonth = GetDataSetValueToDouble(dt, row, startCol + 6).ToString(); model.RevenueExchangeOtherSubjectTheNewSizeOfTheIncreaseInThisMonth = GetDataSetValueToDouble(dt, row, startCol + 7).ToString(); model.TotalOfTheNewSizeOfTheIncreaseInThisMonth = GetDataSetValueToDouble(dt, row, startCol + 8).ToString(); row = startRow + 2; model.OTCOptionsTerminateScaleDomesticStockIndexThisMonth = GetDataSetValueToDouble(dt, row, startCol + 0).ToString(); model.OTCOptionsTerminateScaleDomesticStocksInThisMonth = GetDataSetValueToDouble(dt, row, startCol + 1).ToString(); model.OTCOptionsCommoditiesTerminationOfTheScaleOfThisMonth = GetDataSetValueToDouble(dt, row, startCol + 2).ToString(); model.OTCOptionsOtherSubjectTerminationOfTheScaleOfThisMonth = GetDataSetValueToDouble(dt, row, startCol + 3).ToString(); model.RevenueExchangeDomesticStockIndexTerminationOfTheScaleOfThisMonth = GetDataSetValueToDouble(dt, row, startCol + 4).ToString(); model.RevenueExchangeDomesticIndividualStocksTerminationOfTheScaleOfThisMonth = GetDataSetValueToDouble(dt, row, startCol + 5).ToString(); model.RevenueExchangeCommoditiesTerminationOfTheScaleOfThisMonth = GetDataSetValueToDouble(dt, row, startCol + 6).ToString(); model.RevenueExchangeOtherSubjectTerminationOfTheScaleOfThisMonth = GetDataSetValueToDouble(dt, row, startCol + 7).ToString(); model.TotalOfTerminationOfTheScaleOfThisMonth = GetDataSetValueToDouble(dt, row, startCol + 8).ToString(); row = startRow + 3; model.OTCStockIndexOptionsWithinThisMonthOfTheExistenceOfScale = GetDataSetValueToDouble(dt, row, startCol + 0).ToString(); model.OTCOptionsWithinIndividualStocksInThisMonthDurationScale = GetDataSetValueToDouble(dt, row, startCol + 1).ToString(); model.OTCOptionsCommoditiesInThisMonthDurationScale = GetDataSetValueToDouble(dt, row, startCol + 2).ToString(); model.OTCOptionsOtherSubjectThisMonthDurationScale = GetDataSetValueToDouble(dt, row, startCol + 3).ToString(); model.RevenueExchangeDomesticStockIndexThisMonthDurationScale = GetDataSetValueToDouble(dt, row, startCol + 4).ToString(); model.RevenueExchangeDomesticIndividualStocksThisMonthDurationScale = GetDataSetValueToDouble(dt, row, startCol + 5).ToString(); model.RevenueExchangeCommoditiesThisMonthDurationScale = GetDataSetValueToDouble(dt, row, startCol + 6).ToString(); model.RevenueExchangeOtherSubjectThisMonthDurationScale = GetDataSetValueToDouble(dt, row, startCol + 7).ToString(); model.TotalOfThisMonthDurationScale = GetDataSetValueToDouble(dt, row, startCol + 8).ToString(); row = startRow + 4; model.OTCOptionsStockIndexThisYearCumulativeScaleOfNewTerritory = GetDataSetValueToDouble(dt, row, startCol + 0).ToString(); model.OTCOptionsStockThisYearCumulativeScaleOfNewTerritory = GetDataSetValueToDouble(dt, row, startCol + 1).ToString(); model.OTCOptionsCommoditiesThisYearCumulativeScaleOfNewTerritory = GetDataSetValueToDouble(dt, row, startCol + 2).ToString(); model.OTCOptionsOtherSubjectThisYearCumulativeScaleOfNewTerritory = GetDataSetValueToDouble(dt, row, startCol + 3).ToString(); model.IncomeSwapDomesticStockIndexHasAddedNewScaleInThisYear = GetDataSetValueToDouble(dt, row, startCol + 4).ToString(); model.IncomeSwapDomesticStockHasAddedNewScaleInThisYear = GetDataSetValueToDouble(dt, row, startCol + 5).ToString(); model.IncomeSwapCommoditiesIndexHasAddedNewScaleInThisYear = GetDataSetValueToDouble(dt, row, startCol + 6).ToString(); model.IncomeSwapOtherSubjectIndexHasAddedNewScaleInThisYear = GetDataSetValueToDouble(dt, row, startCol + 7).ToString(); model.TotalNewScaleInThisYear = GetDataSetValueToDouble(dt, row, startCol + 8).ToString(); row = startRow + 5; model.OTCOptionsStockIndexAtTheEndOfLastMonth = GetDataSetValueToDouble(dt, row, startCol + 0).ToString(); model.OTCOptionsStockAtTheEndOfLastMonth = GetDataSetValueToDouble(dt, row, startCol + 1).ToString(); model.OTCOptionsCommoditiesAtTheEndOfLastMonth = GetDataSetValueToDouble(dt, row, startCol + 2).ToString(); model.OTCOptionsOtherSubjectAtTheEndOfLastMonth = GetDataSetValueToDouble(dt, row, startCol + 3).ToString(); model.IncomeExchangeDomesticStockIndexNumberOfRemainingContractsAtTheEndOfLastMonth = GetDataSetValueToDouble(dt, row, startCol + 4).ToString(); model.IncomeExchangeDomesticStockNumberOfRemainingContractsAtTheEndOfLastMonth = GetDataSetValueToDouble(dt, row, startCol + 5).ToString(); model.IncomeExchangeCommoditiesNumberOfRemainingContractsAtTheEndOfLastMonth = GetDataSetValueToDouble(dt, row, startCol + 6).ToString(); model.IncomeExchangeOtherSubjectNumberOfRemainingContractsAtTheEndOfLastMonth = GetDataSetValueToDouble(dt, row, startCol + 7).ToString(); model.TotalNumberOfContractsAtTheEndOfLastMonth = GetDataSetValueToDouble(dt, row, startCol + 8).ToString(); row = startRow + 6; model.OTCOptionsStockIndexThisMonthNewDomesticContractNumber = GetDataSetValueToDouble(dt, row, startCol + 0).ToString(); model.OTCOptionsStockThisMonthNewDomesticContractNumber = GetDataSetValueToDouble(dt, row, startCol + 1).ToString(); model.OTCOptionsCommoditiesThisMonthNewDomesticContractNumber = GetDataSetValueToDouble(dt, row, startCol + 2).ToString(); model.OTCOptionsOtherSubjectThisMonthNewDomesticContractNumber = GetDataSetValueToDouble(dt, row, startCol + 3).ToString(); model.IncomeSwapDomesticStockIndexNewContractInThisMonth = GetDataSetValueToDouble(dt, row, startCol + 4).ToString(); model.IncomeSwapDomesticStockNewContractInThisMonth = GetDataSetValueToDouble(dt, row, startCol + 5).ToString(); model.IncomeSwapCommoditiesNewContractInThisMonth = GetDataSetValueToDouble(dt, row, startCol + 6).ToString(); model.IncomeSwapOtherSubjectNewContractInThisMonth = GetDataSetValueToDouble(dt, row, startCol + 7).ToString(); model.TotalNumberOfNewContractsInThisMonth = GetDataSetValueToDouble(dt, row, startCol + 8).ToString(); row = startRow + 7; model.OTCOptionsThisMonthToTerminateTheContractWithinTheTerritoryOfTheStockIndexNumber = GetDataSetValueToDouble(dt, row, startCol + 0).ToString(); model.OTCOptionsThisMonthToTerminateTheContractWithinTheTerritoryOfTheStockNumber = GetDataSetValueToDouble(dt, row, startCol + 1).ToString(); model.OTCOptionsThisMonthToTerminateTheContractWithinTheTerritoryOfTheCommoditiesNumber = GetDataSetValueToDouble(dt, row, startCol + 2).ToString(); model.OTCOptionsThisMonthToTerminateTheContractWithinTheTerritoryOfTheOtherSubjectNumber = GetDataSetValueToDouble(dt, row, startCol + 3).ToString(); model.IncomeSwapDomesticStockIndexTerminatesTheNumberOfContractsThisMonth = GetDataSetValueToDouble(dt, row, startCol + 4).ToString(); model.IncomeSwapDomesticStockTerminatesTheNumberOfContractsThisMonth = GetDataSetValueToDouble(dt, row, startCol + 5).ToString(); model.IncomeSwapCommoditiesTerminatesTheNumberOfContractsThisMonth = GetDataSetValueToDouble(dt, row, startCol + 6).ToString(); model.IncomeSwapOtherSubjectTerminatesTheNumberOfContractsThisMonth = GetDataSetValueToDouble(dt, row, startCol + 7).ToString(); model.TotalNumberOfContractsTerminatedThisMonth = GetDataSetValueToDouble(dt, row, startCol + 8).ToString(); row = startRow + 8; model.OTCDomesticStockIndexNumberOfRemainingContractsAtTheEndOfThisMonth = GetDataSetValueToDouble(dt, row, startCol + 0).ToString(); model.OTCDomesticStockNumberOfRemainingContractsAtTheEndOfThisMonth = GetDataSetValueToDouble(dt, row, startCol + 1).ToString(); model.OTCCommoditiesNumberOfRemainingContractsAtTheEndOfThisMonth = GetDataSetValueToDouble(dt, row, startCol + 2).ToString(); model.OTCOtherSubjectNumberOfRemainingContractsAtTheEndOfThisMonth = GetDataSetValueToDouble(dt, row, startCol + 3).ToString(); model.IncomeExchangeDomesticStockIndexNumberOfRemainingContractsAtTheEndOfThisMonth = GetDataSetValueToDouble(dt, row, startCol + 4).ToString(); model.IncomeExchangeDomesticStockNumberOfRemainingContractsAtTheEndOfThisMonth = GetDataSetValueToDouble(dt, row, startCol + 5).ToString(); model.IncomeExchangeCommoditiesNumberOfRemainingContractsAtTheEndOfThisMonth = GetDataSetValueToDouble(dt, row, startCol + 6).ToString(); model.IncomeExchangeOtherSubjectNumberOfRemainingContractsAtTheEndOfThisMonth = GetDataSetValueToDouble(dt, row, startCol + 7).ToString(); model.TotalNumberOfContractsAtTheEndOfThisMonth = GetDataSetValueToDouble(dt, row, startCol + 8).ToString(); row = startRow + 9; model.OTCOptionsStockIndexCumulativeDomesticNewContractNumberInThisYear = GetDataSetValueToDouble(dt, row, startCol + 0).ToString(); model.OTCOptionsStockCumulativeDomesticNewContractNumberInThisYear = GetDataSetValueToDouble(dt, row, startCol + 1).ToString(); model.OTCOptionsCommoditiesCumulativeDomesticNewContractNumberInThisYear = GetDataSetValueToDouble(dt, row, startCol + 2).ToString(); model.OTCOptionsOtherSubjectCumulativeDomesticNewContractNumberInThisYear = GetDataSetValueToDouble(dt, row, startCol + 3).ToString(); model.IncomeSwapDomesticStockIndexCumulativeNumberOfNewContractsInThisYear = GetDataSetValueToDouble(dt, row, startCol + 4).ToString(); model.IncomeSwapDomesticStockCumulativeNumberOfNewContractsInThisYear = GetDataSetValueToDouble(dt, row, startCol + 5).ToString(); model.IncomeSwapCommoditiesCumulativeNumberOfNewContractsInThisYear = GetDataSetValueToDouble(dt, row, startCol + 6).ToString(); model.IncomeSwapOtherSubjectCumulativeNumberOfNewContractsInThisYear = GetDataSetValueToDouble(dt, row, startCol + 7).ToString(); model.TotalNumberOfNewContractsInThisYear = GetDataSetValueToDouble(dt, row, startCol + 8).ToString(); } /// /// 获取杠杆水平 /// /// /// /// /// private void GetLeverInfo(PeriodicReportSACModel model, DataTable dt, int startRow, int startCol) { model.MarginOfSubsistSwap = GetDataSetValueToDouble(dt, startRow + 0, startCol + 0).ToString(); model.HedgedMarketValueOfSwap = GetDataSetValueToDouble(dt, startRow + 0, startCol + 1).ToString(); model.LeverageRatiOfSwap = GetDataSetValueToDouble(dt, startRow + 0, startCol + 2).ToString(); model.MarginOfSubsistStockIndexSwap = GetDataSetValueToDouble(dt, startRow + 1, startCol + 0).ToString(); model.HedgedMarketValueOfStockIndexSwap = GetDataSetValueToDouble(dt, startRow + 1, startCol + 1).ToString(); model.LeverageRatioOfStockIndexSwap = GetDataSetValueToDouble(dt, startRow + 1, startCol + 2).ToString(); model.MarginOfSubsistStockSwap = GetDataSetValueToDouble(dt, startRow + 2, startCol + 0).ToString(); model.HedgedMarketValueOfStockSwap = GetDataSetValueToDouble(dt, startRow + 2, startCol + 1).ToString(); model.LeverageRatioOfStockSwap = GetDataSetValueToDouble(dt, startRow + 2, startCol + 2).ToString(); model.MarginandPremiumOfSubsistOption = GetDataSetValueToDouble(dt, startRow + 3, startCol + 0).ToString(); model.HedgedMarketValueOfOption = GetDataSetValueToDouble(dt, startRow + 3, startCol + 1).ToString(); model.LeverageRatioOfOption = GetDataSetValueToDouble(dt, startRow + 3, startCol + 2).ToString(); model.MarginandPremiumOfSubsistStockIndexOption = GetDataSetValueToDouble(dt, startRow + 4, startCol + 0).ToString(); model.HedgedMarketValueOfStockIndexOption = GetDataSetValueToDouble(dt, startRow + 4, startCol + 1).ToString(); model.LeverageRatioOfStockIndexOption = GetDataSetValueToDouble(dt, startRow + 4, startCol + 2).ToString(); model.MarginandPremiumOfSubsistStockOption = GetDataSetValueToDouble(dt, startRow + 5, startCol + 0).ToString(); model.HedgedMarketValueOfStockOption = GetDataSetValueToDouble(dt, startRow + 5, startCol + 1).ToString(); model.LeverageRatioOfStockOption = GetDataSetValueToDouble(dt, startRow + 5, startCol + 2).ToString(); } /// /// 获取收益互换类交易的履约担保品收取情况固定表格 /// /// /// /// /// private void GetSwapPerformanceGuaranteeInfo(PeriodicReportSACModel model, DataTable dt, int startRow, int startCol) { model.TotalNominalPrincipalAmountOfSwapThisMonth = GetDataSetValueToDouble(dt, startRow + 0, startCol + 0).ToString(); model.TotalNominalPrincipalAmountOfSwapLastMonth = GetDataSetValueToDouble(dt, startRow + 0, startCol + 1).ToString(); model.TheValueOfTheStockSwapInTheCorrespondingPerformanceGuaranteeThisMonth = GetDataSetValueToDouble(dt, startRow + 1, startCol + 0).ToString(); model.TheValueOfTheStockSwapInTheCorrespondingPerformanceGuaranteeLastMonth = GetDataSetValueToDouble(dt, startRow + 1, startCol + 1).ToString(); model.SwapCashCollateralValueThisMonth = GetDataSetValueToDouble(dt, startRow + 2, startCol + 0).ToString(); model.SwapCashCollateralValueLastMonth = GetDataSetValueToDouble(dt, startRow + 2, startCol + 1).ToString(); model.SwapSecuritiesCollateralValueThisMonth = GetDataSetValueToDouble(dt, startRow + 3, startCol + 0).ToString(); model.SwapSecuritiesCollateralValueLastMonthThisMonth = GetDataSetValueToDouble(dt, startRow + 3, startCol + 1).ToString(); model.ProportionOfTheOverallPerformanceOfTheSwapBusinessThisMonthFull = GetDataSetValue(dt, startRow + 4, startCol + 0).ToString(); model.ProportionOfTheOverallPerformanceOfTheSwapBusinessLastMonthFull = GetDataSetValue(dt, startRow + 4, startCol + 1).ToString(); model.ProportionOfTheOverallPerformanceOfTheSwapBusinessThisMonthNet = GetDataSetValue(dt, startRow + 5, startCol + 0).ToString(); model.ProportionOfTheOverallPerformanceOfTheSwapBusinessLastMonthNet = GetDataSetValue(dt, startRow + 5, startCol + 1).ToString(); model.SwapNumberOfDefaultCustomersAtThisMonthThisMonth = GetDataSetValueToDouble(dt, startRow + 6, startCol + 0).ToString(); model.SwapNumberOfDefaultCustomersAtThisMonthLastMonth = GetDataSetValueToDouble(dt, startRow + 6, startCol + 1).ToString(); model.SwapDefaultTransactionNumberAtThisMonthThisMonth = GetDataSetValueToDouble(dt, startRow + 7, startCol + 0).ToString(); model.SwapDefaultTransactionNumberAtThisMonthLastMonth = GetDataSetValueToDouble(dt, startRow + 7, startCol + 1).ToString(); model.TotalSwapDefaultCustomerNumberInThisYearThisMonth = GetDataSetValueToDouble(dt, startRow + 8, startCol + 0).ToString(); model.TotalSwapDefaultCustomerNumberInThisYearLastMonth = GetDataSetValueToDouble(dt, startRow + 8, startCol + 1).ToString(); model.SwapNumberOfDefaultCustomersInThisYearThisMonth = GetDataSetValueToDouble(dt, startRow + 9, startCol + 0).ToString(); model.SwapNumberOfDefaultCustomersInThisYearLastMonth = GetDataSetValueToDouble(dt, startRow + 9, startCol + 1).ToString(); } /// /// 获取场外期权类交易的履约担保品收取情况固定表格 /// /// /// /// /// private void GetOptionPerformanceGuaranteeInfo(PeriodicReportSACModel model, DataTable dt, int startRow, int startCol) { model.TotalNominalPrincipalAmountOfOptionThisMonth = GetDataSetValueToDouble(dt, startRow + 0, startCol + 0).ToString(); model.TotalNominalPrincipalAmountOfOptionLastMonth = GetDataSetValueToDouble(dt, startRow + 0, startCol + 1).ToString(); model.TheValueOfTheStockOptionCorrespondingPerformanceGuaranteeThisMonth = GetDataSetValueToDouble(dt, startRow + 1, startCol + 0).ToString(); model.TheValueOfTheStockOptionCorrespondingPerformanceGuaranteeLastMonth = GetDataSetValueToDouble(dt, startRow + 1, startCol + 1).ToString(); model.OptionCashCollateralValueThisMonth = GetDataSetValueToDouble(dt, startRow + 2, startCol + 0).ToString(); model.OptionCashCollateralValueLastMonth = GetDataSetValueToDouble(dt, startRow + 2, startCol + 1).ToString(); model.OptionSecuritiesCollateralValueThisMonth = GetDataSetValueToDouble(dt, startRow + 3, startCol + 0).ToString(); model.OptionSecuritiesCollateralValueLastMonth = GetDataSetValueToDouble(dt, startRow + 3, startCol + 1).ToString(); model.ProportionOfTheOverallPerformanceOfTheOptionBusinessThisMonthFull = GetDataSetValue(dt, startRow + 4, startCol + 0).ToString(); model.ProportionOfTheOverallPerformanceOfTheOptionBusinessLastMonthFull = GetDataSetValue(dt, startRow + 4, startCol + 1).ToString(); model.ProportionOfTheOverallPerformanceOfTheOptionBusinessThisMonthNet = GetDataSetValue(dt, startRow + 5, startCol + 0).ToString(); model.ProportionOfTheOverallPerformanceOfTheOptionBusinessLastMonthNet = GetDataSetValue(dt, startRow + 5, startCol + 1).ToString(); model.OptionNumberOfDefaultCustomersAtThisMonthThisMonth = GetDataSetValueToDouble(dt, startRow + 6, startCol + 0).ToString(); model.OptionNumberOfDefaultCustomersAtThisMonthLastMonth = GetDataSetValueToDouble(dt, startRow + 6, startCol + 1).ToString(); model.OptionTransactionNumberAtThisMonthThisMonth = GetDataSetValueToDouble(dt, startRow + 7, startCol + 0).ToString(); model.OptionTransactionNumberAtThisMonthLastMonth = GetDataSetValueToDouble(dt, startRow + 7, startCol + 1).ToString(); model.TotalOptionDefaultCustomerNumberInThisYearThisMonth = GetDataSetValueToDouble(dt, startRow + 8, startCol + 0).ToString(); model.TotalOptionDefaultCustomerNumberInThisYearLastMonth = GetDataSetValueToDouble(dt, startRow + 8, startCol + 1).ToString(); model.OptionNumberOfDefaultCustomersInThisYearThisMonth = GetDataSetValueToDouble(dt, startRow + 9, startCol + 0).ToString(); model.OptionNumberOfDefaultCustomersInThisYearLastMonth = GetDataSetValueToDouble(dt, startRow + 9, startCol + 1).ToString(); } /// /// 获取收取履约担保品的使用情况固定表格 /// /// /// /// /// private void GetPerformanceGuaranteeInfo(PeriodicReportSACModel model, DataTable dt, int startRow, int startCol) { model.StockTradingCorrespondsToValueOfCollateralAtEndOfThisMonth = GetDataSetValueToDouble(dt, startRow + 0, startCol + 0).ToString(); model.StockTradingCorrespondsToValueOfCollateralAtEndOfLastMonth = GetDataSetValueToDouble(dt, startRow + 0, startCol + 1).ToString(); model.CashBalanceAtEndOfThisMonth = GetDataSetValueToDouble(dt, startRow + 1, startCol + 0).ToString("0.00"); model.CashBalanceAtEndOfLastMonth = GetDataSetValueToDouble(dt, startRow + 1, startCol + 1).ToString("0.00"); model.HoldStockMarketValueAtEndOfThisMonth = GetDataSetValueToDouble(dt, startRow + 2, startCol + 0).ToString(); model.HoldStockMarketValueAtEndOfLastMonth = GetDataSetValueToDouble(dt, startRow + 2, startCol + 1).ToString(); model.HoldMarketValueOfBondsAtTheEndOfThisMonth = GetDataSetValueToDouble(dt, startRow + 3, startCol + 0).ToString(); model.HoldMarketValueOfBondsAtTheEndOfLastMonth = GetDataSetValueToDouble(dt, startRow + 3, startCol + 1).ToString(); model.OwnedAssetManagementProductsAtTheEndOfThisMonth = GetDataSetValueToDouble(dt, startRow + 4, startCol + 0).ToString(); model.OwnedAssetManagementProductsAtTheEndOfLastMonth = GetDataSetValueToDouble(dt, startRow + 4, startCol + 1).ToString(); model.OwnedBankFinanceAtTheEndOfThisMonth = GetDataSetValueToDouble(dt, startRow + 5, startCol + 0).ToString(); model.OwnedBankFinanceAtTheEndOfLastMonth = GetDataSetValueToDouble(dt, startRow + 5, startCol + 1).ToString(); model.HoldTrustProductAtTheEndOfThisMonth = GetDataSetValueToDouble(dt, startRow + 6, startCol + 0).ToString(); model.HoldTrustProductAtTheEndOfLastMonth = GetDataSetValueToDouble(dt, startRow + 6, startCol + 1).ToString(); model.InsuranceProductsAreHeldAtTheEndOfThisMonth = GetDataSetValueToDouble(dt, startRow + 7, startCol + 0).ToString(); model.InsuranceProductsAreHeldAtTheEndOfLastMonth = GetDataSetValueToDouble(dt, startRow + 7, startCol + 1).ToString(); model.HoldOtherProductsAtTheEndOfThisMonth = GetDataSetValueToDouble(dt, startRow + 8, startCol + 0).ToString(); model.HoldOtherProductsAtTheEndOfLastMonth = GetDataSetValueToDouble(dt, startRow + 8, startCol + 1).ToString(); } protected override List CheckBodyValue(BodyModel model, out bool checkStatus) { List result = new List(); if (model?.PeriodicReportSAC != null) { List listRoot = new List(); var helper = new Common.CheckHelper(); var detailHelper = new Common.CheckHelper(); var detailAtHelper = new Common.CheckHelper(); var hedgeHelper = new Common.CheckHelper(); helper.ExecuteCheck(model.PeriodicReportSAC, (name, value, msg) => { listRoot.Add(new SacInfo(name, value, msg)); }); if (model.PeriodicReportSAC.IncreaseBusinessDetailsThisMonthTuple != null) { for (int i = 0; i < model.PeriodicReportSAC.IncreaseBusinessDetailsThisMonthTuple.Count; i++) { var listItem = new List(); var item = model.PeriodicReportSAC.IncreaseBusinessDetailsThisMonthTuple[i]; detailHelper.ExecuteCheck(item, (name, value, msg) => { listItem.Add(new SacInfo(name, value, msg)); }); if (listItem.Count > 0) { var temp = new SacInfo("IncreaseBusinessDetailsThisMonthTuple", i); temp.SubMaps = new List(listItem); listRoot.Add(temp); } } } if (model.PeriodicReportSAC.InventoryBusinessDetailsAtTheEndOfThisMonthTuple != null) { for (int i = 0; i < model.PeriodicReportSAC.InventoryBusinessDetailsAtTheEndOfThisMonthTuple.Count; i++) { var listItem = new List(); var item = model.PeriodicReportSAC.InventoryBusinessDetailsAtTheEndOfThisMonthTuple[i]; detailAtHelper.ExecuteCheck(item, (name, value, msg) => { listItem.Add(new SacInfo(name, value, msg)); }); if (listItem.Count > 0) { var temp = new SacInfo("InventoryBusinessDetailsAtTheEndOfThisMonthTuple", i); temp.SubMaps = new List(listItem); listRoot.Add(temp); } } } if (model.PeriodicReportSAC.TargetCaseAndHedgeTuple != null) { for (int i = 0; i < model.PeriodicReportSAC.TargetCaseAndHedgeTuple.Count; i++) { var listItem = new List(); var item = model.PeriodicReportSAC.TargetCaseAndHedgeTuple[i]; hedgeHelper.ExecuteCheck(item, (name, value, msg) => { listItem.Add(new SacInfo(name, value, msg)); }); if (listItem.Count > 0) { var temp = new SacInfo("TargetCaseAndHedgeTuple", i); temp.SubMaps = new List(listItem); listRoot.Add(temp); } } } if (listRoot.Count > 0) { var errMsg = new SacInfo("PeriodicReportSAC"); errMsg.SubMaps = new List(listRoot); result.Add(errMsg); } } checkStatus = result.Count > 0; return result; } /// /// 获取已实现损益 /// /// /// /// /// private double GetRealizedPnl(Expression> expression, DateTime startDate, DateTime endDate) { var latestMonthIncomeQuery = from tc in DbContext.trade_cash join t in DbContext.trade.Where(expression) on tc.TradeId equals t.id where tc.ValueDate >= startDate && tc.ValueDate <= endDate && tc.ValidState != "InValid" && !tc.IsDeleted group tc by tc.TradeId into tcInfo select new { tcInfo.Key, Amount = tcInfo.Sum(O => (double?)O.Amount) }; var latestMonthIds = latestMonthIncomeQuery.Select(O => O.Key); var latestMonthIncome = latestMonthIncomeQuery.Sum(O => O.Amount) ?? 0; var lastMonthIncome = (from tc in DbContext.trade_cash where tc.ValueDate < startDate && latestMonthIds.Contains(tc.TradeId) && tc.ValidState != "InValid" && !tc.IsDeleted select tc.Amount).Sum(O => (double?)O) ?? 0; return latestMonthIncome - lastMonthIncome; } /// /// 获取已实现损益 /// /// /// /// /// private double GetPositionPnl(Expression> expression, DateTime lastEndDate, DateTime endDate) { var swapLatestMonthIncomeQuery = from ep in DbContext.eod_trade_position join t in DbContext.trade.Where(expression) on ep.TradeId equals t.id where ep.ValueDate == endDate && ep.TradeId > 0 && ep.ClientId > 0 select new { ep.TradeId, ep.PositionPnL }; var swapLatestMonthIds = swapLatestMonthIncomeQuery.Select(O => O.TradeId); var swapLatestMonthIncome = swapLatestMonthIncomeQuery.Sum(O => (double?)O.PositionPnL) ?? 0; var swapLastMonthIncome = (from ep in DbContext.eod_trade_position where ep.ValueDate == lastEndDate && swapLatestMonthIds.Contains(ep.TradeId) select ep.PositionPnL).Sum(O => (double?)O) ?? 0; return (double)(swapLatestMonthIncome - swapLastMonthIncome); } /// /// 获取excel中的本月新增业务明细 /// /// private List GetIncreaseBusinessDetailsThisMonthTuple() { var result = new List(); if (_excelDataSource != null && _excelDataSource.Tables.Contains("本月新增业务明细")) { var dt = _excelDataSource.Tables["本月新增业务明细"]; for (var i = 1; i < dt.Rows.Count; i++) { if (string.IsNullOrWhiteSpace(dt.Rows[i][0]?.ToString())) { //第一列空白说明数据结束了; break; } var model = new IncreaseBusinessDetailsThisMonthModel(); model.NameOfSecuritiesCompany = GetDataSetValue(dt, i, 1); model.NameOfCounterparty = GetDataSetValue(dt, i, 2); model.CounterpartyProductName = GetDataSetValue(dt, i, 3); model.TradeConfirmationNumber = GetDataSetValue(dt, i, 4); model.TransactionConfirmationNumber = GetDataSetValue(dt, i, 5); if (model.TransactionConfirmationNumber.IsNullOrWhiteSpace()) { model.TransactionConfirmationNumber = base.GetBizIdFromInfoTag(model.TradeConfirmationNumber); } model.BusinessType = ConsReport.BusinessTypeMap[GetDataSetValue(dt, i, 6)]; model.NotionalPrincipalAmountLNotionalPrincipalAmount = GetDataSetValue(dt, i, 7); model.SNotionalPrincipalAmount = GetDataSetValue(dt, i, 8); model.StartDate = GetDataSetValue(dt, i, 9); model.DueDate = GetDataSetValue(dt, i, 10); model.InvestmentTargetType = UndrlygAssetTypeMap[GetDataSetValue(dt, i, 11)]; model.UndrlygAssetName = GetDataSetValue(dt, i, 12); model.UndrlygAssetCode = GetDataSetValue(dt, i, 13); model.UndrlygAssetTradgPlc = GetDataSetValue(dt, i, 14); model.OptionObjectSecondClass = ConsReport.UndrlygAssetDtldTypeMap[GetDataSetValue(dt, i, 15)]; model.ReturnSwapObjectSecondClass = ConsReport.SwapUndrlygAssetDtldTypeMap[GetDataSetValue(dt, i, 16)]; model.NonAnnualOptionFee = GetDataSetValue(dt, i, 17); model.OptionType = ConsReport.OptionStructureTypeMap[GetDataSetValue(dt, i, 18)]; result.Add(model); } } return result; } /// /// 获取excel中的本月末存量业务明细 /// /// private List GetInventoryBusinessDetailsAtTheEndOfThisMonth() { var result = new List(); if (_excelDataSource != null && _excelDataSource.Tables.Contains("本月末存量业务明细")) { var dt = _excelDataSource.Tables["本月末存量业务明细"]; for (var i = 1; i < dt.Rows.Count; i++) { if (string.IsNullOrWhiteSpace(dt.Rows[i][0]?.ToString())) { //第一列空白说明数据结束了; break; } var model = new InventoryBusinessDetailsAtTheEndOfThisMonthModel(); model.NameOfSecuritiesCompany = GetDataSetValue(dt, i, 1); model.NameOfCounterparty = GetDataSetValue(dt, i, 2); model.NameOfCounterpartyProduct = GetDataSetValue(dt, i, 3); model.TradeConfirmationNumber = GetDataSetValue(dt, i, 4); model.TransactionConfirmationNumber = GetDataSetValue(dt, i, 5); if (model.TransactionConfirmationNumber.IsNullOrWhiteSpace()) { model.TransactionConfirmationNumber = base.GetBizIdFromInfoTag(model.TradeConfirmationNumber); } model.BusinessType = ConsReport.BusinessTypeMap[GetDataSetValue(dt, i, 6)]; model.NotionalPrincipalAmountLNotionalPrincipalAmount = GetDataSetValue(dt, i, 7); model.SNotionalPrincipalAmount = GetDataSetValue(dt, i, 8); model.StartDay = GetDataSetValue(dt, i, 9); model.DueDate = GetDataSetValue(dt, i, 10); model.SumInvestmentTargetType = UndrlygAssetTypeMap[GetDataSetValue(dt, i, 11)]; model.UndrlygAssetName = GetDataSetValue(dt, i, 12); model.UndrlygAssetCode = GetDataSetValue(dt, i, 13); model.UndrlygAssetTradgPlc = GetDataSetValue(dt, i, 14); model.OptionSumInvestmentTargetType = ConsReport.UndrlygAssetDtldTypeMap[GetDataSetValue(dt, i, 15)]; model.ExchangeSumInvestmentTargetType = ConsReport.SwapUndrlygAssetDtldTypeMap[GetDataSetValue(dt, i, 16)]; model.OptionFee = GetDataSetValue(dt, i, 17); model.OptionType = ConsReport.OptionStructureTypeMap[GetDataSetValue(dt, i, 18)]; model.MaitainMarginRation = GetDataSetValue(dt, i, 19); model.CorrelationCoefficient = GetDataSetValue(dt, i, 20); model.LongPositionContractValue = GetDataSetValue(dt, i, 21); model.ShortPositionContractValue = GetDataSetValue(dt, i, 22); result.Add(model); } } return result; } /// /// 获取excel中的标的情况与对冲 /// /// private List GetTargetCaseAndHedgeTuple() { var result = new List(); if (_excelDataSource != null && _excelDataSource.Tables.Contains("标的情况与对冲")) { var dt = _excelDataSource.Tables["标的情况与对冲"]; for (var i = 1; i < dt.Rows.Count; i++) { if (string.IsNullOrWhiteSpace(dt.Rows[i][0]?.ToString())) { //第一列空白说明数据结束了; break; } var model = new TargetCaseAndHedgeModel(); model.NameOfSecuritiesCompany = GetDataSetValue(dt, i, 1); model.BusinessType = ConsReport.BusinessTypeMap[GetDataSetValue(dt, i, 2)]; model.SumInvestmentTargetType = ConsReport.HedgeSACUndrlygAssetDtldTypeMap[GetDataSetValue(dt, i, 3)]; model.SumInvestmentTargetName = GetDataSetValue(dt, i, 4); model.UndrlygAssetCode = GetDataSetValue(dt, i, 5); model.UndrlygAssetTradgPlc = GetDataSetValue(dt, i, 6); model.BuyingImpulseVolume = GetDataSetValue(dt, i, 7); model.SellingImpulseVolume = GetDataSetValue(dt, i, 8); model.ImpulseVolume = GetDataSetValue(dt, i, 9); model.PositionAtTheEndOfThisMonth = GetDataSetValue(dt, i, 10); model.TheNumberOfPositionsHeldAtTheEndOfThisMonth = GetDataSetValue(dt, i, 11); model.AveragePriceAtTheEndOfTheMonth = GetDataSetValue(dt, i, 12); result.Add(model); } } return result; } private string formatInfoTag(string tag, bool suffixType = false) { var result = $"{BusiDataType}_{tag}_"; if (suffixType) { result = $"{result}{_operationType}"; } return result; } public override bool BeforeOfGenerated(out string errMsg) { errMsg = ""; for (var i = 0; i < noteList.Count; i++) { base.SaveReportNotes(noteList[i]); } return true; } } }