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();
}
}
});
}
}
}