/// <summary>
        /// 建立新的留言資訊
        /// </summary>
        /// <returns></returns>
        public async Task <IHttpActionResult> Post()
        {
            var response = new Infrastructure.ViewModel.Base.ResultBaseModel <DiscussionSendMsg>();

            var actModuleMessageService = new MessageService();
            var discussionservice       = new DiscussionService();

            #region 將request值塞入model中

            await SetFileData();

            if (multipartFormDataStreamProvider.FormData == null)
            {
                response.Message = "遺漏參數";
                response.State   = Infrastructure.ViewModel.Base.LogState.RequestDataError;
                return(Content(HttpStatusCode.BadRequest, response));
            }

            //設定參數
            var token = multipartFormDataStreamProvider.FormData.Get("iCanToken") != null?multipartFormDataStreamProvider.FormData.GetValues("iCanToken")[0] : null;

            var circleKey = multipartFormDataStreamProvider.FormData.Get("classId") != null?multipartFormDataStreamProvider.FormData.GetValues("classId")[0] : null;

            var activityOuterKey = multipartFormDataStreamProvider.FormData.Get("activityOuterKey") != null?multipartFormDataStreamProvider.FormData.GetValues("activityOuterKey")[0] : null;

            var msg = multipartFormDataStreamProvider.FormData.Get("msg") != null?multipartFormDataStreamProvider.FormData.GetValues("msg")[0] : null;

            var commentOuterKey = multipartFormDataStreamProvider.FormData.Get("commentOuterKey") != null?multipartFormDataStreamProvider.FormData.GetValues("commentOuterKey")[0] : null;

            var replyOuterKey = multipartFormDataStreamProvider.FormData.Get("replyOuterKey") != null?multipartFormDataStreamProvider.FormData.GetValues("replyOuterKey")[0] : null;

            token = (token == null && multipartFormDataStreamProvider.FormData.Get("token") != null) ?
                    multipartFormDataStreamProvider.FormData.GetValues("token")[0] : token;

            circleKey = (circleKey == null && multipartFormDataStreamProvider.FormData.Get("circleKey") != null) ?
                        multipartFormDataStreamProvider.FormData.GetValues("circleKey")[0] : circleKey;

            multipartFormDataModel = new DiscussionSendMsgRequestModel()
            {
                ActivityOuterKey = activityOuterKey,
                CircleKey        = circleKey,
                CommentOuterKey  = commentOuterKey,
                Msg           = msg,
                ReplyOuterKey = replyOuterKey,
                Token         = Guid.Parse(token)
            };

            #endregion

            memberService = new MemberService();
            //驗證token
            var checkMember = memberService.TokenToMember(multipartFormDataModel.Token).Result;
            if (checkMember != null)
            {
                //查看主題討論是否存在
                var discussionDBData = discussionservice.GetDBDiscussionInfo(multipartFormDataModel.ActivityOuterKey);
                if (discussionDBData != null)
                {
                    discussionMsgService = new DiscussionFuncMsg();
                    var newMsg = discussionMsgService.AddMessage(multipartFormDataModel.CircleKey, multipartFormDataModel.Msg, checkMember.Id, multipartFormDataModel.ActivityOuterKey, multipartFormDataModel.CommentOuterKey, multipartFormDataModel.ReplyOuterKey);
                    //新增成功
                    if (newMsg != null)
                    {
                        //是否有附加檔案
                        if (fileStreams != null && fileStreams.Count > 0)
                        {
                            var fileService           = new FileService();
                            var discussionFileService = new DiscussionFuncFile();
                            //  var files = await MutipartFileProxy(checkMember);
                            var uploadFileInfo = fileService.UploadFiles(checkMember.Id, multipartFormDataFiles, fileStreams.ToArray());
                            newMsg.Comment.Photos = uploadFileInfo;
                            //建立主題討論與檔案的關聯
                            var msgFileReference = discussionFileService.DiscussionFileReference(discussionDBData.Id, uploadFileInfo, newMsg.Id);
                        }
                        response.Success = true;
                        response.Message = "成功建立留言";
                        objHub           = GlobalHost.ConnectionManager.GetHubContext <SignalRHub.WiicoHub>();
                        objHub.Clients.Group(multipartFormDataModel.CircleKey.ToLower()).appendComment(newMsg);
                        response.Data = new DiscussionSendMsg[1] {
                            newMsg
                        };
                        //推播給回覆者訊息
                        if (newMsg.Comment.Parent.HasValue)
                        {
                            //查出被回覆訊息資訊
                            var replyMsgInfo = actModuleMessageService.GetMsgDBInfoByOuterKey(newMsg.CommentOuterkey);
                            memberService = new MemberService();
                            //查出被回覆者資訊
                            // var replyMemberInfo = memberService.GetMemberInfo(replyMsgInfo.CreateUser.Value);
                            var replyMemberInfo = memberService.UserIdToAccount(replyMsgInfo.CreateUser.Value);
                            if (newMsg.Comment.ReplyOuterKey == null)
                            {
                                //推播給被回覆者
                                PushMsgReplyAsync(multipartFormDataModel.CircleKey, newMsg.Comment.EventId, discussionDBData.Name, checkMember, replyMemberInfo, false);
                            }
                            else
                            {
                                PushMsgReplyAsync(multipartFormDataModel.CircleKey, newMsg.Comment.EventId, discussionDBData.Name, checkMember, replyMemberInfo, true);
                            }
                        }
                        //推播給學習圈內所有人
                        else
                        {
                            PushDiscussionSendMsgAsync(multipartFormDataModel.CircleKey, newMsg.Comment.EventId, discussionDBData.Name, checkMember);
                        }
                    }
                    else
                    {
                        response.Success = false;
                        response.Message = "建立留言失敗";
                        response.State   = Infrastructure.ViewModel.Base.LogState.Error;
                    }
                }
                else
                {
                    response.Success = false;
                    response.Message = "主題討論不存在";
                    response.State   = Infrastructure.ViewModel.Base.LogState.Error;
                }
            }
            else
            {
                response.Success = false;
                response.Message = "驗證身分失敗";
                response.State   = Infrastructure.ViewModel.Base.LogState.Logout;
            }
            return(Ok(response));
        }
