Browse Source

2024-01-26小袁代提交未提交代码

leiy 1 year ago
parent
commit
3b295fb7b9

+ 7 - 4
OASystem/OASystem.Api/Controllers/AuthController.cs

@@ -15,6 +15,7 @@ using OASystem.Domain.Entities.System;
 using TinyPinyin;
 using System.Globalization;
 using OASystem.API.OAMethodLib.Hubs;
+using Microsoft.AspNetCore.SignalR;
 
 namespace OASystem.API.Controllers
 {
@@ -31,9 +32,10 @@ namespace OASystem.API.Controllers
         private readonly SystemMenuPermissionRepository _SystemMenuPermissionRepository;
 
         private readonly IQiYeWeChatApiService _qiYeWeChatApiServic;
+        private readonly IHubContext<ServerHub> _hubContext;
 
         public AuthController(IConfiguration config, LoginRepository loginRep, IMapper mapper,MessageRepository message,
-            SystemMenuPermissionRepository systemMenuPermissionRepository, IQiYeWeChatApiService qiYeWeChatApiService, MessageHub msgHub)
+            SystemMenuPermissionRepository systemMenuPermissionRepository, IQiYeWeChatApiService qiYeWeChatApiService, IHubContext<ServerHub> hubContext)
         {
             _config = config;
             _loginRep = loginRep;
@@ -41,6 +43,7 @@ namespace OASystem.API.Controllers
             _message = message;
             _SystemMenuPermissionRepository = systemMenuPermissionRepository;
             _qiYeWeChatApiServic = qiYeWeChatApiService;
+            _hubContext = hubContext;
         }
 
         /// <summary>
@@ -72,7 +75,7 @@ namespace OASystem.API.Controllers
                 authData = _SystemMenuPermissionRepository.QueryMenuLoad(uId, dto.PortType);
             }
 
