diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
index b9a13442..1696ac01 100644
--- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
+++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
@@ -2746,6 +2746,9 @@
出入库回退
+
+ 盘点
+
序列号操作记录
@@ -4911,6 +4914,15 @@
+
+
+ 盘点
+
+
+
+
+
+
盘点单服务
diff --git a/src/WMS.Web.Domain/Entitys/Box.cs b/src/WMS.Web.Domain/Entitys/Box.cs
index ea0c380b..542f8b47 100644
--- a/src/WMS.Web.Domain/Entitys/Box.cs
+++ b/src/WMS.Web.Domain/Entitys/Box.cs
@@ -95,5 +95,20 @@ namespace WMS.Web.Domain.Entitys
}
return Result.ReSuccess();
}
+
+ //移入
+ public Result TakeStock(int materialId, decimal qty)
+ {
+ var d = this.Details.FirstOrDefault(f => f.MaterialId == materialId);
+ if(d==null)
+ {
+ this.Details.Add(new BoxDetails()
+ {
+ MaterialId = materialId,
+ Qty= qty
+ });
+ }
+ return Result.ReSuccess();
+ }
}
}
diff --git a/src/WMS.Web.Domain/IService/ISerialNumberService.cs b/src/WMS.Web.Domain/IService/ISerialNumberService.cs
index fd4f127f..9831d63e 100644
--- a/src/WMS.Web.Domain/IService/ISerialNumberService.cs
+++ b/src/WMS.Web.Domain/IService/ISerialNumberService.cs
@@ -24,7 +24,8 @@ namespace WMS.Web.Domain.IService
Task InStock(InStock inStock, LoginInDto loginInfo, bool isTransaction = true);
/// 出入库回退
Task BackRecord(BackRecord backRecord, LoginInDto loginInfo, bool isTransaction = true);
-
+ /// 盘点
+ Task TakeStock(List takeStocks, LoginInDto loginInfo, bool isTransaction = true);
///
/// 序列号操作记录
///
diff --git a/src/WMS.Web.Domain/Services/SerialNumberService.cs b/src/WMS.Web.Domain/Services/SerialNumberService.cs
index 4da87ee8..5485fc91 100644
--- a/src/WMS.Web.Domain/Services/SerialNumberService.cs
+++ b/src/WMS.Web.Domain/Services/SerialNumberService.cs
@@ -431,5 +431,88 @@ namespace WMS.Web.Domain.Services
return Result.ReSuccess();
}
+ ///
+ /// 盘点
+ ///
+ ///
+ ///
+ ///
+ ///
+ public async Task TakeStock(List takeStocks, LoginInDto loginInfo, bool isTransaction = true)
+ {
+ var serialNumbers = takeStocks.SelectMany(s => s.Details).SelectMany(s => s.SerialNumbers).ToList();
+ var entityList = await _serialNumbersRepositories.GetEntityList(serialNumbers);
+ var boxIds = entityList.Select(s => s.BoxId).ToList();
+ var boxList = await _boxRepositories.GetEntityList(boxIds);
+
+ List box_New_List = new List();
+ List soList = new List();
+ List sList = new List();
+ foreach (var s in serialNumbers)
+ {
+ var takeStockDetail = takeStocks.SelectMany(s => s.Details).FirstOrDefault(w => w.SerialNumbers.Contains(s));
+ if (takeStockDetail == null) continue;
+ var box = boxList.FirstOrDefault(f => f.Id == takeStockDetail.BoxId);
+ var s_entity = entityList.FirstOrDefault(f => f.SerialNumber.Equals(s));
+ if (box != null && box.Details.FirstOrDefault(f => f.MaterialId == takeStockDetail.MaterialId) == null)
+ {
+ //如果这个物料不存在箱箱信息 添加进去
+ box.TakeStock(takeStockDetail.MaterialId, takeStockDetail.AfterQty);
+ box_New_List.Add(box);
+ }
+
+ if (s_entity == null)
+ {
+ //序列号
+ SerialNumbers s_new = new SerialNumbers(s, takeStockDetail.MaterialId, takeStockDetail.Id, 0, "", DateTime.Now, DateTime.Now);
+ sList.Add(s_new);
+ }
+ else
+ {
+ s_entity.BoxId = takeStockDetail.BoxId;
+
+ var takeStock = takeStocks.FirstOrDefault(w => w.Details.FirstOrDefault(w => w.SerialNumbers.Contains(s)) != null);
+ //记录序列号操作日志
+ SerialNumberOperate op = new SerialNumberOperate()
+ {
+ MaterialId = takeStockDetail.MaterialId,
+ SerialNumber = s,
+ OrgId = box.OrgId,
+ SupplierId = box.SupplierId,
+ OperateTime = DateTime.Now,
+ OperateType = SerialNumberOperateType.TakeStock,
+ OperateUser = "",
+ Remark = "单号:" + takeStock.BillNo + "\r\n" + "箱号:" + box.BoxBillNo
+ };
+ soList.Add(op);
+ }
+ }
+
+ IDbContextTransaction _transaction = null;
+ if (isTransaction)
+ _transaction = _transactionRepositories.GetTransaction();
+ bool isRollback = false;
+ bool isSuccess = true;
+ isSuccess = await _serialNumbersRepositories.EditEntityList(entityList, false);
+ if (isSuccess)
+ isSuccess = await _serialNumbersRepositories.AddRange(sList, false);
+ if (isSuccess)
+ isSuccess = await _boxRepositories.EditEntityList(box_New_List,false);
+
+ //序列号操作记录
+ var res = await this.SerialNumberOperate(soList, false);
+ //提交事务
+ if (isTransaction)
+ {
+ if (!isSuccess) isRollback = true;
+ if (!res.Success) isRollback = true;
+ isSuccess = _transactionRepositories.CommitTransaction(isRollback, _transaction);
+ if (!isSuccess)
+ return Result.ReFailure(ResultCodes.DateWriteError);
+ }
+ if (!isSuccess) return Result.ReFailure(ResultCodes.DateWriteError);
+ if (!res.Success) return Result.ReFailure(ResultCodes.DateWriteError);
+ return Result.ReSuccess();
+ }
}
}
diff --git a/src/WMS.Web.Domain/Services/TakeStockService.cs b/src/WMS.Web.Domain/Services/TakeStockService.cs
index 99ef45d1..577c298d 100644
--- a/src/WMS.Web.Domain/Services/TakeStockService.cs
+++ b/src/WMS.Web.Domain/Services/TakeStockService.cs
@@ -39,11 +39,13 @@ namespace WMS.Web.Domain.Services
private readonly ILogger _logger;
private readonly IBoxInventoryService _boxInventoryService;
private readonly IErpBasicDataExtendService _erpBasicDataExtendService;
+ private readonly ISerialNumberService _serialNumberService;
public TakeStockService(IMapper mapper, ILoginService loginService,
IBasicsRepositories transactionRepositories,
ITakeStockRepositories takeStockRepositories, ILoginRepositories loginRepositories,
ISingleDataService singleDataService, IErpService erpService, ILogger logger,
- IBoxInventoryService boxInventoryService, IErpBasicDataExtendService erpBasicDataExtendService)
+ IBoxInventoryService boxInventoryService, IErpBasicDataExtendService erpBasicDataExtendService,
+ ISerialNumberService serialNumberService)
{
_mapper = mapper;
_loginService = loginService;
@@ -55,6 +57,7 @@ namespace WMS.Web.Domain.Services
_logger = logger;
_boxInventoryService = boxInventoryService;
_erpBasicDataExtendService = erpBasicDataExtendService;
+ _serialNumberService = serialNumberService;
}
///
/// 保存
@@ -114,6 +117,11 @@ namespace WMS.Web.Domain.Services
if (!isSuccess) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError);
}
if (res_Rollback.IsSuccess)
+ {
+ var res_change = await _serialNumberService.TakeStock(list, loginInfo, false);
+ if (!res_change.IsSuccess) res_Rollback = res_change;
+ }
+ if (res_Rollback.IsSuccess)
{
var res_Inventory = await _boxInventoryService.GenerateTakeBox(list, false);
if (!res_Inventory.IsSuccess) res_Rollback = res_Inventory;
diff --git a/src/WMS.Web.Domain/Values/SerialNumberOperateType.cs b/src/WMS.Web.Domain/Values/SerialNumberOperateType.cs
index 34d8f68d..a46aeb18 100644
--- a/src/WMS.Web.Domain/Values/SerialNumberOperateType.cs
+++ b/src/WMS.Web.Domain/Values/SerialNumberOperateType.cs
@@ -93,6 +93,11 @@ namespace WMS.Web.Domain.Values
///
[EnumRemark("出库回退上架")]
BackRecord_On = 16,
-
+ ///
+ /// 盘点
+ ///
+ [EnumRemark("盘点")]
+ TakeStock = 17,
+
}
}