diff --git a/src/WMS.Web.Api/Controllers/BackRecordController.cs b/src/WMS.Web.Api/Controllers/BackRecordController.cs
index 0c2992f1..e092a915 100644
--- a/src/WMS.Web.Api/Controllers/BackRecordController.cs
+++ b/src/WMS.Web.Api/Controllers/BackRecordController.cs
@@ -59,7 +59,7 @@ namespace WMS.Web.Api.Controllers
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return Result.ReFailure(ResultCodes.Token_Invalid_Error);
- return await _backRecordService.BackShelf(dto, loginInfo);
+ return await _backRecordService.BackShelf(dto, BackRecordType.OutstockOn, loginInfo);
}
///
@@ -74,7 +74,7 @@ namespace WMS.Web.Api.Controllers
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null)
return Result.ReFailure(ResultCodes.Token_Invalid_Error);
- return await _backRecordService.BackShelf(dto, loginInfo);
+ return await _backRecordService.BackShelf(dto, BackRecordType.InstockOff, loginInfo);
}
}
diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml
index fa6192af..c8bfd896 100644
--- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml
+++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml
@@ -205,6 +205,11 @@
数量
+
+
+ 仓库code
+
+
仓位ID
@@ -220,11 +225,6 @@
保存出入库回退上下架:请求对象
-
-
- 类型:1为入库回退下架,2为出库回退上架
-
-
明细
@@ -1945,6 +1945,56 @@
保存入库单-请求对象
+
+
+ 出入库回退上下架-箱库存处理对象
+
+
+
+
+ 类型:1为入库回退下架,2为出库回退上架
+
+
+
+
+ 箱ID
+
+
+
+
+ 仓库编码
+
+
+
+
+ 仓位ID
+
+
+
+
+ 明细
+
+
+
+
+ 出入库回退上下架明细-箱库存处理对象
+
+
+
+
+ 物料ID
+
+
+
+
+ 数量
+
+
+
+
+ 序列号集
+
+
改箱-使用
diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
index dce2c841..bb947823 100644
--- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
+++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
@@ -80,6 +80,11 @@
数量
+
+
+ 仓库code
+
+
仓位ID
@@ -1836,11 +1841,12 @@
出入库回退上下架:服务接口
-
+
回退上下架
+
@@ -2841,11 +2847,12 @@
出入库回退上下架:服务接口
-
+
回退上下架
+
@@ -3084,6 +3091,14 @@
+
+
+ 入库回退上下架-箱库存的变更
+
+
+
+
+
出库服务
diff --git a/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordDetailsRequest.cs b/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordDetailsRequest.cs
index c5b75ba8..c81bff60 100644
--- a/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordDetailsRequest.cs
+++ b/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordDetailsRequest.cs
@@ -25,6 +25,13 @@ namespace WMS.Web.Core.Dto.BackRecord
///
[Required(ErrorMessage = "数量不能为空")]
public decimal Qty { get; set; }
+
+ ///
+ /// 仓库code
+ ///
+ [Required(ErrorMessage = "仓库不能为空")]
+ public string StockCode { get; set; }
+
///
/// 仓位ID
///
diff --git a/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordRequest.cs b/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordRequest.cs
index ad521ddf..a95f588d 100644
--- a/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordRequest.cs
+++ b/src/WMS.Web.Core/Dto/BackRecord/SaveBackRecordRequest.cs
@@ -10,12 +10,6 @@ namespace WMS.Web.Core.Dto.BackRecord
///
public class SaveBackRecordRequest
{
- ///
- /// 类型:1为入库回退下架,2为出库回退上架
- ///
- [Required(ErrorMessage = "回退类型不能为空")]
- public int BackRecordType { get; set; }
-
///
/// 明细
///
diff --git a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryBackGenerateDto.cs b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryBackGenerateDto.cs
new file mode 100644
index 00000000..cbab813b
--- /dev/null
+++ b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryBackGenerateDto.cs
@@ -0,0 +1,57 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace WMS.Web.Core.Dto.Inventory
+{
+ ///
+ /// 出入库回退上下架-箱库存处理对象
+ ///
+ public class BoxInventoryBackGenerateDto
+ {
+ ///
+ /// 类型:1为入库回退下架,2为出库回退上架
+ ///
+ public int BackRecordType { get; set; }
+
+ ///
+ /// 箱ID
+ ///
+ public int BoxId { get; set; }
+
+ ///
+ /// 仓库编码
+ ///
+ public string StockCode { get; set; }
+
+ ///
+ /// 仓位ID
+ ///
+ public int SubStockId { get; set; }
+
+ ///
+ /// 明细
+ ///
+ public List Details { get; set; }
+ }
+
+ ///
+ /// 出入库回退上下架明细-箱库存处理对象
+ ///
+ public class BoxInventoryBackDetailsGenerateDto
+ {
+ ///
+ /// 物料ID
+ ///
+ public int MaterialId { get; set; }
+ ///
+ /// 数量
+ ///
+ public decimal Qty { get; set; }
+
+ ///
+ /// 序列号集
+ ///
+ public List SerialNumbers { get; set; } = new List();
+ }
+}
diff --git a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryChangeGenerateDto.cs b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryChangeGenerateDto.cs
index ff8b0472..7c0dadf0 100644
--- a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryChangeGenerateDto.cs
+++ b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryChangeGenerateDto.cs
@@ -19,21 +19,6 @@ namespace WMS.Web.Core.Dto.Inventory
///
public int TargetBoxId { get; set; }
- /////
- ///// 仓库编码:目标仓库
- /////
- //public string StockCode { get; set; }
-
- /////
- ///// 仓位:目标仓位
- /////
- //public int SubStockId { get; set; }
-
- /////
- ///// 出入库类型:有个枚举的
- /////
- //public int InventoryInOutType { get; set; }
-
///
/// 明细
///
diff --git a/src/WMS.Web.Domain/Entitys/BackRecordDetails.cs b/src/WMS.Web.Domain/Entitys/BackRecordDetails.cs
index aeea13fa..e33adaf1 100644
--- a/src/WMS.Web.Domain/Entitys/BackRecordDetails.cs
+++ b/src/WMS.Web.Domain/Entitys/BackRecordDetails.cs
@@ -33,6 +33,10 @@ namespace WMS.Web.Domain.Entitys
///
public decimal Qty { get; set; }
///
+ /// 仓库code
+ ///
+ public string StockCode { get; set; }
+ ///
/// 仓位ID
///
public int SubStockId { get; set; }
diff --git a/src/WMS.Web.Domain/IService/IBackRecordService.cs b/src/WMS.Web.Domain/IService/IBackRecordService.cs
index a5767bb7..7ee6e0b7 100644
--- a/src/WMS.Web.Domain/IService/IBackRecordService.cs
+++ b/src/WMS.Web.Domain/IService/IBackRecordService.cs
@@ -5,6 +5,7 @@ using System.Threading.Tasks;
using WMS.Web.Core.Dto.BackRecord;
using WMS.Web.Core.Dto.Login;
using WMS.Web.Core.Internal.Results;
+using WMS.Web.Domain.Values;
namespace WMS.Web.Domain.IService
{
@@ -17,8 +18,9 @@ namespace WMS.Web.Domain.IService
/// 回退上下架
///
///
+ ///
///
///
- Task BackShelf(SaveBackRecordRequest dto, LoginInDto loginInfo);
+ Task BackShelf(SaveBackRecordRequest dto, BackRecordType type, LoginInDto loginInfo);
}
}
diff --git a/src/WMS.Web.Domain/Mappers/InventoryMapper.cs b/src/WMS.Web.Domain/Mappers/InventoryMapper.cs
index bb0b5034..5e50fe18 100644
--- a/src/WMS.Web.Domain/Mappers/InventoryMapper.cs
+++ b/src/WMS.Web.Domain/Mappers/InventoryMapper.cs
@@ -19,7 +19,11 @@ namespace WMS.Web.Domain.Mappers
//移箱映射
CreateMap();
- CreateMap() ;
+ CreateMap() ;
+
+ //出入库回退上下架映射
+ CreateMap();
+ CreateMap();
}
}
}
diff --git a/src/WMS.Web.Domain/Services/BackRecordService.cs b/src/WMS.Web.Domain/Services/BackRecordService.cs
index ef12a86c..0f2019f5 100644
--- a/src/WMS.Web.Domain/Services/BackRecordService.cs
+++ b/src/WMS.Web.Domain/Services/BackRecordService.cs
@@ -40,16 +40,17 @@ namespace WMS.Web.Domain.Services
/// 回退上下架
///
///
+ ///
///
///
- public async Task BackShelf(SaveBackRecordRequest dto, LoginInDto loginInfo)
+ public async Task BackShelf(SaveBackRecordRequest dto, BackRecordType type, LoginInDto loginInfo)
{
IDbContextTransaction _transaction = _basicsRepositories.GetTransaction();
bool isRollback = false;
bool isTransaction = false;
var entity = new BackRecord();
- entity.Type = (BackRecordType)dto.BackRecordType;
+ entity.Type = type;
entity.Details = _mapper.Map>(dto.Details);
entity.Create(loginInfo.UserInfo.StaffId);
entity = await _backRecordRepositories.Add(entity, isTransaction);
diff --git a/src/WMS.Web.Domain/Services/InventoryService.cs b/src/WMS.Web.Domain/Services/InventoryService.cs
index 7b7a4faf..fe49cbd8 100644
--- a/src/WMS.Web.Domain/Services/InventoryService.cs
+++ b/src/WMS.Web.Domain/Services/InventoryService.cs
@@ -231,5 +231,100 @@ namespace WMS.Web.Domain.Services
}
return Result.ReSuccess();
}
+
+ ///
+ /// 入库回退上下架-箱库存的变更
+ ///
+ ///
+ ///
+ ///
+ public async Task GenerateBackBox(List dtoDatas, bool isTransaction)
+ {
+ //1.判断来源数据是否存在
+ if (dtoDatas != null || dtoDatas.Count == 0)
+ return Result.ReFailure(ResultCodes.InventoryNoSourceError);
+
+ var update_entitys = new List();
+ var add_entitys = new List();
+
+ //2.获取“箱库存集合”
+ var boxIds = dtoDatas.GroupBy(x => x.BoxId).Select(x => x.Key).ToList();
+ var boxInventorys = await _boxInventoryRepositories.GetList(boxIds);
+ var boxs = await _boxRepositories.GetEntityList(boxIds);
+ var serialNumbers = await _serialNumbersRepositories.GetEntityListByBoxIds(boxIds);
+ //3.遍历:dto
+ foreach (var dto in dtoDatas)
+ {
+ //上架
+ if (dto.BackRecordType == (int)BackRecordType.OutstockOn)
+ {
+ //3.1上架的时候:箱一定是不存在于箱库存当中的,有则返回提示“已有箱库存,不需要再扫上架”
+ var ishave = boxInventorys.Where(x => x.BoxId == dto.BoxId).Any();
+ if (ishave)
+ return Result.ReFailure(ResultCodes.BoxInventoryHaveInventoryError);
+ //3.1.1取箱信息
+ var box = boxs.Where(x => x.Id == dto.BoxId).FirstOrDefault();
+ if (box == null)
+ return Result.ReFailure(ResultCodes.BoxNoData);
+ //3.1.2去箱对应的序列号信息
+ var box_serialNumbers = serialNumbers.Where(x => x.BoxId == dto.BoxId).Select(x => new { x.MaterialId, x.SerialNumber }).ToList();
+
+ //3.2组装要新增的箱库存信息:箱和明细和序列号
+ var addEntity = _mapper.Map(dto);
+ addEntity.Details = _mapper.Map>(box.Details);
+
+ add_entitys.Add(addEntity);
+
+
+ }//下架
+ else
+ {
+ //3.1下架的时候:箱一定是存在于箱库存当中的,没有则返回提示“箱不存在于库存,请扫其它箱”
+ var boxInventory = boxInventorys.Where(x => x.BoxId == dto.BoxId).FirstOrDefault();
+ if (boxInventory==null)
+ return Result.ReFailure(ResultCodes.BoxInventoryNoDataError);
+ //3.2创建更新对象
+ var update_entity = new BoxInventory();
+ update_entity.Details = new List();
+
+ //3.3遍历dto明细
+ foreach (var dtoItem in dto.Details)
+ {
+ //找到原来的箱库存对应要改变的物料:这个一定是存在的,不存在就有问题
+ var updateDetail = boxInventory.Details.Where(x => x.MaterialId == dtoItem.MaterialId).FirstOrDefault();
+ if (updateDetail == null)
+ return Result.ReFailure(ResultCodes.BoxInventoryNoDataError);
+ //箱物料的库存数量不足;小于要拿出来的数量
+ if (updateDetail.Qty < dtoItem.Qty)
+ return Result.ReFailure(ResultCodes.BoxInventoryNoInventoryError);
+
+ var update_entity_det = new BoxInventoryDetails();
+ update_entity_det.SerialNumbers = new List();
+ update_entity_det.Qty = updateDetail.Qty - dtoItem.Qty;
+
+ //先把现有的序列号复制过来
+ update_entity_det.SerialNumbers = updateDetail.SerialNumbers;
+ //再移除要改箱的序列号;最后就是原箱库存的新序列号
+ update_entity_det.SerialNumbers.RemoveAll(x => dtoItem.SerialNumbers.Contains(x));
+
+ update_entity.Details.Add(update_entity_det);
+ }
+ }
+ }
+
+ var isSuccess = true;
+ //4.数据库更新操作:更新和添加
+ if (add_entitys.Count != 0)
+ {
+ isSuccess = await _boxInventoryRepositories.AddRange(add_entitys, isTransaction);
+ if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError);
+ }
+ if (update_entitys.Count != 0)
+ {
+ isSuccess = await _boxInventoryRepositories.UpdateRange(update_entitys, isTransaction);
+ if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError);
+ }
+ return Result.ReSuccess();
+ }
}
}