/// <summary> /// 是否已经发出会议通知 /// </summary> /// <param name="meetingId">会议Id</param> /// <param name="type">会议通知类型</param> /// <returns>true or false</returns> private bool IsNotified(int meetingId, MeetingNotificationType type) { if (NotificationHistory == null) { Log.Error("会议通知失败。"); throw new InvalidOperationException("会议通知失败。"); } //已发送的通知 var notification = NotificationHistory.FirstOrDefault(it => it.Meeting == meetingId && it.Type == type); //未通知过 if (notification == null) { return(false); } return(true); }
/// <summary> /// 提前5分钟提醒通知会议开始或会议结束 /// </summary> /// <param name="meeting">会议</param> /// <param name="type">通知类型</param> /// <returns>true or false</returns> private bool CanNotify(MeetingCalendarModel meeting, MeetingNotificationType type) { if (meeting == null || type == MeetingNotificationType.None) { Log.Error(string.Format("会议通知失败, 通知类型: {0}。", type)); throw new InvalidOperationException(string.Format("会议通知失败, 通知类型: {0}。", type)); } //已经通知过,不再通知 if (IsNotified(meeting.Id, type)) { return(false); } DateTime meetingDate; if (type == MeetingNotificationType.StartNotification) //开始通知 { meetingDate = Convert.ToDateTime(meeting.StartDate.ToShortDateString() + " " + meeting.StartTime.ToString()); } else if (type == MeetingNotificationType.EndNotification) //结束通知 { meetingDate = Convert.ToDateTime(meeting.EndDate.ToShortDateString() + " " + meeting.EndTime.ToString()); } else { return(false); } var spanMeeting = new TimeSpan(meetingDate.Ticks); var spanNow = new TimeSpan(DateTime.Now.Ticks); var minutes = spanMeeting.Subtract(spanNow).TotalMinutes; //提前5分钟提醒 return(minutes > 0 && minutes <= 5); }
/// <summary> /// 通知 /// </summary> /// <param name="dbContext">数据库上下文</param> /// <param name="meeting">会议</param> /// <param name="type">通知类型</param> private void Notify(MissionskyOAEntities dbContext, MeetingCalendarModel meeting, MeetingNotificationType type) { if (dbContext == null || meeting == null || type == MeetingNotificationType.None) { Log.Error(string.Format("会议通知失败, 通知类型: {0}。", type)); throw new InvalidOperationException(string.Format("会议通知失败, 通知类型: {0}。", type)); } //参会者 IList <string> participants = new List <string>(); dbContext.MeetingParticipants.Where(it => it.MeetingCalendarId == meeting.Id).ToList().ForEach(it => { participants.Add(it.User.Email); //参会者 var model = new NotificationModel() { Target = it.User.Email, CreatedUserId = 0, //MessageType = NotificationType.PushMessage, MessageType = NotificationType.Email, Title = "会议开始结束通知", MessagePrams = "test", Scope = NotificationScope.User, CreatedTime = DateTime.Now, TargetUserIds = new List <int> { it.User.Id } }; if (type == MeetingNotificationType.StartNotification) { var startDate = Convert.ToDateTime(meeting.StartDate.ToShortDateString() + " " + meeting.StartTime.ToString()); model.BusinessType = BusinessType.NotifyMeetingStart; model.MessageContent = string.Format("由{0}主持的会议{1}将于{2}开始。", meeting.Host, meeting.Title, startDate); } else { var endDate = Convert.ToDateTime(meeting.EndDate.ToShortDateString() + " " + meeting.EndTime.ToString()); model.BusinessType = BusinessType.NotifyMeetingEnd; model.MessageContent = string.Format("由{0}主持的会议{1}将于{2}结束。", meeting.Host, meeting.Title, endDate); } NotificationService.Add(model, Global.IsProduction); //消息推送 }); //添加通知历史 NotificationHistory.Add(new MeetingNotificationModel() { Meeting = meeting.Id, NotifiedTime = DateTime.Now, Type = type }); #region 发送邮件 //会议纪要连接 string meetingSummaryURL = string.Format(Global.MeetingSummaryURL, meeting.Id); //邮件内容 string title = (type == MeetingNotificationType.StartNotification ? "[OA]会议开始通知" : "[OA]会议结束通知"); string body = string.Format("会议主题:{0}\r\n会议议程:{1}\r\n会议纪要:{2}", meeting.Title, meeting.MeetingContext, meetingSummaryURL); EmailClient.Send(participants, null, title, body); //发送邮件 #endregion }