CustomGenerateData.cs 8.8 KB

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