增加序列号结构表

This commit is contained in:
18942506660
2023-11-11 10:23:59 +08:00
parent 7707c1615d
commit 27dac5680d
12 changed files with 259 additions and 37 deletions

View File

@@ -155,11 +155,6 @@
数量(装箱数量) 数量(装箱数量)
</summary> </summary>
</member> </member>
<member name="P:WMS.Web.Domain.Entitys.BoxDetails.SerialNumbers">
<summary>
序列号集
</summary>
</member>
<member name="T:WMS.Web.Domain.Entitys.BoxInventory"> <member name="T:WMS.Web.Domain.Entitys.BoxInventory">
<summary> <summary>
箱库存表头 箱库存表头
@@ -1052,6 +1047,46 @@
备注 备注
</summary> </summary>
</member> </member>
<member name="T:WMS.Web.Domain.Entitys.SerialNumbers">
<summary>
序列号
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.SerialNumbers.Id">
<summary>
主键 订单编号
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.SerialNumbers.SerialNumber">
<summary>
序列号
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.SerialNumbers.MaterialId">
<summary>
物料ID
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.SerialNumbers.BoxId">
<summary>
wms箱ID
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.SerialNumbers.OpsBoxId">
<summary>
对应老OPS的箱ID
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.SerialNumbers.Creator">
<summary>
创建人(老ops过来)
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.SerialNumbers.CreateTime">
<summary>
创建时间(老ops过来)
</summary>
</member>
<member name="T:WMS.Web.Domain.Entitys.TakeStock"> <member name="T:WMS.Web.Domain.Entitys.TakeStock">
<summary> <summary>
wms盘点单 wms盘点单
@@ -1541,6 +1576,19 @@
<param name="isTransaction"></param> <param name="isTransaction"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="T:WMS.Web.Domain.Infrastructure.ISerialNumbersRepositories">
<summary>
序列号
</summary>
</member>
<member name="M:WMS.Web.Domain.Infrastructure.ISerialNumbersRepositories.AddRange(System.Collections.Generic.List{WMS.Web.Domain.Entitys.SerialNumbers},System.Boolean)">
<summary>
批量添加
</summary>
<param name="entitys"></param>
<param name="isTransaction"></param>
<returns></returns>
</member>
<member name="M:WMS.Web.Domain.Infrastructure.ITakeStockRepositories.AddRange(System.Collections.Generic.List{WMS.Web.Domain.Entitys.TakeStock},System.Boolean)"> <member name="M:WMS.Web.Domain.Infrastructure.ITakeStockRepositories.AddRange(System.Collections.Generic.List{WMS.Web.Domain.Entitys.TakeStock},System.Boolean)">
<summary> <summary>
批量添加 批量添加

View File

@@ -62,7 +62,7 @@ namespace WMS.Web.Core.Dto
/// 序列号生成时间 /// 序列号生成时间
/// </summary> /// </summary>
[JsonProperty("barCreateTime")] [JsonProperty("barCreateTime")]
public string BarCreateTime { get; set; } public DateTime? BarCreateTime { get; set; }
/// <summary> /// <summary>
/// 序列号生成用户 /// 序列号生成用户
/// </summary> /// </summary>

View File

@@ -65,7 +65,7 @@ namespace WMS.Web.Domain.Entitys
if (d == null) return Result.ReFailure(ResultCodes.BoxMateriaNoData); if (d == null) return Result.ReFailure(ResultCodes.BoxMateriaNoData);
d.Qty = d.Qty - l.Qty; d.Qty = d.Qty - l.Qty;
if (d.Qty <= 0) this.Details.Remove(d); if (d.Qty <= 0) this.Details.Remove(d);
foreach (var s in l.SerialNumbers) d.SerialNumbers.Remove(s); //foreach (var s in l.SerialNumbers) d.SerialNumbers.Remove(s);
} }
return Result.ReSuccess(); return Result.ReSuccess();
} }
@@ -82,12 +82,12 @@ namespace WMS.Web.Domain.Entitys
{ {
MaterialId = l.MaterialId, MaterialId = l.MaterialId,
Qty=l.Qty, Qty=l.Qty,
SerialNumbers=l.SerialNumbers //SerialNumbers=l.SerialNumbers
}); });
continue; continue;
} }
d.Qty = d.Qty + l.Qty; d.Qty = d.Qty + l.Qty;
d.SerialNumbers.AddRange(l.SerialNumbers); //d.SerialNumbers.AddRange(l.SerialNumbers);
} }
return Result.ReSuccess(); return Result.ReSuccess();
} }

