找回证券业报送的逻辑,仅支持Excel模板报送
This commit is contained in:
+91
-72
@@ -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]);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user