ソースを参照

重构邮件发送逻辑并调整部分字段定义

- ResourceController:重命名 companyTypes 为 orgLevels 并同步相关引用
- ProcessAndNotifySummary:增加 _defaultEmails,统一默认收件人,优化邮件发送逻辑,去除硬编码邮箱,添加异常处理和日志
- NotifyEmptyEmails:邮箱 Trim 处理,发送时加入默认收件人
Lyyyi 16 時間 前
コミット
4e409eeee5

+ 2 - 2
OASystem/OASystem.Api/Controllers/ResourceController.cs

@@ -3857,7 +3857,7 @@ Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id Where m.Id={0} ", _m
             var countries = await InvitationAICountryName();
             var industryNodes = IndustryTree.Build().Select(x => x.NameCn).ToList();
             var orgScales = OrgScale.BuildInitialData().Select(x => x.Name).ToList(); 
-            var companyTypes = new List<string>() {
+            var orgLevels = new List<string>() {
                 "全部",
                 "总部",
                 "分公司"
@@ -3870,7 +3870,7 @@ Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id Where m.Id={0} ", _m
                 countries,
                 industryNodes,
                 orgScales,
-                companyTypes
+                orgLevels
             }));
         }
 

+ 22 - 16
OASystem/OASystem.Api/OAMethodLib/Quartz/Business/ProcessAndNotifySummary.cs

@@ -21,6 +21,7 @@ namespace OASystem.API.OAMethodLib.Quartz.Business
         private static readonly IDeepSeekService _deepSeekService = AutofacIocManager.Instance.GetService<IDeepSeekService>();
         private static readonly Microsoft.Extensions.Logging.ILogger _logger =AutofacIocManager.Instance.GetService<ILoggerFactory>().CreateLogger("ProcessAndNotifySummary");
 
+        private static List<string> _defaultEmails = new List<string>() { "johnny.yang@pan-american-intl.com", "ellisa.wang@pan-american-intl.com" };
         /// <summary>
         /// hotmail 邮件 汇总 发送企微邮件
         /// 时间范围 昨天
@@ -41,7 +42,6 @@ namespace OASystem.API.OAMethodLib.Quartz.Business
             var yesterdayStart = nowInCst.Date.AddDays(-1);
             var yesterdayEnd = yesterdayStart.AddDays(1).AddTicks(-1);
 
-
             _logger.LogInformation("Hotmail 定时发送邮件 -> 获取Hotmail邮件信息 -> 开始");
             // 获取邮件信息
             var emailInfos = await _hotmailService.GetMergedMessagesAsync(hotmails, yesterdayStart, yesterdayEnd);
@@ -112,18 +112,13 @@ namespace OASystem.API.OAMethodLib.Quartz.Business
                             finalBody = summary.TextBody;
                         }
 
-                        // 默认发送 至 杨俊z霄、王鸽 邮件
-                        string defualtEmail_yanjunxiao = "johnny.yang@pan-american-intl.com";
-                        string defualtEmail_wangge = "ellisa.wang@pan-american-intl.com";
-
                         _logger.LogInformation("Hotmail 定时发送邮件 -> DeepSeek AI 分析汇总邮件 -> 解析AI返回的json -> 发送腾讯邮件 -> {email} 开始", qwEmail);
+
+                        var toEmails = new List<string>() { qwEmail };
+                        toEmails.AddRange(_defaultEmails);
                         var seedRes = await _qiYeWeChatApiService.EmailSendAsync(new EmailRequestDto
                         {
-                            ToEmails = new List<string> { 
-                                qwEmail, 
-                                defualtEmail_yanjunxiao,
-                                defualtEmail_wangge
-                            },
+                            ToEmails = toEmails,
                             Subject = finalSubject,
                             Body = finalBody,
                         });
@@ -211,15 +206,26 @@ Now, output the JSON array based on the logic above. No prose, no chat, just the
 
         private static async Task NotifyEmptyEmails(List<int> userIds)
         {
-            var userEmails = await _sqlSugar.Queryable<Sys_Users>().Where(x => x.IsDel == 0 && userIds.Contains(x.Id)).Select(x => x.Email).ToListAsync();
+            var userEmails = await _sqlSugar.Queryable<Sys_Users>().Where(x => x.IsDel == 0 && userIds.Contains(x.Id)).Select(x => x.Email.Trim()).ToListAsync();
             if (userEmails.Any())
             {
-                await _qiYeWeChatApiService.EmailSendAsync(new EmailRequestDto
+                try
                 {
-                    ToEmails = userEmails,
-                    Subject = $"{DateTime.Now:yyyy-MM-dd} - 邮件汇总",
-                    Body = "昨日暂未收到有效邮件。"
-                });
+                    userEmails.AddRange(_defaultEmails);
+
+                    await _qiYeWeChatApiService.EmailSendAsync(new EmailRequestDto
+                    {
+                        ToEmails = userEmails,
+                        Subject = $"{DateTime.Now:yyyy-MM-dd} - 邮件汇总",
+                        Body = "昨日暂未收到有效邮件。"
+                    });
+                }
+                catch (Exception ex)
+                {
+                    _logger.LogInformation("Microsoft Hotmail 定时发送邮件 -> 获取Hotmail邮件信息 -> 发送无邮件情况 -> 发送失败!【MSG:{ErrorMsg}】", ex.Message);
+                }
+
+                _logger.LogInformation("Microsoft Hotmail 定时发送邮件 -> 获取Hotmail邮件信息 -> 发送无邮件情况 -> 发送成功!");
             }
         }
 

+ 0 - 1
OASystem/OASystem.Domain/Entities/Customer/Crm_DeleClient.cs

@@ -94,7 +94,6 @@ namespace OASystem.Domain.Entities.Customer
         /// </summary>
         [SugarColumn(IsNullable = true, ColumnDataType = "varchar(300)")]
         public string RoomPref { get; set; }
-
         /// <summary>
         /// 家庭联系方式
         /// </summary>

+ 4 - 9
OASystem/OASystem.Domain/Entities/Resource/Res_InvitationAI.cs

@@ -1,10 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel.DataAnnotations;
-using System.Linq;
-using System.Text;
-using System.Text.Json.Serialization;
-using System.Threading.Tasks;
+using System.Text.Json.Serialization;
 
 namespace OASystem.Domain.Entities.Resource
 {
@@ -12,7 +6,7 @@ namespace OASystem.Domain.Entities.Resource
     /// 商邀公务AI
     /// </summary>
     [SugarTable("Res_InvitationAI", "商邀公务AI")]
-    public class Res_InvitationAI: EntityBase
+    public class Res_InvitationAI : EntityBase
     {
         /// <summary>
         /// 名称
@@ -251,7 +245,8 @@ namespace OASystem.Domain.Entities.Resource
         public string Content { get; set; }
     }
 
-    public class CountryAIPormptInfo {
+    public class CountryAIPormptInfo
+    {
         public string Country { get; set; }
         public int Count { get; set; }
     }