diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml
index 5b3b8f99..3434af0d 100644
--- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml
+++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml
@@ -2491,6 +2491,51 @@
单位
+
+
+ 物料收发明细-生成dto
+
+
+
+
+ 仓库编码
+
+
+
+
+ 仓位ID
+
+
+
+
+ 箱ID
+
+
+
+
+ 物料ID
+
+
+
+
+ 单据类型
+
+
+
+
+ 单据编号
+
+
+
+
+ 数量:出入库
+
+
+
+
+ 类型:1为入库,2为出库
+
+
物料收发明细-查询请求
diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
index 8fd2d917..03473dcb 100644
--- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
+++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
@@ -823,6 +823,16 @@
仓库编码
+
+
+ 仓位ID
+
+
+
+
+ 箱ID
+
+
单据类型
@@ -1901,6 +1911,15 @@
+
+
+ 列表-根据物料和仓库和仓位
+
+
+
+
+
+
物料收发明细-仓储接口
@@ -2259,6 +2278,19 @@
+
+
+ 物料收发明细:服务接口
+
+
+
+
+ 生成:物料收发明细
+
+
+
+
+
出库服务
@@ -3385,6 +3417,19 @@
+
+
+ 物料收发明细:服务
+
+
+
+
+ 生成:物料收发明细
+
+
+
+
+
出库服务
diff --git a/src/WMS.Web.Core/Dto/Inventory/InventoryInOutDetailsGenerateDto.cs b/src/WMS.Web.Core/Dto/Inventory/InventoryInOutDetailsGenerateDto.cs
new file mode 100644
index 00000000..6c68fd78
--- /dev/null
+++ b/src/WMS.Web.Core/Dto/Inventory/InventoryInOutDetailsGenerateDto.cs
@@ -0,0 +1,55 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace WMS.Web.Core.Dto.Inventory
+{
+ ///
+ /// 物料收发明细-生成dto
+ ///
+ public class InventoryInOutDetailsGenerateDto
+ {
+ ///
+ /// 仓库编码
+ ///
+ public string StockCode { get; set; }
+
+ ///
+ /// 仓位ID
+ ///
+ public int SubStockId { get; set; }
+
+ ///
+ /// 箱ID
+ ///
+ public int BoxId { get; set; }
+
+ ///
+ /// 物料ID
+ ///
+ public int MaterialId { get; set; }
+
+ ///
+ /// 单据类型
+ ///
+ public int OrderType { get; set; }
+ ///
+ /// 单据编号
+ ///
+ public string OrderBillNo { get; set; }
+
+ ///
+ /// 数量:出入库
+ ///
+ public decimal Qty { get; set; }
+ /////
+ ///// 结存
+ /////
+ //public decimal SurplusQty { get; set; }
+
+ ///
+ /// 类型:1为入库,2为出库
+ ///
+ public int InventoryInOutType { get; set; }
+ }
+}
diff --git a/src/WMS.Web.Domain/Entitys/InventoryInOutDetails.cs b/src/WMS.Web.Domain/Entitys/InventoryInOutDetails.cs
index b3380d1f..b912d1fa 100644
--- a/src/WMS.Web.Domain/Entitys/InventoryInOutDetails.cs
+++ b/src/WMS.Web.Domain/Entitys/InventoryInOutDetails.cs
@@ -31,6 +31,16 @@ namespace WMS.Web.Domain.Entitys
///
public string StockCode { get; set; }
+ ///
+ /// 仓位ID
+ ///
+ public int SubStockId { get; set; }
+
+ ///
+ /// 箱ID
+ ///
+ public int BoxId { get; set; }
+
///
/// 单据类型
///
diff --git a/src/WMS.Web.Domain/IService/IInventoryInOutDetailsService.cs b/src/WMS.Web.Domain/IService/IInventoryInOutDetailsService.cs
new file mode 100644
index 00000000..350dd5ec
--- /dev/null
+++ b/src/WMS.Web.Domain/IService/IInventoryInOutDetailsService.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+using WMS.Web.Core.Dto.Inventory;
+using WMS.Web.Core.Internal.Results;
+
+namespace WMS.Web.Domain.IService
+{
+ ///
+ /// 物料收发明细:服务接口
+ ///
+ public interface IInventoryInOutDetailsService
+ {
+ ///
+ /// 生成:物料收发明细
+ ///
+ ///
+ ///
+ ///
+ Task GenerateInOrOutDetails(List dtos, bool isTransaction);
+ }
+}
diff --git a/src/WMS.Web.Domain/Infrastructure/IInventoryDetailsRepositories.cs b/src/WMS.Web.Domain/Infrastructure/IInventoryDetailsRepositories.cs
index 27d6c30c..7689385a 100644
--- a/src/WMS.Web.Domain/Infrastructure/IInventoryDetailsRepositories.cs
+++ b/src/WMS.Web.Domain/Infrastructure/IInventoryDetailsRepositories.cs
@@ -35,5 +35,14 @@ namespace WMS.Web.Domain.Infrastructure
///
///
Task UpdateRange(List entitys, bool isTransaction = true);
+
+ ///
+ /// 列表-根据物料和仓库和仓位
+ ///
+ ///
+ ///
+ ///
+ ///
+ Task> GetListBy(List materialIds, List stockCodes, List subStockIds);
}
}
diff --git a/src/WMS.Web.Domain/Mappers/InventoryMapper.cs b/src/WMS.Web.Domain/Mappers/InventoryMapper.cs
index 6aee1b96..4bdccbc1 100644
--- a/src/WMS.Web.Domain/Mappers/InventoryMapper.cs
+++ b/src/WMS.Web.Domain/Mappers/InventoryMapper.cs
@@ -36,7 +36,14 @@ namespace WMS.Web.Domain.Mappers
//箱库存映射
CreateMap();
CreateMap();
+
+ //物料收发明细-映射
+ CreateMap()
+ .ForMember(x => x.OrderType, ops => ops.MapFrom(x => x.OrderType))
+ .ForMember(x => x.Type, ops => ops.MapFrom(x => x.InventoryInOutType));
+
+
}
}
}
diff --git a/src/WMS.Web.Domain/Services/InventoryInOutDetailsService.cs b/src/WMS.Web.Domain/Services/InventoryInOutDetailsService.cs
new file mode 100644
index 00000000..f05785a4
--- /dev/null
+++ b/src/WMS.Web.Domain/Services/InventoryInOutDetailsService.cs
@@ -0,0 +1,78 @@
+using AutoMapper;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WMS.Web.Core.Dto.Inventory;
+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.Values;
+
+namespace WMS.Web.Domain.Services
+{
+ ///
+ /// 物料收发明细:服务
+ ///
+ public class InventoryInOutDetailsService: IInventoryInOutDetailsService
+ {
+ private readonly IMapper _mapper;
+ private readonly IBoxRepositories _boxRepositories;
+ private readonly ISerialNumbersRepositories _serialNumbersRepositories;
+ private readonly IInventoryDetailsRepositories _inventoryDetailsRepositories;
+ private readonly IInventoryInOutDetailsRepositories _inventoryInOutDetailsRepositories;
+ public InventoryInOutDetailsService(IMapper mapper, IBoxRepositories boxRepositories,
+ ISerialNumbersRepositories serialNumbersRepositories,
+ IInventoryDetailsRepositories inventoryDetailsRepositories,
+ IInventoryInOutDetailsRepositories inventoryInOutDetailsRepositories)
+ {
+ _mapper = mapper;
+ _boxRepositories = boxRepositories;
+ _inventoryDetailsRepositories = inventoryDetailsRepositories;
+ _serialNumbersRepositories = serialNumbersRepositories;
+ _inventoryInOutDetailsRepositories = inventoryInOutDetailsRepositories;
+ }
+
+ ///
+ /// 生成:物料收发明细
+ ///
+ ///
+ ///
+ ///
+ public async Task GenerateInOrOutDetails(List dtos,bool isTransaction)
+ {
+ //找到物料对应的即时库存明细
+ var materialIds = dtos.Select(x => x.MaterialId).ToList();
+ var stockCodes = dtos.GroupBy(x => x.StockCode).Select(x => x.Key).ToList();
+ var subStockIds = dtos.GroupBy(x => x.SubStockId).Select(x => x.Key).ToList();
+ var inventoryDetails=await _inventoryDetailsRepositories.GetListBy(materialIds, stockCodes, subStockIds);
+
+ //1.创建要新增的对象
+ var add_entitys = new List();
+
+ //2.遍历:box库存来源数据明细
+ foreach (var dto in dtos)
+ {
+ //2.1当前的即时库存明细
+ var currentDetail= inventoryDetails.Where(x => x.MaterialId == dto.MaterialId && x.StockCode == dto.StockCode && x.SubStockId == dto.SubStockId).FirstOrDefault();
+
+ //2.2组装物料收发明细实体
+ var entity = _mapper.Map(dto);
+ entity.SurplusQty = currentDetail == null ? 0 : currentDetail.Qty;
+ add_entitys.Add(entity);
+ }
+
+ var isSuccess = true;
+ if (add_entitys.Count != 0)
+ {
+ isSuccess = await _inventoryInOutDetailsRepositories.AddRange(add_entitys, isTransaction);
+ if(!isSuccess)
+ return Result.ReFailure(ResultCodes.InventoryInOutDetailsWriteError);
+ }
+
+ return Result.ReSuccess();
+ }
+ }
+}
diff --git a/src/WMS.Web.Domain/Values/ResultCodes.cs b/src/WMS.Web.Domain/Values/ResultCodes.cs
index 53c50191..a9fb7288 100644
--- a/src/WMS.Web.Domain/Values/ResultCodes.cs
+++ b/src/WMS.Web.Domain/Values/ResultCodes.cs
@@ -51,6 +51,7 @@ namespace WMS.Web.Domain.Values
public static ValueTuple BoxInventoryMaterialNoDataError = (800041, "箱物料库存数据不存在,请稍候再试!");
public static ValueTuple BoxInventoryNoInventoryError = (800012, "箱库存物料数量不足,请核对后再试!");
public static ValueTuple BoxInventoryHaveInventoryError = (800013, "该箱库存已经存在,请核对后再试!");
+ public static ValueTuple InventoryInOutDetailsWriteError = (800014, "写入物料收发明细失败!");
}
diff --git a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs
index ad341494..ec831592 100644
--- a/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs
+++ b/src/WMS.Web.Repositories/DependencyInjection/AppBuilder.cs
@@ -293,6 +293,8 @@ namespace WMS.Web.Repositories.DependencyInjection
Services.AddTransient();
Services.AddTransient();
Services.AddTransient();
+ Services.AddTransient();
+
}
}
}
diff --git a/src/WMS.Web.Repositories/InventoryDetailsRepositories.cs b/src/WMS.Web.Repositories/InventoryDetailsRepositories.cs
index 8dc58d65..cc4cb367 100644
--- a/src/WMS.Web.Repositories/InventoryDetailsRepositories.cs
+++ b/src/WMS.Web.Repositories/InventoryDetailsRepositories.cs
@@ -168,5 +168,19 @@ namespace WMS.Web.Repositories
{
return await GetPagedList(dto);
}
+
+ ///
+ /// 列表-根据物料和仓库和仓位
+ ///
+ ///
+ ///
+ ///
+ ///
+ public async Task> GetListBy(List materialIds, List stockCodes, List subStockIds)
+ {
+ return await _context.InventoryDetails.Where(x => materialIds.Contains(x.MaterialId) &&
+ stockCodes.Contains(x.StockCode) &&
+ subStockIds.Contains(x.SubStockId) ).ToListAsync();
+ }
}
}