d_sms_service/APT.BaseData.Services/Services/FM/FMNotificationService.cs

268 lines
13 KiB
C#
Raw Normal View History

2024-10-28 13:45:58 +08:00
using APT.BaseData.Domain.ApiModel.EX;
using APT.BaseData.Domain.Entities.FM;
using APT.BaseData.Domain.Enums;
using APT.BaseData.Domain.IServices.FM;
using APT.Infrastructure.Api;
using APT.Infrastructure.Core;
using APT.Migrations;
using System;
using System.Collections.Generic;
using System.Linq;
using static APT.BaseData.Domain.ApiModel.SocketInfo;
namespace APT.BaseData.Services.Services.FM
{
public class NotificationService : CommonService, IFMNotificatoinService
{
public NotificationService(IRepository repository)
: base(repository)
{
}
private T_FM_NOTIFICATION AddNotification(SendNotificationModel model, List<T_FM_NOTIFICATION> addNotifications,
List<T_FM_NOTIFICATION_PERMIT> addNotificationPermits)
{
if (model == null) return null;
T_FM_NOTIFICATION notification = new T_FM_NOTIFICATION();
notification.TITLE = model.Title;
notification.ECMSAGE = model.Message;
notification.NOTIFICATION_SHOW_TYPE = model.ShowInfoType;
notification.NOTIFICATION_CLIENT_TYPE = model.ClientType;
notification.ORG_ID = model.OrgId;
notification.USER_ID = model.UserId;
addNotifications.Add(notification);
SysPermission sysPermission = Infrastructure.Api.AppContext.SysPermission;
if (model.CheckOrgType == (int)FMNotificationOrgTypeEnum.)
{
T_FM_NOTIFICATION_PERMIT permit = new T_FM_NOTIFICATION_PERMIT();
permit.ORG_ID = notification.ORG_ID;
permit.NOTIFICATION_ID = notification.ID;
permit.PERMIT_TYPE = (int)FMNotificationPermitTypeEnum.;
permit.PERMIT_KEY_ID = notification.ORG_ID;
addNotificationPermits.Add(permit);
}
else if (model.CheckOrgType == (int)FMNotificationOrgTypeEnum.)
{
List<Guid> orgIds = new List<Guid>();
orgIds.Add(notification.ORG_ID.Value);
OrgCache orgCache = null;
if (notification.ORG_ID != null &&
sysPermission.OrgCaches.TryGetValue(notification.ORG_ID.Value, out orgCache))
orgIds.AddRange(orgCache.AllChildrenIds);
foreach (var item in orgIds)
{
T_FM_NOTIFICATION_PERMIT permit = new T_FM_NOTIFICATION_PERMIT();
permit.ORG_ID = notification.ORG_ID;
permit.NOTIFICATION_ID = notification.ID;
permit.PERMIT_TYPE = (int)FMNotificationPermitTypeEnum.;
permit.PERMIT_KEY_ID = item;
addNotificationPermits.Add(permit);
}
}
else if (model.CheckOrgType == (int)FMNotificationOrgTypeEnum.)
{
T_FM_NOTIFICATION_PERMIT permit = new T_FM_NOTIFICATION_PERMIT();
permit.ORG_ID = notification.ORG_ID;
permit.NOTIFICATION_ID = notification.ID;
permit.PERMIT_TYPE = (int)FMNotificationPermitTypeEnum.;
addNotificationPermits.Add(permit);
}
return notification;
}
/// <summary>
/// 发送通知公告
/// </summary>
/// <param name="notificationType"></param>
/// <param name="title"></param>
/// <param name="message"></param>
public void SendNotification(FMNotificationTypeEnum notificationType, FMNotificationClientTypeEnum clientType,
string title, string message)
{
SendNotificationModel sendNotificationModel = new SendNotificationModel();
sendNotificationModel.CheckOrgType = (int)FMNotificationOrgTypeEnum.;
sendNotificationModel.ShowInfoType = (int)FMNotificationShowTypeEnum.;
sendNotificationModel.Title = title;
sendNotificationModel.ClientType = (int)clientType;
sendNotificationModel.Message = message;
sendNotificationModel.NotificatoinType = (int)notificationType;
if (Infrastructure.Api.AppContext.CurrentSession != null)
{
sendNotificationModel.UserId = Infrastructure.Api.AppContext.CurrentSession.UserID;
sendNotificationModel.OrgId = Infrastructure.Api.AppContext.CurrentSession.OrgId;
}
List<WebSocketClientInfo> clientInfos = null;
if (sendNotificationModel.UserId != null)
clientInfos = WebSocketServiceHelper.ClintInfos.Where(t => t.UserId == sendNotificationModel.UserId).ToList();
SendNotification(sendNotificationModel, clientInfos);
}
/// <summary>
/// 发送通知公告
/// </summary>
/// <param name="sendNotificationModel"></param>
/// <param name="ingoreClientInfos"></param>
public void SendNotification(SendNotificationModel sendNotificationModel, List<WebSocketClientInfo> clientInfos)
{
if (clientInfos.Count == 0)
return;
var defClient = clientInfos.FirstOrDefault();
if (string.IsNullOrEmpty(defClient.DbConn))
return;
using (var context = new MigrationContext(defClient.DbConn))
{
if (sendNotificationModel == null) return;
SysPermission sysPermission = Infrastructure.Api.AppContext.SysPermission;
var orgId = sendNotificationModel.OrgId != null ? sendNotificationModel.OrgId :
(defClient.OrgId);
List<T_FM_NOTIFICATION> addNotifications = new List<T_FM_NOTIFICATION>();
List<T_FM_NOTIFICATION_PERMIT> addNotificationPermits = new List<T_FM_NOTIFICATION_PERMIT>();
List<T_FM_NOTIFICATION_ACCEPTED> addNotificationAccepts = new List<T_FM_NOTIFICATION_ACCEPTED>();
var notification = this.AddNotification(sendNotificationModel, addNotifications, addNotificationPermits);
NotificationModel notificationModel = new NotificationModel();
notificationModel.NotificationId = notification.ID;
notificationModel.Title = sendNotificationModel.Title;
notificationModel.Message = sendNotificationModel.Message;
notificationModel.ShowInfoType = sendNotificationModel.ShowInfoType;
notificationModel.Time = DateTime.Now;
notificationModel.NotificatoinType = sendNotificationModel.NotificatoinType;
clientInfos.ForEach(t =>
{
if (t.UserId != null)
{
T_FM_NOTIFICATION_ACCEPTED accept = new T_FM_NOTIFICATION_ACCEPTED();
accept.ORG_ID = notification.ORG_ID;
accept.NOTIFICATION_ID = notification.ID;
accept.USER_ID = t.UserId.Value;
addNotificationAccepts.Add(accept);
}
});
//var commonService = ServiceLocator.Instance.GetService<ICommonService>();
if (sendNotificationModel.UserId != null)
{
notificationModel.UserId = sendNotificationModel.UserId;
var user = context.GetEntity<T_FM_USER>(i => i.ID == sendNotificationModel.UserId, null);
if (user != null)
notificationModel.UserName = user.NAME;
}
WebSocketServiceHelper.SendToAll(new WebSocketResponseInfo()
{
TypeCode = "M001",
Data = notificationModel
}, (t) =>
{
bool ret = false;
if (t.ClientType != WebSocketClientTypeEnum. &&
sendNotificationModel.ClientType != (int)FMNotificationClientTypeEnum. &&
t.ClientType != (WebSocketClientTypeEnum)sendNotificationModel.ClientType)
ret = false;
if (clientInfos.Any(t1 => t1 == t))
ret = false;
else if (sendNotificationModel.CheckOrgType == (int)FMNotificationOrgTypeEnum.)
{
ret = t.OrgId != null && orgId != null && t.OrgId == orgId;
}
else if (sendNotificationModel.CheckOrgType == (int)FMNotificationOrgTypeEnum.)
{
if (t.OrgId != null && orgId != null && t.OrgId == orgId) ret = true;
if (sysPermission != null)
{
OrgCache orgCache = null;
if (orgId != null && sysPermission.OrgCaches.TryGetValue(orgId.Value, out orgCache))
ret = t.OrgId != null && orgCache.AllChildrenIds.Contains(t.OrgId.Value);
}
}
else if (sendNotificationModel.CheckOrgType == (int)FMNotificationOrgTypeEnum.)
{
ret = true;
}
return ret;
});
context.Add(addNotifications);
context.Add(addNotificationPermits);
context.Add(addNotificationAccepts);
context.SaveChanges();
}
}
/// <summary>
/// 发送报警通知公告
/// </summary>
/// <param name="sendNotificationModel"></param>
/// <param name="ingoreClientInfos"></param>
public void SendAlarmNotification(SendNotificationModel sendNotificationModel, List<WebSocketClientInfo> clientInfos)
{
if (clientInfos.Count == 0)
return;
var defClient = clientInfos.FirstOrDefault();
if (string.IsNullOrEmpty(defClient.DbConn))
return;
using (var context = new MigrationContext(defClient.DbConn))
{
if (sendNotificationModel.AlarmId != null)
{
//var alarm = context.GetEntity<T_KR_ALARM_NOTIFICATION>(i => i.ID == sendNotificationModel.AlarmId, null);
//alarm.STATUS = (int)KRMessagStatus.已读;
//context.UpdateEntity(alarm);
//context.SaveChanges();
}
SysPermission sysPermission = Infrastructure.Api.AppContext.SysPermission;
var orgId = sendNotificationModel.OrgId != null ? sendNotificationModel.OrgId :
(defClient.OrgId);
var commonService = ServiceLocator.Instance.GetService<ICommonService>();
foreach (var item in clientInfos)
{
var userId = item.UserId ?? Guid.Empty;
var orders = new Dictionary<string, DbOrder>();
orders.Add("CREATE_TIME", DbOrder.DESC);
var selectField = new string[] { "ID", "USER_ID", "STATUS", "CREATE_TIME", "Nav_AlarmLog.DESCRIBE", "Nav_AlarmLog.Nav_Equipment.NAME", "Nav_AlarmLog.Nav_Appliance.NAME" };
//var alarms = context.GetOrderPageEntities<T_KR_ALARM_NOTIFICATION>(x => x.USER_ID == userId && x.STATUS == (int)KRMessagStatus.未读, orders, null, 1, 0,
// "Nav_AlarmLog.Nav_Equipment", "Nav_AlarmLog.Nav_Appliance");
//var lastAlarm = alarms.Items.FirstOrDefault();
//var total = 0;
//if (lastAlarm != null)
//{
// total = alarms.TotalCount;
//}
//var model = new AlarmNotificationModel
//{
// AlarmId = lastAlarm?.ID,
// Message = lastAlarm == null ? ""
// : "[" + lastAlarm?.Nav_AlarmLog?.Nav_Equipment?.NAME + lastAlarm?.Nav_AlarmLog?.Nav_Appliance?.NAME + "]" + lastAlarm?.Nav_AlarmLog?.DESCRIBE,
// TotalCount = total
//};
//WebSocketServiceHelper.SendToUser(userId, new WebSocketResponseInfo()
//{
// TypeCode = "M0003",
// Data = model
//});
}
}
}
public void SendNotification(Guid userId, SocketData socketData)
{
WebSocketServiceHelper.SendToUser(userId, new WebSocketResponseInfo()
{
TypeCode = "MQ01",
Data = socketData
});
}
}
}