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.
164 lines
6.5 KiB
164 lines
6.5 KiB
2 years ago
|
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
|
||
|
}
|