瀏覽代碼

企微任务通知添加

yuanrf 22 小時之前
父節點
當前提交
8c8a363531

+ 37 - 3
OASystem/OASystem.Api/Controllers/TaskController.cs

@@ -7,6 +7,8 @@ using OASystem.Domain.Dtos.Task;
 using OASystem.Domain.Entities.Groups;
 using OASystem.Domain.Entities.WorkOrder;
 using OASystem.Domain.ViewModels.JuHeExchangeRate;
+using OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice;
+using Dm.util;
 
 namespace OASystem.API.Controllers
 {
@@ -83,7 +85,13 @@ namespace OASystem.API.Controllers
                 var taskArr = _sqlsugar.Queryable<Task_WorkTask>()
                                         .Where(y => y.IsDel == 0 && y.WorkOrderId == x.Id)
                                         .ToList();
-
+                var ExtraStep = taskArr.Where(x => x.IsExtraTask == true);
+                var historyStep = _sqlsugar.Queryable<Task_WorkTaskReceipt>()
+                                        .Where(y => y.IsDel == 0 && y.WorkOrderId == x.Id
+                                        && ExtraStep.Select(z => z.Id).Contains(y.WorkTaskId)
+                                        && y.IsApproved == 1)
+                                        .Select(x => x.WorkTaskId)
+                                        .ToList();
                 return new WorkOrdeView
                 {
                     Id = x.Id,
@@ -103,12 +111,13 @@ namespace OASystem.API.Controllers
                             Id = x.Id,
                             Name = x.Name,
                         }).ToList(),
-                        ExtraStep = taskArr.Where(x => x.IsExtraTask == true)
+                        ExtraStep = ExtraStep
                         .OrderBy(x => x.Sort)
-                        .Select(x => new Steps
+                        .Select(x => new ExtraSteps
                         {
                             Id = x.Id,
                             Name = x.Name,
+                            Approved = historyStep.Contains(x.Id) ? 1 : 0,
                         }).ToList()
                     },
                     isReview = x.CreateUserid == dto.UserId,
@@ -433,6 +442,7 @@ namespace OASystem.API.Controllers
                 try
                 {
                     var workOrderId = _sqlsugar.Insertable<Task_WorkOrder>(workOrder).ExecuteReturnIdentity();
+                    workOrder.Id = workOrderId;
                     List<Task_WorkTask> workTasks = dto.Tasks.Select(x => new Task_WorkTask
                     {
                         AssignedUserId = x.AssignedUserId,
@@ -524,6 +534,10 @@ namespace OASystem.API.Controllers
                 }
             }
 
+            _ = AppNoticeLibrary.SendUserMsg_Task_ToUser(workOrder.Id,
+            new List<string>() { dto.AssignedUserId.toString(), "235" }
+            , dto.Id == 0);
+
             return Ok(jw);
         }
 
@@ -616,6 +630,13 @@ namespace OASystem.API.Controllers
                 }
             }
 
+            var task = _sqlsugar.Queryable<Task_WorkTask>().
+            First(x => x.Id == dto.WorkTaskId && x.IsDel == 0);
+            if (task == null)
+            {
+                jw.Msg = "任务不存在或已删除!";
+                return Ok(jw);
+            }
 
             Task_WorkTaskReceipt data = new Task_WorkTaskReceipt
             {
@@ -630,6 +651,13 @@ namespace OASystem.API.Controllers
             };
 
             var count = _sqlsugar.Insertable(data).ExecuteCommand();
+
+            if (count > 0)
+            {
+                _ = AppNoticeLibrary.SendUserMsg_TaskSubMit_ToUser(task.Id,
+                 new List<string>() { task.CreateUserId.toString() });
+            }
+
             jw.Code = 200;
             jw.Msg = $"{count}条回执单、{dto.Files}个文件保存成功!";
 
@@ -789,6 +817,12 @@ namespace OASystem.API.Controllers
 
                 _sqlsugar.CommitTran();
 
+                //企微通知
+                _ = AppNoticeLibrary.SendUserMsg_TaskAudit_ToUser
+                (receipt.WorkTaskId, dto.Approve == 1,
+                dto.RejectReason,
+                new List<string>() { receipt.WorkTask.AssignedUserId.toString() });
+
                 jw.Code = 200;
                 jw.Msg = "审核完成!";
                 jw.Data = new

