1
0

CustomGenerateData.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using ZhonTai.Common.Domain.Db;
  5. using ZhonTai.Plate.Admin.Domain.DictionaryType;
  6. using ZhonTai.Plate.Admin.Domain.Dictionary;
  7. using ZhonTai.Plate.Admin.Domain.DictionaryType.Dtos;
  8. using ZhonTai.Plate.Admin.Domain.Dictionary.Dtos;
  9. using ZhonTai.Plate.Admin.Domain.Api;
  10. using ZhonTai.Plate.Admin.Domain.Api.Dtos;
  11. using ZhonTai.Plate.Admin.Domain.View.Dtos;
  12. using ZhonTai.Plate.Admin.Domain.Permission.Dtos;
  13. using ZhonTai.Plate.Admin.Domain.Permission;
  14. using ZhonTai.Plate.Admin.Domain.User;
  15. using ZhonTai.Plate.Admin.Domain.User.Dtos;
  16. using ZhonTai.Plate.Admin.Domain.Role;
  17. using ZhonTai.Plate.Admin.Domain.Role.Dtos;
  18. using ZhonTai.Plate.Admin.Domain.UserRole;
  19. using ZhonTai.Plate.Admin.Domain.RolePermission;
  20. using ZhonTai.Plate.Admin.Domain.Tenant;
  21. using ZhonTai.Plate.Admin.Domain.TenantPermission;
  22. using ZhonTai.Plate.Admin.Domain.PermissionApi;
  23. using ZhonTai.Plate.Admin.Domain.View;
  24. using ZhonTai.Common.Configs;
  25. using ZhonTai.Common.Extensions;
  26. using ZhonTai.Plate.Admin.Domain;
  27. namespace ZhonTai.Plate.Admin.Repository
  28. {
  29. public class CustomGenerateData : GenerateData, IGenerateData
  30. {
  31. public virtual async Task GenerateDataAsync(IFreeSql db, AppConfig appConfig)
  32. {
  33. #region 读取数据
  34. //admin
  35. #region 数据字典
  36. var dictionaryTypes = await db.Queryable<DictionaryTypeEntity>().ToListAsync<DictionaryTypeDataOutput>();
  37. var dictionaries = await db.Queryable<DictionaryEntity>().ToListAsync<DictionaryDataOutput>();
  38. #endregion
  39. #region 接口
  40. var apis = await db.Queryable<ApiEntity>().ToListAsync<ApiDataOutput>();
  41. var apiTree = apis.ToTree((r, c) =>
  42. {
  43. return c.ParentId == 0;
  44. },
  45. (r, c) =>
  46. {
  47. return r.Id == c.ParentId;
  48. },
  49. (r, datalist) =>
  50. {
  51. r.Childs ??= new List<ApiDataOutput>();
  52. r.Childs.AddRange(datalist);
  53. });
  54. #endregion
  55. #region 视图
  56. var views = await db.Queryable<ViewEntity>().ToListAsync<ViewDataOutput>();
  57. var viewTree = views.ToTree((r, c) =>
  58. {
  59. return c.ParentId == 0;
  60. },
  61. (r, c) =>
  62. {
  63. return r.Id == c.ParentId;
  64. },
  65. (r, datalist) =>
  66. {
  67. r.Childs ??= new List<ViewDataOutput>();
  68. r.Childs.AddRange(datalist);
  69. });
  70. #endregion
  71. #region 权限
  72. var permissions = await db.Queryable<PermissionEntity>().ToListAsync<PermissionDataOutput>();
  73. var permissionTree = permissions.ToTree((r, c) =>
  74. {
  75. return c.ParentId == 0;
  76. },
  77. (r, c) =>
  78. {
  79. return r.Id == c.ParentId;
  80. },
  81. (r, datalist) =>
  82. {
  83. r.Childs ??= new List<PermissionDataOutput>();
  84. r.Childs.AddRange(datalist);
  85. });
  86. #endregion
  87. #region 用户
  88. var users = await db.Queryable<UserEntity>().ToListAsync<UserDataOutput>();
  89. #endregion
  90. #region 角色
  91. var roles = await db.Queryable<RoleEntity>().ToListAsync<RoleDataOutput>();
  92. #endregion
  93. #region 用户角色
  94. var userRoles = await db.Queryable<UserRoleEntity>().ToListAsync(a => new
  95. {
  96. a.Id,
  97. a.UserId,
  98. a.RoleId
  99. });
  100. #endregion
  101. #region 角色权限
  102. var rolePermissions = await db.Queryable<RolePermissionEntity>().ToListAsync(a => new
  103. {
  104. a.Id,
  105. a.RoleId,
  106. a.PermissionId
  107. });
  108. #endregion
  109. #region 租户
  110. var tenants = await db.Queryable<TenantEntity>().ToListAsync(a => new
  111. {
  112. a.Id,
  113. a.UserId,
  114. a.RoleId,
  115. a.Name,
  116. a.Code,
  117. a.RealName,
  118. a.Phone,
  119. a.Email,
  120. a.TenantType,
  121. a.DataIsolationType,
  122. a.DbType,
  123. a.ConnectionString,
  124. a.IdleTime,
  125. a.Description
  126. });
  127. #endregion
  128. #region 租户权限
  129. var tenantPermissions = await db.Queryable<TenantPermissionEntity>().ToListAsync(a => new
  130. {
  131. a.Id,
  132. a.TenantId,
  133. a.PermissionId
  134. });
  135. #endregion
  136. #region 权限接口
  137. var permissionApis = await db.Queryable<PermissionApiEntity>().ToListAsync(a => new
  138. {
  139. a.Id,
  140. a.PermissionId,
  141. a.ApiId
  142. });
  143. #endregion
  144. #endregion
  145. #region 生成数据
  146. var isTenant = appConfig.Tenant;
  147. SaveDataToJsonFile<DictionaryEntity>(dictionaries, isTenant);
  148. SaveDataToJsonFile<DictionaryTypeEntity>(dictionaryTypes, isTenant);
  149. SaveDataToJsonFile<UserEntity>(users, isTenant);
  150. SaveDataToJsonFile<RoleEntity>(roles, isTenant);
  151. if (isTenant)
  152. {
  153. var tenantId = tenants.Where(a => a.Code.ToLower() == "zhontai").FirstOrDefault()?.Id;
  154. SaveDataToJsonFile<DictionaryEntity>(dictionaries.Where(a => a.TenantId == tenantId));
  155. SaveDataToJsonFile<DictionaryTypeEntity>(dictionaryTypes.Where(a => a.TenantId == tenantId));
  156. SaveDataToJsonFile<UserEntity>(users.Where(a => a.TenantId == tenantId), false);
  157. SaveDataToJsonFile<RoleEntity>(roles.Where(a => a.TenantId == tenantId));
  158. }
  159. SaveDataToJsonFile<UserRoleEntity>(userRoles);
  160. SaveDataToJsonFile<ApiEntity>(apiTree);
  161. SaveDataToJsonFile<ViewEntity>(viewTree);
  162. SaveDataToJsonFile<PermissionEntity>(permissionTree);
  163. SaveDataToJsonFile<PermissionApiEntity>(permissionApis);
  164. SaveDataToJsonFile<RolePermissionEntity>(rolePermissions);
  165. SaveDataToJsonFile<TenantEntity>(tenants);
  166. SaveDataToJsonFile<TenantPermissionEntity>(tenantPermissions, propsContractResolver: new PropsContractResolver());
  167. #endregion
  168. }
  169. }
  170. }