Ejemplo n.º 2
0
        public async Task <IHttpActionResult> POST()
        {
            discussionService = new DiscussionService();
            var result = new Infrastructure.ViewModel.Base.BaseResponse <string>();

            result.Success = false;
            result.Data    = "";
            await SetFileData();

            if (multipartFormDataStreamProvider.FormData == null)
            {
                result.Message = "遺漏參數";
                result.State   = Infrastructure.ViewModel.Base.LogState.RequestDataError;
                return(Content(HttpStatusCode.BadRequest, result));
            }
            //設定參數
            var token = multipartFormDataStreamProvider.FormData.Get("ICanToken") != null?multipartFormDataStreamProvider.FormData.GetValues("ICanToken")[0] : null;

            var circleKey = multipartFormDataStreamProvider.FormData.Get("ClassID") != null?multipartFormDataStreamProvider.FormData.GetValues("ClassID")[0] : null;

            var title = multipartFormDataStreamProvider.FormData.Get("Title") != null?multipartFormDataStreamProvider.FormData.GetValues("Title")[0] : null;

            var content = multipartFormDataStreamProvider.FormData.Get("Content") != null?multipartFormDataStreamProvider.FormData.GetValues("Content")[0] : null;

            if (token == null || circleKey == null || title == null)
            {
                result.Message = "遺漏參數";
                result.State   = Infrastructure.ViewModel.Base.LogState.RequestDataError;
                return(Content(HttpStatusCode.BadRequest, result));
            }
            multipartFormDataModel           = new DiscussionCreateRequestModel();
            multipartFormDataModel.Token     = Guid.Parse(token);
            multipartFormDataModel.CircleKey = circleKey.ToLower();
            multipartFormDataModel.Title     = title;
            multipartFormDataModel.Content   = content;
            var activityOuterKey = streamProvider.FormData.Get("activityOuterKey") != null?streamProvider.FormData.GetValues("activityOuterKey")[0] : null;

            var commentOuterKey = streamProvider.FormData.Get("commentOuterKey") != null?streamProvider.FormData.GetValues("commentOuterKey")[0] : null;

            var replyOuterKey = streamProvider.FormData.Get("replyOuterKey") != null?streamProvider.FormData.GetValues("replyOuterKey")[0] : null;

            var msg = streamProvider.FormData.Get("msg") != null?streamProvider.FormData.GetValues("msg")[0] : null;

            multipartFormDataModel.ActivityOuterKey = activityOuterKey != null ? activityOuterKey : null;
            multipartFormDataModel.CommentOuterKey  = commentOuterKey != null ? commentOuterKey : null;
            multipartFormDataModel.ReplyOuterKey    = replyOuterKey != null ? replyOuterKey : null;
            multipartFormDataModel.Msg = msg != null ? msg : null;

            //驗證token
            var checkMember = tokenService.GetTokenInfo(multipartFormDataModel.Token.ToString()).Result;

            if (checkMember != null)
            {
                authService           = new AuthService();
                discussionFileService = new DiscussionFuncFile();
                cacheService          = new CacheService();
                learingCircleService  = new LearningCircleService();
                var learningCircleInfo = learingCircleService.GetCourseLearningInfo(multipartFormDataModel.CircleKey);
                var hasAuth            = authService.CheckFunctionAuth(learningCircleInfo.Id, DiscussionFunction.Manage, checkMember.MemberId);
                //老師新增主題討論活動
                if (hasAuth)
                {
                    var newDiscussion = new Infrastructure.Entity.ActDiscussion();
                    //建立有附加檔案的主題討論
                    if (fileStreams.Count > 0)
                    {
                        var fileService = new FileService();
                        var files       = fileService.UploadFiles(checkMember.MemberId, multipartFormDataFiles, fileStreams.ToArray());
                        newDiscussion = discussionService.Add(multipartFormDataModel.CircleKey, checkMember.MemberId, multipartFormDataModel.Title, multipartFormDataModel.Content, files.Count(), 1);
                        //建立主題討論與檔案的關聯
                        var discussionFileReference = discussionFileService.DiscussionFileReference(newDiscussion.Id, files, null);
                    }
                    else
                    {
                        newDiscussion = discussionService.Add(multipartFormDataModel.CircleKey, checkMember.MemberId, multipartFormDataModel.Title, multipartFormDataModel.Content, 0, 1);
                    }
                    var rtn = new Infrastructure.ViewModel.ActivitysViewModel();
                    if (newDiscussion != null)
                    {
                        result.Success  = true;
                        result.Message  = "成功建立主題討論活動";
                        activityService = new ActivityService();
                        //顯示回傳app資訊
                        rtn = activityService.SignalrResponse(multipartFormDataModel.CircleKey, newDiscussion.EventId, ModuleType.Discussion, checkMember.MemberId, true);
                        //新增主題討論活動
                        var objHub = GlobalHost.ConnectionManager.GetHubContext <WiicoHub>();
                        objHub.Clients.Group(multipartFormDataModel.CircleKey.ToLower()).appendActivity(rtn, "");
                        //為了推播與發通知查詢學習圈成員
                        var members = cacheService.GetCircleMember(multipartFormDataModel.CircleKey);
                        if (members == null)
                        {
                            return(Ok(result));
                        }
                        var signalrService = new SignalrService();
                        //發通知
                        var connectIdAndData = signalrService.GetConnectIdAndData(multipartFormDataModel.CircleKey, checkMember.MemberId, SignalrConnectIdType.All, SignalrDataType.Activity);
                        SignalrClientHelper.ShowRecordListById(connectIdAndData);
                        //發通知
                        //  ShowRecordList(members, discussionData.CircleKey);
                        // 推播
                        PushDiscussionOnCreatedAsync(members, multipartFormDataModel.CircleKey, rtn.OuterKey, multipartFormDataModel.Title, checkMember.MemberId);
                    }
                    else
                    {
                        rtn            = null;
                        result.Success = false;
                        result.Message = "新增失敗";
                    }
                }
                else
                {
                    result.Success = false;
                    result.Message = "沒有權限";
                }
            }
            return(Ok(result));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 建立新的留言資訊
        /// </summary>
        /// <returns></returns>
        public IHttpActionResult Post()
        {
            var result                  = new Infrastructure.ViewModel.Base.ResultBaseModel <DiscussionSendMsg>();
            var requestFormData         = HttpContext.Current.Request.Form;
            var actModuleMessageService = new MessageService();
            var discussionservice       = new DiscussionService();

            #region 將request值塞入model中
            var msgData = new Infrastructure.ViewModel.ActivityFunction.Discussion.DiscussionSendMsgRequestModel()
            {
                Token            = Guid.Parse(requestFormData["token"].ToString()),
                CircleKey        = requestFormData["circleKey"].ToString(),
                ActivityOuterKey = requestFormData["activityOuterKey"].ToString()
            };

            if (requestFormData["commentOuterKey"] != null)
            {
                msgData.CommentOuterKey = requestFormData["commentOuterKey"].ToString();
            }

            if (requestFormData["replyOuterKey"] != null)
            {
                msgData.ReplyOuterKey = requestFormData["replyOuterKey"].ToString();
            }

            if (requestFormData["msg"] != null)
            {
                msgData.Msg = HttpUtility.UrlDecode(requestFormData["msg"].ToString());
            }
            #endregion
            var msgFiles = HttpContext.Current.Request.Files;
            memberService = new MemberService();
            //驗證token
            var checkMember = memberService.TokenToMember(msgData.Token).Result;
            if (checkMember != null)
            {
                //查看主題討論是否存在
                var discussionDBData = discussionservice.GetDBDiscussionInfo(msgData.ActivityOuterKey);
                if (discussionDBData != null)
                {
                    discussionMsgService = new DiscussionFuncMsg();
                    var newMsg = discussionMsgService.AddMessage(msgData.CircleKey, msgData.Msg, checkMember.Id, msgData.ActivityOuterKey, msgData.CommentOuterKey, msgData.ReplyOuterKey);
                    //新增成功
                    if (newMsg != null)
                    {
                        //是否有附加檔案
                        if (msgFiles.Count > 0)
                        {
                            var fileService           = new FileService();
                            var discussionFileService = new DiscussionFuncFile();
                            //  var files = await MutipartFileProxy(checkMember);
                            var uploadFileInfo = fileService.UploadFile(checkMember.Id, msgFiles);
                            newMsg.Comment.Photos = uploadFileInfo;
                            //建立主題討論與檔案的關聯
                            var msgFileReference = discussionFileService.DiscussionFileReference(discussionDBData.Id, uploadFileInfo, newMsg.Id);
                        }
                        result.Success = true;
                        result.Message = "成功建立留言";
                        objHub         = GlobalHost.ConnectionManager.GetHubContext <WiicoApi.SignalRHub.WiicoHub>();
                        objHub.Clients.Group(msgData.CircleKey.ToLower()).appendComment(newMsg);
                        result.Data = new Infrastructure.ViewModel.ActivityFunction.Discussion.DiscussionSendMsg[1] {
                            newMsg
                        };
                        //推播給回覆者訊息
                        if (newMsg.Comment.Parent.HasValue)
                        {
                            //查出被回覆訊息資訊
                            var replyMsgInfo = actModuleMessageService.GetMsgDBInfoByOuterKey(newMsg.CommentOuterkey);
                            memberService = new MemberService();
                            //查出被回覆者資訊
                            var replyMemberInfo = memberService.UserIdToAccount(replyMsgInfo.CreateUser.Value);

                            if (newMsg.Comment.ReplyOuterKey == null)
                            {
                                //推播給被回覆者
                                PushMsgReplyAsync(msgData.CircleKey, newMsg.Comment.EventId, discussionDBData.Name, checkMember, replyMemberInfo, false);
                            }
                            else
                            {
                                PushMsgReplyAsync(msgData.CircleKey, newMsg.Comment.EventId, discussionDBData.Name, checkMember, replyMemberInfo, true);
                            }
                        }
                        //推播給學習圈內所有人
                        else
                        {
                            PushDiscussionSendMsgAsync(msgData.CircleKey, newMsg.Comment.EventId, discussionDBData.Name, checkMember);
                        }
                    }
                    else
                    {
                        result.Success = false;
                        result.Message = "建立留言失敗";
                    }
                }
                else
                {
                    result.Success = false;
                    result.Message = "主題討論不存在";
                }
            }
            else
            {
                result.Success = false;
                result.Message = "驗證身分失敗";
            }
            return(Ok(result));
        }
Ejemplo n.º 4
0
        public async Task <IHttpActionResult> Put()
        {
            discussionService = new DiscussionService();
            var response = new Infrastructure.ViewModel.Base.BaseResponse <string>();

            response.Success = false;
            response.Data    = "";
            await SetFileData();

            if (multipartFormDataStreamProvider.FormData == null)
            {
                response.Message = "遺漏參數";
                response.State   = Infrastructure.ViewModel.Base.LogState.RequestDataError;
                return(Content(HttpStatusCode.BadRequest, response));
            }

            //設定參數
            var token = multipartFormDataStreamProvider.FormData.Get("ICanToken") != null?multipartFormDataStreamProvider.FormData.GetValues("ICanToken")[0] : null;

            var circleKey = multipartFormDataStreamProvider.FormData.Get("ClassID") != null?multipartFormDataStreamProvider.FormData.GetValues("ClassID")[0] : null;

            var title = multipartFormDataStreamProvider.FormData.Get("Title") != null?multipartFormDataStreamProvider.FormData.GetValues("Title")[0] : null;

            var content = multipartFormDataStreamProvider.FormData.Get("Content") != null?multipartFormDataStreamProvider.FormData.GetValues("Content")[0] : null;

            var activityOuterKey = multipartFormDataStreamProvider.FormData.Get("activityOuterKey") != null?multipartFormDataStreamProvider.FormData.GetValues("activityOuterKey")[0] : null;

            var removeFiles = multipartFormDataStreamProvider.FormData.Get("removeFiles") != null?multipartFormDataStreamProvider.FormData.GetValues("removeFiles")[0] : null;

            if (token == null || circleKey == null || title == null || activityOuterKey == null)
            {
                response.Message = "遺漏參數";
                response.State   = Infrastructure.ViewModel.Base.LogState.RequestDataError;
                return(Content(HttpStatusCode.BadRequest, response));
            }
            multipartFormDataModel           = new  DiscussionCreateRequestModel();
            multipartFormDataModel.Token     = Guid.Parse(token);
            multipartFormDataModel.CircleKey = circleKey.ToLower();
            multipartFormDataModel.Title     = title;
            multipartFormDataModel.Content   = content;

            var commentOuterKey = multipartFormDataStreamProvider.FormData.Get("commentOuterKey") != null?multipartFormDataStreamProvider.FormData.GetValues("commentOuterKey")[0] : null;

            var replyOuterKey = multipartFormDataStreamProvider.FormData.Get("replyOuterKey") != null?multipartFormDataStreamProvider.FormData.GetValues("replyOuterKey")[0] : null;

            var msg = multipartFormDataStreamProvider.FormData.Get("msg") != null?multipartFormDataStreamProvider.FormData.GetValues("msg")[0] : null;

            multipartFormDataModel.ActivityOuterKey = activityOuterKey != null ? activityOuterKey : null;
            multipartFormDataModel.CommentOuterKey  = commentOuterKey != null ? commentOuterKey : null;
            multipartFormDataModel.ReplyOuterKey    = replyOuterKey != null ? replyOuterKey : null;
            multipartFormDataModel.Msg = msg != null ? msg : null;

            //驗證token
            var checkMember = tokenService.GetTokenInfo(multipartFormDataModel.Token.ToString()).Result;

            if (checkMember != null && activityOuterKey != null)
            {
                authService          = new AuthService();
                learingCircleService = new LearningCircleService();
                var learningCircleInfo = learingCircleService.GetCourseLearningInfo(multipartFormDataModel.CircleKey);
                var hasAuth            = authService.CheckFunctionAuth(learningCircleInfo.Id, DiscussionFunction.Manage, checkMember.MemberId);

                //老師編輯主題討論活動
                if (hasAuth)
                {
                    discussionFileService = new DiscussionFuncFile();
                    var updateDiscussion = new Infrastructure.Entity.ActDiscussion();
                    if (multipartFormDataFiles.Count > 0)
                    {
                        var fileService    = new FileService();
                        var uploadFileInfo = fileService.UploadFiles(checkMember.MemberId, multipartFormDataFiles, fileStreams.ToArray());
                        updateDiscussion = discussionService.Update(multipartFormDataModel, checkMember.MemberId, uploadFileInfo.Count);
                        //建立主題討論與檔案的關聯
                        var discussionFileReference = discussionFileService.DiscussionFileReference(updateDiscussion.Id, uploadFileInfo, null);
                    }
                    else
                    {
                        updateDiscussion = discussionService.Update(multipartFormDataModel, checkMember.MemberId, 0);
                    }

                    if (updateDiscussion != null)
                    {
                        cacheService = new CacheService();
                        //刪除檔案
                        if (removeFiles != null && removeFiles != string.Empty)
                        {
                            var removeFilesArray = removeFiles.Split(',');
                            //刪除主題討論與檔案的關聯
                            discussionFileService.DeleteDiscussionFileReference(updateDiscussion.Id, removeFilesArray);
                        }
                        var rtn = discussionService.GetUpdateDetailByEventId(updateDiscussion.EventId);
                        response.Success = true;
                        response.Message = "成功編輯主題討論活動";
                        objHub.Clients.Group(multipartFormDataModel.CircleKey.ToLower()).updateDetail("discussion", rtn);
                        //為了推播與發通知查詢學習圈成員
                        var members = cacheService.GetCircleMember(multipartFormDataModel.CircleKey);
                        //為了單元測試用
                        if (members == null)
                        {
                            return(Ok(response));
                        }
                        // 推播
                        PushDiscussionOnUpdateAsync(members, multipartFormDataModel.CircleKey, updateDiscussion.EventId, multipartFormDataModel.Title, checkMember.MemberId);

                        var signalrService = new SignalrService();
                        //發通知
                        var connectIdAndData = signalrService.GetConnectIdAndData(multipartFormDataModel.CircleKey, checkMember.MemberId, SignalrConnectIdType.All, SignalrDataType.Activity);
                        SignalrClientHelper.ShowRecordListById(connectIdAndData);
                        //發通知
                        //ShowRecordList(members, discussionData.CircleKey);
                    }
                    else
                    {
                        response.Success = false;
                        response.Message = "編輯失敗";
                    }
                }
                else
                {
                    response.Success = false;
                    response.Message = "沒有權限";
                }
            }
            return(Ok(response));
        }