/// <summary> /// 根據新增學習圈建立驗證碼 /// </summary> /// <param name="circleKey"></param> /// <returns></returns> public bool CreateFromCreateLearningCircle(string circleKey) { var learningCircleService = new LearningCircleService(); var learningCircleInfo = learningCircleService.GetDetailByOuterKey(circleKey.ToLower()); if (learningCircleInfo == null) { return(false); } var codeService = new CaptchaHelper(); var code = codeService.GenerateRandomText(10); var checkHadCode = _uow.MemberInviteRepo.GetFirst(t => t.CircleKey.ToLower() == circleKey.ToLower() && t.Enable == true && t.IsCourseCode == true); if (checkHadCode == null) { var entity = new MemberInvite() { CircleKey = circleKey.ToLower(), Code = code.ToLower(), CreateDate = DateTime.UtcNow, Enable = true, InviteEmail = null, InviteUrl = null, IsCourseCode = true, Type = 0 }; _uow.DbContext.MemberInvite.Add(entity); _uow.SaveChanges(); } return(true); }
/// <summary> /// 取得請假單資訊 - forAPP /// </summary> /// <param name="eventId"></param> /// <param name="isManage"></param> /// <returns></returns> public Infrastructure.ViewModel.ActivityFunction.Leave.GetAbSenceFormDetailResponse GetAbSenceFormDetail(Infrastructure.ViewModel.ActivityFunction.Leave.GetAbSenceFormDetailRequest requestData) { var eventId = Utility.OuterKeyHelper.CheckOuterKey(requestData.OuterKey); if (eventId == null || eventId == Guid.Empty) { return(null); } var authService = new AuthService(); var learningcircleService = new LearningCircleService(); var learningInfo = learningcircleService.GetDetailByOuterKey(requestData.ClassID); if (learningInfo == null) { return(null); } var tokenService = new TokenService(); var checkMember = tokenService.GetTokenInfo(requestData.ICanToken).Result; if (checkMember == null) { return(null); } var isManage = authService.CheckFunctionAuth(learningInfo.Id, ParaCondition.LeaveFunction.Review, checkMember.MemberId); return(GetAPPDetailLeaveSqlQuery(_uow.DbContext.AttendanceLeave.FirstOrDefault(t => t.EventId == eventId), isManage)); }
/// <summary> /// 取得課綱資訊 /// </summary> /// <param name="circleKey"></param> /// <param name="isDelete"></param> /// <returns></returns> public IEnumerable <Syllabus> GetSyllabusByCircleKey(string circleKey, bool isDelete) { var learningCircleService = new LearningCircleService(); var learningCircleInfo = learningCircleService.GetDetailByOuterKey(circleKey); var result = GetSyllabus(learningCircleInfo.Id, false); return(result); }
private bool AuthCheck(Guid token, ref ServerCheckItem item) { var memberService = new MemberService(); var memberInfo = memberService.TokenToMember(token.ToString()).Result; if (memberInfo == null) { return(false); } // 是否為合法使用者 item.MemberId = memberInfo.Id; if (item.MemberId > 0) { // 取得活動Guid if (!string.IsNullOrEmpty(item.OuterKey)) { var eventId = Service.Utility.OuterKeyHelper.CheckOuterKey(item.OuterKey); if (eventId.HasValue) { item.EventId = eventId.Value; } else { return(false); } } // 取得學習圈 id if (!string.IsNullOrEmpty(item.CircleKey)) { var learningcircleService = new LearningCircleService(); var learningcircleInfo = learningcircleService.GetDetailByOuterKey(item.CircleKey); if (learningcircleInfo != null) { item.CircleId = learningcircleInfo.Id; } else { return(false); } } //如果是smartTA的權限,直接true if (memberInfo.RoleName == "3") { item.ModuleAuth = true; return(true); } // 判斷特定權限 if (!string.IsNullOrEmpty(item.ModuleFun)) { var authService = new AuthService(); item.ModuleAuth = authService.CheckFunctionAuth(item.CircleId, item.ModuleFun, item.MemberId); } } return(true); }
/// <summary> /// 長出點名活動列表資料 /// </summary> /// <param name="memberId">參與者編號</param> /// <param name="circleKey">學習圈代碼</param> /// <param name="pages">查詢索引</param> /// <param name="rows">查詢數量</param> /// <returns></returns> public IEnumerable <SignInModuleList> GetSignInList(int memberId, string circleKey, int?pages, int?rows) { var activityService = new ActivityService(); var authService = new AuthService(); var acts = activityService.GetActivityListByModuleKey(circleKey, Utility.ParaCondition.ModuleType.SignIn, pages, rows); var learningCircieService = new LearningCircleService(); var resultList = new List <SignInModuleList>(); var learningCircleInfo = learningCircieService.GetDetailByOuterKey(circleKey.ToLower()); var memberService = new MemberService(); if (learningCircleInfo != null) { var IsTeacher = authService.CheckFunctionAuth(learningCircleInfo.Id, "signInadmin", memberId); //取得學習圈所有人 foreach (var act in acts) { var item = new SignInModuleList(); //狀態列表 item.SignInCount = IsTeacher ? GetSignInStatusLog(act.OuterKey, memberService.GetStudentList(circleKey).Count()) : new List <Infrastructure.ValueObject.SignStatus>(); item.MyStatus = IsTeacher ? 0 : GetStudentStatus(memberId, act.OuterKey); if (act.ActivityDate.HasValue) { item.ActivityTime = act.ActivityDate.Value.ToLocalTime(); } if (act.Created.Utc.HasValue) { item.CreateTime = act.Created.Local.Value; } if (act.Publish_Utc.HasValue) { item.Publish_date = act.Publish_Utc.Value.ToLocalTime(); } if (act.StartDate.HasValue) { item.StartDate = act.StartDate.Value.ToLocalTime(); } if (act.Duration.HasValue) { item.Duration = act.Duration.Value; } item.GroupId = circleKey; item.ModuleKey = Utility.ParaCondition.ModuleType.SignIn; item.OuterKey = Service.Utility.OuterKeyHelper.GuidToPageToken(act.OuterKey); if (act.StartDate.HasValue && act.Duration.HasValue) { var endDate = act.StartDate.Value.Add(new TimeSpan(0, 0, act.Duration.Value)); item.RemainSeconds = (endDate - DateTime.UtcNow).TotalSeconds; } resultList.Add(item); } } return(resultList); }
/// <summary> /// 建立傳統周課表 - 一筆傳統周課表 /// </summary> /// <returns></returns> public WeekTable CreateWeekData(string token, string circleKey, int classWeekType, string place, DateTime startDate, DateTime endDate) { var tokenService = new TokenService(); var tokenInfo = tokenService.GetTokenInfo(token).Result; if (tokenInfo == null) { return(null); } var learningCircleService = new LearningCircleService(); var learningCircleinfo = learningCircleService.GetDetailByOuterKey(circleKey); if (learningCircleinfo == null) { return(null); } var startHour = Convert.ToInt32(startDate.ToString("HH")); var endHour = Convert.ToInt32(endDate.ToString("HH")); var dayOfWeekService = new Utility.DayOfWeekTools(); var week = dayOfWeekService.ChangeToCht(startDate.DayOfWeek); //9點以前都是第一節,9點以後都(目前小時-7)節 startHour = startHour <= 9 ? 1 : startHour - 7; endHour = endHour <= 9 ? 1 : endHour - 7; var entity = new WeekTable() { ClassWeekType = classWeekType, CreateUtcDate = DateTime.UtcNow, Creator = tokenInfo.MemberId, EndPeriod = endHour, EndTime = endDate.ToUniversalTime(), LearningCircleId = learningCircleinfo.Id, Place = place, StartPeriod = startHour, StartTime = startDate.ToUniversalTime(), Week = week }; try { var db = _uow.DbContext; db.WeekTable.Add(entity); db.SaveChanges(); return(entity); } catch (Exception ex) { return(null); } }
public override void Delete() { var learningCircleService = new LearningCircleService(); var leanringCircleInfo = learningCircleService.GetDetailByOuterKey(_parameters.CircleKey.ToLower()); var authService = new AuthService(); bool _isAdmin = authService.CheckFunctionAuth(leanringCircleInfo.Id, Service.Utility.ParaCondition.SignInFunction.Admin, _parameters.MemberId); var _service = new SignInService(); if (_isAdmin) { _service.Delete(_parameters.EventId, _parameters.MemberId); } }
public override void Delete() { var authService = new AuthService(); var learningService = new LearningCircleService(); var learningCircleInfo = learningService.GetDetailByOuterKey(_parameters.CircleKey); bool _isAdmin = authService.CheckFunctionAuth(learningCircleInfo.Id, Service.Utility.ParaCondition.DiscussionFunction.Manage, _parameters.MemberId); var _service = new DiscussionService(); if (_isAdmin) { //刪除主題討論活動 _service.DeleteDiscussion(_parameters.EventId, _parameters.MemberId); } }
/// <summary> /// 加入學習圈 /// </summary> /// <param name="circleKey"></param> /// <param name="token"></param> public BaseResponse <JObject> joinGroup(string circleKey, Guid token) { var result = new BaseResponse <JObject>(); string error = string.Empty; string groupKey = circleKey.ToLower(); //使用者 的 連接ID(重新連接還是會使用相同的ID) var connId = Context.ConnectionId; //取得裝置 var version = 0; if (Context.QueryString != null && !string.IsNullOrEmpty(Context.QueryString["version"])) { version = Convert.ToInt32(Context.QueryString["version"]); } //塞人至相對應的group _connections.Add(circleKey.ToLower(), connId, version); try { var tokenService = new TokenService(); var tokenInfo = tokenService.GetTokenInfo(token.ToString()).Result; //更新connectionId // Models.Auth.AuthMember.UpdateConnectionId(connId, memberAccount.Result.Id); var learningCircleService = new LearningCircleService(); var learningCircleInfo = learningCircleService.GetDetailByOuterKey(circleKey); var activityService = new ActivityService(); var authList = activityService.CircleAuth(tokenInfo.MemberId, learningCircleInfo.Id); // 將 連接ID 與 群組代碼 放入SignalR的Groups,之後就能透過Groups(群組代碼)將訊息廣播給使用者 error = "Groups.Add"; Groups.Add(connId, groupKey); mqttCircleKey = circleKey; // 呼叫前端的Method(發送連接成功的Request) error = "joinGroup Clients.Caller.onConnected token:[" + token + "]"; Clients.Caller.onConnected(groupKey, token, connId, authList); result.Data = authList; result.Success = true; return(result); // var checkiCan5ManToken = ican5API.CheckiCanManToken(token, memberAccount, circleKey); } catch (Exception ex) { Clients.Caller.onError("joinGroup", "連接學習圈發生意外: token:[" + token + "]" + ex.Message + error); result.Success = false; return(result); } }
/// <summary> /// 取得列表 - ForAPP /// </summary> /// <returns></returns> public Infrastructure.ViewModel.ActivityFunction.Leave.GetAbsenceFormListResponse GetAbsenceFormList(Infrastructure.ViewModel.ActivityFunction.Leave.GetAbsenceFormListRequest requestData) { var tokenService = new TokenService(); var checkMember = tokenService.GetTokenInfo(requestData.ICanToken).Result; if (checkMember == null) { return(null); } var authService = new AuthService(); var learningcircleService = new LearningCircleService(); var learningInfo = learningcircleService.GetDetailByOuterKey(requestData.ClassID); if (learningInfo == null) { return(null); } var auth = authService.CheckFunctionAuth(learningInfo.Id, ParaCondition.LeaveFunction.Review, checkMember.MemberId); var responseData = new Infrastructure.ViewModel.ActivityFunction.Leave.GetAbsenceFormListResponse(); if (auth) { //老師介面 var searchData = requestData.CheckDate.HasValue ? GetAppList(learningInfo.Id, true, null, requestData.CheckDate.Value) : GetAppList(learningInfo.Id, true, null, null); responseData.Forms = searchData; responseData.IsQueryFormSuccess = true; responseData.IsManager = true; responseData.IsQueryRoomSuccess = true; } else { //學生介面 var searchData = requestData.CheckDate.HasValue ? GetAppList(learningInfo.Id, false, checkMember.MemberId, requestData.CheckDate.Value) : GetAppList(learningInfo.Id, false, checkMember.MemberId, null); responseData.Forms = searchData; responseData.IsQueryFormSuccess = true; responseData.IsManager = false; responseData.IsQueryRoomSuccess = true; } responseData.ClassID = learningInfo.LearningOuterKey; responseData.ClassName = learningInfo.Name; return(responseData); }
/// <summary> /// 新增單筆資訊 /// </summary> /// <param name="circleKey"></param> /// <param name="account"></param> /// <param name="token"></param> /// <param name="roleId"></param> /// <returns></returns> public bool InsertCircleMemberRole(string circleKey, string account, string token, int roleId) { var memberService = new MemberService(); var memberInfo = memberService.TokenToMember(token).Result; if (memberInfo == null) { return(false); } var learningRoleService = new LearningRoleService(); var learningRoleInfo = learningRoleService.GetDetailById(roleId); if (learningRoleInfo == null) { return(false); } var learningCircleService = new LearningCircleService(); var learningCircleInfo = learningCircleService.GetDetailByOuterKey(circleKey.ToLower()); if (learningCircleInfo == null) { return(false); } var accountInfo = memberService.AccountToMember(account, learningCircleInfo.OrgId); if (accountInfo == null) { return(false); } var entity = new CircleMemberRoleplay() { CircleId = learningCircleInfo.Id, Enable = true, MemberId = accountInfo.Id, RoleId = roleId, ResType = 0, ExternalRid = null }; _uow.DbContext.CircleMemberRoleplay.Add(entity); return(true); }
/// <summary> /// 建立請假單 /// </summary> /// <param name="requestData"></param> /// <param name="files"></param> /// <returns></returns> public Infrastructure.ViewModel.SignInLogViewModel SetNewAbsenceForm(Infrastructure.ViewModel.ActivityFunction.Leave.SetNewAbsenceFormRequest requestData, List <FileStorage> files, List <Stream> streams) { var tokenService = new TokenService(); var checkMember = tokenService.GetTokenInfo(requestData.Token.ToString()).Result; if (checkMember == null) { return(null); } var authService = new AuthService(); var learningcircleService = new LearningCircleService(); var learningInfo = learningcircleService.GetDetailByOuterKey(requestData.CircleKey); if (learningInfo == null) { return(null); } var auth = authService.CheckFunctionAuth(learningInfo.Id, ParaCondition.LeaveFunction.Create, checkMember.MemberId); if (auth) { var uploadData = new Infrastructure.DataTransferObject.UploadFileModel() { Token = requestData.Token, Title = requestData.Title, Content = requestData.Content, CircleKey = requestData.CircleKey, LeaveDate = requestData.LeaveDate, LeaveCategoryId = requestData.LeaveCategoryId }; var createRespone = Add(learningInfo, checkMember.MemberId, uploadData, files, streams); if (createRespone == null) { return(null); } else { return(createRespone); } } return(null); }
/// <summary> /// 根據課程資訊建立每日課表 /// </summary> /// <param name="circleKey"></param> /// <param name="classWeekType"></param> /// <returns></returns> public bool CreateByCircleKey(string circleKey, int?classWeekType = 0) { var learningcircleService = new LearningCircleService(); var learningcircleInfo = learningcircleService.GetDetailByOuterKey(circleKey); if (learningcircleInfo == null) { return(false); } var dateTimeTools = new Utility.DateTimeTools(); var datas = dateTimeTools.Getdata(learningcircleInfo.StartDate.Value.ToLocalTime(), learningcircleInfo.EndDate.Value.ToLocalTime(), circleKey, classWeekType); if (datas != null && datas.FirstOrDefault() != null) { var db = _uow.DbContext; db.TimeTable.AddRange(datas); db.SaveChanges(); } return(true); }
/// <summary> /// 取得課程的邀請狀態 /// </summary> /// <param name="token"></param> /// <param name="circleKey"></param> /// <param name="inviteType">查詢邀請對象 0: 成員 | 1 : 管理者</param> /// <returns></returns> public bool GetLearningInviteStatus(string token, string circleKey, int inviteType) { var db = _uow.DbContext; var tokenService = new TokenService(); var tokenInfo = tokenService.GetTokenInfo(token).Result; if (tokenInfo == null) { return(false); } var authService = new AuthService(); if (authService.CheckCourseTeacher(tokenInfo.MemberId, circleKey.ToLower()) || authService.CheckCourseAdmin(tokenInfo.MemberId, circleKey.ToLower())) { var learningCircleService = new LearningCircleService(); var learningCircleinfo = learningCircleService.GetDetailByOuterKey(circleKey.ToLower()); if (learningCircleinfo == null) { return(false); } return(inviteType == 0 ? learningCircleinfo.InviteEnable : learningCircleinfo.AdminInviteEnable); } return(false); }
public IHttpActionResult Get([FromUri] string strAccess) { var requestData = JsonConvert.DeserializeObject <Infrastructure.ViewModel.ActivityFunction.Leave.SetAbsenceFormStatusRequest>(strAccess); if (requestData.Account == null || requestData.ClassID == null || requestData.ICanToken == null || requestData.OuterKey == null) { return(Content(HttpStatusCode.BadRequest, "遺漏參數")); } var response = new Infrastructure.ViewModel.Base.ResultBaseModel <Infrastructure.ViewModel.ActivityFunction.Leave.SetAbsenceFormStatusResponse>(); var tokenService = new TokenService(); var checkToken = tokenService.GetTokenInfo(requestData.ICanToken).Result; if (checkToken == null) { response.Success = false; response.Message = "已登出"; response.State = Infrastructure.ViewModel.Base.LogState.Logout; return(Ok(response)); } var learningService = new LearningCircleService(); var learningId = learningService.GetDetailByOuterKey(requestData.ClassID).Id; var authService = new AuthService(); // 是否有審核請假單的權限 var reviewLeave = authService.CheckFunctionAuth(learningId, ParaCondition.LeaveFunction.Review, checkToken.MemberId); var activityService = new ActivityService(); var service = new LeaveService(); var pushService = new PushService(); var signalrService = new SignalrService(); var signInLogService = new SignInLogService(); var reViewData = new List <Infrastructure.ViewModel.ActivityFunction.Leave.SetAbsenceFormStatusResponse>(); //設定審核狀態 var status = string.Empty; switch (requestData.status) { case Infrastructure.ValueObject.enumAbsenceFormStatus.Invalid: status = "00"; break; case Infrastructure.ValueObject.enumAbsenceFormStatus.Pass: status = "10"; break; case Infrastructure.ValueObject.enumAbsenceFormStatus.Wait: status = "20"; break; case Infrastructure.ValueObject.enumAbsenceFormStatus.Recall: status = "30"; break; case Infrastructure.ValueObject.enumAbsenceFormStatus.Reject: status = "40"; break; default: break; } foreach (var leave in requestData.OuterKey) { var eventId = Service.Utility.OuterKeyHelper.CheckOuterKey(leave); if (eventId.HasValue == false) { continue; } //修改狀態 var data = service.Update(eventId.Value, null, null, requestData.reason, status); //修改點名狀態 //老師審核 if (reviewLeave) { var compareDay = activityService.GetActivitys(requestData.ClassID, data.LeaveDate); if (requestData.status == enumAbsenceFormStatus.Pass) { response.Message = "審核成功"; foreach (var _signInInfo in compareDay) { var resReviewData = new Infrastructure.ViewModel.ActivityFunction.Leave.SetAbsenceFormStatusResponse(); var signInOuterKey = OuterKeyHelper.GuidToPageToken(_signInInfo.OuterKey); // 更新點名紀錄為請假 { 0, "未開放您參加此活動"}, { 1, "出席"}, { 2, "缺席"}, { "3", "遲到"}, { "4", "早退"},{"5", "請假"} var signInlogInfo = signInLogService.GetSignInLog(checkToken.MemberId, _signInInfo.OuterKey, data.StudId); if (signInlogInfo.Status == "2") { var updateSignInLog = signInLogService.UpdateLog(checkToken.MemberId, _signInInfo.OuterKey, data.StudId, "5"); //var mylog = _logService.GetLogs(eventId); updateSignInLog.LeaveStatus = requestData.status.ToString(); SignalrClientHelper.SignIn_StatusChanged(requestData.ClassID, signInOuterKey, updateSignInLog); if (_signInInfo.StartDate.Value != null) { resReviewData.SignInOuterKey = signInOuterKey; resReviewData.SignInDateTime = _signInInfo.StartDate.Value; reViewData.Add(resReviewData); } } else { var mylog = signInLogService.GetSignInLog(Convert.ToInt32(_signInInfo.CreateUser.ToString()), _signInInfo.OuterKey, data.StudId); if (_signInInfo.StartDate.Value != null) { resReviewData.SignInOuterKey = signInOuterKey; resReviewData.SignInDateTime = _signInInfo.StartDate.Value; reViewData.Add(resReviewData); } SignalrClientHelper.SignIn_StatusChanged(requestData.ClassID, signInOuterKey, mylog); } //_array.SetValue(signInOuterKey, _index); // _index++; } response.Success = true; //推播 pushService.PushOnUpdatedLeave(requestData.ClassID, eventId.Value, data.StudId, data.LeaveDate.ToLocalTime(), "已通過"); var noticeMsg = string.Format("您在({0:yyyy/MM/dd})的請假單「{1}」", data.LeaveDate.ToLocalTime(), "已通過", requestData.ClassID, DateTime.Now); // 將通知寫入資料庫 activityService.AddNotice(requestData.ClassID.ToLower(), data.StudId, data.EventId, noticeMsg); //發通知給學生 var connectIdAndNoticeData = signalrService.GetConnectIdAndData(requestData.ClassID, data.StudId, SignalrConnectIdType.One, SignalrDataType.Notice); SignalrClientHelper.SendNotice(connectIdAndNoticeData); } //駁回 else if (requestData.status == enumAbsenceFormStatus.Reject) { response.Message = string.Format("駁回,原因:{0}", requestData.reason); foreach (var _signInInfo in compareDay) { var resReviewData = new Infrastructure.ViewModel.ReviewDataModel(); // var signInLog = _logService.GetLogs(_signInInfo.EventId); var mylog = signInLogService.GetSignInLog(Convert.ToInt32(_signInInfo.CreateUser.ToString()), _signInInfo.OuterKey, data.StudId); mylog.LeaveStatus = requestData.status.ToString(); var signInOuterKey = Service.Utility.OuterKeyHelper.GuidToPageToken(_signInInfo.OuterKey); //var mylog = _logService.GetLogs(eventId); SignalrClientHelper.SignIn_StatusChanged(requestData.ClassID, signInOuterKey, mylog); //if (_signInInfo.Updated != null) //{ // resReviewData.SignInOuterKey = signInOuterKey; // resReviewData.SignInDateTime = _signInInfo.Updated.Local.Value; // reViewData.Add(resReviewData); //} // _array.SetValue(signInOuterKey, _index); // _index++; } response.Success = true; //推播 pushService.PushOnUpdatedLeave(requestData.ClassID, eventId.Value, data.StudId, data.LeaveDate.ToLocalTime(), "未通過"); var noticeMsg = string.Format("您在({0:yyyy/MM/dd})的請假單「{1}」", data.LeaveDate.ToLocalTime(), "未通過", requestData.ClassID, DateTime.Now); // 將通知寫入資料庫 activityService.AddNotice(requestData.ClassID, data.StudId, eventId.Value, noticeMsg); //發通知給學生 var connectIdAndNoticeData = signalrService.GetConnectIdAndData(requestData.ClassID, data.StudId, SignalrConnectIdType.One, SignalrDataType.Notice); SignalrClientHelper.SendNotice(connectIdAndNoticeData); } }//學生抽回 else { if (requestData.status == enumAbsenceFormStatus.Recall) { response.Message = "已抽回"; if (data != null) { response.Success = true; } else { response.State = Infrastructure.ViewModel.Base.LogState.Error; response.Success = false; response.Message = "查無此請假單"; } } else { response.State = Infrastructure.ViewModel.Base.LogState.Error; response.Message = "無審核權限"; response.Success = false; } } //發送推播 } var _finalReviewData = new List <Infrastructure.ViewModel.ActivityFunction.Leave.SetAbsenceFormStatusResponse>(); foreach (var _item in reViewData) { var che = _finalReviewData.Where(t => t.SignInOuterKey == _item.SignInOuterKey); if (!che.Any()) { _finalReviewData.Add(_item); } } response.Data = _finalReviewData.ToArray(); return(Ok(response)); }
/// <summary> /// 建立邀請碼資料 /// </summary> /// <param name="requestData"></param> /// <returns></returns> public bool Create(MemberInvitePostRequest requestData) { var inviteEmails = requestData.InviteEmail.ToList(); if (inviteEmails.FirstOrDefault() == null) { return(false); } var db = _uow.DbContext; var captchaHelp = new Utility.CaptchaHelper(); var mails = new List <MemberInvite>(); var learningCircleService = new LearningCircleService(); var learningCircleInfo = learningCircleService.GetDetailByOuterKey(requestData.CircleKey); if (learningCircleInfo == null) { return(false); } var organizationInfo = db.Organizations.FirstOrDefault(t => t.Id == learningCircleInfo.OrgId); var flipusOrgName = ConfigurationManager.AppSettings["FlipusOrgName"].ToString(); var inviteDomain = ConfigurationManager.AppSettings["loginServer"].ToString(); foreach (var inviteEmail in inviteEmails) { #region 將舊的code 設定失效 var setOldInviteCode = db.MemberInvite.Where(t => t.InviteEmail == inviteEmail && t.CircleKey == requestData.CircleKey && t.Enable == true); if (setOldInviteCode != null && setOldInviteCode.Count() > 0) { foreach (var oldInvite in setOldInviteCode) { oldInvite.Enable = false; } } #endregion var inviteCode = captchaHelp.GenerateRandomText(10).ToLower(); var inviteUrl = HttpUtility.UrlEncode(string.Format("{3}/FlipusWeb/invite?r=3&o={0}&c={1}&t={2}&on={3}", organizationInfo.OrgCode, inviteCode, requestData.InviteType, inviteDomain, HttpUtility.UrlEncode(organizationInfo.Name))); var entity = new MemberInvite() { CircleKey = requestData.CircleKey.ToLower(), Code = inviteCode, CreateDate = DateTime.UtcNow, Enable = true, InviteEmail = inviteEmail, IsCourseCode = false, Type = requestData.InviteType, InviteUrl = inviteUrl }; db.MemberInvite.Add(entity); mails.Add(entity); } //結束新增 try { //開始跑db db.SaveChanges(); var emailDomain = ConfigurationManager.AppSettings["MailDomain"].ToString(); var emailSMTPPort = Convert.ToInt32(ConfigurationManager.AppSettings["MailSMTPPort"].ToString()); var emailAdminAddress = ConfigurationManager.AppSettings["MailAdminAddress"].ToString(); var mailService = new MailService(); var tokenService = new TokenService(); var tokenInfo = tokenService.GetTokenInfo(requestData.Token).Result; var teacherInfo = db.Members.Find(tokenInfo.MemberId); var memberService = new MemberService(); var teachers = memberService.GetTeacherList(learningCircleInfo.LearningOuterKey); var teachersName = string.Empty; foreach (var teacher in teachers) { teachersName = string.Format("{0}、{1}", teachersName, teacher.Name); } teachersName = teachersName.Substring(1, teachersName.Length - 1); var weekTableService = new WeekTableService(); var weekTableDatas = weekTableService.GetByCirclekey(learningCircleInfo.LearningOuterKey); var weekTableTimes = string.Empty; foreach (var weekTableData in weekTableDatas.WeekTable) { weekTableTimes = string.Format("{0}、({1}){2:HH:mm} ~ {3:HH:mm}", weekTableTimes, weekTableData.Week, weekTableData.StartTime, weekTableData.EndTime); } weekTableTimes = weekTableTimes.Substring(1, weekTableTimes.Length - 1); //送邀請函信 foreach (var code in mails) { var mailContent = flipusOrgName == organizationInfo.OrgCode.ToString() ? //跑Flipus 非組織信字串 string.Format("<tbody><tr><td align = \"left\" style = \"padding-top: 15px;\"></td></tr>" + "<img src=\"http://scedev.eastus.cloudapp.azure.com/iThink/images/inviteimg/logo.png\" alt = \"logo\" width = \"108\" height = \"48\" />" + "<tr><td align=\"left\" style=\"padding - top: 15px; \"><h2>您好!</h2>" + "{0} 老師 邀請您一起加入,Flipus 翻轉校園學習圈的「{1}」,現在就與我們一同體驗最有溫度的學習互動!<br><br><br>" + "請點擊以下連結,來完成加入課程的動作:<br>" + "<a href=\"#\" style=\"color: #5bc289;\">{2}</a><br><br><br>" + "課程名稱:{1}<br>" + "適用對象:一般學員<br>" + "授課老師:{7}<br>" + "開課日期:{3:yyyy/MM/dd}~{4:yyyy/MM/dd}<br>" + "上課時段:{5}<br>" + "課程簡介:{6}" + "</td></tr>" + "<tr><td align = \"left\" style = \"padding-top: 30px; font-size: 13px; color: #868b8f;\" >" + "<hr style = \"margin-bottom: 25px; border: 0; background-color: #ccc; height: 1px;\">" + "※ 課程日期或上課時段等相關內容若有異動,請以實際課程資訊為主。<br>" + "※ 此信件是由 Flipus 系統自動產生與寄出,請勿直接回覆。<br>" + "若需要我們協助的問題,請透過此 <a href = \"mailto:[email protected]\" style = \"color: #5bc289;\" > [email protected]</a> 與我們聯繫,謝謝您!<br>" + "<a href = \"http://scedev.eastus.cloudapp.azure.com/iThink/images/inviteimg/footer_banner.png\" title = \"flipus翻轉校園學習圈\" ><img src = \"http://scedev.eastus.cloudapp.azure.com/iThink/images/inviteimg/footer_banner.png\" alt = \"flipus翻轉校園學習圈\" width = \"600\" height = \"100\" style = \"margin-top: 15px;\"></a>" + "<hr style = \"margin-top: 25px; border: 0; background-color: #ccc; height: 1px;\" ></td></tr><tr> " + "<td align = \"left\" style = \"padding-top: 15px; font-size: 13px;\" >© 中國文化大學推廣教育部 All Rights Reserved.</td>" + "</tr></tbody>", teacherInfo.Name, learningCircleInfo.Name, code.InviteUrl, learningCircleInfo.StartDate.Value.ToLocalTime(), learningCircleInfo.EndDate.Value.ToLocalTime(), weekTableTimes, learningCircleInfo.Description, teachersName) : //跑組織信字串 string.Format("<tbody><tr><td align = \"left\" style = \"padding-top: 15px;\"></td></tr>" + "<img src=\"http://scedev.eastus.cloudapp.azure.com/iThink/images/inviteimg/logo.png\" alt = \"logo\" width = \"108\" height = \"48\" />" + "<tr><td align=\"left\" style=\"padding - top: 15px; \"><h2>您好!</h2>" + "{0} 老師 邀請您一起加入,{8}組織專屬課程 -「{1}」,現在就與我們一同體驗最有溫度的學習互動!<br><br><br>" + "請點擊以下連結,來完成加入課程的動作:<br>" + "<a href=\"#\" style=\"color: #5bc289;\">{2}</a><br><br><br>" + "課程名稱:{1}<br>" + "適用對象:{8}組織學員<br>" + "授課老師:{7}<br>" + "開課日期:{3:yyyy/MM/dd}~{4:yyyy/MM/dd}<br>" + "上課時段:{5}<br>" + "課程簡介:{6}" + "</td></tr>" + "<tr><td align = \"left\" style = \"padding-top: 30px; font-size: 13px; color: #868b8f;\" >" + "<hr style = \"margin-bottom: 25px; border: 0; background-color: #ccc; height: 1px;\">" + "※ 課程日期或上課時段等相關內容若有異動,請以實際課程資訊為主。<br>" + "※ 此信件是由 Flipus 系統自動產生與寄出,請勿直接回覆。<br>" + "若需要我們協助的問題,請透過此 <a href = \"mailto:[email protected]\" style = \"color: #5bc289;\" > [email protected]</a> 與我們聯繫,謝謝您!<br>" + "<a href = \"http://scedev.eastus.cloudapp.azure.com/iThink/images/inviteimg/footer_banner.png\" title = \"flipus翻轉校園學習圈\" ><img src = \"http://scedev.eastus.cloudapp.azure.com/iThink/images/inviteimg/footer_banner.png\" alt = \"flipus翻轉校園學習圈\" width = \"600\" height = \"100\" style = \"margin-top: 15px;\"></a>" + "<hr style = \"margin-top: 25px; border: 0; background-color: #ccc; height: 1px;\" ></td></tr><tr> " + "<td align = \"left\" style = \"padding-top: 15px; font-size: 13px;\" >© 中國文化大學推廣教育部 All Rights Reserved.</td>" + "</tr></tbody>", teacherInfo.Name, learningCircleInfo.Name, code.InviteUrl, learningCircleInfo.StartDate.Value.ToLocalTime(), learningCircleInfo.EndDate.Value.ToLocalTime(), weekTableTimes, learningCircleInfo.Description, teachersName, organizationInfo.Name); mailService.SendMail(emailDomain, emailSMTPPort, emailAdminAddress, new List <string>() { code.InviteEmail }, mailContent, string.Format("Flipus 邀請您加入「{0}」", learningCircleInfo.Name), null); } if (requestData.CC) { mailService.SendMail(emailDomain, emailSMTPPort, emailAdminAddress, new List <string>() { teacherInfo.Email }, "已發送邀請碼完成", string.Format("[{0}] 課程邀請碼", learningCircleInfo.Name), null); } return(true); } catch (Exception ex) { return(false); throw ex; } }
/// <summary> /// 處理timeTable資料 /// </summary> /// <param name="startDate"></param> /// <param name="endDate"></param> /// <param name="circleKey"></param> /// <param name="classWeekType"></param> /// <param name="weekTables"></param> /// <returns></returns> public List <TimeTable> Getdata(DateTime startDate, DateTime endDate, string circleKey, int?classWeekType = 0, List <WeekTable> weekTables = null) { var responseData = new List <Infrastructure.Entity.TimeTable>(); var startWeekDay = (int)startDate.DayOfWeek; //間隔週數 var weekCount = Math.Ceiling(((Double)(endDate - startDate).Days + 1) / (Double)7); //查詢傳統周課表 if (circleKey != null && circleKey != string.Empty) //要取得傳統課表資料 { var weekTableService = new WeekTableService(); if (weekTables == null) { weekTables = weekTableService.GetByCirclekey(circleKey).WeekTable.OrderBy(t => t.StartTime).ToList(); //遞增排序 } if (weekTables == null) { return(null); } var learningCircleService = new LearningCircleService(); var learningCircleInfo = learningCircleService.GetDetailByOuterKey(circleKey); if (learningCircleInfo == null) { return(null); } var dayOfWeekTools = new DayOfWeekTools(); var weeks = weekTables.Select(t => dayOfWeekTools.ChangeToDayOfWeek(t.Week).Value).OrderBy(t => t); if (weeks == null) { return(null); } var weeksMaxValue = Convert.ToInt32(weeks.Max(t => t)); //取出周次陣列中最大的數字 var weeksMinValue = Convert.ToInt32(weeks.Min(t => t)); //取出周次陣列中最小的數字 if (weeksMaxValue >= 7) //周次大於等於7不合邏輯,直接跳null { return(null); } var _startDate = startDate.Date; var _endDate = startDate.Date; if (classWeekType.Value == 0) { //每周 for (var week = 0; week <= weekCount; week++) { #region 設定第一周日期區間 if (week == 0) { var getTimeSpan = weekTables.Where(t => (int)dayOfWeekTools.ChangeToDayOfWeek(t.Week) == (int)_startDate.DayOfWeek).ToList(); responseData.AddRange(SwitchWeekTableToTimeTable(getTimeSpan, learningCircleInfo.LearningOuterKey.ToLower(), _startDate, _endDate)); foreach (var weekDay in weeks) { var checkWeek = (int)weekDay - (int)_startDate.DayOfWeek; if (checkWeek > 0) { _startDate = _startDate.AddDays(checkWeek); _endDate = _endDate.AddDays(checkWeek); getTimeSpan = weekTables.Where(t => (int)dayOfWeekTools.ChangeToDayOfWeek(t.Week) == (int)_startDate.DayOfWeek).ToList(); responseData.AddRange(SwitchWeekTableToTimeTable(getTimeSpan, learningCircleInfo.LearningOuterKey.ToLower(), _startDate, _endDate)); } } } #endregion #region 設定第二周到最終週日期區間 else { //第二周開始 //設定起始日期 foreach (var weekDay in weeks.GroupBy(t => t)) { var checkWeek = (int)weekDay.Key - (int)_startDate.DayOfWeek; if (checkWeek < 0) { _endDate = _endDate.AddDays((7 + checkWeek)); _startDate = _startDate.AddDays((7 + checkWeek)); } else if (checkWeek == 0) { _endDate = _endDate.AddDays(7); _startDate = _startDate.AddDays(7); } else { _endDate = _endDate.AddDays(checkWeek); _startDate = _startDate.AddDays(checkWeek); } if (_startDate.Date <= endDate.Date) { var getTimeSpan = weekTables.Where(t => (int)dayOfWeekTools.ChangeToDayOfWeek(t.Week) == (int)_startDate.DayOfWeek).ToList(); responseData.AddRange(SwitchWeekTableToTimeTable(getTimeSpan, learningCircleInfo.LearningOuterKey.ToLower(), _startDate, _endDate)); } } } #endregion } } //隔週 else if (classWeekType.Value == 2) { for (var week = 0; week <= weekCount; week += 2) { #region 設定第一周日期區間 if (week == 0) { var getTimeSpan = weekTables.Where(t => (int)dayOfWeekTools.ChangeToDayOfWeek(t.Week) == (int)_startDate.DayOfWeek).ToList(); responseData.AddRange(SwitchWeekTableToTimeTable(getTimeSpan, learningCircleInfo.LearningOuterKey.ToLower(), _startDate, _endDate)); foreach (var weekDay in weeks) { var checkWeek = (int)weekDay - (int)_startDate.DayOfWeek; if (checkWeek > 0) { _startDate = _startDate.AddDays(checkWeek); _endDate = _endDate.AddDays(checkWeek); getTimeSpan = weekTables.Where(t => (int)dayOfWeekTools.ChangeToDayOfWeek(t.Week) == (int)_startDate.DayOfWeek).ToList(); responseData.AddRange(SwitchWeekTableToTimeTable(getTimeSpan, learningCircleInfo.LearningOuterKey.ToLower(), _startDate, _endDate)); } } } #endregion #region 設定第二周到最終週日期區間 else { //第二周開始 //設定起始日期 foreach (var weekDay in weeks.GroupBy(t => t)) { var checkWeek = (int)weekDay.Key - (int)_startDate.DayOfWeek; if (checkWeek < 0) { _endDate = _endDate.AddDays((14 + checkWeek)); _startDate = _startDate.AddDays((14 + checkWeek)); } else if (checkWeek == 0) { _endDate = _endDate.AddDays(14); _startDate = _startDate.AddDays(14); } else { _endDate = _endDate.AddDays(checkWeek); _startDate = _startDate.AddDays(checkWeek); } if (_startDate.Date <= endDate.Date) { var getTimeSpan = weekTables.Where(t => (int)dayOfWeekTools.ChangeToDayOfWeek(t.Week) == (int)_startDate.DayOfWeek).ToList(); responseData.AddRange(SwitchWeekTableToTimeTable(getTimeSpan, learningCircleInfo.LearningOuterKey.ToLower(), _startDate, _endDate)); } } } #endregion } } else { var getTimeSpan = weekTables.Where(t => (int)dayOfWeekTools.ChangeToDayOfWeek(t.Week) == (int)_startDate.DayOfWeek).ToList(); responseData.AddRange(SwitchWeekTableToTimeTable(getTimeSpan, learningCircleInfo.LearningOuterKey.ToLower(), _startDate, _endDate)); } } return(responseData); }
/// <summary> /// 加入學習圈 /// </summary> /// <param name="circleKey"></param> /// <param name="token"></param> public BaseResponse <JObject> joinGroup(string circleKey, Guid token) { var result = new BaseResponse <JObject>(); string error = string.Empty; string groupKey = circleKey.ToLower(); var version = 0; if (Context.QueryString != null && !string.IsNullOrEmpty(Context.QueryString["version"])) { version = Convert.ToInt32(Context.QueryString["version"]); } //塞人至相對應的group _connections.Add(groupKey, Context.ConnectionId, version); try { var memberService = new MemberService(); var memberInfo = memberService.TokenToMember(token.ToString()).Result; if (memberInfo == null) { return(null); } //如果是smartTA登入 if (memberInfo.RoleName == "3") { var smartTAService = new Service.Backend.SmartTAService(); //先把學習圈內的smartTA都踢掉 var smartTAs = smartTAService.GetSmartTAs(groupKey); if (smartTAs != null) { foreach (var smartTA in smartTAs) { Groups.Remove(smartTA.ConnectionId, groupKey); } } var setSmartTAValue = new SmartTAPostRequest() { CircleKeys = new List <string>(), ClassRoomId = memberInfo.Account }; setSmartTAValue.CircleKeys.Add(groupKey); //建立smartTA關聯 var setSmartTA = smartTAService.InsertRelation(setSmartTAValue); } var learningCircleService = new LearningCircleService(); var learningCircleInfo = learningCircleService.GetDetailByOuterKey(groupKey); var activityService = new ActivityService(); var authList = activityService.CircleAuth(memberInfo.Id, learningCircleInfo.Id); // 將 連接ID 與 群組代碼 放入SignalR的Groups,之後就能透過Groups(群組代碼)將訊息廣播給使用者 error = "Groups.Add"; Groups.Add(Context.ConnectionId, groupKey); mqttCircleKey = groupKey; // 呼叫前端的Method(發送連接成功的Request) error = "joinGroup Clients.Caller.onConnected token:[" + token + "]"; Clients.Caller.onConnected(groupKey, token, Context.ConnectionId, authList); result.Data = authList; result.Success = true; return(result); } catch (Exception ex) { Clients.Caller.onError("joinGroup", "連接學習圈發生意外: token:[" + token + "]" + ex.Message + error); result.Success = false; return(result); } }
/// <summary> /// 處理資料 /// </summary> /// <param name="requestData"></param> /// <returns></returns> public bool WeekTableDataProxy(WeekTablePostRequest requestData) { var tokenService = new TokenService(); var tokenInfo = tokenService.GetTokenInfo(requestData.Token).Result; if (tokenInfo == null) { return(false); } if (requestData.WeekTableData == null) { return(false); } var insertDatas = requestData.WeekTableData.WeekTable.Where(t => t.Id == 0); var learningCircleService = new LearningCircleService(); var learningCircleInfo = learningCircleService.GetDetailByOuterKey(requestData.CircleKey.ToLower()); if (learningCircleInfo == null) { return(false); } var startDateTime = requestData.WeekTableData.StartDate; var endDateTime = requestData.WeekTableData.EndDate; var dayOfWeekTools = new Utility.DayOfWeekTools(); var DateTimeTools = new Utility.DateTimeTools(); //處理新增資料 foreach (var insertData in insertDatas) { insertData.LearningCircleId = learningCircleInfo.Id; insertData.ClassWeekType = 0; insertData.Creator = tokenInfo.MemberId; insertData.CreateUtcDate = DateTime.UtcNow; var insertStartPeriod = DateTimeTools.DatetimeToSectionint(insertData.StartTime, true); var insertEndPeriod = DateTimeTools.DatetimeToSectionint(insertData.EndTime, false); insertData.StartPeriod = insertStartPeriod; insertData.EndPeriod = insertEndPeriod; /*判斷week字串與startTime的時與分,再組成對的時間*/ //取出時與分 var insertStartHour = insertData.StartTime.ToUniversalTime().Hour; var insertStartMinute = insertData.StartTime.ToUniversalTime().Minute; var insertEndHour = insertData.EndTime.ToUniversalTime().Hour; var insertEndMinute = insertData.EndTime.ToUniversalTime().Minute; var insertDayOfWeek = dayOfWeekTools.ChangeToDayOfWeek(insertData.Week); if (insertDayOfWeek == null) { return(false); } var startDayOfWeek = startDateTime.DayOfWeek; if (insertDayOfWeek.Value != startDayOfWeek) { var interval = (int)startDayOfWeek - (int)insertDayOfWeek.Value; if (interval > 0) { startDateTime = startDateTime.AddDays(interval); } else { startDateTime = startDateTime.AddDays(7 + interval); } } startDateTime = startDateTime.AddHours(insertStartHour); startDateTime = startDateTime.AddMinutes(insertStartMinute); endDateTime = endDateTime.AddHours(insertEndHour); endDateTime = endDateTime.AddMinutes(insertEndMinute); insertData.StartTime = startDateTime.ToUniversalTime(); insertData.EndTime = endDateTime.ToUniversalTime(); } try { var db = _uow.DbContext; var updateLearningCircleInfo = db.LearningCircle.FirstOrDefault(t => t.LearningOuterKey.ToLower() == requestData.CircleKey.ToLower()); if (updateLearningCircleInfo != null) { updateLearningCircleInfo.StartDate = requestData.WeekTableData.StartDate.ToUniversalTime(); updateLearningCircleInfo.EndDate = requestData.WeekTableData.EndDate.ToUniversalTime(); } db.WeekTable.AddRange(insertDatas); var dbData = GetByCirclekey(requestData.CircleKey.ToLower()); //聯集資料 var unionDataIds = requestData.WeekTableData.WeekTable.Select(t => t.Id).Union(dbData.WeekTable.Select(t => t.Id)); //找出欲刪除的資料 var deleteDataIds = unionDataIds.Except(requestData.WeekTableData.WeekTable.Select(t => t.Id)); foreach (var deleteDataId in deleteDataIds) { var deleteTimeTable = db.WeekTable.Find(deleteDataId); if (deleteTimeTable == null) { continue; } db.WeekTable.Remove(deleteTimeTable); } //處理編輯資料 var updateDatas = requestData.WeekTableData.WeekTable.Where(t => t.Id > 0).ToList(); startDateTime = requestData.WeekTableData.StartDate; endDateTime = requestData.WeekTableData.EndDate; foreach (var updateData in updateDatas) { var updateDataInfo = db.WeekTable.Find(updateData.Id); var updateStartPeriod = DateTimeTools.DatetimeToSectionint(updateData.StartTime, true); var updateEndPeriod = DateTimeTools.DatetimeToSectionint(updateData.EndTime, false); updateDataInfo.StartPeriod = updateStartPeriod; updateDataInfo.EndPeriod = updateEndPeriod; updateDataInfo.UpdateUtcDate = DateTime.UtcNow; updateDataInfo.Updater = tokenInfo.MemberId; /*判斷week字串與startTime的時與分,再組成對的時間*/ //取出時與分 var updateStartHour = updateData.StartTime.ToUniversalTime().Hour; var updateStartMinute = updateData.StartTime.ToUniversalTime().Minute; var updateEndHour = updateData.EndTime.ToUniversalTime().Hour; var updateEndMinute = updateData.EndTime.ToUniversalTime().Minute; var updateDayOfWeek = dayOfWeekTools.ChangeToDayOfWeek(updateData.Week); if (updateDayOfWeek == null) { return(false); } var startDayOfWeek = startDateTime.DayOfWeek; if (updateDayOfWeek.Value != startDayOfWeek) { var interval = (int)startDayOfWeek - (int)updateDayOfWeek.Value; if (interval > 0) { startDateTime = startDateTime.AddDays(interval); } else { startDateTime = startDateTime.AddDays(7 + interval); } } startDateTime = startDateTime.AddHours(updateStartHour); startDateTime = startDateTime.AddMinutes(updateStartMinute); endDateTime = endDateTime.AddHours(updateEndHour); endDateTime = endDateTime.AddMinutes(updateEndMinute); updateDataInfo.StartTime = updateData.StartTime.ToUniversalTime(); updateDataInfo.EndTime = updateData.EndTime.ToUniversalTime(); updateDataInfo.Week = updateData.Week; updateDataInfo.Place = updateData.Place; } db.SaveChanges(); return(true); } catch (Exception ex) { return(false); } }
/// <summary> /// 修改周課表 /// </summary> /// <param name="token"></param> /// <param name="circleKey"></param> /// <param name="place"></param> /// <param name="startDate"></param> /// <param name="endDate"></param> /// <param name="weeks"></param> /// <returns></returns> public bool UpdateWeekDatas(string token, string circleKey, string place, DateTime startDate, DateTime endDate, int classWeekType, List <int> weeks) { var tokenService = new TokenService(); var tokenInfo = tokenService.GetTokenInfo(token).Result; if (tokenInfo == null) { return(false); } var learningCircleService = new LearningCircleService(); var learningCircleinfo = learningCircleService.GetDetailByOuterKey(circleKey); if (learningCircleinfo == null) { return(false); } var startHour = Convert.ToInt32(startDate.ToString("HH")); var endHour = Convert.ToInt32(endDate.ToString("HH")); var dayOfWeekService = new Utility.DayOfWeekTools(); var startWeek = startDate.DayOfWeek; //9點以前都是第一節,9點以後都(目前小時-7)節 startHour = startHour <= 9 ? 1 : startHour - 7; endHour = endHour <= 9 ? 1 : endHour - 7; try { var db = _uow.DbContext; //排序 周日:0 ~周六:6 weeks = weeks.OrderBy(t => t).ToList(); //查看week是否有錯誤資料 var weekMax = weeks.Max(t => t); if (weekMax >= 7) { return(false); } //取得資料庫目前傳統課表 var sqlWeekTablesDatas = GetByLearningCircleId(learningCircleinfo.Id); //暫存作為刪除的資料 var tempWeekTableDatas = sqlWeekTablesDatas.ToList(); foreach (var week in weeks) { var weekInfo = (DayOfWeek)week; //踢出不要刪除的weekTable資訊 if (tempWeekTableDatas.Count() > 0) { var removeTempData = tempWeekTableDatas.FirstOrDefault(t => t.StartTime.ToLocalTime().DayOfWeek.ToString() == weekInfo.ToString()); if (removeTempData != null) { tempWeekTableDatas.Remove(removeTempData); } } //設定開始日期 var _startDate = startDate; var checkWeek = week - (int)startWeek; if (checkWeek < 0) { _startDate = startDate.AddDays(7 + checkWeek); } else if (checkWeek > 0) { _startDate = startDate.AddDays(checkWeek); } //找出並修改要保留的資料 var editDataInfo = sqlWeekTablesDatas.FirstOrDefault(t => t.StartTime.ToLocalTime().DayOfWeek.ToString() == weekInfo.ToString()); if (editDataInfo != null) { editDataInfo.Place = place; editDataInfo.StartTime = _startDate.ToUniversalTime(); editDataInfo.EndTime = endDate.ToUniversalTime(); editDataInfo.StartPeriod = startHour; editDataInfo.EndPeriod = endHour; editDataInfo.ClassWeekType = classWeekType; continue; } //資料庫無該資料,需要新增 var entity = new WeekTable() { ClassWeekType = classWeekType, CreateUtcDate = DateTime.UtcNow, Creator = tokenInfo.MemberId, EndPeriod = endHour, EndTime = endDate.ToUniversalTime(), LearningCircleId = learningCircleinfo.Id, Place = place, StartPeriod = startHour, StartTime = _startDate.ToUniversalTime(), Week = dayOfWeekService.ChangeToCht(weekInfo) }; db.WeekTable.Add(entity); } //刪除timeTable資訊 foreach (var deleteWeek in tempWeekTableDatas) { var timeTableInfo = db.TimeTable.Where(t => t.Course_No == circleKey).ToList(); var deleteTimeTableDatas = timeTableInfo.Where(t => t.StartDate.Value.DayOfWeek.ToString() == deleteWeek.StartTime.DayOfWeek.ToString()).ToList(); db.TimeTable.RemoveRange(deleteTimeTableDatas); } //刪除weektable資訊 db.WeekTable.RemoveRange(tempWeekTableDatas); db.SaveChanges(); return(true); } catch (Exception ex) { return(false); } }
/// <summary> /// 建立多筆傳統周課表 /// </summary> /// <param name="token"></param> /// <param name="circleKey"></param> /// <param name="classWeekType"></param> /// <param name="place"></param> /// <param name="startDate"></param> /// <param name="endDate"></param> /// <param name="weeks"></param> /// <returns></returns> public IEnumerable <WeekTable> CreateWeekDatas(string token, string circleKey, int classWeekType, string place, DateTime startDate, DateTime endDate, List <int> weeks) { var saveDatas = new List <WeekTable>(); if (weeks.Count <= 0) //只新增一筆 { var data = CreateWeekData(token, circleKey, classWeekType, place, startDate, endDate); if (data == null) { return(null); } saveDatas.Add(data); return(saveDatas); } var tokenService = new TokenService(); var tokenInfo = tokenService.GetTokenInfo(token).Result; if (tokenInfo == null) { return(null); } var learningCircleService = new LearningCircleService(); var learningCircleinfo = learningCircleService.GetDetailByOuterKey(circleKey); if (learningCircleinfo == null) { return(null); } var startHour = Convert.ToInt32(startDate.ToString("HH")); var endHour = Convert.ToInt32(endDate.ToString("HH")); var dayOfWeekService = new Utility.DayOfWeekTools(); var startWeek = startDate.DayOfWeek; //9點以前都是第一節,9點以後都(目前小時-7)節 startHour = startHour < 9 ? 1 : startHour - 7; endHour = endHour < 9 ? 1 : endHour - 7; try { var db = _uow.DbContext; weeks = weeks.OrderBy(t => t).ToList(); var weekMax = weeks.Max(t => t); if (weekMax >= 7) { return(null); } foreach (var week in weeks) { var weekInfo = (DayOfWeek)week; var _startDate = startDate; var checkWeek = week - (int)startWeek; if (checkWeek < 0) { _startDate = startDate.AddDays(7 + checkWeek); } else if (checkWeek > 0) { _startDate = startDate.AddDays(checkWeek); } var entity = new WeekTable() { ClassWeekType = classWeekType, CreateUtcDate = DateTime.UtcNow, Creator = tokenInfo.MemberId, EndPeriod = endHour, EndTime = endDate.ToUniversalTime(), LearningCircleId = learningCircleinfo.Id, Place = place, StartPeriod = startHour, StartTime = _startDate.ToUniversalTime(), Week = dayOfWeekService.ChangeToCht(weekInfo) }; saveDatas.Add(entity); } db.WeekTable.AddRange(saveDatas); db.SaveChanges(); return(saveDatas); } catch (Exception ex) { return(null); } }
/// <summary> /// 新增一筆主題討論活動 /// </summary> /// <param name="circleKey"></param> /// <param name="memberId"></param> /// <param name="name"></param> /// <param name="description"></param> /// <param name="fileCount"></param> /// <param name="tagId"></param> /// <returns></returns> public Infrastructure.ViewModel.ActivitysViewModel Add(string circleKey, int memberId, string name, string description, List <Infrastructure.DataTransferObject.RequestFile> files, int tagId) { var db = _uow.DbContext; Guid eveId = Guid.NewGuid(); DateTime?dt = DateTime.UtcNow; int fileCount = files.Count(); var learningCircleInfo = learningCircleService.GetDetailByOuterKey(circleKey); #region // 1. 建立主題討論活動物件 var objDiscussion = new ActDiscussion() { LearningId = learningCircleInfo.Id, Name = name, EventId = eveId, CreateUser = memberId, Created = TimeData.Create(dt), Updated = TimeData.Create(null), Deleted = TimeData.Create(null), Description = description, TagId = tagId, Visibility = true, Enable = true, FileCount = fileCount }; #endregion #region // 2. 替主題討論活動建立一筆訊息物件 Activitys objAct = new Activitys() { Duration = 0, ModuleKey = ModuleType.Discussion, ToRoomId = circleKey, CreateUser = memberId, Created = TimeData.Create(dt), Updated = TimeData.Create(null), Deleted = TimeData.Create(null), OuterKey = eveId, StartDate = dt, IsActivity = true, CardisShow = true, Publish_Utc = dt }; #endregion // 3. 寫入DB db.ActDiscussion.Add(objDiscussion); db.Activitys.Add(objAct); //要先儲存Activity的內容才能生出ActivityId db.SaveChanges(); #region // 3. 替主題討論活動建立一筆互動物件 方便於未來做更多功能而存 if (fileCount != 0) { // 2018-03-22 yuschang 建立附加檔案 var fileStorages = fileService.GetFileStorages(memberId, files); //建立主題討論與檔案的關聯 discussionFileService.DiscussionFileReference(objDiscussion.Id, fileStorages, null); } #endregion return(activityService.SignalrResponse(circleKey, objDiscussion.EventId, ModuleType.Discussion, memberId, true)); }
/// <summary> /// 修改開始結束日期資訊 /// </summary> /// <param name="startDate"></param> /// <param name="endDate"></param> /// <param name="circleKey"></param> /// <returns></returns> public bool UpdateByCircleKey(DateTime startDate, DateTime endDate, string circleKey) { var learningcircleService = new LearningCircleService(); var learningcircleInfo = learningcircleService.GetDetailByOuterKey(circleKey); if (learningcircleInfo == null) { return(false); } var dateTimeTools = new Utility.DateTimeTools(); var datas = dateTimeTools.Getdata(learningcircleInfo.StartDate.Value.ToLocalTime(), learningcircleInfo.EndDate.Value.ToLocalTime(), circleKey); // var removeDatas = datas.Where(t => t.StartDate.Value < startDate || t.EndDate.Value > endDate).ToList(); var db = _uow.DbContext; var dbData = db.TimeTable.Where(t => t.Course_No == circleKey).ToList(); //取得DB目前所有上課時間地點資訊 var allData = dbData.Union(datas); //聯集需求的日期 var deleteDatas = allData.Except(datas); //找出不是需求的日期 -與DB資料的差集 //找出不是需求的日期 var removeDatas = db.TimeTable.Where(t => t.Course_No == circleKey && (t.StartDate.Value <startDate || t.EndDate.Value> endDate)).ToList(); removeDatas = removeDatas.Union(deleteDatas).ToList(); //聯集需要刪除的資料 //刪除更新設定區間外的日期 db.TimeTable.RemoveRange(removeDatas); //取得最初的開始日期 var firstTimeTable = datas.OrderBy(t => t.StartDate).FirstOrDefault(); //取得最後的結束日期 var lastTimeTable = datas.OrderByDescending(t => t.EndDate).FirstOrDefault(); var weekTableService = new WeekTableService(); var weekTableInfo = weekTableService.GetByCirclekey(circleKey); var weekOfDays = weekTableInfo.WeekTable.Select(t => t.StartTime.ToLocalTime().DayOfWeek.ToString()).OrderBy(t => t); //新增DB所沒有的startDate日期區塊 if (firstTimeTable.StartDate.HasValue && (firstTimeTable.StartDate.Value >= startDate)) { var insertStartDates = new List <TimeTable>(); var diffStartDay = (firstTimeTable.StartDate.Value - startDate).Days + 1; for (var firstDay = 1; firstDay < diffStartDay; firstDay++) { var lastEntity = new TimeTable() { ClassRoom = firstTimeTable.ClassRoom, ClassTime = firstTimeTable.ClassTime, Course_No = firstTimeTable.Course_No, Course_Id = firstTimeTable.Course_Id, EndDate = firstTimeTable.EndDate, StartDate = firstTimeTable.StartDate }; var lastStartDate = lastEntity.StartDate.Value.AddDays(-(firstDay)); var lastEndDate = lastEntity.EndDate.Value.AddDays(-(firstDay)); if (weekOfDays.FirstOrDefault(t => t == lastStartDate.DayOfWeek.ToString()) != null) { lastEntity.StartDate = lastStartDate; lastEntity.EndDate = lastEndDate; db.TimeTable.Add(lastEntity); } } } //新增DB所沒有的endDate日期 區塊 if (lastTimeTable.EndDate.HasValue && (lastTimeTable.EndDate.Value >= endDate)) { var insertStartDates = new List <TimeTable>(); var diffEndDay = (endDate - lastTimeTable.EndDate.Value).Days + 1; for (var endDay = 1; endDay <= diffEndDay; endDay++) { var nextEntity = new TimeTable() { ClassRoom = lastTimeTable.ClassRoom, ClassTime = lastTimeTable.ClassTime, Course_No = lastTimeTable.Course_No, Course_Id = lastTimeTable.Course_Id, EndDate = lastTimeTable.EndDate, StartDate = lastTimeTable.StartDate };; var nextStartDate = nextEntity.StartDate.Value.AddDays(endDay); var nextEndDate = nextEntity.EndDate.Value.AddDays(endDay); if (weekOfDays.FirstOrDefault(t => t == nextStartDate.DayOfWeek.ToString()) != null) { nextEntity.StartDate = nextStartDate; nextEntity.EndDate = nextEndDate; db.TimeTable.Add(nextEntity); } } } //補上新加入的weeks資料 foreach (var data in datas) { var checkData = dbData.FirstOrDefault(t => t.StartDate.Value.Date == data.StartDate.Value.Date); if (checkData != null) { continue; } db.TimeTable.Add(data); } db.SaveChanges(); return(true); }
/// <summary> /// 查詢學習圈底下 ConnectId 和最後活動紀錄 /// </summary> /// <param name="circleKey"></param> /// <param name="version">true 新版(全) / old 舊版(扣除自己) </param> /// <returns></returns> public Dictionary <List <string>, dynamic> GetConnectIdAndData(string circleKey, int memberId, SignalrConnectIdType connectIdType, SignalrDataType dataType) { Dictionary <List <string>, dynamic> dic = new Dictionary <List <string>, dynamic>(); List <int> membersId = new List <int>(); var learningCircleService = new LearningCircleService(); var learningcircleInfo = learningCircleService.GetDetailByOuterKey(circleKey.ToLower()); if (learningcircleInfo == null) { return(dic); } switch (connectIdType) { case SignalrConnectIdType.All: var cacheMembers = cacheService.GetCircleMember(circleKey); if (cacheMembers == null) { return(dic); } foreach (var member in cacheMembers) { membersId.Add(member.Id); } break; case SignalrConnectIdType.Other: var cacheOtherMembers = cacheService.GetCircleMember(circleKey).Where(x => x.Id != memberId); if (cacheOtherMembers == null || cacheOtherMembers.FirstOrDefault() == null) { return(dic); } foreach (var member in cacheOtherMembers.ToList()) { membersId.Add(member.Id); } break; case SignalrConnectIdType.Teachers: var membersAccount = learningCircleService.GetCircleTeacherListBySql(circleKey, memberId); if (membersAccount == null) { return(dic); } foreach (var account in membersAccount) { membersId.Add(memberService.AccountToMember(account, learningcircleInfo.OrgId.Value).Id); } break; case SignalrConnectIdType.One: membersId.Add(memberId); break; } foreach (var member in membersId) { if (HttpContext.Current == null) { return(dic); } if (HttpContext.Current.Cache.Get(member.ToString()) is List <string> myConn) { var data = GetData(dataType, circleKey, member); dynamic _value; if (!dic.TryGetValue(myConn, out _value)) { dic.Add(myConn, data); } } } return(dic); }
/// <summary> /// 根據邀請碼加入課程管理者列表 /// </summary> /// <param name="requestData"></param> /// <returns></returns> public InviteResponseData CreateMutiple(CourseManagerPostRequest requestData) { var inviteData = _uow.DbContext.MemberInvite.FirstOrDefault(t => t.Code.ToLower() == requestData.InviteCode.ToLower()); var responseData = new InviteResponseData() { InviteStatus = InviteStatusEnum.inviteError }; if (inviteData == null) { return(responseData); } var learningService = new LearningCircleService(); var learningCircleInfo = learningService.GetDetailByOuterKey(inviteData.CircleKey.ToLower()); //課程停止邀請 if (learningCircleInfo == null || learningCircleInfo.AdminInviteEnable == false || learningCircleInfo.Enable == false) { responseData.InviteStatus = InviteStatusEnum.EndInvite; return(responseData); } //邀請碼失效 if (inviteData.Enable == false) { responseData.InviteStatus = InviteStatusEnum.inviteError; return(responseData); } responseData.CircleName = learningCircleInfo.Name; var memberService = new MemberService(); var memberInfo = memberService.TokenToMember(requestData.Token).Result; if (memberInfo == null || memberInfo.OrgId != learningCircleInfo.OrgId.Value) { responseData.InviteStatus = InviteStatusEnum.AccountNotAllow; return(responseData); } var organizationInfo = _uow.DbContext.Organizations.FirstOrDefault(t => t.Id == memberInfo.OrgId); if (organizationInfo == null) { responseData.InviteStatus = InviteStatusEnum.AccountNotAllow; return(responseData); } responseData.OrgName = organizationInfo.Name; //判斷要加的管理者是否跟Token帳號一致 var checkAddAccountIsSuccess = requestData.Accounts.FirstOrDefault(t => t.ToString() == memberInfo.Account); if (checkAddAccountIsSuccess == null) { responseData.InviteStatus = InviteStatusEnum.inviteError; return(responseData); } //將驗證碼失效 var getOldInviteData = _uow.DbContext.MemberInvite.FirstOrDefault (t => t.CircleKey.ToLower() == inviteData.CircleKey.ToLower() && t.Enable == true && t.Type == 1 && t.Code.ToLower() == requestData.InviteCode.ToLower()); if (getOldInviteData != null) { getOldInviteData.Enable = false; } else { responseData.InviteStatus = InviteStatusEnum.inviteError; return(responseData); } var checkJoined = GetDetail(memberInfo.Id, learningCircleInfo.Id, null); //判斷是否加入過 if (checkJoined != null) { UpdateFromCreate(checkJoined.Id); { responseData.InviteStatus = InviteStatusEnum.success; return(responseData); } } var entity = new LearningCircleManager() { CreateUtcDate = DateTime.UtcNow, Creator = memberInfo.Id, Enable = true, LearningCircleId = learningCircleInfo.Id, MemberId = memberInfo.Id, ResType = requestData.ResType }; _uow.DbContext.LearningCircleManager.Add(entity); _uow.SaveChanges(); responseData.InviteStatus = InviteStatusEnum.success; return(responseData); }
/// <summary> /// 建立SmartTA與學習圈的關聯 /// </summary> /// <param name="requestData"></param> /// <returns></returns> public SmartTAGetResponse InsertRelation(SmartTAPostRequest requestData) { if (requestData.CircleKeys.FirstOrDefault() == null) { return(null); } var learningCircleService = new LearningCircleService(_uow); int?orgId = 1; foreach (var circlekey in requestData.CircleKeys) { var learningCircleInfo = learningCircleService.GetDetailByOuterKey(circlekey.ToLower()); if (learningCircleInfo == null) { return(null); } orgId = learningCircleInfo.OrgId; var smartTAInfo = _uow.DbContext.Members.FirstOrDefault(t => t.Name.ToLower() == requestData.ClassRoomId && t.OrgId == learningCircleInfo.OrgId); if (smartTAInfo == null) { return(null); } //確認是否已經有smartTA存在於學習圈內 var checkHadSmartTA = _uow.DbContext.SmartTAJoinGroupLog.Where(t => t.CircleKey.ToLower() == circlekey.ToLower()); //要刪掉該smartTA的關聯 if (checkHadSmartTA.FirstOrDefault() != null) { foreach (var smartTA in checkHadSmartTA) { smartTA.Enabled = false; smartTA.CreateUtcDate = DateTime.UtcNow; } } var checkWasInserted = checkHadSmartTA.FirstOrDefault(t => t.SmartTAName.ToLower() == requestData.ClassRoomId.ToLower()); //如果有加入過就修改為true if (checkWasInserted != null) { checkWasInserted.Enabled = true; checkWasInserted.CreateUtcDate = DateTime.UtcNow; } //沒有就新增一筆關聯 else { var insertEntity = new SmartTAJoinGroupLog() { CircleKey = circlekey.ToLower(), CreateUtcDate = DateTime.UtcNow, SmartTAName = requestData.ClassRoomId.ToLower(), Enabled = true, ConnectionId = smartTAInfo.ConnectionId }; _uow.DbContext.SmartTAJoinGroupLog.Add(insertEntity); } if (learningCircleInfo == null) { continue; } /*更新學習圈課綱資料*/ var weekTableDatas = _uow.DbContext.WeekTable.Where(t => t.LearningCircleId == learningCircleInfo.Id); foreach (var weektableData in weekTableDatas) { weektableData.ClassRoomId = smartTAInfo.Name; //weektableData.Place = smartTAInfo.Name; weektableData.Updater = smartTAInfo.Id; weektableData.UpdateUtcDate = DateTime.UtcNow; } var timeTableDatas = _uow.DbContext.TimeTable.Where(t => t.Course_No.ToLower() == circlekey.ToLower()); foreach (var timeTableData in timeTableDatas) { timeTableData.OriginClassRoomID = timeTableData.ClassRoomId; timeTableData.OriginClassRoomName = timeTableData.ClassRoom; timeTableData.ClassRoomId = smartTAInfo.Name; // timeTableData.ClassRoom = smartTAInfo.Name; timeTableData.UpdateDate = DateTime.UtcNow; } } _uow.SaveChanges(); return(GetDataByClassRoomId(requestData.ClassRoomId, orgId.Value)); }
/// <summary> /// 雲端版APP專用 /// </summary> /// <param name="circleKey"></param> /// <param name="token"></param> /// <param name="files"></param> /// <returns></returns> public Infrastructure.BusinessObject.MaterialEvent AddFile(string circleKey, string token, HttpFileCollection files) { var tokenService = new TokenService(); var checkToken = tokenService.GetTokenInfo(token).Result; var learningcircleService = new LearningCircleService(); var learningcircleinfo = learningcircleService.GetDetailByOuterKey(circleKey); var createDateTime = DateTime.UtcNow; if (checkToken == null) { return(null); } var fileService = new FileService(); var newFiles = fileService.UploadFile(checkToken.MemberId, files); var file = newFiles.FirstOrDefault(); if (file == null) { return(null); } try { var db = _uow.DbContext; var materialEntity = new Infrastructure.Entity.ActMaterial() { LearningId = learningcircleinfo.Id, Name = file.Name, EventId = file.FileGuid, CreateUser = checkToken.MemberId, Created = Infrastructure.Property.TimeData.Create(createDateTime), Updated = Infrastructure.Property.TimeData.Create(null), Deleted = Infrastructure.Property.TimeData.Create(null), GoogleDriveFileId = file.FileGuid.ToString("N"), FileImgUrl = string.Format("{0}api/imgFile/{1}/{2}/{3}", loginServer, file.FileGuid.ToString("N"), maxImgWidth, maxImgHeight), FileLength = file.FileSize, FileType = file.FileContentType, Visibility = true }; var activityEntity = new Activitys() { CardisShow = true, CreateUser = checkToken.MemberId, Created = Infrastructure.Property.TimeData.Create(createDateTime), Updated = Infrastructure.Property.TimeData.Create(null), Deleted = Infrastructure.Property.TimeData.Create(null), OuterKey = file.FileGuid, Publish_Utc = createDateTime, ToRoomId = circleKey, ModuleKey = Utility.ParaCondition.ModuleType.Material, StartDate = createDateTime, IsActivity = true }; db.ActMaterial.Add(materialEntity); db.Activitys.Add(activityEntity); db.SaveChanges(); } catch (Exception ex) { return(null); throw ex; } var memberService = new MemberService(); var memberInfo = memberService.UserIdToAccount(checkToken.MemberId); var response = new Infrastructure.BusinessObject.MaterialEvent() { ClassId = circleKey, CreateAccount = memberInfo.Account, Creator = memberInfo.Id.ToString(), OuterKey = file.FileGuid, CreateDate = createDateTime }; return(response); }
/// <summary> /// 發送訊息的動作 /// </summary> /// <param name="circleKey">發送對象(學習圈)</param> /// <param name="token">發送者token</param> /// <param name="senderName">發送者姓名</param>> /// <param name="text">訊息內文</param> public IHttpActionResult Message_CreateActivity(Guid token, string circleKey, string senderName, string text) { var tokenInfo = CheckToken(token.ToString()); var responseCommonData = new BaseResponse <ActivitysViewModel>(); responseCommonData.Success = false; responseCommonData.Data = new ActivitysViewModel(); var response = new System.Web.Http.Results.OkNegotiatedContentResult <BaseResponse <ActivitysViewModel> > (responseCommonData, new Controllers.APPSupport.EmptyController()); if (tokenInfo == null) { return(response); } try { // 是否為合法使用者 int memberId = tokenInfo.MemberId; if (memberId > 0) { var learningCircleService = new LearningCircleService(); var learningCircleInfo = learningCircleService.GetDetailByOuterKey(circleKey); if (learningCircleInfo != null) { var messageService = new MessageService(); var connections = _connections.GetConnections(circleKey.ToLower()); text.Trim().Replace("\r\n", ""); if (text != string.Empty || text != null) { var rtn = messageService.Insert(circleKey, learningCircleInfo.Id, memberId, "text", text); responseCommonData.Success = true; responseCommonData.Data = rtn; if (connections != null) { foreach (var connectionVersion in connections.Versions) { //預備傳送的connecitonList列表 var sendConnections = Tools.ConnectionsProcess(connections, connectionVersion); //原始結果 //if (connectionVersion >= 1) //大於1版號的使用新版的結果 //rtn = _msgService.Add(circleKey, id, memberId, MessageType.Text, text); Clients.Clients(sendConnections).appendActivity(rtn, ""); } } else { Clients.Group(circleKey.ToLower()).appendActivity(rtn, ""); } var signalrService = new SignalrService(); //發通知 var connectIdAndData = signalrService.GetConnectIdAndData(circleKey.ToLower(), memberId, SignalrConnectIdType.All, SignalrDataType.Activity); SignalrClientHelper.ShowRecordListById(connectIdAndData); // 更新活動紀錄 // ShowRecordList(circleKey.ToLower()); // 發送推播通知到行動裝置上(android & ios) PushOnCreatedMessage(circleKey, rtn.OuterKey, rtn.CreatorName, rtn.Text, memberId); } } else { responseCommonData.Message = "Message_CreateActivity 學習圈資訊錯誤,無法發送訊息!"; Clients.Caller.onError("Message_CreateActivity", "學習圈資訊錯誤,無法發送訊息!"); } } else { Clients.Caller.onError("Message_CreateActivity", "身分驗證失敗,請重新登入!token:[" + token + "]"); responseCommonData.Message = "Message_CreateActivity 身分驗證失敗,請重新登入!token:[" + token + "]"; } } catch (Exception ex) { responseCommonData.Message = "Message_CreateActivity 發送訊息發生意外: " + ex.Message; Clients.Caller.onError("Message_CreateActivity", "發送訊息發生意外: " + ex.Message); } response = new System.Web.Http.Results.OkNegotiatedContentResult <BaseResponse <ActivitysViewModel> > (responseCommonData, new Controllers.APPSupport.EmptyController()); return(response); }