GroupUserRepository.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using AutoMapper;
  7. using GxPress.Common.AppOptions;
  8. using GxPress.Common.Exceptions;
  9. using GxPress.Common.Tools;
  10. using GxPress.Entity;
  11. using GxPress.EnumConst;
  12. using GxPress.Repository.Interface;
  13. using GxPress.Request.App.GroupUser;
  14. using GxPress.Request.App.Middle;
  15. using Microsoft.AspNetCore.Hosting;
  16. using Microsoft.Extensions.Options;
  17. using SqlKata;
  18. using Datory;
  19. using Dapper;
  20. namespace GxPress.Repository.Implement
  21. {
  22. public class GroupUserRepository : IGroupUserRepository
  23. {
  24. private readonly Repository<GroupUser> _repository;
  25. private readonly IMapper _mapper;
  26. private readonly IWebHostEnvironment _environment;
  27. private readonly Repository<Group> _groupRepository;
  28. private readonly string _connectionString;
  29. private readonly string _databaseTypeStr;
  30. public GroupUserRepository(IOptionsMonitor<DatabaseOptions> dbOptionsAccessor, IMapper mapper,
  31. IWebHostEnvironment environment)
  32. {
  33. _databaseTypeStr = dbOptionsAccessor.CurrentValue.DatabaseType;
  34. _connectionString = dbOptionsAccessor.CurrentValue.ConnectionString;
  35. var databaseType =
  36. StringUtils.ToEnum<DatabaseType>(dbOptionsAccessor.CurrentValue.DatabaseType, DatabaseType.MySql);
  37. var database = new Database(databaseType, dbOptionsAccessor.CurrentValue.ConnectionString);
  38. _repository = new Repository<GroupUser>(database);
  39. _groupRepository = new Repository<Group>(database);
  40. _environment = environment;
  41. _mapper = mapper;
  42. }
  43. public IDatabase Database => _repository.Database;
  44. public string TableName => _repository.TableName;
  45. public List<TableColumn> TableColumns => _repository.TableColumns;
  46. /// <summary>
  47. /// 修改角色权限
  48. /// </summary>
  49. /// <param name="request"></param>
  50. /// <returns></returns>
  51. public async Task<bool> UpdateAsync(GroupUserUpRequest request)
  52. {
  53. if (request.RoleId == GroupUserRoleTyeConst.SuperAdmin)
  54. throw new BusinessException("已存在");
  55. return await _repository.UpdateAsync(Q.Set(nameof(GroupUser.GroupUserRoleId), request.RoleId)
  56. .Where(nameof(GroupUser.Id), request.Id)) > 0;
  57. }
  58. public async Task<bool> DeleteAsync(Query query)
  59. {
  60. return await _repository.DeleteAsync(query) > 0;
  61. }
  62. /// <summary>
  63. /// 根据小组ID获取成员
  64. /// </summary>
  65. /// <param name="request"></param>
  66. /// <returns></returns>
  67. public async Task<IEnumerable<GroupUser>> FindGroupUserAsync(GroupUserFindRequest request)
  68. {
  69. return await _repository.GetAllAsync(Q.Where(nameof(GroupUser.GroupId), request.GroupId));
  70. }
  71. /// <summary>
  72. /// 插入用户
  73. /// </summary>
  74. /// <param name="userId"></param>
  75. /// <param name="groupId"></param>
  76. /// <param name="groupUserRoleId"></param>
  77. /// <returns></returns>
  78. public async Task<int> InsertAsync(int userId, int groupId, GroupUserRoleTyeConst groupUserRoleId)
  79. {
  80. GroupUser groupUser = new GroupUser { GroupId = groupId, UserId = userId, GroupUserRoleId = groupUserRoleId, IsUDisturb = false };
  81. return await _repository.InsertAsync(groupUser);
  82. }
  83. public async Task<GroupUser> GetAsync(Query q)
  84. {
  85. return await _repository.GetAsync(q);
  86. }
  87. public async Task<IEnumerable<GroupUser>> GetAllAsync(Query q)
  88. {
  89. return await _repository.GetAllAsync(q);
  90. }
  91. public async Task<int> InsertAsync(GroupUser groupUser)
  92. {
  93. return await _repository.InsertAsync(groupUser);
  94. }
  95. public async Task<bool> InsertAsync(List<GroupUser> groupUsers)
  96. {
  97. string sql = @"INSERT INTO `ccpph`.`tede_group_user`
  98. (`Guid`,
  99. `CreatedDate`,
  100. `LastModifiedDate`,
  101. `GroupId`,
  102. `UserId`,
  103. `GroupUserRoleId`,
  104. `IsUDisturb`)
  105. VALUES";
  106. if (groupUsers.Count == 0)
  107. return false;
  108. foreach (var item in groupUsers)
  109. {
  110. var guId = Guid.NewGuid().ToString();
  111. var createdDate = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
  112. var IsUDisturb = item.IsUDisturb ? 1 : 0;
  113. sql += $@"('{guId}','{createdDate}','{createdDate}',{item.GroupId},{item.UserId},{item.GroupUserRoleId.GetHashCode()},{IsUDisturb}),";
  114. }
  115. sql = sql.Remove(sql.Length - 1, 1);
  116. var databaseType = StringUtils.ToEnum<DatabaseType>(_databaseTypeStr, DatabaseType.MySql);
  117. var database = new Database(databaseType, _connectionString);
  118. var connection = database.GetConnection();
  119. var result = await connection.ExecuteAsync(sql);
  120. return result > 0;
  121. }
  122. /// <summary>
  123. /// 设置用户是否免打扰
  124. /// </summary>
  125. /// <param name="groupId"></param>
  126. /// <param name="userId"></param>
  127. /// <returns></returns>
  128. public async Task<bool> SetIsUDisturbAsync(int groupId, int userId)
  129. {
  130. var groupUser = await _repository.GetAsync(Q.Where(nameof(GroupUser.GroupId), groupId)
  131. .Where(nameof(GroupUser.UserId), userId));
  132. return await _repository.UpdateAsync(Q.Set(nameof(GroupUser.IsUDisturb), !groupUser.IsUDisturb)
  133. .Where(nameof(GroupUser.GroupId), groupId)
  134. .Where(nameof(GroupUser.UserId), userId)) > 0;
  135. }
  136. }
  137. }