找回证券业报送的逻辑,仅支持Excel模板报送

This commit is contained in:
嬴政 时
2025-05-14 20:00:04 +08:00
parent 0c9cd64038
commit fe2ff3bbcf
52 changed files with 10829 additions and 7124 deletions
@@ -20,19 +20,16 @@ namespace YLErp.Modules.SuperviseReportModule.SAC.Service
protected override DataFlagsEnum BusiDataType => DataFlagsEnum.A1013;
private List<OptFlagsEnum> _validOperationType = null;
private List<OptFlagsEnum>? _validOperationType = null;
public override List<OptFlagsEnum> ValidOperationType
{
get
{
if (_validOperationType == null)
{
_validOperationType = new List<OptFlagsEnum>() {
_validOperationType ??= new List<OptFlagsEnum>() {
OptFlagsEnum.A,
OptFlagsEnum.U,
OptFlagsEnum.D,
};
}
return _validOperationType;
}
}
@@ -40,7 +37,8 @@ namespace YLErp.Modules.SuperviseReportModule.SAC.Service
DateTime minDate = DateTime.MinValue;
DateTime maxDate = DateTime.MinValue;
protected override SuperviseReportTypeEnum ReportType => SuperviseReportTypeEnum.SAC_PeriodicReportISDA;
List<SACReportNotes> noteList = new List<SACReportNotes>();
readonly List<SACReportNotes> noteList = new();
public override bool CheckRequestParamer(ReportInfo req, out string errMsg)
{
@@ -59,7 +57,7 @@ namespace YLErp.Modules.SuperviseReportModule.SAC.Service
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);
SACReportNotes note = base.GetReportNotes(ReportType, formatInfoTag(req.ISDAReportDate.Value.ToString("yyyy-MM"))).FirstOrDefault();
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定期报告记录,请重新选择";
@@ -86,16 +84,17 @@ namespace YLErp.Modules.SuperviseReportModule.SAC.Service
{
fileList = new List<string>();
noData = true;
BodyModel model = new BodyModel();
var cacheKey = $"{BusiDataType}";
var model = new BodyModel();
var cacheValue = formatInfoTag(_reqInfo.ISDAReportDate.Value.ToString("yyyy-MM"));
if (ReportStatus.CheckCacheInfo(cacheKey, cacheValue))
if (ReportStatus.CheckCacheInfo(CacheKey, cacheValue))
{
return model;
}
model.PeriodicReportISDA = new PeriodicReportISDAModel();
model.PeriodicReportISDA.OperationType = _operationType;
SACReportNotes note = base.GetReportNotes(ReportType, cacheValue).FirstOrDefault();
model.PeriodicReportISDA = new PeriodicReportISDAModel
{
OperationType = _operationType
};
var note = base.GetReportNotes(ReportType, cacheValue).FirstOrDefault();
if (note == null && _operationType == OptFlagsEnum.A)
{
note = new SACReportNotes()
@@ -128,7 +127,7 @@ namespace YLErp.Modules.SuperviseReportModule.SAC.Service
}
if (_excelDataSource != null)
{
DataTable dt = _excelDataSource.Tables["业务统计"];
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;
@@ -151,7 +150,7 @@ namespace YLErp.Modules.SuperviseReportModule.SAC.Service
model.PeriodicReportISDA.ExceID = base.formatExceID();
}
ReportStatus.AddCacheInfo(cacheKey, cacheValue);
ReportStatus.AddCacheInfo(CacheKey, cacheValue);
noData = string.IsNullOrWhiteSpace(model.PeriodicReportISDA?.MainAgreementLastMonthAccumulatedThisYear);
if (!noData)
{
@@ -486,24 +485,26 @@ namespace YLErp.Modules.SuperviseReportModule.SAC.Service
/// <returns></returns>
private List<ISDAIncreaseBusinessDetailsThisMonthModel> GetIncreaseBusinessDetailsThisMonthTuple()
{
List<ISDAIncreaseBusinessDetailsThisMonthModel> result = new List<ISDAIncreaseBusinessDetailsThisMonthModel>();
var result = new List<ISDAIncreaseBusinessDetailsThisMonthModel>();
if (_excelDataSource != null && _excelDataSource.Tables.Contains("本月新增业务明细"))
{
DataTable dt = _excelDataSource.Tables["本月新增业务明细"];
for (int i = 1; i < dt.Rows.Count; i++)
var dt = _excelDataSource.Tables["本月新增业务明细"];
for (var i = 1; i < dt.Rows.Count; i++)
{
string colHead = dt.Rows[i][0]?.ToString();
var colHead = dt.Rows[i][0]?.ToString();
if (string.IsNullOrWhiteSpace(colHead) || colHead.Contains("合计"))
{
//第一列空白说明数据结束了;
break;
}
ISDAIncreaseBusinessDetailsThisMonthModel model = new ISDAIncreaseBusinessDetailsThisMonthModel();
model.NameOfSecuritiesCompany = GetDataSetValue(dt, i, 1).ToString();
model.NameOfCounterparty = GetDataSetValue(dt, i, 2).ToString();
model.NameOfCounterpartyProduct = GetDataSetValue(dt, i, 3).ToString();
model.TradeConfirmationNumber = GetDataSetValue(dt, i, 4);
model.TransactionConfirmationNumber = GetDataSetValue(dt, i, 5);
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);
@@ -516,7 +517,7 @@ namespace YLErp.Modules.SuperviseReportModule.SAC.Service
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.UndrlygAssetDtldTypeMap[GetDataSetValue(dt, i, 14).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()];
@@ -532,24 +533,26 @@ namespace YLErp.Modules.SuperviseReportModule.SAC.Service
/// <returns></returns>
private List<ISDAInventoryBusinessDetailsAtTheEndOfThisMonthModel> GetInventoryBusinessDetailsAtTheEndOfThisMonthTuple()
{
List<ISDAInventoryBusinessDetailsAtTheEndOfThisMonthModel> result = new List<ISDAInventoryBusinessDetailsAtTheEndOfThisMonthModel>();
var result = new List<ISDAInventoryBusinessDetailsAtTheEndOfThisMonthModel>();
if (_excelDataSource != null && _excelDataSource.Tables.Contains("本月末存量业务明细"))
{
DataTable dt = _excelDataSource.Tables["本月末存量业务明细"];
for (int i = 1; i < dt.Rows.Count; i++)
var dt = _excelDataSource.Tables["本月末存量业务明细"];
for (var i = 1; i < dt.Rows.Count; i++)
{
string colHead = dt.Rows[i][0]?.ToString();
var colHead = dt.Rows[i][0]?.ToString();
if (string.IsNullOrWhiteSpace(colHead) || colHead.Contains("合计"))
{
//第一列空白说明数据结束了;
break;
}
ISDAInventoryBusinessDetailsAtTheEndOfThisMonthModel model = new ISDAInventoryBusinessDetailsAtTheEndOfThisMonthModel();
model.NameOfSecuritiesCompany = GetDataSetValue(dt, i, 1).ToString();
model.NameOfCounterparty = GetDataSetValue(dt, i, 2).ToString();
model.NameOfCounterpartyProduct = GetDataSetValue(dt, i, 3).ToString();
model.TradeConfirmationNumber = GetDataSetValue(dt, i, 4);
model.TransactionConfirmationNumber = GetDataSetValue(dt, i, 5);
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);
@@ -563,7 +566,7 @@ namespace YLErp.Modules.SuperviseReportModule.SAC.Service
model.UndrlygAssetName = GetDataSetValue(dt, i, 12).ToString();
model.UndrlygAssetCode = GetDataSetValue(dt, i, 13).ToString();
model.UndrlygAssetTradgPlc = GetDataSetValue(dt, i, 14).ToString();
model.OptionObjectSecondClass = ConsReport.UndrlygAssetDtldTypeMap[GetDataSetValue(dt, i, 15).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()];
@@ -583,30 +586,32 @@ namespace YLErp.Modules.SuperviseReportModule.SAC.Service
/// <returns></returns>
private List<ISDATargetCaseAndHedgeModel> GetTargetCaseAndHedgeTuple()
{
List<ISDATargetCaseAndHedgeModel> result = new List<ISDATargetCaseAndHedgeModel>();
var result = new List<ISDATargetCaseAndHedgeModel>();
if (_excelDataSource != null && _excelDataSource.Tables.Contains("标的情况与对冲"))
{
DataTable dt = _excelDataSource.Tables["标的情况与对冲"];
for (int i = 2; i < dt.Rows.Count; i++)
var dt = _excelDataSource.Tables["标的情况与对冲"];
for (var i = 1; i < dt.Rows.Count; i++)
{
if (string.IsNullOrWhiteSpace(dt.Rows[i][0]?.ToString()))
{
//第一列空白说明数据结束了;
break;
}
ISDATargetCaseAndHedgeModel model = new ISDATargetCaseAndHedgeModel();
model.NameOfSecuritiesCompany = GetDataSetValue(dt, i, 1).ToString();
model.BusinessType = ConsReport.BusinessTypeMap[GetDataSetValue(dt, i, 2).ToString()];
model.InvestmentTargetType = ConsReport.HedgeSACUndrlygAssetDtldTypeMap[GetDataSetValue(dt, i, 3).ToString()];
model.InvestmentTarget = GetDataSetValue(dt, i, 4).ToString();
model.UnderlyingCode = GetDataSetValue(dt, i, 5).ToString();
model.UndrlygAssetTradgPlc = GetDataSetValue(dt, i, 6).ToString();
model.BuyingImpulseVolume = GetDataSetValue(dt, i, 7).ToString();
model.SellingImpulseVolume = GetDataSetValue(dt, i, 8).ToString();
model.ImpulseVolume = GetDataSetValue(dt, i, 9).ToString();
model.PositionAtTheEndOfThisMonth = GetDataSetValue(dt, i, 10).ToString();
model.TheNumberOfPositionsHeldAtTheEndOfThisMonth = GetDataSetValue(dt, i, 11).ToString();
model.AveragePriceAtTheEndOfTheMonth = GetDataSetValue(dt, i, 12).ToString();
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);
}
@@ -616,21 +621,21 @@ namespace YLErp.Modules.SuperviseReportModule.SAC.Service
protected override List<SacInfo> CheckBodyValue(BodyModel model, out bool checkStatus)
{
List<SacInfo> result = new List<SacInfo>();
var result = new List<SacInfo>();
if (model?.PeriodicReportISDA != null)
{
List<SacInfo> listRoot = new List<SacInfo>();
CheckHelper<PeriodicReportISDAModel> helper = new Common.CheckHelper<PeriodicReportISDAModel>();
CheckHelper<ISDAIncreaseBusinessDetailsThisMonthModel> detailHelper = new Common.CheckHelper<ISDAIncreaseBusinessDetailsThisMonthModel>();
CheckHelper<ISDAInventoryBusinessDetailsAtTheEndOfThisMonthModel> detail2Helper = new Common.CheckHelper<ISDAInventoryBusinessDetailsAtTheEndOfThisMonthModel>();
CheckHelper<ISDATargetCaseAndHedgeModel> hedgeHelper = new Common.CheckHelper<ISDATargetCaseAndHedgeModel>();
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 (int i = 0; i < model.PeriodicReportISDA.IncreaseBusinessDetailsThisMonthTuple.Count; i++)
for (var i = 0; i < model.PeriodicReportISDA.IncreaseBusinessDetailsThisMonthTuple.Count; i++)
{
var listItem = new List<SacInfo>();
var item = model.PeriodicReportISDA.IncreaseBusinessDetailsThisMonthTuple[i];
@@ -640,15 +645,17 @@ namespace YLErp.Modules.SuperviseReportModule.SAC.Service
});
if (listItem.Count > 0)
{
var temp = new SacInfo("IncreaseBusinessDetailsThisMonthTuple", i);
temp.SubMaps = new List<SacInfo>(listItem);
var temp = new SacInfo("IncreaseBusinessDetailsThisMonthTuple", i)
{
SubMaps = new List<SacInfo>(listItem)
};
listRoot.Add(temp);
}
}
}
if (model.PeriodicReportISDA.InventoryBusinessDetailsAtTheEndOfThisMonthTuple != null)
{
for (int i = 0; i < model.PeriodicReportISDA.InventoryBusinessDetailsAtTheEndOfThisMonthTuple.Count; i++)
for (var i = 0; i < model.PeriodicReportISDA.InventoryBusinessDetailsAtTheEndOfThisMonthTuple.Count; i++)
{
var listItem = new List<SacInfo>();
var item = model.PeriodicReportISDA.InventoryBusinessDetailsAtTheEndOfThisMonthTuple[i];
@@ -658,15 +665,17 @@ namespace YLErp.Modules.SuperviseReportModule.SAC.Service
});
if (listItem.Count > 0)
{
var temp = new SacInfo("InventoryBusinessDetailsAtTheEndOfThisMonthTuple", i);
temp.SubMaps = new List<SacInfo>(listItem);
var temp = new SacInfo("InventoryBusinessDetailsAtTheEndOfThisMonthTuple", i)
{
SubMaps = new List<SacInfo>(listItem)
};
listRoot.Add(temp);
}
}
}
if (model.PeriodicReportISDA.TargetCaseAndHedgeTuple != null)
{
for (int i = 0; i < model.PeriodicReportISDA.TargetCaseAndHedgeTuple.Count; i++)
for (var i = 0; i < model.PeriodicReportISDA.TargetCaseAndHedgeTuple.Count; i++)
{
var listItem = new List<SacInfo>();
var item = model.PeriodicReportISDA.TargetCaseAndHedgeTuple[i];
@@ -676,16 +685,20 @@ namespace YLErp.Modules.SuperviseReportModule.SAC.Service
});
if (listItem.Count > 0)
{
var temp = new SacInfo("TargetCaseAndHedgeTuple", i);
temp.SubMaps = new List<SacInfo>(listItem);
var temp = new SacInfo("TargetCaseAndHedgeTuple", i)
{
SubMaps = new List<SacInfo>(listItem)
};
listRoot.Add(temp);
}
}
}
if (listRoot.Count > 0)
{
var errMsg = new SacInfo("PeriodicReportISDA");
errMsg.SubMaps = new List<SacInfo>(listRoot);
var errMsg = new SacInfo("PeriodicReportISDA")
{
SubMaps = new List<SacInfo>(listRoot)
};
result.Add(errMsg);
}
}
@@ -695,7 +708,7 @@ namespace YLErp.Modules.SuperviseReportModule.SAC.Service
private string formatInfoTag(string tag, bool suffixType = false)
{
string result = $"{BusiDataType}_{tag}_";
var result = $"{BusiDataType}_{tag}_";
if (suffixType)
{
result = $"{result}{_operationType}";
@@ -703,10 +716,16 @@ namespace YLErp.Modules.SuperviseReportModule.SAC.Service
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 (int i = 0; i < noteList.Count; i++)
for (var i = 0; i < noteList.Count; i++)
{
base.SaveReportNotes(noteList[i]);
}