From 5ba29de3ed79dc537575d5932b36c54f089b1cb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=94=A6=E9=BA=9F=20=E7=8E=8B?= <2452821485@qq.com> Date: Tue, 22 Apr 2025 09:45:21 +0800 Subject: [PATCH] =?UTF-8?q?TRS-ZS-183=20=E4=B8=80=E4=B8=AA=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E4=B8=80=E5=A4=A9=E6=89=80=E6=9C=89=E5=BC=80=E4=BB=93?= =?UTF-8?q?=E7=9A=84=E5=A4=9A=E5=A4=B4=E4=BA=A4=E6=98=93=E9=83=BD=E6=94=BE?= =?UTF-8?q?=E5=88=B0=E4=B8=80=E4=B8=AA=E4=BA=A4=E6=98=93=E7=A1=AE=E8=AE=A4?= =?UTF-8?q?=E4=B9=A6=E9=87=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BaseDocumentGenerator_Batch.cs | 116 ++-- .../交易确认书/客户多头交易确认书模板.docx | Bin 41869 -> 0 bytes .../交易确认书/客户空头交易确认书模板.docx | Bin 42083 -> 0 bytes ...证券利率债收益互换合约交易确认书模版.docx | Bin 0 -> 49271 bytes .../TradeConfirmationGenerator.cs | 241 +++++--- .../YLErp.Plugins.ZheShang.csproj | 6 + YLErpDAL/Model/SwapTradeSendEmailReq.cs | 11 +- YLErpDAL/Model/SwapTradeSendEmailResp.cs | 2 +- YLErpDAL/Models/DownloadDocReq.cs | 2 + .../SwapModule/SwapEndConfirmService.cs | 48 +- .../TradeContractGenerateService.cs | 328 +++++------ .../ConfirmationGenerateContext.cs | 8 + .../ConfirmationGenerateService.cs | 102 ++-- YLErpWeb/App_Data/Menus.txt | 2 +- YLErpWeb/Controllers/SwapTrade2Controller.cs | 4 +- .../Controllers/TradeConfirmBookController.cs | 12 + YLErpWeb/Controllers/tradeController.cs | 13 +- YLErpWeb/Hubs/SwapConfirmSendEmailHub.cs | 36 +- .../ConfirmBookListByClient.cshtml | 84 +++ .../confirmBookUploadNew.cshtml | 2 +- .../app/trade/tradeConfirmBookListByClient.js | 552 ++++++++++++++++++ 21 files changed, 1176 insertions(+), 393 deletions(-) delete mode 100644 Plugins/YLErp.Plugins.ZheShang/App_Docs/交易确认书/客户多头交易确认书模板.docx delete mode 100644 Plugins/YLErp.Plugins.ZheShang/App_Docs/交易确认书/客户空头交易确认书模板.docx create mode 100644 Plugins/YLErp.Plugins.ZheShang/App_Docs/交易确认书/浙商证券利率债收益互换合约交易确认书模版.docx create mode 100644 YLErpWeb/Views/TradeConfirmBook/ConfirmBookListByClient.cshtml create mode 100644 YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBookListByClient.js diff --git a/Framework/YLErp.Core/Plugins/TradeDocGenerator/BaseDocumentGenerator_Batch.cs b/Framework/YLErp.Core/Plugins/TradeDocGenerator/BaseDocumentGenerator_Batch.cs index e2a6c753..913af16d 100644 --- a/Framework/YLErp.Core/Plugins/TradeDocGenerator/BaseDocumentGenerator_Batch.cs +++ b/Framework/YLErp.Core/Plugins/TradeDocGenerator/BaseDocumentGenerator_Batch.cs @@ -227,12 +227,12 @@ namespace YLErp.Plugins.TradeDocGenerator protected void FormatToDict(string key, DateTime? value, JObject dict) { dict[key] = value?.ToString("yyyy年MM月dd日"); - dict[key.Insert(key.Length - 2, "N")] = value?.ToString("yyyyMMdd"); - dict[key.Insert(key.Length - 2, "/")] = value?.ToString("yyyy/MM/dd"); - dict[key.Insert(key.Length - 2, "-")] = value?.ToString("yyyy-MM-dd"); - dict[key.Insert(key.Length - 2, "年")] = value?.ToString("yyyy"); - dict[key.Insert(key.Length - 2, "月")] = value?.ToString("MM"); - dict[key.Insert(key.Length - 2, "日")] = value?.ToString("dd"); + dict[key.Insert(key.Length, "N")] = value?.ToString("yyyyMMdd"); + dict[key.Insert(key.Length, "/")] = value?.ToString("yyyy/MM/dd"); + dict[key.Insert(key.Length, "-")] = value?.ToString("yyyy-MM-dd"); + dict[key.Insert(key.Length, "年")] = value?.ToString("yyyy"); + dict[key.Insert(key.Length, "月")] = value?.ToString("MM"); + dict[key.Insert(key.Length, "日")] = value?.ToString("dd"); } /// @@ -244,12 +244,12 @@ namespace YLErp.Plugins.TradeDocGenerator protected void FormatToDict(string key, DateTime value, Dictionary dict) { dict[key] = value.ToString("yyyy年MM月dd日"); - dict[key.Insert(key.Length - 2, "N")] = value.ToString("yyyyMMdd"); - dict[key.Insert(key.Length - 2, "/")] = value.ToString("yyyy/MM/dd"); - dict[key.Insert(key.Length - 2, "-")] = value.ToString("yyyy-MM-dd"); - dict[key.Insert(key.Length - 2, "年")] = value.ToString("yyyy"); - dict[key.Insert(key.Length - 2, "月")] = value.ToString("MM"); - dict[key.Insert(key.Length - 2, "日")] = value.ToString("dd"); + dict[key.Insert(key.Length, "N")] = value.ToString("yyyyMMdd"); + dict[key.Insert(key.Length, "/")] = value.ToString("yyyy/MM/dd"); + dict[key.Insert(key.Length, "-")] = value.ToString("yyyy-MM-dd"); + dict[key.Insert(key.Length, "年")] = value.ToString("yyyy"); + dict[key.Insert(key.Length, "月")] = value.ToString("MM"); + dict[key.Insert(key.Length, "日")] = value.ToString("dd"); } /// @@ -261,8 +261,8 @@ namespace YLErp.Plugins.TradeDocGenerator protected void FormatToDict(string key, int value, JObject dict) { dict[key] = value.ToString("0"); - dict[key.Insert(key.Length - 2, "A")] = Math.Abs(value).ToString("0"); - dict[key.Insert(key.Length - 2, "大写")] = Context.CmycurD(Math.Abs(value)); + dict[key.Insert(key.Length, "A")] = Math.Abs(value).ToString("0"); + dict[key.Insert(key.Length, "大写")] = Context.CmycurD(Math.Abs(value)); } /// @@ -275,28 +275,28 @@ namespace YLErp.Plugins.TradeDocGenerator { value = value == -0 ? 0 : value; dict[key] = value?.ToString("0.00"); - dict[key.Insert(key.Length - 2, "2")] = value?.ToString("0.00"); - dict[key.Insert(key.Length - 2, "3")] = value?.ToString("0.000"); - dict[key.Insert(key.Length - 2, "4")] = value?.ToString("0.0000"); - dict[key.Insert(key.Length - 2, "5")] = value?.ToString("0.00000"); - dict[key.Insert(key.Length - 2, "6")] = value?.ToString("0.000000"); - dict[key.Insert(key.Length - 2, "A")] = value != null ? Math.Abs(value.Value).ToString("0") : ""; - dict[key.Insert(key.Length - 2, "A2")] = value != null ? Math.Abs(value.Value).ToString("0.00") : ""; - dict[key.Insert(key.Length - 2, "A3")] = value != null ? Math.Abs(value.Value).ToString("0.000") : ""; - dict[key.Insert(key.Length - 2, "A4")] = value != null ? Math.Abs(value.Value).ToString("0.0000") : ""; - dict[key.Insert(key.Length - 2, "A5")] = value != null ? Math.Abs(value.Value).ToString("0.00000") : ""; - dict[key.Insert(key.Length - 2, "A6")] = value != null ? Math.Abs(value.Value).ToString("0.000000") : ""; - dict[key.Insert(key.Length - 2, "2?")] = value?.ToString("0.##"); - dict[key.Insert(key.Length - 2, "3?")] = value?.ToString("0.###"); - dict[key.Insert(key.Length - 2, "4?")] = value?.ToString("0.####"); - dict[key.Insert(key.Length - 2, "5?")] = value?.ToString("0.#####"); - dict[key.Insert(key.Length - 2, "6?")] = value?.ToString("0.######"); - dict[key.Insert(key.Length - 2, "A2?")] = value != null ? Math.Abs(value.Value).ToString("0.##") : ""; - dict[key.Insert(key.Length - 2, "A3?")] = value != null ? Math.Abs(value.Value).ToString("0.###") : ""; - dict[key.Insert(key.Length - 2, "A4?")] = value != null ? Math.Abs(value.Value).ToString("0.####") : ""; - dict[key.Insert(key.Length - 2, "A5?")] = value != null ? Math.Abs(value.Value).ToString("0.#####") : ""; - dict[key.Insert(key.Length - 2, "A6?")] = value != null ? Math.Abs(value.Value).ToString("0.######") : ""; - dict[key.Insert(key.Length - 2, "大写")] = value != null ? Context.CmycurD(Math.Abs(value.Value)) : ""; + dict[key.Insert(key.Length, "2")] = value?.ToString("0.00"); + dict[key.Insert(key.Length, "3")] = value?.ToString("0.000"); + dict[key.Insert(key.Length, "4")] = value?.ToString("0.0000"); + dict[key.Insert(key.Length, "5")] = value?.ToString("0.00000"); + dict[key.Insert(key.Length, "6")] = value?.ToString("0.000000"); + dict[key.Insert(key.Length, "A")] = value != null ? Math.Abs(value.Value).ToString("0") : ""; + dict[key.Insert(key.Length, "A2")] = value != null ? Math.Abs(value.Value).ToString("0.00") : ""; + dict[key.Insert(key.Length, "A3")] = value != null ? Math.Abs(value.Value).ToString("0.000") : ""; + dict[key.Insert(key.Length, "A4")] = value != null ? Math.Abs(value.Value).ToString("0.0000") : ""; + dict[key.Insert(key.Length, "A5")] = value != null ? Math.Abs(value.Value).ToString("0.00000") : ""; + dict[key.Insert(key.Length, "A6")] = value != null ? Math.Abs(value.Value).ToString("0.000000") : ""; + dict[key.Insert(key.Length, "2?")] = value?.ToString("0.##"); + dict[key.Insert(key.Length, "3?")] = value?.ToString("0.###"); + dict[key.Insert(key.Length, "4?")] = value?.ToString("0.####"); + dict[key.Insert(key.Length, "5?")] = value?.ToString("0.#####"); + dict[key.Insert(key.Length, "6?")] = value?.ToString("0.######"); + dict[key.Insert(key.Length, "A2?")] = value != null ? Math.Abs(value.Value).ToString("0.##") : ""; + dict[key.Insert(key.Length, "A3?")] = value != null ? Math.Abs(value.Value).ToString("0.###") : ""; + dict[key.Insert(key.Length, "A4?")] = value != null ? Math.Abs(value.Value).ToString("0.####") : ""; + dict[key.Insert(key.Length, "A5?")] = value != null ? Math.Abs(value.Value).ToString("0.#####") : ""; + dict[key.Insert(key.Length, "A6?")] = value != null ? Math.Abs(value.Value).ToString("0.######") : ""; + dict[key.Insert(key.Length, "大写")] = value != null ? Context.CmycurD(Math.Abs(value.Value)) : ""; } /// @@ -309,28 +309,28 @@ namespace YLErp.Plugins.TradeDocGenerator { value = value == -0 ? 0 : value; dict[key] = value.ToString("0.00"); - dict[key.Insert(key.Length - 2, "2")] = value.ToString("0.00"); - dict[key.Insert(key.Length - 2, "3")] = value.ToString("0.000"); - dict[key.Insert(key.Length - 2, "4")] = value.ToString("0.0000"); - dict[key.Insert(key.Length - 2, "5")] = value.ToString("0.00000"); - dict[key.Insert(key.Length - 2, "6")] = value.ToString("0.000000"); - dict[key.Insert(key.Length - 2, "A")] = Math.Abs(value).ToString("0"); - dict[key.Insert(key.Length - 2, "A2")] = Math.Abs(value).ToString("0.00"); - dict[key.Insert(key.Length - 2, "A3")] = Math.Abs(value).ToString("0.000"); - dict[key.Insert(key.Length - 2, "A4")] = Math.Abs(value).ToString("0.0000"); - dict[key.Insert(key.Length - 2, "A5")] = Math.Abs(value).ToString("0.00000"); - dict[key.Insert(key.Length - 2, "A6")] = Math.Abs(value).ToString("0.000000"); - dict[key.Insert(key.Length - 2, "2?")] = value.ToString("0.##"); - dict[key.Insert(key.Length - 2, "3?")] = value.ToString("0.###"); - dict[key.Insert(key.Length - 2, "4?")] = value.ToString("0.####"); - dict[key.Insert(key.Length - 2, "5?")] = value.ToString("0.#####"); - dict[key.Insert(key.Length - 2, "6?")] = value.ToString("0.######"); - dict[key.Insert(key.Length - 2, "A2?")] = Math.Abs(value).ToString("0.##"); - dict[key.Insert(key.Length - 2, "A3?")] = Math.Abs(value).ToString("0.###"); - dict[key.Insert(key.Length - 2, "A4?")] = Math.Abs(value).ToString("0.####"); - dict[key.Insert(key.Length - 2, "A5?")] = Math.Abs(value).ToString("0.#####"); - dict[key.Insert(key.Length - 2, "A6?")] = Math.Abs(value).ToString("0.######"); - dict[key.Insert(key.Length - 2, "大写")] = Context.CmycurD(Math.Abs(value)); + dict[key.Insert(key.Length, "2")] = value.ToString("0.00"); + dict[key.Insert(key.Length, "3")] = value.ToString("0.000"); + dict[key.Insert(key.Length, "4")] = value.ToString("0.0000"); + dict[key.Insert(key.Length, "5")] = value.ToString("0.00000"); + dict[key.Insert(key.Length, "6")] = value.ToString("0.000000"); + dict[key.Insert(key.Length, "A")] = Math.Abs(value).ToString("0"); + dict[key.Insert(key.Length, "A2")] = Math.Abs(value).ToString("0.00"); + dict[key.Insert(key.Length, "A3")] = Math.Abs(value).ToString("0.000"); + dict[key.Insert(key.Length, "A4")] = Math.Abs(value).ToString("0.0000"); + dict[key.Insert(key.Length, "A5")] = Math.Abs(value).ToString("0.00000"); + dict[key.Insert(key.Length, "A6")] = Math.Abs(value).ToString("0.000000"); + dict[key.Insert(key.Length, "2?")] = value.ToString("0.##"); + dict[key.Insert(key.Length, "3?")] = value.ToString("0.###"); + dict[key.Insert(key.Length, "4?")] = value.ToString("0.####"); + dict[key.Insert(key.Length, "5?")] = value.ToString("0.#####"); + dict[key.Insert(key.Length, "6?")] = value.ToString("0.######"); + dict[key.Insert(key.Length, "A2?")] = Math.Abs(value).ToString("0.##"); + dict[key.Insert(key.Length, "A3?")] = Math.Abs(value).ToString("0.###"); + dict[key.Insert(key.Length, "A4?")] = Math.Abs(value).ToString("0.####"); + dict[key.Insert(key.Length, "A5?")] = Math.Abs(value).ToString("0.#####"); + dict[key.Insert(key.Length, "A6?")] = Math.Abs(value).ToString("0.######"); + dict[key.Insert(key.Length, "大写")] = Context.CmycurD(Math.Abs(value)); } protected void FormatToDict(string v, string Date, Dictionary dic) diff --git a/Plugins/YLErp.Plugins.ZheShang/App_Docs/交易确认书/客户多头交易确认书模板.docx b/Plugins/YLErp.Plugins.ZheShang/App_Docs/交易确认书/客户多头交易确认书模板.docx deleted file mode 100644 index fdbc6b94654379caf85eeaa12e181135ed02af27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41869 zcmb?>V{|56*JfftjPJl8d90E2Gk17}{R})W0xPM891-U?3nL z5Fj9={}X2H+Lnh23 z{PA9YKB(N#do_g=`Wt_6=$*^V5v$nQBPRnk-_ok>B97nj{^Y4j>qJ{_!o$W1qvI9a z^ovL^FvQ=9K$HcGwYkwb=b8G|ceME0SQ3L1&1&%0Dqo>f~x@= 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%0D0w*k$tix!d3wG4 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 xHA~_Y-toPgdWbLZ`57z2~uIlP>(p}>k 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 x.PositionType > 0).FirstOrDefault(); - - if (swapPosition != null) - { - switch (swapPosition.PositionType) - { - case 1: - templatePath = MosPathHelper.Combine(GlobalConfig.PluginFolder, "App_Docs\\交易确认书\\客户多头交易确认书模板.docx"); - break; - case 2: - templatePath = MosPathHelper.Combine(GlobalConfig.PluginFolder, "App_Docs\\交易确认书\\客户空头交易确认书模板.docx"); - break; - } - } + //if (trade.StructureType == "普通债券类收益互换" || trade.StructureType == "普通收益互换") + //{ + // var swapPosition = Context.GetSwapPositions(trade.id, true).Where(x => x.PositionType > 0).FirstOrDefault(); + // if (swapPosition != null) + // { + // switch (swapPosition.PositionType) + // { + // case 1: + // templatePath = MosPathHelper.Combine(GlobalConfig.PluginFolder, "App_Docs\\交易确认书\\客户多头交易确认书模板.docx"); + // break; + // case 2: + // templatePath = MosPathHelper.Combine(GlobalConfig.PluginFolder, "App_Docs\\交易确认书\\客户空头交易确认书模板.docx"); + // break; + // } + // } + //} + //else + //{ + templatePath = MosPathHelper.Combine(GlobalConfig.PluginFolder, "App_Docs\\交易确认书\\浙商证券利率债收益互换合约交易确认书模版.docx"); + //} } else { @@ -78,87 +87,159 @@ namespace YLErp.Plugins.ShanXi.DocumentGenerator /// public void SetSwapData(Dictionary dic) { - SetSingleSwap(dic); + var trade = Context.Trade; + SetSingleSwap(dic); } private void SetSingleSwap(Dictionary dic) { var client = Context.GetClient(); - var trade = Context.Trade; var bank = Context.GetClientBankCard(false); var clientduties = Context.GetClientDuties(); - var swapPositions = Context.GetSwapPositions(trade.id, true); - var swapPosition = swapPositions.Where(x => x.PositionType == 1 || x.PositionType == 2).FirstOrDefault(); - var interestMargin = swapPositions.Where(x => ConsTrade.InterestModels.Contains(x.InterestMode)).FirstOrDefault(); - var initialMarginQuery = swapPositions.Where(x => x.InterestMode == 5); - var additionMarginQuery = swapPositions.Where(x => x.InterestMode == 6); - var underlyingCode = swapPosition?.UnderlyingCode; var table1 = new JArray(); var table2 = new JArray(); var clientMarginRate = Context.GetClientMarginRate(client.id); - - dic["交易编号"] = trade.TradeNumber; + dic["交易编号"] = GetContractNo(out string contractIndex); dic["交易对手方全称"] = client.ClientType != "产品" ? client.Name : $"{client.Manager}作为管理人代表{client.Name}"; dic["主协议编号"] = client.MainProtocolCode; dic["定义文件编号"] = client.SettleFileNumber; - FormatToDict("名义本金", trade.StockEqvNotionalReal, dic); - dic["成交日期"] = trade.TradeDate?.ToString("【yyyy】年【M】月【d】日"); - dic["开始日期"] = trade.StartDate?.ToString("【yyyy】年【M】月【d】日"); - dic["到期日期"] = trade.ExerciseDate?.ToString("【yyyy】年【M】月【d】日"); - dic["成交日期2"] = trade.TradeDate?.ToString("【yyyy】年【M】月【d】日"); - dic["户名"] = bank?.ClientName; - dic["银行账号"] = bank?.Card; - dic["开户行"] = bank?.Bank; - dic["大额行号"] = bank?.Payment; + var count = 0; - FormatToDict("期初标的交割全价", (double)((swapPosition?.PosiGrossPrice) ?? 0) * 100, dic); - FormatToDict("期初标的交割净价", (double)((swapPosition?.PosiNetNoFeePrice) ?? 0) * 100, dic); - - if (string.IsNullOrWhiteSpace(interestMargin?.FloatRateUnderlyingCode)) + var trades = Context.Trades; + var totalPosiQuantity = 0.0; + foreach (var trade in trades) { - dic["利率类型"] = "固定利率"; - dic["利差"] = ""; - dic["固定利率"] = ((interestMargin?.InterestRateDefault) ?? 0) * 100; - dic["参考利率"] = ""; + var swapPositions = Context.GetSwapPositions(trade.id, true); + var swapPosition = swapPositions.Where(x => x.PositionType == 1 || x.PositionType == 2).FirstOrDefault(); + var interestMargin = swapPositions.Where(x => ConsTrade.InterestModels.Contains(x.InterestMode)).FirstOrDefault(); + var initialMarginQuery = swapPositions.Where(x => x.InterestMode == 5); + var additionMarginQuery = swapPositions.Where(x => x.InterestMode == 6); + var underlyingCode = swapPosition?.UnderlyingCode; + + if (count == 0) + { + dic["名义本金".Insert("名义本金".Length, "2?")] = trade.StockEqvNotionalReal.ToString("0.##"); + dic["成交日期"] = trade.TradeDate?.ToString("yyyy年M月d日"); + dic["开始日期"] = trade.StartDate?.ToString("yyyy年M月d日"); + dic["到期日期"] = trade.ExerciseDate?.ToString("yyyy年M月d日"); + bool posiLong = swapPosition?.PositionType == (int)PositionTypeFlag.Short ? false : true; + var interestRate = interestMargin?.InterestRateDefault * 100 ?? 0; + var basicFee = trade.StockEqvNotionalReal == 0 ? 0 : ((double)((swapPosition?.PosiTradingFeePending) ?? 0) / trade.StockEqvNotionalReal) * 100; + dic["基本费率"] = (basicFee * 2).ToString("f4"); + dic["交易费用"] = (double)((swapPosition?.PosiTradingFeePending * 2) ?? 0); + dic["多头约定利率"] = "不适用"; + dic["空头约定利率"] = "不适用"; + if (posiLong) + { + dic["支付方"] = "乙方支付"; + dic["接收方"] = "甲方收取"; + } + else + { + dic["支付方"] = "甲方支付"; + dic["接收方"] = "乙方收取"; + } + if (string.IsNullOrEmpty(interestMargin?.FloatRateUnderlyingCode)) + { + dic["利率类型"] = "固定利率"; + dic["利差"] = ""; + dic["固定利率"] = ((interestMargin?.InterestRateDefault) ?? 0) * 100; + dic["参考利率"] = ""; + dic["重置频率"] = ""; + if (posiLong) + { + dic["多头约定利率"] = ((double)interestRate).ToString("0.####") + "%"; + } + else + { + dic["空头约定利率"] = ((double)interestRate).ToString("0.####") + "%"; + } + } + else + { + dic["利率类型"] = "浮动利率"; + dic["利差"] = ((interestMargin?.InterestRateDefault) ?? 0) * 10000; + dic["利差%"] = ((interestMargin?.InterestRateDefault) ?? 0) * 100; + dic["参考利率"] = interestMargin?.FloatRateUnderlyingCode; + dic["固定利率"] = ""; + dic["重置频率"] = interestMargin?.interest_rest_days; + } + dic["初始预付金支付日"] = interestMargin?.HappenDate == null ? "" : interestMargin?.HappenDate?.ToString("【yyyy】年【M】月【d】日"); + + dic["管理人名称"] = client.Manager; + var calculationBasis = interestMargin?.FloatRateUnderlyingCode; + if (!string.IsNullOrEmpty(calculationBasis)) + { + calculationBasis += interestRate > 0 ? " + " + ((double)interestRate).ToString("0.####") + "%" : ((double)interestRate).ToString("0.####") + "%"; + } + else + { + calculationBasis = ((double)interestRate).ToString("0.####") + "%"; + } + + dic["计算基准"] = calculationBasis; + dic["初始保障金率"] = ((clientMarginRate?.InitMarginRate ?? 0) * 100).ToString("0.####") + "%"; + dic["维持保障金率"] = ((clientMarginRate?.MaintenanceRate ?? 0) * 100).ToString("0.####") + "%"; + } + + var row = new JObject(); + row["序号"] = ++count; + FormatToDict("名义本金", trade.StockEqvNotionalReal, row); + row["成交日期"] = trade.TradeDate?.ToString("【yyyy】年【M】月【d】日"); + row["开始日期"] = trade.StartDate?.ToString("【yyyy】年【M】月【d】日"); + row["到期日期"] = trade.ExerciseDate?.ToString("【yyyy】年【M】月【d】日"); + row["成交日期2"] = trade.TradeDate?.ToString("【yyyy】年【M】月【d】日"); + row["户名"] = bank?.ClientName; + row["银行账号"] = bank?.Card; + row["开户行"] = bank?.Bank; + row["大额行号"] = bank?.Payment; + + FormatToDict("期初标的交割全价", (double)((swapPosition?.PosiGrossPrice) ?? 0) * 100, row); + FormatToDict("期初标的交割净价", (double)((swapPosition?.PosiNetNoFeePrice) ?? 0) * 100, row); + //row["利差"] = ((interestMargin?.InterestRateDefault) ?? 0) * 100; + //var basicFee = trade.StockEqvNotionalReal == 0 ? 0 : ((double)((swapPosition?.PosiTradingFeePending) ?? 0) / trade.StockEqvNotionalReal) * 100; + //row["基本费率"] = (basicFee * 2).ToString("f4"); + var initialMarginSum = initialMarginQuery.Sum(x => + x.InterestDirection == 2 ? x.InterestPrincipalFix * -1 : x.InterestPrincipalFix); + FormatToDict("交易费用", (double)((swapPosition?.PosiTradingFeePending * 2) ?? 0), row); + row["交易费率"] = row["基本费率"]; + FormatToDict("期初预付金", (double)initialMarginSum, row); + row["期初预付金利率"] = ((initialMarginQuery.FirstOrDefault()?.InterestRateDefault) ?? 0) * 100; + row["追加预付金返息率"] = ((clientMarginRate?.AddToMarginRebateRate) ?? 0) * 100; + if (!string.IsNullOrEmpty(underlyingCode)) + { + var um = Context.GetTradeUnderlying(underlyingCode); + row["标的代码"] = um.UnderlyingCode; + row["标的名称"] = um.UnderlyingName; + var bond = JsonHelper.Deserialize(um.ExJson) ?? + new UnderlyingBond(); + row["标的发行人"] = bond.UnderlyingIssuer; + decimal multiplier = um.IsBond() ? 100 : 1; + FormatToDict("期初价格", (double)((swapPosition?.PosiGrossPrice * multiplier) ?? 0), row); + } + else + { + row["标的名称"] = ""; + row["标的代码"] = ""; + row["期初价格"] = ""; + } + FormatToDict("数量", (double)((swapPosition?.PosiQuantity) ?? 0), row); + totalPosiQuantity += (double)((swapPosition?.PosiQuantity) ?? 0); + FormatToDict("合约乘数", (double)((swapPosition?.ContractSize) ?? 0), row); + row["方向"] = swapPosition?.PositionType switch + { + 1 => "买入", + 2 => "卖出", + _ => "" + }; + table1.Add(row); } - else - { - dic["利率类型"] = "浮动利率"; - dic["利差"] = ((interestMargin?.InterestRateDefault) ?? 0) * 10000; - dic["参考利率"] = interestMargin?.FloatRateUnderlyingCode; - dic["固定利率"] = ""; - } - if (initialMarginQuery.Any()) - { - dic["初始预付金支付日"] = initialMarginQuery.FirstOrDefault().HappenDate?.ToString("【yyyy】年【M】月【d】日"); - } - else - { - dic["初始预付金支付日"] = ""; - } - FormatToDict("标的期初全价", trade.StockEqvNotionalReal * (double)((swapPosition?.PosiGrossPrice) ?? 0), dic); - var basicFee = trade.StockEqvNotionalReal == 0 ? 0 : ((double)((swapPosition?.PosiTradingFeePending) ?? 0) / trade.StockEqvNotionalReal) * 100; - dic["基本费率"] = (basicFee * 2).ToString("f4"); - var initialMarginSum = initialMarginQuery.Sum(x => - x.InterestDirection == 2 ? x.InterestPrincipalFix * -1 : x.InterestPrincipalFix); - FormatToDict("交易费用", (double)((swapPosition?.PosiTradingFeePending * 2) ?? 0), dic); - dic["交易费率"] = dic["基本费率"]; - FormatToDict("期初预付金", (double)initialMarginSum, dic); - dic["期初预付金利率"] = ((initialMarginQuery.FirstOrDefault()?.InterestRateDefault) ?? 0) * 100; - dic["追加预付金返息率"] = ((clientMarginRate?.AddToMarginRebateRate) ?? 0) * 100; - dic["标的代码"] = underlyingCode; - dic["标的名称"] = Context.GetTradeUnderlying(underlyingCode).UnderlyingName; - - var bond = JsonHelper.Deserialize(Context.GetTradeUnderlying(underlyingCode).ExJson) ?? - new UnderlyingBond(); - dic["标的发行人"] = bond.UnderlyingIssuer; - - clientduties = clientduties.Where(x=> x.ContactTypeId.Contains("3")).OrderBy(o=>o.id).ToList();//交易下达人 - if (clientduties.Count>0) + clientduties = clientduties.Where(x => x.ContactTypeId.Contains("3")).OrderBy(o => o.id).ToList();//交易确认书邮件接收人 + if (clientduties.Count > 0) { - var clientduty= clientduties.First(); + var clientduty = clientduties.First(); var row = new JObject(); row["姓名"] = clientduty.ContactName; row["身份证号"] = clientduty.IdCardNo; @@ -168,9 +249,9 @@ namespace YLErp.Plugins.ShanXi.DocumentGenerator table2.Add(row); } + dic["table1"] = table1; dic["table2"] = table2; } - } } \ No newline at end of file diff --git a/Plugins/YLErp.Plugins.ZheShang/YLErp.Plugins.ZheShang.csproj b/Plugins/YLErp.Plugins.ZheShang/YLErp.Plugins.ZheShang.csproj index e2125f46..5c668224 100644 --- a/Plugins/YLErp.Plugins.ZheShang/YLErp.Plugins.ZheShang.csproj +++ b/Plugins/YLErp.Plugins.ZheShang/YLErp.Plugins.ZheShang.csproj @@ -18,6 +18,12 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest + PreserveNewest diff --git a/YLErpDAL/Model/SwapTradeSendEmailReq.cs b/YLErpDAL/Model/SwapTradeSendEmailReq.cs index 8879f232..4d41f06c 100644 --- a/YLErpDAL/Model/SwapTradeSendEmailReq.cs +++ b/YLErpDAL/Model/SwapTradeSendEmailReq.cs @@ -8,9 +8,14 @@ namespace YLErp.Model { public class SwapTradeSendEmailReq { - public SwapTradeSendEmailReq() { - tradeIds = new List(); + //public SwapTradeSendEmailReq() { + // tradeIds = new List(); + //} + //public List tradeIds; + public SwapTradeSendEmailReq() + { + contractCodes = new List(); } - public List tradeIds; + public List contractCodes; } } diff --git a/YLErpDAL/Model/SwapTradeSendEmailResp.cs b/YLErpDAL/Model/SwapTradeSendEmailResp.cs index 26542925..b74aa4d5 100644 --- a/YLErpDAL/Model/SwapTradeSendEmailResp.cs +++ b/YLErpDAL/Model/SwapTradeSendEmailResp.cs @@ -8,7 +8,7 @@ namespace YLErp.Model { public class SwapTradeSendEmailResp { - public int tradeId { get; set; } + public string contractCode { get; set; } public string send_email_result { get; set; } } } diff --git a/YLErpDAL/Models/DownloadDocReq.cs b/YLErpDAL/Models/DownloadDocReq.cs index 6097b957..574b843a 100644 --- a/YLErpDAL/Models/DownloadDocReq.cs +++ b/YLErpDAL/Models/DownloadDocReq.cs @@ -26,6 +26,8 @@ /// 确认书编号 /// public string ContractCode { get; set; } + + public List ContractCodes { get; set; } = null; /// /// 交易资金Id /// diff --git a/YLErpDAL/Modules/SwapModule/SwapEndConfirmService.cs b/YLErpDAL/Modules/SwapModule/SwapEndConfirmService.cs index 151cf8da..11c1e0d3 100644 --- a/YLErpDAL/Modules/SwapModule/SwapEndConfirmService.cs +++ b/YLErpDAL/Modules/SwapModule/SwapEndConfirmService.cs @@ -169,36 +169,46 @@ namespace YLErp.Modules.SwapModule /// /// /// - public string SendConfirmEamil(int tradeId) + public string SendConfirmEamil(string contractCode) { - var tradeContract = DbContext.trade_contract_r.Where(x => x.IsValid && x.TradeId == tradeId && x.Type == ContractTypeEnum.Trade).FirstOrDefault(); - if (tradeContract == null) + //var tradeContract = DbContext.trade_contract_r.Where(x => x.IsValid && x.TradeId == tradeId && x.Type == ContractTypeEnum.Trade).FirstOrDefault(); + //if (tradeContract == null) + //{ + // return ""; + //} + var contracts = DbContext.trade_contract_r.Where(o => o.ContractCode == contractCode && o.Type == ContractTypeEnum.Trade && o.IsValid).ToArray(); + foreach (var tradeContract in contracts) { - return ""; + tradeContract.send_email_result = "发送中"; + DbContext.SaveChanges(); } - tradeContract.send_email_result = "发送中"; + + var sendResult = SendEmail(contractCode); + foreach (var tradeContract in contracts) + { + if (string.IsNullOrEmpty(sendResult)) + { + tradeContract.send_email_result = "已发送"; + } + else + { + tradeContract.send_email_result = "发送失败:" + sendResult; + } + } + DbContext.SaveChanges(); - var sendResult = SendEmail(tradeId); - if (string.IsNullOrEmpty(sendResult)) - { - tradeContract.send_email_result = "已发送"; - } - else - { - tradeContract.send_email_result = "发送失败:" + sendResult; - } - DbContext.SaveChanges(); - return tradeContract.send_email_result; + return string.IsNullOrEmpty(sendResult) ? "已发送" : "发送失败:" + sendResult; } /// /// 发送邮件 /// /// - private string SendEmail(int tradeId) + private string SendEmail(string contractCode) { var baseUrl = Environment.GetEnvironmentVariable("BondOmsInterface_BaseUrl"); - var sendEmailPUrl = "/swap/email/confirm/send?tradeId=" + tradeId; + //换成contractCode + var sendEmailPUrl = "/swap/email/confirm/send?contractCode=" + contractCode; if (!string.IsNullOrEmpty(baseUrl)) { var httpHelper = new HttpHelper(baseUrl, null); @@ -209,7 +219,7 @@ namespace YLErp.Modules.SwapModule } else { - LogFactory.GetLogger().Error("发送邮件失败:tradeId=" + tradeId, new Exception(result?.message)); + LogFactory.GetLogger().Error("发送邮件失败:contractCode=" + contractCode, new Exception(result?.message)); return result?.message ?? "发送邮件失败"; } } diff --git a/YLErpDAL/Modules/TradeModule/DealModule/TradeContractGenerateService.cs b/YLErpDAL/Modules/TradeModule/DealModule/TradeContractGenerateService.cs index b9c4add8..64e5e57a 100644 --- a/YLErpDAL/Modules/TradeModule/DealModule/TradeContractGenerateService.cs +++ b/YLErpDAL/Modules/TradeModule/DealModule/TradeContractGenerateService.cs @@ -1,8 +1,10 @@ using BaseOUDAL; using System.Collections.Concurrent; +using System.Drawing.Printing; using YLErp.Configuration; using YLErp.DBModels.Consts; using YLErp.Model; +using YLErp.Model.Enum; using YLErp.Models; using YLErp.Modules.TradeDalModule; using YLErp.Modules.TradeModule.DocGenerateModule; @@ -207,187 +209,34 @@ namespace YLErp.Modules.TradeModule.DealModule List results = new List(); List error = new List(); List file = new List(); - if (PS.Config.Is国泰君安 || PS.Config.Is厦门象屿) - { - var Tradelist = new TradeDalService(this).GetTradeOrEodTradeOfTidAPid(tradeIds, SystemValueDate, false, false); - using (var basedb = new ErpBaseContext()) - { - if (Tradelist.Any(O => O.IsGroup > 0)) - { - int count = Tradelist.Where(O => O.IsGroup != 2).GroupBy(O => O.IsGroup).Count(); - if (count > 1) - { - throw new ServiceException("不应勾选多个非黑盒标的的交易"); - } - var list = Tradelist.Where(x => x.TradeType == "结构化交易"); - var group = list.GroupBy(O => new { O.ClientId, O.StructureType }).ToDictionary(K => K.Key, V => V.Select(O => O.id).ToList()); - foreach (var item in group) - { - if (item.Key.StructureType == "折价") - { - var list2 = list.Where(x => item.Value.Contains(x.id) && x.TradeType == "结构化交易").ToList(); - list2.ForEach(x => - { - var options = x.Propertys?.Where(o => o.name == "看涨看跌").ToList(); - if (options != null && options.Any()) - { - x.ExtendOptionTypeInfo = JsonHelper.Serialize(options); - } - else - { - throw new ServiceException("看涨看跌不能为空:" + x.TradeNumber); - } - }); - var group2 = list2.GroupBy(O => O.ExtendOptionTypeInfo).ToDictionary(K => K.Key, V => V.Select(O => O.id).ToList()); - foreach (var item2 in group2) - { - groupGenerateHandle_Date(item2.Value, docType, startDate, endDate, results, error, file); - if (error.Any()) break; - } - } - else - { - groupGenerateHandle_Date(item.Value, docType, startDate, endDate, results, error, file); - if (error.Any()) break; - } - } - - var swapList = Tradelist.Where(x => x.TradeType == "收益互换" && x.ParentTradeId == 0); - foreach (var item in swapList) - { - groupGenerateHandle_Date(new List { item.id }, docType, startDate, endDate, results, error, file); - } - } - } - - if (results.Count == 0) - { - var structTradeQuery = new TradeDalService(this).GetTradeOrEodTradeOfTidASid(tradeIds, SystemValueDate).Where(c => c.TradeType != "结构化交易"); - List instrumentTypeArr = new List() { ConsGlobal.InstrumentType.Stock, ConsGlobal.InstrumentType.StockIndex, ConsGlobal.InstrumentType.StockIF }; - DataCacheProvider.GetUnderlyingDataSource().AsQueryable(); - if (structTradeQuery.Any(O => instrumentTypeArr.Contains(getUnderlyingInstrumentType(O.UnderlyingId)) || O.TradeType == "雪球期权")) - { - //暂时将所有子交易都作为判断依据,等拿到模板后再根据模板做调整更改; - //目前是否为权益类的判断条件只是是否是股票,没有考虑IC IF等品种; - int count = structTradeQuery.GroupBy(O => new { UnderlyingInstrumentType = (instrumentTypeArr.Contains(getUnderlyingInstrumentType(O.UnderlyingId)) || O.TradeType == "雪球期权") ? 1 : 0 }).Count(); - if (count > 1) - { - throw new ServiceException("不应勾选多个非股票(含股指期货)标的的交易"); - } - var group = structTradeQuery.GroupBy(O => new { O.ClientId, O.TradeType }).ToDictionary(K => K.Key, V => V.Select(O => O.id).ToList()); - - foreach (var item in group) - { - if (item.Key.TradeType == "雪球期权") - { - if (structTradeQuery.Any(O => !instrumentTypeArr.Contains(getUnderlyingInstrumentType(O.UnderlyingId)))) - { - var group2 = DbContext.trade.Where(c => item.Value.Contains(c.id)).AsEnumerable().GroupBy(m => m.OptionType).ToDictionary(K => K.Key, V => V.Select(O => O.id).ToList()); - foreach (var item2 in group2) - { - groupGenerateHandle_Date(item2.Value, docType, startDate, endDate, results, error, file); - if (error.Any()) break; - } - } - else - { - var group2 = DbContext.trade_snowball.Where(c => item.Value.Contains(c.TradeId)).AsEnumerable().GroupBy(m => m.IsFixedCoupon).ToDictionary(K => K.Key, V => V.Select(O => O.TradeId).ToList()); - foreach (var item2 in group2) - { - if (item2.Key) - { - groupGenerateHandle_Date(item2.Value, docType, startDate, endDate, results, error, file); - if (error.Any()) break; - } - else - { - var group3 = DbContext.trade.Where(c => item2.Value.Contains(c.id)).AsEnumerable().GroupBy(m => m.OptionType).ToDictionary(K => K.Key, V => V.Select(O => O.id).ToList()); - foreach (var item3 in group3) - { - groupGenerateHandle_Date(item3.Value, docType, startDate, endDate, results, error, file); - if (error.Any()) break; - } - } - } - } - } - else - { - groupGenerateHandle_Date(item.Value, docType, startDate, endDate, results, error, file); - if (error.Any()) break; - } - } - } - } - } - else if (PS.Config.Is润和) + if (PS.Config.Company == CompanyEnum.浙商) { var TradeQuery = new TradeDalService(this).GetTradeOrEodTradeOfTidASid(tradeIds, SystemValueDate).Where(c => (c.TradeType != "结构化交易" || c.IsGroup == 1) && tradeIds.Contains(c.id)); if (TradeQuery.Any()) { - var group = TradeQuery.GroupBy(O => new { O.ClientId, O.TradeDate }).ToDictionary(K => K.Key, V => V.Select(O => O.id).ToList()); - foreach (var item in group) + var Ids = TradeQuery.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(); + foreach (var item in TradeQuery) { - var group2 = DbContext.trade.Where(c => item.Value.Contains(c.id) && c.TradeType == "远期").Select(O => O.id).ToList(); - if (group2.Any()) - { - groupGenerateHandle(group2, docType, startDate, endDate, results, error, file); - if (error.Any()) break; - } - var group4 = DbContext.trade.Where(c => item.Value.Contains(c.id) && c.TradeType == "亚式期权").Select(O => O.id).ToList(); - if (group4.Any()) - { - groupGenerateHandle(group4, docType, startDate, endDate, results, error, file); - if (error.Any()) break; - } - var group3 = DbContext.trade.Where(c => item.Value.Contains(c.id) && c.TradeType != "远期" && c.TradeType != "亚式期权").Select(O => O.id).ToList(); - if (group3.Any()) - { - groupGenerateHandle(group3, docType, startDate, endDate, results, error, file); - if (error.Any()) break; - } + item.swap_positions.Add(swapPositions.FirstOrDefault(o => o.SwapTradeId == item.id)); } - } - } - else if (PS.Config.Is东吴) - { - var TradeQuery = new TradeDalService(this).GetTradeOrEodTradeOfTidASid(tradeIds, SystemValueDate).Where(c => (c.TradeType != "结构化交易" || c.IsGroup == 1) && tradeIds.Contains(c.id)); - if (TradeQuery.Any()) - { - var group = TradeQuery.GroupBy(O => new { O.ClientId, O.TradeDate }).ToDictionary(K => K.Key, V => V.Select(O => O.id).ToList()); + // 按照客户ID、交易日期、多空头进行分组 + var group = TradeQuery.GroupBy(O => new { O.ClientId, O.TradeDate, O.swap_positions.FirstOrDefault().PositionType}) + .ToDictionary(K => K.Key, V => V.Select(O => O.id).ToList()); + foreach (var item in group) { - var query = from t in DbContext.trade - join tc in DbContext.trade_cash on t.id equals tc.TradeId - where t.ClientId == item.Key.ClientId && - tc.ValueDate == item.Key.TradeDate && !tc.IsDeleted && tc.Action == ClientCashInCashOut.系统操作_期权费 - select new { t.id }; - if (query.Any()) - { - groupGenerateHandle(query.Select(l => l.id).ToList(), docType, startDate, endDate, results, error, file); - } - } - } - } - else if(PS.Config.Is物产中大) - { - var TradeQuery = new TradeDalService(this).GetTradeOrEodTradeOfTidASid(tradeIds, SystemValueDate).Where(c => (c.TradeType != "结构化交易" || c.IsGroup == 1) && tradeIds.Contains(c.id)); - if (TradeQuery.Any()) - { - var group = TradeQuery.GroupBy(O => new { O.ClientId, O.TradeDate,O.TradeType }).ToDictionary(K => K.Key, V => V.Select(O => O.id).ToList()); - foreach (var item in group) - { - if (item.Value.Count > 10) - { - throw new ServiceException("同客户同日期同类型交易生成超过限制!"); - } + // 如果是结构化交易或特殊交易类型需要额外处理,这里简化处理 var query = from t in DbContext.trade join tc in DbContext.trade_cash on t.id equals tc.TradeId where item.Value.Contains(tc.TradeId) && !tc.IsDeleted select new { t.id }; + if (query.Any()) { - groupGenerateHandle(query.Select(l => l.id).ToList(), docType, startDate, endDate, results, error, file); + // 使用现有的 groupGenerateHandle 方法来处理每组交易 + groupGenerateHandle(query.Select(l => l.id).Distinct().ToList(), docType, startDate, endDate, results, error, file); } } } @@ -681,6 +530,97 @@ namespace YLErp.Modules.TradeModule.DealModule return query.ToArray(); } + + public SearchListResult GetConfirmBookListByClient(ClientConfirmBookListReq req) + { + var result = new SearchListResult(); + var contractList = new List(); + // Fix for the issue: CS1525, CS0746, CS1003 + // The problem lies in the incorrect syntax for defining an anonymous type. + // Anonymous type members must be declared using member assignment or simple names. + + var query = from t in DbContext.trade.AsNoTracking().Where(x => x.TradeType == "收益互换" && x.ValidState != "InValid") + join tcrs in DbContext.trade_contract_r + on t.id equals tcrs.TradeId into tcrsGroup + from tcr in tcrsGroup.Where(r => r.IsValid && r.Type == ContractTypeEnum.Trade).DefaultIfEmpty() + join tcds in DbContext.trade_contract_document + on tcr.ContractCode equals tcds.Code into tcdsGroup + from tcd in tcdsGroup.DefaultIfEmpty() + join sp in DbContext.swap_position.AsNoTracking().Where(s => s.IsInitial && s.PositionType > 0 && !s.Invalid) + on t.id equals sp.SwapTradeId + select new + { + t.id, + t.TradeDate, + tcr.ContractCode, + t.ClientId, + t.ClientNumber, + t.ClientName, + tcr.send_email_result, + tcd.Status, + tcd.RelativePath, + tcd.SealResult, + ContractId = tcr != null ? tcr.id : 0, + sp.PositionType, + t.SentMailCount + }; + + if (req.StartDate != null && req.StartDate != DateTime.MinValue) + { + query = query.Where(o => o.TradeDate >= req.StartDate); + } + + if (req.EndDate != null && req.EndDate != DateTime.MaxValue) + { + query = query.Where(o => o.TradeDate <= req.EndDate); + } + + if (req.ClientIds != null && req.ClientIds.Count > 0) + { + query = query.Where(o => req.ClientIds.Contains(o.ClientId)); + } + + if (!string.IsNullOrEmpty(req.ContractCode)) + { + query = query.Where(o => o.ContractCode.Contains(req.ContractCode)); + } + + if (req.PositionTypes!= null && req.PositionTypes.Count() > 0) + { + query = query.Where(o => req.PositionTypes.Contains(o.PositionType)); + } + + var contractGroups = query.AsEnumerable() + .GroupBy(x => new { x.TradeDate, x.ClientId, x.PositionType }) + .Select(group => group.ToList()) + .ToList(); + + // 构建返回结果 + foreach (var group in contractGroups) + { + var sealResult = group.FirstOrDefault().SealResult; + contractList.Add(new clientContractR + { + id = group.FirstOrDefault().id, + ContractCode = group.FirstOrDefault().ContractCode, + TradeDate = group.FirstOrDefault().TradeDate.Value, + ClientNumber = group.FirstOrDefault().ClientNumber, + ClientName = group.FirstOrDefault().ClientName, + StampStatus = group.FirstOrDefault().Status, + EmailResult = group.FirstOrDefault().send_email_result, + ContractDocUrl = group.FirstOrDefault().RelativePath, + tradeIds = group.Select(x => x.id).Distinct().ToList(), + SealResult = sealResult != null ? Enum.GetName(typeof(SealResultEnum), sealResult) : "", + HasGeneratedConfirmBook = group.FirstOrDefault().ContractId != 0, + ContractId = group.FirstOrDefault().ContractId, + tradeCount = group.Select(x => x.id).Distinct().Count(), + PositionType = group.FirstOrDefault().PositionType, + SentMailCount = group.FirstOrDefault().SentMailCount ?? 0, + }); + } + result = contractList.AsQueryable().ToSearchList(req); + return result; + } } /// @@ -696,4 +636,58 @@ namespace YLErp.Modules.TradeModule.DealModule public Exception Exception; } + + public class ClientConfirmBookListReq : BaseSearchReq + { + //合约编号 + public string ContractCode { get; set; } + + //开仓起始时间 + public DateTime? StartDate { get; set; } + + //开仓结束时间 + public DateTime? EndDate { get; set; } + + //客户 + public List? ClientIds { get; set; } + + public List? PositionTypes { get; set; } + + } + + public class clientContractR + { + public int id { get; set; } + public string ContractCode { get; set; } + + public DateTime TradeDate { get; set; } + + public string ClientNumber { get; set; } + + public string ClientName { get; set; } + + public string StampStatus { get; set; } + + public string EmailResult { get; set; } + + public List tradeIds { get; set;} + + public string ContractDocUrl { get; set; } + + public string SealResult { get; set; } + + + public string ContractEncryptId { get; set; } + + public bool HasGeneratedConfirmBook { get; set; } + + public int ContractId { get; set; } + + public int PositionType { get; set; } + + public int tradeCount { get; set; } + + public int SentMailCount { get; set; } + + } } diff --git a/YLErpDAL/Modules/TradeModule/DocGenerateModule/ConfirmationGenerateContext.cs b/YLErpDAL/Modules/TradeModule/DocGenerateModule/ConfirmationGenerateContext.cs index e166578f..acc3b1cc 100644 --- a/YLErpDAL/Modules/TradeModule/DocGenerateModule/ConfirmationGenerateContext.cs +++ b/YLErpDAL/Modules/TradeModule/DocGenerateModule/ConfirmationGenerateContext.cs @@ -21,6 +21,7 @@ using YLErp.Configuration; using YLErp.DBModels; using YLErp.DBModels.Abstract; using YLErp.DBModels.Consts; +using YLErp.DBModels.Enums; using YLErp.Helpers; using YLErp.Model; using YLErp.Models; @@ -1323,6 +1324,13 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule { return UniqueTimeId.GetStr(); } + if (Trade.TradeType == "收益互换") + { + var posi = GetSwapPositions(Trade.id, true).FirstOrDefault(); + var isLong = posi?.PositionType == (int)PositionTypeFlag.Short ? false : true; + + return "ZSZQ-" + _client.Number + "-" + Trade.TradeDate?.ToString("yyyyMMdd") + (isLong ? "-L" : "-S"); + } return Trade.TradeNumber; } /// diff --git a/YLErpDAL/Modules/TradeModule/DocGenerateModule/ConfirmationGenerateService.cs b/YLErpDAL/Modules/TradeModule/DocGenerateModule/ConfirmationGenerateService.cs index 6f5e1b10..21b88550 100644 --- a/YLErpDAL/Modules/TradeModule/DocGenerateModule/ConfirmationGenerateService.cs +++ b/YLErpDAL/Modules/TradeModule/DocGenerateModule/ConfirmationGenerateService.cs @@ -162,38 +162,48 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule var tradeContractGroupTradeIds = tradeDic.Values.Select(x => x.trade.id).ToList(); //var childs = DbContext.trade.Where(x => tradeContractGroupTradeIds.Contains(x.ParentTradeId ?? 0)); var childs = service.GetStructTradeFromTradeOrEodTrade(tradeContractGroupTradeIds, SystemValueDate, true); - foreach (var tradeContractGroup in tradeDic.Values) + if (PS.Config.Company == Configuration.CompanyEnum.浙商) { - if ((tradeContractGroup.trade.TradeType != "结构化交易" && tradeContractGroup.trade.TradeType != "收益互换" && tradeContractGroup.trade_cash == null) - || (tradeContractGroup.trade.TradeType == "结构化交易" && tradeContractGroup.trade.IsGroup == 0 && tradeContractGroup.trade.SubTrades.Any(O => O.trade_cash == null))) + if (generatorV2 != null) { - resultList.Add(new TradeDocGenerateResult(tradeContractGroup.trade) - { - ErrorMessage = "缺少现金交割记录" - }); - } - //插件版本 - else if (generatorV2 != null) - { - var result = GenerateSingleV2(generatorV2, tradeContractGroup, docType); + var result = GenerateSingleV2(generatorV2, null, docType , allTradeList); resultList.Add(result); } - else - { - var result = GenerateSingleV1(tradeContractGroup, docType); - resultList.Add(result); - //if (!string.IsNullOrWhiteSpace(result.OutputFilePath)) - //{ - // tradeContractGroup.trade.HasGeneratedConfirmBook = 1; - // var childTds = childs.Where(x => x.ParentTradeId == tradeContractGroup.trade.id); - // foreach (var child in childTds) - // { - // child.HasGeneratedConfirmBook = 1; - // } - //} - } } - + else + { + foreach (var tradeContractGroup in tradeDic.Values) + { + if ((tradeContractGroup.trade.TradeType != "结构化交易" && tradeContractGroup.trade.TradeType != "收益互换" && tradeContractGroup.trade_cash == null) + || (tradeContractGroup.trade.TradeType == "结构化交易" && tradeContractGroup.trade.IsGroup == 0 && tradeContractGroup.trade.SubTrades.Any(O => O.trade_cash == null))) + { + resultList.Add(new TradeDocGenerateResult(tradeContractGroup.trade) + { + ErrorMessage = "缺少现金交割记录" + }); + } + //插件版本 + else if (generatorV2 != null) + { + var result = GenerateSingleV2(generatorV2, tradeContractGroup, docType); + resultList.Add(result); + } + else + { + var result = GenerateSingleV1(tradeContractGroup, docType); + resultList.Add(result); + //if (!string.IsNullOrWhiteSpace(result.OutputFilePath)) + //{ + // tradeContractGroup.trade.HasGeneratedConfirmBook = 1; + // var childTds = childs.Where(x => x.ParentTradeId == tradeContractGroup.trade.id); + // foreach (var child in childTds) + // { + // child.HasGeneratedConfirmBook = 1; + // } + //} + } + } + } if (generatorV2 == null) { DbContext.SaveChanges(); @@ -205,14 +215,21 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule /// /// /// - private TradeDocGenerateResult GenerateSingleV2(ITradeConfirmationGenerator generator, trade_contract_group tradeContractGroup, string docType = "DOCX") + private TradeDocGenerateResult GenerateSingleV2(ITradeConfirmationGenerator generator, trade_contract_group tradeContractGroup, string docType = "DOCX", List allTrades = null) { try { //修改调用的构造方法 - List trades = new List() { tradeContractGroup.trade }; + List trades = new List(); + if (allTrades != null && allTrades.Count() > 0) + { + trades = allTrades; + }else + { + trades = new List() { tradeContractGroup.trade }; + } List ids = new List(); - if (tradeContractGroup.trade != null && tradeContractGroup.trade.trade_cash != null) + if (tradeContractGroup != null && tradeContractGroup.trade != null && tradeContractGroup.trade.trade_cash != null) { ids.Add(tradeContractGroup.trade.trade_cash.id); } @@ -759,27 +776,26 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule } } - public (bool, string, DateTime, string) UploadContractFileNew(string encryptId, UploadFileModel uploadFileModel) + public (bool, string, DateTime, string) UploadContractFileNew(string contractCode, UploadFileModel uploadFileModel) { try { var msg = ""; #region 验证 - if (string.IsNullOrWhiteSpace(encryptId)) + if (string.IsNullOrWhiteSpace(contractCode)) { - return (false, "请传入id", DateTime.Now, ""); + return (false, "请传入参数", DateTime.Now, ""); } - - var intid = DataProtectHelper.DecryptInt(encryptId); + var db = DbContextFactory.GetYLDbContext(); - var contractDoc = db.trade_contract_document.Find(intid); + var contractDoc = db.trade_contract_document.FirstOrDefault(d => d.Code == contractCode ); var contractDocRArr = db.trade_contract_r.Where(O => O.ContractCode == contractDoc.Code && O.Type == contractDoc.Type && O.IsValid).ToArray(); - var contractDocR = contractDocRArr.FirstOrDefault(); - if (contractDoc == null || contractDocR == null) + var contractDocRF = contractDocRArr.FirstOrDefault(); + if (contractDoc == null || contractDocRF == null) { return (false, "没有相关的确认书文档", DateTime.Now, ""); } @@ -806,9 +822,9 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule #endregion var tradeNumber = "未知"; - if (contractDocR != null) + if (contractDocRF != null) { - tradeNumber = contractDocR.TradeNumber; + tradeNumber = contractDocRF.TradeNumber; } var filePath = Path.Combine(OtcAppContext.AppDocsPath, "contractdoc", "output"); @@ -841,8 +857,12 @@ namespace YLErp.Modules.TradeModule.DocGenerateModule } #region 更新数据 + var confrimService = new TradeConfirmService(OptUser, db); + foreach (var contractDocR in contractDocRArr) + { + new TradeConfirmService(OptUser, db).EditReportStatus(contractDocR.TradeId, true); + } - new TradeConfirmService(OptUser, db).EditReportStatus(contractDocR.TradeId, true); db.SaveChanges(); #endregion diff --git a/YLErpWeb/App_Data/Menus.txt b/YLErpWeb/App_Data/Menus.txt index dce08627..aad3ddce 100644 --- a/YLErpWeb/App_Data/Menus.txt +++ b/YLErpWeb/App_Data/Menus.txt @@ -21,7 +21,7 @@ {Name:"成交簿记",Rights:["结算管理-成交簿记"],Url:"swaptrade2/SwapflowList"}, {Name:"资金记录",Rights:["结算管理-出入金维护"],Url:"entryexit/entryexitList"}, {Name:"收盘操作",Rights:["结算管理-收盘操作"],Url:"eod_trade_value/eodExec"}, - {Name:"交易确认书",Rights:["结算管理-交易确认书"],Url:"TradeConfirmBook/Index"}, + {Name:"交易确认书",Rights:["结算管理-交易确认书"],Url:"TradeConfirmBook/ConfirmBookListByClient"}, {Name:"结算确认书",Rights:["结算管理-结算确认书"],Url:"swaptrade2/tradeEndConfirmList"}, {Name:"每日估值报告",Rights:["结算管理-每日估值报告"],Url:"clientbalance/TradeMarketReport"}, ] diff --git a/YLErpWeb/Controllers/SwapTrade2Controller.cs b/YLErpWeb/Controllers/SwapTrade2Controller.cs index 0fbe5358..ce01c9a2 100644 --- a/YLErpWeb/Controllers/SwapTrade2Controller.cs +++ b/YLErpWeb/Controllers/SwapTrade2Controller.cs @@ -1033,10 +1033,10 @@ namespace YLErp.Web.Controllers /// /// /// - public JsonResult SendConfimEmail(int tradeId) + public JsonResult SendConfimEmail(string contractCode) { SwapEndConfirmService service = new SwapEndConfirmService(CurUser); - var result = service.SendConfirmEamil(tradeId); + var result = service.SendConfirmEamil(contractCode); return JsonSuccess(result); } } diff --git a/YLErpWeb/Controllers/TradeConfirmBookController.cs b/YLErpWeb/Controllers/TradeConfirmBookController.cs index c615c8e7..4be41d79 100644 --- a/YLErpWeb/Controllers/TradeConfirmBookController.cs +++ b/YLErpWeb/Controllers/TradeConfirmBookController.cs @@ -6,6 +6,7 @@ using YLErp.CustomizedBizLogic; using YLErp.DBModels.Consts; using YLErp.Enums; using YLErp.Model; +using YLErp.Model.Enum; using YLErp.Modules.AppModule; using YLErp.Modules.ClientModule; using YLErp.Modules.ReportModule; @@ -75,6 +76,17 @@ namespace YLErp.Web.Controllers return JsonError("申万定制功能,当前已不支持"); } + public ActionResult ConfirmBookListByClient() + { + return View(); + } + + public JsonResult clientConfirmQuery(ClientConfirmBookListReq req) + { + var result = new TradeContractGenerateService(CurUser).GetConfirmBookListByClient(req); + return Json(result); + } + public async Task SentMail(string enid, List reciver) { var result = await DoSendMailSywg(enid, reciver); diff --git a/YLErpWeb/Controllers/tradeController.cs b/YLErpWeb/Controllers/tradeController.cs index bcbab546..f68cfb89 100644 --- a/YLErpWeb/Controllers/tradeController.cs +++ b/YLErpWeb/Controllers/tradeController.cs @@ -2031,10 +2031,10 @@ namespace YLErp.Web.Controllers } return JsonError(msg); } - public ActionResult UploadContractFileNew(string encryptId) + public ActionResult UploadContractFileNew(string contractCode) { var uploadFileModel = Request.Form.Files.Count > 0 ? Request.Form.Files[0].ToUploadFileModel() : null; - var (flag, msg, optDate, stampPath) = new ConfirmationGenerateService(CurUser).UploadContractFileNew(encryptId, uploadFileModel); + var (flag, msg, optDate, stampPath) = new ConfirmationGenerateService(CurUser).UploadContractFileNew(contractCode, uploadFileModel); if (flag) { @@ -6325,6 +6325,11 @@ namespace YLErp.Web.Controllers isSelect = true; query = query.Where(O => req.TradeCashIds.Contains(O.TradeCashId)); } + if (req.ContractCodes != null && req.ContractCodes.Any(O => !string.IsNullOrWhiteSpace(O))) + { + isSelect = true; + query = query.Where(O => req.ContractCodes.Contains(O.ContractCode)); + } if (req.DocType != null) { query = query.Where(O => O.Type == req.DocType); @@ -6353,13 +6358,15 @@ namespace YLErp.Web.Controllers } } - var datas = query.ToList(); + var datas = query.ToList(); if (datas.Count == 0) { return ShowError("未找到确认书文件,请确认筛选条件是否有效!"); } + datas = datas.DistinctBy(O => O.ContractCode).ToList(); + var filePathList = new List(datas.Count * req.docpdf.Count()); var contractBLL = new TradeContractBLL(CurUser); diff --git a/YLErpWeb/Hubs/SwapConfirmSendEmailHub.cs b/YLErpWeb/Hubs/SwapConfirmSendEmailHub.cs index 82f02bcd..90d4c3d5 100644 --- a/YLErpWeb/Hubs/SwapConfirmSendEmailHub.cs +++ b/YLErpWeb/Hubs/SwapConfirmSendEmailHub.cs @@ -12,7 +12,7 @@ namespace YLErp.Web.Hubs { private static bool isProcessing = false; static readonly Dictionary _dic = new Dictionary(StringComparer.OrdinalIgnoreCase); - static readonly Dictionary _clientProgressDic = new Dictionary(); + static readonly Dictionary _clientProgressDic = new Dictionary(); public async Task StartProcessing(string jsonString) { SwapTradeSendEmailReq req = JsonHelper.Deserialize(jsonString); @@ -33,11 +33,11 @@ namespace YLErp.Web.Hubs if (isProcessing) { await client.SendAsync("ExceptionMessage", "正在发送邮件,请稍后再试"); - foreach (var tradeId in req.tradeIds) { - var msg= GetProcess(tradeId,async (d) => { - await client.SendAsync("UpdateProgress", getUpdateProcess(tradeId, d)); + foreach (var contractCode in req.contractCodes) { + var msg= GetProcess(contractCode, async (d) => { + await client.SendAsync("UpdateProgress", getUpdateProcess(contractCode, d)); }); - await client.SendAsync("UpdateProgress", getUpdateProcess(tradeId, msg)); + await client.SendAsync("UpdateProgress", getUpdateProcess(contractCode, msg)); } await client.SendAsync("ProcessCompleted", ""); return; @@ -47,10 +47,11 @@ namespace YLErp.Web.Hubs isProcessing = true; _clientProgressDic.Clear(); _dic.Clear(); - foreach (var tradeId in req.tradeIds) + //根据tradeIds 获取contractCode + foreach (var contractCode in req.contractCodes) { - _clientProgressDic[tradeId] = "发送中"; - await client.SendAsync("UpdateProgress", getUpdateProcess(tradeId, "发送中")); + _clientProgressDic[contractCode] = "发送中"; + await client.SendAsync("UpdateProgress", getUpdateProcess(contractCode, "发送中")); if (PS.Config.ErpElement.MailMessageRateLimit > 0) { var milliSeconds = 60d * 1000 / PS.Config.ErpElement.MailMessageRateLimit; @@ -67,9 +68,9 @@ namespace YLErp.Web.Hubs _dic["sendEmail"] = DateTime.Now; } } - var result = service.SendConfirmEamil(tradeId); - _clientProgressDic[tradeId] = result; - await client.SendAsync("UpdateProgress", getUpdateProcess(tradeId, result)); + var result = service.SendConfirmEamil(contractCode); + _clientProgressDic[contractCode] = result; + await client.SendAsync("UpdateProgress", getUpdateProcess(contractCode, result)); } isProcessing = false; await client.SendAsync("ProcessCompleted", ""); @@ -80,26 +81,27 @@ namespace YLErp.Web.Hubs await client.SendAsync("ExceptionMessage", ex.Message); } } - private string GetProcess(int tradeId,Action action) + private string GetProcess(string contractCode, Action action) { - if (_clientProgressDic.ContainsKey(tradeId)) + if (_clientProgressDic.ContainsKey(contractCode)) { - string process= _clientProgressDic[tradeId]; + string process= _clientProgressDic[contractCode]; if (action != null&& process=="发送中") { action.Invoke(process); Thread.Sleep(1000); - return GetProcess(tradeId, action); + return GetProcess(contractCode, action); } return process; } return ""; } - private string getUpdateProcess(int tradeId,string msg) + + private string getUpdateProcess(string contractCode, string msg) { SwapTradeSendEmailResp resp = new SwapTradeSendEmailResp() { - tradeId = tradeId, + contractCode = contractCode, send_email_result = msg }; return JsonHelper.Serialize(resp); diff --git a/YLErpWeb/Views/TradeConfirmBook/ConfirmBookListByClient.cshtml b/YLErpWeb/Views/TradeConfirmBook/ConfirmBookListByClient.cshtml new file mode 100644 index 00000000..81f31b91 --- /dev/null +++ b/YLErpWeb/Views/TradeConfirmBook/ConfirmBookListByClient.cshtml @@ -0,0 +1,84 @@ +@{ + ViewBag.Title = "交易确认书"; // 设置页面标题 + Layout = "~/Views/Shared/_MainLayout.cshtml"; // 指定布局页面 + + // 定义页面JS对象,用于传递后端数据到前端JS + var pageObj = new + { + // 获取客户确认书列表数据的URL + clientConfirmQueryUrl = Url.Action("clientConfirmQuery", "TradeConfirmBook"), + // 获取所有客户数据的URL (假设存在一个获取客户列表的方法) + getAllClientsUrl = Url.Action("GetAllClient", "ClientData"), // 请确保ClientDataController中有GetAllClient方法或使用正确的获取客户数据方法 + ConfirmBookStampStatus = PS.Config.ErpElement.ConfirmBookStampStatus, + valuedate = valuedateBLL.ValueDate.ToString("yyyy-MM-dd"), + 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.已执行}", + SelectConfirmationBookTemplate = GlobalConfig.SelectConfirmationBookTemplate == true, + templateNames = ViewBag.TemplateNames, + IsAutoSealAndUploadFiles = YLErp.PS.GetErpConfig().IsAutoSealAndUploadFiles, + IsZheQi = PS.Config.Is浙期, + IsAutoSealAfterGeneratedBook = PS.GetErpConfig().IsAutoSealAfterGeneratedBook, + canGenerate = CurUser.结算管理_交易确认书生成, + canSendEmail = CurUser.结算管理_交易确认书邮件发送 + }; +} + +@section CSS{ + +} + +@section JS{ + @* 引入必要的JS库 *@ + + + + @* 引入此页面对应的JS逻辑文件 *@ + +} + +@* 搜索区域 *@ +
+ @* 合约编号输入框 *@ + @Html.ShortInput("ContractCode", "合约编号") + @* 客户名称下拉框 (使用MyAceDropdownInput,假设ClientDataModel.GetAllClient()能获取所需数据格式) *@ + @Html.MyAceDropdownInput("ClientIds", "客户名称", ClientDataModel.GetAllClient(), true) @* true表示允许多选 *@ + @* 开仓日期范围选择 *@ + @Html.SearchDateRange("OpenDate", "开仓日期") + @* 多空头方向选择 *@ + @Html.MyAceDropdownInput("MultiHead", "多空头方向", new List + { + new SelectListItem { Text = "多头", Value = "1" }, + new SelectListItem { Text = "空头", Value = "2" }, + }) + + @MyControls.SearchBtn() + @if (pageObj.canGenerate) + { + @MyControls.Btn("批量生成交易确认书", "BatchCreateContracts()") + } + @MyControls.Btn("批量下载交易确认书", "BatchDownLoadDoc()") + + @if (PS.GetErpConfig().IsAutoSealAndUploadFiles && !PS.GetErpConfig().IsAutoSealAfterGeneratedBook) + { + @MyControls.Btn("批量确认书用印", "BatchSealContracts()") + } + +
+ +
+
+ +@Html.Raw(JqGridSimple.OutTable()) + +@* 可能需要的其他HTML元素,例如下载链接的占位符 *@ +
diff --git a/YLErpWeb/Views/TradeConfirmBook/confirmBookUploadNew.cshtml b/YLErpWeb/Views/TradeConfirmBook/confirmBookUploadNew.cshtml index 15263f16..df9d2a90 100644 --- a/YLErpWeb/Views/TradeConfirmBook/confirmBookUploadNew.cshtml +++ b/YLErpWeb/Views/TradeConfirmBook/confirmBookUploadNew.cshtml @@ -41,7 +41,7 @@ for (var x = 0; x < files.length; x++) { data.append(files[x].name, files[x]); } - data.append("encryptId", encryptId); + data.append("contractCode", encryptId); $.ajax({ type: "Post", diff --git a/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBookListByClient.js b/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBookListByClient.js new file mode 100644 index 00000000..8fb443dd --- /dev/null +++ b/YLErpWeb/wwwroot/Scripts/app/trade/tradeConfirmBookListByClient.js @@ -0,0 +1,552 @@ +// tradeConfirmBookListByClient.js +const colModelGrid = (new function () { + // 定义列模型 + this.colModels = [ + { + name: '', + label: '操作', + width: 450, + align: 'left', + formatter: showToolName + }, { + name: 'ClientId', + hidden: true, + optionHide: true + }, + { + name:"id", + label: 'id', + width: 100, + hidden: true, + key: true, + },{ label: '合约编号', name: 'ContractCode', width: 150, }, + { label: '客户名称', name: 'ClientName', width: 150 }, + { label: '交易日期', name: 'TradeDate', width: 100, align: 'center' ,formatter: 'date' }, + { label: '多空头', name: 'PositionType', width: 80, align: 'center', + formatter: function (cellValue, options, rowObject) { + return cellValue == 1 ? "多头" : "空头"; + } + }, + { label: '用印状态', name: 'StampStatus', width: 80, align: 'center' }, // 根据实际需要调整宽度和对齐 + { label: '邮件发送结果', name: 'EmailResult', width: 100, align: 'center', + formatter: function (cellValue, options, rowObject) { + console.log(cellValue); + var html = ""; + html += "