Files
HTCloud/HT.Cloud.Web/Controllers/BaseController.cs
2023-11-06 21:26:55 +08:00

124 lines
4.3 KiB
C#

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; }
/// <summary>
/// 演示模式过滤
/// </summary>
/// <param name="context"></param>
/// <param name="next"></param>
/// <returns></returns>
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<ActionResult> 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<IEventPublisher>().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<T>(string message, T data)
{
return Content(new AlwaysResult<T> { state = ResultType.success.ToString(), message = message, data = data }.ToJson());
}
protected virtual ActionResult Success<T>(int total, T data)
{
return Content(new AlwaysResult<T> { 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<ActionResult> 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<ISqlSugarClient>().Ado.RollbackTranAsync();
await GlobalContext.GetService<ISqlSugarClient>().AsTenant().RollbackTranAsync();
await GlobalContext.GetService<IEventPublisher>().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());
}
}
}