You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

137 lines
5.4 KiB
C#

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
{
/// <summary>
/// 和川用户同步
/// </summary>
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<ISqlSugarClient>();
_sugerClient.QueryFilter.Clear();
var _repPingTaiUser = App.GetService<SqlSugarRepository<PingTaiUser>>();
var _repPingTaiUserBase = App.GetService<SqlSugarRepository<PingTaiUserBaseInfo>>();
var _repUser = App.GetService<SqlSugarRepository<SysUser>>();
var _repEmp = App.GetService<SqlSugarRepository<SysEmp>>();
var _repOrg = App.GetService<SqlSugarRepository<SysOrg>>();
var _repPos = App.GetService<SqlSugarRepository<SysPos>>();
var _repEmpPos = App.GetService<SqlSugarRepository<SysEmpPos>>();
var _repUserRole = App.GetService<SqlSugarRepository<SysUserRole>>();
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<EncryptKeyOptions>().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}");
}
}
}
}