using Jaina; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using Serenity.Data; using SqlSugar; using System; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; using HT.Cloud.Code; using HT.Cloud.Service.Event; using HT.Cloud.Service.SystemSecurity; namespace HT.Cloud.Web { [HandlerLogin] public abstract class BaseController : Controller { public LogService _logService { get; set; } /// /// 演示模式过滤 /// /// /// /// public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) { Stopwatch sw = new Stopwatch(); sw.Start(); string action = context.RouteData.Values["Action"].ParseToString(); OperatorModel user = OperatorProvider.Provider.GetCurrent(); if (GlobalContext.SystemConfig.Demo) { if (context.HttpContext.Request.Method.ToUpper() == "POST") { string[] allowAction = new string[] { "LoginJson", "ExportUserJson", "CodePreviewJson" }; if (!allowAction.Select(p => p.ToUpper()).Contains(action.ToUpper())) { string Message = "演示模式,不允许操作"; context.Result = new JsonResult(new AlwaysResult { state = ResultType.error.ToString(), message = Message }); return; } } } var resultContext = await next(); sw.Stop(); } public override void OnActionExecuted(ActionExecutedContext context) { base.OnActionExecuted(context); } [HttpGet] public virtual ActionResult Index() { return View(); } [HttpGet] [HandlerAuthorize] public virtual ActionResult Form() { return View(); } [HttpGet] [HandlerAuthorize] public virtual ActionResult Details() { return View(); } protected virtual async Task Success(string message, string className = "", object keyValue = null, DbLogType? logType = null) { className = string.IsNullOrEmpty(className) ? ReflectionHelper.GetModuleName(isReplace: false, prefix: "Controller") : className; var log = await _logService.CreateLog(message, className, keyValue != null && keyValue.ToString() != "0" ? keyValue.ToString() : "", logType); await GlobalContext.GetService().PublishAsync(new BaseEventSource("Log:create", log, _logService.currentuser)); return Content(new AlwaysResult { state = ResultType.success.ToString(), message = message }.ToJson()); } protected virtual ActionResult Success(string message) { return Content(new AlwaysResult { state = ResultType.success.ToString(), message = message }.ToJson()); } protected virtual ActionResult Success(string message, T data) { return Content(new AlwaysResult { state = ResultType.success.ToString(), message = message, data = data }.ToJson()); } protected virtual ActionResult Success(int total, T data) { return Content(new AlwaysResult { state = 0, message = "", count = total, data = data }.ToJson()); } protected virtual ActionResult DTreeResult(object data) { return Content(new DTreeResult { status = new StatusInfo { code = 200, message = "操作成功" }, data = data }.ToJson()); } protected virtual async Task Error(string message, string className, object keyValue = null, DbLogType? logType = null) { className = string.IsNullOrEmpty(className) ? ReflectionHelper.GetModuleName(isReplace: false, prefix: "Controller") : className; var log = await _logService.CreateLog(message, className, keyValue != null && keyValue.ToString() != "0" ? keyValue.ToString() : "", logType, true); await GlobalContext.GetService().Ado.RollbackTranAsync(); await GlobalContext.GetService().AsTenant().RollbackTranAsync(); await GlobalContext.GetService().PublishAsync(new BaseEventSource("Log:create", log, _logService.currentuser)); return Content(new AlwaysResult { state = ResultType.error.ToString(), message = LogHelper.ExMsgFormat(message) }.ToJson()); } protected virtual ActionResult Error(string message) { return Content(new AlwaysResult { state = ResultType.error.ToString(), message = LogHelper.ExMsgFormat(message) }.ToJson()); } } }