Exemple #1
0
        /// <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);
            }
        }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
        /// <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);
        }