lihao 4 years ago
parent
commit
51bc4fe690

+ 4 - 216
gx_api/GxPress/Repository/GxPress.Repository.Implement/NoticeRepository.cs

@@ -319,7 +319,7 @@ namespace GxPress.Repository.Implement
         /// </summary>
         /// <param name="request"></param>
         /// <returns></returns>
-        public async Task<PagedList<NoticeListPageResult>> GetNoticeListPageAsync(NoticePageSearchRequest request)
+        public async Task<PagedList<NoticeListPageResult>> GetNoticeListPageAsync(SqlKata.Query query, SqlKata.Query countQuery)
         {
             // //用户收件人
             // string sb = "";
@@ -585,7 +585,7 @@ namespace GxPress.Repository.Implement
             //     Items = items
             // };
             // return result;
-            return await GetNewNoticeListPageAsync(request);
+            return await GetNewNoticeListPageAsync(query, countQuery);
         }
 
         /// <summary>
@@ -593,223 +593,11 @@ namespace GxPress.Repository.Implement
         /// </summary>
         /// <param name="request"></param>
         /// <returns></returns>
-        public async Task<PagedList<NoticeListPageResult>> GetNewNoticeListPageAsync(NoticePageSearchRequest request)
+        public async Task<PagedList<NoticeListPageResult>> GetNewNoticeListPageAsync(SqlKata.Query query, SqlKata.Query countQuery)
         {
             var result = new PagedList<NoticeListPageResult>();
-            var noticeTypeValue = GxPress.EnumConst.AllTypeConst.Inbox.GetHashCode();
-            var query = new SqlKata.Query("tede_middle");
-            query.LeftJoin("tede_notice", "tede_notice.Id", "tede_middle.MiddleId");
-            query.LeftJoin("tede_user", "tede_user.Id", "tede_notice.UserId");
-            query.LeftJoin("tede_addressee", "tede_addressee.Id", "tede_middle.MiddleSonId");
-            if (request.SearchType == 1)
-            {
-                query.Where("tede_middle.IsAdmin", true);
-                query.Where("tede_middle.NoticeAddresseeType", 1);
-                query.Where("tede_middle.IsDelete", false);
-            }
-            else if (request.SearchType == 2)
-            {
-                query.Where("tede_middle.AttributeValue", 1);
-                query.Where("tede_middle.NoticeAddresseeType", 2);
-                query.Where("tede_middle.IsDelete", false);
-            }
-            else if (request.SearchType == 3)
-            {
-                query.Where("tede_middle.AttributeValue", 1);
-                query.Where("tede_middle.IsDelete", true);
-            }
-            else if (request.SearchType > 3)
-            {
-                query.Where("tede_notice.TypeValue", request.SearchType);
-                query.WhereNot("tede_middle.NoticeAddresseeType", 2);
-                query.Where("tede_middle.IsDelete", false);
-            }
-            else
-            {
-                query.WhereNot("tede_middle.NoticeAddresseeType", 2);
-                query.Where("tede_middle.IsDelete", false);
-            }
-            if (!string.IsNullOrEmpty(request.Keyword))
-            {
-                if (request.NoticeFolderId > 0)
-                    query.Where("tede_middle.ParentId", request.NoticeFolderId);
-                var sourceIdQuery = new SqlKata.Query("tede_addressee");
-                sourceIdQuery.Join("tede_user", "tede_user.Id", "tede_addressee.UserId");
-                sourceIdQuery.WhereColumns("tede_addressee.SourceId", "=", "tede_middle.MiddleId");
-                sourceIdQuery.WhereLike("tede_user.Name", $"%{request.Keyword}%");
-                sourceIdQuery.Select("tede_addressee.SourceId");
-                query.WhereNot("tede_middle.AttributeValue", 2);
-                query.Where(n => n.OrWhereLike("tede_notice.Title", $"%{request.Keyword}%").OrWhereLike("tede_notice.Content", $"%{request.Keyword}%")
-                .OrWhere(n => n.WhereIn("tede_middle.MiddleId", sourceIdQuery)));
-            }
-            else
-            {
-                var searchList = new List<int> { 1, 2, 3 };
-                if (!searchList.Contains(request.SearchType))
-                    query.Where("tede_middle.ParentId", request.NoticeFolderId);
-            }
-            query.Where("tede_middle.IsRecall", false);
-            query.Where("tede_middle.UserId", request.UserId);
-            query.Where("tede_middle.FolderType", noticeTypeValue);
-            //条数
-            result.Total = await _middleRepository.CountAsync(query);
-            var enjoyUser = new SqlKata.Query("tede_user_middle");
-            enjoyUser.Where("MiddleType", 10);
-            enjoyUser.WhereColumns("DataSourceId", "=", "tede_middle.MiddleId");
-            enjoyUser.SelectRaw("GROUP_CONCAT(SourceName Separator'、')");
-            query.Select(enjoyUser, "EnjoyUser");
-            var flowUserName = new SqlKata.Query("tede_user");
-            flowUserName.SelectRaw("GROUP_CONCAT(Name Separator'、')");
-            var flowTodo = new SqlKata.Query("tede_flow_todo");
-            flowTodo.WhereColumns("tede_flow_todo.FlowId", "=", "tede_notice.SourceId");
-            flowTodo.Where("tede_flow_todo.type", "ApproverCheck");
-            flowTodo.Select("tede_flow_todo.UserId");
-            flowUserName.WhereIn("tede_user.Id", flowTodo);
-            query.Select(flowUserName, "FlowUserName");
-            var uCheckedCount = new SqlKata.Query("tede_flow_todo");
-            uCheckedCount.WhereColumns("tede_flow_todo.FlowId", "=", "tede_notice.SourceId");
-            uCheckedCount.Where("tede_flow_todo.type", "ApproverCheck");
-            uCheckedCount.AsCount();
-            query.Select(uCheckedCount, "UCheckedCount");
-            var checkedCount = new SqlKata.Query("tede_flow_todo");
-            checkedCount.WhereColumns("tede_flow_todo.FlowId", "=", "tede_notice.SourceId");
-            checkedCount.Where("tede_flow_todo.type", "ApproverCheck");
-            checkedCount.Where("tede_flow_todo.IsRead", true);
-            checkedCount.AsCount();
-            query.Select(checkedCount, "CheckedCount");
-            var isFlowRead = new SqlKata.Query("tede_flow_todo");
-            isFlowRead.WhereColumns("tede_flow_todo.FlowId", "=", "tede_notice.SourceId");
-            isFlowRead.WhereColumns("tede_flow_todo.UserId", "=", "tede_middle.UserId");
-            isFlowRead.Where("tede_flow_todo.type", "CarbonCopy");
-            isFlowRead.Limit(1);
-            isFlowRead.Select("IsRead");
-            query.Select(isFlowRead, "IsFlowRead");
-            var isFlowChecked = new SqlKata.Query("tede_flow_todo");
-            isFlowChecked.WhereColumns("tede_flow_todo.FlowId", "=", "tede_notice.SourceId");
-            isFlowChecked.Where("tede_flow_todo.type", "ApproverCheck");
-            isFlowChecked.Where("tede_flow_todo.IsRead", true);
-            isFlowChecked.Limit(1);
-            isFlowChecked.Select("IsRead");
-            query.Select(isFlowChecked, "IsFlowChecked");
-            var IsMyFlowRead = new SqlKata.Query("tede_flow");
-            IsMyFlowRead.WhereColumns("tede_flow.Id", "=", "tede_notice.SourceId");
-            IsMyFlowRead.WhereColumns("tede_flow.UserId", "=", "tede_notice.UserId");
-            IsMyFlowRead.Select("IsRead");
-            query.Select(IsMyFlowRead, "IsMyFlowRead");
-            var IsDone = new SqlKata.Query("tede_flow_todo");
-            IsDone.WhereColumns("tede_flow_todo.UserId", "=", "tede_middle.UserId");
-            IsDone.Where("tede_flow_todo.type", "ApproverCheck");
-            IsDone.Limit(1);
-            IsDone.Select("IsDone");
-            query.Select(IsDone, "IsDone");
-            var IsChecked = new SqlKata.Query("tede_flow_todo");
-            IsChecked.WhereColumns("tede_flow_todo.UserId", "=", "tede_middle.UserId");
-            IsChecked.Where("tede_flow_todo.type", "ApproverCheck");
-            IsChecked.Limit(1);
-            IsChecked.Select("IsChecked");
-            query.Select(IsChecked, "IsChecked");
-            var DoneType = new SqlKata.Query("tede_flow_todo");
-            DoneType.WhereColumns("tede_flow_todo.UserId", "=", "tede_middle.UserId");
-            DoneType.Where("tede_flow_todo.type", "ApproverCheck");
-            DoneType.Limit(1);
-            DoneType.Select("DoneType");
-            query.Select(DoneType, "DoneType");
-            var PraiseCount = new SqlKata.Query("tede_analyze");
-            PraiseCount.WhereColumns("tede_analyze.SourceId", "=", "tede_middle.MiddleId");
-            PraiseCount.Where("tede_analyze.TypeValue", noticeTypeValue);
-            PraiseCount.Where("tede_analyze.AnalyzeType", 1);
-            PraiseCount.AsCount();
-            query.Select(PraiseCount, "PraiseCount");
-            var IsLaud = new SqlKata.Query("tede_analyze");
-            IsLaud.WhereColumns("tede_analyze.SourceId", "=", "tede_middle.MiddleId");
-            IsLaud.Where("tede_analyze.TypeValue", noticeTypeValue);
-            IsLaud.Where("tede_analyze.UserId", request.UserId);
-            IsLaud.Where("tede_analyze.AnalyzeType", 1);
-            IsLaud.Limit(1);
-            IsLaud.AsCount();
-            query.Select(IsLaud, "IsLaud");
-            var CommentCount = new SqlKata.Query("tede_comment");
-            CommentCount.WhereColumns("tede_comment.ArticleId", "=", "tede_middle.MiddleId");
-            CommentCount.Where("tede_comment.pid", 0);
-            CommentCount.Where("tede_comment.TypeValue", noticeTypeValue);
-            CommentCount.AsCount();
-            query.Select(CommentCount, "CommentCount");
-            var RetransmissionCount = new SqlKata.Query("tede_analyze");
-            RetransmissionCount.WhereColumns("tede_analyze.SourceId", "=", "tede_middle.MiddleId");
-            RetransmissionCount.Where("tede_analyze.TypeValue", noticeTypeValue);
-            RetransmissionCount.Where("tede_analyze.UserId", request.UserId);
-            RetransmissionCount.Where("tede_analyze.AnalyzeType", 4);
-            RetransmissionCount.AsCount();
-            query.Select(RetransmissionCount, "RetransmissionCount");
-            var IsRetransmission = new SqlKata.Query("tede_analyze");
-            IsRetransmission.WhereColumns("tede_analyze.SourceId", "=", "tede_middle.MiddleId");
-            IsRetransmission.Where("tede_analyze.TypeValue", noticeTypeValue);
-            IsRetransmission.Where("tede_analyze.UserId", request.UserId);
-            IsRetransmission.Where("tede_analyze.AnalyzeType", 4);
-            IsRetransmission.Limit(1);
-            IsRetransmission.AsCount();
-            query.Select(IsRetransmission, "IsRetransmission");
-            var IsCollect = new SqlKata.Query("tede_analyze");
-            IsCollect.WhereColumns("tede_analyze.SourceId", "=", "tede_middle.MiddleId");
-            IsCollect.Where("tede_analyze.TypeValue", noticeTypeValue);
-            IsCollect.Where("tede_analyze.UserId", request.UserId);
-            IsCollect.Where("tede_analyze.AnalyzeType", 3);
-            IsCollect.Limit(1);
-            IsCollect.AsCount();
-            query.Select(IsCollect, "IsCollect");
-            var CollectCount = new SqlKata.Query("tede_analyze");
-            CollectCount.WhereColumns("tede_analyze.SourceId", "=", "tede_middle.MiddleId");
-            CollectCount.Where("tede_analyze.TypeValue", noticeTypeValue);
-            CollectCount.Where("tede_analyze.UserId", request.UserId);
-            CollectCount.Where("tede_analyze.AnalyzeType", 3);
-            CollectCount.AsCount();
-            query.Select(CollectCount, "CollectCount");
-            var FileCount = new SqlKata.Query("tede_middle");
-            FileCount.WhereColumns("tede_middle.ParentId", "=", "tede_middle.Id");
-            FileCount.Where("tede_middle.IsDelete", false);
-            FileCount.WhereNot("tede_middle.NoticeAddresseeType", 2); ;
-            FileCount.AsCount();
-            query.Select(FileCount, "FileCount");
-            var ReadCount = new SqlKata.Query("tede_addressee");
-            ReadCount.WhereColumns("tede_addressee.SourceId", "=", "tede_middle.Id");
-            ReadCount.Where("tede_addressee.IsRead", true);
-            ReadCount.AsCount();
-            query.Select(ReadCount, "ReadCount");
-            var AllCount = new SqlKata.Query("tede_addressee");
-            AllCount.WhereColumns("tede_addressee.SourceId", "=", "tede_middle.Id");
-            AllCount.AsCount();
-            query.Select(AllCount, "AllCount");
-            var IsRead = new SqlKata.Query("tede_addressee");
-            IsRead.WhereColumns("tede_addressee.SourceId", "=", "tede_middle.Id");
-            IsRead.Where("tede_addressee.IsRead", true);
-            IsRead.Where("tede_addressee.UserId", request.UserId);
-            IsRead.Limit(1);
-            IsRead.AsCount();
-            query.Select(IsRead, "IsRead");
-            var userName = new SqlKata.Query("tede_user");
-            var tedeFlow = new SqlKata.Query("tede_flow");
-            tedeFlow.WhereColumns("tede_flow.Id", "=", "tede_notice.SourceId");
-            tedeFlow.Select("tede_flow.UserId");
-            userName.WhereIn("tede_user.Id", tedeFlow);
-            userName.Limit(1);
-            userName.Select("Name");
-            query.Select(userName, "Name");
-            var IsFlowAdmin = new SqlKata.Query("tede_flow");
-            IsFlowAdmin.WhereColumns("tede_flow.Id", "=", "tede_notice.SourceId");
-            IsFlowAdmin.Where("tede_flow.UserId", request.UserId);
-            IsFlowAdmin.AsCount();
-            query.Select(IsFlowAdmin, "IsFlowAdmin");
-            query.OrderByDesc("tede_middle.AttributeValue");
-            query.OrderByDesc("tede_middle.IsTop");
-            query.OrderByDesc("tede_middle.LastModifiedDate");
-            query.OrderByDesc("tede_middle.Sort");
-            query.ForPage(request.Page, request.PerPage);
-            query.Select(
-                "tede_middle.Id", "tede_middle.MiddleId", "tede_middle.IsTop"
-                , "tede_notice.{UserId,UserName,CreatedDate,Title,Content,TypeValue,IsRecall}"
-                , "tede_user.{AvatarUrl}"
-                , "tede_addressee.{Id as NoticeAddresseeId, SourceId as NoticeId}");
             result.Items = await _middleRepository.GetAllAsync<NoticeListPageResult>(query);
+            result.Total = await _middleRepository.CountAsync(countQuery);
             foreach (var item in result.Items)
             {
                 item.AvatarUrl = StringUtils.AddDomainMin(item.AvatarUrl);

+ 1 - 1
gx_api/GxPress/Repository/GxPress.Repository.Interface/INoticeRepository.cs

@@ -44,7 +44,7 @@ namespace GxPress.Repository.Interface
         /// </summary>
         /// <param name="request"></param>
         /// <returns></returns>
-        Task<PagedList<NoticeListPageResult>> GetNoticeListPageAsync(NoticePageSearchRequest request);
+        Task<PagedList<NoticeListPageResult>> GetNoticeListPageAsync(SqlKata.Query query,SqlKata.Query countQuery);
 
         /// <summary>
         /// 恢复删除的通知

+ 175 - 0
gx_api/GxPress/Service/GxPress.Service.Implement/CommonSqlKata/CommonSqlKataService.cs

@@ -0,0 +1,175 @@
+using GxPress.Service.Interface.CommonSqlKata;
+namespace GxPress.Service.Implement.CommonSqlKataService
+{
+    public class CommonSqlKataService : ICommonSqlKataService
+    {
+        /// <summary>
+        /// 通用
+        /// </summary>
+        /// <param name="noticeTypeValue"></param>
+        /// <param name="userId"></param>
+        /// <param name="query"></param>
+        /// <returns></returns>
+        public SqlKata.Query GetCommonQueryAsync(int noticeTypeValue, int userId, SqlKata.Query query)
+        {
+            var PraiseCount = new SqlKata.Query("tede_analyze");
+            PraiseCount.WhereColumns("tede_analyze.SourceId", "=", "tede_middle.MiddleId");
+            PraiseCount.Where("tede_analyze.TypeValue", noticeTypeValue);
+            PraiseCount.Where("tede_analyze.AnalyzeType", 1);
+            PraiseCount.AsCount();
+            query.Select(PraiseCount, "PraiseCount");
+            var IsLaud = new SqlKata.Query("tede_analyze");
+            IsLaud.WhereColumns("tede_analyze.SourceId", "=", "tede_middle.MiddleId");
+            IsLaud.Where("tede_analyze.TypeValue", noticeTypeValue);
+            IsLaud.Where("tede_analyze.UserId", userId);
+            IsLaud.Where("tede_analyze.AnalyzeType", 1);
+            IsLaud.Limit(1);
+            IsLaud.AsCount();
+            query.Select(IsLaud, "IsLaud");
+            var CommentCount = new SqlKata.Query("tede_comment");
+            CommentCount.WhereColumns("tede_comment.ArticleId", "=", "tede_middle.MiddleId");
+            CommentCount.Where("tede_comment.pid", 0);
+            CommentCount.Where("tede_comment.TypeValue", noticeTypeValue);
+            CommentCount.AsCount();
+            query.Select(CommentCount, "CommentCount");
+            var RetransmissionCount = new SqlKata.Query("tede_analyze");
+            RetransmissionCount.WhereColumns("tede_analyze.SourceId", "=", "tede_middle.MiddleId");
+            RetransmissionCount.Where("tede_analyze.TypeValue", noticeTypeValue);
+            RetransmissionCount.Where("tede_analyze.UserId", userId);
+            RetransmissionCount.Where("tede_analyze.AnalyzeType", 4);
+            RetransmissionCount.AsCount();
+            query.Select(RetransmissionCount, "RetransmissionCount");
+            var IsRetransmission = new SqlKata.Query("tede_analyze");
+            IsRetransmission.WhereColumns("tede_analyze.SourceId", "=", "tede_middle.MiddleId");
+            IsRetransmission.Where("tede_analyze.TypeValue", noticeTypeValue);
+            IsRetransmission.Where("tede_analyze.UserId", userId);
+            IsRetransmission.Where("tede_analyze.AnalyzeType", 4);
+            IsRetransmission.Limit(1);
+            IsRetransmission.AsCount();
+            query.Select(IsRetransmission, "IsRetransmission");
+            var IsCollect = new SqlKata.Query("tede_analyze");
+            IsCollect.WhereColumns("tede_analyze.SourceId", "=", "tede_middle.MiddleId");
+            IsCollect.Where("tede_analyze.TypeValue", noticeTypeValue);
+            IsCollect.Where("tede_analyze.UserId", userId);
+            IsCollect.Where("tede_analyze.AnalyzeType", 3);
+            IsCollect.Limit(1);
+            IsCollect.AsCount();
+            query.Select(IsCollect, "IsCollect");
+            var CollectCount = new SqlKata.Query("tede_analyze");
+            CollectCount.WhereColumns("tede_analyze.SourceId", "=", "tede_middle.MiddleId");
+            CollectCount.Where("tede_analyze.TypeValue", noticeTypeValue);
+            CollectCount.Where("tede_analyze.UserId", userId);
+            CollectCount.Where("tede_analyze.AnalyzeType", 3);
+            CollectCount.AsCount();
+            query.Select(CollectCount, "CollectCount");
+
+
+            return query;
+        }
+        /// <summary>
+        /// 收件箱
+        /// </summary>
+        /// <param name="query"></param>
+        /// <returns></returns>
+        public SqlKata.Query NoticeQueryAsync(SqlKata.Query query, int userId)
+        {
+            var enjoyUser = new SqlKata.Query("tede_user_middle");
+            enjoyUser.Where("MiddleType", 10);
+            enjoyUser.WhereColumns("DataSourceId", "=", "tede_middle.MiddleId");
+            enjoyUser.SelectRaw("GROUP_CONCAT(SourceName Separator'、')");
+            query.Select(enjoyUser, "EnjoyUser");
+            var flowUserName = new SqlKata.Query("tede_user");
+            flowUserName.SelectRaw("GROUP_CONCAT(Name Separator'、')");
+            var flowTodo = new SqlKata.Query("tede_flow_todo");
+            flowTodo.WhereColumns("tede_flow_todo.FlowId", "=", "tede_notice.SourceId");
+            flowTodo.Where("tede_flow_todo.type", "ApproverCheck");
+            flowTodo.Select("tede_flow_todo.UserId");
+            flowUserName.WhereIn("tede_user.Id", flowTodo);
+            query.Select(flowUserName, "FlowUserName");
+            var uCheckedCount = new SqlKata.Query("tede_flow_todo");
+            uCheckedCount.WhereColumns("tede_flow_todo.FlowId", "=", "tede_notice.SourceId");
+            uCheckedCount.Where("tede_flow_todo.type", "ApproverCheck");
+            uCheckedCount.AsCount();
+            query.Select(uCheckedCount, "UCheckedCount");
+            var checkedCount = new SqlKata.Query("tede_flow_todo");
+            checkedCount.WhereColumns("tede_flow_todo.FlowId", "=", "tede_notice.SourceId");
+            checkedCount.Where("tede_flow_todo.type", "ApproverCheck");
+            checkedCount.Where("tede_flow_todo.IsRead", true);
+            checkedCount.AsCount();
+            query.Select(checkedCount, "CheckedCount");
+            var isFlowRead = new SqlKata.Query("tede_flow_todo");
+            isFlowRead.WhereColumns("tede_flow_todo.FlowId", "=", "tede_notice.SourceId");
+            isFlowRead.WhereColumns("tede_flow_todo.UserId", "=", "tede_middle.UserId");
+            isFlowRead.Where("tede_flow_todo.type", "CarbonCopy");
+            isFlowRead.Limit(1);
+            isFlowRead.Select("IsRead");
+            query.Select(isFlowRead, "IsFlowRead");
+            var isFlowChecked = new SqlKata.Query("tede_flow_todo");
+            isFlowChecked.WhereColumns("tede_flow_todo.FlowId", "=", "tede_notice.SourceId");
+            isFlowChecked.Where("tede_flow_todo.type", "ApproverCheck");
+            isFlowChecked.Where("tede_flow_todo.IsRead", true);
+            isFlowChecked.Limit(1);
+            isFlowChecked.Select("IsRead");
+            query.Select(isFlowChecked, "IsFlowChecked");
+            var IsMyFlowRead = new SqlKata.Query("tede_flow");
+            IsMyFlowRead.WhereColumns("tede_flow.Id", "=", "tede_notice.SourceId");
+            IsMyFlowRead.WhereColumns("tede_flow.UserId", "=", "tede_notice.UserId");
+            IsMyFlowRead.Select("IsRead");
+            query.Select(IsMyFlowRead, "IsMyFlowRead");
+            var IsDone = new SqlKata.Query("tede_flow_todo");
+            IsDone.WhereColumns("tede_flow_todo.UserId", "=", "tede_middle.UserId");
+            IsDone.Where("tede_flow_todo.type", "ApproverCheck");
+            IsDone.Limit(1);
+            IsDone.Select("IsDone");
+            query.Select(IsDone, "IsDone");
+            var IsChecked = new SqlKata.Query("tede_flow_todo");
+            IsChecked.WhereColumns("tede_flow_todo.UserId", "=", "tede_middle.UserId");
+            IsChecked.Where("tede_flow_todo.type", "ApproverCheck");
+            IsChecked.Limit(1);
+            IsChecked.Select("IsChecked");
+            query.Select(IsChecked, "IsChecked");
+            var DoneType = new SqlKata.Query("tede_flow_todo");
+            DoneType.WhereColumns("tede_flow_todo.UserId", "=", "tede_middle.UserId");
+            DoneType.Where("tede_flow_todo.type", "ApproverCheck");
+            DoneType.Limit(1);
+            DoneType.Select("DoneType");
+            query.Select(DoneType, "DoneType");
+            var userName = new SqlKata.Query("tede_user");
+            var tedeFlow = new SqlKata.Query("tede_flow");
+            tedeFlow.WhereColumns("tede_flow.Id", "=", "tede_notice.SourceId");
+            tedeFlow.Select("tede_flow.UserId");
+            userName.WhereIn("tede_user.Id", tedeFlow);
+            userName.Limit(1);
+            userName.Select("Name");
+            query.Select(userName, "Name");
+            var IsFlowAdmin = new SqlKata.Query("tede_flow");
+            IsFlowAdmin.WhereColumns("tede_flow.Id", "=", "tede_notice.SourceId");
+            IsFlowAdmin.Where("tede_flow.UserId", userId);
+            IsFlowAdmin.AsCount();
+            query.Select(IsFlowAdmin, "IsFlowAdmin");
+            var FileCount = new SqlKata.Query("tede_middle");
+            FileCount.WhereColumns("tede_middle.ParentId", "=", "tede_middle.Id");
+            FileCount.Where("tede_middle.IsDelete", false);
+            FileCount.WhereNot("tede_middle.NoticeAddresseeType", 2); ;
+            FileCount.AsCount();
+            query.Select(FileCount, "FileCount");
+            var ReadCount = new SqlKata.Query("tede_addressee");
+            ReadCount.WhereColumns("tede_addressee.SourceId", "=", "tede_middle.Id");
+            ReadCount.Where("tede_addressee.IsRead", true);
+            ReadCount.AsCount();
+            query.Select(ReadCount, "ReadCount");
+            var AllCount = new SqlKata.Query("tede_addressee");
+            AllCount.WhereColumns("tede_addressee.SourceId", "=", "tede_middle.Id");
+            AllCount.AsCount();
+            query.Select(AllCount, "AllCount");
+            var IsRead = new SqlKata.Query("tede_addressee");
+            IsRead.WhereColumns("tede_addressee.SourceId", "=", "tede_middle.MiddleId");
+            IsRead.Where("tede_addressee.IsRead", true);
+            IsRead.Where("tede_addressee.UserId", userId);
+            IsRead.Limit(1);
+            IsRead.Select("IsRead");
+            query.Select(IsRead, "IsRead");
+            return query;
+        }
+    }
+}

+ 82 - 2
gx_api/GxPress/Service/GxPress.Service.Implement/Notice/NoticeService.cs

@@ -22,6 +22,7 @@ using GxPress.Service.Interface.Visit;
 using Newtonsoft.Json;
 using GxPress.Service.Interface.UserMiddle;
 using GxPress.Service.Interface.ContentJson;
+using GxPress.Service.Interface.CommonSqlKata;
 
 namespace GxPress.Service.Implement.Notice
 {
@@ -40,10 +41,15 @@ namespace GxPress.Service.Implement.Notice
         private readonly ICommentRepository _commentRepository;
         private readonly IUserMiddleService _userMiddleService;
         private readonly IContentJsonService _contentJsonService;
+        private readonly ICommonSqlKataService commonSqlKataService;
         public NoticeService(IUserRepository userRepository, IMapper mapper, INoticeRepository noticeRepository,
             ICcRepository ccRepository, IAddresseeRepository addresseeRepository,
             IDepartmentRepository departmentRepository, IMiddleService middleService,
-            IMiddleRepository middleRepository, IAnalyzeService analyzeService, ICommentRepository commentRepository, IVisitService visitService, IUserMiddleService userMiddleService, IContentJsonService contentJsonService)
+            IMiddleRepository middleRepository, IAnalyzeService analyzeService,
+            ICommentRepository commentRepository, IVisitService visitService,
+            IUserMiddleService userMiddleService,
+            IContentJsonService contentJsonService,
+            ICommonSqlKataService commonSqlKataService)
         {
             _noticeRepository = noticeRepository;
             _userRepository = userRepository;
@@ -58,6 +64,7 @@ namespace GxPress.Service.Implement.Notice
             _visitService = visitService;
             _userMiddleService = userMiddleService;
             _contentJsonService = contentJsonService;
+            this.commonSqlKataService = commonSqlKataService;
         }
         /// <summary>
         /// 获取通知的点赞列表
@@ -334,7 +341,80 @@ namespace GxPress.Service.Implement.Notice
         /// <returns></returns>
         public async Task<PagedList<NoticeListPageResult>> GetNoticeListPageAsync(NoticePageSearchRequest request)
         {
-            var result = await _noticeRepository.GetNoticeListPageAsync(request);
+            var noticeTypeValue = GxPress.EnumConst.AllTypeConst.Inbox.GetHashCode();
+            var query = new SqlKata.Query("tede_middle");
+            query.LeftJoin("tede_notice", "tede_notice.Id", "tede_middle.MiddleId");
+            query.LeftJoin("tede_user", "tede_user.Id", "tede_notice.UserId");
+            query.LeftJoin("tede_addressee", "tede_addressee.Id", "tede_middle.MiddleSonId");
+            if (request.SearchType == 1)
+            {
+                query.Where("tede_middle.IsAdmin", true);
+                query.Where("tede_middle.NoticeAddresseeType", 1);
+                query.Where("tede_middle.IsDelete", false);
+            }
+            else if (request.SearchType == 2)
+            {
+                query.Where("tede_middle.AttributeValue", 1);
+                query.Where("tede_middle.NoticeAddresseeType", 2);
+                query.Where("tede_middle.IsDelete", false);
+            }
+            else if (request.SearchType == 3)
+            {
+                query.Where("tede_middle.AttributeValue", 1);
+                query.Where("tede_middle.IsDelete", true);
+            }
+            else if (request.SearchType > 3)
+            {
+                query.Where("tede_notice.TypeValue", request.SearchType);
+                query.WhereNot("tede_middle.NoticeAddresseeType", 2);
+                query.Where("tede_middle.IsDelete", false);
+            }
+            else
+            {
+                query.WhereNot("tede_middle.NoticeAddresseeType", 2);
+                query.Where("tede_middle.IsDelete", false);
+            }
+            if (!string.IsNullOrEmpty(request.Keyword))
+            {
+                if (request.NoticeFolderId > 0)
+                    query.Where("tede_middle.ParentId", request.NoticeFolderId);
+                var sourceIdQuery = new SqlKata.Query("tede_addressee");
+                sourceIdQuery.Join("tede_user", "tede_user.Id", "tede_addressee.UserId");
+                sourceIdQuery.WhereColumns("tede_addressee.SourceId", "=", "tede_middle.MiddleId");
+                sourceIdQuery.WhereLike("tede_user.Name", $"%{request.Keyword}%");
+                sourceIdQuery.Select("tede_addressee.SourceId");
+                query.WhereNot("tede_middle.AttributeValue", 2);
+                query.Where(n => n.OrWhereLike("tede_notice.Title", $"%{request.Keyword}%").OrWhereLike("tede_notice.Content", $"%{request.Keyword}%")
+                .OrWhere(n => n.WhereIn("tede_middle.MiddleId", sourceIdQuery)));
+            }
+            else
+            {
+                var searchList = new List<int> { 1, 2, 3 };
+                if (!searchList.Contains(request.SearchType))
+                    query.Where("tede_middle.ParentId", request.NoticeFolderId);
+            }
+            query.Where("tede_middle.IsRecall", false);
+            query.Where("tede_middle.UserId", request.UserId);
+            query.Where("tede_middle.FolderType", noticeTypeValue);
+            //条数
+            var countQuery = query;
+            //收件箱
+            query = commonSqlKataService.NoticeQueryAsync(query, request.UserId);
+            //通用
+            query = commonSqlKataService.GetCommonQueryAsync(noticeTypeValue, request.UserId, query);
+
+            query.OrderByDesc("tede_middle.AttributeValue");
+            query.OrderByDesc("tede_middle.IsTop");
+            query.OrderByDesc("tede_middle.LastModifiedDate");
+            query.OrderByDesc("tede_middle.Sort");
+            query.ForPage(request.Page, request.PerPage);
+            query.Select(
+                "tede_middle.Id", "tede_middle.MiddleId", "tede_middle.IsTop"
+                , "tede_notice.{UserId,UserName,CreatedDate,Title,Content,TypeValue,IsRecall}"
+                , "tede_user.{AvatarUrl}"
+                , "tede_addressee.{Id as NoticeAddresseeId, SourceId as NoticeId}");
+
+            var result = await _noticeRepository.GetNoticeListPageAsync(query, countQuery);
             foreach (var item in result.Items)
             {
                 item.IsAdmin = item.UserId == request.UserId;

+ 20 - 0
gx_api/GxPress/Service/GxPress.Service.Interface/CommonSqlKata/ICommonSqlKataService.cs

@@ -0,0 +1,20 @@
+namespace GxPress.Service.Interface.CommonSqlKata
+{
+    public interface ICommonSqlKataService : IService
+    {
+        /// <summary>
+        /// 通用
+        /// </summary>
+        /// <param name="noticeTypeValue"></param>
+        /// <param name="userId"></param>
+        /// <param name="query"></param>
+        /// <returns></returns>
+        SqlKata.Query GetCommonQueryAsync(int noticeTypeValue, int userId, SqlKata.Query query);
+        /// <summary>
+        /// 收件箱
+        /// </summary>
+        /// <param name="query"></param>
+        /// <returns></returns>
+         SqlKata.Query NoticeQueryAsync(SqlKata.Query query,int userId);
+    }
+}