HomeController.cs 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  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<Object> GetMyInfo()
  61. {
  62. if (!string.IsNullOrEmpty(_sessionContext.UserId))
  63. {
  64. var monitor = false;
  65. var setting = _systemSettingCacheManager.GetSetting(SettingConstants.SeatsMonitor);
  66. var settingStr = setting?.SettingValue;
  67. var roles = _sessionContext.Roles;
  68. foreach (var item in settingStr)
  69. {
  70. if (roles != null && roles.Contains(item)) monitor = true;
  71. }
  72. var user = await _userRepository.Queryable()
  73. .Includes(x => x.Organization)
  74. .Includes(x => x.Account)
  75. .Includes(x => x.Roles)
  76. .FirstAsync(x => x.Id == _sessionContext.UserId);
  77. //return await _userRepository.GetAsync(_sessionContext.UserId);
  78. return new { User = user, Monitor = monitor };
  79. }
  80. throw UserFriendlyException.SameMessage("无效登录信息");
  81. }
  82. //[AllowAnonymous]
  83. //[HttpGet("createdb")]
  84. //public Task CreateDb()
  85. //{
  86. // var db = _uow.Db;
  87. // db.DbMaintenance.CreateDatabase();
  88. // //db.CodeFirst.InitTables<Blacklist,Call,CallDetail,CallRecord,TelHold>();
  89. // //db.CodeFirst.InitTables<Ivr, IvrCategory, Tel, TelGroup, TelRest>();
  90. // db.CodeFirst.InitTables<KnowledgeType>();
  91. // //db.CodeFirst.InitTables<KnowledgeType, Orders.Order, OrderTemporary, OrgUser>();
  92. // //db.CodeFirst.InitTables<SystemAuthority, SystemButton, SystemDataAuthority, SystemDataTable, SystemMenu>();
  93. // //db.CodeFirst.InitTables<SystemOrganize, SystemSetting, SystemSettingGroup, UserFastMenu>();
  94. // //db.CodeFirst.InitTables<User, Work,SysDicType,SysDicData, TrunkIvrManager>();
  95. // return Task.CompletedTask;
  96. //}
  97. /// <summary>
  98. /// 获取可选快捷入口
  99. /// </summary>
  100. /// <returns></returns>
  101. [HttpPost("get-fastmenu")]
  102. public async Task<IReadOnlyList<SystemMenu>> GetFastMenuByToken([FromBody] GetFastMenuByTokenDto dto)
  103. {
  104. if (!string.IsNullOrEmpty(_sessionContext.UserId))
  105. {
  106. var roles = _sessionContext.Roles;
  107. return await _systemMenuRepository.GetFastMenu(roles, _sessionContext.UserId, dto.name);
  108. }
  109. throw UserFriendlyException.SameMessage("无效登录信息");
  110. }
  111. /// <summary>
  112. /// 设置快捷入口
  113. /// </summary>
  114. /// <returns></returns>
  115. [HttpPost("set-fastmenu")]
  116. public async Task SetFastMenu([FromBody] SetFastMenuDto dto)
  117. {
  118. if (!string.IsNullOrEmpty(_sessionContext.UserId))
  119. {
  120. string userId = _sessionContext.UserId;
  121. var model = await _userFastMenuRepository.GetAsync(x => x.UserId == userId);
  122. if (model is null)
  123. {
  124. var fastmenu = _mapper.Map<UserFastMenu>(dto);
  125. fastmenu.UserId = userId;
  126. await _userFastMenuRepository.AddAsync(fastmenu);
  127. }
  128. else
  129. {
  130. _mapper.Map(dto, model);
  131. await _userFastMenuRepository.UpdateAsync(model);
  132. }
  133. }
  134. else
  135. {
  136. throw UserFriendlyException.SameMessage("无效登录信息");
  137. }
  138. }
  139. /// <summary>
  140. /// 获取我的快捷入口
  141. /// </summary>
  142. /// <returns></returns>
  143. [HttpGet("get-myfastmenu")]
  144. public async Task<IReadOnlyList<SystemMenu>> GetMyFastMenu()
  145. {
  146. if (!string.IsNullOrEmpty(_sessionContext.UserId))
  147. {
  148. var roles = _sessionContext.Roles;
  149. return await _systemMenuRepository.GetMyFastMenu(roles, _sessionContext.UserId);
  150. }
  151. throw UserFriendlyException.SameMessage("无效登录信息");
  152. }
  153. /// <summary>
  154. /// 首页系统配置
  155. /// </summary>
  156. /// <returns>
  157. /// IsRestApproval : 小休是否需要审核
  158. /// IsNeedTelNo : 是否需要分机
  159. /// IsTelNeedVerify : 分机是否需要验证
  160. /// </returns>
  161. [AllowAnonymous]
  162. [HttpGet("home-page-info")]
  163. public async Task<object> HomePageInfo()
  164. {
  165. var rsp = new
  166. {
  167. IsRestApproval = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.IsRestApproval).SettingValue[0]),
  168. IsNeedTelNo = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.IsNeedTelNo).SettingValue[0]),
  169. IsTelNeedVerify = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.IsTelNeedVerify).SettingValue[0]),
  170. TalkingDealTime = int.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.TalkingDealTime).SettingValue[0]),
  171. IsCustomEvent = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.IsCustomEvent).SettingValue[0]),
  172. IsTranspondCity = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.TranspondCity).SettingValue[0]),
  173. IsAverageSendOrder = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.AverageSendOrder).SettingValue[0]),
  174. IsOpenJudicialManagement = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.IsOpenJudicialManagement).SettingValue[0]),
  175. NoSignOrgCode = _systemSettingCacheManager.GetSetting(SettingConstants.NoSignOrgCode).SettingValue,
  176. ApplyDelayTime = int.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.ApplyDelayTime).SettingValue[0]),
  177. IsOpenRepeatedWorkOrders = bool.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.IsOpenRepeatedWorkOrders).SettingValue[0]),
  178. OldHotlineUrl = _systemSettingCacheManager.GetSetting(SettingConstants.OldHotlineUrl).SettingValue[0],
  179. OldHotlineOrderState = _systemSettingCacheManager.GetSetting(SettingConstants.OldHotlineOrderState).SettingValue[0],
  180. FileExt = _systemSettingCacheManager.GetSetting(SettingConstants.FileExt).SettingValue[0],
  181. NationalPlatformWordLimit = int.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.NationalPlatformWordLimit).SettingValue[0]),
  182. HandleOpinionWordLimit= int.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.HandleOpinionWordLimit).SettingValue[0]),
  183. CallInOpenType = int.Parse(_systemSettingCacheManager.GetSetting(SettingConstants.CallInOpenType).SettingValue[0]),
  184. };
  185. return rsp;
  186. }
  187. #endregion
  188. #region 菜单权限
  189. /// <summary>
  190. /// 获取当前用户所有菜单
  191. /// </summary>
  192. /// <returns></returns>
  193. [AllowAnonymous]
  194. [HttpGet("get-my-auth-menu")]
  195. public async Task<UserAuthorityDto> GetUserAuthorityMenuByToken()
  196. {
  197. var roles = _sessionContext.Roles;
  198. var menus = _mapper.Map<List<SystemMenuDto>>(await _systemAuthorityRepository.GetMyMenu(roles));
  199. var buttons = await _systemAuthorityRepository.GetMyButton(roles);
  200. return new UserAuthorityDto() { menus = menus, buttons = buttons };
  201. }
  202. ///// <summary>
  203. ///// 获取当前用户所有按钮
  204. ///// </summary>
  205. ///// <returns></returns>
  206. //[AllowAnonymous]
  207. //[HttpGet("get-my-auth-button")]
  208. //public async Task<IReadOnlyList<string>> GetUserAuthorityButtonByToken()
  209. //{
  210. // var roles = _sessionContext.Roles;
  211. // return await _systemAuthorityRepository.GetMyButton(roles);
  212. //}
  213. #endregion
  214. }