public static MeetingCalendar ToEntity(this MeetingCalendarModel model) { var entity = new MeetingCalendar() { MeetingRoomId = model.MeetingRoomId, Title = model.Title, StartDate = model.StartDate, StartTime = model.StartTime, Host = model.Host, EndDate = model.EndDate, EndTime = model.EndTime, MeetingContext = model.MeetingContext, MeetingSummary = model.MeetingSummary, ApplyUserId = model.ApplyUserId, CreatedTime = model.CreatedTime, }; Collection <MeetingParticipant> result = new Collection <MeetingParticipant>(); if (model.MeetingParticipants != null && model.MeetingParticipants.Count > 0) { foreach (MeetingParticipantModel item in model.MeetingParticipants) { result.Add(item.ToEntity()); } } entity.MeetingParticipants = result; return(entity); }
public ActionResult Details(MeetingCalendarModel model) { string action = Request["Submit"]; if (string.IsNullOrEmpty(model.MeetingSummary)) { ModelState.AddModelError("MeetingSummary", "请输入会议纪要."); } if (ModelState.IsValid) { try { if (model.Id > 0) { this.MeetingService.UpdateMeetingSummary(model); ViewBag.Message = "更新成功"; } } catch (Exception ex) { ViewBag.Message = ex.Message; } } return(View(model)); }
// // GET: /MeetingSummary/Details/5 public ActionResult Details(int id) { MeetingCalendarModel model = new MeetingCalendarModel(); if (id == 0) { } model = this.MeetingService.GetMeetingDetailsById(id); return(View(model)); }
/// <summary> /// 预定会议 /// </summary> /// <returns>预定会议信息</returns> public MeetingCalendarModel AddMeeting(MeetingCalendarModel model, bool isAddMeetingByWeek) { var meetingCalendarEntity = model.ToEntity(); //会议室占用 meetingCalendarEntity.Status = 1; using (var dbcontext = new MissionskyOAEntities()) { dbcontext.MeetingCalendars.Add(meetingCalendarEntity); model.MeetingParticipants.ToList().ForEach(item => { if (model.MeetingRoomId != null && model.MeetingRoomId != 0) { //Get meetingRoom var meetingRoom = dbcontext.MeetingRooms.FirstOrDefault(it => it.Id == model.MeetingRoomId); if (meetingRoom != null) { model.MeetingRoom = meetingRoom.ToModel(); } else { throw new Exception("无效的会议室"); } } var userEntity = dbcontext.Users.Where(it => it.Id == item.UserId).FirstOrDefault(); var notificationModel = new NotificationModel() { Target = userEntity.Email, CreatedUserId = model.ApplyUserId, //MessageType = NotificationType.PushMessage, MessageType = NotificationType.Email, BusinessType = BusinessType.BookMeetingRoomSuccessAnnounce, Title = "Missionsky OA Notification", MessagePrams = "test", Scope = NotificationScope.User, CreatedTime = DateTime.Now, TargetUserIds = new List <int> { item.UserId } }; DateTime startDate = Convert.ToDateTime(model.StartDate.ToShortDateString() + " " + model.StartTime.ToString()); if (!isAddMeetingByWeek) { notificationModel.MessageContent = string.Format("请参加,于{0}召开由{1}主持的{2}会议。", startDate, model.Host, model.Title); this._notificationService.Add(notificationModel, Global.IsProduction); //消息推送 } }); dbcontext.SaveChanges(); } return(meetingCalendarEntity.ToModel()); }
public static MeetingCalendarModel ToModel(this MeetingCalendar entity) { var model = new MeetingCalendarModel() { Id = entity.Id, MeetingRoomId = entity.MeetingRoomId, Title = entity.Title, StartDate = entity.StartDate, StartTime = entity.StartTime, EndDate = entity.EndDate, EndTime = entity.EndTime, Host = entity.Host, ApplyUserId = entity.ApplyUserId, MeetingContext = entity.MeetingContext, MeetingSummary = entity.MeetingSummary, MeetingRoom = entity.MeetingRoom.ToModel(), CreatedTime = entity.CreatedTime }; model.StartDate = Convert.ToDateTime(entity.StartDate.ToShortDateString() + " " + entity.StartTime.ToString()); model.EndDate = Convert.ToDateTime(entity.EndDate.ToShortDateString() + " " + entity.EndTime.ToString()); ICollection <MeetingParticipant> meetingParticipant = entity.MeetingParticipants; List <MeetingParticipantModel> result = new List <MeetingParticipantModel>(); if (meetingParticipant != null && meetingParticipant.Count > 0) { foreach (MeetingParticipant item in meetingParticipant) { result.Add(item.ToModel()); } } //Get english name using (var dbContext = new MissionskyOAEntities()) { //Get english name var userEntity = dbContext.Users.FirstOrDefault(it => it.Id == entity.ApplyUserId); if (userEntity != null) { model.ApplyUserName = userEntity.EnglishName; } } model.MeetingParticipants = result; return(model); }
/// <summary> /// 更新会议纪要 /// </summary> /// <returns>更新会议纪要</returns> public bool UpdateMeetingSummary(MeetingCalendarModel model) { using (var dbcontext = new MissionskyOAEntities()) { var entity = dbcontext.MeetingCalendars.Where(it => it.Id == model.Id).FirstOrDefault(); if (entity == null) { throw new Exception("无效的Id"); } if (model.MeetingSummary != null && !(model.MeetingSummary.Equals(entity.MeetingSummary))) { entity.MeetingSummary = model.MeetingSummary; } dbcontext.SaveChanges(); 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); }
public bool UpdateReserveMeetingHistory(int id, MeetingCalendarModel model, int userID) { using (var dbcontext = new MissionskyOAEntities()) { var entity = dbcontext.MeetingCalendars.Where(it => it.Id == id).FirstOrDefault(); if (entity == null) { throw new Exception("无效的Id"); } if (userID != entity.ApplyUserId) { throw new Exception("当前用户没有修改权限,只有申请用户才能修改"); } DateTime oldStartDate = Convert.ToDateTime(entity.StartDate.ToShortDateString() + " " + entity.StartTime.ToString()); DateTime oldEndDate = Convert.ToDateTime(entity.EndDate.ToShortDateString() + " " + entity.EndTime.ToString()); //会议开始时间必须比现在时间晚 if (oldEndDate <= DateTime.Now) { throw new Exception("会议已经结束不能修改"); } Collection <MeetingParticipant> result = new Collection <MeetingParticipant>(); if (model.MeetingParticipants != null && model.MeetingParticipants.Count > 0) { //移除老的参与者 var meetingParticipant = dbcontext.MeetingParticipants.Where(it => it.MeetingCalendarId == id); meetingParticipant.ToList().ForEach(item => { dbcontext.MeetingParticipants.Remove(item); }); foreach (MeetingParticipantModel item in model.MeetingParticipants) { result.Add(item.ToEntity()); } entity.MeetingParticipants = result; } if (model.StartDate.Date != entity.StartDate) { entity.StartDate = model.StartDate; } if (model.EndDate.Date != entity.EndDate) { entity.EndDate = model.EndDate; } if (model.StartTime != entity.StartTime) { entity.StartTime = model.StartTime; } if (model.EndTime != entity.EndTime) { entity.EndTime = model.EndTime; } if (model.Title != null && !(model.Title.Equals(entity.Title))) { entity.Title = model.Title; } if (model.MeetingContext != null && !(model.MeetingContext.Equals(entity.MeetingContext))) { entity.MeetingContext = model.MeetingContext; } if (model.Host != null && !(model.Host.Equals(entity.Host))) { entity.Host = model.Host; } dbcontext.SaveChanges(); return(true); } }
/// <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 }
public ApiResponse <MeetingCalendarModel> AddMeeting(ReserveMeetingModel model) { // 1. 检查输入参数 if (model == null) { throw new ApiBadRequestException("无请求数据"); } if (model.MeetingRoomId == 0) { throw new ApiBadRequestException("会议室不存在"); } if (model.StartDate.Date != model.EndDate.Date) { throw new ApiBadRequestException("开始日期与结束日期需在同一天"); } if (model.StartDate >= model.EndDate) { throw new ApiBadRequestException("开始时间必须小于结束时间"); } if (model.StartDate < DateTime.Now.AddMinutes(10)) { throw new ApiBadRequestException("必须提前十分钟预定会议室"); } if (MeetingService.isMeetingRoomAvailiable(model.MeetingRoomId, model.StartDate, model.EndDate) == false) { throw new ApiBadRequestException("会议室已经占用"); } // 2. 构造会议预约记录 var meetingCalendar = new MeetingCalendarModel() { ApplyUserId = this.Member.Id, MeetingRoomId = model.MeetingRoomId, Title = model.Title, Host = model.Host, StartDate = model.StartDate, EndDate = model.EndDate, MeetingContext = model.MeetingContext, StartTime = model.StartDate.TimeOfDay, EndTime = model.EndDate.TimeOfDay, CreatedTime = DateTime.Now }; //2.1 构造会议必须参与人员模型 List <MeetingParticipantModel> meetingParticipants = new List <MeetingParticipantModel>(); if (model.participants != null && (model.participants.Length > 0)) { foreach (int item in model.participants) { var meetingParticipantModel = new MeetingParticipantModel() { UserId = item, IsOptional = "No" }; meetingParticipants.Add(meetingParticipantModel); } } //2.1 构造会议可选参与人员模型 if (model.optionalParticipants != null && (model.optionalParticipants.Length > 0)) { foreach (int item in model.optionalParticipants) { var meetingParticipantModel = new MeetingParticipantModel() { UserId = item, IsOptional = "Yes" }; meetingParticipants.Add(meetingParticipantModel); } } meetingCalendar.MeetingParticipants = meetingParticipants; //新增会议预约 // 3. Construct API Response ApiResponse <MeetingCalendarModel> response = new ApiResponse <MeetingCalendarModel>() { Result = MeetingService.AddMeeting(meetingCalendar, false) }; return(response); }
public ApiResponse <bool> updateMeeting(int id, ReserveMeetingModel model) { if (id < 0 && model == null) { throw new ApiBadRequestException("无效请求数据"); } if (model.StartDate > model.EndDate) { throw new ApiBadRequestException("开始日期必须小于结束日期"); } if (model.MeetingRoomId == 0) { throw new ApiBadRequestException("会议室不存在"); } if (model.StartDate.Date != model.EndDate.Date) { throw new ApiBadRequestException("开始日期与结束日期需在同一天"); } if (model.StartDate < DateTime.Now) { throw new ApiBadRequestException("开始时间必须大于现在时间"); } if (MeetingService.isMeetingRoomAvailiable(model.MeetingRoomId, model.StartDate, model.EndDate) == false) { throw new ApiBadRequestException("会议室已经占用"); } // 2. 构造会议预约记录 var meetingCalendar = new MeetingCalendarModel() { ApplyUserId = this.Member.Id, MeetingRoomId = model.MeetingRoomId, Title = model.Title, StartDate = model.StartDate, EndDate = model.EndDate, MeetingContext = model.MeetingContext, StartTime = model.StartDate.TimeOfDay, EndTime = model.EndDate.TimeOfDay, CreatedTime = DateTime.Now }; //2.1 构造会议必须参与人员模型 List <MeetingParticipantModel> meetingParticipants = new List <MeetingParticipantModel>(); if (model.participants != null && (model.participants.Length > 0)) { foreach (int item in model.participants) { var meetingParticipantModel = new MeetingParticipantModel() { UserId = item, IsOptional = "No" }; meetingParticipants.Add(meetingParticipantModel); } } //2.1 构造会议可选参与人员模型 if (model.optionalParticipants != null && (model.optionalParticipants.Length > 0)) { foreach (int item in model.optionalParticipants) { var meetingParticipantModel = new MeetingParticipantModel() { UserId = item, IsOptional = "Yes" }; meetingParticipants.Add(meetingParticipantModel); } } meetingCalendar.MeetingParticipants = meetingParticipants; ApiResponse <bool> response = new ApiResponse <bool> () { Result = this.MeetingService.UpdateReserveMeetingHistory(id, meetingCalendar, this.Member.Id) }; return(response); }
public ApiResponse <bool> AddMeetingByWeeks(ReserveMeetingModel model, int loopCount) { // 1. 检查输入参数 if (model == null) { throw new ApiBadRequestException("无请求数据"); } if (model.MeetingRoomId == 0) { throw new ApiBadRequestException("会议室不存在"); } if (loopCount > 10) { throw new ApiBadRequestException("会议循环次数不能大于十次"); } if (model.MeetingDayInWeek == null || model.MeetingDayInWeek.Length < 1) { throw new ApiBadRequestException("请选择会议举办日期"); } if (model.StartDate >= model.EndDate) { throw new ApiBadRequestException("会议开始时间必须小于结束时间"); } bool isMeetingAdded = false; if (model.MeetingDayInWeek != null && model.MeetingDayInWeek.Length > 0) { DateTime today = DateTime.Now; int TodayInDayOfWeek = (int)today.DayOfWeek; DateTime WeekStartDateStartTime = today.AddDays(-TodayInDayOfWeek).Date + model.StartDate.TimeOfDay; //当前星期的星期天会议开始时间 DateTime WeekStartDateEndTime = today.AddDays(-TodayInDayOfWeek).Date + model.EndDate.TimeOfDay; //当前星期的星期天会议结束时间 for (int i = 0; i <= loopCount; i++) { for (int j = 0; j < model.MeetingDayInWeek.Length; j++) { DateTime StartDate = WeekStartDateStartTime.AddDays((int)model.MeetingDayInWeek[j]); DateTime EndDate = WeekStartDateEndTime.AddDays((int)model.MeetingDayInWeek[j]); if (StartDate > today) { if (MeetingService.isMeetingRoomAvailiable(model.MeetingRoomId, StartDate, EndDate) == false) { throw new ApiBadRequestException("会议室已经占用"); } else { // 2. 构造会议预约记录 var meetingCalendar = new MeetingCalendarModel() { ApplyUserId = this.Member.Id, MeetingRoomId = model.MeetingRoomId, Title = model.Title, Host = model.Host, StartDate = StartDate, EndDate = EndDate, MeetingContext = model.MeetingContext, StartTime = model.StartDate.TimeOfDay, EndTime = model.EndDate.TimeOfDay, CreatedTime = DateTime.Now }; //2.1 构造会议必须参与人员模型 List <MeetingParticipantModel> meetingParticipants = new List <MeetingParticipantModel>(); if (model.participants != null && (model.participants.Length > 0)) { foreach (int item in model.participants) { var meetingParticipantModel = new MeetingParticipantModel() { UserId = item, IsOptional = "No" }; meetingParticipants.Add(meetingParticipantModel); } } //2.1 构造会议可选参与人员模型 if (model.optionalParticipants != null && (model.optionalParticipants.Length > 0)) { foreach (int item in model.optionalParticipants) { var meetingParticipantModel = new MeetingParticipantModel() { UserId = item, IsOptional = "Yes" }; meetingParticipants.Add(meetingParticipantModel); } } meetingCalendar.MeetingParticipants = meetingParticipants; MeetingService.AddMeeting(meetingCalendar, true); isMeetingAdded = true; } } } WeekStartDateStartTime = WeekStartDateStartTime.AddDays(7); //下次预定会议的星期天 WeekStartDateEndTime = WeekStartDateEndTime.AddDays(7); //下次的星期天会议结束数据 } } if (isMeetingAdded) { if (model.participants != null && (model.participants.Length > 0)) { foreach (int item in model.participants) { var userEntity = this.UserService.GetUserDetail(item); var notificationModel = new NotificationModel() { Target = userEntity.Email, CreatedUserId = this.Member.Id, //MessageType = NotificationType.PushMessage, MessageType = NotificationType.Email, BusinessType = BusinessType.BookMeetingRoomSuccessAnnounce, Title = "Missionsky OA Notification", MessagePrams = "test", Scope = NotificationScope.User, CreatedTime = DateTime.Now, TargetUserIds = new List <int> { userEntity.Id } }; if (loopCount > 0) { string MeetingHappenedDate = null; for (int i = 0; i < model.MeetingDayInWeek.Length; i++) { MeetingHappenedDate = MeetingHappenedDate + System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetDayName(model.MeetingDayInWeek[i]) + ","; } notificationModel.MessageContent = string.Format("请参加,于每周{0}{1}召开,由{2}主持的{3}会议,会议持续循环召开{4}周", MeetingHappenedDate, model.StartDate.TimeOfDay, model.Host, model.Title, loopCount + 1); } else { string MeetingHappenedDate = null; for (int i = 0; i < model.MeetingDayInWeek.Length; i++) { if (model.MeetingDayInWeek[i] >= DateTime.Now.DayOfWeek) { MeetingHappenedDate = MeetingHappenedDate + System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.GetDayName(model.MeetingDayInWeek[i]) + ","; } } notificationModel.MessageContent = string.Format("请参加,于本周{0}{1}召开,由{2}主持的{3}会议", MeetingHappenedDate, model.StartDate.TimeOfDay, model.Host, model.Title, loopCount + 1); } this._notificationService.Add(notificationModel, Global.IsProduction); //消息推送 } } } //新增会议预约 // 3. Construct API Response ApiResponse <bool> response = new ApiResponse <bool>() { Result = isMeetingAdded }; return(response); }