View File

@@ -31,9 +31,5 @@ namespace WMS.Web.Domain.Entitys
/// 数量(装箱数量) /// 数量(装箱数量)
/// </summary> /// </summary>
public decimal Qty { get; set; } public decimal Qty { get; set; }
/// <summary>
/// 序列号集
/// </summary>
public List<string> SerialNumbers { get; set; } = new List<string>();
} }
} }

View File

@@ -0,0 +1,62 @@
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_serialnumbers")]
public class SerialNumbers : EntityBase
{
public SerialNumbers() { }
public SerialNumbers(string serialNumber,int materialId,int boxId,int opsBoxId,string creator,DateTime? createTime)
{
this.SerialNumber = serialNumber;
this.MaterialId = materialId;
this.BoxId = boxId;
this.OpsBoxId = opsBoxId;
this.Creator = creator;
this.CreateTime = createTime == null ? DateTime.Now : (DateTime)createTime;
}
/// <summary>
/// 主键 订单编号
/// </summary>
[Column("Id")]
public override int Id { get; set; }
/// <summary>
/// 序列号
/// </summary>
[Column("SerialNumber")]
public string SerialNumber { get; set; }
/// <summary>
/// 物料ID
/// </summary>
[Column("MaterialId")]
public int MaterialId { get; set; }
/// <summary>
/// wms箱ID
/// </summary>
[Column("BoxId")]
public int BoxId { get; set; }
/// <summary>
/// 对应老OPS的箱ID
/// </summary>
[Column("OpsBoxId")]
public int OpsBoxId { get; set; }
/// <summary>
/// 创建人(老ops过来)
/// </summary>
[Column("Creator")]
public string Creator { get; set; }
/// <summary>
/// 创建时间(老ops过来)
/// </summary>
[Column("CreateTime")]
public DateTime CreateTime { get; set; } = DateTime.Now;
}
}

View File

@@ -0,0 +1,22 @@
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 ISerialNumbersRepositories
{
/// <summary>
/// 批量添加
/// </summary>
/// <param name="entitys"></param>
/// <param name="isTransaction"></param>
/// <returns></returns>
Task<bool> AddRange(List<SerialNumbers> entitys, bool isTransaction = true);
}
}

View File

@@ -19,8 +19,8 @@ namespace WMS.Web.Domain.Mappers
CreateMap<BoxDetails, BoxDetailResponse>(); CreateMap<BoxDetails, BoxDetailResponse>();
CreateMap<OpsBoxResponse, Box>(); CreateMap<OpsBoxResponse, Box>();
CreateMap<OpsBoxDetailsResponse, BoxDetails>() CreateMap<OpsBoxDetailsResponse, BoxDetails>();
.ForPath(x => x.SerialNumbers, ops => ops.MapFrom(x => x.SerialNumbers.Select(s=>s.SerialNumber).ToList()));
} }
} }
} }

View File

