diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
index 8f565c32..5adfb75d 100644
--- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
+++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
@@ -155,11 +155,6 @@
数量(装箱数量)
-
-
- 序列号集
-
-
箱库存表头
@@ -1052,6 +1047,46 @@
备注
+
+
+ 序列号
+
+
+
+
+ 主键 订单编号
+
+
+
+
+ 序列号
+
+
+
+
+ 物料ID
+
+
+
+
+ wms箱ID
+
+
+
+
+ 对应老OPS的箱ID
+
+
+
+
+ 创建人(老ops过来)
+
+
+
+
+ 创建时间(老ops过来)
+
+
wms盘点单
@@ -1541,6 +1576,19 @@
+
+
+ 序列号
+
+
+
+
+ 批量添加
+
+
+
+
+
批量添加
diff --git a/src/WMS.Web.Core/Dto/OpsBoxResponse.cs b/src/WMS.Web.Core/Dto/OpsBoxResponse.cs
index 2ee37dfc..6b61d1e2 100644
--- a/src/WMS.Web.Core/Dto/OpsBoxResponse.cs
+++ b/src/WMS.Web.Core/Dto/OpsBoxResponse.cs
@@ -62,7 +62,7 @@ namespace WMS.Web.Core.Dto
/// 序列号生成时间
///
[JsonProperty("barCreateTime")]
- public string BarCreateTime { get; set; }
+ public DateTime? BarCreateTime { get; set; }
///
/// 序列号生成用户
///
diff --git a/src/WMS.Web.Domain/Entitys/Box.cs b/src/WMS.Web.Domain/Entitys/Box.cs
index c6492641..48ffea00 100644
--- a/src/WMS.Web.Domain/Entitys/Box.cs
+++ b/src/WMS.Web.Domain/Entitys/Box.cs
@@ -65,7 +65,7 @@ namespace WMS.Web.Domain.Entitys
if (d == null) return Result.ReFailure(ResultCodes.BoxMateriaNoData);
d.Qty = d.Qty - l.Qty;
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();
}
@@ -82,12 +82,12 @@ namespace WMS.Web.Domain.Entitys
{
MaterialId = l.MaterialId,
Qty=l.Qty,
- SerialNumbers=l.SerialNumbers
+ //SerialNumbers=l.SerialNumbers
});
continue;
}
d.Qty = d.Qty + l.Qty;
- d.SerialNumbers.AddRange(l.SerialNumbers);
+ //d.SerialNumbers.AddRange(l.SerialNumbers);
}
return Result.ReSuccess();
}
diff --git a/src/WMS.Web.Domain/Entitys/BoxDetails.cs b/src/WMS.Web.Domain/Entitys/BoxDetails.cs
index 027eac26..d2ee524d 100644
--- a/src/WMS.Web.Domain/Entitys/BoxDetails.cs
+++ b/src/WMS.Web.Domain/Entitys/BoxDetails.cs
@@ -31,9 +31,5 @@ namespace WMS.Web.Domain.Entitys
/// 数量(装箱数量)
///
public decimal Qty { get; set; }
- ///
- /// 序列号集
- ///
- public List SerialNumbers { get; set; } = new List();
}
}
diff --git a/src/WMS.Web.Domain/Entitys/SerialNumbers.cs b/src/WMS.Web.Domain/Entitys/SerialNumbers.cs
new file mode 100644
index 00000000..ea55eecf
--- /dev/null
+++ b/src/WMS.Web.Domain/Entitys/SerialNumbers.cs
@@ -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
+{
+ ///
+ /// 序列号
+ ///
+ [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;
+ }
+ ///
+ /// 主键 订单编号
+ ///
+ [Column("Id")]
+ public override int Id { get; set; }
+ ///
+ /// 序列号
+ ///
+ [Column("SerialNumber")]
+ public string SerialNumber { get; set; }
+ ///
+ /// 物料ID
+ ///
+ [Column("MaterialId")]
+ public int MaterialId { get; set; }
+ ///
+ /// wms箱ID
+ ///
+ [Column("BoxId")]
+ public int BoxId { get; set; }
+ ///
+ /// 对应老OPS的箱ID
+ ///
+ [Column("OpsBoxId")]
+ public int OpsBoxId { get; set; }
+ ///
+ /// 创建人(老ops过来)
+ ///
+ [Column("Creator")]
+ public string Creator { get; set; }
+ ///
+ /// 创建时间(老ops过来)
+ ///
+ [Column("CreateTime")]
+ public DateTime CreateTime { get; set; } = DateTime.Now;
+ }
+}
diff --git a/src/WMS.Web.Domain/Infrastructure/ISerialNumbersRepositories.cs b/src/WMS.Web.Domain/Infrastructure/ISerialNumbersRepositories.cs
new file mode 100644
index 00000000..201841ca
--- /dev/null
+++ b/src/WMS.Web.Domain/Infrastructure/ISerialNumbersRepositories.cs
@@ -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
+{
+ ///
+ /// 序列号
+ ///
+ public interface ISerialNumbersRepositories
+ {
+ ///
+ /// 批量添加
+ ///
+ ///
+ ///
+ ///
+ Task AddRange(List entitys, bool isTransaction = true);
+ }
+}
diff --git a/src/WMS.Web.Domain/Mappers/BoxMapper.cs b/src/WMS.Web.Domain/Mappers/BoxMapper.cs
index 5c1114c7..adcf20db 100644
--- a/src/WMS.Web.Domain/Mappers/BoxMapper.cs
+++ b/src/WMS.Web.Domain/Mappers/BoxMapper.cs
@@ -19,8 +19,8 @@ namespace WMS.Web.Domain.Mappers
CreateMap();
CreateMap();
- CreateMap()
- .ForPath(x => x.SerialNumbers, ops => ops.MapFrom(x => x.SerialNumbers.Select(s=>s.SerialNumber).ToList()));
+ CreateMap();
+
}
}
}
diff --git a/src/WMS.Web.Domain/Services/BoxService.cs b/src/WMS.Web.Domain/Services/BoxService.cs
index e08f2c1f..605dc4ea 100644
--- a/src/WMS.Web.Domain/Services/BoxService.cs
+++ b/src/WMS.Web.Domain/Services/BoxService.cs
@@ -27,11 +27,13 @@ namespace WMS.Web.Domain.Services
private readonly IOpsService _opsService;
private readonly ISerialNumberOperateRepositories _serialNumberOperateRepositories;
private readonly IErpOpsSyncDateRepositories _erpOpsSyncDateRepositories;
+ private readonly ISerialNumbersRepositories _serialNumbersRepositories;
public BoxService(IMapper mapper, ILoginService loginService,
IBasicsRepositories transactionRepositories,
IBoxRepositories boxRepositories, IOpsService opsService,
ISerialNumberOperateRepositories serialNumberOperateRepositories,
- IErpOpsSyncDateRepositories erpOpsSyncDateRepositories)
+ IErpOpsSyncDateRepositories erpOpsSyncDateRepositories,
+ ISerialNumbersRepositories serialNumbersRepositories)
{
_mapper = mapper;
_loginService = loginService;
@@ -40,6 +42,7 @@ namespace WMS.Web.Domain.Services
_opsService = opsService;
_serialNumberOperateRepositories = serialNumberOperateRepositories;
_erpOpsSyncDateRepositories = erpOpsSyncDateRepositories;
+ _serialNumbersRepositories = serialNumbersRepositories;
}
public async Task Sync()
@@ -57,25 +60,39 @@ namespace WMS.Web.Domain.Services
}
var boxs = _mapper.Map>(list);
- //需要添加序列号记录表
- List sList = new List();
- 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();
bool isRollback = false;
bool isSuccess = true;
//批量添加
isSuccess = await _boxRepositories.AddRange(boxs, false);
if (!isSuccess) isRollback = true;
+ #region 序列号和序列号记录 因为要得到wsm插入数据库后生成Id
+ //需要添加序列号表和记录
+ List soList = new List();
+ List sList = new List();
+ 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;
//更新时间管理
isSuccess = await _erpOpsSyncDateRepositories.Edit(ErpOpsSyncType.Ops, false);
diff --git a/src/WMS.Web.Repositories/BoxRepositories.cs b/src/WMS.Web.Repositories/BoxRepositories.cs
index 110cb16a..c592c179 100644
--- a/src/WMS.Web.Repositories/BoxRepositories.cs
+++ b/src/WMS.Web.Repositories/BoxRepositories.cs
@@ -27,9 +27,12 @@ namespace WMS.Web.Repositories
private readonly ISingleDataService _singleDataService;
private readonly ILoginRepositories _loginRepositories;
private readonly IBasicsRepositories _basicsRepositories;
-
+ private readonly IErpBasicDataExtendService _erpBasicDataExtendService;
+ private readonly IErpService _erpService;
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;
_mapper = mapper;
@@ -37,6 +40,8 @@ namespace WMS.Web.Repositories
_singleDataService = singleDataService;
_loginRepositories = loginRepositories;
_basicsRepositories = basicsRepositories;
+ _erpBasicDataExtendService = erpBasicDataExtendService;
+ _erpService = erpServic;
}
public async Task 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 resList = _mapper.Map>(list);
-
+
+ var materials_result = await _erpService.BillQueryForMaterial();
+ if (!materials_result.IsSuccess)
+ return new List();
+ 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();
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);
}
return resList;
@@ -111,7 +132,7 @@ namespace WMS.Web.Repositories
public async Task> GetByNos(List billNos)
{
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 AddRange(List entitys, bool isTransaction = true)
diff --git a/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs b/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs
index 248e7e4b..3b92baaa 100644
--- a/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs
+++ b/src/WMS.Web.Repositories/Configuration/RepositoryDbContext.cs
@@ -49,6 +49,12 @@ namespace WMS.Web.Repositories.Configuration
ent.HasKey(x => x.Id);
});
+ //序列号
+ builder.Entity(ent =>
+ {
+ ent.ToTable("t_wms_serialnumbers");
+ ent.HasKey(x => x.Id);
+ });
//序列号操作记录
builder.Entity(ent =>
{
@@ -226,10 +232,6 @@ namespace WMS.Web.Repositories.Configuration
{
ent.ToTable("t_ops_box_details");
ent.HasKey(x => x.Id);
-
- ent.Property(f => f.SerialNumbers).HasConversion(
- v => JsonConvert.SerializeObject(v),
- v => JsonConvert.DeserializeObject>(v));
});
#endregion
@@ -238,6 +240,7 @@ namespace WMS.Web.Repositories.Configuration
base.OnModelCreating(builder);
}
+ public DbSet SerialNumbers { get; set; }
public DbSet ErpOpsSyncDate { get; set; }
public DbSet SerialNumberOperate { get; set; }
public DbSet ChangeBoxRecord { get; set; }
diff --git a/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs b/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs
index 5ea91160..4ed35dbb 100644
--- a/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs
+++ b/src/WMS.Web.Repositories/DependencyInjection/AppBuilderExtensions.cs
@@ -46,7 +46,7 @@ namespace Microsoft.Extensions.DependencyInjection
services.AddTransient();
-
+ services.AddTransient();
services.AddTransient();
services.AddTransient();
services.AddTransient();
diff --git a/src/WMS.Web.Repositories/SerialNumbersRepositories.cs b/src/WMS.Web.Repositories/SerialNumbersRepositories.cs
new file mode 100644
index 00000000..b9c5cf21
--- /dev/null
+++ b/src/WMS.Web.Repositories/SerialNumbersRepositories.cs
@@ -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
+{
+ ///
+ /// 序列号
+ ///
+ 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 AddRange(List 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;
+ }
+ }
+ }
+}