This commit is contained in:
tongfei
2024-03-02 19:44:50 +08:00
parent 11a4f87480
commit c3413e5c44
11 changed files with 389 additions and 15 deletions

View File

@@ -10,6 +10,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
using WMS.Web.Core.Dto.Erp; using WMS.Web.Core.Dto.Erp;
using WMS.Web.Domain.Infrastructure;
using WMS.Web.Domain.IService.Public; using WMS.Web.Domain.IService.Public;
using WMS.Web.Domain.Services.Public; using WMS.Web.Domain.Services.Public;

View File

@@ -1097,6 +1097,11 @@
对应金蝶,物料信息 对应金蝶,物料信息
</summary> </summary>
</member> </member>
<member name="P:WMS.Web.Core.Dto.Erp.ErpMaterialDto.OrgId">
<summary>
组织ID
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.Erp.ErpMaterialDto.MaterialId"> <member name="P:WMS.Web.Core.Dto.Erp.ErpMaterialDto.MaterialId">
<summary> <summary>
物料ID 物料ID

View File

@@ -1271,6 +1271,61 @@
创建 创建
</summary> </summary>
</member> </member>
<member name="T:WMS.Web.Domain.Entitys.Materials">
<summary>
物料
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.Materials.Id">
<summary>
ID
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.Materials.OrgId">
<summary>
组织编码
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.Materials.MaterialId">
<summary>
物料ID
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.Materials.MaterialName">
<summary>
物料名称
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.Materials.MaterialNumber">
<summary>
物料编码
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.Materials.Specifications">
<summary>
物料规格型号
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.Materials.BaseUnitId">
<summary>
基本单位
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.Materials.BaseUnitName">
<summary>
基本单位名称
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.Materials.BaseUnitNumber">
<summary>
基本单位编码
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.Materials.BarCode">
<summary>
条码
</summary>
</member>
<member name="T:WMS.Web.Domain.Entitys.MoveBoxRecord"> <member name="T:WMS.Web.Domain.Entitys.MoveBoxRecord">
<summary> <summary>
wms移箱记录 wms移箱记录
@@ -2637,6 +2692,40 @@
员工ID 员工ID
</summary> </summary>
</member> </member>
<member name="T:WMS.Web.Domain.Infrastructure.IMaterialsRepositories">
<summary>
物料仓储接口
</summary>
</member>
<member name="M:WMS.Web.Domain.Infrastructure.IMaterialsRepositories.AddRange(System.Collections.Generic.List{WMS.Web.Domain.Entitys.Materials},System.Boolean)">
<summary>
物料添加
</summary>
<param name="entitys"></param>
<param name="isTransaction"></param>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.Infrastructure.IMaterialsRepositories.GetEntityList(System.Nullable{System.Int32})">
<summary>
列表
</summary>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.Infrastructure.IMaterialsRepositories.Get(System.Int32)">
<summary>
物料
</summary>
<param name="mid"></param>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.Infrastructure.IMaterialsRepositories.Get(System.String,System.Int32)">
<summary>
物料
</summary>
<param name="code"></param>
<param name="orgId"></param>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.Infrastructure.IMoveBoxRecordRepositories.AddRange(System.Collections.Generic.List{WMS.Web.Domain.Entitys.MoveBoxRecord},System.Boolean)"> <member name="M:WMS.Web.Domain.Infrastructure.IMoveBoxRecordRepositories.AddRange(System.Collections.Generic.List{WMS.Web.Domain.Entitys.MoveBoxRecord},System.Boolean)">
批量添加 批量添加
</member> </member>

View File

