同步新物料接口
This commit is contained in:
@@ -113,7 +113,7 @@ namespace WMS.Web.Domain.IService.Public
|
||||
/// erp:单据查询-物料集合
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
Task<ResultList<ErpMaterialDto>> BillQueryForMaterial();
|
||||
Task<ResultList<ErpMaterialDto>> BillQueryForMaterial(bool isCache = true);
|
||||
|
||||
/// <summary>
|
||||
/// erp:基础数据-物料信息
|
||||
|
||||
20
src/WMS.Web.Domain/IService/Public/IMaterialService.cs
Normal file
20
src/WMS.Web.Domain/IService/Public/IMaterialService.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using WMS.Web.Core.Internal.Results;
|
||||
|
||||
namespace WMS.Web.Domain.IService
|
||||
{
|
||||
/// <summary>
|
||||
/// 物料服务接口
|
||||
/// </summary>
|
||||
public interface IMaterialService
|
||||
{
|
||||
/// <summary>
|
||||
/// 同步金蝶新物料
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
Task<Result> SyncNewMaterials();
|
||||
}
|
||||
}
|
||||
@@ -32,8 +32,6 @@ namespace WMS.Web.Domain.Infrastructure
|
||||
/// <returns></returns>
|
||||
Task<Materials> Get(int mid);
|
||||
|
||||
Materials GetNew(int mid);
|
||||
|
||||
/// <summary>
|
||||
/// 物料
|
||||
/// </summary>
|
||||
@@ -41,5 +39,11 @@ namespace WMS.Web.Domain.Infrastructure
|
||||
/// <param name="orgId"></param>
|
||||
/// <returns></returns>
|
||||
Task<Materials> Get(string code, int orgId);
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
Task<List<string>> GetAllNumbers();
|
||||
}
|
||||
}
|
||||
|
||||
17
src/WMS.Web.Domain/Mappers/MaterialMapper.cs
Normal file
17
src/WMS.Web.Domain/Mappers/MaterialMapper.cs
Normal file
@@ -0,0 +1,17 @@
|
||||
using AutoMapper;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using WMS.Web.Core.Dto.Erp;
|
||||
using WMS.Web.Domain.Entitys;
|
||||
|
||||
namespace WMS.Web.Domain.Mappers
|
||||
{
|
||||
public class MaterialMapper : Profile
|
||||
{
|
||||
public MaterialMapper()
|
||||
{
|
||||
CreateMap<ErpMaterialDto, Materials>().ReverseMap();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -817,50 +817,38 @@ namespace WMS.Web.Domain.Services.Public
|
||||
/// erp:单据查询-物料集合
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task<ResultList<ErpMaterialDto>> BillQueryForMaterial()
|
||||
public async Task<ResultList<ErpMaterialDto>> BillQueryForMaterial(bool isCache = true)
|
||||
{
|
||||
try
|
||||
{
|
||||
//1.获取缓存中的物料数据;
|
||||
var materials = _memoryCache.Get<List<ErpMaterialDto>>(_erpOptions.cache_materail_key);
|
||||
if (materials == null || materials.Count == 0)
|
||||
if (isCache)
|
||||
{
|
||||
var mats = await _materialsRepositories.GetEntityList();
|
||||
if (mats == null || mats.Count == 0)
|
||||
return await this.BillQueryForMaterialPagedList();
|
||||
else
|
||||
//1.获取缓存中的物料数据;
|
||||
var materials = _memoryCache.Get<List<ErpMaterialDto>>(_erpOptions.cache_materail_key);
|
||||
if (materials == null || materials.Count == 0)
|
||||
{
|
||||
var beginTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
|
||||
_logger.LogInformation($"物料拉取-开始时间:{beginTime}");
|
||||
var erp_materials_list = new List<ErpMaterialDto>();
|
||||
//4.5.拼装
|
||||
foreach (var item in mats)
|
||||
var mats = await _materialsRepositories.GetEntityList();
|
||||
if (mats == null || mats.Count == 0)
|
||||
return await this.BillQueryForMaterialPagedList();
|
||||
else
|
||||
{
|
||||
var lis = new ErpMaterialDto();
|
||||
lis.MaterialId = item.MaterialId;
|
||||
lis.MaterialName = item.MaterialName;
|
||||
lis.MaterialNumber = item.MaterialNumber;
|
||||
lis.Specifications = item.Specifications;
|
||||
lis.BaseUnitId = item.BaseUnitId;
|
||||
lis.BaseUnitName = item.BaseUnitName;
|
||||
lis.BaseUnitNumber = item.BaseUnitNumber;
|
||||
lis.BarCode = item.BarCode;
|
||||
lis.OrgId = item.OrgId;
|
||||
lis.OrgCode = item.OrgCode;
|
||||
erp_materials_list.Add(lis);
|
||||
var beginTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
|
||||
_logger.LogInformation($"物料拉取-开始时间:{beginTime}");
|
||||
//组装dto
|
||||
var erp_materials_list = mats.Select(x => _mapper.Map<ErpMaterialDto>(x)).ToList();
|
||||
_memoryCache.Set(_erpOptions.cache_materail_key, erp_materials_list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan())));
|
||||
var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
|
||||
_logger.LogInformation($"物料拉取-结束时间:{endTime}");
|
||||
_logger.LogInformation($"物料拉取-本地数据库-总条数:{erp_materials_list.Count}");
|
||||
return ResultList<ErpMaterialDto>.ReSuccess(erp_materials_list);
|
||||
}
|
||||
_memoryCache.Set(_erpOptions.cache_materail_key, erp_materials_list, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan())));
|
||||
var endTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
|
||||
_logger.LogInformation($"物料拉取-结束时间:{endTime}");
|
||||
_logger.LogInformation($"物料拉取-本地数据库-总条数:{erp_materials_list.Count}");
|
||||
return ResultList<ErpMaterialDto>.ReSuccess(erp_materials_list);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
return ResultList<ErpMaterialDto>.ReSuccess(materials);
|
||||
}
|
||||
else
|
||||
{
|
||||
return ResultList<ErpMaterialDto>.ReSuccess(materials);
|
||||
}
|
||||
return await this.BillQueryForMaterialPagedList();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -1008,10 +996,10 @@ namespace WMS.Web.Domain.Services.Public
|
||||
_logger.LogInformation($"物料拉取-总条数:{erp_materials_list.Count}");
|
||||
return ResultList<ErpMaterialDto>.ReSuccess(erp_materials_list);
|
||||
}
|
||||
catch (Exception)
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogInformation("物料拉取->错误的Json:" + error_josn);
|
||||
return null;
|
||||
_logger.LogInformation("物料拉取->失败:" + ex);
|
||||
return ResultList<ErpMaterialDto>.ReFailure(ResultCodes.ErpSynsError);
|
||||
}
|
||||
|
||||
|
||||
|
||||
78
src/WMS.Web.Domain/Services/Public/MaterialService.cs
Normal file
78
src/WMS.Web.Domain/Services/Public/MaterialService.cs
Normal file
@@ -0,0 +1,78 @@
|
||||
using AutoMapper;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using WMS.Web.Core.Dto.Erp;
|
||||
using WMS.Web.Core.Internal.Results;
|
||||
using WMS.Web.Domain.Entitys;
|
||||
using WMS.Web.Domain.Infrastructure;
|
||||
using WMS.Web.Domain.IService;
|
||||
using WMS.Web.Domain.IService.Public;
|
||||
using WMS.Web.Domain.Values;
|
||||
|
||||
namespace WMS.Web.Domain.Services
|
||||
{
|
||||
/// <summary>
|
||||
/// 物料服务
|
||||
/// </summary>
|
||||
public class MaterialService: IMaterialService
|
||||
{
|
||||
private IMapper _mapper;
|
||||
private ILogger<MaterialService> _logger;
|
||||
private IErpService _erpService;
|
||||
private IMaterialsRepositories _materialsRepositories;
|
||||
public MaterialService(IMapper mapper, ILogger<MaterialService> logger, IErpService erpService, IMaterialsRepositories materialsRepositories)
|
||||
{
|
||||
_mapper = mapper;
|
||||
_logger = logger;
|
||||
_erpService = erpService;
|
||||
_materialsRepositories = materialsRepositories;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 同步金蝶新的物料
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task<Result> SyncNewMaterials()
|
||||
{
|
||||
try
|
||||
{
|
||||
_logger.LogInformation("同步金蝶新物料:开始->" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
|
||||
//1.获取全部物料编码
|
||||
var materialNumbers = await _materialsRepositories.GetAllNumbers();
|
||||
//1.1通过hash处理
|
||||
var materialNumberSet = new HashSet<string>(materialNumbers);
|
||||
|
||||
//2.获取金蝶物料:不取缓存的
|
||||
var mats_result = await _erpService.BillQueryForMaterial(false);
|
||||
var mats = new List<ErpMaterialDto>();
|
||||
if (mats_result.IsSuccess)
|
||||
mats = mats_result.Data.ToList();
|
||||
|
||||
//3.通过hash,更快的时间内判断元素是否存在于集合中,提高性能(10W数据十几毫秒级别)
|
||||
var entitys = mats
|
||||
.Where(item => !materialNumberSet.Contains(item.MaterialNumber))
|
||||
.Select(item => _mapper.Map<Materials>(item))
|
||||
.ToList();
|
||||
|
||||
//4.添加数据库
|
||||
if (entitys.Count != 0)
|
||||
{
|
||||
var isSuccess = await _materialsRepositories.AddRange(entitys);
|
||||
if (!isSuccess)
|
||||
return Result.ReFailure(ResultCodes.DateWriteError);
|
||||
}
|
||||
_logger.LogInformation("同步金蝶新物料:结束->" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")+"->添加数量:"+entitys.Count);
|
||||
return Result.ReSuccess();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogInformation("同步金蝶新物料:失败->" + ex.Message);
|
||||
return Result.ReFailure(ex.Message,ex.HResult);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user