diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
index dff909c0..96fc08e0 100644
--- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
+++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
@@ -3538,6 +3538,13 @@
+
+
+ 出库单类型转化序列号记录类型
+
+
+
+
序列号操作记录日志
@@ -3941,6 +3948,31 @@
改箱
+
+
+ 销售出库
+
+
+
+
+ 其他出库
+
+
+
+
+ 直接调拨出库
+
+
+
+
+ 分步式出库
+
+
+
+
+ 组装拆卸出库
+
+
非采购上架方式
diff --git a/src/WMS.Web.Domain/Services/OutStockService.cs b/src/WMS.Web.Domain/Services/OutStockService.cs
index 9b6b22ce..0775bc3e 100644
--- a/src/WMS.Web.Domain/Services/OutStockService.cs
+++ b/src/WMS.Web.Domain/Services/OutStockService.cs
@@ -30,10 +30,11 @@ namespace WMS.Web.Domain.Services
private readonly IOutStockTaskRepositories _outStockTaskRepositories;
private readonly IOutStockTaskService _outStockTaskService;
private readonly IErpService _erpService;
+ private readonly ISerialNumberService _serialNumberService;
public OutStockService(IMapper mapper, ILoginService loginService,
IBasicsRepositories transactionRepositories,
IOutStockRepositories outStockRepositories, IOutStockTaskRepositories outStockTaskRepositories,
- IOutStockTaskService outStockTaskService, IErpService erpService)
+ IOutStockTaskService outStockTaskService, IErpService erpService, ISerialNumberService serialNumberService)
{
_mapper = mapper;
_loginService = loginService;
@@ -42,6 +43,7 @@ namespace WMS.Web.Domain.Services
_outStockTaskRepositories = outStockTaskRepositories;
_outStockTaskService = outStockTaskService;
_erpService = erpService;
+ _serialNumberService = serialNumberService;
}
///
/// 出库单
@@ -88,6 +90,8 @@ namespace WMS.Web.Domain.Services
if (entity == null) isRollback = true;
outStockTask = await _outStockTaskRepositories.Edit(outStockTask, false);
if (outStockTask == null) isRollback = true;
+ var res_change = await _serialNumberService.OutStock(entity, loginInfo, false);
+ if (!res_change.IsSuccess) isRollback = true;
//提交事务
isSuccess = _transactionRepositories.CommitTransaction(isRollback, _transaction);
if (!isSuccess)
diff --git a/src/WMS.Web.Domain/Services/SerialNumberService.cs b/src/WMS.Web.Domain/Services/SerialNumberService.cs
index 3d65c963..ae3548a0 100644
--- a/src/WMS.Web.Domain/Services/SerialNumberService.cs
+++ b/src/WMS.Web.Domain/Services/SerialNumberService.cs
@@ -25,15 +25,17 @@ namespace WMS.Web.Domain.Services
public readonly IBasicsRepositories _transactionRepositories;
public readonly IBoxRepositories _boxRepositories;
private readonly ISingleDataService _singleDataService;
+ private readonly IErpService _erpService;
public SerialNumberService(ISerialNumberOperateRepositories serialNumberOperateRepositories,
ISerialNumbersRepositories serialNumbersRepositories, IBasicsRepositories transactionRepositories,
- IBoxRepositories boxRepositories, ISingleDataService singleDataService)
+ IBoxRepositories boxRepositories, ISingleDataService singleDataService, IErpService erpService)
{
_serialNumberOperateRepositories = serialNumberOperateRepositories;
_serialNumbersRepositories = serialNumbersRepositories;
_transactionRepositories = transactionRepositories;
_boxRepositories = boxRepositories;
_singleDataService = singleDataService;
+ _erpService = erpService;
}
///
/// 改箱
@@ -77,8 +79,8 @@ namespace WMS.Web.Domain.Services
//取目标箱子仓位 记录目标箱仓位号
//if (moveBoxRecord.Type == MoveBoxType.Up)
//{
- //var srcSubStock = _singleDataService.GetSingleData(SingleAction.SubStocks, loginInfo.UserInfo.CompanyId, moveBoxRecord.DestSubStockId);
- //op.Remark += "\r\n" + "仓位:" + srcSubStock;
+ //var srcSubStock = _singleDataService.GetSingleData(SingleAction.SubStocks, loginInfo.UserInfo.CompanyId, moveBoxRecord.DestSubStockId);
+ //op.Remark += "\r\n" + "仓位:" + srcSubStock;
//}
sList.Add(op);
}
@@ -167,10 +169,90 @@ namespace WMS.Web.Domain.Services
///
///
///
- public Task OutStock(OutStock outStock, LoginInDto loginInfo, bool isTransaction = true)
+ public async Task OutStock(OutStock outStock, LoginInDto loginInfo, bool isTransaction = true)
{
- throw new NotImplementedException();
+ //获取序列号信息
+ var serialNumbers = outStock.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);
+ var userName = _singleDataService.GetSingleData(SingleAction.Staffs, loginInfo.UserInfo.CompanyId, loginInfo.UserInfo.StaffId);
+
+ IDbContextTransaction _transaction = null;
+ if (isTransaction)
+ _transaction = _transactionRepositories.GetTransaction();
+ bool isRollback = false;
+ bool isSuccess = true;
+ List sList = new List();
+ foreach (var entity in entityList)
+ {
+ var box = boxList.FirstOrDefault(f => f.Id == entity.BoxId);
+ //修改序列号和箱绑定关系
+ entity.OutStock(outStock.BillNo);
+
+ //记录序列号操作日志
+ SerialNumberOperate op = new SerialNumberOperate()
+ {
+ MaterialId = entity.MaterialId,
+ SerialNumber = entity.SerialNumber,
+ OrgId = box.OrgId,
+ SupplierId = box.SupplierId,
+ OperateTime = DateTime.Now,
+ OperateType = OutStockTypeConvert(outStock.Type),
+ OperateUser = userName,
+ Remark = "来源单号:" + outStock.SourceBillNo + "\r\n" + "出库单号:" + outStock.BillNo
+ };
+ if (outStock.Type == OutStockType.Sal)
+ {
+ var detail = outStock.Details.FirstOrDefault(f => f.MaterialId == entity.MaterialId);
+ var res_c = await _erpService.BillQueryForCustomer();
+ var customer = res_c.Data.FirstOrDefault(f => f.Id == outStock.ReceiptCustomerId);
+ op.Remark += "\r\n" + "销售订单号:" + detail.SaleBillNo;
+ op.Remark += "\r\n" + "客户:" + customer?.Name;
+ }
+ sList.Add(op);
+ }
+ isSuccess = await _serialNumbersRepositories.EditEntityList(entityList, false);
+ //序列号操作记录
+ var res = await this.SerialNumberOperate(sList, 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();
}
+ ///
+ /// 出库单类型转化序列号记录类型
+ ///
+ ///
+ ///
+ private SerialNumberOperateType OutStockTypeConvert(OutStockType type)
+ {
+ switch (type)
+ {
+ case OutStockType.Sal:
+ return SerialNumberOperateType.Sal_Out;
+ case OutStockType.Assembled:
+ return SerialNumberOperateType.Assembled_Out;
+ case OutStockType.Miscellaneous:
+ return SerialNumberOperateType.Miscellaneous_Out;
+ case OutStockType.Stkdirecttransfers:
+ return SerialNumberOperateType.Stkdirecttransfers_Out;
+ case OutStockType.StktransferInst:
+ return SerialNumberOperateType.StktransferInst_Out;
+ default:
+ return SerialNumberOperateType.StktransferInst_Out;
+ }
+ }
+
///
/// 序列号操作记录日志
///
diff --git a/src/WMS.Web.Domain/Values/SerialNumberOperateType.cs b/src/WMS.Web.Domain/Values/SerialNumberOperateType.cs
index 5198ad40..83e30ac1 100644
--- a/src/WMS.Web.Domain/Values/SerialNumberOperateType.cs
+++ b/src/WMS.Web.Domain/Values/SerialNumberOperateType.cs
@@ -33,5 +33,30 @@ namespace WMS.Web.Domain.Values
///
[EnumRemark("改箱")]
ChangeBox = 4,
+ ///
+ /// 销售出库
+ ///
+ [EnumRemark("销售出库")]
+ Sal_Out = 5,
+ ///
+ /// 其他出库
+ ///
+ [EnumRemark("其他出库")]
+ Miscellaneous_Out = 6,
+ ///
+ /// 直接调拨出库
+ ///
+ [EnumRemark("直接调拨出库")]
+ Stkdirecttransfers_Out = 7,
+ ///
+ /// 分步式出库
+ ///
+ [EnumRemark("分步式出库")]
+ StktransferInst_Out = 8,
+ ///
+ /// 组装拆卸出库
+ ///
+ [EnumRemark("组装拆卸出库")]
+ Assembled_Out = 9,
}
}