Files
zszq-trs/YLErpDAL/Modules/SuperviseReportModule/SAC/Service/ReportPeriodicReportISDAService.cs
T

736 lines
43 KiB
C#

using System.Data;
using YLErp.DBModels.Consts;
using YLErp.DBModels.Enums;
using YLErp.Helpers;
using YLErp.Modules.SuperviseReportModule.SAC.Common;
using YLErp.Modules.SuperviseReportModule.SAC.Model;
using static YLErp.DBModels.Consts.ConsReport;
namespace YLErp.Modules.SuperviseReportModule.SAC.Service
{
class ReportPeriodicReportISDAService : ReportBaseService
{
public ReportPeriodicReportISDAService(OptUserInfo optUser) : base(optUser)
{
}
protected override string _excelDataSourcePath => "定期报告\\";
protected override string _excelDataSourceFileName => "import_ISDA_template.xlsx";
protected override DataFlagsEnum BusiDataType => DataFlagsEnum.A1013;
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_PeriodicReportISDA;
readonly List<SACReportNotes> noteList = new();
public override bool CheckRequestParamer(ReportInfo req, out string errMsg)
{
if (!base.CheckRequestParamer(req, out errMsg))
{
return false;
}
if (req.ISDAReportDate == null)
{
errMsg = "ISDA定期报告对应的报告月份不应为空";
return false;
}
switch (req.ISDAReportStatus)
{
case OptFlagsEnum.U:
case OptFlagsEnum.D:
minDate = req.ISDAReportDate.Value.Date.AddDays(-req.ISDAReportDate.Value.Day).AddDays(1);
maxDate = req.ISDAReportDate.Value.Date.AddMonths(1).AddDays(-req.ISDAReportDate.Value.Day);
var note = base.GetReportNotes(ReportType, formatInfoTag(req.ISDAReportDate.Value.ToString("yyyy-MM"))).FirstOrDefault();
if (note == null)
{
errMsg = $"{minDate.ToString("yyyy-MM-dd")}~{maxDate.ToString("yyyy-MM-dd")}不存在报送成功的ISDA定期报告记录,请重新选择";
return false;
}
break;
case OptFlagsEnum.A:
if (base.GetReportNotes(ReportType, formatInfoTag(req.ISDAReportDate.Value.ToString("yyyy-MM"))).Any())
{
minDate = req.ISDAReportDate.Value.Date.AddDays(-req.ISDAReportDate.Value.Day).AddDays(1);
maxDate = req.ISDAReportDate.Value.Date.AddMonths(1).AddDays(-req.ISDAReportDate.Value.Day);
errMsg = $"{minDate.ToString("yyyy-MM-dd")}~{maxDate.ToString("yyyy-MM-dd")}最新ISDA定期报告记录已报送成功,请选择补正";
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.ISDAReportDate.Value.ToString("yyyy-MM"));
if (ReportStatus.CheckCacheInfo(CacheKey, cacheValue))
{
return model;
}
model.PeriodicReportISDA = new PeriodicReportISDAModel
{
OperationType = _operationType
};
var note = base.GetReportNotes(ReportType, cacheValue).FirstOrDefault();
if (note == null && _operationType == OptFlagsEnum.A)
{
note = new SACReportNotes()
{
InfoCache = $"{{\"Tag\":\"{_reqInfo.ISDAReportDate.Value.ToString("yyyy-MM")}\"}}",
IsValid = true,
};
}
else
{
switch (_operationType)
{
case OptFlagsEnum.A:
noData = true;//新增数据已报送,跳过
return model;
case OptFlagsEnum.U:
note.IsValid = true;
break;
case OptFlagsEnum.D:
note.IsValid = false;
break;
case OptFlagsEnum.NONE:
default:
throw new ServiceException("未知操作类型");
}
}
if (_operationType != OptFlagsEnum.A)
{
model.PeriodicReportISDA.BizID = note.BizId;
}
if (_excelDataSource != null)
{
var dt = _excelDataSource.Tables["业务统计"];
model.PeriodicReportISDA.Year = _reqInfo.ISDAReportDate.Value.Year.ToString("0000");
model.PeriodicReportISDA.Month = _reqInfo.ISDAReportDate.Value.Month.ToString("0");
model.PeriodicReportISDA.OperationType = _operationType;
GetPotocolInfo(model, dt, 2, 1);
GetBusinessInfo(model, dt, 12, 2);
GetClientInfo(model, dt, 22, 2);
dt = _excelDataSource.Tables["履约担保情况"];
GetSwapPerformanceGuaranteeInfo(model, dt, 2, 1);
GetOptionPerformanceGuaranteeInfo(model, dt, 16, 1);
GetPerformanceGuaranteeInfo(model, dt, 29, 1);
dt = _excelDataSource.Tables["盈亏情况"];
GetSettleTradeWinlossInfo(model, dt, 2, 2);
GetWinlossInfo(model, dt, 17, 1);
model.PeriodicReportISDA.IncreaseBusinessDetailsThisMonthTuple = GetIncreaseBusinessDetailsThisMonthTuple();
model.PeriodicReportISDA.InventoryBusinessDetailsAtTheEndOfThisMonthTuple = GetInventoryBusinessDetailsAtTheEndOfThisMonthTuple();
model.PeriodicReportISDA.TargetCaseAndHedgeTuple = GetTargetCaseAndHedgeTuple();
model.PeriodicReportISDA.ExceID = base.formatExceID();
}
ReportStatus.AddCacheInfo(CacheKey, cacheValue);
noData = string.IsNullOrWhiteSpace(model.PeriodicReportISDA?.MainAgreementLastMonthAccumulatedThisYear);
if (!noData)
{
note.id = 0;
note.ExceId = model.PeriodicReportISDA.ExceID;
note.CreateTime = DateTime.Now;
note.FileTag = FileTag;
note.ReportType = ReportType;
note.ReportDate = _reqInfo.ReportDate;
note.InfoTag = formatInfoTag(_reqInfo.ISDAReportDate.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;
}
/// <summary>
/// 获取签署协议统计
/// </summary>
/// <param name="model"></param>
/// <param name="dt"></param>
/// <param name="startRow"></param>
/// <param name="startCol"></param>
private void GetPotocolInfo(BodyModel model, DataTable dt, int startRow, int startCol)
{
var row = startRow + 0;
model.PeriodicReportISDA.MainAgreementLastMonthAccumulatedThisYear = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.MainAgreementAddedThisMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
model.PeriodicReportISDA.MainAgreementAccumulatedThisYear = GetDataSetValue(dt, row, startCol + 2).ToString();
model.PeriodicReportISDA.MainAgreementValidedAtEndOfThisMonth = GetDataSetValue(dt, row, startCol + 3).ToString();
row = startRow + 1;
model.PeriodicReportISDA.SupplementalAgreementLastMonthAccumulatedThisYear = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.SupplementalAgreementAddedThisMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
model.PeriodicReportISDA.SupplementalAgreementAccumulatedThisYear = GetDataSetValue(dt, row, startCol + 2).ToString();
model.PeriodicReportISDA.SupplementalAgreementValidedAtTheEndOfThisMonth = GetDataSetValue(dt, row, startCol + 3).ToString();
row = startRow + 2;
model.PeriodicReportISDA.PerformanceGuaranteeAgreementLastMonthAccumulatedThisYear = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.PerformanceGuaranteeAgreementAddedThisMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
model.PeriodicReportISDA.PerformanceGuaranteeAgreementAccumulatedThisYear = GetDataSetValue(dt, row, startCol + 2).ToString();
model.PeriodicReportISDA.PerformanceGuaranteeAgreementValidedAtEndOfThisMonth = GetDataSetValue(dt, row, startCol + 3).ToString();
row = startRow + 3;
model.PeriodicReportISDA.TransactionConfirmationLastMonthAccumulatedThisYear = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.TransactionConfirmationAddedThisMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
model.PeriodicReportISDA.TransactionConfirmationBookAccumulatedThisYear = GetDataSetValue(dt, row, startCol + 2).ToString();
model.PeriodicReportISDA.TransactionConfirmationValidedAtEndOfThisMonth = GetDataSetValue(dt, row, startCol + 3).ToString();
}
/// <summary>
/// 获取规模统计表
/// </summary>
/// <param name="model"></param>
/// <param name="dt"></param>
/// <param name="startRow"></param>
/// <param name="startCol"></param>
private void GetBusinessInfo(BodyModel model, DataTable dt, int startRow, int startCol)
{
var row = startRow + 0;
model.PeriodicReportISDA.SWAPNominalCapitalStockAtBeginning = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.SWAPIncreasedOriginalTransactionNominalCapitalAtThisMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
model.PeriodicReportISDA.SWAPNotionalPrincipalAmountAllowedToBeTerminatedAtThisMonth = GetDataSetValue(dt, row, startCol + 2).ToString();
model.PeriodicReportISDA.SWAPNominalCapitalStockAtEnding = GetDataSetValue(dt, row, startCol + 3).ToString();
model.PeriodicReportISDA.SwapCategoryNominalPrincipalThisYearCumulativeInitialTransaction = GetDataSetValue(dt, row, startCol + 4).ToString();
row = startRow + 1;
model.PeriodicReportISDA.OptionOfNotionalPrincipalStockAtBeginning = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.OptionIncreasedOriginalTransactionNominalCapitalAtThisMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
model.PeriodicReportISDA.OptionNotionalPrincipalAmountAllowedToBeTerminatedAtThisMonth = GetDataSetValue(dt, row, startCol + 2).ToString();
model.PeriodicReportISDA.OptionOfNotionalPrincipalStockAtEnding = GetDataSetValue(dt, row, startCol + 3).ToString();
model.PeriodicReportISDA.NominalPrincipalOfOptionClassHasBeenAddedToInitialTransaction = GetDataSetValue(dt, row, startCol + 4).ToString();
row = startRow + 2;
model.PeriodicReportISDA.StockOfSwapContractsAtBeginning = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.NumberOfNewSwapInitialTradingContractsAtThisMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
model.PeriodicReportISDA.NumberOfSwapContractsToTerminateAtThisMonth = GetDataSetValue(dt, row, startCol + 2).ToString();
model.PeriodicReportISDA.StockOfSwapContractsAtEnding = GetDataSetValue(dt, row, startCol + 3).ToString();
model.PeriodicReportISDA.NumberOfSwapContractsIncreasedByThisYear = GetDataSetValue(dt, row, startCol + 4).ToString();
row = startRow + 3;
model.PeriodicReportISDA.StockOfOptionContractsAtBeginning = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.NumberOfNewOptionInitialTradingContractsAtThisMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
model.PeriodicReportISDA.NumberOfOptionContractsToTerminateAtThisMonth = GetDataSetValue(dt, row, startCol + 2).ToString();
model.PeriodicReportISDA.StockOfOptionContractsAtEnding = GetDataSetValue(dt, row, startCol + 3).ToString();
model.PeriodicReportISDA.NumberOfOptionContractsHasIncreasedInitialTransaction = GetDataSetValue(dt, row, startCol + 4).ToString();
}
/// <summary>
/// 获取客户情况表
/// </summary>
/// <param name="model"></param>
/// <param name="dt"></param>
/// <param name="startRow"></param>
/// <param name="startCol"></param>
private void GetClientInfo(BodyModel model, DataTable dt, int startRow, int startCol)
{
var row = startRow + 0;
model.PeriodicReportISDA.SwapSignedWithTheCustomerThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.NumberOfSwapTradingAccountsAtThisPeriodThisMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
model.PeriodicReportISDA.NumberOfSwapTradingClientStockThisMonth = GetDataSetValue(dt, row, startCol + 2).ToString();
row = startRow + 1;
model.PeriodicReportISDA.SwapSignedWithTheCustomerLastMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.NumberOfSwapTradingAccountsLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
model.PeriodicReportISDA.NumberOfSwapTradingClientStockLastMonth = GetDataSetValue(dt, row, startCol + 2).ToString();
row = startRow + 2;
model.PeriodicReportISDA.OptionSignedWithTheCustomerThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.NumberOfOptionTradingAccountsThisMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
model.PeriodicReportISDA.NumberOfOptionTradingClientStockThisMonth = GetDataSetValue(dt, row, startCol + 2).ToString();
row = startRow + 3;
model.PeriodicReportISDA.OptionSignedWithTheCustomerLastMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.NumberOfOptionTradingAccountsLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
model.PeriodicReportISDA.NumberOfOptionTradingClientStockLastMonth = GetDataSetValue(dt, row, startCol + 2).ToString();
row = startRow + 4;
model.PeriodicReportISDA.SignedTotalCustomer = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.TotalNumberOfTradingAccountsAtThisPeriod = GetDataSetValue(dt, row, startCol + 1).ToString();
model.PeriodicReportISDA.TotalNumberOfTradingClientAccounts = GetDataSetValue(dt, row, startCol + 2).ToString();
row = startRow + 5;
model.PeriodicReportISDA.SignedTotalCustomerLastMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.TotalNumberOfTradingAccountsAtThisPeriodLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
model.PeriodicReportISDA.TotalNumberOfTradingClientAccountsLastMonth = GetDataSetValue(dt, row, startCol + 2).ToString();
}
/// <summary>
/// 获取收益互换类交易的履约担保品收取情况固定表格
/// </summary>
/// <param name="model"></param>
/// <param name="dt"></param>
/// <param name="startRow"></param>
/// <param name="startCol"></param>
private void GetSwapPerformanceGuaranteeInfo(BodyModel model, DataTable dt, int startRow, int startCol)
{
var row = startRow + 0;
model.PeriodicReportISDA.TotalNominalPrincipalAmountOfSwapThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.TotalNominalPrincipalAmountOfSwapLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 1;
model.PeriodicReportISDA.TheValueOfTheStockSwapInTheCorrespondingPerformanceGuaranteeThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.TheValueOfTheStockSwapInTheCorrespondingPerformanceGuaranteeLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 2;
model.PeriodicReportISDA.SwapCashCollateralValueThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.SwapCashCollateralValueLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 3;
model.PeriodicReportISDA.SwapSecuritiesCollateralValueThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.SwapSecuritiesCollateralValueLastMonthThisMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 4;
model.PeriodicReportISDA.ProportionOfTheOverallPerformanceOfTheSwapBusinessThisMonthFull = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.ProportionOfTheOverallPerformanceOfTheSwapBusinessLastMonthFull = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 5;
model.PeriodicReportISDA.ProportionOfTheOverallPerformanceOfTheSwapBusinessThisMonthNet = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.ProportionOfTheOverallPerformanceOfTheSwapBusinessLastMonthNet = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 6;
model.PeriodicReportISDA.SwapNumberOfDefaultCustomersAtThisMonthThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.SwapNumberOfDefaultCustomersAtThisMonthLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 7;
model.PeriodicReportISDA.SwapDefaultTransactionNumberAtThisMonthThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.SwapDefaultTransactionNumberAtThisMonthLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 8;
model.PeriodicReportISDA.TotalSwapDefaultCustomerNumberInThisYearThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.TotalSwapDefaultCustomerNumberInThisYearLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 9;
model.PeriodicReportISDA.SwapNumberOfDefaultCustomersInThisYearThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.SwapNumberOfDefaultCustomersInThisYearLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
}
/// <summary>
/// 获取场外期权类交易的履约担保品收取情况固定表格
/// </summary>
/// <param name="model"></param>
/// <param name="dt"></param>
/// <param name="startRow"></param>
/// <param name="startCol"></param>
private void GetOptionPerformanceGuaranteeInfo(BodyModel model, DataTable dt, int startRow, int startCol)
{
var row = startRow + 0;
model.PeriodicReportISDA.TotalNominalPrincipalAmountOfOTCOptionsThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.TotalNominalPrincipalAmountOfOTCOptionsLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 1;
model.PeriodicReportISDA.TheValueOfTheStockOTCOptionsCorrespondingPerformanceGuaranteeThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.TheValueOfTheStockOTCOptionsCorrespondingPerformanceGuaranteeLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 2;
model.PeriodicReportISDA.OTCOptionsCashCollateralValueThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.OTCOptionsCashCollateralValueLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 3;
model.PeriodicReportISDA.OTCOptionsSecuritiesCollateralValueThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.OTCOptionsSecuritiesCollateralValueLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 4;
model.PeriodicReportISDA.ProportionOfTheOverallPerformanceOfTheOTCOptionsBusinessThisMonthFull = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.ProportionOfTheOverallPerformanceOfTheOTCOptionsBusinessLastMonthFull = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 5;
model.PeriodicReportISDA.ProportionOfTheOverallPerformanceOfTheOTCOptionsBusinessThisMonthNet = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.ProportionOfTheOverallPerformanceOfTheOTCOptionsBusinessLastMonthNet = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 6;
model.PeriodicReportISDA.OTCOptionsNumberOfDefaultCustomersAtThisMonthThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.OTCOptionsNumberOfDefaultCustomersAtThisMonthLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 7;
model.PeriodicReportISDA.OTCOptionsTransactionNumberAtThisMonthThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.OTCOptionsTransactionNumberAtThisMonthLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 8;
model.PeriodicReportISDA.TotalOTCOptionsDefaultCustomerNumberInThisYearThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.TotalOTCOptionsDefaultCustomerNumberInThisYearLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 9;
model.PeriodicReportISDA.OTCOptionsNumberOfDefaultCustomersInThisYearThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.OTCOptionsNumberOfDefaultCustomersInThisYearLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
}
/// <summary>
/// 获取收取履约担保品的使用情况固定表格
/// </summary>
/// <param name="model"></param>
/// <param name="dt"></param>
/// <param name="startRow"></param>
/// <param name="startCol"></param>
private void GetPerformanceGuaranteeInfo(BodyModel model, DataTable dt, int startRow, int startCol)
{
var row = startRow + 0;
model.PeriodicReportISDA.StockTradingCorrespondsToValueOfCollateralAtEndOfThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.StockTradingCorrespondsToValueOfCollateralAtEndOfLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 1;
model.PeriodicReportISDA.CashBalanceAtEndOfThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.CashBalanceAtEndOfLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 2;
model.PeriodicReportISDA.HoldStockMarketValueAtEndOfThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.HoldStockMarketValueAtEndOfLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 3;
model.PeriodicReportISDA.HoldMarketValueOfBondsAtTheEndOfThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.HoldMarketValueOfBondsAtTheEndOfLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 4;
model.PeriodicReportISDA.OwnedAssetManagementProductsAtTheEndOfThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.OwnedAssetManagementProductsAtTheEndOfLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 5;
model.PeriodicReportISDA.OwnedBankFinanceAtTheEndOfThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.OwnedBankFinanceAtTheEndOfLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 6;
model.PeriodicReportISDA.HoldTrustProductAtTheEndOfThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.HoldTrustProductAtTheEndOfLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 7;
model.PeriodicReportISDA.InsuranceProductsAreHeldAtTheEndOfThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.InsuranceProductsAreHeldAtTheEndOfLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
row = startRow + 8;
model.PeriodicReportISDA.HoldOtherProductsAtTheEndOfThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.HoldOtherProductsAtTheEndOfLastMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
}
/// <summary>
/// 获取本月了结交易盈亏情况统计
/// </summary>
/// <param name="model"></param>
/// <param name="dt"></param>
/// <param name="startRow"></param>
/// <param name="startCol"></param>
private void GetSettleTradeWinlossInfo(BodyModel model, DataTable dt, int startRow, int startCol)
{
model.PeriodicReportISDA.SettledSwapItemsAtThisMonth = GetDataSetValue(dt, startRow + 0, startCol).ToString();
model.PeriodicReportISDA.SettledSwapTransactionInvolvesNotionalPrincipalAtThisMonth = GetDataSetValue(dt, startRow + 1, startCol).ToString();
model.PeriodicReportISDA.SwapIncomeCashFlow = GetDataSetValue(dt, startRow + 2, startCol).ToString();
model.PeriodicReportISDA.SwapExpensesCashFlow = GetDataSetValue(dt, startRow + 3, startCol).ToString();
model.PeriodicReportISDA.CashFlowCorrespondingToNetIncomeOnSwapMargin = GetDataSetValue(dt, startRow + 4, startCol).ToString();
model.PeriodicReportISDA.SwapHedgeCost = GetDataSetValue(dt, startRow + 5, startCol).ToString();
model.PeriodicReportISDA.SettledOptionItemsAtThisMonth = GetDataSetValue(dt, startRow + 6, startCol).ToString();
model.PeriodicReportISDA.SettledOptionTransactionInvolvesNotionalPrincipalAtThisMonth = GetDataSetValue(dt, startRow + 7, startCol).ToString();
model.PeriodicReportISDA.OptionPremiumIncome = GetDataSetValue(dt, startRow + 8, startCol).ToString();
model.PeriodicReportISDA.OptionHedgeCost = GetDataSetValue(dt, startRow + 9, startCol).ToString();
}
/// <summary>
/// 获取本月会计损益统计
/// </summary>
/// <param name="model"></param>
/// <param name="dt"></param>
/// <param name="startRow"></param>
/// <param name="startCol"></param>
private void GetWinlossInfo(BodyModel model, DataTable dt, int startRow, int startCol)
{
var row = startRow + 0;
model.PeriodicReportISDA.BalanceOfSwapRealizedGainsAndLossesAtThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.BalanceOfOptionRealizedGainsAndLossesAtThisMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
model.PeriodicReportISDA.BalanceOfSwapRealizedGainsAndLossesAtThisYear = GetDataSetValue(dt, row, startCol + 2).ToString();
model.PeriodicReportISDA.BalanceOfOptionRealizedGainsAndLossesAtThisYear = GetDataSetValue(dt, row, startCol + 3).ToString();
row = startRow + 1;
model.PeriodicReportISDA.BalanceOfSwapChangedGainsAndLossesInFairValueAtThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.BalanceOfOptionChangedGainsAndLossesInFairValueAtThisMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
model.PeriodicReportISDA.BalanceOfSwapChangedGainsAndLossesInFairValueAtThisYear = GetDataSetValue(dt, row, startCol + 2).ToString();
model.PeriodicReportISDA.BalanceOfOptionChangedGainsAndLossesInFairValueAtThisYear = GetDataSetValue(dt, row, startCol + 3).ToString();
row = startRow + 2;
model.PeriodicReportISDA.BalanceOfSwapTotalGainsAndLossesAtThisMonth = GetDataSetValue(dt, row, startCol + 0).ToString();
model.PeriodicReportISDA.BalanceOfOptionTotalGainsAndLossesAtThisMonth = GetDataSetValue(dt, row, startCol + 1).ToString();
model.PeriodicReportISDA.BalanceOfSwapTotalGainsAndLossesAtThisYear = GetDataSetValue(dt, row, startCol + 2).ToString();
model.PeriodicReportISDA.BalanceOfOptionTotalGainsAndLossesAtThisYear = GetDataSetValue(dt, row, startCol + 3).ToString();
}
/// <summary>
/// 获取本月新增业务明细
/// </summary>
/// <returns></returns>
private List<ISDAIncreaseBusinessDetailsThisMonthModel> GetIncreaseBusinessDetailsThisMonthTuple()
{
var result = new List<ISDAIncreaseBusinessDetailsThisMonthModel>();
if (_excelDataSource != null && _excelDataSource.Tables.Contains("本月新增业务明细"))
{
var dt = _excelDataSource.Tables["本月新增业务明细"];
for (var i = 1; i < dt.Rows.Count; i++)
{
var colHead = dt.Rows[i][0]?.ToString();
if (string.IsNullOrWhiteSpace(colHead) || colHead.Contains("合计"))
{
//第一列空白说明数据结束了;
break;
}
var model = new ISDAIncreaseBusinessDetailsThisMonthModel
{
NameOfSecuritiesCompany = GetDataSetValue(dt, i, 1).ToString(),
NameOfCounterparty = GetDataSetValue(dt, i, 2).ToString(),
NameOfCounterpartyProduct = GetDataSetValue(dt, i, 3).ToString(),
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).ToString()];
model.NotionalPrincipalAmountLNotionalPrincipalAmount = GetDataSetValue(dt, i, 7).ToString();
model.SNotionalPrincipalAmount = GetDataSetValue(dt, i, 8).ToString();
model.StartDay = GetDataSetValue(dt, i, 9).ToString();
model.DueDate = GetDataSetValue(dt, i, 10).ToString();
model.InvestmentTargetType = ConsReport.UndrlygAssetTypeMap[GetDataSetValue(dt, i, 11).ToString()];
model.UndrlygAssetName = GetDataSetValue(dt, i, 12).ToString();
model.UndrlygAssetCode = GetDataSetValue(dt, i, 13).ToString();
model.OptionObjectSecondClass = ConsReport.SwapUndrlygAssetDtldTypeMap[GetDataSetValue(dt, i, 14).ToString()];
model.SwapObjectSecondClass = ConsReport.SwapUndrlygAssetDtldTypeMap[GetDataSetValue(dt, i, 15).ToString()];
model.NonAnnualOptionFee = GetDataSetValue(dt, i, 16).ToString();
model.OptionType = ConsReport.OptionStructureTypeMap[GetDataSetValue(dt, i, 17).ToString()];
result.Add(model);
}
}
return result;
}
/// <summary>
/// 获取本月末存量业务明细
/// </summary>
/// <returns></returns>
private List<ISDAInventoryBusinessDetailsAtTheEndOfThisMonthModel> GetInventoryBusinessDetailsAtTheEndOfThisMonthTuple()
{
var result = new List<ISDAInventoryBusinessDetailsAtTheEndOfThisMonthModel>();
if (_excelDataSource != null && _excelDataSource.Tables.Contains("本月末存量业务明细"))
{
var dt = _excelDataSource.Tables["本月末存量业务明细"];
for (var i = 1; i < dt.Rows.Count; i++)
{
var colHead = dt.Rows[i][0]?.ToString();
if (string.IsNullOrWhiteSpace(colHead) || colHead.Contains("合计"))
{
//第一列空白说明数据结束了;
break;
}
var model = new ISDAInventoryBusinessDetailsAtTheEndOfThisMonthModel
{
NameOfSecuritiesCompany = GetDataSetValue(dt, i, 1).ToString(),
NameOfCounterparty = GetDataSetValue(dt, i, 2).ToString(),
NameOfCounterpartyProduct = GetDataSetValue(dt, i, 3).ToString(),
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).ToString()];
model.NotionalPrincipalAmountLNotionalPrincipalAmount = GetDataSetValue(dt, i, 7).ToString();
model.SNotionalPrincipalAmount = GetDataSetValue(dt, i, 8).ToString();
model.StartDay = GetDataSetValue(dt, i, 9).ToString();
model.DueDate = GetDataSetValue(dt, i, 10).ToString();
model.InvestmentTargetType = ConsReport.UndrlygAssetTypeMap[GetDataSetValue(dt, i, 11).ToString()];
model.UndrlygAssetName = GetDataSetValue(dt, i, 12).ToString();
model.UndrlygAssetCode = GetDataSetValue(dt, i, 13).ToString();
model.UndrlygAssetTradgPlc = GetDataSetValue(dt, i, 14).ToString();
model.OptionObjectSecondClass = ConsReport.SwapUndrlygAssetDtldTypeMap[GetDataSetValue(dt, i, 15).ToString()];
model.SwapObjectSecondClass = ConsReport.SwapUndrlygAssetDtldTypeMap[GetDataSetValue(dt, i, 16).ToString()];
model.NonAnnualOptionFee = GetDataSetValue(dt, i, 17).ToString();
model.OptionType = ConsReport.OptionStructureTypeMap[GetDataSetValue(dt, i, 18).ToString()];
model.MaitainMarginRation = GetDataSetValue(dt, i, 19).ToString();
model.CorrelationCoefficient = GetDataSetValue(dt, i, 20).ToString();
model.LongPositionContractValue = GetDataSetValue(dt, i, 21).ToString();
model.ShortPositionContractValue = GetDataSetValue(dt, i, 22).ToString();
result.Add(model);
}
}
return result;
}
/// <summary>
/// 获取标的情况与对冲
/// </summary>
/// <returns></returns>
private List<ISDATargetCaseAndHedgeModel> GetTargetCaseAndHedgeTuple()
{
var result = new List<ISDATargetCaseAndHedgeModel>();
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 ISDATargetCaseAndHedgeModel
{
NameOfSecuritiesCompany = GetDataSetValue(dt, i, 1).ToString(),
BusinessType = ConsReport.BusinessTypeMap[GetDataSetValue(dt, i, 2).ToString()],
InvestmentTargetType = ConsReport.HedgeSACUndrlygAssetDtldTypeMap[GetDataSetValue(dt, i, 3).ToString()],
InvestmentTarget = GetDataSetValue(dt, i, 4).ToString(),
UnderlyingCode = GetDataSetValue(dt, i, 5).ToString(),
UndrlygAssetTradgPlc = GetDataSetValue(dt, i, 6).ToString(),
BuyingImpulseVolume = GetDataSetValue(dt, i, 7).ToString(),
SellingImpulseVolume = GetDataSetValue(dt, i, 8).ToString(),
ImpulseVolume = GetDataSetValue(dt, i, 9).ToString(),
PositionAtTheEndOfThisMonth = GetDataSetValue(dt, i, 10).ToString(),
TheNumberOfPositionsHeldAtTheEndOfThisMonth = GetDataSetValue(dt, i, 11).ToString(),
AveragePriceAtTheEndOfTheMonth = GetDataSetValue(dt, i, 12).ToString()
};
result.Add(model);
}
}
return result;
}
protected override List<SacInfo> CheckBodyValue(BodyModel model, out bool checkStatus)
{
var result = new List<SacInfo>();
if (model?.PeriodicReportISDA != null)
{
var listRoot = new List<SacInfo>();
var helper = new Common.CheckHelper<PeriodicReportISDAModel>();
var detailHelper = new Common.CheckHelper<ISDAIncreaseBusinessDetailsThisMonthModel>();
var detail2Helper = new Common.CheckHelper<ISDAInventoryBusinessDetailsAtTheEndOfThisMonthModel>();
var hedgeHelper = new Common.CheckHelper<ISDATargetCaseAndHedgeModel>();
helper.ExecuteCheck(model.PeriodicReportISDA, (name, value, msg) =>
{
listRoot.Add(new SacInfo(name, value, msg));
});
if (model.PeriodicReportISDA.IncreaseBusinessDetailsThisMonthTuple != null)
{
for (var i = 0; i < model.PeriodicReportISDA.IncreaseBusinessDetailsThisMonthTuple.Count; i++)
{
var listItem = new List<SacInfo>();
var item = model.PeriodicReportISDA.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.PeriodicReportISDA.InventoryBusinessDetailsAtTheEndOfThisMonthTuple != null)
{
for (var i = 0; i < model.PeriodicReportISDA.InventoryBusinessDetailsAtTheEndOfThisMonthTuple.Count; i++)
{
var listItem = new List<SacInfo>();
var item = model.PeriodicReportISDA.InventoryBusinessDetailsAtTheEndOfThisMonthTuple[i];
detail2Helper.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.PeriodicReportISDA.TargetCaseAndHedgeTuple != null)
{
for (var i = 0; i < model.PeriodicReportISDA.TargetCaseAndHedgeTuple.Count; i++)
{
var listItem = new List<SacInfo>();
var item = model.PeriodicReportISDA.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("PeriodicReportISDA")
{
SubMaps = new List<SacInfo>(listRoot)
};
result.Add(errMsg);
}
}
checkStatus = result.Count > 0;
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;
}
}
}