From f11e8ea27aa51179bb6680639183b77914d7bdca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=94=A6=E9=BA=9F=20=E7=8E=8B?= Date: Tue, 14 Apr 2026 11:24:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E2=80=9C=E6=94=B6=E7=9B=8A?= =?UTF-8?q?=E4=BA=92=E6=8D=A2=E2=80=9D=E7=A1=AE=E8=AE=A4=E4=B9=A6=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E4=B8=8E=E7=BC=96=E5=8F=B7=E7=94=9F=E6=88=90=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TradeContractGenerateService.cs | 44 +----------- .../ConfirmationGenerateContext.cs | 20 +++++- YLErpWeb/App_Data/Menus.txt | 2 +- .../Controllers/TradeConfirmBookController.cs | 68 +++++++++++++++++++ YLErpWeb/Views/TradeConfirmBook/Index.cshtml | 4 +- .../Scripts/app/trade/tradeConfirmBook.js | 2 +- 6 files changed, 94 insertions(+), 46 deletions(-) diff --git a/YLErpDAL/Modules/TradeModule/DealModule/TradeContractGenerateService.cs b/YLErpDAL/Modules/TradeModule/DealModule/TradeContractGenerateService.cs index 9230cad5..bac3c424 100644 --- a/YLErpDAL/Modules/TradeModule/DealModule/TradeContractGenerateService.cs +++ b/YLErpDAL/Modules/TradeModule/DealModule/TradeContractGenerateService.cs @@ -229,49 +229,9 @@ namespace YLErp.Modules.TradeModule.DealModule var clientIds = trades.Select(x => x.ClientId).Distinct().ToList(); logger.Info($"[GJGenerateConfirmBook] 客户ID数: {clientIds.Count}"); - if (trades.Any(o => o.TradeType.Equals("收益互换"))) + foreach (var item in trades) { - 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); - } - } - else - { - foreach (var item in trades) - { - groupGenerateHandle_Date(new List { item.id }, docType, startDate, endDate, results, error, file); - } + groupGenerateHandle_Date(new List { item.id }, docType, startDate, endDate, results, error, file); } errors = results.Where(n => !string.IsNullOrWhiteSpace(n.ErrorMessage)).Select(n => n.ErrorMessage).ToList(); diff --git a/YLErpDAL/Modules/TradeModule/DocGenerateModule/ConfirmationGenerateContext.cs b/YLErpDAL/Modules/TradeModule/DocGenerateModule/ConfirmationGenerateContext.cs index ee180d74..9ae58919 100644 --- a/YLErpDAL/Modules/TradeModule/DocGenerateModule/ConfirmationGenerateContext.cs +++ b/YLErpDAL/Modules/TradeModule/DocGenerateModule/ConfirmationGenerateContext.cs @@ -1278,9 +1278,11 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule contractNo = GenerateShanXiGuShouContractNo(); break; case CompanyEnum.浙商: - case CompanyEnum.国联: contractNo = GenerateZheShangContractNo(); break; + case CompanyEnum.国联: + contractNo = GenerateGuolianContractNo(); + break; default: throw new ContextMarshalException("未实现"); } @@ -1336,6 +1338,22 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule } return Trade.TradeNumber; } + + private string GenerateGuolianContractNo() + { + if (_contractType != ContractTypeEnum.Trade) + { + return UniqueTimeId.GetStr(); + } + if (Trade.TradeType == "收益互换") + { + var posi = GetSwapPositions(Trade.id, true).FirstOrDefault(p => p.PositionType > 0); + var isLong = posi?.PositionType == (int)PositionTypeFlag.Short ? false : true; + + return "GLMS-" + _client.Number + "-" + Trade.TradeNumber; + } + return Trade.TradeNumber; + } /// /// 生成国贸确认书编号 /// diff --git a/YLErpWeb/App_Data/Menus.txt b/YLErpWeb/App_Data/Menus.txt index 2af376bc..1d76caa7 100644 --- a/YLErpWeb/App_Data/Menus.txt +++ b/YLErpWeb/App_Data/Menus.txt @@ -41,7 +41,7 @@ {Name:"资金记录",Rights:["结算管理-出入金维护"],Url:"entryexit/entryexitList"}, {Name:"资金审批",Rights:["结算管理-资金审批页面"],Url:"entryexit/entryexitApproval"}, {Name:"收盘操作",Rights:["结算管理-收盘操作"],Url:"eod_trade_value/eodExec"}, - {Name:"交易确认书",Rights:["结算管理-交易确认书"],Url:"TradeConfirmBook/ConfirmBookListByClient"}, + {Name:"交易确认书",Rights:["结算管理-交易确认书"],Url:"TradeConfirmBook/Index"}, {Name:"交易确认书_期权",Rights:["结算管理-交易确认书-期权"],Url:"TradeConfirmBook/IndexOption"}, {Name:"结算确认书",Rights:["结算管理-结算确认书"],Url:"swaptrade2/tradeEndConfirmList"}, {Name:"每日估值报告",Rights:["结算管理-每日估值报告"],Url:"clientbalance/TradeMarketReport"}, diff --git a/YLErpWeb/Controllers/TradeConfirmBookController.cs b/YLErpWeb/Controllers/TradeConfirmBookController.cs index a0d96d14..3ffaf734 100644 --- a/YLErpWeb/Controllers/TradeConfirmBookController.cs +++ b/YLErpWeb/Controllers/TradeConfirmBookController.cs @@ -186,6 +186,74 @@ namespace YLErp.Web.Controllers return Json(sList); } + /// + /// 互换确认书查询(只查询收益互换) + /// + public JsonResult SwapQuery(TradeReq req) + { + req.AssetIdList = AssetUnitModel.IntersectAssetUnits(req.AssetIdGroupList, req.AssetIdList).ToList(); + req.UserAssets = CurUser.GetAssetUnitIds(); + req.UserClients = CurUser.GetClientIdsByCurUser(CurUser.交易管理_查看所有交易); + req.CurUserTradeIds = CurUser.GetTradeIdsByCurUser(); + // 只查询收益互换 + req.TradeTypes = "收益互换"; + var sList = new tradeBLL().SearchListForTradeConfirm(req); + var rowList = sList.rows; + // 增加交易确认书编号 + if (rowList != null && rowList.Any()) + { + var tradeIds = rowList.Select(x => x.id).ToList(); + var tradeContractCodeList = (from tradeContractR in yldb.trade_contract_r + join tradeContractDoc in (from tradeContractDocTemp in yldb.trade_contract_document where ContractTypeEnum.Trade == tradeContractDocTemp.Type select tradeContractDocTemp) + on tradeContractR.ContractCode equals tradeContractDoc.Code into tradeContractDoc1 + from tradeContractDoc2 in tradeContractDoc1.DefaultIfEmpty() + where tradeIds.Contains(tradeContractR.TradeId) && ContractTypeEnum.Trade == tradeContractR.Type && tradeContractR.Type == tradeContractDoc2.Type && tradeContractR.IsValid + select new + { + tradeContractR.id, + tradeContractR.TradeId, + tradeContractR.ContractCode, + tradeContractR.send_email_result, + tradeContractDoc = tradeContractDoc2 + }).ToList(); + + foreach (var trade in rowList) + { + if (trade.TradeType == "合成价差期权") + { + trade.SyntheticUnderlyingTipsInfo = synthetic_underlyingBLL.GetUnderlyingTipsInfo(trade.UnderlyingCode); + } + var tradeContractinfo = tradeContractCodeList.FirstOrDefault(t => t.TradeId == trade.id); + trade.MetaDic["send_email_result"] = ""; + if (tradeContractinfo != null) + { + trade.ContractCode = tradeContractinfo.ContractCode; + if (null != tradeContractinfo.tradeContractDoc) + { + trade.MetaDic["ContractEncryptId"] = tradeContractinfo.tradeContractDoc.EncryptId; + trade.MetaDic["ContractRId"] = tradeContractinfo.id.ToString(); + trade.MetaDic["ContractDocUrl"] = tradeContractinfo.tradeContractDoc.RelativePath; + trade.MetaDic["HasGeneratedConfirmBook"] = "True"; + trade.MetaDic["send_email_result"] = tradeContractinfo.send_email_result; + } + else + { + trade.MetaDic["ContractEncryptId"] = ""; + trade.MetaDic["ContractRId"] = tradeContractinfo.id.ToString(); + trade.MetaDic["HasGeneratedConfirmBook"] = "False"; + } + } + else + { + trade.MetaDic["ContractEncryptId"] = ""; + trade.MetaDic["ContractRId"] = ""; + trade.MetaDic["HasGeneratedConfirmBook"] = "False"; + } + } + } + return Json(sList); + } + public async Task SentMail(string enid, List reciver) { var result = await DoSendMailSywg(enid, reciver); diff --git a/YLErpWeb/Views/TradeConfirmBook/Index.cshtml b/YLErpWeb/Views/TradeConfirmBook/Index.cshtml index e0b3c72f..a20e7056 100644 --- a/YLErpWeb/Views/TradeConfirmBook/Index.cshtml +++ b/YLErpWeb/Views/TradeConfirmBook/Index.cshtml @@ -25,7 +25,9 @@ IsZheQi = PS.Config.Is浙期, IsAutoSealAfterGeneratedBook = PS.GetErpConfig().IsAutoSealAfterGeneratedBook, canGenerate = CurUser.结算管理_交易确认书生成, - canSendEmail = CurUser.结算管理_交易确认书邮件发送 + canSendEmail = CurUser.结算管理_交易确认书邮件发送, + // 标识为互换确认书页面 + isSwapPage = true }; var tradeTypes = ConsTrade.AllTradeTypes.Except(new List { "场内期权", "股票" }).Concat(new List { "黑箱结构" }); } diff --git a/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBook.js b/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBook.js index 727d32fd..fef7be32 100644 --- a/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBook.js +++ b/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBook.js @@ -420,7 +420,7 @@ function __initJqGrid() { onJqgridPaging: typeof onJqgridPaging !== 'undefined' ? onJqgridPaging : void 0 }; var grid = jQuery('#listGrid').jqGrid({ - url: page.isOptionPage ? '/TradeConfirmBook/OptionQuery' : '/trade/tradeConfirmEmailQuery', + url: page.isOptionPage ? '/TradeConfirmBook/OptionQuery' : (page.isSwapPage ? '/TradeConfirmBook/SwapQuery' : '/trade/tradeConfirmEmailQuery'), datatype: page.initEmptyView ? 'local' : 'json', height: 'auto', width: '90%',