1.05 #7
@ -12,7 +12,7 @@ public class DataPermRepository(FakeRbacDbContext dbContext) : IScopedDependency
|
||||
|
||||
public async Task<RbacUserSnapshot?> GetUserSnapshotAsync(Guid userId, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var sql = $$"""
|
||||
var sql = $@"
|
||||
SELECT
|
||||
u.`Id` AS `Id`,
|
||||
u.`userid` AS `MapId`,
|
||||
@ -20,25 +20,25 @@ public class DataPermRepository(FakeRbacDbContext dbContext) : IScopedDependency
|
||||
u.`Name` AS `Name`,
|
||||
u.`OrganizationId` AS `OrganizationId`,
|
||||
o.`Name` AS `OrganizationName`
|
||||
FROM `{{FakeTables.User}}` u
|
||||
LEFT JOIN `{{FakeTables.Organization}}` o ON o.`Id` = u.`OrganizationId` AND o.`IsDeleted` = 0
|
||||
WHERE u.`Id` = {0} AND u.`IsDeleted` = 0
|
||||
FROM `{FakeTables.User}` u
|
||||
LEFT JOIN `{FakeTables.Organization}` o ON o.`Id` = u.`OrganizationId` AND o.`IsDeleted` = 0
|
||||
WHERE u.`Id` = {{0}} AND u.`IsDeleted` = 0
|
||||
LIMIT 1
|
||||
""";
|
||||
";
|
||||
return await Db.Database.SqlQueryRaw<RbacUserSnapshot>(sql, userId.ToString())
|
||||
.FirstOrDefaultAsync(cancellationToken);
|
||||
}
|
||||
|
||||
public async Task<bool> IsPureCustomerUserAsync(Guid userId, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var sql = $$"""
|
||||
var sql = $@"
|
||||
SELECT COUNT(*) AS `Value`
|
||||
FROM `{{FakeTables.UserRole}}` ur
|
||||
INNER JOIN `{{FakeTables.Role}}` r ON r.`Id` = ur.`RoleId` AND r.`IsDeleted` = 0
|
||||
WHERE ur.`UserId` = {0}
|
||||
FROM `{FakeTables.UserRole}` ur
|
||||
INNER JOIN `{FakeTables.Role}` r ON r.`Id` = ur.`RoleId` AND r.`IsDeleted` = 0
|
||||
WHERE ur.`UserId` = {{0}}
|
||||
AND r.`Code` <> 'Customer'
|
||||
AND r.`Code` NOT LIKE 'CustomerSub_%'
|
||||
""";
|
||||
";
|
||||
|
||||
var nonCustomerRoleCount = await Db.Database.SqlQueryRaw<int>(sql, userId.ToString())
|
||||
.FirstAsync(cancellationToken);
|
||||
@ -47,11 +47,11 @@ public class DataPermRepository(FakeRbacDbContext dbContext) : IScopedDependency
|
||||
return false;
|
||||
}
|
||||
|
||||
var hasRoleSql = $$"""
|
||||
var hasRoleSql = $@"
|
||||
SELECT COUNT(*) AS `Value`
|
||||
FROM `{{FakeTables.UserRole}}` ur
|
||||
WHERE ur.`UserId` = {0}
|
||||
""";
|
||||
FROM `{FakeTables.UserRole}` ur
|
||||
WHERE ur.`UserId` = {{0}}
|
||||
";
|
||||
var roleCount = await Db.Database.SqlQueryRaw<int>(hasRoleSql, userId.ToString())
|
||||
.FirstAsync(cancellationToken);
|
||||
return roleCount > 0;
|
||||
@ -59,13 +59,13 @@ public class DataPermRepository(FakeRbacDbContext dbContext) : IScopedDependency
|
||||
|
||||
public async Task<bool> IsAdminUserAsync(Guid userId, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var sql = $$"""
|
||||
var sql = $@"
|
||||
SELECT COUNT(*) AS `Value`
|
||||
FROM `{{FakeTables.UserRole}}` ur
|
||||
INNER JOIN `{{FakeTables.Role}}` r ON r.`Id` = ur.`RoleId` AND r.`IsDeleted` = 0
|
||||
WHERE ur.`UserId` = {0}
|
||||
FROM `{FakeTables.UserRole}` ur
|
||||
INNER JOIN `{FakeTables.Role}` r ON r.`Id` = ur.`RoleId` AND r.`IsDeleted` = 0
|
||||
WHERE ur.`UserId` = {{0}}
|
||||
AND r.`Code` = 'Admin'
|
||||
""";
|
||||
";
|
||||
|
||||
var count = await Db.Database.SqlQueryRaw<int>(sql, userId.ToString()).FirstAsync(cancellationToken);
|
||||
return count > 0;
|
||||
@ -73,22 +73,22 @@ public class DataPermRepository(FakeRbacDbContext dbContext) : IScopedDependency
|
||||
|
||||
public async Task<List<Guid>> GetUserRoleIdsAsync(Guid userId, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var sql = $$"""
|
||||
var sql = $@"
|
||||
SELECT ur.`RoleId` AS `Value`
|
||||
FROM `{{FakeTables.UserRole}}` ur
|
||||
WHERE ur.`UserId` = {0}
|
||||
""";
|
||||
FROM `{FakeTables.UserRole}` ur
|
||||
WHERE ur.`UserId` = {{0}}
|
||||
";
|
||||
return await Db.Database.SqlQueryRaw<Guid>(sql, userId.ToString())
|
||||
.ToListAsync(cancellationToken);
|
||||
}
|
||||
|
||||
public async Task<List<Guid>> GetUserIdsByRoleAsync(Guid roleId, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var sql = $$"""
|
||||
var sql = $@"
|
||||
SELECT ur.`UserId` AS `Value`
|
||||
FROM `{{FakeTables.UserRole}}` ur
|
||||
WHERE ur.`RoleId` = {0}
|
||||
""";
|
||||
FROM `{FakeTables.UserRole}` ur
|
||||
WHERE ur.`RoleId` = {{0}}
|
||||
";
|
||||
|
||||
return await Db.Database.SqlQueryRaw<Guid>(sql, roleId.ToString())
|
||||
.ToListAsync(cancellationToken);
|
||||
@ -382,19 +382,19 @@ public class DataPermRepository(FakeRbacDbContext dbContext) : IScopedDependency
|
||||
|
||||
public async Task<List<Guid>> GetOrganizationSubtreeIdsAsync(Guid rootOrganizationId, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var sql = $$"""
|
||||
var sql = $@"
|
||||
WITH RECURSIVE org_tree AS (
|
||||
SELECT o.`Id`
|
||||
FROM `{{FakeTables.Organization}}` o
|
||||
WHERE o.`Id` = {0} AND o.`IsDeleted` = 0
|
||||
FROM `{FakeTables.Organization}` o
|
||||
WHERE o.`Id` = {{0}} AND o.`IsDeleted` = 0
|
||||
UNION ALL
|
||||
SELECT c.`Id`
|
||||
FROM `{{FakeTables.Organization}}` c
|
||||
FROM `{FakeTables.Organization}` c
|
||||
INNER JOIN org_tree t ON c.`ParentId` = t.`Id`
|
||||
WHERE c.`IsDeleted` = 0
|
||||
)
|
||||
SELECT `Id` AS `Value` FROM org_tree
|
||||
""";
|
||||
";
|
||||
|
||||
return await Db.Database.SqlQueryRaw<Guid>(sql, rootOrganizationId.ToString())
|
||||
.ToListAsync(cancellationToken);
|
||||
@ -411,24 +411,24 @@ public class DataPermRepository(FakeRbacDbContext dbContext) : IScopedDependency
|
||||
}
|
||||
|
||||
var inClause = string.Join(",", ids.Select(x => $"'{x}'"));
|
||||
var sql = $$"""
|
||||
var sql = $@"
|
||||
SELECT o.`Id` AS `Id`, o.`Name` AS `Name`
|
||||
FROM `{{FakeTables.Organization}}` o
|
||||
FROM `{FakeTables.Organization}` o
|
||||
WHERE o.`IsDeleted` = 0
|
||||
AND o.`Id` IN ({inClause})
|
||||
""";
|
||||
";
|
||||
var rows = await Db.Database.SqlQueryRaw<OrganizationNameRow>(sql).ToListAsync(cancellationToken);
|
||||
return rows.ToDictionary(x => x.Id, x => x.Name ?? x.Id.ToString());
|
||||
}
|
||||
|
||||
public async Task<bool> OrganizationExistsAndEnabledAsync(Guid organizationId, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var sql = $$"""
|
||||
var sql = $@"
|
||||
SELECT COUNT(*) AS `Value`
|
||||
FROM `{{FakeTables.Organization}}` o
|
||||
WHERE o.`Id` = {0}
|
||||
FROM `{FakeTables.Organization}` o
|
||||
WHERE o.`Id` = {{0}}
|
||||
AND o.`IsDeleted` = 0
|
||||
""";
|
||||
";
|
||||
|
||||
var count = await Db.Database.SqlQueryRaw<int>(sql, organizationId.ToString()).FirstAsync(cancellationToken);
|
||||
return count > 0;
|
||||
@ -446,12 +446,12 @@ public class DataPermRepository(FakeRbacDbContext dbContext) : IScopedDependency
|
||||
|
||||
if (dataScope == DataPermConstants.DataScopeTeam)
|
||||
{
|
||||
var sql = $$"""
|
||||
var sql = $@"
|
||||
SELECT u.`userid` AS `Value`
|
||||
FROM `{{FakeTables.User}}` u
|
||||
FROM `{FakeTables.User}` u
|
||||
WHERE u.`IsDeleted` = 0
|
||||
AND u.`OrganizationId` = {0}
|
||||
""";
|
||||
AND u.`OrganizationId` = {{0}}
|
||||
";
|
||||
return await Db.Database.SqlQueryRaw<int>(sql, organizationId.ToString())
|
||||
.ToListAsync(cancellationToken);
|
||||
}
|
||||
@ -465,12 +465,12 @@ public class DataPermRepository(FakeRbacDbContext dbContext) : IScopedDependency
|
||||
}
|
||||
|
||||
var inClause = string.Join(",", orgIds.Select(x => $"'{x}'"));
|
||||
var sql = $$"""
|
||||
var sql = $@"
|
||||
SELECT u.`userid` AS `Value`
|
||||
FROM `{{FakeTables.User}}` u
|
||||
FROM `{FakeTables.User}` u
|
||||
WHERE u.`IsDeleted` = 0
|
||||
AND u.`OrganizationId` IN ({inClause})
|
||||
""";
|
||||
";
|
||||
|
||||
return await Db.Database.SqlQueryRaw<int>(sql).ToListAsync(cancellationToken);
|
||||
}
|
||||
|
||||
@ -21,21 +21,21 @@ public class DataPermStore(FakeRbacDbContext dbContext, DataPermContextCache cac
|
||||
|
||||
public async Task<UserDataPermDto> GetUserDataPermAsync(Guid userId, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var user = await dbContext.Database.SqlQueryRaw<UserHeaderRow>($$"""
|
||||
var user = await dbContext.Database.SqlQueryRaw<UserHeaderRow>($@"
|
||||
SELECT
|
||||
u.`Id` AS `UserId`,
|
||||
u.`Name` AS `UserName`,
|
||||
u.`OrganizationId` AS `OrganizationId`,
|
||||
o.`Name` AS `OrganizationName`
|
||||
FROM `{{FakeTables.User}}` u
|
||||
LEFT JOIN `{{FakeTables.Organization}}` o ON o.`Id` = u.`OrganizationId` AND o.`IsDeleted` = 0
|
||||
WHERE u.`Id` = {0} AND u.`IsDeleted` = 0
|
||||
FROM `{FakeTables.User}` u
|
||||
LEFT JOIN `{FakeTables.Organization}` o ON o.`Id` = u.`OrganizationId` AND o.`IsDeleted` = 0
|
||||
WHERE u.`Id` = {{0}} AND u.`IsDeleted` = 0
|
||||
LIMIT 1
|
||||
""", userId.ToString()).FirstOrDefaultAsync(cancellationToken)
|
||||
", userId.ToString()).FirstOrDefaultAsync(cancellationToken)
|
||||
?? throw new BusinessException("用户不存在");
|
||||
|
||||
var now = DateTime.UtcNow;
|
||||
var orgRows = await dbContext.Database.SqlQueryRaw<UserOrgPermRow>($$"""
|
||||
var orgRows = await dbContext.Database.SqlQueryRaw<UserOrgPermRow>($@"
|
||||
SELECT
|
||||
p.`Id` AS `Id`,
|
||||
p.`OrganizationId` AS `OrganizationId`,
|
||||
@ -45,11 +45,11 @@ public class DataPermStore(FakeRbacDbContext dbContext, DataPermContextCache cac
|
||||
p.`ExpireTime` AS `ExpireTime`,
|
||||
p.`IsTemporary` AS `IsTemporary`
|
||||
FROM `user_org_perm` p
|
||||
LEFT JOIN `{{FakeTables.Organization}}` o ON o.`Id` = p.`OrganizationId` AND o.`IsDeleted` = 0
|
||||
WHERE p.`IsDeleted` = 0 AND p.`UserId` = {0}
|
||||
""", userId.ToString()).ToListAsync(cancellationToken);
|
||||
LEFT JOIN `{FakeTables.Organization}` o ON o.`Id` = p.`OrganizationId` AND o.`IsDeleted` = 0
|
||||
WHERE p.`IsDeleted` = 0 AND p.`UserId` = {{0}}
|
||||
", userId.ToString()).ToListAsync(cancellationToken);
|
||||
|
||||
var scopeRows = await dbContext.Database.SqlQueryRaw<UserDataScopeRow>($"""
|
||||
var scopeRows = await dbContext.Database.SqlQueryRaw<UserDataScopeRow>("""
|
||||
SELECT p.`Id` AS `Id`, p.`DataScope` AS `DataScope`, p.`DataResourceCode` AS `DataResourceCode`, p.`ExpireTime` AS `ExpireTime`
|
||||
FROM `user_data_scope` p
|
||||
WHERE p.`IsDeleted` = 0 AND p.`UserId` = {0}
|
||||
@ -128,20 +128,20 @@ public class DataPermStore(FakeRbacDbContext dbContext, DataPermContextCache cac
|
||||
|
||||
public async Task<RoleDataPermDto> GetRoleDataPermAsync(Guid roleId, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var role = await dbContext.Database.SqlQueryRaw<RoleHeaderRow>("""
|
||||
var role = await dbContext.Database.SqlQueryRaw<RoleHeaderRow>($@"
|
||||
SELECT r.`Id` AS `RoleId`, r.`Name` AS `RoleName`
|
||||
FROM `{{FakeTables.Role}}` r
|
||||
WHERE r.`Id` = {0} AND r.`IsDeleted` = 0
|
||||
FROM `{FakeTables.Role}` r
|
||||
WHERE r.`Id` = {{0}} AND r.`IsDeleted` = 0
|
||||
LIMIT 1
|
||||
""", roleId.ToString()).FirstOrDefaultAsync(cancellationToken)
|
||||
", roleId.ToString()).FirstOrDefaultAsync(cancellationToken)
|
||||
?? throw new BusinessException("角色不存在");
|
||||
|
||||
var orgRows = await dbContext.Database.SqlQueryRaw<RoleOrgPermRow>($$"""
|
||||
var orgRows = await dbContext.Database.SqlQueryRaw<RoleOrgPermRow>($@"
|
||||
SELECT p.`Id` AS `Id`, p.`OrganizationId` AS `OrganizationId`, o.`Name` AS `OrganizationName`, p.`OrgScope` AS `OrgScope`
|
||||
FROM `role_org_perm` p
|
||||
LEFT JOIN `{{FakeTables.Organization}}` o ON o.`Id` = p.`OrganizationId` AND o.`IsDeleted` = 0
|
||||
WHERE p.`IsDeleted` = 0 AND p.`RoleId` = {0}
|
||||
""", roleId.ToString()).ToListAsync(cancellationToken);
|
||||
LEFT JOIN `{FakeTables.Organization}` o ON o.`Id` = p.`OrganizationId` AND o.`IsDeleted` = 0
|
||||
WHERE p.`IsDeleted` = 0 AND p.`RoleId` = {{0}}
|
||||
", roleId.ToString()).ToListAsync(cancellationToken);
|
||||
|
||||
var scopeRows = await dbContext.Database.SqlQueryRaw<RoleDataScopeRow>("""
|
||||
SELECT p.`Id` AS `Id`, p.`DataScope` AS `DataScope`, p.`DataResourceCode` AS `DataResourceCode`
|
||||
@ -521,7 +521,7 @@ public class DataPermStore(FakeRbacDbContext dbContext, DataPermContextCache cac
|
||||
|
||||
public async Task<List<FieldMaskItemDto>> GetFieldMasksAsync(string dataResourceCode, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var sql = $"""
|
||||
var sql = """
|
||||
SELECT m.`FieldName` AS `FieldName`, m.`SecretLevel` AS `SecretLevel`, m.`MaskType` AS `MaskType`, m.`MaskPattern` AS `MaskPattern`
|
||||
FROM `data_perm_field_mask` m
|
||||
WHERE m.`IsDeleted` = 0 AND m.`IsEnabled` = 1 AND m.`DataResourceCode` = {0}
|
||||
@ -641,7 +641,7 @@ public class DataPermStore(FakeRbacDbContext dbContext, DataPermContextCache cac
|
||||
|
||||
public async Task<DataPermTemplateDetailDto> GetTemplateDetailAsync(Guid templateId, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var headerSql = $"""
|
||||
var headerSql = """
|
||||
SELECT t.`Id` AS `Id`, t.`Name` AS `Name`, t.`Code` AS `Code`, t.`Description` AS `Description`,
|
||||
t.`RoleCode` AS `RoleCode`, t.`IsBuiltIn` AS `IsBuiltIn`
|
||||
FROM `data_perm_template` t
|
||||
@ -653,7 +653,7 @@ public class DataPermStore(FakeRbacDbContext dbContext, DataPermContextCache cac
|
||||
.FirstOrDefaultAsync(cancellationToken)
|
||||
?? throw new BusinessException("模板不存在");
|
||||
|
||||
var itemSql = $"""
|
||||
var itemSql = """
|
||||
SELECT i.`Id` AS `Id`, i.`DimensionType` AS `DimensionType`, CAST(i.`ItemContent` AS CHAR) AS `ItemContentJson`, i.`SortOrder` AS `SortOrder`
|
||||
FROM `data_perm_template_item` i
|
||||
WHERE i.`TemplateId` = {0} AND i.`IsDeleted` = 0
|
||||
|
||||
@ -42,17 +42,17 @@ public class CustomerServiceAdvisorResolver(FakeRbacDbContext dbContext) : IScop
|
||||
return null;
|
||||
}
|
||||
|
||||
var sql = $$"""
|
||||
var sql = $@"
|
||||
SELECT
|
||||
u.`Name` AS `Name`,
|
||||
u.`WechatId` AS `WechatId`,
|
||||
u.`WechatQrCode` AS `WechatQrCode`,
|
||||
u.`WecomKfUrl` AS `WecomKfUrl`
|
||||
FROM `{{FakeTables.User}}` u
|
||||
FROM `{FakeTables.User}` u
|
||||
WHERE u.`IsDeleted` = 0
|
||||
AND u.`userid` = {0}
|
||||
AND u.`userid` = {{0}}
|
||||
LIMIT 1
|
||||
""";
|
||||
";
|
||||
return await dbContext.Database
|
||||
.SqlQueryRaw<AdvisorRow>(sql, userId)
|
||||
.FirstOrDefaultAsync(cancellationToken);
|
||||
@ -60,18 +60,18 @@ public class CustomerServiceAdvisorResolver(FakeRbacDbContext dbContext) : IScop
|
||||
|
||||
private async Task<AdvisorRow?> FindByNameOrAccountAsync(string key, CancellationToken cancellationToken)
|
||||
{
|
||||
var sql = $$"""
|
||||
var sql = $@"
|
||||
SELECT
|
||||
u.`Name` AS `Name`,
|
||||
u.`WechatId` AS `WechatId`,
|
||||
u.`WechatQrCode` AS `WechatQrCode`,
|
||||
u.`WecomKfUrl` AS `WecomKfUrl`
|
||||
FROM `{{FakeTables.User}}` u
|
||||
FROM `{FakeTables.User}` u
|
||||
WHERE u.`IsDeleted` = 0
|
||||
AND (u.`Name` = {0} OR u.`Account` = {0})
|
||||
AND (u.`Name` = {{0}} OR u.`Account` = {{0}})
|
||||
ORDER BY u.`CreateTime` ASC
|
||||
LIMIT 1
|
||||
""";
|
||||
";
|
||||
|
||||
return await dbContext.Database
|
||||
.SqlQueryRaw<AdvisorRow>(sql, key)
|
||||
|
||||
@ -8,19 +8,19 @@ namespace Oms.Application.Rbac;
|
||||
|
||||
public class InternalUserRepository(FakeRbacDbContext dbContext) : IScopedDependency
|
||||
{
|
||||
private static readonly string InternalUserFilter = $$"""
|
||||
private static readonly string InternalUserFilter = $@"
|
||||
(
|
||||
NOT EXISTS (SELECT 1 FROM `{{FakeTables.UserRole}}` ur0 WHERE ur0.`UserId` = u.`Id`)
|
||||
NOT EXISTS (SELECT 1 FROM `{FakeTables.UserRole}` ur0 WHERE ur0.`UserId` = u.`Id`)
|
||||
OR EXISTS (
|
||||
SELECT 1
|
||||
FROM `{{FakeTables.UserRole}}` ur
|
||||
INNER JOIN `{{FakeTables.Role}}` r ON r.`Id` = ur.`RoleId` AND r.`IsDeleted` = 0
|
||||
FROM `{FakeTables.UserRole}` ur
|
||||
INNER JOIN `{FakeTables.Role}` r ON r.`Id` = ur.`RoleId` AND r.`IsDeleted` = 0
|
||||
WHERE ur.`UserId` = u.`Id`
|
||||
AND r.`Code` <> 'Customer'
|
||||
AND r.`Code` NOT LIKE 'CustomerSub\_%'
|
||||
)
|
||||
)
|
||||
""";
|
||||
";
|
||||
public async Task<InternalUserListResultDto> GetInternalUsersAsync(
|
||||
string? keyword,
|
||||
Guid? organizationId,
|
||||
@ -45,16 +45,16 @@ public class InternalUserRepository(FakeRbacDbContext dbContext) : IScopedDepend
|
||||
args.Add(organizationId.Value.ToString());
|
||||
}
|
||||
|
||||
var countSql = $$"""
|
||||
var countSql = $@"
|
||||
SELECT COUNT(*) AS `Value`
|
||||
FROM `{{FakeTables.User}}` u
|
||||
FROM `{FakeTables.User}` u
|
||||
{where}
|
||||
""";
|
||||
";
|
||||
var total = await dbContext.Database.SqlQueryRaw<long>(countSql, args.ToArray())
|
||||
.FirstAsync(cancellationToken);
|
||||
|
||||
var offset = Math.Max(page - 1, 0) * pageSize;
|
||||
var listSql = $$"""
|
||||
var listSql = $@"
|
||||
SELECT
|
||||
u.`Id` AS `Id`,
|
||||
u.`Name` AS `Name`,
|
||||
@ -67,12 +67,12 @@ public class InternalUserRepository(FakeRbacDbContext dbContext) : IScopedDepend
|
||||
u.`OrganizationId` AS `OrganizationId`,
|
||||
o.`Name` AS `OrganizationName`,
|
||||
u.`CreateTime` AS `CreatedAt`
|
||||
FROM `{{FakeTables.User}}` u
|
||||
LEFT JOIN `{{FakeTables.Organization}}` o ON o.`Id` = u.`OrganizationId` AND o.`IsDeleted` = 0
|
||||
FROM `{FakeTables.User}` u
|
||||
LEFT JOIN `{FakeTables.Organization}` o ON o.`Id` = u.`OrganizationId` AND o.`IsDeleted` = 0
|
||||
{where}
|
||||
ORDER BY u.`CreateTime` DESC
|
||||
LIMIT {pageSize} OFFSET {offset}
|
||||
""";
|
||||
";
|
||||
var rows = await dbContext.Database.SqlQueryRaw<InternalUserRow>(listSql, args.ToArray())
|
||||
.ToListAsync(cancellationToken);
|
||||
if (rows.Count == 0)
|
||||
@ -111,17 +111,17 @@ public class InternalUserRepository(FakeRbacDbContext dbContext) : IScopedDepend
|
||||
}
|
||||
|
||||
var inClause = string.Join(",", userIds.Select(x => $"'{x}'"));
|
||||
var sql = $$"""
|
||||
var sql = $@"
|
||||
SELECT
|
||||
ur.`UserId` AS `UserId`,
|
||||
r.`Id` AS `RoleId`,
|
||||
r.`Name` AS `RoleName`,
|
||||
r.`Code` AS `RoleCode`
|
||||
FROM `{{FakeTables.UserRole}}` ur
|
||||
INNER JOIN `{{FakeTables.Role}}` r ON r.`Id` = ur.`RoleId` AND r.`IsDeleted` = 0
|
||||
FROM `{FakeTables.UserRole}` ur
|
||||
INNER JOIN `{FakeTables.Role}` r ON r.`Id` = ur.`RoleId` AND r.`IsDeleted` = 0
|
||||
WHERE ur.`UserId` IN ({inClause})
|
||||
ORDER BY r.`Name`
|
||||
""";
|
||||
";
|
||||
|
||||
var roleRows = await dbContext.Database.SqlQueryRaw<UserRoleRow>(sql).ToListAsync(cancellationToken);
|
||||
return roleRows
|
||||
|
||||
@ -16,17 +16,17 @@ public class UserProfileRepository(FakeRbacDbContext dbContext) : IScopedDepende
|
||||
|
||||
public async Task<UserProfileData?> GetAsync(Guid userId, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var sql = $$"""
|
||||
var sql = $@"
|
||||
SELECT
|
||||
u.`Phone` AS `Phone`,
|
||||
u.`EmployeeNo` AS `EmployeeNo`,
|
||||
u.`WechatId` AS `WechatId`,
|
||||
u.`WechatQrCode` AS `WechatQrCode`,
|
||||
u.`WecomKfUrl` AS `WecomKfUrl`
|
||||
FROM `{{FakeTables.User}}` u
|
||||
WHERE u.`Id` = {0} AND u.`IsDeleted` = 0
|
||||
FROM `{FakeTables.User}` u
|
||||
WHERE u.`Id` = {{0}} AND u.`IsDeleted` = 0
|
||||
LIMIT 1
|
||||
""";
|
||||
";
|
||||
var row = await dbContext.Database
|
||||
.SqlQueryRaw<UserProfileRow>(sql, userId.ToString())
|
||||
.FirstOrDefaultAsync(cancellationToken);
|
||||
@ -56,7 +56,7 @@ public class UserProfileRepository(FakeRbacDbContext dbContext) : IScopedDepende
|
||||
}
|
||||
|
||||
var inClause = string.Join(",", userIds.Select(x => $"'{x}'"));
|
||||
var sql = $$"""
|
||||
var sql = $@"
|
||||
SELECT
|
||||
u.`Id` AS `UserId`,
|
||||
u.`Phone` AS `Phone`,
|
||||
@ -64,9 +64,9 @@ public class UserProfileRepository(FakeRbacDbContext dbContext) : IScopedDepende
|
||||
u.`WechatId` AS `WechatId`,
|
||||
u.`WechatQrCode` AS `WechatQrCode`,
|
||||
u.`WecomKfUrl` AS `WecomKfUrl`
|
||||
FROM `{{FakeTables.User}}` u
|
||||
FROM `{FakeTables.User}` u
|
||||
WHERE u.`Id` IN ({inClause}) AND u.`IsDeleted` = 0
|
||||
""";
|
||||
";
|
||||
|
||||
var rows = await dbContext.Database.SqlQueryRaw<UserProfileListRow>(sql).ToListAsync(cancellationToken);
|
||||
return rows.ToDictionary(
|
||||
@ -83,16 +83,16 @@ public class UserProfileRepository(FakeRbacDbContext dbContext) : IScopedDepende
|
||||
|
||||
public async Task SaveAsync(Guid userId, UserProfileData profile, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var sql = $$"""
|
||||
UPDATE `{{FakeTables.User}}`
|
||||
var sql = $@"
|
||||
UPDATE `{FakeTables.User}`
|
||||
SET
|
||||
`Phone` = {1},
|
||||
`EmployeeNo` = {2},
|
||||
`WechatId` = {3},
|
||||
`WechatQrCode` = {4},
|
||||
`WecomKfUrl` = {5}
|
||||
WHERE `Id` = {0} AND `IsDeleted` = 0
|
||||
""";
|
||||
`Phone` = {{1}},
|
||||
`EmployeeNo` = {{2}},
|
||||
`WechatId` = {{3}},
|
||||
`WechatQrCode` = {{4}},
|
||||
`WecomKfUrl` = {{5}}
|
||||
WHERE `Id` = {{0}} AND `IsDeleted` = 0
|
||||
";
|
||||
await dbContext.Database.ExecuteSqlRawAsync(
|
||||
sql,
|
||||
[
|
||||
@ -112,15 +112,15 @@ public class UserProfileRepository(FakeRbacDbContext dbContext) : IScopedDepende
|
||||
UserProfileData profile,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
var sql = $$"""
|
||||
UPDATE `{{FakeTables.User}}`
|
||||
var sql = $@"
|
||||
UPDATE `{FakeTables.User}`
|
||||
SET
|
||||
`Phone` = {1},
|
||||
`WechatId` = {2},
|
||||
`WechatQrCode` = {3},
|
||||
`WecomKfUrl` = {4}
|
||||
WHERE `Id` = {0} AND `IsDeleted` = 0
|
||||
""";
|
||||
`Phone` = {{1}},
|
||||
`WechatId` = {{2}},
|
||||
`WechatQrCode` = {{3}},
|
||||
`WecomKfUrl` = {{4}}
|
||||
WHERE `Id` = {{0}} AND `IsDeleted` = 0
|
||||
";
|
||||
|
||||
await dbContext.Database.ExecuteSqlRawAsync(
|
||||
sql,
|
||||
@ -141,19 +141,19 @@ public class UserProfileRepository(FakeRbacDbContext dbContext) : IScopedDepende
|
||||
{
|
||||
var normalized = employeeNo.Trim().ToUpperInvariant();
|
||||
var sql = excludeUserId.HasValue
|
||||
? $$"""
|
||||
? $@"
|
||||
SELECT COUNT(*) AS `Value`
|
||||
FROM `{{FakeTables.User}}` u
|
||||
FROM `{FakeTables.User}` u
|
||||
WHERE u.`IsDeleted` = 0
|
||||
AND u.`EmployeeNo` = {0}
|
||||
AND u.`Id` <> {1}
|
||||
"""
|
||||
: $$"""
|
||||
AND u.`EmployeeNo` = {{0}}
|
||||
AND u.`Id` <> {{1}}
|
||||
"
|
||||
: $@"
|
||||
SELECT COUNT(*) AS `Value`
|
||||
FROM `{{FakeTables.User}}` u
|
||||
FROM `{FakeTables.User}` u
|
||||
WHERE u.`IsDeleted` = 0
|
||||
AND u.`EmployeeNo` = {0}
|
||||
""";
|
||||
AND u.`EmployeeNo` = {{0}}
|
||||
";
|
||||
|
||||
var count = excludeUserId.HasValue
|
||||
? await dbContext.Database.SqlQueryRaw<long>(sql, normalized, excludeUserId.Value.ToString())
|
||||
@ -165,13 +165,13 @@ public class UserProfileRepository(FakeRbacDbContext dbContext) : IScopedDepende
|
||||
|
||||
public async Task<string> GenerateNextEmployeeNoAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
var sql = $$"""
|
||||
var sql = $@"
|
||||
SELECT u.`EmployeeNo` AS `EmployeeNo`
|
||||
FROM `{{FakeTables.User}}` u
|
||||
FROM `{FakeTables.User}` u
|
||||
WHERE u.`IsDeleted` = 0
|
||||
AND u.`EmployeeNo` IS NOT NULL
|
||||
AND u.`EmployeeNo` <> ''
|
||||
""";
|
||||
";
|
||||
|
||||
var rows = await dbContext.Database.SqlQueryRaw<EmployeeNoRow>(sql).ToListAsync(cancellationToken);
|
||||
var max = 0;
|
||||
|
||||
@ -25,19 +25,19 @@ public class NoticeService : ApplicationService
|
||||
private const string ReceiverTypeUser = "user";
|
||||
private const string ReceiverTypeCustomer = "customer";
|
||||
|
||||
private static readonly string InternalUserFilter = $$"""
|
||||
private static readonly string InternalUserFilter = $@"
|
||||
(
|
||||
NOT EXISTS (SELECT 1 FROM `{{FakeTables.UserRole}}` ur0 WHERE ur0.`UserId` = u.`Id`)
|
||||
NOT EXISTS (SELECT 1 FROM `{FakeTables.UserRole}` ur0 WHERE ur0.`UserId` = u.`Id`)
|
||||
OR EXISTS (
|
||||
SELECT 1
|
||||
FROM `{{FakeTables.UserRole}}` ur
|
||||
INNER JOIN `{{FakeTables.Role}}` r ON r.`Id` = ur.`RoleId` AND r.`IsDeleted` = 0
|
||||
FROM `{FakeTables.UserRole}` ur
|
||||
INNER JOIN `{FakeTables.Role}` r ON r.`Id` = ur.`RoleId` AND r.`IsDeleted` = 0
|
||||
WHERE ur.`UserId` = u.`Id`
|
||||
AND r.`Code` <> 'Customer'
|
||||
AND r.`Code` NOT LIKE 'CustomerSub\_%'
|
||||
)
|
||||
)
|
||||
""";
|
||||
";
|
||||
private INoticeRepository NoticeRepository => LazyServiceProvider.GetRequiredService<INoticeRepository>();
|
||||
private INoticeReadRepository NoticeReadRepository => LazyServiceProvider.GetRequiredService<INoticeReadRepository>();
|
||||
private ICustomerRepository CustomerRepository => LazyServiceProvider.GetRequiredService<ICustomerRepository>();
|
||||
@ -239,19 +239,19 @@ public class NoticeService : ApplicationService
|
||||
args.Add(pattern);
|
||||
}
|
||||
|
||||
var countSql = $"SELECT COUNT(*) AS `Value` FROM `{{FakeTables.User}}` u {where}";
|
||||
var countSql = $"SELECT COUNT(*) AS `Value` FROM `{FakeTables.User}` u {where}";
|
||||
var total = await RbacDbContext.Database.SqlQueryRaw<long>(countSql, args.ToArray()).FirstAsync();
|
||||
var offset = Math.Max(pageIndex - 1, 0) * pageSize;
|
||||
var listSql = $$"""
|
||||
var listSql = $@"
|
||||
SELECT
|
||||
u.`userid` AS `Value`,
|
||||
u.`Name` AS `Label`,
|
||||
u.`Account` AS `Extra`
|
||||
FROM `{{FakeTables.User}}` u
|
||||
FROM `{FakeTables.User}` u
|
||||
{where}
|
||||
ORDER BY u.`Name`, u.`userid`
|
||||
LIMIT {pageSize} OFFSET {offset}
|
||||
""";
|
||||
";
|
||||
var items = await RbacDbContext.Database.SqlQueryRaw<NoticeReceiverOptionRow>(listSql, args.ToArray())
|
||||
.Select(x => new NoticeReceiverOptionOutput
|
||||
{
|
||||
@ -465,7 +465,7 @@ public class NoticeService : ApplicationService
|
||||
return [];
|
||||
}
|
||||
|
||||
var sql = $"SELECT `userid` AS `UserId` FROM `{{FakeTables.User}}` WHERE `IsDeleted` = 0 AND `userid` IN ({string.Join(",", userIds)})";
|
||||
var sql = $"SELECT `userid` AS `UserId` FROM `{FakeTables.User}` WHERE `IsDeleted` = 0 AND `userid` IN ({string.Join(",", userIds)})";
|
||||
return await RbacDbContext.Database.SqlQueryRaw<UserIdQueryResult>(sql)
|
||||
.Select(x => x.UserId)
|
||||
.ToListAsync();
|
||||
|
||||
@ -169,12 +169,12 @@ public static class OmsRbacRegistrationGuard
|
||||
|
||||
var hit = await rbacDbContext.Database
|
||||
.SqlQueryRaw<int?>(
|
||||
$$"""
|
||||
$@"
|
||||
SELECT 1 AS Value
|
||||
FROM `{{FakeTables.Organization}}`
|
||||
WHERE `Id` = {0} AND `IsDeleted` = 0
|
||||
FROM `{FakeTables.Organization}`
|
||||
WHERE `Id` = {{0}} AND `IsDeleted` = 0
|
||||
LIMIT 1
|
||||
""", organizationId.Value.ToString())
|
||||
", organizationId.Value.ToString())
|
||||
.FirstOrDefaultAsync(cancellationToken);
|
||||
|
||||
if (!hit.HasValue)
|
||||
@ -203,12 +203,12 @@ public static class OmsRbacRegistrationGuard
|
||||
{
|
||||
var hit = await rbacDbContext.Database
|
||||
.SqlQueryRaw<int?>(
|
||||
$$"""
|
||||
$@"
|
||||
SELECT 1 AS Value
|
||||
FROM `{{FakeTables.Role}}`
|
||||
WHERE `Id` = {0} AND `IsDeleted` = 0
|
||||
FROM `{FakeTables.Role}`
|
||||
WHERE `Id` = {{0}} AND `IsDeleted` = 0
|
||||
LIMIT 1
|
||||
""", roleId.ToString())
|
||||
", roleId.ToString())
|
||||
.FirstOrDefaultAsync(cancellationToken);
|
||||
|
||||
if (!hit.HasValue)
|
||||
@ -494,7 +494,7 @@ public static class OmsRbacRegistrationGuard
|
||||
{
|
||||
var hit = await rbacDbContext.Database
|
||||
.SqlQueryRaw<int?>(
|
||||
$"SELECT 1 AS Value FROM `{{FakeTables.User}}` WHERE `Account` = {0} AND `Id` <> {1} LIMIT 1",
|
||||
$"SELECT 1 AS Value FROM `{FakeTables.User}` WHERE `Account` = {{0}} AND `Id` <> {{1}} LIMIT 1",
|
||||
account, id.ToString())
|
||||
.FirstOrDefaultAsync(cancellationToken);
|
||||
return hit.HasValue;
|
||||
@ -502,7 +502,7 @@ public static class OmsRbacRegistrationGuard
|
||||
|
||||
var any = await rbacDbContext.Database
|
||||
.SqlQueryRaw<int?>(
|
||||
$"SELECT 1 AS Value FROM `{{FakeTables.User}}` WHERE `Account` = {0} LIMIT 1", account)
|
||||
$"SELECT 1 AS Value FROM `{FakeTables.User}` WHERE `Account` = {{0}} LIMIT 1", account)
|
||||
.FirstOrDefaultAsync(cancellationToken);
|
||||
return any.HasValue;
|
||||
}
|
||||
@ -517,7 +517,7 @@ public static class OmsRbacRegistrationGuard
|
||||
{
|
||||
var hit = await rbacDbContext.Database
|
||||
.SqlQueryRaw<int?>(
|
||||
$"SELECT 1 AS Value FROM `{{FakeTables.User}}` WHERE `Email` = {0} AND `Id` <> {1} LIMIT 1",
|
||||
$"SELECT 1 AS Value FROM `{FakeTables.User}` WHERE `Email` = {{0}} AND `Id` <> {{1}} LIMIT 1",
|
||||
email, id.ToString())
|
||||
.FirstOrDefaultAsync(cancellationToken);
|
||||
return hit.HasValue;
|
||||
@ -525,7 +525,7 @@ public static class OmsRbacRegistrationGuard
|
||||
|
||||
var any = await rbacDbContext.Database
|
||||
.SqlQueryRaw<int?>(
|
||||
$"SELECT 1 AS Value FROM `{{FakeTables.User}}` WHERE `Email` = {0} LIMIT 1", email)
|
||||
$"SELECT 1 AS Value FROM `{FakeTables.User}` WHERE `Email` = {{0}} LIMIT 1", email)
|
||||
.FirstOrDefaultAsync(cancellationToken);
|
||||
return any.HasValue;
|
||||
}
|
||||
@ -540,7 +540,7 @@ public static class OmsRbacRegistrationGuard
|
||||
{
|
||||
var hit = await rbacDbContext.Database
|
||||
.SqlQueryRaw<int?>(
|
||||
$"SELECT 1 AS Value FROM `{{FakeTables.User}}` WHERE `Phone` = {0} AND `Id` <> {1} LIMIT 1",
|
||||
$"SELECT 1 AS Value FROM `{FakeTables.User}` WHERE `Phone` = {{0}} AND `Id` <> {{1}} LIMIT 1",
|
||||
phone, id.ToString())
|
||||
.FirstOrDefaultAsync(cancellationToken);
|
||||
return hit.HasValue;
|
||||
@ -548,7 +548,7 @@ public static class OmsRbacRegistrationGuard
|
||||
|
||||
var any = await rbacDbContext.Database
|
||||
.SqlQueryRaw<int?>(
|
||||
$"SELECT 1 AS Value FROM `{{FakeTables.User}}` WHERE `Phone` = {0} LIMIT 1", phone)
|
||||
$"SELECT 1 AS Value FROM `{FakeTables.User}` WHERE `Phone` = {{0}} LIMIT 1", phone)
|
||||
.FirstOrDefaultAsync(cancellationToken);
|
||||
return any.HasValue;
|
||||
}
|
||||
@ -563,7 +563,7 @@ public static class OmsRbacRegistrationGuard
|
||||
{
|
||||
var hit = await rbacDbContext.Database
|
||||
.SqlQueryRaw<int?>(
|
||||
$"SELECT 1 AS Value FROM `{{FakeTables.User}}` WHERE `WechatId` = {0} AND `Id` <> {1} LIMIT 1",
|
||||
$"SELECT 1 AS Value FROM `{FakeTables.User}` WHERE `WechatId` = {{0}} AND `Id` <> {{1}} LIMIT 1",
|
||||
wechatId, id.ToString())
|
||||
.FirstOrDefaultAsync(cancellationToken);
|
||||
return hit.HasValue;
|
||||
@ -571,7 +571,7 @@ public static class OmsRbacRegistrationGuard
|
||||
|
||||
var any = await rbacDbContext.Database
|
||||
.SqlQueryRaw<int?>(
|
||||
$"SELECT 1 AS Value FROM `{{FakeTables.User}}` WHERE `WechatId` = {0} LIMIT 1", wechatId)
|
||||
$"SELECT 1 AS Value FROM `{FakeTables.User}` WHERE `WechatId` = {{0}} LIMIT 1", wechatId)
|
||||
.FirstOrDefaultAsync(cancellationToken);
|
||||
return any.HasValue;
|
||||
}
|
||||
|
||||
@ -45,14 +45,14 @@ public static class StaffAdvisorBinder
|
||||
string key,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
var sql = $$"""
|
||||
var sql = $@"
|
||||
SELECT u.`Account` AS `Account`
|
||||
FROM `{{FakeTables.User}}` u
|
||||
FROM `{FakeTables.User}` u
|
||||
WHERE u.`IsDeleted` = 0
|
||||
AND u.`Account` = {0}
|
||||
AND u.`Account` = {{0}}
|
||||
ORDER BY u.`CreateTime` ASC
|
||||
LIMIT 1
|
||||
""";
|
||||
";
|
||||
|
||||
var row = await rbacDbContext.Database
|
||||
.SqlQueryRaw<AccountRow>(sql, key)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user