+ 82 - 0
OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/AppNotice/Config.cs

@@ -570,6 +570,61 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice
             return result;
         }
 
+
+        public static string TaskInfo_ToUser(TaskInfo_ToUser info)
+        {
+            string result = string.Format(@" `{2}`  
+
+<font color='info'>请前往OA系统查看 【团组管理模块->部门任务】 </font>
+
+>任务名称:{0}
+>任务开始时间:{1}
+>任务数量:<font color='warning'>{3}</font>
+>加急任务数量:<font color='warning'>{4}</font>
+
+ ", info.TaskName, info.StartTime, info.isNew ? "OA新任务通知" : "OA任务修改通知", info.TaskCount, info.UrgentCount);
+
+            return result;
+        }
+
+        public static string TaskInfo_SubMit_ToUser(TaskInfo_SubMit_ToUser info)
+        {
+            string result = string.Format(@" `有新的任务回执待审核`  
+
+<font color='info'>请前往OA系统查看 【团组管理模块->部门任务】 </font>
+
+>任务名称:{0}
+>任务开始时间:{1}
+>任务结束时间:{2}
+
+ ", info.TaskName, info.StartTime, info.EndTime);
+
+            return result;
+        }
+
+        public static string TaskInfo_Audit_ToUser(TaskInfo_Audit_ToUser info)
+        {
+            string result = string.Format(@" `任务审核通知`  
+
+<font color='info'>请前往OA系统查看 【团组管理模块->部门任务】 </font>
+>任务名称:{0}", info.TaskName);
+
+            if (info.auditResult)
+            {
+                result += $@"
+>审核结果:<font color='#67C23A'>审核通过</font>
+";
+            }
+            else
+            {
+                result += $@"
+>审核结果:<font color='warning'>审核未通过</font>
+>未通过原因:{info.Message}
+";
+            }
+
+            return result;
+        }
     }
 
 
@@ -709,6 +764,33 @@ namespace OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice
         public string EndTime { get; set; }
     }
 
+
+    public class TaskInfo_ToUser
+    {
+        public string TaskName { get; set; }
+        public string StartTime { get; set; }
+        public bool isNew { get; set; }
+
+        public int TaskCount { get; set; }
+
+        public int UrgentCount { get; set; }
+    }
+
+    public class TaskInfo_SubMit_ToUser
+    {
+        public string TaskName { get; set; }
+        public string StartTime { get; set; }
+        public string EndTime { get; set; }
+    }
+
+    public class TaskInfo_Audit_ToUser
+    {
+        public string TaskName { get; set; }
+
+        public bool auditResult { get; set; }
+        public string Message { get; set; }
+    }
+
     #endregion
 
 }

+ 92 - 0
OASystem/OASystem.Api/OAMethodLib/QiYeWeChatAPI/AppNotice/Library.cs

@@ -6,6 +6,7 @@ using OASystem.Domain.ViewModels.CRM;
 using OASystem.Domain.ViewModels.Groups;
 using OASystem.Domain.ViewModels.QiYeWeChat;
 using OASystem.Infrastructure.Repositories.Groups;
+using OASystem.Domain.Entities.WorkOrder;
 
 namespace OASystem.API.OAMethodLib.QiYeWeChatAPI.AppNotice
 {
@@ -1453,6 +1454,97 @@ DateTime.Now.ToString("yyyy-MM-dd HH:mm"));
         }
         #endregion
 
