Dun.Jason 2 сар өмнө
parent
commit
a85aec2ddb

+ 4 - 4
src/Hotline.Api/Controllers/ArticleController.cs

@@ -183,7 +183,7 @@ namespace Hotline.Api.Controllers
                         .ToListAsync(HttpContext.RequestAborted);
                     if (userlist != null && userlist.Count > 0)
                     {
-                        await _circularRecordDomainService.RecordUserHandle(userlist, true);
+                        await _circularRecordDomainService.RecordUserHandle(userlist, true,circular.Title,circular.Content);
                     }
                 }
                 else
@@ -195,7 +195,7 @@ namespace Hotline.Api.Controllers
                         .ToListAsync(HttpContext.RequestAborted);
                     if (orglist != null && orglist.Count > 0)
                     {
-                        await _circularRecordDomainService.RecordOrgHandle(orglist, true);
+                        await _circularRecordDomainService.RecordOrgHandle(orglist, true,circular.Title,circular.Content);
                     }
                 }
             }
@@ -377,7 +377,7 @@ namespace Hotline.Api.Controllers
                     model.ReadedNum++;
                     await _circularRepository.UpdateAsync(model, HttpContext.RequestAborted);
                     //处理计数
-                    await _circularRecordDomainService.RecordUserHandle(new List<string> { _sessionContext.RequiredUserId }, false, cancellationToken: HttpContext.RequestAborted);
+                    await _circularRecordDomainService.RecordUserHandle(new List<string> { _sessionContext.RequiredUserId }, false,"","", cancellationToken: HttpContext.RequestAborted);
                 }
             }
             else
@@ -396,7 +396,7 @@ namespace Hotline.Api.Controllers
                     model.ReadedNum++;
                     await _circularRepository.UpdateAsync(model, HttpContext.RequestAborted);
                     //处理部门计数
-                    await _circularRecordDomainService.RecordOrgHandle(new List<string> { _sessionContext.RequiredOrgId }, false, cancellationToken: HttpContext.RequestAborted);
+                    await _circularRecordDomainService.RecordOrgHandle(new List<string> { _sessionContext.RequiredOrgId }, false,"","", cancellationToken: HttpContext.RequestAborted);
                 }
             }
 

+ 6 - 4
src/Hotline.Api/Realtimes/RealtimeService.cs

@@ -164,16 +164,16 @@ public class RealtimeService : IRealtimeService, IScopeDependency
     /// <param name="id"></param>
     /// <param name="cancellationToken"></param>
     /// <returns></returns>
