mh_sms/APT.MicroApi/APT.FM.WebApi/Controllers/Api/NotificationController.cs
2024-04-12 16:50:28 +08:00

216 lines
9.5 KiB
C#

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
{
/// <summary>
/// 通知
/// </summary>
[Route("api/FM/Notification")]
public class NotificationController : AuthorizeApiController<T_FM_NOTIFICATION>
{
/// <summary>
/// 查询
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
[HttpPost, Route("Entities")]
public JsonActionResult<IEnumerable<T_FM_NOTIFICATION>> Entities([FromBody] KeywordFilter filter)
{
return WitEntities(null, filter);
}
/// <summary>
/// 查询
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
///
[HttpPost, Route("OrderEntities")]
public JsonActionResult<IEnumerable<T_FM_NOTIFICATION>> OrderEntities([FromBody] KeywordFilter filter)
{
return WitOrderEntities(null, filter);
}
/// <summary>
/// 查询
/// </summary>
/// <param name="pageFilter"></param>
/// <returns></returns>
[HttpPost, Route("Paged")]
public PagedActionResult<T_FM_NOTIFICATION> Paged([FromBody] KeywordPageFilter pageFilter)
{
return WitPaged(null, pageFilter);
}
/// <summary>
/// 查询
/// </summary>
/// <param name="pageFilter"></param>
/// <returns></returns>
[HttpPost, Route("OrderPaged")]
public PagedActionResult<T_FM_NOTIFICATION> OrderPaged([FromBody] KeywordPageFilter pageFilter)
{
return WitOrderPaged(null, pageFilter);
}
/// <summary>
/// 删除
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet, Route("Delete")]
public JsonActionResult<bool> Delete(string id)
{
return WitDelete(id);
}
/// <summary>
/// 更新
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost, Route("Update")]
public JsonActionResult<bool> Update([FromBody] T_FM_NOTIFICATION entity)
{
return WitUpdate(entity);
}
/// <summary>
/// 批量删除
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
[HttpGet, Route("BatchDelete")]
public JsonActionResult<bool> BatchDelete(string ids)
{
return WitBatchDelete(ids);
}
/// <summary>
/// 获得单条实体数据
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
[HttpPost, Route("Get")]
public JsonActionResult<T_FM_NOTIFICATION> Get([FromBody] KeywordFilter filter)
{
return WitEntity(null, filter);
}
/// <summary>
/// 查看通知公告
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
[HttpPost, Route("AcceptedNotifi")]
public JsonActionResult<bool> AcceptedNotifi([FromBody] KeywordFilter filter)
{
return SafeExecute<bool>(() =>
{
var notification = this.GetEntity<T_FM_NOTIFICATION>(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<bool> CancelNotifi([FromBody] KeywordFilter filter)
{
return SafeExecute<bool>(() =>
{
var notification = this.GetEntity<T_FM_NOTIFICATION>(filter.Keyword);
if (notification == null) throw new Exception("无效参数");
notification.ORDER_STATUS = (int)FMOrderStatusEnum.;
this.UpdateEntity(notification);
return true;
});
}
[HttpPost, Route("OrderPagedNotice")]
public PagedActionResult<NotificationModel> OrderPagedNotice([FromBody] KeywordPageFilter pageFilter)
{
return SafeGetPagedData<NotificationModel>((result) =>
{
string userId = pageFilter.Parameter1;
int clientType = LibUtils.ToInt(pageFilter.Parameter2);
if (string.IsNullOrEmpty(userId)) throw new Exception("无效用户ID");
List<NotificationModel> models = new List<NotificationModel>();
var role = this.GetEntities<T_FM_USER_BELONG_ROLE>(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_FM_NOTIFICATION>(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_FM_NOTIFICATION>(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_FM_NOTIFICATION_ACCEPTED>(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();
}
}
});
}
}
}