/* *所有关于HR_EmployeeSync类的业务代码应在此处编写 *可使用repository.调用常用方法,获取EF/Dapper等信息 *如果需要事务请使用repository.DbContextBeginTransaction *也可使用DBServerProvider.手动获取数据库相关信息 *用户信息、权限、角色等使用UserContext.Current操作 *HR_EmployeeSyncService对增、删、改查、导入、导出、审核业务代码扩展参照ServiceFunFilter */ using Microsoft.AspNetCore.Http; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Linq.Expressions; using System.Net.Http.Headers; using System.Text; using VOL.Core.BaseProvider; using VOL.Core.CacheManager; using VOL.Core.DBManager; using VOL.Core.Extensions; using VOL.Core.Extensions.AutofacManager; using VOL.Core.Utilities; using VOL.DingTalk.Models.Biz; using VOL.DingTalk.Services.Biz; using VOL.Entity.DomainModels; using VOL.HR.IRepositories; using VOL.YSErp.Models.Biz; using VOL.YSErp.Services.Biz; namespace VOL.HR.Services { public partial class HR_EmployeeSyncService { private readonly IHttpContextAccessor _httpContextAccessor; private readonly IHR_EmployeeSyncRepository _repository;//访问数据库 private readonly DingTalkService _dingTalkService; private readonly YSERPService _ysService; [ActivatorUtilitiesConstructor] private ICacheService _cacheService; [ActivatorUtilitiesConstructor] public HR_EmployeeSyncService( IHR_EmployeeSyncRepository dbRepository, IHttpContextAccessor httpContextAccessor, ICacheService cacheService ) : base(dbRepository) { _httpContextAccessor = httpContextAccessor; _repository = dbRepository; //多租户会用到这init代码,其他情况可以不用 //base.Init(dbRepository); _cacheService = cacheService; _dingTalkService = new DingTalkService(new DingTalk.Models.SystemToken(),new DingTalk.Models.DingTalkConfig()); _ysService = new YSERPService(new YSErp.Models.SystemToken(), new YSErp.Models.YSConfig()); } public Task> GetAllYSEmployees() { if (_cacheService.Exists("YS_EMP_CACHE")) { return Task.FromResult(_cacheService.Get>("YS_EMP_CACHE")); } else { var emps = _ysService.GetAllEmployeesAsync(); if(emps != null) { _cacheService.Add("YS_EMP_CACHE", JsonConvert.SerializeObject(emps.Result), 600); } return emps; } } public Task> GetAllDingTalkEmployees() { if (_cacheService.Exists("DingTalk_EMP_CACHE")) { return Task.FromResult(_cacheService.Get>("DingTalk_EMP_CACHE")); } else { var emps = _dingTalkService.GetAllEmployeesAsync(); if(emps != null) { _cacheService.Add("DingTalk_EMP_CACHE", JsonConvert.SerializeObject(emps.Result), 600); } return emps; } } public Task GenEmpSystemShip() { List dingTalkEmployees = []; List ysERPEmployees = []; var ysTask = GetAllYSEmployees().ContinueWith(x => { ysERPEmployees = x.Result; }); var dingTalkTask = GetAllDingTalkEmployees().ContinueWith(x => { dingTalkEmployees = x.Result; }); Task.WaitAll(ysTask, dingTalkTask); if (ysERPEmployees.Count != 0) { var newList = new List(); ysERPEmployees.ForEach(emp => { var dingTalkInfo = dingTalkEmployees?.FirstOrDefault(e => e.Mobile == emp.mobile); if (dingTalkInfo != null) { //_repository.AddRange() newList.Add(new HR_EmployeeSync { EmpYSID = emp.id, EmpYSMobile = emp.mobile, EmpYSDeptID = emp.dept_id, EmpJobNumber = emp.code, EmpDingDingID = dingTalkInfo.UserId, EmpDingDingMobile = dingTalkInfo.Mobile, EmpLastSyncInfo = "Init generate for system.", }); } }); //_repository.AddRange(newList) var db = DBServerProvider.SqlSugarClient; try { db.BeginTran(); // 清空重新生成 db.Deleteable(); db.Fastest().BulkCopy(newList); db.CommitTran(); } catch (Exception) { db.RollbackTran(); } } return Task.CompletedTask; } } }