using BaseOUDAL; using System.Data; using System.Linq.Expressions; using YLErp.BLL; using YLErp.DBModels; 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 { _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(); 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 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("未知操作类型"); } } // To optimize the code we can use the switch statement instead of if-else statements //switch (_reqInfo.DataSource & SAC_ReportDataSourceEnum.Template) //{ // case SAC_ReportDataSourceEnum.Template: model.PeriodicReportSAC = GetPeriodicReportSACFromExcel(); // break; //} 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 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) { var 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) { var 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) { var result = new List(); if (model?.PeriodicReportSAC != null) { var 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 (var 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) { SubMaps = new List(listItem) }; listRoot.Add(temp); } } } if (model.PeriodicReportSAC.InventoryBusinessDetailsAtTheEndOfThisMonthTuple != null) { for (var 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) { SubMaps = new List(listItem) }; listRoot.Add(temp); } } } if (model.PeriodicReportSAC.TargetCaseAndHedgeTuple != null) { for (var 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) { SubMaps = new List(listItem) }; listRoot.Add(temp); } } } if (listRoot.Count > 0) { var errMsg = new SacInfo("PeriodicReportSAC") { 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(O => O.TradeType != "结构化交易").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(O => O.TradeType != "结构化交易").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 { NameOfSecuritiesCompany = GetDataSetValue(dt, i, 1), NameOfCounterparty = GetDataSetValue(dt, i, 2), CounterpartyProductName = GetDataSetValue(dt, i, 3), TradeConfirmationNumber = GetDataSetValue(dt, i, 4), 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.SwapUndrlygAssetDtldTypeMap[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 { NameOfSecuritiesCompany = GetDataSetValue(dt, i, 1), NameOfCounterparty = GetDataSetValue(dt, i, 2), NameOfCounterpartyProduct = GetDataSetValue(dt, i, 3), TradeConfirmationNumber = GetDataSetValue(dt, i, 4), 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.SwapUndrlygAssetDtldTypeMap[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 { NameOfSecuritiesCompany = GetDataSetValue(dt, i, 1), BusinessType = ConsReport.BusinessTypeMap[GetDataSetValue(dt, i, 2)], SumInvestmentTargetType = ConsReport.HedgeSACUndrlygAssetDtldTypeMap[GetDataSetValue(dt, i, 3)], SumInvestmentTargetName = GetDataSetValue(dt, i, 4), UndrlygAssetCode = GetDataSetValue(dt, i, 5), UndrlygAssetTradgPlc = GetDataSetValue(dt, i, 6), BuyingImpulseVolume = GetDataSetValue(dt, i, 7), SellingImpulseVolume = GetDataSetValue(dt, i, 8), ImpulseVolume = GetDataSetValue(dt, i, 9), PositionAtTheEndOfThisMonth = GetDataSetValue(dt, i, 10), TheNumberOfPositionsHeldAtTheEndOfThisMonth = GetDataSetValue(dt, i, 11), 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; } protected override string _changeCodeOfInfoTag(string infoTag, string newCode, out string originalCode) { //定期报告中不存在编号,也就不存在修改编号的情况; throw new NotImplementedException(); } public override bool BeforeOfGenerated(out string errMsg) { errMsg = ""; for (var i = 0; i < noteList.Count; i++) { base.SaveReportNotes(noteList[i]); } return true; } } }