-
+            //_hubContext.Login(uId, uName);
             var view = new LoginView
             {
                 UserInfo = userData == null ? null : userData.Data,
@@ -92,7 +95,7 @@ namespace OASystem.API.Controllers
 
                 if (expDt >= createZebraTime)  //超时重新获取token
                 {
-                    authorToken = GeneralMethod.GetToken(_config, dto.Number, uId,uName, createZebraTime);
+                    authorToken = await GeneralMethod.GetToken(_config, dto.Number, uId,uName, createZebraTime);
                 }
 
                 view.Expires = expDt;
@@ -102,7 +105,7 @@ namespace OASystem.API.Controllers
             else
             {
                 view.Expires = createZebraTime.AddMinutes(30);
-                view.Token = GeneralMethod.GetToken(_config, dto.Number, uId, uName, createZebraTime);
+                view.Token = await GeneralMethod.GetToken(_config, dto.Number, uId, uName, createZebraTime);
                 TimeSpan ts = view.Expires.AddMinutes(-1) - createZebraTime; //设置redis 过期时间 比 jwt 时间 快一分钟
                 await RedisRepository.RedisFactory.CreateRedisRepository().StringSetAsync<string>(authorId, view.Token, ts);//string 存
 

+ 3 - 1
OASystem/OASystem.Api/Controllers/PersonnelModuleController.cs

@@ -1021,11 +1021,13 @@ namespace OASystem.API.Controllers
 
                 string whereSql = "";
                 #region 分页参数处理
+
+
                 //类型处理
                 if (_dto.Type == 0) whereSql = "";
                 else if (_dto.Type == 1) //1 由我指派
                 {
-                    whereSql = string.Format(@" And ta.CreateUserId = {0}",_dto.UserId); 
+                    whereSql = string.Format(@" And ta.CreateUserId = {0} And (Select COUNT(1) As PeopleNumber From Pm_TaskRelevanceUser Where IsDel = 0 And ta.Id = TAId And UserId = {0}) > 0", _dto.UserId); 
                 }
                 else if (_dto.Type == 2)// 2 指派给我
                 {

+ 11 - 2
OASystem/OASystem.Api/OAMethodLib/GeneralMethod.cs

@@ -1,4 +1,6 @@
-using Microsoft.AspNetCore.Mvc.TagHelpers;
+using Microsoft.AspNetCore.Authentication;
+using Microsoft.AspNetCore.Authentication.Cookies;
+using Microsoft.AspNetCore.Mvc.TagHelpers;
 using OASystem.API.OAMethodLib.JuHeAPI;
 using OASystem.Domain;
 using OASystem.Domain.Dtos.Financial;
@@ -26,6 +28,7 @@ namespace OASystem.API.OAMethodLib
         private readonly static TeamRateRepository _teamRateRep = AutofacIocManager.Instance.GetService<TeamRateRepository>();
         private readonly static IJuHeApiService _juHeApiService = AutofacIocManager.Instance.GetService<IJuHeApiService>();
         private readonly static SetDataRepository _setDataRep = AutofacIocManager.Instance.GetService<SetDataRepository>();
+        private readonly static HttpContext _httpContext ;
 
         #region 消息
 
@@ -86,7 +89,7 @@ namespace OASystem.API.OAMethodLib
         /// <param name="Number"></param>
         /// <param name="exp"></param>
         /// <returns></returns>
-        public static string GetToken(IConfiguration _config, string Number, int uId, string uName, DateTime exp)
+        public static async Task< string> GetToken(IConfiguration _config, string Number, int uId, string uName, DateTime exp)
         {
             string userId = Guid.NewGuid().ToString().Replace("-", "");
             var claims = new[] {
@@ -104,6 +107,12 @@ namespace OASystem.API.OAMethodLib
                 expires: exp,
                 signingCredentials: creds);
 
+            //var indentity = new ClaimsIdentity(claims, "formlogin");
+            //var principal = new ClaimsPrincipal(indentity);
+
+            // await _httpContext.SignInAsync (CookieAuthenticationDefaults.AuthenticationScheme, principal);
+
+
 
             return new JwtSecurityTokenHandler().WriteToken(token);
 

+ 9 - 0
OASystem/OASystem.Api/OAMethodLib/Hubs/IChatClient.cs

@@ -0,0 +1,9 @@
+namespace OASystem.API.OAMethodLib.Hubs
+{
+    public interface IChatClient
+    {
+        Task ReceiveMessage(string user, string message);
+        Task ReceiveMessage(object message);
+        Task ReceiveCaller(object message);
+    }
+}

+ 0 - 95
OASystem/OASystem.Api/OAMethodLib/Hubs/MessageHub.cs

@@ -1,95 +0,0 @@
-using Microsoft.AspNetCore.Cors;
-using Microsoft.AspNetCore.SignalR;
-using System.ComponentModel.DataAnnotations;
-
-namespace OASystem.API.OAMethodLib.Hubs
-{
-    /// <summary>
-    /// 站内通信 Hub
-    /// </summary>
-    public class MessageHub : Hub
-    {
-        private readonly ILogger<MessageHub> _logger;
-
-        public static List<HubUser> _userList = new List<HubUser> { };
-        public MessageHub(ILogger<MessageHub> logger)
-        {
-            _logger = logger;
-        }
-
-
-        //发送消息--发送给所有连接的客户端
-        public Task SendMessage(string msg)
-        {
-            return Clients.All.SendAsync("ReceiveMessage", msg);
-        }
-        //发送消息--发送给指定用户
-        public Task SendPrivateMessage(string connectionId, string message)
-        {
-            return Clients.Client(connectionId).SendAsync("ReceiveMessage", message);
-        }
-
-
-
-        /// <summary>
-        /// 登录功能,将用户ID和ConntectionId关联起来
-        /// </summary>
-        /// <param name="userId"></param>
-        public void Login(int userId,string userName)
-        {
-            try
-            {
-                HubUser hu = _userList.Find(a => a.UserId == userId);
-                if (hu != null)
-                {
-                    _userList.Remove(hu);
-                }
-                string connectionId = Context.ConnectionId;
-                _userList.Add(new HubUser
-                {
-                    UserId = userId,
-                    UserName = userName,
-                    ConnectionId = connectionId
-                });
-                Console.WriteLine($"{userId}登录成功,ConnectionId={connectionId}");
-            }
-            catch (Exception ex)
-            {
-                Console.WriteLine($"{userId}登录失败");
-            }
-            
-        }
-
-        /// <summary>
-        /// 退出功能,当客户端退出时调用
-        /// </summary>
-        /// <param name="userId"></param>
-        public void Logout(int userId)
-        {
-            HubUser hu = _userList.Find(a => a.UserId == userId);
-            if (hu != null)
-            {
-                _userList.Remove(hu);
-            }
-            Console.WriteLine($"{userId}退出成功,ConnectionId={hu.ConnectionId}");
-        }
-
-        public class HubUser
-        {
-            /// <summary>
-            /// 连接ID
-            /// </summary>
-            [Key]
-            public string ConnectionId { get; set; } = string.Empty;
-            /// <summary>
-            /// 用户id
-            /// </summary>
-            public int UserId { get; set; }
-            /// <summary>
-            /// 姓名
-            /// </summary>
-            public string UserName { get; set; }
-        }
-    }
-}
-

+ 119 - 0
OASystem/OASystem.Api/OAMethodLib/Hubs/ServerHub.cs

@@ -0,0 +1,119 @@
+using Microsoft.AspNetCore.Cors;
+using Microsoft.AspNetCore.SignalR;
+using OASystem.Domain;
+using QuartzUI.Extension.AspNetCore.Enum;
+using SqlSugar;
+using System;
+using System.ComponentModel.DataAnnotations;
+using System.IdentityModel.Tokens.Jwt;
+using static OASystem.API.OAMethodLib.JWTHelper;
+
+namespace OASystem.API.OAMethodLib.Hubs
+{
+    /// <summary>
+    /// 站内通信 Hub
+    /// </summary>
+    public class ServerHub : Hub
+    {
+
+        /// <summary>
+        /// 已连接的用户信息
+        /// </summary>
+        public static List<UserModel> OnlineUser { get; set; } = new List<UserModel>();
+
+        private readonly ILogger<ServerHub> _logger;
+        private readonly IHttpContextAccessor _accessor;
+
+        public ServerHub( ILogger<ServerHub> logger, IHttpContextAccessor accessor)
+        {
+            _logger = logger;
+            _accessor = accessor;
+        }
+
+        /// <summary>
+        /// 当连接成功时执行
+        /// </summary>
+        /// <returns></returns>
+        public override Task OnConnectedAsync()
+        {
+            string connId = Context.ConnectionId;
+
+            _logger.LogWarning("SignalR已连接");
+            //验证Token
+            var token = _accessor.HttpContext.Request.Query["access_token"];
+            var user = JwtHelper.SerializeJwt(token);
+            _logger.LogWarning("SignalR已连接,用户名:" + user.UserName);
+            //连接用户 这里可以存在Redis
+            var model = new UserModel
+            {
+                Uid = user.Uid,
+                ConnectionId = connId,
+                Token = token,
+                UserName = user.UserName
+            };
+            OnlineUser.Add(model);
+            //给当前的连接分组 可以进行同一组接收消息 也可以用Token获取机构权限
+            //await Groups.AddToGroupAsync(Context.ConnectionId, "测试组");
+
+            //给当前连接返回消息 .Clients可以发多个连接ID
+            Clients.Client(connId).SendAsync("ConnectResponse",
+                new Result()
+                {
+                    Code = 200,
+                    Data = model,
+                    Msg = user.UserName + "连接成功"
+                });
+
+            return base.OnConnectedAsync();
+        }
+
+        /// <summary>
+        /// 当连接断开时的处理
+        /// </summary>
+        public override Task OnDisconnectedAsync(Exception exception)
+        {
+            string connId = Context.ConnectionId;
+            var model = OnlineUser.Find(u => u.ConnectionId == connId);
+            int count = OnlineUser.RemoveAll(u => u.ConnectionId == connId);
+            if (model != null)
+            {
+                //给当前分组发送消息 在一个分组就能接收到消息
+                //Clients.Group(model.GroupName).SendAsync("GetUsersResponse", result);
+
+                //给当前连接返回消息 .Clients可以发多个连接ID
+                Clients.Client(connId).SendAsync("DisconnectResponse",
+                new Result()
+                {
+                    Code  = 400,
+                    Data = "true",
+                    Msg = "断开连接"
+                });
+
+            }
+            return base.OnDisconnectedAsync(exception);
+        }
+
+        /// <summary>
+        /// 接受用户的数进行推送
+        /// </summary>
+        /// <returns></returns>
+        public async Task SendMessage(string user, string msg)
+        {
+            Result  result = new Result();
+            result.Data = new UserModel
+            {
+                ConnectionId = Context.ConnectionId,
+                Token = "",
+                UserName = user
+            };
+            result.Code = 200;
+            result.Msg = msg;
+
+            //推送给所有连接ID的第一条数据
+            await Clients.Clients(OnlineUser.Select(q => q.ConnectionId).ToList()).SendAsync("SendMessage", result);
+        }
+
+
+    }
+}
+

+ 13 - 0
OASystem/OASystem.Api/OAMethodLib/Hubs/UserModel.cs

@@ -0,0 +1,13 @@
+namespace OASystem.API.OAMethodLib.Hubs
+{
+    public class UserModel
+    {
+        public long Uid { get; set; }
+
+        public string ConnectionId { get; set; }
+
+        public string Token { get; set; }
+
+        public string UserName { get; set; }
+    }
+}

+ 117 - 0
OASystem/OASystem.Api/OAMethodLib/JwtHelper.cs

@@ -0,0 +1,117 @@
+using SqlSugar.Extensions;
+using System.IdentityModel.Tokens.Jwt;
+using System.Security.Claims;
+
+namespace OASystem.API.OAMethodLib
+{
+    public class JWTHelper
+    {
+        public class JwtHelper
+        {
+
+            /// <summary>
+            /// 颁发JWT字符串
+            /// </summary>
+            /// <param name="tokenModel"></param>
+            /// <returns></returns>
+            public static string IssueJwt(TokenModelJwt tokenModel)
+            {
+                //  appsettign.json 操作类
+                string iss = "Issuer";
+                string aud = "Audience";
+                string secret = "Audience";
+
+                var claims = new List<Claim>
+              {
+                 /*
+                 * 特别重要:
+                   1、这里将用户的部分信息,比如 uid 存到了Claim 中,如果你想知道如何在其他地方将这个 uid从 Token 中取出来,请看下边的SerializeJwt() 方法,或者在整个解决方案,搜索这个方法,看哪里使用了!
+                   2、你也可以研究下 HttpContext.User.Claims ,具体的你可以看看 Policys/PermissionHandler.cs 类中是如何使用的。
+                 */                
+
+                new Claim(JwtRegisteredClaimNames.Jti, tokenModel.Uid.ToString()),
+                new Claim(JwtRegisteredClaimNames.Iat, $"{new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds()}"),
+                new Claim(JwtRegisteredClaimNames.Nbf,$"{new DateTimeOffset(DateTime.Now).ToUnixTimeSeconds()}") ,
+                //这个就是过期时间,目前是过期7200秒,可自定义,注意JWT有自己的缓冲过期时间
+                new Claim (JwtRegisteredClaimNames.Exp,$"{new DateTimeOffset(DateTime.Now.AddSeconds(7200)).ToUnixTimeSeconds()}"),
+                new Claim(JwtRegisteredClaimNames.Iss,iss),
+                new Claim(JwtRegisteredClaimNames.Aud,aud),
+                
+                //new Claim(ClaimTypes.Role,tokenModel.Role),//为了解决一个用户多个角色(比如:Admin,System),用下边的方法
+               };
+
+                // 可以将一个用户的多个角色全部赋予;
+                claims.AddRange(tokenModel.Role.Split(',').Select(s => new Claim(ClaimTypes.Role, s)));
+
+
+                //秘钥 (SymmetricSecurityKey 对安全性的要求,密钥的长度太短会报出异常)
+                var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret));
+                var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
+
+                var jwt = new JwtSecurityToken(
+                    issuer: iss,
+                    claims: claims,
+                    signingCredentials: creds
+                    //,expires:DateTime.Now.AddMinutes(1)
+                    );
+
+                var jwtHandler = new JwtSecurityTokenHandler();
+                var encodedJwt = jwtHandler.WriteToken(jwt);
+
+                return encodedJwt;
+            }
+
+            /// <summary>
+            /// 解析
+            /// </summary>
+            /// <param name="jwtStr"></param>
+            /// <returns></returns>
+            public static TokenModelJwt SerializeJwt(string jwtStr)
+            {
+                var jwtHandler = new JwtSecurityTokenHandler();
+                JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(jwtStr);
+                object role;
+                try
+                {
+                    jwtToken.Payload.TryGetValue(ClaimTypes.Role, out role);
+                }
+                catch (Exception e)
+                {
+                    Console.WriteLine(e);
+                    throw;
+                }
+                var tm = new TokenModelJwt
+                {
+                    Uid = (jwtToken.Id).ObjToInt(),
+                    Role = role != null ? role.ObjToString() : "",
+                };
+                return tm;
+            }
+        }
+
+        /// <summary>
+        /// 令牌
+        /// </summary>
+        public class TokenModelJwt
+        {
+            /// <summary>
+            /// Id
+            /// </summary>
+            public long Uid { get; set; }
+
+            public string UserName { get; set; }
+
+            /// <summary>
+            /// 角色
+            /// </summary>
+            public string Role { get; set; }
+            /// <summary>
+            /// 职能
+            /// </summary>
+            public string Work { get; set; }
+
+
+
+        }
+    }
+}

+ 1 - 125
OASystem/OASystem.Api/OAMethodLib/Quartz/Business/TaskAssignment.cs

@@ -15,7 +15,6 @@ namespace OASystem.API.OAMethodLib.Quartz.Business
     {
         private readonly static TaskAllocationRepository _taskAllocationRep = AutofacIocManager.Instance.GetService<TaskAllocationRepository>();
         private readonly static ILogger _logger;
-        private readonly static IHubContext<ChatHub> _hubContext;
         /// <summary>
         /// 定时任务更改状态
         /// 每天下午六点定时更新
@@ -65,130 +64,7 @@ namespace OASystem.API.OAMethodLib.Quartz.Business
         /// </summary>
         public static async void PostTaskNewsFeed()
         {
-            #region 消息处理
-
-           
-            //var data = _taskAllocationRep._sqlSugar
-            //                             .Queryable<Pm_TaskAllocation>()
-            //                             .Where(it => it.IsDel == 0 &&
-            //                                          !string.IsNullOrEmpty(it.PredictEndTime) &&
-            //                                          Convert.ToDateTime(it.PredictEndTime).ToString("yyyy-MM-dd").Equals(DateTime.Now.ToString("yyyy-MM-dd"))
-            //                                   )
-            //                             .ToList();
-            //if (data.Count > 0)
-            //{
-            //    //处理要任务提醒的员工
-            //    List<int> primaryIds = new List<int>();
-            //    primaryIds = data.Select(it => it.Id).ToList();
-            //    var subData = _taskAllocationRep._sqlSugar
-            //                                    .Queryable<Pm_TaskRelevanceUser>()
-            //                                    .Where(it => it.IsDel == 0 &&
-            //                                                 primaryIds.Contains(it.TAId) &&
-            //                                                 it.TaskStatus <= (int)TaskEnum.UnderWay
-            //                                          )
-            //                                    .ToList();
-
-            //    _taskAllocationRep._sqlSugar.BeginTran();
-            //    var depDatas = _taskAllocationRep._sqlSugar.Queryable<Sys_Department>().Where(it => it.IsDel == 0).ToList();
-            //    var groupDatas = _taskAllocationRep._sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0).ToList();
-            //    var userDatas = _taskAllocationRep._sqlSugar.Queryable<Sys_Users>().Where(it => it.IsDel == 0).ToList();
-
-            //    foreach (var item in data)
-            //    {
-            //        string depName = string.Empty;
-            //        string groupName = string.Empty;
-            //        var depData = depDatas.Where(it => it.Id == item.DepId).FirstOrDefault();
-            //        if (depData != null) { depName = depData.DepName; }
-            //        if (item.DiId == -1) { groupName = "其他"; }
-            //        else
-            //        {
-            //            var groupData = groupDatas.Where(it => it.Id == item.DiId).FirstOrDefault();
-            //            if (groupData != null) { groupName = groupData.TeamName; }
-            //        }
-
-            //        var subData1 = subData.Where(it => it.TAId == item.Id).ToList();
-
-            //        foreach (var subItem in subData1)
-            //        {
-            //            string realityStartTime = string.Empty;
-            //            string userName = string.Empty;
-            //            if (!string.IsNullOrEmpty(subItem.BeginTime))
-            //            {
-            //                realityStartTime = subItem.BeginTime;
-            //            }
-            //            else
-            //            {
-            //                if (subItem.TaskStatus == -1) realityStartTime = "未开始";
-            //                else if (subItem.TaskStatus == 0) realityStartTime = "已知晓";
-            //            }
-
-            //            var userData = userDatas.Where(it => it.Id == subItem.UserId).FirstOrDefault();
-            //            if (userData != null) { userName = userData.CnName; }
-            //            string msgContent = string.Format(@"任务归属:{0}<br/>
-            //                                                归属团组:{1}<br/>
-            //                                                预计起止时间:{2} 至 {3}<br/>
-            //                                                实际开始时间:{4}<br/>
-            //                                                任务优先级:{5}<br/>
-            //                                                任务参与者:{6}<br/>
-            //                                                任务内容:{7}", depName, groupName, item.PredictBeginTime, item.PredictEndTime,
-            //                                                realityStartTime, item.TaskPriority, userName, item.TaskContent);
-            //            Sys_Message _Message = new Sys_Message()
-            //            {
-            //                Type = MessgeTypeEnum.TaskProgressUpdate,
-            //                Title = item.TaskName,
-            //                IssuerId = 4, //管理员
-            //                Content = msgContent,
-            //                ReleaseTime = DateTime.Now,
-            //                CreateUserId = 4,
-            //                CreateTime = DateTime.Now,
-            //                DeleteTime = "1990-01-01 00:00:00.000",
-            //                DiId = item.DiId,
-            //            };
-            //            var msgAddId = _taskAllocationRep._sqlSugar.Insertable<Sys_Message>(_Message).ExecuteReturnIdentity();
-            //            if (msgAddId < 0)
-            //            {
-            //                _taskAllocationRep._sqlSugar.RollbackTran();
-            //                _logger.LogError("任务通知消息推送失败!");
-            //                return;
-            //            }
-
-            //            Sys_MessageReadAuth _MessageReadAuth = new Sys_MessageReadAuth()
-            //            {
-            //                MsgId = msgAddId,
-            //                ReadableUId = subItem.UserId,
-            //                IsRead = 0,
-            //                ReadTime = Convert.ToDateTime("1990-01-01 00:00:00.000"),
-            //                CreateUserId = 4,
-            //                CreateTime = DateTime.Now,
-            //                DeleteTime = "1990-01-01 00:00:00.000"
-            //            };
-
-            //            var msgAuthAddId = _taskAllocationRep._sqlSugar.Insertable<Sys_MessageReadAuth>(_MessageReadAuth).ExecuteReturnIdentity();
-            //            if (msgAuthAddId < 0)
-            //            {
-            //                _taskAllocationRep._sqlSugar.RollbackTran();
-            //                _logger.LogError("任务通知消息推送失败!");
-            //                return;
-            //            }
-            //        }
-            //    }
-            //    _taskAllocationRep._sqlSugar.CommitTran();
-            //}
-            #endregion
-
-            //查询需要提示的消息 Singlr
-            string sql = string.Format(@"Select smra.Id,su.CnName As Issuer,sm.ReleaseTime,sm.Title,
-										 sm.Content,smra.ReadableUId,smra.IsRead,smra.CreateTime
-										 From Sys_Message sm
-										 Left Join Sys_MessageReadAuth smra On sm.Id = smra.MsgId
-										 Left Join Sys_Users su On sm.IssuerId = su.Id
-										 Where sm.IsDel = 0 And sm.Type = 6 And smra.IsRead = 0
-										 Order By smra.ReadableUId,smra.CreateTime Desc");
-            var datas = _taskAllocationRep._sqlSugar.SqlQueryable<MessageReadAuthPushView>(sql).ToList();
-
-            await _hubContext.Clients.All.SendAsync("ReceiveMessage","系统通知","${da}");
-
-
+            
         }
     }
 }

+ 130 - 3
OASystem/OASystem.Api/OAMethodLib/Quartz/Jobs/TaskNewsFeedJob.cs

@@ -1,4 +1,7 @@
-using OASystem.API.OAMethodLib.Quartz.Business;
+using Microsoft.AspNetCore.SignalR;
+using OASystem.API.OAMethodLib.Hubs;
+using OASystem.API.OAMethodLib.Quartz.Business;
+using OASystem.Infrastructure.Repositories.PersonnelModule;
 using Quartz;
 
 namespace OASystem.API.OAMethodLib.Quartz.Jobs
@@ -10,10 +13,14 @@ namespace OASystem.API.OAMethodLib.Quartz.Jobs
     public class TaskNewsFeedJob : IJob
     {
         private readonly ILogger<TaskNewsFeedJob> _logger;
+        private readonly TaskAllocationRepository _taskAllocationRep = AutofacIocManager.Instance.GetService<TaskAllocationRepository>();
+        private readonly IHubContext<ServerHub> _hubContext;
 
-        public TaskNewsFeedJob(ILogger<TaskNewsFeedJob> logger)
+        public TaskNewsFeedJob(ILogger<TaskNewsFeedJob> logger, TaskAllocationRepository taskAllocationRep, IHubContext<ServerHub> hubContext)
         {
             _logger = logger;
+            _taskAllocationRep = taskAllocationRep;
+            _hubContext = hubContext;
         }
 
         public Task Execute(IJobExecutionContext context)
@@ -21,7 +28,127 @@ namespace OASystem.API.OAMethodLib.Quartz.Jobs
             _logger.LogInformation("调用任务消息推送 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
 
             //在此处编写任务业务代码
-            TaskAssignment.PostTaskNewsFeed();
+            #region 消息处理
+
+            //var data = _taskAllocationRep._sqlSugar
+            //                             .Queryable<Pm_TaskAllocation>()
+            //                             .Where(it => it.IsDel == 0 &&
+            //                                          !string.IsNullOrEmpty(it.PredictEndTime) &&
+            //                                          Convert.ToDateTime(it.PredictEndTime).ToString("yyyy-MM-dd").Equals(DateTime.Now.ToString("yyyy-MM-dd"))
+            //                                   )
+            //                             .ToList();
+            //if (data.Count > 0)
+            //{
+            //    //处理要任务提醒的员工
+            //    List<int> primaryIds = new List<int>();
+            //    primaryIds = data.Select(it => it.Id).ToList();
+            //    var subData = _taskAllocationRep._sqlSugar
+            //                                    .Queryable<Pm_TaskRelevanceUser>()
+            //                                    .Where(it => it.IsDel == 0 &&
+            //                                                 primaryIds.Contains(it.TAId) &&
+            //                                                 it.TaskStatus <= (int)TaskEnum.UnderWay
+            //                                          )
+            //                                    .ToList();
+
+            //    _taskAllocationRep._sqlSugar.BeginTran();
+            //    var depDatas = _taskAllocationRep._sqlSugar.Queryable<Sys_Department>().Where(it => it.IsDel == 0).ToList();
+            //    var groupDatas = _taskAllocationRep._sqlSugar.Queryable<Grp_DelegationInfo>().Where(it => it.IsDel == 0).ToList();
+            //    var userDatas = _taskAllocationRep._sqlSugar.Queryable<Sys_Users>().Where(it => it.IsDel == 0).ToList();
+
+            //    foreach (var item in data)
+            //    {
+            //        string depName = string.Empty;
+            //        string groupName = string.Empty;
+            //        var depData = depDatas.Where(it => it.Id == item.DepId).FirstOrDefault();
+            //        if (depData != null) { depName = depData.DepName; }
+            //        if (item.DiId == -1) { groupName = "其他"; }
+            //        else
+            //        {
+            //            var groupData = groupDatas.Where(it => it.Id == item.DiId).FirstOrDefault();
+            //            if (groupData != null) { groupName = groupData.TeamName; }
+            //        }
+
+            //        var subData1 = subData.Where(it => it.TAId == item.Id).ToList();
+
+            //        foreach (var subItem in subData1)
+            //        {
+            //            string realityStartTime = string.Empty;
+            //            string userName = string.Empty;
+            //            if (!string.IsNullOrEmpty(subItem.BeginTime))
+            //            {
+            //                realityStartTime = subItem.BeginTime;
+            //            }
+            //            else
+            //            {
+            //                if (subItem.TaskStatus == -1) realityStartTime = "未开始";
+            //                else if (subItem.TaskStatus == 0) realityStartTime = "已知晓";
+            //            }
+
+            //            var userData = userDatas.Where(it => it.Id == subItem.UserId).FirstOrDefault();
+            //            if (userData != null) { userName = userData.CnName; }
+            //            string msgContent = string.Format(@"任务归属:{0}<br/>
+            //                                                归属团组:{1}<br/>
+            //                                                预计起止时间:{2} 至 {3}<br/>
+            //                                                实际开始时间:{4}<br/>
+            //                                                任务优先级:{5}<br/>
+            //                                                任务参与者:{6}<br/>
+            //                                                任务内容:{7}", depName, groupName, item.PredictBeginTime, item.PredictEndTime,
+            //                                                realityStartTime, item.TaskPriority, userName, item.TaskContent);
+            //            Sys_Message _Message = new Sys_Message()
+            //            {
+            //                Type = MessgeTypeEnum.TaskProgressUpdate,
+            //                Title = item.TaskName,
+            //                IssuerId = 4, //管理员
+            //                Content = msgContent,
+            //                ReleaseTime = DateTime.Now,
+            //                CreateUserId = 4,
+            //                CreateTime = DateTime.Now,
+            //                DeleteTime = "1990-01-01 00:00:00.000",
+            //                DiId = item.DiId,
+            //            };
+            //            var msgAddId = _taskAllocationRep._sqlSugar.Insertable<Sys_Message>(_Message).ExecuteReturnIdentity();
+            //            if (msgAddId < 0)
+            //            {
+            //                _taskAllocationRep._sqlSugar.RollbackTran();
+            //                _logger.LogError("任务通知消息推送失败!");
+            //                return;
+            //            }
+
+            //            Sys_MessageReadAuth _MessageReadAuth = new Sys_MessageReadAuth()
+            //            {
+            //                MsgId = msgAddId,
+            //                ReadableUId = subItem.UserId,
+            //                IsRead = 0,
+            //                ReadTime = Convert.ToDateTime("1990-01-01 00:00:00.000"),
+            //                CreateUserId = 4,
+            //                CreateTime = DateTime.Now,
+            //                DeleteTime = "1990-01-01 00:00:00.000"
+            //            };
+
+            //            var msgAuthAddId = _taskAllocationRep._sqlSugar.Insertable<Sys_MessageReadAuth>(_MessageReadAuth).ExecuteReturnIdentity();
+            //            if (msgAuthAddId < 0)
+            //            {
+            //                _taskAllocationRep._sqlSugar.RollbackTran();
+            //                _logger.LogError("任务通知消息推送失败!");
+            //                return;
+            //            }
+            //        }
+            //    }
+            //    _taskAllocationRep._sqlSugar.CommitTran();
+            //}
+            #endregion
+
+            //查询需要提示的消息 Singlr
+            string sql = string.Format(@"Select smra.Id,su.CnName As Issuer,sm.ReleaseTime,sm.Title,
+										 sm.Content,smra.ReadableUId,smra.IsRead,smra.CreateTime
+										 From Sys_Message sm
+										 Left Join Sys_MessageReadAuth smra On sm.Id = smra.MsgId
+										 Left Join Sys_Users su On sm.IssuerId = su.Id
+										 Where sm.IsDel = 0 And sm.Type = 6 And smra.IsRead = 0
+										 Order By smra.ReadableUId,smra.CreateTime Desc");
+            var datas = _taskAllocationRep._sqlSugar.SqlQueryable<MessageReadAuthPushView>(sql).ToList();
+
+             _hubContext.Clients.All.SendAsync("ReceiveMessage", "系统通知", $"最新消息{DateTime.Now}");
 
             return Task.CompletedTask;
         }

+ 1 - 1
OASystem/OASystem.Api/OAMethodLib/Quartz/QuartzFactory.cs

@@ -37,7 +37,7 @@ namespace QuzrtzJob.Factory
                             .WithCronSchedule("0 0 18 * * ?")
                             .Build();
             var taskMsgTrigger = TriggerBuilder.Create()
-                            .WithSimpleSchedule(x => x.WithIntervalInSeconds(60).RepeatForever())//每两秒执行一次
+                            .WithSimpleSchedule(x => x.WithIntervalInSeconds(30).RepeatForever())//每六十秒执行一次
                             //.WithCronSchedule("0 0 14 * * ?")
                             .Build();
 

+ 1 - 2
OASystem/OASystem.Api/Program.cs

@@ -48,7 +48,6 @@ builder.Services.AddControllers()
     });
 
 
-
 #region Cors
 builder.Services.AddCors(policy =>
 {
@@ -347,7 +346,7 @@ app.Lifetime.ApplicationStopped.Register(() =>
 app.UseEndpoints(endpoints =>
 {
     endpoints.MapControllers();
-    endpoints.MapHub<ChatHub>("/api/chatHub");
+    endpoints.MapHub<ServerHub>("/api/chatHub");
 });
 #endregion