@@ -27,11 +27,13 @@ namespace WMS.Web.Domain.Services
private readonly IOpsService _opsService; private readonly IOpsService _opsService;
private readonly ISerialNumberOperateRepositories _serialNumberOperateRepositories; private readonly ISerialNumberOperateRepositories _serialNumberOperateRepositories;
private readonly IErpOpsSyncDateRepositories _erpOpsSyncDateRepositories; private readonly IErpOpsSyncDateRepositories _erpOpsSyncDateRepositories;
private readonly ISerialNumbersRepositories _serialNumbersRepositories;
public BoxService(IMapper mapper, ILoginService loginService, public BoxService(IMapper mapper, ILoginService loginService,
IBasicsRepositories transactionRepositories, IBasicsRepositories transactionRepositories,
IBoxRepositories boxRepositories, IOpsService opsService, IBoxRepositories boxRepositories, IOpsService opsService,
ISerialNumberOperateRepositories serialNumberOperateRepositories, ISerialNumberOperateRepositories serialNumberOperateRepositories,
IErpOpsSyncDateRepositories erpOpsSyncDateRepositories) IErpOpsSyncDateRepositories erpOpsSyncDateRepositories,
ISerialNumbersRepositories serialNumbersRepositories)
{ {
_mapper = mapper; _mapper = mapper;
_loginService = loginService; _loginService = loginService;
@@ -40,6 +42,7 @@ namespace WMS.Web.Domain.Services
_opsService = opsService; _opsService = opsService;
_serialNumberOperateRepositories = serialNumberOperateRepositories; _serialNumberOperateRepositories = serialNumberOperateRepositories;
_erpOpsSyncDateRepositories = erpOpsSyncDateRepositories; _erpOpsSyncDateRepositories = erpOpsSyncDateRepositories;
_serialNumbersRepositories = serialNumbersRepositories;
} }
public async Task<Result> Sync() public async Task<Result> Sync()
@@ -57,25 +60,39 @@ namespace WMS.Web.Domain.Services
} }
var boxs = _mapper.Map<List<Box>>(list); var boxs = _mapper.Map<List<Box>>(list);
//需要添加序列号记录表
List<SerialNumberOperate> sList = new List<SerialNumberOperate>();
foreach (var b in boxs)
{
foreach (var sn in b.Details.SelectMany(s => s.SerialNumbers))
{
SerialNumberOperate s = new SerialNumberOperate(sn, SerialNumberOperateType.Generate, b.CreateUser, "", b.SupplierId, b.OrgId, null, b.CreateTime);
sList.Add(s);
}
}
IDbContextTransaction _transaction = _transactionRepositories.GetTransaction(); IDbContextTransaction _transaction = _transactionRepositories.GetTransaction();
bool isRollback = false; bool isRollback = false;
bool isSuccess = true; bool isSuccess = true;
//批量添加 //批量添加
isSuccess = await _boxRepositories.AddRange(boxs, false); isSuccess = await _boxRepositories.AddRange(boxs, false);
if (!isSuccess) isRollback = true; if (!isSuccess) isRollback = true;
#region wsm插入数据库后生成Id
//需要添加序列号表和记录
List<SerialNumberOperate> soList = new List<SerialNumberOperate>();
List<SerialNumbers> sList = new List<SerialNumbers>();
foreach (var b in boxs)
{
var ops_box = list.FirstOrDefault(f => f.OpsBoxId == b.OpsBoxId);
foreach (var sn in ops_box.Details.SelectMany(s => s.SerialNumbers))
{
var detail = ops_box.Details.FirstOrDefault(f => f.SerialNumbers.Select(s=>s.SerialNumber).Equals(sn.SerialNumber));
var opsSerial = list.FirstOrDefault(f => f.OpsBoxId == b.OpsBoxId).Details
.SelectMany(s => s.SerialNumbers)
.FirstOrDefault(s => s.SerialNumber.Equals(sn.SerialNumber));
//序列号
SerialNumbers s = new SerialNumbers(sn.SerialNumber, detail.MaterialId,b.Id,b.OpsBoxId, opsSerial.BarCereateUser,opsSerial.BarCreateTime);
sList.Add(s);
//序列号记录
SerialNumberOperate so = new SerialNumberOperate(sn.SerialNumber, SerialNumberOperateType.Generate, opsSerial.BarCereateUser, "", b.SupplierId, b.OrgId, null, opsSerial.BarCreateTime);
soList.Add(so);
}
}
#endregion
//序列号
isSuccess = await _serialNumbersRepositories.AddRange(sList, false);
if (!isSuccess) isRollback = true;
//序列号操作记录 //序列号操作记录
var res = await this.SerialNumberOperate(sList, false); var res = await this.SerialNumberOperate(soList, false);
if (!res.Success) isRollback = true; if (!res.Success) isRollback = true;
//更新时间管理 //更新时间管理
isSuccess = await _erpOpsSyncDateRepositories.Edit(ErpOpsSyncType.Ops, false); isSuccess = await _erpOpsSyncDateRepositories.Edit(ErpOpsSyncType.Ops, false);

