Files
WMS-Api/src/WMS.Web.Domain/Services/Public/MaterialService.cs
2024-04-02 15:00:27 +08:00

79 lines
3.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
}
}
}
}