From 8371f1999f4a2699d9829f4693338577eb2ecc2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=94=A6=E9=BA=9F=20=E7=8E=8B?= Date: Fri, 22 May 2026 10:49:25 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20=5F=5FinitJqGrid=20?= =?UTF-8?q?=E4=B8=AD=20TradeStatus=20=E7=9A=84=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBook.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBook.js b/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBook.js index e0acfadb..0147abc8 100644 --- a/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBook.js +++ b/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBook.js @@ -446,7 +446,7 @@ const colModelGrid = (new function () { function __initJqGrid() { var PostData = { - TradeStatus: "", + TradeStatus: page.reqTradeStatus, ValidState: $("#ValidState").val(), TradeDateStart: $("#DateFromTradeDate").val(), TradeDateEnd: $("#DateToTradeDate").val() From 9a3e0a80fe40472312e96ab9b1c16f98cbae8e62 Mon Sep 17 00:00:00 2001 From: "zheng.zhang" Date: Fri, 22 May 2026 14:02:23 +0800 Subject: [PATCH 2/4] =?UTF-8?q?fix(guolian=20bizlogic):=20=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3=E5=9B=BD=E8=81=94=E4=BA=A4=E6=98=93=E7=BC=96=E5=8F=B7?= =?UTF-8?q?=E5=89=8D=E7=BC=80=E4=B8=BAGLMS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YLErpDAL/CustomizedBizLogic/BizLogicGuoLian.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/YLErpDAL/CustomizedBizLogic/BizLogicGuoLian.cs b/YLErpDAL/CustomizedBizLogic/BizLogicGuoLian.cs index 14301583..2a5fd5ac 100644 --- a/YLErpDAL/CustomizedBizLogic/BizLogicGuoLian.cs +++ b/YLErpDAL/CustomizedBizLogic/BizLogicGuoLian.cs @@ -27,8 +27,8 @@ namespace YLErp.CustomizedBizLogic return DateTime.Now.ToString("yyyyMMddHHmmssfff"); } - // 国联格式:GL-{yyyyMMdd}-{4位序号} - var leftPart = $"GL-{reqModel.trade.TradeDate:yyyyMMdd}-"; + // 国联格式:GLMS-{yyyyMMdd}-{4位序号} + var leftPart = $"GLMS-{reqModel.trade.TradeDate:yyyyMMdd}-"; var fullSize = leftPart.Length + 4; // 获取数据库该用户最大的交易编号记录 From 7a90a55fdef4cd7b30311dd1c632bb7e9f998e31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=94=A6=E9=BA=9F=20=E7=8E=8B?= Date: Fri, 22 May 2026 14:42:03 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=A4=E6=98=93?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4=E4=B9=A6=E7=94=9F=E6=88=90=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E8=BF=87=E6=BB=A4=E5=BE=85=E7=A1=AE=E8=AE=A4=E5=92=8C?= =?UTF-8?q?=E5=AE=A1=E6=89=B9=E4=B8=AD=E7=9A=84=E4=BA=A4=E6=98=93=E7=8A=B6?= =?UTF-8?q?=E6=80=81=EF=BC=8C=E8=B0=83=E6=95=B4=E4=BA=A4=E6=98=93=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E4=B8=8B=E6=8B=89=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TradeContractGenerateService.cs | 23 +++++++++++++++++-- YLErpWeb/Views/TradeConfirmBook/Index.cshtml | 4 ++-- .../Views/TradeConfirmBookOption/Index.cshtml | 4 ++-- .../Scripts/app/trade/tradeConfirmBook.js | 4 +++- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/YLErpDAL/Modules/TradeModule/DealModule/TradeContractGenerateService.cs b/YLErpDAL/Modules/TradeModule/DealModule/TradeContractGenerateService.cs index 82428458..877ef0c3 100644 --- a/YLErpDAL/Modules/TradeModule/DealModule/TradeContractGenerateService.cs +++ b/YLErpDAL/Modules/TradeModule/DealModule/TradeContractGenerateService.cs @@ -217,7 +217,7 @@ namespace YLErp.Modules.TradeModule.DealModule var trades = DbContext.trade.Where(x => tradeIds.Contains(x.id)).AsNoTracking().ToList(); logger.Info($"[GJGenerateConfirmBook] 查询到交易记录数: {trades.Count}"); - + if (!trades.Any()) { logger.Info("[GJGenerateConfirmBook] 未找到交易记录,直接返回"); @@ -225,7 +225,26 @@ namespace YLErp.Modules.TradeModule.DealModule files = new List(); return true; } - + + // 过滤掉待确认和审批中的交易,这些状态不允许生成确认书 + var invalidStatusList = new List { ConsTrade.新增待确认, ConsTrade.修改待确认, ConsTrade.审批中 }; + var invalidTrades = trades.Where(t => invalidStatusList.Contains(t.TradeStatus)).ToList(); + if (invalidTrades.Any()) + { + error.AddRange(invalidTrades.Select(t => $"交易 {t.TradeNumber} 状态为【{t.TradeStatus}】,不能生成确认书")); + tradeIds = tradeIds.Where(id => !invalidTrades.Any(t => t.id == id)).ToList(); + trades = trades.Where(t => !invalidTrades.Any(it => it.id == t.id)).ToList(); + logger.Info($"[GJGenerateConfirmBook] 过滤掉 {invalidTrades.Count} 笔待确认/审批中交易"); + } + + if (!trades.Any()) + { + logger.Info("[GJGenerateConfirmBook] 过滤后无有效交易可生成确认书"); + errors = error; + files = new List(); + return false; + } + var clientIds = trades.Select(x => x.ClientId).Distinct().ToList(); logger.Info($"[GJGenerateConfirmBook] 客户ID数: {clientIds.Count}"); diff --git a/YLErpWeb/Views/TradeConfirmBook/Index.cshtml b/YLErpWeb/Views/TradeConfirmBook/Index.cshtml index 5c9d099a..8c5a0b65 100644 --- a/YLErpWeb/Views/TradeConfirmBook/Index.cshtml +++ b/YLErpWeb/Views/TradeConfirmBook/Index.cshtml @@ -16,7 +16,7 @@ SettleDocModeMultiple = valuedate.SettleDocModeMultiple.Equals(valuedateBLL.SystemDate.SettleDocMode), BrokerMode = YLErp.PS.Config.ComponentVersion == YLErp.Configuration.ComponentVersion.Broker, MarketMaker = YLErp.PS.Config.ComponentVersion == YLErp.Configuration.ComponentVersion.MarketMaker, - reqTradeStatus = $"{ConsTrade.确认成交},{ConsTrade.已到期},{ConsTrade.已平仓},{ConsTrade.已执行}", + reqTradeStatus = $"{ConsTrade.新增待确认},{ConsTrade.修改待确认},{ConsTrade.审批中},{ConsTrade.确认成交},{ConsTrade.已到期},{ConsTrade.已平仓},{ConsTrade.已执行}", SelectConfirmationBookTemplate = GlobalConfig.SelectConfirmationBookTemplate == true, templateNames = ViewBag.TemplateNames, //初始化时使用空页面(清楚预置查询条件及初始不加载数据) @@ -68,7 +68,7 @@ @Html.MyAceDropdownInput2("BuySell", "交易方向", GlobalData.GetSelectItems(new List { "买入", "卖出" })) @Html.SearchDateRange("ExerciseDate", "到期日期") @Html.SearchDateRange("TradeDate", "交易日期") - @Html.MyAceDropdownInput("TradeStatus", "交易状态", GlobalData.TradeStatusAfterConfirm(), true) + @Html.MyAceDropdownInput("TradeStatus", "交易状态", GlobalData.GetSelectItems(new List { ConsTrade.新增待确认, ConsTrade.修改待确认, ConsTrade.审批中, ConsTrade.确认成交, ConsTrade.已到期, ConsTrade.已执行, ConsTrade.已平仓 }), true) @if (pageObj.IsAutoSealAndUploadFiles){ @Html.MyAceDropdownInput("SealResults", "用印结果", GlobalData.GetSealResultItems()) diff --git a/YLErpWeb/Views/TradeConfirmBookOption/Index.cshtml b/YLErpWeb/Views/TradeConfirmBookOption/Index.cshtml index 8d27bc0f..8858017f 100644 --- a/YLErpWeb/Views/TradeConfirmBookOption/Index.cshtml +++ b/YLErpWeb/Views/TradeConfirmBookOption/Index.cshtml @@ -16,7 +16,7 @@ SettleDocModeMultiple = valuedate.SettleDocModeMultiple.Equals(valuedateBLL.SystemDate.SettleDocMode), BrokerMode = YLErp.PS.Config.ComponentVersion == YLErp.Configuration.ComponentVersion.Broker, MarketMaker = YLErp.PS.Config.ComponentVersion == YLErp.Configuration.ComponentVersion.MarketMaker, - reqTradeStatus = $"{ConsTrade.确认成交},{ConsTrade.已到期},{ConsTrade.已平仓},{ConsTrade.已执行}", + reqTradeStatus = $"{ConsTrade.新增待确认},{ConsTrade.修改待确认},{ConsTrade.审批中},{ConsTrade.确认成交},{ConsTrade.已到期},{ConsTrade.已平仓},{ConsTrade.已执行}", SelectConfirmationBookTemplate = GlobalConfig.SelectConfirmationBookTemplate == true, templateNames = ViewBag.TemplateNames, //初始化时使用空页面(清楚预置查询条件及初始不加载数据) @@ -71,7 +71,7 @@ @Html.MyAceDropdownInput2("BuySell", "交易方向", GlobalData.GetSelectItems(new List { "买入", "卖出" })) @Html.SearchDateRange("ExerciseDate", "到期日期") @Html.SearchDateRange("TradeDate", "交易日期") - @Html.MyAceDropdownInput("TradeStatus", "交易状态", GlobalData.TradeStatusAfterConfirm(), true) + @Html.MyAceDropdownInput("TradeStatus", "交易状态", GlobalData.GetSelectItems(new List { ConsTrade.新增待确认, ConsTrade.修改待确认, ConsTrade.审批中, ConsTrade.确认成交, ConsTrade.已到期, ConsTrade.已执行, ConsTrade.已平仓 }), true) @if (pageObj.IsAutoSealAndUploadFiles){ @Html.MyAceDropdownInput("SealResults", "用印结果", GlobalData.GetSealResultItems()) diff --git a/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBook.js b/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBook.js index 0147abc8..38e25299 100644 --- a/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBook.js +++ b/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBook.js @@ -925,7 +925,9 @@ function showToolName(cellValue, options, rowObject) { var html = showDownload(cellValue, options, rowObject); var title = page.IsAutoSealAndUploadFiles && page.IsAutoSealAfterGeneratedBook ? "生成并用印" : "生成确认书"; - var canGenerate = page.canGenerate == true ? "" : "disabled"; + // 待确认和审批中的交易不允许生成确认书 + var isUnconfirmed = rowObject.TradeStatus === "新增待确认" || rowObject.TradeStatus === "修改待确认" || rowObject.TradeStatus === "审批中"; + var canGenerate = page.canGenerate == true && !isUnconfirmed ? "" : "disabled"; var isWait = (rowObject.MetaDic.SealResult == "用印等待中"); html += "".template(rowObject.id, rowObject.MetaDic.HasGeneratedConfirmBook == "True", title, isWait, canGenerate); if (rowObject.MetaDic.ContractDocUrl && page.canSendEmail == true) { From bd4c9052daee5982a394c33d8ba075da663ae511 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E6=96=B9=E6=B5=B7?= Date: Fri, 22 May 2026 15:53:21 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E4=BA=92=E6=8D=A2=E8=A7=82=E5=AF=9F?= =?UTF-8?q?=E6=97=A5=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DocumentGenerator/TradeConfirmationGenerator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Plugins/YLErp.Plugins.GuoLian/DocumentGenerator/TradeConfirmationGenerator.cs b/Plugins/YLErp.Plugins.GuoLian/DocumentGenerator/TradeConfirmationGenerator.cs index 6276da48..dc16cf57 100644 --- a/Plugins/YLErp.Plugins.GuoLian/DocumentGenerator/TradeConfirmationGenerator.cs +++ b/Plugins/YLErp.Plugins.GuoLian/DocumentGenerator/TradeConfirmationGenerator.cs @@ -345,7 +345,7 @@ namespace YLErp.Plugins.GuoLian.DocumentGenerator dic["利差"] = ((double)interestMargin.InterestRateDefault * 10000).ToString("N0"); dic["重置频率"] = (interestMargin.interest_rest_days ?? 0) + "天"; } - if (interestMargin.SwapIntervalList.Count()>0) + if (interestMargin.SwapIntervalList.Count()>1) { var firstInterval = interestMargin.SwapIntervalList.OrderBy(o=>o.Date).First(); var lastInterval = interestMargin.SwapIntervalList.OrderBy(o => o.Date).Last();