using APT.BaseData.Domain.Enums; using APT.Infrastructure.Core; using APT.BaseData.Domain.ApiModel.EX; using APT.BaseData.Domain.Entities.FM; using Microsoft.AspNetCore.Mvc; using System; using System.Linq; using System.Collections.Generic; using APT.Utility; namespace APT.FM.WebApi.Controllers.Api.FM { /// /// 通知 /// [Route("api/FM/Notification")] public class NotificationController : AuthorizeApiController { /// /// 查询 /// /// /// [HttpPost, Route("Entities")] public JsonActionResult> Entities([FromBody] KeywordFilter filter) { return WitEntities(null, filter); } /// /// 查询 /// /// /// /// [HttpPost, Route("OrderEntities")] public JsonActionResult> OrderEntities([FromBody] KeywordFilter filter) { return WitOrderEntities(null, filter); } /// /// 查询 /// /// /// [HttpPost, Route("Paged")] public PagedActionResult Paged([FromBody] KeywordPageFilter pageFilter) { return WitPaged(null, pageFilter); } /// /// 查询 /// /// /// [HttpPost, Route("OrderPaged")] public PagedActionResult OrderPaged([FromBody] KeywordPageFilter pageFilter) { return WitOrderPaged(null, pageFilter); } /// /// 删除 /// /// /// [HttpGet, Route("Delete")] public JsonActionResult Delete(string id) { return WitDelete(id); } /// /// 更新 /// /// /// [HttpPost, Route("Update")] public JsonActionResult Update([FromBody] T_FM_NOTIFICATION entity) { return WitUpdate(entity); } /// /// 批量删除 /// /// /// [HttpGet, Route("BatchDelete")] public JsonActionResult BatchDelete(string ids) { return WitBatchDelete(ids); } /// /// 获得单条实体数据 /// /// /// [HttpPost, Route("Get")] public JsonActionResult Get([FromBody] KeywordFilter filter) { return WitEntity(null, filter); } /// /// 查看通知公告 /// /// /// [HttpPost, Route("AcceptedNotifi")] public JsonActionResult AcceptedNotifi([FromBody] KeywordFilter filter) { return SafeExecute(() => { var notification = this.GetEntity(filter.Keyword); if (notification == null) throw new Exception("无效参数"); string userId = filter.Parameter1; if (string.IsNullOrEmpty(userId)) throw new Exception("无效用户ID"); T_FM_NOTIFICATION_ACCEPTED accept = new T_FM_NOTIFICATION_ACCEPTED(); accept.NOTIFICATION_ID = notification.ID; accept.ORG_ID = notification.ORG_ID; accept.USER_ID = new Guid(userId); this.AddEntity(accept); return true; }); } [HttpPost, Route("CancelNotifi")] public JsonActionResult CancelNotifi([FromBody] KeywordFilter filter) { return SafeExecute(() => { var notification = this.GetEntity(filter.Keyword); if (notification == null) throw new Exception("无效参数"); notification.ORDER_STATUS = (int)FMOrderStatusEnum.已取消; this.UpdateEntity(notification); return true; }); } [HttpPost, Route("OrderPagedNotice")] public PagedActionResult OrderPagedNotice([FromBody] KeywordPageFilter pageFilter) { return SafeGetPagedData((result) => { string userId = pageFilter.Parameter1; int clientType = LibUtils.ToInt(pageFilter.Parameter2); if (string.IsNullOrEmpty(userId)) throw new Exception("无效用户ID"); List models = new List(); var role = this.GetEntities(i => i.USER_ID == new Guid(userId), new BaseFilter()); if (role.Any()) { var roleIds = role.Select(i => i.ID).ToArray(); //BaseFilter notifiFilter = new BaseFilter(); //notifiFilter.Sort = "CREATE_TIME"; //notifiFilter.Order = DbOrder.DESC; var dateTime = DateTime.Now.AddMonths(-1); var notifications = this.GetOrderPageEntities(t => (t.NOTIFICATION_CLIENT_TYPE == (int)FMNotificationClientTypeEnum.默认 || clientType == (int)FMNotificationClientTypeEnum.默认 || t.NOTIFICATION_CLIENT_TYPE == clientType) && t.Nav_Permits.Any(t1 => (t1.PERMIT_TYPE == (int)FMNotificationPermitTypeEnum.所有人) || (t1.PERMIT_TYPE == (int)FMNotificationPermitTypeEnum.组织 && t1.PERMIT_KEY_ID == pageFilter.OrgId) || (t1.PERMIT_TYPE == (int)FMNotificationPermitTypeEnum.用户 && t1.PERMIT_KEY_ID == new Guid(userId)) || (t1.PERMIT_TYPE == (int)FMNotificationPermitTypeEnum.角色 && roleIds.Contains(t1.PERMIT_KEY_ID ?? Guid.Empty))) && t.ORDER_STATUS != (int)FMOrderStatusEnum.已取消 && t.CREATE_TIME >= dateTime, pageFilter, new string[] { "Nav_User" }); var filter = new BaseFilter(pageFilter.OrgId); filter.SelectField = new string[] { "ID" }; var details = this.GetEntities(t => (t.NOTIFICATION_CLIENT_TYPE == (int)FMNotificationClientTypeEnum.默认 || t.NOTIFICATION_CLIENT_TYPE == clientType) && t.Nav_Permits.Any(t1 => (t1.PERMIT_TYPE == (int)FMNotificationPermitTypeEnum.所有人) || (t1.PERMIT_TYPE == (int)FMNotificationPermitTypeEnum.组织 && t1.PERMIT_KEY_ID == pageFilter.OrgId) || (t1.PERMIT_TYPE == (int)FMNotificationPermitTypeEnum.用户 && t1.PERMIT_KEY_ID == new Guid(userId)) || (t1.PERMIT_TYPE == (int)FMNotificationPermitTypeEnum.角色 && roleIds.Contains(t1.PERMIT_KEY_ID ?? Guid.Empty))) && t.ORDER_STATUS != (int)FMOrderStatusEnum.已取消 && t.CREATE_TIME >= dateTime, filter); var detailsId = details.Select(i => i.ID).ToArray(); filter.SelectField = new string[] { "ID", "NOTIFICATION_ID" }; var hasReadDetail= this.GetEntities(t => t.USER_ID == new Guid(userId), filter) .ToList(); var hasReadDetailId = hasReadDetail.Select(i => i.NOTIFICATION_ID).ToArray(); var noReadCount = detailsId.Count(i=>!hasReadDetailId.Contains(i)); if (notifications.Data.Any()) { foreach (var item in notifications.Data) { NotificationModel notification = new NotificationModel(); notification.Message = item.ECMSAGE; notification.NotificatoinType = item.NOTIFICATION_TYPE; notification.Title = item.TITLE; notification.NotificationId = item.ID; notification.ShowInfoType = item.NOTIFICATION_SHOW_TYPE; if (item.Nav_User != null) notification.UserName = item.Nav_User.NAME; notification.UserId = item.USER_ID; notification.Time = item.CREATE_TIME; notification.IsAccepted = hasReadDetail.Any(t => t.NOTIFICATION_ID == item.ID); models.Add(notification); } result.Data = models; result.TotalCount = notifications.TotalCount; result.ErrorMessage = noReadCount.ToString(); } } }); } } }