| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- 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
- {
- /// <summary>
- /// bug反馈
- /// </summary>
- public class BugController : BaseController
- {
- /// <summary>
- /// IssueService
- /// </summary>
- public IIssueService IssueService { get; set; }
- /// <summary>
- /// MessageService
- /// </summary>
- public IInternalMessageService MessageService { get; set; }
- private readonly IHostingEnvironment _hostingEnvironment;
- /// <summary>
- /// bug反馈
- /// </summary>
- /// <param name="issueService"></param>
- /// <param name="messageService"></param>
- /// <param name="hostingEnvironment"></param>
- public BugController(IIssueService issueService, IInternalMessageService messageService, IHostingEnvironment hostingEnvironment)
- {
- IssueService = issueService;
- MessageService = messageService;
- _hostingEnvironment = hostingEnvironment;
- }
- /// <summary>
- /// bug首页
- /// </summary>
- /// <returns></returns>
- [Route("bug")]
- public ActionResult Index()
- {
- return View();
- }
- /// <summary>
- /// 分页数据
- /// </summary>
- /// <param name="filter"></param>
- /// <returns></returns>
- [HttpPost]
- public ActionResult PageData([FromBody]PageFilter filter)
- {
- UserInfoOutputDto user = HttpContext.Session.GetByRedis<UserInfoOutputDto>(SessionKey.UserInfo) ?? new UserInfoOutputDto();
- List<Issue> 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);
- }
- /// <summary>
- /// 问题详情
- /// </summary>
- /// <param name="id"></param>
- /// <returns></returns>
- [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);
- }
- /// <summary>
- /// 处理
- /// </summary>
- /// <param name="id">问题id</param>
- /// <param name="text">处理意见</param>
- /// <returns></returns>
- [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 ? "问题处理成功!" : "处理失败!");
- }
- /// <summary>
- /// 提交问题
- /// </summary>
- /// <param name="issue"></param>
- /// <returns></returns>
- [HttpPost]
- public ActionResult Submit(Issue issue)
- {
- issue.Description = CommonHelper.ReplaceImgSrc(Regex.Replace(issue.Description, @"<img\s+[^>]*\s*src\s*=\s*['""]?(\S+\.\w{3,4})['""]?[^/>]*/>", "<img src=\"$1\"/>")).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, "[email protected]"));
- return ResultData(issue, true, "问题提交成功,感谢您的反馈!");
- }
- return ResultData(null, false, "提交失败!");
- }
- /// <summary>
- /// 删除问题
- /// </summary>
- /// <param name="id">问题id</param>
- /// <returns></returns>
- [Authority]
- public ActionResult Delete(int id)
- {
- bool b = IssueService.DeleteByIdSaved(id);
- return ResultData(null, b, b ? "删除成功!" : "删除失败!");
- }
- /// <summary>
- /// 获取问题级别
- /// </summary>
- /// <returns></returns>
- public ActionResult GetBugLevels()
- {
- List<object> list = new List<object>();
- foreach (Enum value in Enum.GetValues(typeof(BugLevel)))
- {
- list.Add(new
- {
- name = value.GetDisplay(),
- value
- });
- }
- return ResultData(list);
- }
- }
- }
|