View File

@@ -27,9 +27,12 @@ namespace WMS.Web.Repositories
private readonly ISingleDataService _singleDataService; private readonly ISingleDataService _singleDataService;
private readonly ILoginRepositories _loginRepositories; private readonly ILoginRepositories _loginRepositories;
private readonly IBasicsRepositories _basicsRepositories; private readonly IBasicsRepositories _basicsRepositories;
private readonly IErpBasicDataExtendService _erpBasicDataExtendService;
private readonly IErpService _erpService;
public BoxRepositories(RepositoryDbContext context, IMapper mapper, IServiceProvider serviceProvider, public BoxRepositories(RepositoryDbContext context, IMapper mapper, IServiceProvider serviceProvider,
ISingleDataService singleDataService, ILoginRepositories loginRepositories, IBasicsRepositories basicsRepositories) ISingleDataService singleDataService, ILoginRepositories loginRepositories,
IBasicsRepositories basicsRepositories, IErpBasicDataExtendService erpBasicDataExtendService,
IErpService erpServic)
{ {
_context = context; _context = context;
_mapper = mapper; _mapper = mapper;
@@ -37,6 +40,8 @@ namespace WMS.Web.Repositories
_singleDataService = singleDataService; _singleDataService = singleDataService;
_loginRepositories = loginRepositories; _loginRepositories = loginRepositories;
_basicsRepositories = basicsRepositories; _basicsRepositories = basicsRepositories;
_erpBasicDataExtendService = erpBasicDataExtendService;
_erpService = erpServic;
} }
public async Task<Box> Get(int id) public async Task<Box> Get(int id)
{ {
@@ -54,11 +59,27 @@ namespace WMS.Web.Repositories
{ {
var list = await _context.Box.Include(x => x.Details).Where(f => BoxBillNos.Contains(f.BoxBillNo)).ToListAsync(); var list = await _context.Box.Include(x => x.Details).Where(f => BoxBillNos.Contains(f.BoxBillNo)).ToListAsync();
var resList = _mapper.Map<List<BoxResponse>>(list); var resList = _mapper.Map<List<BoxResponse>>(list);
var materials_result = await _erpService.BillQueryForMaterial();
if (!materials_result.IsSuccess)
return new List<BoxResponse>();
var materials = materials_result.Data.ToList();
var ids = list.Select(s => s.Id).ToList();
//获取所有序列号
var serialList = await _context.SerialNumbers.Where(f => ids.Contains(f.BoxId)).ToListAsync();
//获取物料信息 显示物料三件套 //获取物料信息 显示物料三件套
var mIds = list.SelectMany(s => s.Details).Select(s => s.MaterialId).ToList(); var mIds = list.SelectMany(s => s.Details).Select(s => s.MaterialId).ToList();
foreach (var r in resList) foreach (var r in resList)
{ {
foreach (var detail in r.Details)
{
detail.MaterialName = _erpBasicDataExtendService.GetMaterialName(materials, detail.MaterialId);
detail.MaterialNumber = _erpBasicDataExtendService.GetMaterialNumber(materials, detail.MaterialId);
detail.Specifications = _erpBasicDataExtendService.GetMaterialSpecifications(materials, detail.MaterialId);
detail.SerialNumbers = serialList.Where(w => w.BoxId == r.Id && w.MaterialId == detail.MaterialId).Select(s => s.SerialNumber).ToList();
}
r.TotalQty = r.Details.Sum(s => s.Qty); r.TotalQty = r.Details.Sum(s => s.Qty);
} }
return resList; return resList;
@@ -111,7 +132,7 @@ namespace WMS.Web.Repositories
public async Task<List<string>> GetByNos(List<string> billNos) public async Task<List<string>> GetByNos(List<string> billNos)
{ {
return await _context.Box return await _context.Box
.Where(w => billNos.Contains(w.BoxBillNo)).Select(s=>s.BoxBillNo).ToListAsync(); .Where(w => billNos.Contains(w.BoxBillNo)).Select(s => s.BoxBillNo).ToListAsync();
} }
public async Task<bool> AddRange(List<Box> entitys, bool isTransaction = true) public async Task<bool> AddRange(List<Box> entitys, bool isTransaction = true)

View File

@@ -49,6 +49,12 @@ namespace WMS.Web.Repositories.Configuration
ent.HasKey(x => x.Id); ent.HasKey(x => x.Id);
}); });
//序列号
builder.Entity<SerialNumbers>(ent =>
{
ent.ToTable("t_wms_serialnumbers");
ent.HasKey(x => x.Id);
});
//序列号操作记录 //序列号操作记录
builder.Entity<SerialNumberOperate>(ent => builder.Entity<SerialNumberOperate>(ent =>
{ {
@@ -226,10 +232,6 @@ namespace WMS.Web.Repositories.Configuration
{ {
ent.ToTable("t_ops_box_details"); ent.ToTable("t_ops_box_details");
ent.HasKey(x => x.Id); ent.HasKey(x => x.Id);
ent.Property(f => f.SerialNumbers).HasConversion(
v => JsonConvert.SerializeObject(v),
v => JsonConvert.DeserializeObject<List<string>>(v));
}); });
#endregion #endregion
@@ -238,6 +240,7 @@ namespace WMS.Web.Repositories.Configuration
base.OnModelCreating(builder); base.OnModelCreating(builder);
} }
public DbSet<SerialNumbers> SerialNumbers { get; set; }
public DbSet<ErpOpsSyncDate> ErpOpsSyncDate { get; set; } public DbSet<ErpOpsSyncDate> ErpOpsSyncDate { get; set; }
public DbSet<SerialNumberOperate> SerialNumberOperate { get; set; } public DbSet<SerialNumberOperate> SerialNumberOperate { get; set; }
public DbSet<ChangeBoxRecord> ChangeBoxRecord { get; set; } public DbSet<ChangeBoxRecord> ChangeBoxRecord { get; set; }

