/// <summary> /// 建立點名活動 /// </summary> /// <param name="learningId">課id</param> /// <param name="token">操作者</param> /// <param name="key">點名密碼</param> /// <param name="duration">活動持續時間(秒)</param> /// <returns></returns> public async Task <BaseResponse <ActivitysViewModel> > SignIn_CreateActivity(Guid token, string circleKey, string beaconKey, int duration) { var response = new BaseResponse <ActivitysViewModel>(); try { var auth = new ServerCheckItem() { CircleKey = circleKey, ModuleFun = SignInFunction.Admin }; bool check = AuthCheck(token, ref auth); if (check) { if (auth.ModuleAuth) { var lock_circleKey = string.Empty; var lock_OuterKey = Guid.Empty; var lock_MemberId = 0; var isActive = hasActiveEvent(circleKey); if (isActive) { response.Success = false; response.Message = "目前仍有點名活動正在進行中,結束後才能再新增點名。"; response.State = Infrastructure.ViewModel.Base.LogState.Error; // activity.hub.js中的onError會以下面參數判斷是否要跳提示視窗,若有修改請一併確認 Clients.Caller.onError("SignIn_CreateActivity", "目前仍有點名活動正在進行中,結束後才能再新增點名。"); } // 2016-12-28 add by sophiee 一次只能有一個點名活動正在進行中 else { lock (_signInLock) { string eventName = DateTime.Now.ToString("MM/dd") + "點名活動"; var rtn = signInService.InsertSignInData(circleKey, auth.CircleId, auth.MemberId, beaconKey, duration, eventName); response.Success = true; response.Message = "建立成功"; response.Data = rtn; // 將訊息發送給群組 Clients.Group(circleKey.ToLower()).appendActivity(rtn, ""); //活動開始 // _eventService.StartEvent(auth.CircleId, rtn.OuterKey, auth.MemberId); //點名人員清單可能會有異動,故重新取得點名物件 // var startRtn = _eventService.GetEventData(rtn.OuterKey, auth.MemberId); var startRtn = signInService.GetSignInEvent(rtn.OuterKey, auth.MemberId); rtn.sOuterKey = Service.Utility.OuterKeyHelper.GuidToPageToken(rtn.OuterKey); //告訴同班的有活動開始 Clients.Group(circleKey.ToLower()).signIn_eventStart(rtn.sOuterKey, startRtn); //單元測試直接回傳結果 if (beaconKey == "unitTest") { return(response); } var signalrService = new SignalrService(); //發通知 var connectIdAndData = signalrService.GetConnectIdAndData(circleKey.ToLower(), auth.MemberId, SignalrConnectIdType.All, SignalrDataType.Activity); SignalrClientHelper.ShowRecordListById(connectIdAndData); // 更新活動紀錄 // ShowRecordList(circleKey.ToLower()); lock_circleKey = circleKey; lock_OuterKey = rtn.OuterKey; lock_MemberId = auth.MemberId; } // 發送推播 await PushOnCreatedSignIn(lock_circleKey.ToLower(), lock_OuterKey, lock_MemberId); } } else { response.Success = false; response.Message = "沒有權限"; response.State = LogState.Error; Clients.Caller.onError("SignIn_CreateActivity", "您沒有權限!"); } } else { response.Success = false; response.Message = "沒有權限"; response.State = LogState.NoAccount; Clients.Caller.onError("SignIn_CreateActivity", "身分驗證失敗,請重新登入!token:[" + token + "]"); } } catch (Exception ex) { var msg = string.Format("{0}\n\n{1}", ex.Message, ex.StackTrace); response.Success = false; response.Message = msg; response.State = Infrastructure.ViewModel.Base.LogState.Error; Clients.Caller.onError("SignIn_CreateActivity", "建立點名活動發生意外: " + msg); } 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); }