コード例 #1
0
 public ResModel AddOperationLog(OperationLogDto operationLogDto, UserDto operationUser)
 {
     using (var db = new ModelContext())
     {
         var operationLog = new OperationLog()
         {
             Id = Guid.NewGuid(),
             OperationUserId = operationUser.Id,
             ModuleName      = operationLogDto.ModuleName,
             OperationDesc   = operationLogDto.OperationDesc,
             OperationTime   = operationLogDto.OperationTime,
             IpAddress       = operationLogDto.IpAddress
         };
         try
         {
             db.OperationLog.Add(operationLog);
             db.SaveChanges();
         }
         catch (Exception e)
         {
             return(new ResModel()
             {
                 Msg = "添加操作日志失败", Success = false
             });
         }
         return(new ResModel()
         {
             Msg = "添加操作日志成功", Success = true
         });
     }
 }
コード例 #2
0
        public async Task <(string Message, bool?IsSuccess)> ChangeTopicType(int topicId, TopicType topicType, OperationLogDto logDto)
        {
            try
            {
                var conn = _context.GetDbConnection();
                var rows = await conn.ExecuteAsync("UPDATE phpbb_topics SET topic_type = @topicType WHERE topic_id = @topicId", new { topicType, topicId });

                if (rows == 1)
                {
                    await _operationLogService.LogModeratorTopicAction((ModeratorTopicActions)logDto.Action !, logDto.UserId, topicId);

                    return(LanguageProvider.Moderator[GetLanguage(), "TOPIC_CHANGED_SUCCESSFULLY"], true);
                }
                else
                {
                    return(string.Format(LanguageProvider.Moderator[GetLanguage(), "TOPIC_DOESNT_EXIST_FORMAT"], topicId), false);
                }
            }
            catch (Exception ex)
            {
                var id = Utils.HandleError(ex);
                return(string.Format(LanguageProvider.Errors[GetLanguage(), "AN_ERROR_OCCURRED_TRY_AGAIN_ID_FORMAT"], id), false);
            }
        }
コード例 #3
0
        public async Task <(string Message, bool?IsSuccess)> MoveTopic(int topicId, int destinationForumId, OperationLogDto logDto)
        {
            try
            {
                var conn = _context.GetDbConnection();

                var topicRows = await conn.ExecuteAsync(
                    "UPDATE phpbb_topics SET forum_id = @destinationForumId WHERE topic_id = @topicID AND EXISTS(SELECT 1 FROM phpbb_forums WHERE forum_id = @destinationForumId)",
                    new { topicId, destinationForumId }
                    );

                if (topicRows == 0)
                {
                    return(LanguageProvider.Moderator[GetLanguage(), "DESTINATION_DOESNT_EXIST"], false);
                }

                var oldPosts   = (await conn.QueryAsync <PhpbbPosts>("SELECT * FROM phpbb_posts WHERE topic_id = @topicId ORDER BY post_time DESC", new { topicId })).AsList();
                var oldForumId = oldPosts.FirstOrDefault()?.ForumId ?? 0;
                await conn.ExecuteAsync(
                    "UPDATE phpbb_posts SET forum_id = @destinationForumId WHERE topic_id = @topicId; " +
                    "UPDATE phpbb_topics_track SET forum_id = @destinationForumId WHERE topic_id = @topicId",
                    new { destinationForumId, topicId }
                    );

                foreach (var post in oldPosts)
                {
                    await _postService.CascadePostDelete(post, true, true);

                    post.ForumId = destinationForumId;
                    await _postService.CascadePostAdd(post, true);
                }
                await _operationLogService.LogModeratorTopicAction(ModeratorTopicActions.MoveTopic, logDto.UserId, topicId, $"Moved from {oldForumId} to {destinationForumId}.");

                return(LanguageProvider.Moderator[GetLanguage(), "TOPIC_CHANGED_SUCCESSFULLY"], true);
            }
            catch (Exception ex)
            {
                var id = Utils.HandleError(ex);
                return(string.Format(LanguageProvider.Errors[GetLanguage(), "AN_ERROR_OCCURRED_TRY_AGAIN_ID_FORMAT"], id), false);
            }
        }
