同步新物料接口
This commit is contained in:
@@ -47,12 +47,14 @@ namespace WMS.Web.Api.Controllers
|
||||
private readonly ILoginService _loginService;
|
||||
private readonly AppOptions _options;
|
||||
private readonly ISendMessageService _sendMessageService;
|
||||
private readonly IMaterialService _materialService;
|
||||
public TestController(IErpService erpService, IInStockTaskService inStockTaskService, IBoxInventoryRepositories boxInventoryRepositories,
|
||||
IBasicsRepositories transactionRepositories, IOpsService opsService, IBoxService boxService, IBasicsRepositories basicsRepositories,
|
||||
IOutStockTaskRepositories outStockTaskRepositories, IOutStockTaskService outStockTaskService, IOptions<AppOptions> options, ILoginService loginService, ISendMessageService sendMessageService,
|
||||
ITakeStockService takeStockService, ITakeStockRepositories takeStockRepositories, IOutStockService outStockService, IInStockTaskRepositories inStockTaskRepositories,
|
||||
IWebHostEnvironment env)
|
||||
IWebHostEnvironment env, IMaterialService materialService)
|
||||
{
|
||||
_materialService = materialService;
|
||||
_loginService = loginService;
|
||||
_sendMessageService = sendMessageService;
|
||||
_inStockTaskRepositories = inStockTaskRepositories;
|
||||
@@ -341,5 +343,12 @@ namespace WMS.Web.Api.Controllers
|
||||
{
|
||||
return await _sendMessageService.Execute();
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
[Route("SyscMats")]
|
||||
public async Task<Result> SyscMats()
|
||||
{
|
||||
return await _materialService.SyncNewMaterials();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3088,6 +3088,12 @@
|
||||
<param name="orgId"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:WMS.Web.Domain.Infrastructure.IMaterialsRepositories.GetAllNumbers">
|
||||
<summary>
|
||||
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:WMS.Web.Domain.Infrastructure.IMoveBoxRecordRepositories.AddRange(System.Collections.Generic.List{WMS.Web.Domain.Entitys.MoveBoxRecord},System.Boolean)">
|
||||
批量添加
|
||||
</member>
|
||||
@@ -3876,7 +3882,7 @@
|
||||
<param name="id"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:WMS.Web.Domain.IService.Public.IErpService.BillQueryForMaterial">
|
||||
<member name="M:WMS.Web.Domain.IService.Public.IErpService.BillQueryForMaterial(System.Boolean)">
|
||||
<summary>
|
||||
erp:单据查询-物料集合
|
||||
</summary>
|
||||
@@ -4174,6 +4180,17 @@
|
||||
<param name="customerStockCode"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:WMS.Web.Domain.IService.IMaterialService">
|
||||
<summary>
|
||||
物料服务接口
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:WMS.Web.Domain.IService.IMaterialService.SyncNewMaterials">
|
||||
<summary>
|
||||
同步金蝶新物料
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:WMS.Web.Domain.IService.ISendMessageService">
|
||||
<summary>
|
||||
发送消息服务
|
||||
@@ -5519,7 +5536,7 @@
|
||||
<param name="sourceBillNos"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:WMS.Web.Domain.Services.Public.ErpService.BillQueryForMaterial">
|
||||
<member name="M:WMS.Web.Domain.Services.Public.ErpService.BillQueryForMaterial(System.Boolean)">
|
||||
<summary>
|
||||
erp:单据查询-物料集合
|
||||
</summary>
|
||||
@@ -6014,6 +6031,17 @@
|
||||
<param name="customerStockCode"></param>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:WMS.Web.Domain.Services.MaterialService">
|
||||
<summary>
|
||||
物料服务
|
||||
</summary>
|
||||
</member>
|
||||
<member name="M:WMS.Web.Domain.Services.MaterialService.SyncNewMaterials">
|
||||
<summary>
|
||||
同步金蝶新的物料
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="T:WMS.Web.Domain.Services.SendMessageService">
|
||||
<summary>
|
||||
阿里云短息服务
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -317,6 +317,7 @@ namespace WMS.Web.Repositories.DependencyInjection
|
||||
Services.AddTransient<IInStockTaskBoxService, InStockTaskBoxService>();
|
||||
Services.AddTransient<IBoxMarkService, BoxMarkService>();
|
||||
Services.AddTransient<ISendMessageService, SendMessageService>();
|
||||
Services.AddTransient<IMaterialService, MaterialService>();
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -95,17 +95,6 @@ namespace WMS.Web.Repositories
|
||||
return res.Clone();
|
||||
}
|
||||
|
||||
public Materials GetNew(int mid)
|
||||
{
|
||||
var query = _context.Materials.Where(x => 1 == 1);
|
||||
|
||||
query = query.Where(x => x.MaterialId == mid);
|
||||
|
||||
var res = query.FirstOrDefault();
|
||||
|
||||
return res.Clone();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取
|
||||
/// </summary>
|
||||
@@ -119,5 +108,15 @@ namespace WMS.Web.Repositories
|
||||
|
||||
return res.Clone();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取全部的物料编码
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task<List<string>> GetAllNumbers()
|
||||
{
|
||||
var numbers = await _context.Materials.Select(x => x.MaterialNumber).ToListAsync();
|
||||
return numbers.Clone().Distinct().ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user