-    public async Task CircularRecoordAsync(string id, CancellationToken cancellationToken)
+    public async Task CircularRecoordAsync(string id,string title,string sendContent, CancellationToken cancellationToken)
     {
         //获取所有需要推送的
         var record = await _circularRecordRepository.Queryable().Where(x => x.Id == id).FirstAsync();
 
         if (record.CircularType == Share.Enums.Article.ECircularType.Person)
         {
-            //个人
+            //个人数量
             await SendToUserAsync(record.UserId, RealtimeMethods.CircularRecord,
-                new CircularRecoordDto() { CircularType = Share.Enums.Article.ECircularType.Person, Count = record.RecordCount },
+                new CircularRecoordDto() { CircularType = Share.Enums.Article.ECircularType.Person, Count = record.RecordCount,SendContent = sendContent,Title= title },
                 cancellationToken);
         }
         else
@@ -184,10 +184,12 @@ public class RealtimeService : IRealtimeService, IScopeDependency
             {
                 try
                 {
+                    //数量
                     await SendToUserAsync(user.Id, RealtimeMethods.CircularRecord,
                         new CircularRecoordDto()
-                        { CircularType = Share.Enums.Article.ECircularType.Org, Count = record.RecordCount },
+                        { CircularType = Share.Enums.Article.ECircularType.Org, Count = record.RecordCount,SendContent = sendContent,Title = title },
                         cancellationToken);
+
                 }
                 catch
                 {

+ 1 - 5
src/Hotline.Share/Dtos/Article/BulletinDto.cs

@@ -250,11 +250,7 @@ namespace Hotline.Share.Dtos.Article
 
         public bool? IsTimeOut { get; set; }
     }
-
-    public record AddCircularMessage: AddCircularDto
-    {
-
-    }
+   
     public record AddCircularDto
     {
         /// <summary>

+ 4 - 0
src/Hotline.Share/Dtos/Realtime/RingDto.cs

@@ -31,4 +31,8 @@ public record CircularRecoordDto
     public int Count { get; set; }
 
     public ECircularType CircularType { get; set; }
+
+    public string? SendContent { get; set; }
+
+    public string? Title { get; set; }
 }

+ 66 - 8
src/Hotline/Article/CircularRecordDomainService.cs

@@ -1,6 +1,9 @@
 using Hotline.Realtimes;
 using Hotline.Share.Dtos.Article;
 using Hotline.Share.Enums.Article;
+using MapsterMapper;
+using Microsoft.AspNetCore.Http;
+using XF.Domain.Authentications;
 using XF.Domain.Dependency;
 using XF.Domain.Repository;
 
@@ -10,12 +13,21 @@ namespace Hotline.Article
     {
         private readonly IRepository<CircularRecord> _circularRecordRepository;
         private readonly IRealtimeService _realtimeService;
-        public CircularRecordDomainService(IRepository<CircularRecord> circularRecordRepository, IRealtimeService realtimeService)
+        private readonly IMapper _mapper;
+        private readonly IRepository<Circular> _circularRepository;
+        private readonly IRepository<CircularReadGroup> _circularReadGroupRepository;
+        private readonly ISessionContext _sessionContext;
+
+        public CircularRecordDomainService(IRepository<CircularRecord> circularRecordRepository, IRealtimeService realtimeService, IMapper mapper, IRepository<Circular> circularRepository, IRepository<CircularReadGroup> circularReadGroupRepository, ISessionContext sessionContext)
         {
             _circularRecordRepository = circularRecordRepository;
             _realtimeService = realtimeService;
+            _mapper = mapper;
+            _circularRepository = circularRepository;
+            _circularReadGroupRepository = circularReadGroupRepository;
+            _sessionContext = sessionContext;
         }
-        public async Task RecordUserHandle(List<string> userIds, bool isAdd,int count = 1, CancellationToken cancellationToken= default)
+        public async Task RecordUserHandle(List<string> userIds, bool isAdd,string title,string sendContent,int count = 1, CancellationToken cancellationToken= default)
         {
             foreach (var item in userIds)
             {
@@ -53,14 +65,14 @@ namespace Hotline.Article
                 }
                 try
                 {
-                    await _realtimeService.CircularRecoordAsync(userRecord.Id, cancellationToken);
+                    await _realtimeService.CircularRecoordAsync(userRecord.Id,title,sendContent, cancellationToken);
                 }
                 catch{}
             }
             
         }
 
-        public async Task RecordOrgHandle(List<string> orgIds, bool isAdd,int count =1, CancellationToken cancellationToken = default)
+        public async Task RecordOrgHandle(List<string> orgIds, bool isAdd,string title, string sendContent, int count =1, CancellationToken cancellationToken = default)
         {
             foreach (var item in orgIds)
             {
@@ -101,15 +113,61 @@ namespace Hotline.Article
                 }
                 try
                 {
-                    await _realtimeService.CircularRecoordAsync(orgRecord.Id, cancellationToken);
+                    await _realtimeService.CircularRecoordAsync(orgRecord.Id, title, sendContent, cancellationToken);
                 }
                 catch{}
             }
         }
 
-        //public async Task AddCircularMessage(AddCircularMessage dto,ECircularType circularType,List<string> ids,,CancellationToken cancellationToken = default)
-        //{
+        public async Task AddCircularMessage(AddCircularDto dto, CancellationToken cancellationToken = default)
+        {
+            var model = _mapper.Map<Circular>(dto);
+            model.CommitTime = DateTime.Now;
+            model.ExaminTime = DateTime.Now;
+            model.ExaminManId = _sessionContext.UserId;
+            model.CircularState = ECircularState.ReviewPass;
+            model.ExaminOpinion = "内部消息,系统默认通过";
+            model.ReadedNum = 0;
+            model.NeedReadNum = model.CircularReadGroups.Count;
+            model.LostEfficacyTime = DateTime.Now.AddYears(50);
+            var id = await _circularRepository.AddAsync(model,cancellationToken);
+            //子表
+            var list = dto.CircularReadGroups;
+            var readGroupList = new List<CircularReadGroup>();
+            foreach (var item in list)
+            {
+                var readGroup = _mapper.Map<CircularReadGroup>(item);
+                readGroup.CircularId = id;
+                readGroup.IsRead = false;
+                readGroupList.Add(readGroup);
+            }
+            await _circularReadGroupRepository.AddRangeAsync(readGroupList);
 
-        //}
+            //更新阅读数量
+            if (model.CircularType == Share.Enums.Article.ECircularType.Person)
+            {
+                //个人
+                var userlist = await _circularReadGroupRepository.Queryable()
+                    .Where(x => x.CircularId == model.Id)
+                .Select(x => x.UserId)
+                    .ToListAsync();
+                if (userlist != null && userlist.Count > 0)
+                {
+                    await this.RecordUserHandle(userlist, true,model.Title,model.Content);
+                }
+            }
+            else
+            {
+                //部门
+                var orglist = await _circularReadGroupRepository.Queryable()
+                    .Where(x => x.CircularId == model.Id)
+                .Select(x => x.OrgId)
+                    .ToListAsync();
+                if (orglist != null && orglist.Count > 0)
+                {
+                    await this.RecordOrgHandle(orglist, true,model.Title,model.Content);
+                }
+            }
+        }
     }
 }

+ 12 - 2
src/Hotline/Article/ICircularRecordDomainService.cs

@@ -1,10 +1,20 @@
 
+using Hotline.Share.Dtos.Article;
+
 namespace Hotline.Article
 {
     public interface ICircularRecordDomainService
     {
-        Task RecordUserHandle(List<string> userIds,bool isAdd,int count = 1,CancellationToken cancellationToken = default);
+        Task RecordUserHandle(List<string> userIds,bool isAdd,string title, string sendContent, int count = 1,CancellationToken cancellationToken = default);
+
+        Task RecordOrgHandle(List<string> orgIds, bool isAdd,string title, string sendContent, int count = 1, CancellationToken cancellationToken= default);
 
-        Task RecordOrgHandle(List<string> orgIds, bool isAdd, int count = 1, CancellationToken cancellationToken= default);
+        /// <summary>
+        /// 内部通知(无视审核)
+        /// </summary>
+        /// <param name="dto"></param>
+        /// <param name="cancellationToken"></param>
+        /// <returns></returns>
+        Task AddCircularMessage(AddCircularDto dto, CancellationToken cancellationToken = default);
     }
 }

+ 1 - 1
src/Hotline/Realtimes/IRealtimeService.cs

@@ -24,7 +24,7 @@ namespace Hotline.Realtimes
 
         #region 系统消息通知
 
-        Task CircularRecoordAsync(string id, CancellationToken cancellationToken);
+        Task CircularRecoordAsync(string id,string title,string sendContent, CancellationToken cancellationToken);
 
         #endregion