| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- using Admin.NET.Plugin.AiDOP.Entity.S8;
- namespace Admin.NET.Plugin.AiDOP.Service.S8;
- public class S8RoleConfigService : ITransient
- {
- private readonly SqlSugarRepository<AdoS8RolePermissionConfig> _rep;
- private readonly SqlSugarRepository<SysRole> _sysRoleRep;
- public S8RoleConfigService(
- SqlSugarRepository<AdoS8RolePermissionConfig> rep,
- SqlSugarRepository<SysRole> sysRoleRep)
- {
- _rep = rep;
- _sysRoleRep = sysRoleRep;
- }
- public async Task<List<AdoS8RolePermissionConfig>> ListAsync(long tenantId, long factoryId) =>
- await _rep.AsQueryable()
- .Where(x => x.TenantId == tenantId && x.FactoryId == factoryId)
- .ToListAsync();
- public async Task<AdoS8RolePermissionConfig> CreateAsync(AdoS8RolePermissionConfig body)
- {
- if (string.IsNullOrWhiteSpace(body.RoleCode)) throw new S8BizException("角色编码必填");
- var exists = await _rep.AsQueryable()
- .AnyAsync(x => x.TenantId == body.TenantId && x.FactoryId == body.FactoryId && x.RoleCode == body.RoleCode);
- if (exists) throw new S8BizException("角色编码已存在");
- body.Id = 0;
- body.CreatedAt = DateTime.Now;
- await _rep.InsertAsync(body);
- return body;
- }
- public async Task<AdoS8RolePermissionConfig> UpdateAsync(long id, AdoS8RolePermissionConfig body)
- {
- var e = await _rep.GetByIdAsync(id) ?? throw new S8BizException("记录不存在");
- if (string.IsNullOrWhiteSpace(body.RoleCode)) throw new S8BizException("角色编码必填");
- var exists = await _rep.AsQueryable()
- .AnyAsync(x => x.Id != id && x.TenantId == body.TenantId && x.FactoryId == body.FactoryId && x.RoleCode == body.RoleCode);
- if (exists) throw new S8BizException("角色编码已存在");
- body.Id = id;
- body.CreatedAt = e.CreatedAt;
- body.UpdatedAt = DateTime.Now;
- await _rep.UpdateAsync(body);
- return body;
- }
- public async Task DeleteAsync(long id) => await _rep.DeleteByIdAsync(id);
- /// <summary>
- /// 从系统角色表一键导入,跳过已存在的角色编码,返回本次新增条数。
- /// </summary>
- public async Task<int> ImportFromSysRolesAsync(long tenantId, long factoryId)
- {
- var sysRoles = await _sysRoleRep.AsQueryable()
- .Where(r => r.TenantId == tenantId && r.Status == StatusEnum.Enable)
- .Where(r => !string.IsNullOrEmpty(r.Code))
- .Select(r => new { r.Code, r.Name })
- .ToListAsync();
- var existingCodes = (await _rep.AsQueryable()
- .Where(x => x.TenantId == tenantId && x.FactoryId == factoryId)
- .Select(x => x.RoleCode)
- .ToListAsync()).ToHashSet();
- var toInsert = sysRoles
- .Where(r => !existingCodes.Contains(r.Code!))
- .Select(r => new AdoS8RolePermissionConfig
- {
- TenantId = tenantId,
- FactoryId = factoryId,
- RoleCode = r.Code!,
- PermissionCodes = "[]",
- CreatedAt = DateTime.Now
- }).ToList();
- if (toInsert.Count > 0)
- await _rep.InsertRangeAsync(toInsert);
- return toInsert.Count;
- }
- }
|