HomeController.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. using Hotline.Caching.Interfaces;
  2. using Hotline.CallCenter.BlackLists;
  3. using Hotline.CallCenter.Calls;
  4. using Hotline.CallCenter.Ivrs;
  5. using Hotline.CallCenter.Tels;
  6. using Hotline.KnowledgeBase;
  7. using Hotline.Orders;
  8. using Hotline.Repository.SqlSugar;
  9. using Hotline.Settings;
  10. using Hotline.Share.Dtos.Home;
  11. using Hotline.Users;
  12. using MapsterMapper;
  13. using Microsoft.AspNetCore.Authorization;
  14. using Microsoft.AspNetCore.Mvc;
  15. using SqlSugar;
  16. using StackExchange.Redis;
  17. using XF.Domain.Authentications;
  18. using XF.Domain.Constants;
  19. using XF.Domain.Exceptions;
  20. using XF.Domain.Repository;
  21. namespace Hotline.Api.Controllers;
  22. /// <summary>
  23. /// 主页相关接口
  24. /// </summary>
  25. public class HomeController : BaseController
  26. {
  27. private readonly ISugarUnitOfWork<HotlineDbContext> _uow;
  28. private readonly ISessionContext _sessionContext;
  29. private readonly ISystemAuthorityRepository _systemAuthorityRepository;
  30. private readonly ISystemMenuRepository _systemMenuRepository;
  31. private readonly IMapper _mapper;
  32. private readonly IRepository<UserFastMenu> _userFastMenuRepository;
  33. private readonly IRepository<User> _userRepository;
  34. private readonly ISystemSettingCacheManager _systemSettingCacheManager;
  35. public HomeController(
  36. ISugarUnitOfWork<HotlineDbContext> uow,
  37. ISessionContext sessionContext,
  38. ISystemAuthorityRepository systemAuthorityRepository,
  39. ISystemMenuRepository systemMenuRepository,
  40. IMapper mapper,
  41. IRepository<UserFastMenu> userFastMenuRepository,
  42. IRepository<User> userRepository,
  43. ISystemSettingCacheManager systemSettingCacheManager)
  44. {
  45. _uow = uow;
  46. _sessionContext = sessionContext;
  47. _systemAuthorityRepository = systemAuthorityRepository;
  48. _systemMenuRepository = systemMenuRepository;
  49. _mapper = mapper;
  50. _userFastMenuRepository = userFastMenuRepository;
  51. _userRepository = userRepository;
  52. _systemSettingCacheManager = systemSettingCacheManager;
  53. }
  54. #region 开放请求接口
  55. /// <summary>
  56. /// 获取当前用户信息
  57. /// </summary>
  58. /// <returns></returns>
  59. [HttpGet("myinfo")]
  60. public async Task<User?> GetMyInfo()
  61. {
  62. if (!string.IsNullOrEmpty(_sessionContext.UserId))
  63. {
  64. return await _userRepository.Queryable().Includes(x => x.Organization).FirstAsync(x => x.Id == _sessionContext.UserId);
  65. //return await _userRepository.GetAsync(_sessionContext.UserId);
  66. }
  67. throw UserFriendlyException.SameMessage("无效登录信息");
  68. }
  69. [AllowAnonymous]
  70. [HttpGet("createdb")]
  71. public Task CreateDb()
  72. {
  73. var db = _uow.Db;
  74. db.DbMaintenance.CreateDatabase();
  75. //db.CodeFirst.InitTables<Blacklist,Call,CallDetail,CallRecord,TelHold>();
  76. //db.CodeFirst.InitTables<Ivr, IvrCategory, Tel, TelGroup, TelRest>();
  77. db.CodeFirst.InitTables<KnowledgeType>();
  78. //db.CodeFirst.InitTables<KnowledgeType, Orders.Order, OrderTemporary, OrgUser>();
  79. //db.CodeFirst.InitTables<SystemAuthority, SystemButton, SystemDataAuthority, SystemDataTable, SystemMenu>();
  80. //db.CodeFirst.InitTables<SystemOrganize, SystemSetting, SystemSettingGroup, UserFastMenu>();
  81. //db.CodeFirst.InitTables<User, Work,SysDicType,SysDicData, TrunkIvrManager>();
  82. return Task.CompletedTask;
  83. }
  84. /// <summary>
  85. /// 获取可选快捷入口
  86. /// </summary>
  87. /// <returns></returns>
  88. [HttpPost("get-fastmenu")]
  89. public async Task<IReadOnlyList<SystemMenu>> GetFastMenuByToken([FromBody] GetFastMenuByTokenDto dto)
  90. {
  91. if (!string.IsNullOrEmpty(_sessionContext.UserId))
  92. {
  93. var roles = _sessionContext.Roles;
  94. return await _systemMenuRepository.GetFastMenu(roles, _sessionContext.UserId, dto.name);
  95. }
  96. throw UserFriendlyException.SameMessage("无效登录信息");
  97. }
  98. /// <summary>
  99. /// 设置快捷入口
  100. /// </summary>
  101. /// <returns></returns>
  102. [HttpPost("set-fastmenu")]
  103. public async Task SetFastMenu([FromBody] SetFastMenuDto dto)
  104. {
  105. if (!string.IsNullOrEmpty(_sessionContext.UserId))
  106. {
  107. string userId = _sessionContext.UserId;
  108. var model = await _userFastMenuRepository.GetAsync(x => x.UserId == userId);
  109. if (model is null)
  110. {
  111. var fastmenu = _mapper.Map<UserFastMenu>(dto);
  112. fastmenu.UserId = userId;
  113. await _userFastMenuRepository.AddAsync(fastmenu);
  114. }
  115. else
  116. {
  117. _mapper.Map(dto, model);
  118. await _userFastMenuRepository.UpdateAsync(model);
  119. }
  120. }
  121. else
  122. {
  123. throw UserFriendlyException.SameMessage("无效登录信息");
  124. }
  125. }
  126. /// <summary>
  127. /// 获取我的快捷入口
  128. /// </summary>
  129. /// <returns></returns>
  130. [HttpGet("get-myfastmenu")]
  131. public async Task<IReadOnlyList<SystemMenu>> GetMyFastMenu()
  132. {
  133. if (!string.IsNullOrEmpty(_sessionContext.UserId))
  134. {
  135. var roles = _sessionContext.Roles;
  136. return await _systemMenuRepository.GetMyFastMenu(roles, _sessionContext.UserId);
  137. }
  138. throw UserFriendlyException.SameMessage("无效登录信息");
  139. }
  140. /// <summary>
  141. /// 首页系统配置
  142. /// </summary>
  143. /// <returns></returns>
  144. [AllowAnonymous]
  145. [HttpGet("home-page-info")]
  146. public async Task<HomeSettingDto> HomePageInfo()
  147. {
  148. var RestApproval = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.RestApproval).SettingValue[0]);
  149. return new HomeSettingDto() { IsRestApproval = RestApproval };
  150. }
  151. #endregion
  152. #region 菜单权限
  153. /// <summary>
  154. /// 获取当前用户所有菜单
  155. /// </summary>
  156. /// <returns></returns>
  157. [AllowAnonymous]
  158. [HttpGet("get-my-auth-menu")]
  159. public async Task<UserAuthorityDto> GetUserAuthorityMenuByToken()
  160. {
  161. var roles = _sessionContext.Roles;
  162. var menus = _mapper.Map<List<SystemMenuDto>>(await _systemAuthorityRepository.GetMyMenu(roles));
  163. var buttons = await _systemAuthorityRepository.GetMyButton(roles);
  164. return new UserAuthorityDto() { menus = menus, buttons = buttons };
  165. }
  166. ///// <summary>
  167. ///// 获取当前用户所有按钮
  168. ///// </summary>
  169. ///// <returns></returns>
  170. //[AllowAnonymous]
  171. //[HttpGet("get-my-auth-button")]
  172. //public async Task<IReadOnlyList<string>> GetUserAuthorityButtonByToken()
  173. //{
  174. // var roles = _sessionContext.Roles;
  175. // return await _systemAuthorityRepository.GetMyButton(roles);
  176. //}
  177. #endregion
  178. }