79 lines
3.0 KiB
C#
79 lines
3.0 KiB
C#
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);
|
||
}
|
||
}
|
||
}
|
||
}
|