0
0

CustomGenerateData.cs 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  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.DictionaryType;
  6. using ZhonTai.Admin.Domain.Dictionary;
  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.Employee;
  20. using ZhonTai.Admin.Domain.Organization;
  21. using ZhonTai.Admin.Core.Db.Data;
  22. using FreeSql;
  23. namespace ZhonTai.Admin.Repositories;
  24. public class CustomGenerateData : GenerateData, IGenerateData
  25. {
  26. public virtual async Task GenerateDataAsync(IFreeSql db, AppConfig appConfig)
  27. {
  28. #region 读取数据
  29. //admin
  30. #region 数据字典
  31. var dictionaryTypes = db.Queryable<DictionaryTypeEntity>().ToListIgnore(a => new
  32. {
  33. a.CreatedTime,
  34. a.CreatedUserId,
  35. a.CreatedUserName,
  36. a.ModifiedTime,
  37. a.ModifiedUserId,
  38. a.ModifiedUserName
  39. });
  40. var dictionaries = db.Queryable<DictionaryEntity>().ToListIgnore(a => new
  41. {
  42. a.CreatedTime,
  43. a.CreatedUserId,
  44. a.CreatedUserName,
  45. a.ModifiedTime,
  46. a.ModifiedUserId,
  47. a.ModifiedUserName
  48. });
  49. #endregion
  50. #region 接口
  51. var apis = db.Queryable<ApiEntity>().ToListIgnore(a => new
  52. {
  53. a.CreatedTime,
  54. a.CreatedUserId,
  55. a.CreatedUserName,
  56. a.ModifiedTime,
  57. a.ModifiedUserId,
  58. a.ModifiedUserName
  59. });
  60. var apiTree = apis.Clone().ToTree((r, c) =>
  61. {
  62. return c.ParentId == 0;
  63. },
  64. (r, c) =>
  65. {
  66. return r.Id == c.ParentId;
  67. },
  68. (r, datalist) =>
  69. {
  70. r.Childs ??= new List<ApiEntity>();
  71. r.Childs.AddRange(datalist);
  72. });
  73. #endregion
  74. #region 视图
  75. var views = db.Queryable<ViewEntity>().ToListIgnore(a => new
  76. {
  77. a.CreatedTime,
  78. a.CreatedUserId,
  79. a.CreatedUserName,
  80. a.ModifiedTime,
  81. a.ModifiedUserId,
  82. a.ModifiedUserName
  83. });
  84. var viewTree = views.Clone().ToTree((r, c) =>
  85. {
  86. return c.ParentId == 0;
  87. },
  88. (r, c) =>
  89. {
  90. return r.Id == c.ParentId;
  91. },
  92. (r, datalist) =>
  93. {
  94. r.Childs ??= new List<ViewEntity>();
  95. r.Childs.AddRange(datalist);
  96. });
  97. #endregion
  98. #region 权限
  99. var permissions = db.Queryable<PermissionEntity>().ToListIgnore(a => new
  100. {
  101. a.CreatedTime,
  102. a.CreatedUserId,
  103. a.CreatedUserName,
  104. a.ModifiedTime,
  105. a.ModifiedUserId,
  106. a.ModifiedUserName
  107. });
  108. var permissionTree = permissions.Clone().ToTree((r, c) =>
  109. {
  110. return c.ParentId == 0;
  111. },
  112. (r, c) =>
  113. {
  114. return r.Id == c.ParentId;
  115. },
  116. (r, datalist) =>
  117. {
  118. r.Childs ??= new List<PermissionEntity>();
  119. r.Childs.AddRange(datalist);
  120. });
  121. #endregion
  122. #region 用户
  123. var users = db.Queryable<UserEntity>().ToListIgnore(a => new
  124. {
  125. a.CreatedTime,
  126. a.CreatedUserId,
  127. a.CreatedUserName,
  128. a.ModifiedTime,
  129. a.ModifiedUserId,
  130. a.ModifiedUserName
  131. });
  132. #endregion
  133. #region 角色
  134. var roles = db.Queryable<RoleEntity>().ToListIgnore(a => new
  135. {
  136. a.CreatedTime,
  137. a.CreatedUserId,
  138. a.CreatedUserName,
  139. a.ModifiedTime,
  140. a.ModifiedUserId,
  141. a.ModifiedUserName
  142. });
  143. #endregion
  144. #region 用户角色
  145. var userRoles = await db.Queryable<UserRoleEntity>().ToListAsync(a => new
  146. {
  147. a.Id,
  148. a.UserId,
  149. a.RoleId
  150. });
  151. #endregion
  152. #region 角色权限
  153. var rolePermissions = await db.Queryable<RolePermissionEntity>().ToListAsync(a => new
  154. {
  155. a.Id,
  156. a.RoleId,
  157. a.PermissionId
  158. });
  159. #endregion
  160. #region 租户
  161. var tenants = db.Queryable<TenantEntity>().ToListIgnore(a => new
  162. {
  163. a.CreatedTime,
  164. a.CreatedUserId,
  165. a.CreatedUserName,
  166. a.ModifiedTime,
  167. a.ModifiedUserId,
  168. a.ModifiedUserName
  169. });
  170. #endregion
  171. #region 租户权限
  172. var tenantPermissions = await db.Queryable<TenantPermissionEntity>().ToListAsync(a => new
  173. {
  174. a.Id,
  175. a.TenantId,
  176. a.PermissionId
  177. });
  178. #endregion
  179. #region 权限接口
  180. var permissionApis = await db.Queryable<PermissionApiEntity>().ToListAsync(a => new
  181. {
  182. a.Id,
  183. a.PermissionId,
  184. a.ApiId
  185. });
  186. //人事
  187. #region 部门
  188. var organizations = db.Queryable<OrganizationEntity>().ToListIgnore(a => new
  189. {
  190. a.CreatedTime,
  191. a.CreatedUserId,
  192. a.CreatedUserName,
  193. a.ModifiedTime,
  194. a.ModifiedUserId,
  195. a.ModifiedUserName
  196. });
  197. var organizationTree = organizations.Clone().ToTree((r, c) =>
  198. {
  199. return c.ParentId == 0;
  200. },
  201. (r, c) =>
  202. {
  203. return r.Id == c.ParentId;
  204. },
  205. (r, datalist) =>
  206. {
  207. r.Childs ??= new List<OrganizationEntity>();
  208. r.Childs.AddRange(datalist);
  209. });
  210. #endregion
  211. #region 员工
  212. var employees = db.Queryable<EmployeeEntity>().ToListIgnore(a => new
  213. {
  214. a.CreatedTime,
  215. a.CreatedUserId,
  216. a.CreatedUserName,
  217. a.ModifiedTime,
  218. a.ModifiedUserId,
  219. a.ModifiedUserName
  220. });
  221. #endregion
  222. #endregion
  223. #endregion
  224. #region 生成数据
  225. var isTenant = appConfig.Tenant;
  226. SaveDataToJsonFile<DictionaryEntity>(dictionaries, isTenant);
  227. SaveDataToJsonFile<DictionaryTypeEntity>(dictionaryTypes, isTenant);
  228. SaveDataToJsonFile<UserEntity>(users, isTenant);
  229. SaveDataToJsonFile<RoleEntity>(roles, isTenant);
  230. SaveDataToJsonFile<OrganizationEntity>(organizationTree, isTenant);
  231. SaveDataToJsonFile<EmployeeEntity>(employees, isTenant);
  232. if (isTenant)
  233. {
  234. var tenantIds = tenants?.Select(a => a.Id)?.ToList();
  235. SaveDataToJsonFile<DictionaryEntity>(dictionaries.Where(a => tenantIds.Contains(a.TenantId.Value)));
  236. SaveDataToJsonFile<DictionaryTypeEntity>(dictionaryTypes.Where(a => tenantIds.Contains(a.TenantId.Value)));
  237. SaveDataToJsonFile<UserEntity>(users.Where(a => tenantIds.Contains(a.TenantId.Value)), false);
  238. SaveDataToJsonFile<RoleEntity>(roles.Where(a => tenantIds.Contains(a.TenantId.Value)));
  239. organizationTree = organizations.Clone().Where(a => tenantIds.Contains(a.TenantId.Value)).ToList().ToTree((r, c) =>
  240. {
  241. return c.ParentId == 0;
  242. },
  243. (r, c) =>
  244. {
  245. return r.Id == c.ParentId;
  246. },
  247. (r, datalist) =>
  248. {
  249. r.Childs ??= new List<OrganizationEntity>();
  250. r.Childs.AddRange(datalist);
  251. });
  252. SaveDataToJsonFile<OrganizationEntity>(organizationTree);
  253. SaveDataToJsonFile<EmployeeEntity>(employees.Where(a => tenantIds.Contains(a.TenantId.Value)));
  254. }
  255. SaveDataToJsonFile<UserRoleEntity>(userRoles);
  256. SaveDataToJsonFile<ApiEntity>(apiTree);
  257. SaveDataToJsonFile<ViewEntity>(viewTree);
  258. SaveDataToJsonFile<PermissionEntity>(permissionTree);
  259. SaveDataToJsonFile<PermissionApiEntity>(permissionApis);
  260. SaveDataToJsonFile<RolePermissionEntity>(rolePermissions);
  261. SaveDataToJsonFile<TenantEntity>(tenants);
  262. SaveDataToJsonFile<TenantPermissionEntity>(tenantPermissions, propsContractResolver: new PropsContractResolver());
  263. #endregion
  264. }
  265. }