using System; using System.Collections.Generic; using System.Linq; using System.Text.Json; using System.Threading.Tasks; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using NUglify.Helpers; using Win_in.Sfs.Wms.DataExchange.Domain; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp; using Win_in.Sfs.Wms.DataExchange.Domain.Fawtyg.Tyrp.User; using Win_in.Sfs.Wms.DataExchange.Domain.Shared; using Win_in.Sfs.Wms.DataExchange.WMS.Deparment; using Win_in.Sfs.Wms.DataExchange.WMS.User; namespace Win_in.Sfs.Wms.DataExchange.Fawtyg.TyrpAgent.Incoming; public class UserReader : IReader { private readonly IUserManager _userManager; private readonly IIncomingFromExternalManager _incomingFromExternalManager; private readonly ILogger _logger; private readonly IConfiguration _configuration; public UserReader( IUserManager userManager , IIncomingFromExternalManager incomingFromExternalManager , ILogger logger , IConfiguration configuration ) { _configuration = configuration; _userManager = userManager; _incomingFromExternalManager = incomingFromExternalManager; _logger = logger; } public virtual async Task> ReadAsync() { List incomingList = new List(); //从ERP读取待处理user var toBeProcessed_User = await _userManager.GetToBeProcessedListAsync().ConfigureAwait(false); var toBeProcessed_DepartMent = toBeProcessed_User.Where(r => !string.IsNullOrEmpty(r.empmout_dept)).AsQueryable().DistinctBy(r => r.empmout_dept).ToList();//需要同步的department if (!toBeProcessed_User.Any()) { _logger.LogInformation("No Users"); return new List(); } if (!toBeProcessed_DepartMent.Any()) { _logger.LogInformation("No Departments"); return new List(); } //User逐一转换为IdentityUser,Department var incomingDataLister = BuildIncomingFromExternalFromScrapAsync(toBeProcessed_User, toBeProcessed_DepartMent); await _incomingFromExternalManager.CreateManyAsync(incomingDataLister).ConfigureAwait(false); return incomingDataLister; } private List BuildIncomingFromExternalFromScrapAsync(List toBeProcessedUser, List toBeProcessedDepartment) { var incomingDataList = new List(); //User转换 foreach (var user in toBeProcessedUser) { var incomingData = BuildIncomingFromExternal_User(user); incomingData.SetEffectiveDate(DateTime.ParseExact(user.empmout_dt, "yyyyMMdd HH:mm:ss", System.Globalization.CultureInfo.CurrentCulture)); incomingData.SetSuccess(); try { var ItemBasicRequest = BuildItemBasicRequestCreateInput(user); incomingData.DestinationDataContent = JsonSerializer.Serialize(ItemBasicRequest); } catch (Exception ex) { incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString()); } incomingDataList.Add(incomingData); } //Department转换 foreach (var department in toBeProcessedDepartment) { var incomingData = BuildIncomingFromExternal_Department(department); incomingData.SetEffectiveDate(DateTime.Now); incomingData.SetSuccess(); try { var ItemBasicRequest = BuildDepartmentRequestCreateInput(department); incomingData.DestinationDataContent = JsonSerializer.Serialize(ItemBasicRequest); } catch (Exception ex) { incomingData.SetError(EnumExchangeDataErrorCode.Exception, ex.Message, ex.ToString()); } incomingDataList.Add(incomingData); } return incomingDataList; } #region User private IncomingFromExternal BuildIncomingFromExternal_User(empmout user) { var incomingData = new IncomingFromExternal() { DataType = EnumIncomingDataType.User.ToString(), DataAction = EnumExchangeDataAction.Add, SourceSystem = EnumSystemType.ERP.ToString(), SourceDataId = user.empmout_no, SourceDataGroupCode = user.empmout_no, SourceDataDetailCode = user.empmout_no, SourceDataContent = JsonSerializer.Serialize(user), WriteTime = DateTime.Now, Writer = nameof(TyrpIncomingBackgroundWorker), DestinationSystem = EnumSystemType.WMS.ToString(), }; return incomingData; } private static IdentityUserExchangerDto BuildItemBasicRequestCreateInput(empmout user) { var identityUserRequest = new IdentityUserExchangerDto() { UserName = user.empmout_no, Name = user.empmout_name, IsActive = user.empmout_active == "Y" ? true : false, DepartmentCode = user.empmout_dept, LastModificationTime = user.empmout_dt == null ? null : DateTime.ParseExact(user.empmout_dt, "yyyyMMdd HH:mm:ss", System.Globalization.CultureInfo.CurrentCulture), }; return identityUserRequest; } #endregion #region Department private IncomingFromExternal BuildIncomingFromExternal_Department(empmout user) { var incomingData = new IncomingFromExternal() { DataType = EnumIncomingDataType.Department.ToString(), DataAction = EnumExchangeDataAction.Add, SourceSystem = EnumSystemType.ERP.ToString(), SourceDataId = user.empmout_dept, SourceDataGroupCode = user.empmout_dept, SourceDataDetailCode = user.empmout_dept, SourceDataContent = JsonSerializer.Serialize(user), WriteTime = DateTime.Now, Writer = nameof(TyrpIncomingBackgroundWorker), DestinationSystem = EnumSystemType.WMS.ToString(), }; return incomingData; } private static DepartmentExchangerDto BuildDepartmentRequestCreateInput(empmout user) { var departmentUserRequest = new DepartmentExchangerDto() { Code = user.empmout_dept, Name = user.empmout_dept_desc, IsActive = user.empmout_dept_active == "Y" ? true : false, }; return departmentUserRequest; } #endregion }