コード例 #4
0
        public async Task <(string Message, bool?IsSuccess)> RemoveShortcut(int topicId, int forumId, OperationLogDto logDto)
        {
            var lang = GetLanguage();

            try
            {
                var conn        = _context.GetDbConnection();
                var curShortcut = await conn.QueryFirstOrDefaultAsync <PhpbbShortcuts>(
                    "SELECT * FROM phpbb_shortcuts WHERE topic_id = @topicId",
                    new { topicId });

                if (curShortcut is null)
                {
                    return(string.Format(LanguageProvider.Moderator[lang, "SHORTCUT_DOESNT_EXIST_FORMAT"], topicId, forumId), false);
                }

                if (curShortcut.ForumId != forumId)
                {
                    return(LanguageProvider.Moderator[lang, "INVALID_SHORTCUT_SELECTED"], false);
                }

                await _context.GetDbConnection().ExecuteAsync(
                    "DELETE FROM phpbb_shortcuts WHERE topic_id = @topicId AND forum_id = @forumId",
                    new { topicId, forumId });

                await _operationLogService.LogModeratorTopicAction(ModeratorTopicActions.CreateShortcut, logDto.UserId, topicId);

                return(LanguageProvider.Moderator[lang, "SHORTCUT_DELETED_SUCCESSFULLY"], true);
            }
            catch (Exception ex)
            {
                var id = Utils.HandleError(ex);
                return(string.Format(LanguageProvider.Errors[lang, "AN_ERROR_OCCURRED_TRY_AGAIN_ID_FORMAT"], id), false);
            }
        }
