Explorar el Código

商邀AI 发送邮件、邮件编辑

Lyyyi hace 2 semanas
padre
commit
d5e403a582

+ 51 - 27
OASystem/OASystem.Api/Controllers/ResourceController.cs

@@ -3319,7 +3319,7 @@ Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id Where m.Id={0} ", _m
             }
 
             // 数据邮件存储在数据库
-            StringBuilder msgSb = new StringBuilder();
+            var msgSb = new StringBuilder();
 
             foreach (var client in clientInfoSources)
             {
@@ -3341,6 +3341,8 @@ Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id Where m.Id={0} ", _m
             invAiInfo.AiCrawledDetails = invAiInfo.AiCrawledDetails.Where(x => !dto.Guids.Contains(x.Guid)).ToList();
             // 再添加AI生成的邮件数据
             invAiInfo.AiCrawledDetails.AddRange(clientInfoSources);
+            // 排序
+            invAiInfo.AiCrawledDetails = invAiInfo.AiCrawledDetails.OrderBy(x => x.OperatedAt).ToList();
 
             var update = await _sqlSugar.Updateable(invAiInfo).UpdateColumns(x => x.AiCrawledDetails).ExecuteCommandAsync();
             if (update < 1)
@@ -3388,15 +3390,16 @@ Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id Where m.Id={0} ", _m
 
             var datas = dataList.Where(x => x.Guid != dto.Guid).ToList();
             datas.Add(editInfo);
-            invAiInfo.AiCrawledDetails = datas;
+            // 排序
+            invAiInfo.AiCrawledDetails = datas.OrderBy(x => x.OperatedAt).ToList();
 
             var editUpd = await _sqlSugar.Updateable(invAiInfo).UpdateColumns(x => x.AiCrawledDetails).ExecuteCommandAsync();
             if (editUpd < 1)
             {
-                return Ok(JsonView(true, "邮件失败"));
+                return Ok(JsonView(true, "邮件保存失败"));
             }
 
-            return Ok(JsonView(true, "邮件成功"));
+            return Ok(JsonView(true, "邮件保存成功"));
         }
 
         /// <summary>
@@ -3429,45 +3432,66 @@ Inner Join Sys_Department as d With(Nolock) On u.DepId=d.Id Where m.Id={0} ", _m
 
             if (string.IsNullOrEmpty(userInfo.Email)) Ok(JsonView(false, "当前账号未配置邮箱,请先配置邮箱!"));
 
-            var seedEmails = new List<EmailInfo>();
+            var msgSb = new StringBuilder();
             #region 发送邮件
 
             foreach (var item in seedInvInfos)
             {
-                int seedStatus = 4;
-
+                int seedStatus = 5;
 
-                try
+                if (!string.IsNullOrEmpty(item.EmailInfo.EmailTitle) && !string.IsNullOrEmpty(item.EmailInfo.EmailContent))
                 {
-                    var req = new EmailRequestDto()
+                    try
                     {
-                        ToEmails = new List<string> { "johnny.yang@pan-american-intl.com" },
-                        CcEmails = new List<string> { userInfo.Email },
-                        BccEmails = new List<string> { userInfo.Email },
-                        Subject = "测试邮件 - 来自企业微信API",
-                        Body = "这是一封通过企业微信API发送的测试邮件,包含附件。",
-                        Files = Array.Empty<IFormFile>()
-                    };
-                    var response = await _qiYeWeChatApiService.EmailSendAsync(req);
-                    if (response.errcode == 0)
+                        var req = new EmailRequestDto()
+                        {
+                            ToEmails = new List<string> { item.Email },
+                            CcEmails = new List<string> { userInfo.Email },
+                            BccEmails = new List<string> { userInfo.Email },
+                            Subject = item.EmailInfo.EmailTitle,
+                            Body = item.EmailInfo.EmailContent,
+                            Files = Array.Empty<IFormFile>()
+                        };
+                        var response = await _qiYeWeChatApiService.EmailSendAsync(req);
+                        if (response.errcode == 0)
+                        {
+                            seedStatus = 4;
+                            item.EmailInfo.Status = seedStatus;
+                            item.EmailInfo.Operator = userInfo?.CnName ?? "";
+                            item.EmailInfo.OperatedAt = DateTime.Now;
+
+                            msgSb.AppendLine($"{item.NameCn}({item.Email}):邮件发送成功!");
+                        }
+                        else
+                        {
+                            msgSb.AppendLine($"{item.NameCn}({item.Email}):邮件发送失败(msg:{response.errmsg})");
+                        }
+
+                    }
+                    catch (Exception ex)
                     {
-                        seedStatus = 3;
+                        _logger.LogError(ex, "商邀AI调用企业微信邮件API失败。");
+                        msgSb.AppendLine($"{item.NameCn}({item.Email}):邮件发送失败(msg:商邀AI调用企业微信邮件API失败。)");
                     }
-
-                }
-                catch (Exception ex)
-                {
-                    _logger.LogError(ex, "商邀AI调用企业微信邮件API失败。");
                 }
-
-                seedEmails.Add(new() { EmailContent = "邮件内容", Status = seedStatus, OperatedAt = DateTime.Now, Operator = userInfo.CnName });
             }
 
             #endregion
 
+            // 先删除原有数据中对应的单位数据
+            invAiInfo.AiCrawledDetails = invAiInfo.AiCrawledDetails.Where(x => !dto.Guids.Contains(x.Guid)).ToList();
+            // 再添加AI生成的邮件数据
+            invAiInfo.AiCrawledDetails.AddRange(seedInvInfos);
+            // 排序
+            invAiInfo.AiCrawledDetails = invAiInfo.AiCrawledDetails.OrderBy(x=> x.OperatedAt).ToList();
 
+            var update = await _sqlSugar.Updateable(invAiInfo).UpdateColumns(x => x.AiCrawledDetails).ExecuteCommandAsync();
+            if (update < 1)
+            {
+                return Ok(JsonView(false, $"邮件AI发送,数据保存失败!"));
+            }
 
-            return Ok(JsonView(true, "发送成功"));
+            return Ok(JsonView(true, msgSb.ToString()));
         }
 
         #endregion

+ 3 - 2
OASystem/OASystem.Domain/Entities/Resource/Res_InvitationAI.cs

@@ -174,8 +174,9 @@ namespace OASystem.Domain.Entities.Resource
         /// 发送状态
         /// 1.未开始
         /// 2.AI生成成功
-        /// 3.发送完成
-        /// 4.发送失败
+        /// 3.手动编辑
+        /// 4.发送完成
+        /// 5.发送失败
         /// </summary>
         public int Status { get; set; } = 1;