using Common;
using Hangfire;
using Masuit.MyBlogs.Core.Extensions;
using Masuit.MyBlogs.Core.Infrastructure.Services.Interface;
using Masuit.MyBlogs.Core.Models.DTO;
using Masuit.MyBlogs.Core.Models.Entity;
using Masuit.MyBlogs.Core.Models.Enum;
using Masuit.MyBlogs.Core.Models.RequestModel;
using Masuit.MyBlogs.Core.Models.ViewModel;
using Masuit.Tools.Core.Net;
using Masuit.Tools.Systems;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
namespace Masuit.MyBlogs.Core.Controllers
{
///
/// bug反馈
///
public class BugController : BaseController
{
///
/// IssueService
///
public IIssueService IssueService { get; set; }
///
/// MessageService
///
public IInternalMessageService MessageService { get; set; }
private readonly IHostingEnvironment _hostingEnvironment;
///
/// bug反馈
///
///
///
///
public BugController(IIssueService issueService, IInternalMessageService messageService, IHostingEnvironment hostingEnvironment)
{
IssueService = issueService;
MessageService = messageService;
_hostingEnvironment = hostingEnvironment;
}
///
/// bug首页
///
///
[Route("bug")]
public ActionResult Index()
{
return View();
}
///
/// 分页数据
///
///
///
[HttpPost]
public ActionResult PageData([FromBody]PageFilter filter)
{
UserInfoOutputDto user = HttpContext.Session.GetByRedis(SessionKey.UserInfo) ?? new UserInfoOutputDto();
List list;
int total;
if (string.IsNullOrEmpty(filter.Kw))
{
list = IssueService.LoadPageEntitiesFromL2CacheNoTracking(filter.Page, filter.Size, out total, i => i.Status != Status.Handled || i.Level != BugLevel.Fatal || user.IsAdmin, i => i.SubmitTime, false).ToList();
}
else
{
var searchResult = IssueService.SearchPage(filter.Page, filter.Size, filter.Kw);
total = searchResult.Total;
list = searchResult.Results.Where(i => i.Status != Status.Handled || i.Level != BugLevel.Fatal || user.IsAdmin).ToList();
}
var pageCount = Math.Ceiling(total * 1.0 / filter.Size).ToInt32();
return PageResult(list.Select(i => new
{
i.Id,
i.Name,
//i.Email,
i.Title,
i.Link,
i.Description,
i.SubmitTime,
i.HandleTime,
Status = i.Status.GetDisplay(),
Level = i.Level.GetDisplay()
}), pageCount, total);
}
///
/// 问题详情
///
///
///
[Route("bug/{id:int}")]
public ActionResult Datails(int id)
{
Issue issue = IssueService.GetById(id);
if (issue is null)
{
return RedirectToAction("Index", "Error");
}
return View(issue);
}
///
/// 处理
///
/// 问题id
/// 处理意见
///
[Authority]
public ActionResult Handle(int id, string text)
{
Issue issue = IssueService.GetById(id);
issue.Status = Status.Handled;
issue.HandleTime = DateTime.Now;
issue.Msg = text;
bool b = IssueService.UpdateEntitySaved(issue);
string content = System.IO.File.ReadAllText(_hostingEnvironment.WebRootPath + "/template/bugfeed.html").Replace("{{title}}", issue.Title).Replace("{{link}}", issue.Link).Replace("{{text}}", text).Replace("{{date}}", issue.HandleTime.Value.ToString("yyyy-MM-dd HH:mm:ss"));
BackgroundJob.Enqueue(() => CommonHelper.SendMail("bug提交反馈通知", content, issue.Email));
return ResultData(null, b, b ? "问题处理成功!" : "处理失败!");
}
///
/// 提交问题
///
///
///
[HttpPost]
public ActionResult Submit(Issue issue)
{
issue.Description = CommonHelper.ReplaceImgSrc(Regex.Replace(issue.Description, @"
]*\s*src\s*=\s*['""]?(\S+\.\w{3,4})['""]?[^/>]*/>", "
")).Replace("/thumb150/", "/large/");
issue.IPAddress = HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
Issue bug = IssueService.AddEntitySaved(issue);
if (bug != null)
{
MessageService.AddEntitySaved(new InternalMessage()
{
Title = $"来自【{issue.Name}({issue.Email})】的bug问题反馈",
Content = bug.Description,
Link = Url.Action("Index")
});
string content = System.IO.File.ReadAllText(_hostingEnvironment.WebRootPath + "/template/bugreport.html").Replace("{{name}}", bug.Name).Replace("{{email}}", bug.Email).Replace("{{title}}", bug.Title).Replace("{{desc}}", bug.Description).Replace("{{link}}", bug.Link).Replace("{{date}}", bug.SubmitTime.ToString("yyyy-MM-dd HH:mm:ss"));
BackgroundJob.Enqueue(() => CommonHelper.SendMail("bug提交通知", content, "admin@masuit.com"));
return ResultData(issue, true, "问题提交成功,感谢您的反馈!");
}
return ResultData(null, false, "提交失败!");
}
///
/// 删除问题
///
/// 问题id
///
[Authority]
public ActionResult Delete(int id)
{
bool b = IssueService.DeleteByIdSaved(id);
return ResultData(null, b, b ? "删除成功!" : "删除失败!");
}
///
/// 获取问题级别
///
///
public ActionResult GetBugLevels()
{
List