216 lines
9.5 KiB
C#
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();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|