S8RoleConfigService.cs 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using Admin.NET.Plugin.AiDOP.Entity.S8;
  2. namespace Admin.NET.Plugin.AiDOP.Service.S8;
  3. public class S8RoleConfigService : ITransient
  4. {
  5. private readonly SqlSugarRepository<AdoS8RolePermissionConfig> _rep;
  6. private readonly SqlSugarRepository<SysRole> _sysRoleRep;
  7. public S8RoleConfigService(
  8. SqlSugarRepository<AdoS8RolePermissionConfig> rep,
  9. SqlSugarRepository<SysRole> sysRoleRep)
  10. {
  11. _rep = rep;
  12. _sysRoleRep = sysRoleRep;
  13. }
  14. public async Task<List<AdoS8RolePermissionConfig>> ListAsync(long tenantId, long factoryId) =>
  15. await _rep.AsQueryable()
  16. .Where(x => x.TenantId == tenantId && x.FactoryId == factoryId)
  17. .ToListAsync();
  18. public async Task<AdoS8RolePermissionConfig> CreateAsync(AdoS8RolePermissionConfig body)
  19. {
  20. if (string.IsNullOrWhiteSpace(body.RoleCode)) throw new S8BizException("角色编码必填");
  21. var exists = await _rep.AsQueryable()
  22. .AnyAsync(x => x.TenantId == body.TenantId && x.FactoryId == body.FactoryId && x.RoleCode == body.RoleCode);
  23. if (exists) throw new S8BizException("角色编码已存在");
  24. body.Id = 0;
  25. body.CreatedAt = DateTime.Now;
  26. await _rep.InsertAsync(body);
  27. return body;
  28. }
  29. public async Task<AdoS8RolePermissionConfig> UpdateAsync(long id, AdoS8RolePermissionConfig body)
  30. {
  31. var e = await _rep.GetByIdAsync(id) ?? throw new S8BizException("记录不存在");
  32. if (string.IsNullOrWhiteSpace(body.RoleCode)) throw new S8BizException("角色编码必填");
  33. var exists = await _rep.AsQueryable()
  34. .AnyAsync(x => x.Id != id && x.TenantId == body.TenantId && x.FactoryId == body.FactoryId && x.RoleCode == body.RoleCode);
  35. if (exists) throw new S8BizException("角色编码已存在");
  36. body.Id = id;
  37. body.CreatedAt = e.CreatedAt;
  38. body.UpdatedAt = DateTime.Now;
  39. await _rep.UpdateAsync(body);
  40. return body;
  41. }
  42. public async Task DeleteAsync(long id) => await _rep.DeleteByIdAsync(id);
  43. /// <summary>
  44. /// 从系统角色表一键导入,跳过已存在的角色编码,返回本次新增条数。
  45. /// </summary>
  46. public async Task<int> ImportFromSysRolesAsync(long tenantId, long factoryId)
  47. {
  48. var sysRoles = await _sysRoleRep.AsQueryable()
  49. .Where(r => r.TenantId == tenantId && r.Status == StatusEnum.Enable)
  50. .Where(r => !string.IsNullOrEmpty(r.Code))
  51. .Select(r => new { r.Code, r.Name })
  52. .ToListAsync();
  53. var existingCodes = (await _rep.AsQueryable()
  54. .Where(x => x.TenantId == tenantId && x.FactoryId == factoryId)
  55. .Select(x => x.RoleCode)
  56. .ToListAsync()).ToHashSet();
  57. var toInsert = sysRoles
  58. .Where(r => !existingCodes.Contains(r.Code!))
  59. .Select(r => new AdoS8RolePermissionConfig
  60. {
  61. TenantId = tenantId,
  62. FactoryId = factoryId,
  63. RoleCode = r.Code!,
  64. PermissionCodes = "[]",
  65. CreatedAt = DateTime.Now
  66. }).ToList();
  67. if (toInsert.Count > 0)
  68. await _rep.InsertRangeAsync(toInsert);
  69. return toInsert.Count;
  70. }
  71. }