|
@@ -18,62 +18,919 @@ using ZhonTai.Admin.Core.Db.Data;
|
|
|
using ZhonTai.Admin.Domain.UserOrg;
|
|
|
using System.Linq;
|
|
|
using ZhonTai.Common.Extensions;
|
|
|
+using FreeSql.DataAnnotations;
|
|
|
+using System;
|
|
|
+using FreeSql;
|
|
|
|
|
|
namespace ZhonTai.Admin.Repositories;
|
|
|
|
|
|
public class CustomSyncData : SyncData, ISyncData
|
|
|
{
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private static string GetTableName<T>() where T : class, new()
|
|
|
+ {
|
|
|
+ var table = typeof(T).GetCustomAttributes(typeof(TableAttribute), false).FirstOrDefault() as TableAttribute;
|
|
|
+ return table.Name;
|
|
|
+ }
|
|
|
+
|
|
|
+ private static bool IsSyncData(string tableName, DbConfig dbConfig)
|
|
|
+ {
|
|
|
+ var isSyncData = true;
|
|
|
+
|
|
|
+ var hasDataIncludeTables = dbConfig.SyncDataIncludeTables?.Length > 0;
|
|
|
+ if (hasDataIncludeTables && !dbConfig.SyncDataIncludeTables.Contains(tableName))
|
|
|
+ {
|
|
|
+ isSyncData = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ var hasSyncDataExcludeTables = dbConfig.SyncDataExcludeTables?.Length > 0;
|
|
|
+ if (hasSyncDataExcludeTables && dbConfig.SyncDataExcludeTables.Contains(tableName))
|
|
|
+ {
|
|
|
+ isSyncData = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return isSyncData;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private async Task InitDictTypeAsync(IFreeSql db, IRepositoryUnitOfWork unitOfWork, DbConfig dbConfig)
|
|
|
+ {
|
|
|
+ var tableName = GetTableName<DictTypeEntity>();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (!IsSyncData(tableName, dbConfig))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var rep = db.GetRepository<DictTypeEntity>();
|
|
|
+ rep.UnitOfWork = unitOfWork;
|
|
|
+
|
|
|
+
|
|
|
+ var dataList = GetData<DictTypeEntity>(path: dbConfig.SyncDataPath);
|
|
|
+
|
|
|
+ if (!(dataList?.Length > 0))
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} import data []");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ var ids = dataList.Select(e => e.Id).ToList();
|
|
|
+ var recordList = await rep.Where(a => ids.Contains(a.Id)).ToListAsync();
|
|
|
+
|
|
|
+
|
|
|
+ var recordIds = recordList.Select(a => a.Id).ToList();
|
|
|
+ var insertDataList = dataList.Where(a => !recordIds.Contains(a.Id));
|
|
|
+ if (insertDataList.Any())
|
|
|
+ {
|
|
|
+ await rep.InsertAsync(insertDataList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (recordList?.Count > 0)
|
|
|
+ {
|
|
|
+ var updateDataList = dataList.Where(a => recordIds.Contains(a.Id));
|
|
|
+ await rep.UpdateAsync(updateDataList);
|
|
|
+ }
|
|
|
+
|
|
|
+ Console.WriteLine($"table: {tableName} sync data succeed");
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} sync data failed.\n{ex.Message}");
|
|
|
+ throw;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private async Task InitDictAsync(IFreeSql db, IRepositoryUnitOfWork unitOfWork, DbConfig dbConfig)
|
|
|
+ {
|
|
|
+ var tableName = GetTableName<DictEntity>();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (!IsSyncData(tableName, dbConfig))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var rep = db.GetRepository<DictEntity>();
|
|
|
+ rep.UnitOfWork = unitOfWork;
|
|
|
+
|
|
|
+
|
|
|
+ var dataList = GetData<DictEntity>(path: dbConfig.SyncDataPath);
|
|
|
+
|
|
|
+ if (!(dataList?.Length > 0))
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} import data []");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ var ids = dataList.Select(e => e.Id).ToList();
|
|
|
+ var recordList = await rep.Where(a => ids.Contains(a.Id)).ToListAsync();
|
|
|
+
|
|
|
+
|
|
|
+ var recordIds = recordList.Select(a => a.Id).ToList();
|
|
|
+ var insertDataList = dataList.Where(a => !recordIds.Contains(a.Id));
|
|
|
+ if (insertDataList.Any())
|
|
|
+ {
|
|
|
+ await rep.InsertAsync(insertDataList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (recordList?.Count > 0)
|
|
|
+ {
|
|
|
+ var updateDataList = dataList.Where(a => recordIds.Contains(a.Id));
|
|
|
+ await rep.UpdateAsync(updateDataList);
|
|
|
+ }
|
|
|
+ Console.WriteLine($"table: {tableName} sync data succeed");
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} sync data failed.\n{ex.Message}");
|
|
|
+ throw;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private async Task InitUserAsync(IFreeSql db, IRepositoryUnitOfWork unitOfWork, DbConfig dbConfig, bool isTenant)
|
|
|
+ {
|
|
|
+ var tableName = GetTableName<UserEntity>();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (!IsSyncData(tableName, dbConfig))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var rep = db.GetRepository<UserEntity>();
|
|
|
+ rep.UnitOfWork = unitOfWork;
|
|
|
+
|
|
|
+
|
|
|
+ var dataList = GetData<UserEntity>(isTenant, dbConfig.SyncDataPath);
|
|
|
+
|
|
|
+ if (!(dataList?.Length > 0))
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} import data []");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ var ids = dataList.Select(e => e.Id).ToList();
|
|
|
+ var recordList = await rep.Where(a => ids.Contains(a.Id)).ToListAsync();
|
|
|
+
|
|
|
+
|
|
|
+ var recordIds = recordList.Select(a => a.Id).ToList();
|
|
|
+ var insertDataList = dataList.Where(a => !recordIds.Contains(a.Id));
|
|
|
+ if (insertDataList.Any())
|
|
|
+ {
|
|
|
+ await rep.InsertAsync(insertDataList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (recordList?.Count > 0)
|
|
|
+ {
|
|
|
+ var updateDataList = dataList.Where(a => recordIds.Contains(a.Id));
|
|
|
+ await rep.UpdateAsync(updateDataList);
|
|
|
+ }
|
|
|
+ Console.WriteLine($"table: {tableName} sync data succeed");
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} sync data failed.\n{ex.Message}");
|
|
|
+ throw;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private async Task InitUserStaffAsync(IFreeSql db, IRepositoryUnitOfWork unitOfWork, DbConfig dbConfig, bool isTenant)
|
|
|
+ {
|
|
|
+ var tableName = GetTableName<UserStaffEntity>();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (!IsSyncData(tableName, dbConfig))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var rep = db.GetRepository<UserStaffEntity>();
|
|
|
+ rep.UnitOfWork = unitOfWork;
|
|
|
+
|
|
|
+
|
|
|
+ var dataList = GetData<UserStaffEntity>(isTenant, dbConfig.SyncDataPath);
|
|
|
+
|
|
|
+ if (!(dataList?.Length > 0))
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} import data []");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ var ids = dataList.Select(e => e.Id).ToList();
|
|
|
+ var recordList = await rep.Where(a => ids.Contains(a.Id)).ToListAsync();
|
|
|
+
|
|
|
+
|
|
|
+ var recordIds = recordList.Select(a => a.Id).ToList();
|
|
|
+ var insertDataList = dataList.Where(a => !recordIds.Contains(a.Id));
|
|
|
+ if (insertDataList.Any())
|
|
|
+ {
|
|
|
+ await rep.InsertAsync(insertDataList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (recordList?.Count > 0)
|
|
|
+ {
|
|
|
+ var updateDataList = dataList.Where(a => recordIds.Contains(a.Id));
|
|
|
+ await rep.UpdateAsync(updateDataList);
|
|
|
+ }
|
|
|
+ Console.WriteLine($"table: {tableName} sync data succeed");
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} sync data failed.\n{ex.Message}");
|
|
|
+ throw;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private async Task InitOrgAsync(IFreeSql db, IRepositoryUnitOfWork unitOfWork, DbConfig dbConfig, bool isTenant)
|
|
|
+ {
|
|
|
+ var tableName = GetTableName<OrgEntity>();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (!IsSyncData(tableName, dbConfig))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var rep = db.GetRepository<OrgEntity>();
|
|
|
+ rep.UnitOfWork = unitOfWork;
|
|
|
+
|
|
|
+
|
|
|
+ var dataTree = GetData<OrgEntity>(isTenant, dbConfig.SyncDataPath);
|
|
|
+ var dataList = dataTree.ToList().ToPlainList((a) => a.Childs).ToArray();
|
|
|
+
|
|
|
+ if (!(dataList?.Length > 0))
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} import data []");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ var ids = dataList.Select(e => e.Id).ToList();
|
|
|
+ var recordList = await rep.Where(a => ids.Contains(a.Id)).ToListAsync();
|
|
|
+
|
|
|
+
|
|
|
+ var recordIds = recordList.Select(a => a.Id).ToList();
|
|
|
+ var insertDataList = dataList.Where(a => !recordIds.Contains(a.Id));
|
|
|
+ if (insertDataList.Any())
|
|
|
+ {
|
|
|
+ await rep.InsertAsync(insertDataList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (recordList?.Count > 0)
|
|
|
+ {
|
|
|
+ var updateDataList = dataList.Where(a => recordIds.Contains(a.Id));
|
|
|
+ await rep.UpdateAsync(updateDataList);
|
|
|
+ }
|
|
|
+ Console.WriteLine($"table: {tableName} sync data succeed");
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} sync data failed.\n{ex.Message}");
|
|
|
+ throw;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private async Task InitRoleAsync(IFreeSql db, IRepositoryUnitOfWork unitOfWork, DbConfig dbConfig, bool isTenant)
|
|
|
+ {
|
|
|
+ var tableName = GetTableName<RoleEntity>();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (!IsSyncData(tableName, dbConfig))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var rep = db.GetRepository<RoleEntity>();
|
|
|
+ rep.UnitOfWork = unitOfWork;
|
|
|
+
|
|
|
+
|
|
|
+ var dataList = GetData<RoleEntity>(isTenant, dbConfig.SyncDataPath);
|
|
|
+
|
|
|
+ if (!(dataList?.Length > 0))
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} import data []");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ var ids = dataList.Select(e => e.Id).ToList();
|
|
|
+ var recordList = await rep.Where(a => ids.Contains(a.Id)).ToListAsync();
|
|
|
+
|
|
|
+
|
|
|
+ var recordIds = recordList.Select(a => a.Id).ToList();
|
|
|
+ var insertDataList = dataList.Where(a => !recordIds.Contains(a.Id));
|
|
|
+ if (insertDataList.Any())
|
|
|
+ {
|
|
|
+ await rep.InsertAsync(insertDataList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (recordList?.Count > 0)
|
|
|
+ {
|
|
|
+ var updateDataList = dataList.Where(a => recordIds.Contains(a.Id));
|
|
|
+ await rep.UpdateAsync(updateDataList);
|
|
|
+ }
|
|
|
+ Console.WriteLine($"table: {tableName} sync data succeed");
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} sync data failed.\n{ex.Message}");
|
|
|
+ throw;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private async Task InitApiAsync(IFreeSql db, IRepositoryUnitOfWork unitOfWork, DbConfig dbConfig)
|
|
|
+ {
|
|
|
+ var tableName = GetTableName<ApiEntity>();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (!IsSyncData(tableName, dbConfig))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var rep = db.GetRepository<ApiEntity>();
|
|
|
+ rep.UnitOfWork = unitOfWork;
|
|
|
+
|
|
|
+
|
|
|
+ var dataTree = GetData<ApiEntity>(path: dbConfig.SyncDataPath);
|
|
|
+ var dataList = dataTree.ToList().ToPlainList((a) => a.Childs).ToArray();
|
|
|
+
|
|
|
+ if (!(dataList?.Length > 0))
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} import data []");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ var ids = dataList.Select(e => e.Id).ToList();
|
|
|
+ var recordList = await rep.Where(a => ids.Contains(a.Id)).ToListAsync();
|
|
|
+
|
|
|
+
|
|
|
+ var recordIds = recordList.Select(a => a.Id).ToList();
|
|
|
+ var insertDataList = dataList.Where(a => !recordIds.Contains(a.Id));
|
|
|
+ if (insertDataList.Any())
|
|
|
+ {
|
|
|
+ await rep.InsertAsync(insertDataList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (recordList?.Count > 0)
|
|
|
+ {
|
|
|
+ var updateDataList = dataList.Where(a => recordIds.Contains(a.Id));
|
|
|
+ await rep.UpdateAsync(updateDataList);
|
|
|
+ }
|
|
|
+ Console.WriteLine($"table: {tableName} sync data succeed");
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} sync data failed.\n{ex.Message}");
|
|
|
+ throw;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private async Task InitViewAsync(IFreeSql db, IRepositoryUnitOfWork unitOfWork, DbConfig dbConfig)
|
|
|
+ {
|
|
|
+ var tableName = GetTableName<ViewEntity>();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (!IsSyncData(tableName, dbConfig))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var rep = db.GetRepository<ViewEntity>();
|
|
|
+ rep.UnitOfWork = unitOfWork;
|
|
|
+
|
|
|
+
|
|
|
+ var dataTree = GetData<ViewEntity>(path: dbConfig.SyncDataPath);
|
|
|
+ var dataList = dataTree.ToList().ToPlainList((a) => a.Childs).ToArray();
|
|
|
+
|
|
|
+ if (!(dataList?.Length > 0))
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} import data []");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ var ids = dataList.Select(e => e.Id).ToList();
|
|
|
+ var recordList = await rep.Where(a => ids.Contains(a.Id)).ToListAsync();
|
|
|
+
|
|
|
+
|
|
|
+ var recordIds = recordList.Select(a => a.Id).ToList();
|
|
|
+ var insertDataList = dataList.Where(a => !recordIds.Contains(a.Id));
|
|
|
+ if (insertDataList.Any())
|
|
|
+ {
|
|
|
+ await rep.InsertAsync(insertDataList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (recordList?.Count > 0)
|
|
|
+ {
|
|
|
+ var updateDataList = dataList.Where(a => recordIds.Contains(a.Id));
|
|
|
+ await rep.UpdateAsync(updateDataList);
|
|
|
+ }
|
|
|
+ Console.WriteLine($"table: {tableName} sync data succeed");
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} sync data failed.\n{ex.Message}");
|
|
|
+ throw;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private async Task InitPermissionAsync(IFreeSql db, IRepositoryUnitOfWork unitOfWork, DbConfig dbConfig)
|
|
|
+ {
|
|
|
+ var tableName = GetTableName<PermissionEntity>();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (!IsSyncData(tableName, dbConfig))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var rep = db.GetRepository<PermissionEntity>();
|
|
|
+ rep.UnitOfWork = unitOfWork;
|
|
|
+
|
|
|
+
|
|
|
+ var dataTree = GetData<PermissionEntity>(path: dbConfig.SyncDataPath);
|
|
|
+ var dataList = dataTree.ToList().ToPlainList((a) => a.Childs).ToArray();
|
|
|
+
|
|
|
+ if (!(dataList?.Length > 0))
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} import data []");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ var ids = dataList.Select(e => e.Id).ToList();
|
|
|
+ var recordList = await rep.Where(a => ids.Contains(a.Id)).ToListAsync();
|
|
|
+
|
|
|
+
|
|
|
+ var recordIds = recordList.Select(a => a.Id).ToList();
|
|
|
+ var insertDataList = dataList.Where(a => !recordIds.Contains(a.Id));
|
|
|
+ if (insertDataList.Any())
|
|
|
+ {
|
|
|
+ await rep.InsertAsync(insertDataList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (recordList?.Count > 0)
|
|
|
+ {
|
|
|
+ var updateDataList = dataList.Where(a => recordIds.Contains(a.Id));
|
|
|
+ await rep.UpdateAsync(updateDataList);
|
|
|
+ }
|
|
|
+ Console.WriteLine($"table: {tableName} sync data succeed");
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} sync data failed.\n{ex.Message}");
|
|
|
+ throw;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private async Task InitPermissionApiAsync(IFreeSql db, IRepositoryUnitOfWork unitOfWork, DbConfig dbConfig)
|
|
|
+ {
|
|
|
+ var tableName = GetTableName<PermissionApiEntity>();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (!IsSyncData(tableName, dbConfig))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var rep = db.GetRepository<PermissionApiEntity>();
|
|
|
+ rep.UnitOfWork = unitOfWork;
|
|
|
+
|
|
|
+
|
|
|
+ var dataList = GetData<PermissionApiEntity>(path: dbConfig.SyncDataPath);
|
|
|
+
|
|
|
+ if (!(dataList?.Length > 0))
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} import data []");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ var permissionIds = dataList.Select(a => a.PermissionId).ToList();
|
|
|
+ var apiIds = dataList.Select(a => a.ApiId).ToList();
|
|
|
+ var records = await rep.Where(a => permissionIds.Contains(a.PermissionId) && apiIds.Contains(a.ApiId)).ToListAsync();
|
|
|
+
|
|
|
+
|
|
|
+ var recordPermissionIds = dataList.Select(a => a.PermissionId).ToList();
|
|
|
+ var recordApiIds = dataList.Select(a => a.ApiId).ToList();
|
|
|
+ var insertDataList = dataList.Where(a => !(recordPermissionIds.Contains(a.PermissionId) && recordApiIds.Contains(a.ApiId)));
|
|
|
+ if (insertDataList.Any())
|
|
|
+ {
|
|
|
+ await rep.InsertAsync(insertDataList);
|
|
|
+ }
|
|
|
+ Console.WriteLine($"table: {tableName} sync data succeed");
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} sync data failed.\n{ex.Message}");
|
|
|
+ throw;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private async Task InitUserRoleAsync(IFreeSql db, IRepositoryUnitOfWork unitOfWork, DbConfig dbConfig)
|
|
|
+ {
|
|
|
+ var tableName = GetTableName<UserRoleEntity>();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (!IsSyncData(tableName, dbConfig))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var rep = db.GetRepository<UserRoleEntity>();
|
|
|
+ rep.UnitOfWork = unitOfWork;
|
|
|
+
|
|
|
+
|
|
|
+ var dataList = GetData<UserRoleEntity>(path: dbConfig.SyncDataPath);
|
|
|
+
|
|
|
+ if (!(dataList?.Length > 0))
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} import data []");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ var userIds = dataList.Select(a => a.UserId).ToList();
|
|
|
+ var roleIds = dataList.Select(a => a.RoleId).ToList();
|
|
|
+ var records = await rep.Where(a => userIds.Contains(a.UserId) && roleIds.Contains(a.RoleId)).ToListAsync();
|
|
|
+
|
|
|
+
|
|
|
+ var recordUserIds = dataList.Select(a => a.UserId).ToList();
|
|
|
+ var recordRoleIds = dataList.Select(a => a.RoleId).ToList();
|
|
|
+ var insertDataList = dataList.Where(a => !(recordUserIds.Contains(a.UserId) && recordRoleIds.Contains(a.RoleId)));
|
|
|
+ if (insertDataList.Any())
|
|
|
+ {
|
|
|
+ await rep.InsertAsync(insertDataList);
|
|
|
+ }
|
|
|
+ Console.WriteLine($"table: {tableName} sync data succeed");
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} sync data failed.\n{ex.Message}");
|
|
|
+ throw;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private async Task InitUserOrgAsync(IFreeSql db, IRepositoryUnitOfWork unitOfWork, DbConfig dbConfig)
|
|
|
+ {
|
|
|
+ var tableName = GetTableName<UserOrgEntity>();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (!IsSyncData(tableName, dbConfig))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var rep = db.GetRepository<UserOrgEntity>();
|
|
|
+ rep.UnitOfWork = unitOfWork;
|
|
|
+
|
|
|
+
|
|
|
+ var dataList = GetData<UserOrgEntity>(path: dbConfig.SyncDataPath);
|
|
|
+
|
|
|
+ if (!(dataList?.Length > 0))
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} import data []");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ var userIds = dataList.Select(a => a.UserId).ToList();
|
|
|
+ var orgIds = dataList.Select(a => a.OrgId).ToList();
|
|
|
+ var records = await rep.Where(a => userIds.Contains(a.UserId) && orgIds.Contains(a.OrgId)).ToListAsync();
|
|
|
+
|
|
|
+
|
|
|
+ var recordUserIds = dataList.Select(a => a.UserId).ToList();
|
|
|
+ var recordOrgIds = dataList.Select(a => a.OrgId).ToList();
|
|
|
+ var insertDataList = dataList.Where(a => !(recordUserIds.Contains(a.UserId) && recordOrgIds.Contains(a.OrgId)));
|
|
|
+ if (insertDataList.Any())
|
|
|
+ {
|
|
|
+ await rep.InsertAsync(insertDataList);
|
|
|
+ }
|
|
|
+ Console.WriteLine($"table: {tableName} sync data succeed");
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} sync data failed.\n{ex.Message}");
|
|
|
+ throw;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private async Task InitRolePermissionAsync(IFreeSql db, IRepositoryUnitOfWork unitOfWork, DbConfig dbConfig)
|
|
|
+ {
|
|
|
+ var tableName = GetTableName<RolePermissionEntity>();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (!IsSyncData(tableName, dbConfig))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var rep = db.GetRepository<RolePermissionEntity>();
|
|
|
+ rep.UnitOfWork = unitOfWork;
|
|
|
+
|
|
|
+
|
|
|
+ var dataList = GetData<RolePermissionEntity>(path: dbConfig.SyncDataPath);
|
|
|
+
|
|
|
+ if (!(dataList?.Length > 0))
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} import data []");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ var roleIds = dataList.Select(a => a.RoleId).ToList();
|
|
|
+ var permissionIds = dataList.Select(a => a.PermissionId).ToList();
|
|
|
+ var records = await rep.Where(a => roleIds.Contains(a.RoleId) && permissionIds.Contains(a.PermissionId)).ToListAsync();
|
|
|
+
|
|
|
+
|
|
|
+ var recordRoleIds = dataList.Select(a => a.RoleId).ToList();
|
|
|
+ var recordPermissionIds = dataList.Select(a => a.PermissionId).ToList();
|
|
|
+ var insertDataList = dataList.Where(a => !(recordRoleIds.Contains(a.RoleId) && recordPermissionIds.Contains(a.PermissionId)));
|
|
|
+ if (insertDataList.Any())
|
|
|
+ {
|
|
|
+ await rep.InsertAsync(insertDataList);
|
|
|
+ }
|
|
|
+ Console.WriteLine($"table: {tableName} sync data succeed");
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} sync data failed.\n{ex.Message}");
|
|
|
+ throw;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private async Task InitTenantAsync(IFreeSql db, IRepositoryUnitOfWork unitOfWork, DbConfig dbConfig)
|
|
|
+ {
|
|
|
+ var tableName = GetTableName<TenantEntity>();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (!IsSyncData(tableName, dbConfig))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var rep = db.GetRepository<TenantEntity>();
|
|
|
+ rep.UnitOfWork = unitOfWork;
|
|
|
+
|
|
|
+
|
|
|
+ var dataList = GetData<TenantEntity>(path: dbConfig.SyncDataPath);
|
|
|
+
|
|
|
+ if (!(dataList?.Length > 0))
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} import data []");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ var ids = dataList.Select(e => e.Id).ToList();
|
|
|
+ var recordList = await rep.Where(a => ids.Contains(a.Id)).ToListAsync();
|
|
|
+
|
|
|
+
|
|
|
+ var recordIds = recordList.Select(a => a.Id).ToList();
|
|
|
+ var insertDataList = dataList.Where(a => !recordIds.Contains(a.Id));
|
|
|
+ if (insertDataList.Any())
|
|
|
+ {
|
|
|
+ await rep.InsertAsync(insertDataList);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if (recordList?.Count > 0)
|
|
|
+ {
|
|
|
+ var updateDataList = dataList.Where(a => recordIds.Contains(a.Id));
|
|
|
+ await rep.UpdateAsync(updateDataList);
|
|
|
+ }
|
|
|
+ Console.WriteLine($"table: {tableName} sync data succeed");
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} sync data failed.\n{ex.Message}");
|
|
|
+ throw;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private async Task InitTenantPermissionAsync(IFreeSql db, IRepositoryUnitOfWork unitOfWork, DbConfig dbConfig)
|
|
|
+ {
|
|
|
+ var tableName = GetTableName<TenantPermissionEntity>();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (!IsSyncData(tableName, dbConfig))
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ var rep = db.GetRepository<TenantPermissionEntity>();
|
|
|
+ rep.UnitOfWork = unitOfWork;
|
|
|
+
|
|
|
+
|
|
|
+ var dataList = GetData<TenantPermissionEntity>(path: dbConfig.SyncDataPath);
|
|
|
+
|
|
|
+ if (!(dataList?.Length > 0))
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} import data []");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ var tenantIds = dataList.Select(a => a.TenantId).ToList();
|
|
|
+ var permissionIds = dataList.Select(a => a.PermissionId).ToList();
|
|
|
+ var records = await rep.Where(a => tenantIds.Contains(a.TenantId) && permissionIds.Contains(a.PermissionId)).ToListAsync();
|
|
|
+
|
|
|
+
|
|
|
+ var recordTenantIds = dataList.Select(a => a.TenantId).ToList();
|
|
|
+ var recordPermissionIds = dataList.Select(a => a.PermissionId).ToList();
|
|
|
+ var insertDataList = dataList.Where(a => !(tenantIds.Contains(a.TenantId) && recordPermissionIds.Contains(a.PermissionId)));
|
|
|
+ if (insertDataList.Any())
|
|
|
+ {
|
|
|
+ await rep.InsertAsync(insertDataList);
|
|
|
+ }
|
|
|
+ Console.WriteLine($"table: {tableName} sync data succeed");
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ Console.WriteLine($"table: {tableName} sync data failed.\n{ex.Message}");
|
|
|
+ throw;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
public virtual async Task SyncDataAsync(IFreeSql db, DbConfig dbConfig = null, AppConfig appConfig = null)
|
|
|
{
|
|
|
- using var uow = db.CreateUnitOfWork();
|
|
|
- using var tran = uow.GetOrBeginTransaction();
|
|
|
- var isTenant = appConfig.Tenant;
|
|
|
+ using var unitOfWork = db.CreateUnitOfWork();
|
|
|
+
|
|
|
+ try
|
|
|
+ {
|
|
|
+ var isTenant = appConfig.Tenant;
|
|
|
|
|
|
- var dictionaryTypes = GetData<DictTypeEntity>(path: dbConfig.SyncDataPath);
|
|
|
- await InitDataAsync(db, uow, tran, dictionaryTypes, dbConfig);
|
|
|
+ await InitDictTypeAsync(db, unitOfWork, dbConfig);
|
|
|
|
|
|
- var dictionaries = GetData<DictEntity>(path: dbConfig.SyncDataPath);
|
|
|
- await InitDataAsync(db, uow, tran, dictionaries, dbConfig);
|
|
|
+ await InitDictAsync(db, unitOfWork, dbConfig);
|
|
|
|
|
|
- var users = GetData<UserEntity>(isTenant, dbConfig.SyncDataPath);
|
|
|
- await InitDataAsync(db, uow, tran, users, dbConfig);
|
|
|
+ await InitUserAsync(db, unitOfWork, dbConfig, isTenant);
|
|
|
|
|
|
- var staffs = GetData<UserStaffEntity>(isTenant, dbConfig.SyncDataPath);
|
|
|
- await InitDataAsync(db, uow, tran, staffs, dbConfig);
|
|
|
+ await InitUserStaffAsync(db, unitOfWork, dbConfig, isTenant);
|
|
|
|
|
|
- var orgTree = GetData<OrgEntity>(isTenant, dbConfig.SyncDataPath);
|
|
|
- await InitDataAsync(db, uow, tran, orgTree.ToList().ToPlainList((a) => a.Childs).ToArray(), dbConfig);
|
|
|
+ await InitOrgAsync(db, unitOfWork, dbConfig, isTenant);
|
|
|
|
|
|
- var roles = GetData<RoleEntity>(isTenant, dbConfig.SyncDataPath);
|
|
|
- await InitDataAsync(db, uow, tran, roles, dbConfig);
|
|
|
+ await InitRoleAsync(db, unitOfWork, dbConfig, isTenant);
|
|
|
|
|
|
- var apiTree = GetData<ApiEntity>(path: dbConfig.SyncDataPath);
|
|
|
- await InitDataAsync(db, uow, tran, apiTree.ToList().ToPlainList((a) => a.Childs).ToArray(), dbConfig);
|
|
|
+ await InitApiAsync(db, unitOfWork, dbConfig);
|
|
|
|
|
|
- var viewTree = GetData<ViewEntity>(path: dbConfig.SyncDataPath);
|
|
|
- await InitDataAsync(db, uow, tran, viewTree.ToList().ToPlainList((a) => a.Childs).ToArray(), dbConfig);
|
|
|
+ await InitViewAsync(db, unitOfWork, dbConfig);
|
|
|
|
|
|
- var permissionTree = GetData<PermissionEntity>(path: dbConfig.SyncDataPath);
|
|
|
- await InitDataAsync(db, uow, tran, permissionTree.ToList().ToPlainList((a) => a.Childs).ToArray(), dbConfig);
|
|
|
+ await InitPermissionAsync(db, unitOfWork, dbConfig);
|
|
|
|
|
|
- var userRoles = GetData<UserRoleEntity>(path: dbConfig.SyncDataPath);
|
|
|
- await InitDataAsync(db, uow, tran, userRoles, dbConfig);
|
|
|
+ await InitPermissionApiAsync(db, unitOfWork, dbConfig);
|
|
|
|
|
|
- var userOrgs = GetData<UserOrgEntity>(path: dbConfig.SyncDataPath);
|
|
|
- await InitDataAsync(db, uow, tran, userOrgs, dbConfig);
|
|
|
+ await InitUserRoleAsync(db, unitOfWork, dbConfig);
|
|
|
|
|
|
- var rolePermissions = GetData<RolePermissionEntity>(path: dbConfig.SyncDataPath);
|
|
|
- await InitDataAsync(db, uow, tran, rolePermissions, dbConfig);
|
|
|
+ await InitUserOrgAsync(db, unitOfWork, dbConfig);
|
|
|
|
|
|
- var tenants = GetData<TenantEntity>(path: dbConfig.SyncDataPath);
|
|
|
- await InitDataAsync(db, uow, tran, tenants, dbConfig);
|
|
|
+ await InitRolePermissionAsync(db, unitOfWork, dbConfig);
|
|
|
|
|
|
- var tenantPermissions = GetData<TenantPermissionEntity>(path: dbConfig.SyncDataPath);
|
|
|
- await InitDataAsync(db, uow, tran, tenantPermissions, dbConfig);
|
|
|
+ await InitTenantAsync(db, unitOfWork, dbConfig);
|
|
|
|
|
|
- var permissionApis = GetData<PermissionApiEntity>(path: dbConfig.SyncDataPath);
|
|
|
- await InitDataAsync(db, uow, tran, permissionApis, dbConfig);
|
|
|
+ await InitTenantPermissionAsync(db, unitOfWork, dbConfig);
|
|
|
|
|
|
- uow.Commit();
|
|
|
+ unitOfWork.Commit();
|
|
|
+ }
|
|
|
+ catch (Exception)
|
|
|
+ {
|
|
|
+ unitOfWork.Rollback();
|
|
|
+ throw;
|
|
|
+ }
|
|
|
}
|
|
|
}
|