View File

@@ -46,7 +46,7 @@ namespace Microsoft.Extensions.DependencyInjection
services.AddTransient<IBoxInventoryRepositories, BoxInventoryRepositories>(); services.AddTransient<IBoxInventoryRepositories, BoxInventoryRepositories>();
services.AddTransient<ISerialNumbersRepositories, SerialNumbersRepositories>();
services.AddTransient<ISerialNumberOperateRepositories, SerialNumberOperateRepositories>(); services.AddTransient<ISerialNumberOperateRepositories, SerialNumberOperateRepositories>();
services.AddTransient<IChangeBoxRecordRepositories, ChangeBoxRecordRepositories>(); services.AddTransient<IChangeBoxRecordRepositories, ChangeBoxRecordRepositories>();
services.AddTransient<IMoveBoxRecordRepositories, MoveBoxRecordRepositories>(); services.AddTransient<IMoveBoxRecordRepositories, MoveBoxRecordRepositories>();

View File

@@ -0,0 +1,53 @@
using AutoMapper;
using Microsoft.EntityFrameworkCore.Storage;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
using WMS.Web.Domain.Entitys;
using WMS.Web.Domain.Infrastructure;
using WMS.Web.Repositories.Configuration;
namespace WMS.Web.Repositories
{
/// <summary>
/// 序列号
/// </summary>
public class SerialNumbersRepositories: ISerialNumbersRepositories
{
private readonly IMapper _mapper;
private readonly IServiceProvider _serviceProvider;
private readonly RepositoryDbContext _context;
public SerialNumbersRepositories(RepositoryDbContext context, IMapper mapper, IServiceProvider serviceProvider)
{
_context = context;
_mapper = mapper;
_serviceProvider = serviceProvider;
}
public async Task<bool> AddRange(List<SerialNumbers> entitys, bool isTransaction = true)
{
IDbContextTransaction _transaction = null;
if (isTransaction)
_transaction = _context.Database.BeginTransaction();
try
{
if (entitys != null && entitys.Count != 0)
{
await _context.SerialNumbers.AddRangeAsync(entitys);
await _context.SaveChangesAsync();
}
if (_transaction != null)
_transaction.Commit();
return true;
}
catch (Exception ex)
{
if (_transaction != null)
_transaction.Rollback();
return false;
}
}
}
}