using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using ZhonTai.Admin.Core.Db; using ZhonTai.Admin.Domain.DictionaryType; using ZhonTai.Admin.Domain.Dictionary; using ZhonTai.Admin.Domain.Api; using ZhonTai.Admin.Domain.Permission; using ZhonTai.Admin.Domain.User; using ZhonTai.Admin.Domain.Role; using ZhonTai.Admin.Domain.UserRole; using ZhonTai.Admin.Domain.RolePermission; using ZhonTai.Admin.Domain.Tenant; using ZhonTai.Admin.Domain.TenantPermission; using ZhonTai.Admin.Domain.PermissionApi; using ZhonTai.Admin.Domain.View; using ZhonTai.Admin.Core.Configs; using ZhonTai.Common.Extensions; using ZhonTai.Admin.Domain.Staff; using ZhonTai.Admin.Domain.Org; using ZhonTai.Admin.Core.Db.Data; using FreeSql; using ZhonTai.Admin.Domain; namespace ZhonTai.Admin.Repositories; public class CustomGenerateData : GenerateData, IGenerateData { public virtual async Task GenerateDataAsync(IFreeSql db, AppConfig appConfig) { #region 读取数据 //admin #region 数据字典 var dictionaryTypes = db.Queryable().ToListIgnore(a => new { a.CreatedTime, a.CreatedUserId, a.CreatedUserName, a.ModifiedTime, a.ModifiedUserId, a.ModifiedUserName, a.Version }); var dictionaries = db.Queryable().ToListIgnore(a => new { a.CreatedTime, a.CreatedUserId, a.CreatedUserName, a.ModifiedTime, a.ModifiedUserId, a.ModifiedUserName, a.Version }); #endregion #region 接口 var apis = db.Queryable().ToListIgnore(a => new { a.CreatedTime, a.CreatedUserId, a.CreatedUserName, a.ModifiedTime, a.ModifiedUserId, a.ModifiedUserName, a.Version }); var apiTree = apis.Clone().ToTree((r, c) => { return c.ParentId == 0; }, (r, c) => { return r.Id == c.ParentId; }, (r, datalist) => { r.Childs ??= new List(); r.Childs.AddRange(datalist); }); #endregion #region 视图 var views = db.Queryable().ToListIgnore(a => new { a.CreatedTime, a.CreatedUserId, a.CreatedUserName, a.ModifiedTime, a.ModifiedUserId, a.ModifiedUserName, a.Version }); var viewTree = views.Clone().ToTree((r, c) => { return c.ParentId == 0; }, (r, c) => { return r.Id == c.ParentId; }, (r, datalist) => { r.Childs ??= new List(); r.Childs.AddRange(datalist); }); #endregion #region 权限 var permissions = db.Queryable().ToListIgnore(a => new { a.CreatedTime, a.CreatedUserId, a.CreatedUserName, a.ModifiedTime, a.ModifiedUserId, a.ModifiedUserName, a.Version }); var permissionTree = permissions.Clone().ToTree((r, c) => { return c.ParentId == 0; }, (r, c) => { return r.Id == c.ParentId; }, (r, datalist) => { r.Childs ??= new List(); r.Childs.AddRange(datalist); }); #endregion #region 用户 var users = db.Queryable().ToListIgnore(a => new { a.CreatedTime, a.CreatedUserId, a.CreatedUserName, a.ModifiedTime, a.ModifiedUserId, a.ModifiedUserName, a.Version }); #endregion #region 员工 var staffs = db.Queryable().ToListIgnore(a => new { a.CreatedTime, a.CreatedUserId, a.CreatedUserName, a.ModifiedTime, a.ModifiedUserId, a.ModifiedUserName, a.Version }); #endregion #region 部门 var orgs = db.Queryable().ToListIgnore(a => new { a.CreatedTime, a.CreatedUserId, a.CreatedUserName, a.ModifiedTime, a.ModifiedUserId, a.ModifiedUserName, a.Version }); var orgTree = orgs.Clone().ToTree((r, c) => { return c.ParentId == 0; }, (r, c) => { return r.Id == c.ParentId; }, (r, datalist) => { r.Childs ??= new List(); r.Childs.AddRange(datalist); }); #endregion #region 角色 var roles = db.Queryable().ToListIgnore(a => new { a.CreatedTime, a.CreatedUserId, a.CreatedUserName, a.ModifiedTime, a.ModifiedUserId, a.ModifiedUserName, a.Version }); #endregion #region 用户角色 var userRoles = await db.Queryable().ToListAsync(a => new { a.Id, a.UserId, a.RoleId }); #endregion #region 用户部门 var userOrgs = await db.Queryable().ToListAsync(a => new { a.Id, a.StaffId, a.OrgId }); #endregion #region 角色权限 var rolePermissions = await db.Queryable().ToListAsync(a => new { a.Id, a.RoleId, a.PermissionId }); #endregion #region 租户 var tenants = db.Queryable().ToListIgnore(a => new { a.CreatedTime, a.CreatedUserId, a.CreatedUserName, a.ModifiedTime, a.ModifiedUserId, a.ModifiedUserName, a.Version }); #endregion #region 租户权限 var tenantPermissions = await db.Queryable().ToListAsync(a => new { a.Id, a.TenantId, a.PermissionId }); #endregion #region 权限接口 var permissionApis = await db.Queryable().ToListAsync(a => new { a.Id, a.PermissionId, a.ApiId }); #endregion #endregion #region 生成数据 var isTenant = appConfig.Tenant; SaveDataToJsonFile(dictionaries, isTenant); SaveDataToJsonFile(dictionaryTypes, isTenant); SaveDataToJsonFile(users, isTenant); SaveDataToJsonFile(roles, isTenant); SaveDataToJsonFile(orgTree, isTenant); SaveDataToJsonFile(staffs, isTenant); if (isTenant) { var tenantIds = tenants?.Select(a => a.Id)?.ToList(); SaveDataToJsonFile(dictionaries.Where(a => tenantIds.Contains(a.TenantId.Value))); SaveDataToJsonFile(dictionaryTypes.Where(a => tenantIds.Contains(a.TenantId.Value))); SaveDataToJsonFile(users.Where(a => tenantIds.Contains(a.TenantId.Value)), false); SaveDataToJsonFile(roles.Where(a => tenantIds.Contains(a.TenantId.Value))); orgTree = orgs.Clone().Where(a => tenantIds.Contains(a.TenantId.Value)).ToList().ToTree((r, c) => { return c.ParentId == 0; }, (r, c) => { return r.Id == c.ParentId; }, (r, datalist) => { r.Childs ??= new List(); r.Childs.AddRange(datalist); }); SaveDataToJsonFile(orgTree); SaveDataToJsonFile(staffs.Where(a => tenantIds.Contains(a.TenantId.Value))); } SaveDataToJsonFile(userRoles); SaveDataToJsonFile(userOrgs); SaveDataToJsonFile(apiTree); SaveDataToJsonFile(viewTree); SaveDataToJsonFile(permissionTree); SaveDataToJsonFile(permissionApis); SaveDataToJsonFile(rolePermissions); SaveDataToJsonFile(tenants); SaveDataToJsonFile(tenantPermissions, propsContractResolver: new PropsContractResolver()); #endregion } }