コード例 #5
0
        public async Task <(string Message, bool?IsSuccess)> SplitPosts(int[] postIds, int?destinationForumId, OperationLogDto logDto)
        {
            try
            {
                if ((destinationForumId ?? 0) == 0)
                {
                    return(LanguageProvider.Moderator[GetLanguage(), "INVALID_DESTINATION_FORUM"], false);
                }

                if (!(postIds?.Any() ?? false))
                {
                    return(LanguageProvider.Moderator[GetLanguage(), "ATLEAST_ONE_POST_REQUIRED"], false);
                }

                var conn = _context.GetDbConnection();

                var posts = (await conn.QueryAsync <PhpbbPosts>("SELECT * FROM phpbb_posts WHERE post_id IN @postIds ORDER BY post_time", new { postIds })).AsList();

                if (posts.Count != postIds.Length)
                {
                    return(LanguageProvider.Moderator[GetLanguage(), "ATLEAST_ONE_POST_MOVED_OR_DELETED"], false);
                }

                var curTopic = await conn.QueryFirstOrDefaultAsync <PhpbbTopics>(
                    "INSERT INTO phpbb_topics (forum_id, topic_title, topic_time) VALUES (@forumId, @title, @time); " +
                    "SELECT * FROM phpbb_topics WHERE topic_id = LAST_INSERT_ID();",
                    new { forumId = destinationForumId !.Value, title = posts.First().PostSubject, time = posts.First().PostTime }
                    );

                var oldTopicId = posts.First().TopicId;

                await conn.ExecuteAsync("UPDATE phpbb_posts SET topic_id = @topicId, forum_id = @forumId WHERE post_id IN @postIds", new { curTopic.TopicId, curTopic.ForumId, postIds });

                foreach (var post in posts)
                {
                    await _postService.CascadePostDelete(post, false, true);

                    post.TopicId = curTopic.TopicId;
                    post.ForumId = curTopic.ForumId;
                    await _postService.CascadePostAdd(post, false);

                    await _operationLogService.LogModeratorPostAction(ModeratorPostActions.SplitSelectedPosts, logDto.UserId, post.PostId, $"Split from topic {oldTopicId} as new topic in forum {destinationForumId}");
                }

                return(LanguageProvider.Moderator[GetLanguage(), "POSTS_SPLIT_SUCCESSFULLY"], true);
            }
コード例 #6
0
 public ResModel AddOperationLog(OperationLogDto operationLogDto, UserDto operationUser)
 {
     return(_operationLogRepository.AddOperationLog(operationLogDto, operationUser));
 }
コード例 #7
0
        public async Task <(string Message, bool?IsSuccess)> DeleteTopic(int topicId, OperationLogDto logDto)
        {
            try
            {
                var conn  = _context.GetDbConnection();
                var posts = (await conn.QueryAsync <PhpbbPosts>("SELECT * FROM phpbb_posts WHERE topic_id = @topicId", new { topicId })).AsList();
                if (!posts.Any())
                {
                    return(string.Format(LanguageProvider.Moderator[GetLanguage(), "TOPIC_DOESNT_EXIST_FORMAT"], topicId), false);
                }

                var topic = await conn.QueryFirstOrDefaultAsync <PhpbbTopics>("SELECT * FROM phpbb_topics WHERE topic_id = @topicId", new { topicId });

                if (topic != null)
                {
                    var dto = new TopicDto
                    {
                        ForumId               = topic.ForumId,
                        TopicId               = topic.TopicId,
                        TopicTitle            = topic.TopicTitle,
                        TopicStatus           = topic.TopicStatus,
                        TopicType             = topic.TopicType,
                        TopicLastPosterColour = topic.TopicLastPosterColour,
                        TopicLastPosterId     = topic.TopicLastPosterId,
                        TopicLastPosterName   = topic.TopicLastPosterName,
                        TopicLastPostId       = topic.TopicLastPostId,
                        TopicLastPostTime     = topic.TopicLastPostTime,
                        Poll = await _postService.GetPoll(topic)
                    };
                    await conn.ExecuteAsync(
                        "INSERT INTO phpbb_recycle_bin(type, id, content, delete_time, delete_user) VALUES (@type, @id, @content, @now, @userId)",
                        new
                    {
                        type    = RecycleBinItemType.Topic,
                        id      = topic.TopicId,
                        content = await Utils.CompressObject(dto),
                        now     = DateTime.UtcNow.ToUnixTimestamp(),
                        logDto.UserId
                    }
                        );

                    await conn.ExecuteAsync(
                        "DELETE FROM phpbb_topics WHERE topic_id = @topicId; " +
                        "DELETE FROM phpbb_poll_options WHERE topic_id = @topicId",
                        new { topicId }
                        );
                }

                await DeletePostsCore(posts, logDto, false);

                await _operationLogService.LogModeratorTopicAction(ModeratorTopicActions.DeleteTopic, logDto.UserId, topicId);

                return(LanguageProvider.Moderator[GetLanguage(), "TOPIC_DELETED_SUCCESSFULLY"], true);
            }
            catch (Exception ex)
            {
                var id = Utils.HandleError(ex);
                return(string.Format(LanguageProvider.Errors[GetLanguage(), "AN_ERROR_OCCURRED_TRY_AGAIN_ID_FORMAT"], id), false);
            }
        }
コード例 #8
0
        protected void PreInvoke(object instance, object[] inputs)
        {
            switch (m_InteType)
            {
            case EnumInterception.None:
                break;

            case EnumInterception.LogOperation:
            {
                var tempList = inputs.ToList();
                if (m_IgnoreType == EnumIgnoreInterception.Password)
                {
                    try
                    {
                        switch (m_FunctionName.ToLower())
                        {
                        case "consologin":
                        case "login":
                            tempList.RemoveAt(2);
                            break;

                        case "buyinsurancebycashbycarrier":
                            tempList.RemoveAt(1);
                            break;

                        case "buyinsurancebycashorcredit":
                            tempList.RemoveAt(3);
                            break;

                        case "payorderbycashbagaccount":
                            tempList.RemoveAt(1);
                            break;

                        case "payorderbycreditaccount":
                            tempList.RemoveAt(1);
                            break;

                        case "saleorderpaybycashbagaccount":
                            tempList.RemoveAt(1);
                            break;

                        case "saleorderpaybycreditaccount":
                            tempList.RemoveAt(1);
                            break;

                        case "changepassword":
                            tempList.RemoveAt(1);
                            tempList.RemoveAt(2);
                            break;

                        case "buysmsbyaccount":
                            tempList.RemoveAt(3);
                            break;

                        case "alipaybind":
                            tempList.RemoveAt(1);
                            break;

                        case "alipayunbind":
                            tempList.RemoveAt(0);
                            break;

                        case "alipaysignrecharge":
                            tempList.RemoveAt(1);
                            break;

                        case "alipaysignrepay":
                            tempList.RemoveAt(1);
                            break;

                        case "payorderbyquikalipay":
                            tempList.RemoveAt(1);
                            break;
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.WriteLog(LogType.ERROR, ex.Message);
                    }
                }


                var log = new OperationLogDto
                {
                    CreateTime          = DateTime.Now,
                    FunctionDescription = m_FunctionDescription,
                    FunctionName        = m_FunctionName,
                    ModuleFullName      = instance.ToString(),
                    RequestParams       = tempList.ToJson(),
                    OperatorAcount      = AuthManager.GetCurrentUser() == null
                                ? ""
                                : AuthManager.GetCurrentUser().OperatorAccount,
                    BusinessCode = AuthManager.GetCurrentUser() == null
                                ? ""
                                : AuthManager.GetCurrentUser().Code,
                    BusinessName = AuthManager.GetCurrentUser() == null
                          ? ""
                          : AuthManager.GetCurrentUser().BusinessmanName,
                };
                Task.Factory.StartNew(() => QueueLogsManager.Enqueue(log));

                //var sb = new StringBuilder();
                //sb.Append("\n请求时间:" + DateTime.Now);
                //sb.Append("\n服务名称:" + instance);
                //sb.Append("\n函数描述:" + m_FunctionDescription);
                //sb.Append("\n函数名称:" + m_FunctionName);
                //sb.Append("\n请求参数:" + tempList.ToJson());
                //if (AuthManager.GetCurrentUser() != null)
                //{
                //    sb.Append("\n操作人:" + AuthManager.GetCurrentUser().Code);
                //}

                //Console.WriteLine(sb.ToString());
            }
            break;

            case EnumInterception.LogException:
                break;
            }
        }
コード例 #9
0
ファイル: QueueLogsManager.cs プロジェクト: goldmon/BPiaoBao
 /// <summary>
 /// 日志入队列
 /// </summary>
 /// <param name="log"></param>
 public static void Enqueue(OperationLogDto log)
 {
     _queueExt.Enqueue(log);
 }
コード例 #10
0
        /// <param name="cancellationToken">A cancellation token that can be used by other objects or threads to receive notice of cancellation.</param>
        /// <returns>Success</returns>
        /// <exception cref="ApiException">A server side error occurred.</exception>
        public async System.Threading.Tasks.Task <OperationLogDto> UpdateAsync(OperationLogDto input, System.Threading.CancellationToken cancellationToken)
        {
            var urlBuilder_ = new System.Text.StringBuilder();

            urlBuilder_.Append(BaseUrl != null ? BaseUrl.TrimEnd('/') : "").Append("/api/services/app/OperationLog/Update");

            var client_ = _httpClient;

            try
            {
                using (var request_ = new System.Net.Http.HttpRequestMessage())
                {
                    var content_ = new System.Net.Http.StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(input, _settings.Value));
                    content_.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json");
                    request_.Content             = content_;
                    request_.Method = new System.Net.Http.HttpMethod("PUT");
                    request_.Headers.Accept.Add(System.Net.Http.Headers.MediaTypeWithQualityHeaderValue.Parse("application/json"));

                    PrepareRequest(client_, request_, urlBuilder_);
                    var url_ = urlBuilder_.ToString();
                    request_.RequestUri = new System.Uri(url_, System.UriKind.RelativeOrAbsolute);
                    PrepareRequest(client_, request_, url_);

                    var response_ = await client_.SendAsync(request_, System.Net.Http.HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);

                    try
                    {
                        var headers_ = System.Linq.Enumerable.ToDictionary(response_.Headers, h_ => h_.Key, h_ => h_.Value);
                        if (response_.Content != null && response_.Content.Headers != null)
                        {
                            foreach (var item_ in response_.Content.Headers)
                            {
                                headers_[item_.Key] = item_.Value;
                            }
                        }

                        ProcessResponse(client_, response_);

                        var status_ = ((int)response_.StatusCode).ToString();
                        if (status_ == "200")
                        {
                            var objectResponse_ = await ReadObjectResponseAsync <OperationLogDto>(response_, headers_).ConfigureAwait(false);

                            return(objectResponse_.Object);
                        }
                        else
                        if (status_ != "200" && status_ != "204")
                        {
                            var responseData_ = response_.Content == null ? null : await response_.Content.ReadAsStringAsync().ConfigureAwait(false);

                            throw new ApiException("The HTTP status code of the response was not expected (" + (int)response_.StatusCode + ").", (int)response_.StatusCode, responseData_, headers_, null);
                        }

                        return(default(OperationLogDto));
                    }
                    finally
                    {
                        if (response_ != null)
                        {
                            response_.Dispose();
                        }
                    }
                }
            }
            finally
            {
            }
        }
コード例 #11
0
 /// <returns>Success</returns>
 /// <exception cref="ApiException">A server side error occurred.</exception>
 public System.Threading.Tasks.Task <OperationLogDto> UpdateAsync(OperationLogDto input)
 {
     return(UpdateAsync(input, System.Threading.CancellationToken.None));
 }
コード例 #12
0
        public void Add(OperationLogDto log)
        {
            var m = Mapper.Map <OperationLogDto, OperationLog>(log);

            _operationLogDomainService.AddLog(m);
        }