/// <summary> /// 老師更新點名簽到記錄 /// </summary> /// <param name="learningId">學習圈Id</param> /// <param name="token">老師token</param> /// <param name="eventId">點名活動Guid</param> /// <param name="studId">被編輯點名狀態的學生MemberId</param> /// <param name="status">點名狀態 1出席,2缺席,3遲到,4早退,5請假</param> /// <returns></returns> public async Task SignIn_Modify(string circleKey, Guid token, string outerKey, int stuId, int status) { try { var auth = new ServerCheckItem() { OuterKey = outerKey, CircleKey = circleKey, ModuleFun = SignInFunction.Admin }; bool chekc = AuthCheck(token, ref auth); if (chekc) { if (auth.ModuleAuth) { if (AttendanceState.Status.ContainsKey(status.ToString())) { // 更新點名紀錄 var log = signInLogService.UpdateLog(auth.MemberId, auth.EventId, stuId, status.ToString()); // 新增一筆通知 string stateName = AttendanceState.GetStateName(status.ToString()); string text = "您的狀態已更新:" + stateName; var noticeService = new NoticeService(); noticeService.AddNoticeSaveChange(circleKey, stuId, auth.EventId, text); var signalrService = new SignalrService(); //發通知給學生 var connectIdAndNoticeData = signalrService.GetConnectIdAndData(circleKey.ToLower(), log.StuId, SignalrConnectIdType.One, SignalrDataType.Notice); SignalrClientHelper.SendNotice(connectIdAndNoticeData); //告訴同學點名狀態已改變 Clients.Group(circleKey.ToLower()).signIn_StatusChanged(outerKey, log); // 發送推播 await PushOnChangedSignIn(circleKey.ToLower(), auth.EventId, log.StudId, stateName); } else { Clients.Caller.onError("SignIn_Modify", "狀態錯誤!"); } } else { Clients.Caller.onError("SignIn_Modify", "您沒有權限!"); } } else { Clients.Caller.onError("SignIn_Modify", "身分驗證失敗,請重新登入!token:[" + token + "]"); } } catch (Exception ex) { Clients.Caller.onError("SignIn_Modify", "老師點名發生意外: " + ex.Message); } }
public BaseStationClient(AgvStationEnum id, T device) { StationDevice = device; Station_Id = id; signalrService = new SignalrService(signalrHost, "AgvMissonHub"); signalrService.OnMessage <AgvOutMisson>(AgvReceiveActionEnum.receiveOutMissionFinMessage.EnumToString(), (s) => { OnAgvOutMissonEvent(s); }); signalrService.OnMessage <AgvInMisson>(AgvReceiveActionEnum.receiveInMissionFinMessage.EnumToString(), (s) => { OnAgvInMissonEvent(s); }); }
public async static void MainTest() { signalrService = new SignalrService("http://localhost/Agv", "AgvMissonHub"); signalrService.OnMessage <AgvOutMisson>(AgvReceiveActionEnum.receiveOutMissionMessage.EnumToString() , (s) => { Console.WriteLine("[receive]:" + s.Id); }); await signalrService.Start(); while (true) { string data = Console.ReadLine(); Console.WriteLine("[send]:" + data); await signalrService.Send <AgvOutMisson>(AgvSendActionEnum.SendOutMission.EnumToString(), new AgvOutMisson() { Id = data }); } }
/// <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); }
public async Task <IHttpActionResult> Get() { var response = new Infrastructure.ViewModel.Base.BaseResponse <string>(); multipartFormDataModel = new SetNewAbsenceFormRequest(); await SetFileData(); if (multipartFormDataStreamProvider.FormData == null) { response.Message = "遺漏參數"; response.State = Infrastructure.ViewModel.Base.LogState.RequestDataError; return(Content(HttpStatusCode.BadRequest, response)); } //設定參數 var token = multipartFormDataStreamProvider.FormData.Get("icantoken") != null?multipartFormDataStreamProvider.FormData.GetValues("icantoken")[0] : null; var circleKey = multipartFormDataStreamProvider.FormData.Get("classid") != null?multipartFormDataStreamProvider.FormData.GetValues("classid")[0] : null; var title = multipartFormDataStreamProvider.FormData.Get("title") != null?multipartFormDataStreamProvider.FormData.GetValues("title")[0] : null; var content = multipartFormDataStreamProvider.FormData.Get("content") != null?multipartFormDataStreamProvider.FormData.GetValues("content")[0] : null; var leavedate = multipartFormDataStreamProvider.FormData.Get("leavedate") != null?multipartFormDataStreamProvider.FormData.GetValues("leavedate")[0] : null; var leavecategoryid = multipartFormDataStreamProvider.FormData.Get("leavecategoryid") != null?multipartFormDataStreamProvider.FormData.GetValues("leavecategoryid")[0] : null; if (token == null || circleKey == null || title == null || content == null || leavedate == null || leavecategoryid == null) { response.Message = "遺漏參數"; response.State = Infrastructure.ViewModel.Base.LogState.RequestDataError; return(Content(HttpStatusCode.BadRequest, response)); } multipartFormDataModel.Token = Guid.Parse(token); multipartFormDataModel.CircleKey = circleKey.ToLower(); multipartFormDataModel.Title = HttpUtility.UrlDecode(title); multipartFormDataModel.Content = HttpUtility.UrlDecode(content); multipartFormDataModel.LeaveDate = Convert.ToDateTime(leavedate); multipartFormDataModel.LeaveCategoryId = Convert.ToInt32(leavecategoryid); var service = new LeaveService(); var data = service.SetNewAbsenceForm(multipartFormDataModel, multipartFormDataFiles, fileStreams); objHub.Clients.Group(multipartFormDataModel.CircleKey.ToLower()).addLeave(data); var tokenService = new TokenService(); var checkToken = tokenService.GetTokenInfo(multipartFormDataModel.Token.ToString()).Result; if (checkToken == null) { response.Success = false; response.Message = "已登出"; response.State = Infrastructure.ViewModel.Base.LogState.Logout; return(Ok(response)); } response.Success = data != null ? true : false; response.Message = data != null ? "建立成功" : "建立失敗"; //單元測試結果 if (HttpContext.Current == null) { return(Ok(response)); } var pushService = new PushService(); // 檢查通過,save data var message = pushService.PushOnCreatedLeave(multipartFormDataModel.CircleKey, data.EventId, checkToken.MemberId, multipartFormDataModel.LeaveDate.ToLocalTime()).Result; var activityService = new ActivityService(); var signalrService = new SignalrService(); //發通知給老師們 var connectIdAndNoticeData = signalrService.GetConnectIdAndData(multipartFormDataModel.CircleKey, checkToken.MemberId, SignalrConnectIdType.Teachers, SignalrDataType.Notice); var learningCircleService = new LearningCircleService(); var teachers = learningCircleService.GetCircleTeacherIdListBySql(multipartFormDataModel.CircleKey.ToLower(), checkToken.MemberId); // 將通知寫入資料庫 activityService.AddMutipleNotice(multipartFormDataModel.CircleKey, teachers, data.EventId, message); SignalrClientHelper.SendNotice(connectIdAndNoticeData); foreach (var item in data.OuterKeySignInLog) { //告訴同班的有活動的開始時間被修改 SignalrClientHelper.SignIn_StatusChanged(multipartFormDataModel.CircleKey, item.Key, item.Value); } // return result; return(Ok(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); }
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)); }
public async Task <IHttpActionResult> POST() { var response = new Infrastructure.ViewModel.Base.BaseResponse <string>(); response.Success = false; response.Data = ""; await SetFileData(); multipartFormDataModel = new UploadFileModel(); if (multipartFormDataStreamProvider.FormData == null) { response.Message = "遺漏參數"; response.State = Infrastructure.ViewModel.Base.LogState.RequestDataError; return(Content(HttpStatusCode.BadRequest, response)); } //設定參數 var token = multipartFormDataStreamProvider.FormData.Get("icantoken") != null?multipartFormDataStreamProvider.FormData.GetValues("icantoken")[0] : null; var circleKey = multipartFormDataStreamProvider.FormData.Get("classid") != null?multipartFormDataStreamProvider.FormData.GetValues("classid")[0] : null; var clientkey = multipartFormDataStreamProvider.FormData.Get("clientkey") != null?multipartFormDataStreamProvider.FormData.GetValues("clientkey")[0] : null; if (token == null || circleKey == null || clientkey == null) { response.Message = "遺漏參數"; response.State = Infrastructure.ViewModel.Base.LogState.RequestDataError; return(Content(HttpStatusCode.BadRequest, response)); } multipartFormDataModel.Token = Guid.Parse(token); multipartFormDataModel.CircleKey = circleKey.ToLower(); multipartFormDataModel.ClientKey = clientkey; //新增上傳檔案活動 var objHub = GlobalHost.ConnectionManager.GetHubContext <WiicoApi.SignalRHub.WiicoHub>(); #region 的設定參數方法 /* var _info = HttpContext.Current.Request.Form; * var files = HttpContext.Current.Request.Files; * * * //文大版 參數 * if (_info["token"] != null) * { * uploadInfo.CircleKey = _info["circleKey"].ToString(); * uploadInfo.ClientKey = _info["clientKey"].ToString(); * uploadInfo.Token = Guid.Parse(_info["token"].ToString()); * } * //雲端版 參數 * if (_info["icantoken"] != null) * { * uploadInfo.Token = Guid.Parse(_info["icantoken"].ToString()); * uploadInfo.CircleKey = _info["classid"].ToString(); * uploadInfo.ClientKey = _info["clientkey"].ToString(); * }*/ //uploadInfo.Title = _info["title"].ToString(); //uploadInfo.Content = _info["content"].ToString(); #endregion var data = materialService.Insert(multipartFormDataModel.CircleKey, multipartFormDataModel.Token.ToString(), multipartFormDataFiles, fileStreams.ToArray()); var rtn = materialService.addPanelInfo(data.OuterKey, Convert.ToInt32(data.Creator), multipartFormDataModel.CircleKey); objHub.Clients.Group(multipartFormDataModel.CircleKey.ToLower()).appendActivity(rtn, multipartFormDataModel.ClientKey.ToLower()); response.Success = true; response.Message = "上傳成功"; response.Data = "上傳成功"; //單元測試結果 if (HttpContext.Current == null) { return(Ok(response)); } var signalrService = new SignalrService(); //發通知 var connectIdAndData = signalrService.GetConnectIdAndData(multipartFormDataModel.CircleKey, Convert.ToInt32(data.Creator), SignalrConnectIdType.All, SignalrDataType.Activity); SignalrClientHelper.ShowRecordListById(connectIdAndData); //發通知 // ShowRecordList(uploadInfo.CircleKey.ToLower()); // 推播 PushMaterialOnCreatedAsync(multipartFormDataModel.CircleKey.ToLower(), data.OuterKey, multipartFormDataModel.Title, Convert.ToInt32(data.Creator)); return(Ok(response)); }
public async Task <IHttpActionResult> POST() { discussionService = new DiscussionService(); var result = new Infrastructure.ViewModel.Base.BaseResponse <string>(); result.Success = false; result.Data = ""; await SetFileData(); if (multipartFormDataStreamProvider.FormData == null) { result.Message = "遺漏參數"; result.State = Infrastructure.ViewModel.Base.LogState.RequestDataError; return(Content(HttpStatusCode.BadRequest, result)); } //設定參數 var token = multipartFormDataStreamProvider.FormData.Get("ICanToken") != null?multipartFormDataStreamProvider.FormData.GetValues("ICanToken")[0] : null; var circleKey = multipartFormDataStreamProvider.FormData.Get("ClassID") != null?multipartFormDataStreamProvider.FormData.GetValues("ClassID")[0] : null; var title = multipartFormDataStreamProvider.FormData.Get("Title") != null?multipartFormDataStreamProvider.FormData.GetValues("Title")[0] : null; var content = multipartFormDataStreamProvider.FormData.Get("Content") != null?multipartFormDataStreamProvider.FormData.GetValues("Content")[0] : null; if (token == null || circleKey == null || title == null) { result.Message = "遺漏參數"; result.State = Infrastructure.ViewModel.Base.LogState.RequestDataError; return(Content(HttpStatusCode.BadRequest, result)); } multipartFormDataModel = new DiscussionCreateRequestModel(); multipartFormDataModel.Token = Guid.Parse(token); multipartFormDataModel.CircleKey = circleKey.ToLower(); multipartFormDataModel.Title = title; multipartFormDataModel.Content = content; var activityOuterKey = streamProvider.FormData.Get("activityOuterKey") != null?streamProvider.FormData.GetValues("activityOuterKey")[0] : null; var commentOuterKey = streamProvider.FormData.Get("commentOuterKey") != null?streamProvider.FormData.GetValues("commentOuterKey")[0] : null; var replyOuterKey = streamProvider.FormData.Get("replyOuterKey") != null?streamProvider.FormData.GetValues("replyOuterKey")[0] : null; var msg = streamProvider.FormData.Get("msg") != null?streamProvider.FormData.GetValues("msg")[0] : null; multipartFormDataModel.ActivityOuterKey = activityOuterKey != null ? activityOuterKey : null; multipartFormDataModel.CommentOuterKey = commentOuterKey != null ? commentOuterKey : null; multipartFormDataModel.ReplyOuterKey = replyOuterKey != null ? replyOuterKey : null; multipartFormDataModel.Msg = msg != null ? msg : null; //驗證token var checkMember = tokenService.GetTokenInfo(multipartFormDataModel.Token.ToString()).Result; if (checkMember != null) { authService = new AuthService(); discussionFileService = new DiscussionFuncFile(); cacheService = new CacheService(); learingCircleService = new LearningCircleService(); var learningCircleInfo = learingCircleService.GetCourseLearningInfo(multipartFormDataModel.CircleKey); var hasAuth = authService.CheckFunctionAuth(learningCircleInfo.Id, DiscussionFunction.Manage, checkMember.MemberId); //老師新增主題討論活動 if (hasAuth) { var newDiscussion = new Infrastructure.Entity.ActDiscussion(); //建立有附加檔案的主題討論 if (fileStreams.Count > 0) { var fileService = new FileService(); var files = fileService.UploadFiles(checkMember.MemberId, multipartFormDataFiles, fileStreams.ToArray()); newDiscussion = discussionService.Add(multipartFormDataModel.CircleKey, checkMember.MemberId, multipartFormDataModel.Title, multipartFormDataModel.Content, files.Count(), 1); //建立主題討論與檔案的關聯 var discussionFileReference = discussionFileService.DiscussionFileReference(newDiscussion.Id, files, null); } else { newDiscussion = discussionService.Add(multipartFormDataModel.CircleKey, checkMember.MemberId, multipartFormDataModel.Title, multipartFormDataModel.Content, 0, 1); } var rtn = new Infrastructure.ViewModel.ActivitysViewModel(); if (newDiscussion != null) { result.Success = true; result.Message = "成功建立主題討論活動"; activityService = new ActivityService(); //顯示回傳app資訊 rtn = activityService.SignalrResponse(multipartFormDataModel.CircleKey, newDiscussion.EventId, ModuleType.Discussion, checkMember.MemberId, true); //新增主題討論活動 var objHub = GlobalHost.ConnectionManager.GetHubContext <WiicoHub>(); objHub.Clients.Group(multipartFormDataModel.CircleKey.ToLower()).appendActivity(rtn, ""); //為了推播與發通知查詢學習圈成員 var members = cacheService.GetCircleMember(multipartFormDataModel.CircleKey); if (members == null) { return(Ok(result)); } var signalrService = new SignalrService(); //發通知 var connectIdAndData = signalrService.GetConnectIdAndData(multipartFormDataModel.CircleKey, checkMember.MemberId, SignalrConnectIdType.All, SignalrDataType.Activity); SignalrClientHelper.ShowRecordListById(connectIdAndData); //發通知 // ShowRecordList(members, discussionData.CircleKey); // 推播 PushDiscussionOnCreatedAsync(members, multipartFormDataModel.CircleKey, rtn.OuterKey, multipartFormDataModel.Title, checkMember.MemberId); } else { rtn = null; result.Success = false; result.Message = "新增失敗"; } } else { result.Success = false; result.Message = "沒有權限"; } } return(Ok(result)); }
public async Task <IHttpActionResult> Put() { discussionService = new DiscussionService(); var response = new Infrastructure.ViewModel.Base.BaseResponse <string>(); response.Success = false; response.Data = ""; await SetFileData(); if (multipartFormDataStreamProvider.FormData == null) { response.Message = "遺漏參數"; response.State = Infrastructure.ViewModel.Base.LogState.RequestDataError; return(Content(HttpStatusCode.BadRequest, response)); } //設定參數 var token = multipartFormDataStreamProvider.FormData.Get("ICanToken") != null?multipartFormDataStreamProvider.FormData.GetValues("ICanToken")[0] : null; var circleKey = multipartFormDataStreamProvider.FormData.Get("ClassID") != null?multipartFormDataStreamProvider.FormData.GetValues("ClassID")[0] : null; var title = multipartFormDataStreamProvider.FormData.Get("Title") != null?multipartFormDataStreamProvider.FormData.GetValues("Title")[0] : null; var content = multipartFormDataStreamProvider.FormData.Get("Content") != null?multipartFormDataStreamProvider.FormData.GetValues("Content")[0] : null; var activityOuterKey = multipartFormDataStreamProvider.FormData.Get("activityOuterKey") != null?multipartFormDataStreamProvider.FormData.GetValues("activityOuterKey")[0] : null; var removeFiles = multipartFormDataStreamProvider.FormData.Get("removeFiles") != null?multipartFormDataStreamProvider.FormData.GetValues("removeFiles")[0] : null; if (token == null || circleKey == null || title == null || activityOuterKey == null) { response.Message = "遺漏參數"; response.State = Infrastructure.ViewModel.Base.LogState.RequestDataError; return(Content(HttpStatusCode.BadRequest, response)); } multipartFormDataModel = new DiscussionCreateRequestModel(); multipartFormDataModel.Token = Guid.Parse(token); multipartFormDataModel.CircleKey = circleKey.ToLower(); multipartFormDataModel.Title = title; multipartFormDataModel.Content = content; var commentOuterKey = multipartFormDataStreamProvider.FormData.Get("commentOuterKey") != null?multipartFormDataStreamProvider.FormData.GetValues("commentOuterKey")[0] : null; var replyOuterKey = multipartFormDataStreamProvider.FormData.Get("replyOuterKey") != null?multipartFormDataStreamProvider.FormData.GetValues("replyOuterKey")[0] : null; var msg = multipartFormDataStreamProvider.FormData.Get("msg") != null?multipartFormDataStreamProvider.FormData.GetValues("msg")[0] : null; multipartFormDataModel.ActivityOuterKey = activityOuterKey != null ? activityOuterKey : null; multipartFormDataModel.CommentOuterKey = commentOuterKey != null ? commentOuterKey : null; multipartFormDataModel.ReplyOuterKey = replyOuterKey != null ? replyOuterKey : null; multipartFormDataModel.Msg = msg != null ? msg : null; //驗證token var checkMember = tokenService.GetTokenInfo(multipartFormDataModel.Token.ToString()).Result; if (checkMember != null && activityOuterKey != null) { authService = new AuthService(); learingCircleService = new LearningCircleService(); var learningCircleInfo = learingCircleService.GetCourseLearningInfo(multipartFormDataModel.CircleKey); var hasAuth = authService.CheckFunctionAuth(learningCircleInfo.Id, DiscussionFunction.Manage, checkMember.MemberId); //老師編輯主題討論活動 if (hasAuth) { discussionFileService = new DiscussionFuncFile(); var updateDiscussion = new Infrastructure.Entity.ActDiscussion(); if (multipartFormDataFiles.Count > 0) { var fileService = new FileService(); var uploadFileInfo = fileService.UploadFiles(checkMember.MemberId, multipartFormDataFiles, fileStreams.ToArray()); updateDiscussion = discussionService.Update(multipartFormDataModel, checkMember.MemberId, uploadFileInfo.Count); //建立主題討論與檔案的關聯 var discussionFileReference = discussionFileService.DiscussionFileReference(updateDiscussion.Id, uploadFileInfo, null); } else { updateDiscussion = discussionService.Update(multipartFormDataModel, checkMember.MemberId, 0); } if (updateDiscussion != null) { cacheService = new CacheService(); //刪除檔案 if (removeFiles != null && removeFiles != string.Empty) { var removeFilesArray = removeFiles.Split(','); //刪除主題討論與檔案的關聯 discussionFileService.DeleteDiscussionFileReference(updateDiscussion.Id, removeFilesArray); } var rtn = discussionService.GetUpdateDetailByEventId(updateDiscussion.EventId); response.Success = true; response.Message = "成功編輯主題討論活動"; objHub.Clients.Group(multipartFormDataModel.CircleKey.ToLower()).updateDetail("discussion", rtn); //為了推播與發通知查詢學習圈成員 var members = cacheService.GetCircleMember(multipartFormDataModel.CircleKey); //為了單元測試用 if (members == null) { return(Ok(response)); } // 推播 PushDiscussionOnUpdateAsync(members, multipartFormDataModel.CircleKey, updateDiscussion.EventId, multipartFormDataModel.Title, checkMember.MemberId); var signalrService = new SignalrService(); //發通知 var connectIdAndData = signalrService.GetConnectIdAndData(multipartFormDataModel.CircleKey, checkMember.MemberId, SignalrConnectIdType.All, SignalrDataType.Activity); SignalrClientHelper.ShowRecordListById(connectIdAndData); //發通知 //ShowRecordList(members, discussionData.CircleKey); } else { response.Success = false; response.Message = "編輯失敗"; } } else { response.Success = false; response.Message = "沒有權限"; } } return(Ok(response)); }