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.
BookingHeChuan/Myshipping.Core/Job/UserSyncWorker.cs

133 lines
5.0 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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)
{
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}");
}
//2023-3-24暂时取消用户更新防止数据覆盖
//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}");
}
}
}
}