@@ -9,6 +9,11 @@ namespace WMS.Web.Core.Dto.Erp
/// </summary> /// </summary>
public class ErpMaterialDto public class ErpMaterialDto
{ {
/// <summary>
/// 组织ID
/// </summary>
public int OrgId { get; set; }
/// <summary> /// <summary>
/// 物料ID /// 物料ID
/// </summary> /// </summary>

View File

@@ -0,0 +1,63 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text;
using WMS.Web.Core;
namespace WMS.Web.Domain.Entitys
{
/// <summary>
/// 物料
/// </summary>
[Serializable]
[Table("t_wms_materials")]
public class Materials : EntityBase
{
/// <summary>
/// ID
/// </summary>
public override int Id { get; set; }
/// <summary>
/// 组织编码
/// </summary>
public int OrgId { get; set; }
/// <summary>
/// 物料ID
/// </summary>
public int MaterialId { get; set; }
/// <summary>
/// 物料名称
/// </summary>
public string MaterialName { get; set; }
/// <summary>
/// 物料编码
/// </summary>
public string MaterialNumber { get; set; }
/// <summary>
/// 物料规格型号
/// </summary>
public string Specifications { get; set; }
/// <summary>
/// 基本单位
/// </summary>
public int BaseUnitId { get; set; }
/// <summary>
/// 基本单位名称
/// </summary>
public string BaseUnitName { get; set; }
/// <summary>
/// 基本单位编码
/// </summary>
public string BaseUnitNumber { get; set; }
/// <summary>
/// 条码
/// </summary>
public string BarCode { get; set; }
}
}

View File

@@ -0,0 +1,43 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using WMS.Web.Domain.Entitys;
namespace WMS.Web.Domain.Infrastructure
{
/// <summary>
/// 物料仓储接口
/// </summary>
public interface IMaterialsRepositories
{
/// <summary>
/// 物料添加
/// </summary>
/// <param name="entitys"></param>
/// <param name="isTransaction"></param>
/// <returns></returns>
Task<bool> AddRange(List<Materials> entitys, bool isTransaction = true);
/// <summary>
/// 列表
/// </summary>
/// <returns></returns>
Task<List<Materials>> GetEntityList(int? orgId = null);
/// <summary>
/// 物料
/// </summary>
/// <param name="mid"></param>
/// <returns></returns>
Task<Materials> Get(int mid);
/// <summary>
/// 物料
/// </summary>
/// <param name="code"></param>
/// <param name="orgId"></param>
/// <returns></returns>
Task<Materials> Get(string code, int orgId);
}
}

View File

@@ -15,11 +15,11 @@ namespace WMS.Web.Domain.Services.Public
public static Task Sync(IServiceProvider serviceProvider) public static Task Sync(IServiceProvider serviceProvider)
{ {
var sercice = serviceProvider.GetRequiredService<IErpService>(); var sercice = serviceProvider.GetRequiredService<IErpService>();
Task.Run(() => //Task.Run(() =>
{ //{
//异步-同步下物料数据 // //异步-同步下物料数据
sercice.BillQueryForMaterial().GetAwaiter().GetResult(); // sercice.BillQueryForMaterial().GetAwaiter().GetResult();
}); //});
Task.Run(() => Task.Run(() =>
{ {

View File

@@ -2,6 +2,7 @@
using ERP; using ERP;
using Microsoft.EntityFrameworkCore.Storage; using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options; using Microsoft.Extensions.Options;
using Newtonsoft.Json; using Newtonsoft.Json;
@@ -42,13 +43,17 @@ namespace WMS.Web.Domain.Services.Public
private ERPGWSoapClient _client; private ERPGWSoapClient _client;
private readonly IMemoryCache _memoryCache; private readonly IMemoryCache _memoryCache;
private readonly IBasicsRepositories _basicsRepositories; private readonly IBasicsRepositories _basicsRepositories;
private readonly IMaterialsRepositories _materialsRepositories;
private readonly IServiceProvider _serviceProvider;
public ErpService( public ErpService(
IMapper mapper, IMapper mapper,
IOptions<ErpOptions> erpOptions, IOptions<ErpOptions> erpOptions,
IOptions<AppOptions> appOptions, IOptions<AppOptions> appOptions, IServiceProvider serviceProvider,
ILogger<ErpService> logger, ILogger<ErpService> logger, IMaterialsRepositories materialsRepositories,
IMemoryCache memoryCache, IBasicsRepositories basicsRepositories) IMemoryCache memoryCache, IBasicsRepositories basicsRepositories)
{ {
_serviceProvider = serviceProvider;
this._materialsRepositories = materialsRepositories;
this._basicsRepositories = basicsRepositories; this._basicsRepositories = basicsRepositories;
this._erpOptions = erpOptions?.Value; this._erpOptions = erpOptions?.Value;
this._appOptions = appOptions?.Value; this._appOptions = appOptions?.Value;
@@ -808,14 +813,43 @@ namespace WMS.Web.Domain.Services.Public
var materials = _memoryCache.Get<List<ErpMaterialDto>>(_erpOptions.cache_materail_key); var materials = _memoryCache.Get<List<ErpMaterialDto>>(_erpOptions.cache_materail_key);
if (materials == null || materials.Count == 0) if (materials == null || materials.Count == 0)
{ {
return await this.BillQueryForMaterialPagedList(); var mats= await _materialsRepositories.GetEntityList(100008);
if (mats == null || mats.Count == 0)
return await this.BillQueryForMaterialPagedList();
else
{
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 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;
erp_materials_list.Add(lis);
}
_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 else
{ {
return ResultList<ErpMaterialDto>.ReSuccess(materials); return ResultList<ErpMaterialDto>.ReSuccess(materials);
} }
} }
catch (Exception) catch (Exception ex)
{ {
return ResultList<ErpMaterialDto>.ReFailure(ResultCodes.ErpMaterialError); return ResultList<ErpMaterialDto>.ReFailure(ResultCodes.ErpMaterialError);
@@ -840,13 +874,28 @@ namespace WMS.Web.Domain.Services.Public
if (mater == null) if (mater == null)
{ {
//2.1没有的话:去金蝶取 //2.1没有的话:去金蝶取
mater = await this.BillQueryForMaterialById(id); //mater = await this.BillQueryForMaterialById(id);
if (mater != null) var ent = await _materialsRepositories.Get(id);
if (ent != null)
{ {
//把取到的数据放集合中并重新给缓存 var linshi_mat= await _materialsRepositories.Get(ent.MaterialNumber, 100008);
materials.Add(mater); if (linshi_mat != null)
_memoryCache.Set(_erpOptions.cache_materail_key, materials, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan()))); {
return Result<ErpMaterialDto>.ReSuccess(mater); mater = new ErpMaterialDto();
mater.MaterialId = ent.MaterialId;
mater.MaterialName = linshi_mat.MaterialName;
mater.MaterialNumber = linshi_mat.MaterialNumber;
mater.Specifications = linshi_mat.Specifications;
mater.BaseUnitId = linshi_mat.BaseUnitId;
mater.BaseUnitName = linshi_mat.BaseUnitName;
mater.BaseUnitNumber = linshi_mat.BaseUnitNumber;
mater.BarCode = linshi_mat.BarCode;
mater.OrgId = linshi_mat.OrgId;
//把取到的数据放集合中并重新给缓存
materials.Add(mater);
_memoryCache.Set(_erpOptions.cache_materail_key, materials, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromMinutes(DateTimeUtil.GetTotalMinutesTimeSpan())));
return Result<ErpMaterialDto>.ReSuccess(mater);
}
} }
else else
return Result<ErpMaterialDto>.ReSuccess(null); return Result<ErpMaterialDto>.ReSuccess(null);

View File

@@ -369,10 +369,17 @@ namespace WMS.Web.Repositories.Configuration
ent.ToTable("t_wms_box_mark_billno"); ent.ToTable("t_wms_box_mark_billno");
ent.HasKey(x => x.Id); ent.HasKey(x => x.Id);
}); });
//物料
builder.Entity<Materials>(ent =>
{
ent.ToTable("t_wms_materials");
ent.HasKey(x => x.Id);
});
base.OnModelCreating(builder); base.OnModelCreating(builder);
} }
public DbSet<Materials> Materials { get; set; }
public DbSet<BoxMarkBillNo> BoxMarkBillNo { get; set; } public DbSet<BoxMarkBillNo> BoxMarkBillNo { get; set; }
public DbSet<BoxMark> BoxMark { get; set; } public DbSet<BoxMark> BoxMark { get; set; }
public DbSet<FileDownManager> FileDownManager { get; set; } public DbSet<FileDownManager> FileDownManager { get; set; }

View File

@@ -78,6 +78,7 @@ namespace Microsoft.Extensions.DependencyInjection
services.AddTransient<IErpOpsSyncDateRepositories, ErpOpsSyncDateRepositories>(); services.AddTransient<IErpOpsSyncDateRepositories, ErpOpsSyncDateRepositories>();
services.AddTransient<IInStockTaskBoxRepositories, InStockTaskBoxRepositories>(); services.AddTransient<IInStockTaskBoxRepositories, InStockTaskBoxRepositories>();
services.AddTransient<IBoxMarkRepositories, BoxMarkRepositories>(); services.AddTransient<IBoxMarkRepositories, BoxMarkRepositories>();
services.AddTransient<IMaterialsRepositories, MaterialsRepositories>();
} }
} }

View File

@@ -0,0 +1,111 @@
using AutoMapper;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Storage;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WMS.Web.Core.Help;
using WMS.Web.Domain.Entitys;
using WMS.Web.Domain.Infrastructure;
using WMS.Web.Domain.IService.Public;
using WMS.Web.Repositories.Configuration;
namespace WMS.Web.Repositories
{
/// <summary>
/// 物料仓储
/// </summary>
public class MaterialsRepositories : IMaterialsRepositories
{
private readonly IMapper _mapper;
private readonly RepositoryDbContext _context;
private readonly IServiceProvider _serviceProvider;
public MaterialsRepositories(RepositoryDbContext context, IServiceProvider serviceProvider,
IMapper mapper)
{
_serviceProvider = serviceProvider;
_context = context;
_mapper = mapper;
}
/// <summary>
/// 批量添加
/// </summary>
/// <param name="entitys"></param>
/// <param name="isTransaction"></param>
/// <returns></returns>
public async Task<bool> AddRange(List<Materials> entitys, bool isTransaction = true)
{
IDbContextTransaction _transaction = null;
if (isTransaction)
_transaction = _context.Database.BeginTransaction();
try
{
if (entitys != null && entitys.Count != 0)
{
await _context.Materials.AddRangeAsync(entitys);
await _context.SaveChangesAsync();
}
if (_transaction != null)
_transaction.Commit();
return true;
}
catch
{
if (_transaction != null)
_transaction.Rollback();
return false;
}
}
/// <summary>
/// 获取集合
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
public async Task<List<Materials>> GetEntityList(int? orgId = null)
{
var query = _context.Materials.Where(x => 1 == 1);
if (orgId.HasValue)
query = query.Where(x => x.OrgId == orgId.Value);
var res = await query.ToListAsync();
return res.Clone();
}
/// <summary>
/// 获取
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
public async Task<Materials> Get(int mid)
{
var query = _context.Materials.Where(x => 1 == 1);
query = query.Where(x => x.MaterialId == mid);
var res = await query.FirstOrDefaultAsync();
return res.Clone();
}
/// <summary>
/// 获取
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
public async Task<Materials> Get(string code,int orgId)
{
var query = _context.Materials.Where(x => x.MaterialNumber==code && x.OrgId==orgId);
var res = await query.FirstOrDefaultAsync();
return res.Clone();
}
}
}