using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using ZhonTai.Admin.Core.Db; using ZhonTai.Admin.Domain.DictType; using ZhonTai.Admin.Domain.Dict; 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.UserStaff; using ZhonTai.Admin.Domain.Org; using ZhonTai.Admin.Core.Db.Data; using FreeSql; using ZhonTai.Admin.Domain.UserOrg; namespace ZhonTai.Admin.Repositories; public class CustomGenerateData : GenerateData, IGenerateData { public virtual async Task GenerateDataAsync(IFreeSql db, AppConfig appConfig) { #region 读取数据 //admin #region 数据字典 var dictionaryTypes = await db.Queryable().ToListAsync(); var dictionaries = await db.Queryable().ToListAsync(); #endregion #region 接口 var apis = await db.Queryable().ToListAsync(); 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 = await db.Queryable().ToListAsync(); 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 }); 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 = await db.Queryable().ToListAsync(); #endregion #region 员工 var staffs = await db.Queryable().ToListAsync(); #endregion #region 部门 var orgs = await db.Queryable().ToListAsync(); 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 = await db.Queryable().ToListAsync(); #endregion #region 用户角色 var userRoles = await db.Queryable().ToListAsync(); #endregion #region 用户部门 var userOrgs = await db.Queryable().ToListAsync(); #endregion #region 角色权限 var rolePermissions = await db.Queryable().ToListAsync(); #endregion #region 租户 var tenants = await db.Queryable().ToListAsync(); #endregion #region 租户权限 var tenantPermissions = await db.Queryable().ToListAsync(); #endregion #region 权限接口 var permissionApis = await db.Queryable().ToListAsync(); #endregion #endregion #region 生成数据 var isTenant = appConfig.Tenant; SaveDataToJsonFile(users, isTenant); SaveDataToJsonFile(roles, isTenant); SaveDataToJsonFile(orgTree, isTenant); SaveDataToJsonFile(staffs, isTenant); if (isTenant) { var tenantIds = tenants?.Select(a => a.Id)?.ToList(); 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(dictionaries); SaveDataToJsonFile(dictionaryTypes); SaveDataToJsonFile(userRoles); SaveDataToJsonFile(userOrgs); SaveDataToJsonFile(apiTree); SaveDataToJsonFile(viewTree); SaveDataToJsonFile(permissionTree); SaveDataToJsonFile(permissionApis); SaveDataToJsonFile(rolePermissions); SaveDataToJsonFile(tenants); SaveDataToJsonFile(tenantPermissions, propsContractResolver: new PropsContractResolver()); #endregion } }