From 592ad52ecba5f23a6b7618fe9ee0a438a2760193 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=94=A6=E9=BA=9F=20=E7=8E=8B?= Date: Wed, 15 Jul 2026 10:51:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=92=E6=8D=A2=E5=B9=B3=E4=BB=93=E5=AE=A1?= =?UTF-8?q?=E6=89=B9=E6=B5=81=E7=A8=8B=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Modules/SwapModule/SwapDealService.cs | 13 ++++++++ .../DealModule/OtcTradeCloseService.cs | 31 +++++++++++++++---- .../DealModule/TradeCloseService.cs | 15 ++++++--- .../DealModule/TradeExerciseService.cs | 12 ++++--- .../DealModule/TradeUnwindService.cs | 24 +++++++++++--- 5 files changed, 75 insertions(+), 20 deletions(-) diff --git a/YLErpDAL/Modules/SwapModule/SwapDealService.cs b/YLErpDAL/Modules/SwapModule/SwapDealService.cs index 86a43b87..f338a2a4 100644 --- a/YLErpDAL/Modules/SwapModule/SwapDealService.cs +++ b/YLErpDAL/Modules/SwapModule/SwapDealService.cs @@ -1763,6 +1763,19 @@ namespace YLErp.Modules.SwapModule CloseReCheckSetTrade(unwindData.SwapTradeId, eventType == (int)SwapEventTypeEnum.互换, true); SaveSwapDeal(unwindData, eventType, 0, action, true); SaveAllChanges(); + // 需求①:若触发条件判定无需审批(CloseReCheck_SetTrade 已将 ProcessOrderId 设为审批通过), + // 在 swap_event 记录创建完成后再执行审批通过流程。 + td = FindTrade(unwindData.SwapTradeId); + if (td.ProcessOrderId == ProcessTradeLog.审批通过) + { + new TradeOpenService(this).UpdateTradeProcessLog(new TradeOpenReqModel + { + tradeId = td.id, + status = "pass", + comments = "触发条件未满足,自动跳过审批", + notNeedOperationHistory = false + }); + } }); } private void ValidateIncomeValueDate(UnwindData unwindData, trade td) diff --git a/YLErpDAL/Modules/TradeModule/DealModule/OtcTradeCloseService.cs b/YLErpDAL/Modules/TradeModule/DealModule/OtcTradeCloseService.cs index 5a82fe92..6bbad4f1 100644 --- a/YLErpDAL/Modules/TradeModule/DealModule/OtcTradeCloseService.cs +++ b/YLErpDAL/Modules/TradeModule/DealModule/OtcTradeCloseService.cs @@ -224,7 +224,7 @@ namespace YLErp.Modules.TradeModule.DealModule #endregion - //审批流程 + //审批流程(需求②:按交易状态查对应流程) if (!req.SkipWorkflow && HasTradeProcess()) { var isUnwind = tradeCash.Action.Contains("平仓"); @@ -235,14 +235,33 @@ namespace YLErp.Modules.TradeModule.DealModule dbTrade.CheckStatus = Convert.ToInt32(TradeCheckEnum.StatusOfOld); - //检查是否有交易审批流程 - if (valuedateBLL.SystemDate.CloseReApprove == 1) + //检查是否有交易审批流程(需求②:按交易状态查对应流程,而非只查开仓流程) + var needApproval = valuedateBLL.SystemDate.CloseReApprove == 1 && TradeProcessCountByCategory(dbTrade) > 0; + if (needApproval) { - // 如果有审批组 - InitTradeProcessOrder(dbTrade, UserId); + // 需求①:进入审批前先判断触发条件——若所有节点都不满足触发条件,跳过审批。 + needApproval = NeedApprovalByTrigger(dbTrade); } - AddTradeOperationHistoryAndSetParentTradeInfo(false, dbTrade, optType: isUnwind ? "平仓审核提交" : "行权审核提交", comments: req.ImportFlag); + if (needApproval) + { + // 需要审批:进入审批流程等待人工审批 + InitTradeProcessOrder(dbTrade, UserId); + AddTradeOperationHistoryAndSetParentTradeInfo(false, dbTrade, optType: isUnwind ? "平仓审核提交" : "行权审核提交", comments: req.ImportFlag); + } + else + { + // 不需要审批:设 ProcessOrderId=审批通过,再调 UpdateTradeProcessLog(pass) 执行审批通过流程 + dbTrade.ProcessOrderId = ProcessTradeLog.审批通过; + DbContext.SaveChanges(); + new TradeOpenService(this).UpdateTradeProcessLog(new TradeOpenReqModel + { + tradeId = dbTrade.id, + status = "pass", + comments = "触发条件未满足,自动跳过审批", + notNeedOperationHistory = false + }); + } } else { diff --git a/YLErpDAL/Modules/TradeModule/DealModule/TradeCloseService.cs b/YLErpDAL/Modules/TradeModule/DealModule/TradeCloseService.cs index a57ed767..96085b78 100644 --- a/YLErpDAL/Modules/TradeModule/DealModule/TradeCloseService.cs +++ b/YLErpDAL/Modules/TradeModule/DealModule/TradeCloseService.cs @@ -138,12 +138,17 @@ namespace YLErp.Modules.TradeModule.DealModule } else { - // 不需要审批:直接走平仓完成流程(与审批通过一致) + // 不需要审批:设 ProcessOrderId=审批通过,再调 UpdateTradeProcessLog(pass) 执行审批通过流程 + // (SetTradeOpen 会完成平仓、改状态、写日志,与人工审批通过完全一致) td.ProcessOrderId = ProcessTradeLog.审批通过; - td.ProcessStatus = ProcessTradeStatus.通过审批.ToString(); - td.ProcessOptDate = DateTime.Now; - // 直接完成平仓 - new TradeUnwindService(this).UnwindTrade(td, null, true, isFromExercise); + DbContext.SaveChanges(); + new TradeOpenService(this).UpdateTradeProcessLog(new TradeOpenReqModel + { + tradeId = td.id, + status = "pass", + comments = "触发条件未满足,自动跳过审批", + notNeedOperationHistory = false + }); } } } diff --git a/YLErpDAL/Modules/TradeModule/DealModule/TradeExerciseService.cs b/YLErpDAL/Modules/TradeModule/DealModule/TradeExerciseService.cs index 1b8717b9..69e7bbf9 100644 --- a/YLErpDAL/Modules/TradeModule/DealModule/TradeExerciseService.cs +++ b/YLErpDAL/Modules/TradeModule/DealModule/TradeExerciseService.cs @@ -126,12 +126,16 @@ namespace YLErp.Modules.TradeModule.DealModule } else { - // 不需要审批:直接完成行权 + // 不需要审批:设 ProcessOrderId=审批通过,再调 UpdateTradeProcessLog(pass) 执行审批通过流程 td.ProcessOrderId = ProcessTradeLog.审批通过; - td.ProcessStatus = ProcessTradeStatus.通过审批.ToString(); - td.ProcessOptDate = DateTime.Now; DbContext.SaveChanges(); - new TradeUnwindService(this).UnwindTrade(td, null, true, true); + new TradeOpenService(this).UpdateTradeProcessLog(new TradeOpenReqModel + { + tradeId = td.id, + status = "pass", + comments = "触发条件未满足,自动跳过审批", + notNeedOperationHistory = false + }); return; } diff --git a/YLErpDAL/Modules/TradeModule/DealModule/TradeUnwindService.cs b/YLErpDAL/Modules/TradeModule/DealModule/TradeUnwindService.cs index ac4e4429..06ef40c6 100644 --- a/YLErpDAL/Modules/TradeModule/DealModule/TradeUnwindService.cs +++ b/YLErpDAL/Modules/TradeModule/DealModule/TradeUnwindService.cs @@ -1848,14 +1848,28 @@ namespace YLErp.Modules.TradeModule.DealModule td.CheckStatus = Convert.ToInt32(TradeCheckEnum.StatusOfOld); - //检查是否有交易审批流程 - if ((valuedateBLL.SystemDate.CloseReApprove == 1 || isSwap) && hasTradeProcess) + //检查是否有交易审批流程(需求②:按交易状态查对应流程,而非只查开仓流程) + var needApproval = (valuedateBLL.SystemDate.CloseReApprove == 1 || isSwap) && TradeProcessCountByCategory(td) > 0; + if (needApproval) { - //如果有审批组 - InitTradeProcessOrder(td, UserId); + // 需求①:进入审批前先判断触发条件——若所有节点都不满足触发条件,跳过审批。 + needApproval = NeedApprovalByTrigger(td); } - AddTradeOperationHistoryAndSetParentTradeInfo(false, td, isSwap ? "互换审核提交" : "平仓审核提交"); + if (needApproval) + { + // 需要审批:进入审批流程等待人工审批 + InitTradeProcessOrder(td, UserId); + AddTradeOperationHistoryAndSetParentTradeInfo(false, td, isSwap ? "互换审核提交" : "平仓审核提交"); + } + else + { + // 不需要审批:只标记 ProcessOrderId=审批通过。 + // 互换的 swap_event 记录要等调用方 ApplySwapTrade 的 SaveSwapDeal 执行后才创建, + // 所以互换不在这里调 UpdateTradeProcessLog(否则 FindSwapEvent 找不到记录), + // 由 ApplySwapTrade 在 SaveSwapDeal 之后判断并触发审批通过流程。 + td.ProcessOrderId = ProcessTradeLog.审批通过; + } } }