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 = 142307070918780L;
var roleId = 175633246363717L;//普通用户
var _sugerClient = App.GetService();
_sugerClient.QueryFilter.Clear();
var _repPingTaiUser = 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);
var pos = _repPos.FirstOrDefault(x => x.TenantId == tenantId);
_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);
}
sysUser.Account = user.CODENAME;
sysUser.Password = DESCEncryption.Encrypt(user.PASSWORD, keyDES);
sysUser.TenantId = tenantId;
sysUser.Name = user.SHOWNAME;
sysUser.AdminType = AdminType.None;
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);
}
else
{
_repUser.Update(sysUser);
}
}
_sugerClient.Ado.CommitTran();
}
catch
{
_sugerClient.Ado.RollbackTran();
throw;
}
}
}
}