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

163 lines
6.5 KiB

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<UserReader> _logger;
private readonly IConfiguration _configuration;
public UserReader(
IUserManager userManager
, IIncomingFromExternalManager incomingFromExternalManager
, ILogger<UserReader> logger
, IConfiguration configuration
)
{
_configuration = configuration;
_userManager = userManager;
_incomingFromExternalManager = incomingFromExternalManager;
_logger = logger;
}
public virtual async Task<List<IncomingFromExternal>> ReadAsync()
{
List<IncomingFromExternal> incomingList = new List<IncomingFromExternal>();
//从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<IncomingFromExternal>();
}
if (!toBeProcessed_DepartMent.Any())
{
_logger.LogInformation("No Departments");
return new List<IncomingFromExternal>();
}
//User逐一转换为IdentityUser,Department
var incomingDataLister = BuildIncomingFromExternalFromScrapAsync(toBeProcessed_User, toBeProcessed_DepartMent);
await _incomingFromExternalManager.CreateManyAsync(incomingDataLister).ConfigureAwait(false);
return incomingDataLister;
}
private List<IncomingFromExternal> BuildIncomingFromExternalFromScrapAsync(List<empmout> toBeProcessedUser, List<empmout> toBeProcessedDepartment)
{
var incomingDataList = new List<IncomingFromExternal>();
//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
}