Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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));
        }
Beispiel #3
0
        /// <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);
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        /// <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);
        }
Beispiel #6
0
        /// <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);
            }
        }
Beispiel #9
0
        /// <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);
            }
        }
Beispiel #10
0
        /// <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);
        }
Beispiel #12
0
        /// <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);
        }
Beispiel #13
0
        /// <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);
        }
Beispiel #14
0
        /// <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);
        }
Beispiel #15
0
        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));
        }
Beispiel #16
0
        /// <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;
            }
        }
Beispiel #17
0
        /// <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);
        }
Beispiel #18
0
        /// <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);
            }
        }
Beispiel #19
0
        /// <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);
            }
        }
Beispiel #20
0
        /// <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);
            }
        }
Beispiel #21
0
        /// <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);
            }
        }
Beispiel #22
0
        /// <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));
        }
Beispiel #23
0
        /// <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);
        }
Beispiel #24
0
        /// <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);
        }
Beispiel #25
0
        /// <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);
        }
Beispiel #26
0
        /// <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));
        }
Beispiel #27
0
        /// <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);
        }
Beispiel #28
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);
        }