using Furion; using Furion.DataEncryption; using Furion.Logging; using Furion.TaskScheduler; using Myshipping.Core.Entity; using Myshipping.Core.Service; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Myshipping.Core.Job { /// /// 和川用户同步 /// public class UserSyncWorker : ISpareTimeWorker { [SpareTime(60000, "UserSyncWorker", Description = "和川同步用户", DoOnce = false, StartNow = true, ExecuteType = SpareTimeExecuteTypes.Serial)] public void SyncUser(SpareTimer timer, long count) { Log.Information($"UserSyncWorker {DateTime.Now}"); var tenantId = 349708986646597L; var roleId = 355651062833221L;//普通用户 var _sugerClient = App.GetService(); _sugerClient.QueryFilter.Clear(); var _repPingTaiUser = App.GetService>(); var _repPingTaiUserBase = App.GetService>(); var _repUser = App.GetService>(); var _repEmp = App.GetService>(); var _repOrg = App.GetService>(); var _repPos = App.GetService>(); var _repEmpPos = App.GetService>(); var _repUserRole = App.GetService>(); var users = _repPingTaiUser.Where(u => u.CompId == "5913ab4b-ff5e-4d31-8b6c-09911bdfc0d4").ToList(); var sysUsers = _repUser.Where(x => x.TenantId == tenantId).ToList(); Log.Information($"准备同步用户数据,共{users.Count}条"); var keyDES = App.GetOptions().DES; var org = _repOrg.FirstOrDefault(x => x.TenantId == tenantId); if (org == null) { Log.Error($"用户数据同步失败:未找到任何组织"); return; } var pos = _repPos.FirstOrDefault(x => x.TenantId == tenantId); if (pos == null) { Log.Error($"用户数据同步失败:未找到任何职位"); return; } _sugerClient.Ado.BeginTran(System.Data.IsolationLevel.ReadCommitted); try { foreach (var user in users) { var existUser = sysUsers.Count(x => x.Account == user.CODENAME) > 0; SysUser sysUser = null; if (!existUser) { sysUser = new SysUser(); } else { sysUser = sysUsers.First(x => x.Account == user.CODENAME); } var ub = _repPingTaiUserBase.FirstOrDefault(x => x.USERID == user.GID); sysUser.Account = user.CODENAME; //sysUser.Password = DESCEncryption.Encrypt(user.PASSWORD, keyDES); //只在新增时同步密码,防止覆盖 sysUser.TenantId = tenantId; //sysUser.Name = user.SHOWNAME;//只在新增时同步姓名,防止覆盖 sysUser.AdminType = AdminType.None; sysUser.DjyUserId = user.GID; //sysUser.NickName = user.SHOWNAME;//只在新增时同步昵称,防止覆盖 sysUser.Phone = ub.MOBILE; sysUser.Email = ub.EMAIL1; if (!existUser) { sysUser.Password = DESCEncryption.Encrypt(user.PASSWORD, keyDES);//只在新增时同步密码 sysUser.Name = user.SHOWNAME;//只在新增时同步姓名,防止覆盖 sysUser.NickName = user.SHOWNAME;//只在新增时同步昵称,防止覆盖 var newUser = _repUser.Insert(sysUser); var emp = new SysEmp(); emp.Id = sysUser.Id; emp.OrgId = org.Id; emp.OrgName = org.Name; _repEmp.Insert(emp); var empPos = new SysEmpPos(); empPos.SysEmpId = emp.Id; empPos.SysPosId = pos.Id; _repEmpPos.Insert(empPos); var userrole = new SysUserRole(); userrole.SysRoleId = roleId; userrole.SysUserId = sysUser.Id; _repUserRole.Insert(userrole); Log.Information($"新用户,插入:{sysUser.Name}"); } else { _repUser.Update(sysUser); Log.Information($"老用户,更新:{sysUser.Name}"); } } _sugerClient.Ado.CommitTran(); Log.Information($"用户数据同步完成"); } catch (Exception ex) { _sugerClient.Ado.RollbackTran(); Log.Error($"用户数据同步失败:{ex.Message}"); Log.Error($"{ex.StackTrace}"); } } } }