From dd78a664957a7bd0f203785503d9b0047a5eb3b0 Mon Sep 17 00:00:00 2001 From: yexuzhong <120511780@qq.com> Date: Wed, 25 Mar 2026 19:26:08 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=92=E6=8D=A2=E4=BA=A4=E6=98=93=E7=A1=AE?= =?UTF-8?q?=E8=AE=A4=E4=B9=A6=E6=97=A0=E6=B3=95=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../swap_01.docx} | Bin .../dma_01.docx} | Bin .../nodma_01.xlsx} | Bin .../settle_01.docx} | Bin .../TradeConfirmationGenerator.cs | 2 +- .../TradeSettleBillGenerator.cs | 4 +- .../TradeUnwindReportGenerator.cs | 2 +- .../YLErp.Plugins.ZheShang.csproj | 10 +- .../TradeContractGenerateService.cs | 116 +++++++++--------- YLErpWeb/appsettings.dev.json | 2 +- 10 files changed, 67 insertions(+), 69 deletions(-) rename Plugins/YLErp.Plugins.ZheShang/App_Docs/{交易确认书/证券利率债收益互换合约交易确认书模版.docx => contract_template/swap_01.docx} (100%) rename Plugins/YLErp.Plugins.ZheShang/App_Docs/{结算单/DMA结算单.docx => settlement_template/dma_01.docx} (100%) rename Plugins/YLErp.Plugins.ZheShang/App_Docs/{结算单/非DMA结算单.xlsx => settlement_template/nodma_01.xlsx} (100%) rename Plugins/YLErp.Plugins.ZheShang/App_Docs/{结算单/场外衍生品结算确认书.docx => settlement_template/settle_01.docx} (100%) diff --git a/Plugins/YLErp.Plugins.ZheShang/App_Docs/交易确认书/证券利率债收益互换合约交易确认书模版.docx b/Plugins/YLErp.Plugins.ZheShang/App_Docs/contract_template/swap_01.docx similarity index 100% rename from Plugins/YLErp.Plugins.ZheShang/App_Docs/交易确认书/证券利率债收益互换合约交易确认书模版.docx rename to Plugins/YLErp.Plugins.ZheShang/App_Docs/contract_template/swap_01.docx diff --git a/Plugins/YLErp.Plugins.ZheShang/App_Docs/结算单/DMA结算单.docx b/Plugins/YLErp.Plugins.ZheShang/App_Docs/settlement_template/dma_01.docx similarity index 100% rename from Plugins/YLErp.Plugins.ZheShang/App_Docs/结算单/DMA结算单.docx rename to Plugins/YLErp.Plugins.ZheShang/App_Docs/settlement_template/dma_01.docx diff --git a/Plugins/YLErp.Plugins.ZheShang/App_Docs/结算单/非DMA结算单.xlsx b/Plugins/YLErp.Plugins.ZheShang/App_Docs/settlement_template/nodma_01.xlsx similarity index 100% rename from Plugins/YLErp.Plugins.ZheShang/App_Docs/结算单/非DMA结算单.xlsx rename to Plugins/YLErp.Plugins.ZheShang/App_Docs/settlement_template/nodma_01.xlsx diff --git a/Plugins/YLErp.Plugins.ZheShang/App_Docs/结算单/场外衍生品结算确认书.docx b/Plugins/YLErp.Plugins.ZheShang/App_Docs/settlement_template/settle_01.docx similarity index 100% rename from Plugins/YLErp.Plugins.ZheShang/App_Docs/结算单/场外衍生品结算确认书.docx rename to Plugins/YLErp.Plugins.ZheShang/App_Docs/settlement_template/settle_01.docx diff --git a/Plugins/YLErp.Plugins.ZheShang/DocumentGenerator/TradeConfirmationGenerator.cs b/Plugins/YLErp.Plugins.ZheShang/DocumentGenerator/TradeConfirmationGenerator.cs index a64d32ed..6294357b 100644 --- a/Plugins/YLErp.Plugins.ZheShang/DocumentGenerator/TradeConfirmationGenerator.cs +++ b/Plugins/YLErp.Plugins.ZheShang/DocumentGenerator/TradeConfirmationGenerator.cs @@ -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 diff --git a/Plugins/YLErp.Plugins.ZheShang/DocumentGenerator/TradeSettleBillGenerator.cs b/Plugins/YLErp.Plugins.ZheShang/DocumentGenerator/TradeSettleBillGenerator.cs index 3c775432..f4e2912e 100644 --- a/Plugins/YLErp.Plugins.ZheShang/DocumentGenerator/TradeSettleBillGenerator.cs +++ b/Plugins/YLErp.Plugins.ZheShang/DocumentGenerator/TradeSettleBillGenerator.cs @@ -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; } diff --git a/Plugins/YLErp.Plugins.ZheShang/DocumentGenerator/TradeUnwindReportGenerator.cs b/Plugins/YLErp.Plugins.ZheShang/DocumentGenerator/TradeUnwindReportGenerator.cs index d84d0f87..c69ad57b 100644 --- a/Plugins/YLErp.Plugins.ZheShang/DocumentGenerator/TradeUnwindReportGenerator.cs +++ b/Plugins/YLErp.Plugins.ZheShang/DocumentGenerator/TradeUnwindReportGenerator.cs @@ -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; } diff --git a/Plugins/YLErp.Plugins.ZheShang/YLErp.Plugins.ZheShang.csproj b/Plugins/YLErp.Plugins.ZheShang/YLErp.Plugins.ZheShang.csproj index 26d1dad1..ccd9c2fe 100644 --- a/Plugins/YLErp.Plugins.ZheShang/YLErp.Plugins.ZheShang.csproj +++ b/Plugins/YLErp.Plugins.ZheShang/YLErp.Plugins.ZheShang.csproj @@ -22,19 +22,19 @@ PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest - + PreserveNewest diff --git a/YLErpDAL/Modules/TradeModule/DealModule/TradeContractGenerateService.cs b/YLErpDAL/Modules/TradeModule/DealModule/TradeContractGenerateService.cs index 23797147..c7300ce9 100644 --- a/YLErpDAL/Modules/TradeModule/DealModule/TradeContractGenerateService.cs +++ b/YLErpDAL/Modules/TradeModule/DealModule/TradeContractGenerateService.cs @@ -205,67 +205,65 @@ namespace YLErp.Modules.TradeModule.DealModule List results = new List(); List error = new List(); List file = new List(); - 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(); - files = new List(); - 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(); - files = new List(); - 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(); + files = new List(); + 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(); + files = new List(); + 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()}"); diff --git a/YLErpWeb/appsettings.dev.json b/YLErpWeb/appsettings.dev.json index 6cdb6c81..25a9e956 100644 --- a/YLErpWeb/appsettings.dev.json +++ b/YLErpWeb/appsettings.dev.json @@ -15,7 +15,7 @@ "AppSettings": { "VirtualPathRoot": "", "UseRightAligned": "", - "PluginFolder": "" + "PluginFolder": "D:\\shenzhengpoc\\zszq-trs\\Plugins\\build\\ZheShang\\Debug\\net6.0\\" }, "LibreOffice": { "ExePath": "",