1
0

CustomGenerateData.cs 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using ZhonTai.Admin.Core.Db;
  5. using ZhonTai.Admin.Domain.DictType;
  6. using ZhonTai.Admin.Domain.Dict;
  7. using ZhonTai.Admin.Domain.Api;
  8. using ZhonTai.Admin.Domain.Permission;
  9. using ZhonTai.Admin.Domain.User;
  10. using ZhonTai.Admin.Domain.Role;
  11. using ZhonTai.Admin.Domain.UserRole;
  12. using ZhonTai.Admin.Domain.RolePermission;
  13. using ZhonTai.Admin.Domain.Tenant;
  14. using ZhonTai.Admin.Domain.TenantPermission;
  15. using ZhonTai.Admin.Domain.PermissionApi;
  16. using ZhonTai.Admin.Domain.View;
  17. using ZhonTai.Admin.Core.Configs;
  18. using ZhonTai.Common.Extensions;
  19. using ZhonTai.Admin.Domain.UserStaff;
  20. using ZhonTai.Admin.Domain.Org;
  21. using ZhonTai.Admin.Core.Db.Data;
  22. using FreeSql;
  23. using ZhonTai.Admin.Domain.UserOrg;
  24. namespace ZhonTai.Admin.Repositories;
  25. public class CustomGenerateData : GenerateData, IGenerateData
  26. {
  27. public virtual async Task GenerateDataAsync(IFreeSql db, AppConfig appConfig)
  28. {
  29. #region 读取数据
  30. //admin
  31. #region 数据字典
  32. var dictionaryTypes = await db.Queryable<DictTypeEntity>().ToListAsync();
  33. var dictionaries = await db.Queryable<DictEntity>().ToListAsync();
  34. #endregion
  35. #region 接口
  36. var apis = await db.Queryable<ApiEntity>().ToListAsync();
  37. var apiTree = apis.Clone().ToTree((r, c) =>
  38. {
  39. return c.ParentId == 0;
  40. },
  41. (r, c) =>
  42. {
  43. return r.Id == c.ParentId;
  44. },
  45. (r, datalist) =>
  46. {
  47. r.Childs ??= new List<ApiEntity>();
  48. r.Childs.AddRange(datalist);
  49. });
  50. #endregion
  51. #region 视图
  52. var views = await db.Queryable<ViewEntity>().ToListAsync();
  53. var viewTree = views.Clone().ToTree((r, c) =>
  54. {
  55. return c.ParentId == 0;
  56. },
  57. (r, c) =>
  58. {
  59. return r.Id == c.ParentId;
  60. },
  61. (r, datalist) =>
  62. {
  63. r.Childs ??= new List<ViewEntity>();
  64. r.Childs.AddRange(datalist);
  65. });
  66. #endregion
  67. #region 权限
  68. var permissions = db.Queryable<PermissionEntity>().ToListIgnore(a => new
  69. {
  70. a.CreatedTime,
  71. a.CreatedUserId,
  72. a.CreatedUserName,
  73. a.ModifiedTime,
  74. a.ModifiedUserId,
  75. a.ModifiedUserName
  76. });
  77. var permissionTree = permissions.Clone().ToTree((r, c) =>
  78. {
  79. return c.ParentId == 0;
  80. },
  81. (r, c) =>
  82. {
  83. return r.Id == c.ParentId;
  84. },
  85. (r, datalist) =>
  86. {
  87. r.Childs ??= new List<PermissionEntity>();
  88. r.Childs.AddRange(datalist);
  89. });
  90. #endregion
  91. #region 用户
  92. var users = await db.Queryable<UserEntity>().ToListAsync();
  93. #endregion
  94. #region 员工
  95. var staffs = await db.Queryable<UserStaffEntity>().ToListAsync();
  96. #endregion
  97. #region 部门
  98. var orgs = await db.Queryable<OrgEntity>().ToListAsync();
  99. var orgTree = orgs.Clone().ToTree((r, c) =>
  100. {
  101. return c.ParentId == 0;
  102. },
  103. (r, c) =>
  104. {
  105. return r.Id == c.ParentId;
  106. },
  107. (r, datalist) =>
  108. {
  109. r.Childs ??= new List<OrgEntity>();
  110. r.Childs.AddRange(datalist);
  111. });
  112. #endregion
  113. #region 角色
  114. var roles = await db.Queryable<RoleEntity>().ToListAsync();
  115. #endregion
  116. #region 用户角色
  117. var userRoles = await db.Queryable<UserRoleEntity>().ToListAsync();
  118. #endregion
  119. #region 用户部门
  120. var userOrgs = await db.Queryable<UserOrgEntity>().ToListAsync();
  121. #endregion
  122. #region 角色权限
  123. var rolePermissions = await db.Queryable<RolePermissionEntity>().ToListAsync();
  124. #endregion
  125. #region 租户
  126. var tenants = await db.Queryable<TenantEntity>().ToListAsync();
  127. #endregion
  128. #region 租户权限
  129. var tenantPermissions = await db.Queryable<TenantPermissionEntity>().ToListAsync();
  130. #endregion
  131. #region 权限接口
  132. var permissionApis = await db.Queryable<PermissionApiEntity>().ToListAsync();
  133. #endregion
  134. #endregion
  135. #region 生成数据
  136. var isTenant = appConfig.Tenant;
  137. SaveDataToJsonFile<UserEntity>(users, isTenant);
  138. SaveDataToJsonFile<RoleEntity>(roles, isTenant);
  139. SaveDataToJsonFile<OrgEntity>(orgTree, isTenant);
  140. SaveDataToJsonFile<UserStaffEntity>(staffs, isTenant);
  141. if (isTenant)
  142. {
  143. var tenantIds = tenants?.Select(a => a.Id)?.ToList();
  144. SaveDataToJsonFile<UserEntity>(users.Where(a => tenantIds.Contains(a.TenantId.Value)), false);
  145. SaveDataToJsonFile<RoleEntity>(roles.Where(a => tenantIds.Contains(a.TenantId.Value)));
  146. orgTree = orgs.Clone().Where(a => tenantIds.Contains(a.TenantId.Value)).ToList().ToTree((r, c) =>
  147. {
  148. return c.ParentId == 0;
  149. },
  150. (r, c) =>
  151. {
  152. return r.Id == c.ParentId;
  153. },
  154. (r, datalist) =>
  155. {
  156. r.Childs ??= new List<OrgEntity>();
  157. r.Childs.AddRange(datalist);
  158. });
  159. SaveDataToJsonFile<OrgEntity>(orgTree);
  160. SaveDataToJsonFile<UserStaffEntity>(staffs.Where(a => tenantIds.Contains(a.TenantId.Value)));
  161. }
  162. SaveDataToJsonFile<DictEntity>(dictionaries);
  163. SaveDataToJsonFile<DictTypeEntity>(dictionaryTypes);
  164. SaveDataToJsonFile<UserRoleEntity>(userRoles);
  165. SaveDataToJsonFile<UserOrgEntity>(userOrgs);
  166. SaveDataToJsonFile<ApiEntity>(apiTree);
  167. SaveDataToJsonFile<ViewEntity>(viewTree);
  168. SaveDataToJsonFile<PermissionEntity>(permissionTree);
  169. SaveDataToJsonFile<PermissionApiEntity>(permissionApis);
  170. SaveDataToJsonFile<RolePermissionEntity>(rolePermissions);
  171. SaveDataToJsonFile<TenantEntity>(tenants);
  172. SaveDataToJsonFile<TenantPermissionEntity>(tenantPermissions, propsContractResolver: new PropsContractResolver());
  173. #endregion
  174. }
  175. }