互换交易确认书无法生成

This commit is contained in:
yexuzhong
2026-03-25 19:26:08 +08:00
parent 1405fc4feb
commit dd78a66495
10 changed files with 67 additions and 69 deletions
@@ -49,7 +49,7 @@ namespace YLErp.Plugins.ShanXi.DocumentGenerator
//}
//else
//{
templatePath = MosPathHelper.Combine(GlobalConfig.PluginFolder, "App_Docs\\交易确认书\\证券利率债收益互换合约交易确认书模版.docx");
templatePath = MosPathHelper.Combine(GlobalConfig.PluginFolder, "App_Docs\\contract_template\\swap_01.docx");
//}
}
else
@@ -186,10 +186,10 @@ namespace YLErp.Plugins.ShanXi.DocumentGenerator
var templatePath =string.Empty;
if (trades.Any(s => s.StructureType == "多空组合"|| s.StructureType == "定义文件型债券收益互换"))
{
templatePath = MosPathHelper.Combine(GlobalConfig.PluginFolder, "App_Docs\\结算单\\DMA结算单.docx");
templatePath = MosPathHelper.Combine(GlobalConfig.PluginFolder, "App_Docs\\settlement_template\\dma_01.docx");
return templatePath;
}
templatePath = MosPathHelper.Combine(GlobalConfig.PluginFolder, "App_Docs\\结算单\\非DMA结算单.xlsx");
templatePath = MosPathHelper.Combine(GlobalConfig.PluginFolder, "App_Docs\\settlement_template\\nodma_01.xlsx");
return templatePath;
}
@@ -105,7 +105,7 @@ namespace YLErp.Plugins.ShanXi.DocumentGenerator
protected override string GetTemplateFilePath()
{
var templatePath = "";
templatePath = Path.Combine(GlobalConfig.PluginFolder, "App_Docs\\结算单\\场外衍生品结算确认书.docx");
templatePath = Path.Combine(GlobalConfig.PluginFolder, "App_Docs\\settlement_template\\settle_01.docx");
return templatePath;
}
@@ -22,19 +22,19 @@
<None Update="App_Docs\交易确认书\收益互换交易确认书(DMA)模板.docx">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="App_Docs\交易确认书\证券利率债收益互换合约交易确认书模版.docx">
<None Update="App_Docs\contract_template\swap_01.docx">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="App_Docs\交易确认书\证券利率债收益互换合约交易确认书模版.docx">
<None Update="App_Docs\contract_template\swap_01.docx">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="App_Docs\结算单\DMA结算单.docx">
<None Update="App_Docs\settlement_template\dma_01.docx">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="App_Docs\结算单\场外衍生品结算确认书.docx">
<None Update="App_Docs\settlement_template\settle_01.docx">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Update="App_Docs\结算单\非DMA结算单.xlsx">
<None Update="App_Docs\settlement_template\nodma_01.xlsx">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
@@ -205,67 +205,65 @@ namespace YLErp.Modules.TradeModule.DealModule
List<TradeDocGenerateResult> results = new List<TradeDocGenerateResult>();
List<string> error = new List<string>();
List<string> file = new List<string>();
if (PS.Config.Company == CompanyEnum.)
logger.Info("[GJGenerateConfirmBook] 生成确认书流程");
if (tradeIds == null || !tradeIds.Any())
{
logger.Info("[GJGenerateConfirmBook] 生成确认书流程");
if (tradeIds == null || !tradeIds.Any())
{
logger.Info("[GJGenerateConfirmBook] tradeIds 为空,直接返回");
errors = new List<string>();
files = new List<string>();
return true;
}
var trades = DbContext.trade.Where(x => tradeIds.Contains(x.id)).AsNoTracking().ToList();
logger.Info($"[GJGenerateConfirmBook] 查询到交易记录数: {trades.Count}");
if (!trades.Any())
{
logger.Info("[GJGenerateConfirmBook] 未找到交易记录,直接返回");
errors = new List<string>();
files = new List<string>();
return true;
}
var clientIds = trades.Select(x => x.ClientId).Distinct().ToList();
logger.Info($"[GJGenerateConfirmBook] 客户ID数: {clientIds.Count}");
var allTrades = DbContext.trade.Where(x => clientIds.Contains(x.ClientId) && x.ValidState != ConsGlobal.InValid);
if (startDate.HasValue)
{
allTrades = allTrades.Where(x => x.TradeDate >= startDate);
}
if (endDate.HasValue)
{
allTrades = allTrades.Where(x => x.TradeDate <= endDate);
}
var Ids = allTrades.Select(o => o.id).Distinct().ToArray();
var swapPositions = DbContext.swap_position.Where(s => Ids.Contains(s.SwapTradeId) && s.IsInitial && s.PositionType > 0 && !s.Invalid)
.Distinct().ToList();
logger.Info($"[GJGenerateConfirmBook] 查询到持仓记录数: {swapPositions.Count}");
var allTradeList = allTrades.AsNoTracking().ToList();
foreach (var item in allTradeList)
{
item.swap_positions.Add(swapPositions.FirstOrDefault(o => o.SwapTradeId == item.id));
}
allTradeList = allTradeList.Where(x => x.swap_positions.Any()).ToList();
logger.Info($"[GJGenerateConfirmBook] 过滤后有持仓的交易数: {allTradeList.Count}");
// 按照客户ID、交易日期、多空头进行分组
var group = allTradeList.GroupBy(O => new { O.ClientId, O.StartDate, O.swap_positions.FirstOrDefault()?.PositionType })
.ToDictionary(K => K.Key, V => V.Select(O => O.id).ToList());
logger.Info($"[GJGenerateConfirmBook] 分组数: {group.Count}");
foreach (var item in group)
{
var tradeCount = item.Value.Distinct().Count();
logger.Info($"[GJGenerateConfirmBook] 处理分组 - ClientId: {item.Key.ClientId}, StartDate: {item.Key.StartDate}, PositionType: {item.Key.PositionType}, 交易数: {tradeCount}");
groupGenerateHandle(item.Value.Distinct().ToList(), docType, startDate, endDate, results, error, file);
}
logger.Info("[GJGenerateConfirmBook] tradeIds 为空,直接返回");
errors = new List<string>();
files = new List<string>();
return true;
}
var trades = DbContext.trade.Where(x => tradeIds.Contains(x.id)).AsNoTracking().ToList();
logger.Info($"[GJGenerateConfirmBook] 查询到交易记录数: {trades.Count}");
if (!trades.Any())
{
logger.Info("[GJGenerateConfirmBook] 未找到交易记录,直接返回");
errors = new List<string>();
files = new List<string>();
return true;
}
var clientIds = trades.Select(x => x.ClientId).Distinct().ToList();
logger.Info($"[GJGenerateConfirmBook] 客户ID数: {clientIds.Count}");
var allTrades = DbContext.trade.Where(x => clientIds.Contains(x.ClientId)&&x.TradeType.Equals("收益互换") && x.ValidState != ConsGlobal.InValid);
if (startDate.HasValue)
{
allTrades = allTrades.Where(x => x.TradeDate >= startDate);
}
if (endDate.HasValue)
{
allTrades = allTrades.Where(x => x.TradeDate <= endDate);
}
var Ids = allTrades.Select(o => o.id).Distinct().ToArray();
var swapPositions = DbContext.swap_position.Where(s => Ids.Contains(s.SwapTradeId) && s.IsInitial && s.PositionType > 0 && !s.Invalid)
.Distinct().ToList();
logger.Info($"[GJGenerateConfirmBook] 查询到持仓记录数: {swapPositions.Count}");
var allTradeList = allTrades.AsNoTracking().ToList();
foreach (var item in allTradeList)
{
item.swap_positions.Add(swapPositions.FirstOrDefault(o => o.SwapTradeId == item.id));
}
allTradeList = allTradeList.Where(x => x.swap_positions.Any()).ToList();
logger.Info($"[GJGenerateConfirmBook] 过滤后有持仓的交易数: {allTradeList.Count}");
// 按照客户ID、交易日期、多空头进行分组
var group = allTradeList.GroupBy(O => new { O.ClientId, O.StartDate, O.swap_positions.FirstOrDefault()?.PositionType })
.ToDictionary(K => K.Key, V => V.Select(O => O.id).ToList());
logger.Info($"[GJGenerateConfirmBook] 分组数: {group.Count}");
foreach (var item in group)
{
var tradeCount = item.Value.Distinct().Count();
logger.Info($"[GJGenerateConfirmBook] 处理分组 - ClientId: {item.Key.ClientId}, StartDate: {item.Key.StartDate}, PositionType: {item.Key.PositionType}, 交易数: {tradeCount}");
groupGenerateHandle(item.Value.Distinct().ToList(), docType, startDate, endDate, results, error, file);
}
errors = results.Where(n => !string.IsNullOrWhiteSpace(n.ErrorMessage)).Select(n => n.ErrorMessage).ToList();
files = results.Where(n => !string.IsNullOrWhiteSpace(n.OutputFilePath)).Select(n => n.OutputFilePath).ToList();
logger.Info($"[GJGenerateConfirmBook] 完成生成确认书 - 错误数: {errors.Count()}, 文件数: {files.Count()}");
+1 -1
View File
@@ -15,7 +15,7 @@
"AppSettings": {
"VirtualPathRoot": "",
"UseRightAligned": "",
"PluginFolder": ""
"PluginFolder": "D:\\shenzhengpoc\\zszq-trs\\Plugins\\build\\ZheShang\\Debug\\net6.0\\"
},
"LibreOffice": {
"ExePath": "",