904 lines
58 KiB
C#
904 lines
58 KiB
C#
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<OptFlagsEnum>? _validOperationType = null;
|
|
public override List<OptFlagsEnum> ValidOperationType
|
|
{
|
|
get
|
|
{
|
|
_validOperationType ??= new List<OptFlagsEnum>() {
|
|
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<SACReportNotes> 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<string> fileList)
|
|
{
|
|
fileList = new List<string>();
|
|
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<IncreaseBusinessDetailsThisMonthModel>();
|
|
model.IncreaseBusinessDetailsThisMonthTuple.AddRange(GetIncreaseBusinessDetailsThisMonthTuple());
|
|
|
|
model.InventoryBusinessDetailsAtTheEndOfThisMonthTuple = new List<InventoryBusinessDetailsAtTheEndOfThisMonthModel>();
|
|
model.InventoryBusinessDetailsAtTheEndOfThisMonthTuple.AddRange(GetInventoryBusinessDetailsAtTheEndOfThisMonth());
|
|
|
|
model.TargetCaseAndHedgeTuple = new List<TargetCaseAndHedgeModel>();
|
|
model.TargetCaseAndHedgeTuple.AddRange(GetTargetCaseAndHedgeTuple());
|
|
}
|
|
return model;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取本月了结交易盈亏情况统计
|
|
/// </summary>
|
|
/// <param name="model"></param>
|
|
/// <param name="dt"></param>
|
|
/// <param name="startRow"></param>
|
|
/// <param name="startCol"></param>
|
|
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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取本月会计损益统计固定表格
|
|
/// </summary>
|
|
/// <param name="model"></param>
|
|
/// <param name="dt"></param>
|
|
/// <param name="startRow"></param>
|
|
/// <param name="startCol"></param>
|
|
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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取签署协议统计
|
|
/// </summary>
|
|
/// <param name="model"></param>
|
|
/// <param name="dt"></param>
|
|
/// <param name="startRow"></param>
|
|
/// <param name="startCol"></param>
|
|
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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 场外个股期权业务规模情况
|
|
/// </summary>
|
|
/// <param name="model"></param>
|
|
/// <param name="dt"></param>
|
|
/// <param name="startRow"></param>
|
|
/// <param name="startCol"></param>
|
|
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");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取交易对手情况表(交易确认书)
|
|
/// </summary>
|
|
/// <param name="model"></param>
|
|
/// <param name="dt"></param>
|
|
/// <param name="startRow"></param>
|
|
/// <param name="startCol"></param>
|
|
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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取场外衍生品规模及标的情况
|
|
/// </summary>
|
|
/// <param name="model"></param>
|
|
/// <param name="dt"></param>
|
|
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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取杠杆水平
|
|
/// </summary>
|
|
/// <param name="model"></param>
|
|
/// <param name="dt"></param>
|
|
/// <param name="startRow"></param>
|
|
/// <param name="startCol"></param>
|
|
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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取收益互换类交易的履约担保品收取情况固定表格
|
|
/// </summary>
|
|
/// <param name="model"></param>
|
|
/// <param name="dt"></param>
|
|
/// <param name="startRow"></param>
|
|
/// <param name="startCol"></param>
|
|
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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取场外期权类交易的履约担保品收取情况固定表格
|
|
/// </summary>
|
|
/// <param name="model"></param>
|
|
/// <param name="dt"></param>
|
|
/// <param name="startRow"></param>
|
|
/// <param name="startCol"></param>
|
|
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();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取收取履约担保品的使用情况固定表格
|
|
/// </summary>
|
|
/// <param name="model"></param>
|
|
/// <param name="dt"></param>
|
|
/// <param name="startRow"></param>
|
|
/// <param name="startCol"></param>
|
|
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<SacInfo> CheckBodyValue(BodyModel model, out bool checkStatus)
|
|
{
|
|
var result = new List<SacInfo>();
|
|
if (model?.PeriodicReportSAC != null)
|
|
{
|
|
var listRoot = new List<SacInfo>();
|
|
var helper = new Common.CheckHelper<PeriodicReportSACModel>();
|
|
var detailHelper = new Common.CheckHelper<IncreaseBusinessDetailsThisMonthModel>();
|
|
var detailAtHelper = new Common.CheckHelper<InventoryBusinessDetailsAtTheEndOfThisMonthModel>();
|
|
var hedgeHelper = new Common.CheckHelper<TargetCaseAndHedgeModel>();
|
|
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<SacInfo>();
|
|
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<SacInfo>(listItem)
|
|
};
|
|
listRoot.Add(temp);
|
|
}
|
|
}
|
|
}
|
|
if (model.PeriodicReportSAC.InventoryBusinessDetailsAtTheEndOfThisMonthTuple != null)
|
|
{
|
|
for (var i = 0; i < model.PeriodicReportSAC.InventoryBusinessDetailsAtTheEndOfThisMonthTuple.Count; i++)
|
|
{
|
|
var listItem = new List<SacInfo>();
|
|
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<SacInfo>(listItem)
|
|
};
|
|
listRoot.Add(temp);
|
|
}
|
|
}
|
|
}
|
|
if (model.PeriodicReportSAC.TargetCaseAndHedgeTuple != null)
|
|
{
|
|
for (var i = 0; i < model.PeriodicReportSAC.TargetCaseAndHedgeTuple.Count; i++)
|
|
{
|
|
var listItem = new List<SacInfo>();
|
|
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<SacInfo>(listItem)
|
|
};
|
|
listRoot.Add(temp);
|
|
}
|
|
}
|
|
}
|
|
if (listRoot.Count > 0)
|
|
{
|
|
var errMsg = new SacInfo("PeriodicReportSAC")
|
|
{
|
|
SubMaps = new List<SacInfo>(listRoot)
|
|
};
|
|
result.Add(errMsg);
|
|
}
|
|
}
|
|
checkStatus = result.Count > 0;
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取已实现损益
|
|
/// </summary>
|
|
/// <param name="expression"></param>
|
|
/// <param name="startDate"></param>
|
|
/// <param name="endDate"></param>
|
|
/// <returns></returns>
|
|
private double GetRealizedPnl(Expression<Func<trade, bool>> 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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取已实现损益
|
|
/// </summary>
|
|
/// <param name="expression"></param>
|
|
/// <param name="startDate"></param>
|
|
/// <param name="endDate"></param>
|
|
/// <returns></returns>
|
|
private double GetPositionPnl(Expression<Func<trade, bool>> 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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取excel中的本月新增业务明细
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private List<IncreaseBusinessDetailsThisMonthModel> GetIncreaseBusinessDetailsThisMonthTuple()
|
|
{
|
|
var result = new List<IncreaseBusinessDetailsThisMonthModel>();
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取excel中的本月末存量业务明细
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private List<InventoryBusinessDetailsAtTheEndOfThisMonthModel> GetInventoryBusinessDetailsAtTheEndOfThisMonth()
|
|
{
|
|
var result = new List<InventoryBusinessDetailsAtTheEndOfThisMonthModel>();
|
|
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;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取excel中的标的情况与对冲
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private List<TargetCaseAndHedgeModel> GetTargetCaseAndHedgeTuple()
|
|
{
|
|
var result = new List<TargetCaseAndHedgeModel>();
|
|
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;
|
|
}
|
|
}
|
|
}
|