From e44726c8e38573736fc9cae165a803bf8b0b5af1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AC=B4=E6=94=BF=20=E6=97=B6?= Date: Fri, 13 Mar 2026 15:57:46 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=82=AE=E4=BB=B6?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E6=97=A5=E5=BF=97.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- YLErpDAL/Helpers/EmailHelper.cs | 4 ++-- .../SettlementReportFotShanXiService.cs | 6 ------ YLErpWeb/Areas/Admin/Controllers/OtcConfigController.cs | 2 ++ YLErpWeb/Controllers/clientbalanceController.cs | 8 +------- 4 files changed, 5 insertions(+), 15 deletions(-) diff --git a/YLErpDAL/Helpers/EmailHelper.cs b/YLErpDAL/Helpers/EmailHelper.cs index 89086f15..e48bf58a 100644 --- a/YLErpDAL/Helpers/EmailHelper.cs +++ b/YLErpDAL/Helpers/EmailHelper.cs @@ -71,7 +71,7 @@ namespace YLErp.Helpers .ToHashSet(StringComparer.OrdinalIgnoreCase); var mailToArr = toSet.ToArray(); - + LogFactory.GetLogger("邮件发送").Info($"开始发送邮件,mailTo={mailTo},subject={subject}"); string result = MailSender.SendApi(new MailSendingOption { MailTo = mailToArr, @@ -81,7 +81,7 @@ namespace YLErp.Helpers FilesToAttach = filesToAttach, CC = ccEmail }); - + LogFactory.GetLogger("邮件发送").Info($"邮件发送完成,mailTo={mailTo},subject={subject},result={result}"); return string.Empty; } catch (Exception ex) diff --git a/YLErpDAL/Modules/ReportModule/SettlementReportModule/SettlementReportFotShanXiService.cs b/YLErpDAL/Modules/ReportModule/SettlementReportModule/SettlementReportFotShanXiService.cs index 70995b1a..7118089b 100644 --- a/YLErpDAL/Modules/ReportModule/SettlementReportModule/SettlementReportFotShanXiService.cs +++ b/YLErpDAL/Modules/ReportModule/SettlementReportModule/SettlementReportFotShanXiService.cs @@ -121,9 +121,7 @@ namespace YLErp.Modules.ReportModule.SettlementReportModule /// public (EmailTradeConfirmResultType status, string message) SendSettlementReports(DingShiReportEmail emailData, ClientDingShiReport_ShanXi report, string template, bool IsSkipCheckMarginCall = false, List recevier = null) { - LogFactory.GetLogger().Error("开始发邮件[error]SendSettlementReports"); LogFactory.GetLogger().Info("开始发邮件[info]SendSettlementReports"); - Console.WriteLine("开始发邮件[console]SendSettlementReports"); string message = null; var attachFiles = new List(); List fileTypes=new List(); @@ -175,13 +173,9 @@ namespace YLErp.Modules.ReportModule.SettlementReportModule mailFrom = DBCacheManager.Single.GetStr(CacheTable.TradeMarketSendUser); } - LogFactory.GetLogger().Error("开始发邮件[error]SendSettlementReports_start"); LogFactory.GetLogger().Info("开始发邮件[info]SendSettlementReports_start"); - Console.WriteLine("开始发邮件[console]SendSettlementReports_start"); message = EmailHelper.SendMail(string.Join(";", emails), title, detail, true, attachFiles, emailData.CCEmail, mailFrom); - LogFactory.GetLogger().Error($"开始发邮件[error]SendSettlementReports_end {message}"); LogFactory.GetLogger().Info($"开始发邮件[info]SendSettlementReports_end {message}"); - Console.WriteLine($"开始发邮件[console]SendSettlementReports_end {message}"); if (!string.IsNullOrEmpty(message)) { diff --git a/YLErpWeb/Areas/Admin/Controllers/OtcConfigController.cs b/YLErpWeb/Areas/Admin/Controllers/OtcConfigController.cs index a1898080..b186e765 100644 --- a/YLErpWeb/Areas/Admin/Controllers/OtcConfigController.cs +++ b/YLErpWeb/Areas/Admin/Controllers/OtcConfigController.cs @@ -157,7 +157,9 @@ namespace YLErp.Web.Areas.Admin.Controllers { return JsonError("发送邮件地址不能为空"); } + LogFactory.GetLogger().Info($"邮件发送测试,mailTo={mailTo}"); var error = EmailHelper.SendMail(mailTo, "邮件发送测试", "邮件发送测试"); + LogFactory.GetLogger().Info($"邮件发送测试完成,mailTo={mailTo},error={error}"); if (string.IsNullOrWhiteSpace(error)) { return JsonSuccess(); diff --git a/YLErpWeb/Controllers/clientbalanceController.cs b/YLErpWeb/Controllers/clientbalanceController.cs index ff93790a..88d4af66 100644 --- a/YLErpWeb/Controllers/clientbalanceController.cs +++ b/YLErpWeb/Controllers/clientbalanceController.cs @@ -480,9 +480,7 @@ namespace YLErp.Web.Controllers { try { - LogFactory.GetLogger().Error("开始发邮件[error]SendReportMails"); - LogFactory.GetLogger().Info("开始发邮件[info]SendReportMails"); - Console.WriteLine("开始发邮件[console]SendReportMails"); + LogFactory.GetLogger().Info("开始发邮件[error]SendReportMails"); EmailTradeConfirmResultType status; string message; var report = new SettlementReportFotShanXiService(user).GetReportData(emailData, userAssetUnits, template); @@ -501,10 +499,6 @@ namespace YLErp.Web.Controllers } catch (Exception e) { - LogFactory.GetLogger().Error($"开始发邮件[error]SendSettlementReports_end", e); - LogFactory.GetLogger().Info($"开始发邮件[info]SendSettlementReports_end11"); - Console.WriteLine($"开始发邮件[console]SendSettlementReports_end", e); - LogFactory.GetLogger().Error(e, "GenerateTradeMarketBill2"); return JsonError(e.Message == "The number of columns in PdfPTable constructor must be greater than zero." ? "生成的pdf列表的列数必须大于零,请检查配置列不可为空" : e.Message); } From 61c9fd20a9a626e06867019233872e1a229b3fa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AC=B4=E6=94=BF=20=E6=97=B6?= Date: Fri, 13 Mar 2026 16:00:12 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=A1=AE=E8=AE=A4?= =?UTF-8?q?=E4=B9=A6=E6=A8=A1=E6=9D=BF=E4=B8=BA=E8=BE=83=E6=96=B0=E5=88=99?= =?UTF-8?q?=E5=A4=8D=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Plugins/YLErp.Plugins.ZheShang/YLErp.Plugins.ZheShang.csproj | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Plugins/YLErp.Plugins.ZheShang/YLErp.Plugins.ZheShang.csproj b/Plugins/YLErp.Plugins.ZheShang/YLErp.Plugins.ZheShang.csproj index 80af5486..dfd1a154 100644 --- a/Plugins/YLErp.Plugins.ZheShang/YLErp.Plugins.ZheShang.csproj +++ b/Plugins/YLErp.Plugins.ZheShang/YLErp.Plugins.ZheShang.csproj @@ -25,6 +25,9 @@ PreserveNewest + + PreserveNewest + PreserveNewest From 8372a1bde49d3e80172e2797c178dff8f2aa307c Mon Sep 17 00:00:00 2001 From: shangzhongyuan Date: Fri, 13 Mar 2026 16:06:33 +0800 Subject: [PATCH 3/6] =?UTF-8?q?fix(entryexit):=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E9=93=B6=E8=A1=8C=E6=B5=81=E6=B0=B4=E6=9F=A5=E8=AF=A2=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E5=86=97=E4=BD=99=E5=8F=82=E6=95=B0=E9=AA=8C=E8=AF=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除了不再需要的 clientId 参数验证逻辑 - 移除了 API 请求中多余的 account 查询参数 - 简化了银行流水数据查询接口调用 --- .../Services/CashRecordModule/ExternalCashFlowService.cs | 1 - YLErpWeb/Controllers/entryexitController.cs | 6 ------ 2 files changed, 7 deletions(-) diff --git a/YLErpDAL/Services/CashRecordModule/ExternalCashFlowService.cs b/YLErpDAL/Services/CashRecordModule/ExternalCashFlowService.cs index dd87becd..d2f6049a 100644 --- a/YLErpDAL/Services/CashRecordModule/ExternalCashFlowService.cs +++ b/YLErpDAL/Services/CashRecordModule/ExternalCashFlowService.cs @@ -56,7 +56,6 @@ namespace YLErp.Services.CashRecordModule // 构建请求 URL var apiUrl = $"{_baseUrl}/eusp/queryStatement"; var queryString = $"?token={Uri.EscapeDataString(token)}" + - $"&account={Uri.EscapeDataString(account)}" + $"&beginDate={Uri.EscapeDataString(beginDate)}" + $"&endDate={Uri.EscapeDataString(endDate)}"; diff --git a/YLErpWeb/Controllers/entryexitController.cs b/YLErpWeb/Controllers/entryexitController.cs index 37b39cc2..871265a5 100644 --- a/YLErpWeb/Controllers/entryexitController.cs +++ b/YLErpWeb/Controllers/entryexitController.cs @@ -537,12 +537,6 @@ namespace YLErp.Web.Controllers return JsonSuccess("未获取到银行流水数据"); } - var clientId = req.clientId; - if (!clientId.HasValue || clientId == 0) - { - return JsonError("请选择客户"); - } - var existingFlowIds = yldb.ClientCashInCashOut .Where(c => !string.IsNullOrEmpty(c.BankFlowId)) .Select(c => c.BankFlowId) From f5c0211b607dd4ae76343ac1d85cc9a89639f634 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AC=B4=E6=94=BF=20=E6=97=B6?= Date: Fri, 13 Mar 2026 16:33:10 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E7=BB=A7=E7=BB=AD=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=8F=91=E9=82=AE=E4=BB=B6=E7=9A=84=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Framework/YLErp.MailKit/MailSender.cs | 14 ++++++++++++++ YLErpDAL/Helpers/EmailHelper.cs | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Framework/YLErp.MailKit/MailSender.cs b/Framework/YLErp.MailKit/MailSender.cs index 2c45c5b0..b20ccdfa 100644 --- a/Framework/YLErp.MailKit/MailSender.cs +++ b/Framework/YLErp.MailKit/MailSender.cs @@ -229,6 +229,7 @@ namespace YLErp.MailKit // 创建一个HttpClient实例 using (var httpClient = new HttpClient()) { + httpClient.Timeout = TimeSpan.FromMinutes(3); // 根据需要调整 var content = new MultipartFormDataContent(); // 添加收件人 content.Add(new StringContent(string.Join(",", option.MailTo)), "to"); @@ -276,6 +277,10 @@ namespace YLErp.MailKit } } } + if (log != null) { + log.Invoke("邮件发送接口", "BaseUrl:" + baseUrl); + log.Invoke("邮件发送接口", "EmailPath:" + emailPath); + } // 发送POST请求 var response = httpClient.PostAsync($"{baseUrl}{emailPath}", content).Result; @@ -284,6 +289,10 @@ namespace YLErp.MailKit { // 解析响应内容并返回结果 var result = response.Content.ReadAsStringAsync().Result; + if (log != null) + { + log.Invoke("邮件发送接口", "响应内容:" + result); + } if (string.IsNullOrEmpty(result)) { throw new ArgumentException("发送邮件失败"); @@ -297,6 +306,11 @@ namespace YLErp.MailKit } else { + if (log != null) + { + log.Invoke("邮件发送接口", "响应状态码:" + response.StatusCode); + log.Invoke("邮件发送接口", "响应内容:" + response.Content.ReadAsStringAsync().Result); + } // 处理错误情况 } } diff --git a/YLErpDAL/Helpers/EmailHelper.cs b/YLErpDAL/Helpers/EmailHelper.cs index e48bf58a..665456da 100644 --- a/YLErpDAL/Helpers/EmailHelper.cs +++ b/YLErpDAL/Helpers/EmailHelper.cs @@ -80,7 +80,7 @@ namespace YLErp.Helpers IsBodyHtml = isBodyHtml, FilesToAttach = filesToAttach, CC = ccEmail - }); + }, (name, info) => { LogFactory.GetLogger(name).Info(info); }); LogFactory.GetLogger("邮件发送").Info($"邮件发送完成,mailTo={mailTo},subject={subject},result={result}"); return string.Empty; } From 9d9d8457ea7aee90e3b80b8b8158c7188ccffadf Mon Sep 17 00:00:00 2001 From: shangzhongyuan Date: Fri, 13 Mar 2026 17:20:21 +0800 Subject: [PATCH 5/6] =?UTF-8?q?feat(entryexit):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=B5=84=E9=87=91=E7=B1=BB=E5=9E=8B=E5=AD=97=E6=AE=B5=E5=8C=BA?= =?UTF-8?q?=E5=88=86=E4=BF=9D=E8=AF=81=E9=87=91=E8=B4=A6=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在银行流水导入功能中新增cash_type字段 - 根据出入金方向自动设置账户类型为追保账户或初保账户 - 入金时设置为追保账户,出金时设置为初保账户 --- YLErpWeb/Controllers/entryexitController.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/YLErpWeb/Controllers/entryexitController.cs b/YLErpWeb/Controllers/entryexitController.cs index 871265a5..3731246c 100644 --- a/YLErpWeb/Controllers/entryexitController.cs +++ b/YLErpWeb/Controllers/entryexitController.cs @@ -595,6 +595,7 @@ namespace YLErp.Web.Controllers BankFlowId = flow.flowId, SerialNumber = flow.flowId, OpenBankCard = flow.counterpartyAccount, + cash_type = direction == "入金" ? "追保账户" : "初保账户", Comments = $"银行流水导入 | 对方账号:{flow.counterpartyAccount} | 对方户名:{flow.counterpartyName} | 用途:{flow.useDescribe}" }; From 6054ff70d157195272e40f69dca1a1b21202947f Mon Sep 17 00:00:00 2001 From: shangzhongyuan Date: Fri, 13 Mar 2026 17:40:26 +0800 Subject: [PATCH 6/6] =?UTF-8?q?feat(entryexit):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E9=93=B6=E8=A1=8C=E6=B5=81=E6=B0=B4=E5=A4=84=E7=90=86=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在控制器中初始化ID列表用于存储保存成功的记录 - 修改保存逻辑以捕获保存成功的ID并添加到列表中 - 添加条件检查确保只有在有成功保存记录时才执行后续操作 - 集成ClientCashInCashOutDataService服务处理保存的记录 - 通过Kafka生产者辅助类执行银行流水的异步处理 - 保持原有的统计和异常处理逻辑不变 --- YLErpWeb/Controllers/entryexitController.cs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/YLErpWeb/Controllers/entryexitController.cs b/YLErpWeb/Controllers/entryexitController.cs index 3731246c..34c0942b 100644 --- a/YLErpWeb/Controllers/entryexitController.cs +++ b/YLErpWeb/Controllers/entryexitController.cs @@ -547,6 +547,7 @@ namespace YLErp.Web.Controllers var skipCount = 0; var duplicateCount = 0; var invalidCounterpartyCount = 0; + var ids = new List(); foreach (var flow in result.data) { @@ -601,9 +602,13 @@ namespace YLErp.Web.Controllers try { - service.SaveEntryexit(null, cashRecord); - existingFlowIds.Add(flow.flowId); - saveCount++; + var savedId = service.SaveEntryexit(null, cashRecord); + if (null != savedId ) + { + ids.Add(savedId.id); + existingFlowIds.Add(flow.flowId); + saveCount++; + } } catch (Exception ex) { @@ -611,6 +616,11 @@ namespace YLErp.Web.Controllers } } + if (ids.Any()) + { + new ClientCashInCashOutDataService(CurUser).ExcuteEntryExit(ids, kafkaProduceHelper); + } + return JsonSuccess($"获取银行流水成功,共处理{result.data.Count}条,成功保存{saveCount}条,跳过{skipCount}条(无效对手方账号{invalidCounterpartyCount}条,重复{duplicateCount}条)"); } catch (Exception ex)