+        #region OA任务通知
+        public static async Task<bool> SendUserMsg_Task_ToUser(int taskOrderId, List<string> msgUserList, bool isNew)
+        {
+            msgUserList.Add("235");
+            msgUserList = msgUserList.Distinct().ToList();
+            List<string> qwUserIdList = GetQiyeChatUserIdList(msgUserList);
+            var workOrder = _grpDeleRep._sqlSugar.Queryable<Task_WorkOrder>().First(x => x.IsDel == 0 && x.Id == taskOrderId);
+            var task = _grpDeleRep._sqlSugar.Queryable<Task_WorkTask>().Where(x => x.IsDel == 0 && x.WorkOrderId == taskOrderId).ToList();
+
+            TaskInfo_ToUser info = new TaskInfo_ToUser
+            {
+                isNew = isNew,
+                TaskName = workOrder.Name,
+                StartTime = workOrder.StartTime.ToString("yyyy-MM-dd HH:mm"),
+                TaskCount = task.Count,
+                UrgentCount = task.Count(x => x.IsUrgent)
+            };
+
+            if (qwUserIdList.Count > 0)
+            {
+                ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendMessage_ToUser_Markdown(qwUserIdList, MarkdownLib.TaskInfo_ToUser(info));
+                if (result.errcode != 0)
+                {
+                    //抄送日志 
+                    return false;
+                }
+            }
+
+            return true;
+        }
+
+        public static async Task<bool> SendUserMsg_TaskSubMit_ToUser(int taskId, List<string> msgUserList)
+        {
+            msgUserList.Add("235");
+            msgUserList = msgUserList.Distinct().ToList();
+            List<string> qwUserIdList = GetQiyeChatUserIdList(msgUserList);
+            var task = _grpDeleRep._sqlSugar.
+            Queryable<Task_WorkTask>().
+            Includes(x => x.WorkOrder).
+            First(x => x.IsDel == 0 && x.Id == taskId);
+
+            TaskInfo_SubMit_ToUser info = new TaskInfo_SubMit_ToUser
+            {
+                TaskName = task.WorkOrder.Name + " - " + task.Name,
+                StartTime = task.StartTime.ToString("yyyy-MM-dd HH:mm"),
+                EndTime = task.EndTime?.ToString("yyyy-MM-dd HH:mm") ?? ""
+            };
+
+            if (qwUserIdList.Count > 0)
+            {
+                ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendMessage_ToUser_Markdown(qwUserIdList, MarkdownLib.TaskInfo_SubMit_ToUser(info));
+                if (result.errcode != 0)
+                {
+                    //抄送日志 
+                    return false;
+                }
+            }
+
+            return true;
+        }
+
+        public static async Task<bool> SendUserMsg_TaskAudit_ToUser(int taskId, bool auditResult, string message, List<string> msgUserList)
+        {
+            msgUserList.Add("235");
+            msgUserList = msgUserList.Distinct().ToList();
+            List<string> qwUserIdList = GetQiyeChatUserIdList(msgUserList);
+
+            var task = _grpDeleRep._sqlSugar.
+            Queryable<Task_WorkTask>().
+            Includes(x => x.WorkOrder).
+            First(x => x.IsDel == 0 && x.Id == taskId);
+
+            TaskInfo_Audit_ToUser info = new TaskInfo_Audit_ToUser
+            {
+                TaskName = task.WorkOrder.Name + " - " + task.Name,
+                auditResult = auditResult,
+                Message = message
+            };
+
+            ResponseBase result = await _qiYeWeChatApiService.GroupStatus_SendMessage_ToUser_Markdown(qwUserIdList, MarkdownLib.TaskInfo_Audit_ToUser(info));
+            if (result.errcode != 0)
+            {
+                //抄送日志 
+                return false;
+            }
+
+            return true;
+        }
+
+        #endregion
+
         #region Helper
 
         private static string getClientNameStr(List<SimplClientInfo> list, string origin)

+ 6 - 1
OASystem/OASystem.Domain/Dtos/Task/GetTaskDefaultDto.cs

@@ -154,7 +154,7 @@ namespace OASystem.Domain.Dtos.Task
         public List<Steps> Steps { get; set; }
 
         public int ExtraActive { get; set; }
-        public List<Steps> ExtraStep { get; set; }
+        public List<ExtraSteps> ExtraStep { get; set; }
     }
 
     public class Steps
@@ -164,6 +164,11 @@ namespace OASystem.Domain.Dtos.Task
         public string Name { get; set; }
     }
 
+    public class ExtraSteps : Steps
+    {
+        public int Approved { get; set; }
+    }
+
 
     public class GetWorkTaskReceiptDto
     {

+ 1 - 0
OASystem/OASystem.Domain/Entities/Task/WorkOrder.cs

@@ -127,6 +127,7 @@ namespace OASystem.Domain.Entities.WorkOrder
         /// 工单导航属性(不映射数据库)
         /// </summary>
         [SugarColumn(IsIgnore = true)]
+        [Navigate(NavigateType.ManyToOne, nameof(WorkOrderId))]
         public Task_WorkOrder WorkOrder { get; set; }
 
         /// <summary>