增加箱库存同步箱信息

This commit is contained in:
18942506660
2024-03-06 10:33:14 +08:00
parent 3697fbe196
commit 008640be06
6 changed files with 243 additions and 167 deletions

View File

@@ -4,6 +4,7 @@ using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using WMS.Web.Core;
using WMS.Web.Core.Help;
using WMS.Web.Core.Internal.Results;
using WMS.Web.Domain.Values;
@@ -129,7 +130,7 @@ namespace WMS.Web.Domain.Entitys
}
else
d.Qty = d.Qty + qty;
return Result.ReSuccess();
}
/// <summary>
@@ -158,6 +159,36 @@ namespace WMS.Web.Domain.Entitys
if (d != null)
d.Qty = (d.Qty - qty) > 0 ? (d.Qty - qty) : 0;
return Result.ReSuccess();
}
/// <summary>
/// 箱库存同步箱信息
/// </summary>
/// <param name="inventory"></param>
/// <returns></returns>
public Result BoxInventory(BoxInventory inventory)
{
var detailClone = this.Details.Clone();
foreach (var d in detailClone)
{
//如果箱信息存在 箱库存不存在 删除箱信息数据
var inventoryDetail = inventory.Details.FirstOrDefault(f => f.MaterialId == d.MaterialId);
if (inventoryDetail == null)
{
var boxDetail = this.Details.FirstOrDefault(f => f.Id == d.Id);
this.Details.Remove(boxDetail);
}
}
//箱库存存在 箱信息不存在 添加
foreach (var d in inventory.Details)
{
var md = this.Details.FirstOrDefault(w => w.MaterialId == d.MaterialId);
if (md == null)
this.Details.Add(new BoxDetails() { MaterialId = d.MaterialId, Qty = md.Qty });
else
md.Qty = d.Qty;
}
return Result.ReSuccess();
}
}

View File

@@ -13,5 +13,7 @@ namespace WMS.Web.Domain.IService
{
// 同步老Ops箱信息
Task<Result> Sync(List<OpsBoxResponse> list = null);
// 箱库存同步箱信息
Task<Result> BoxInventorySync(List<BoxInventory> list, bool isTransaction = true);
}
}

View File

@@ -21,12 +21,12 @@ namespace WMS.Web.Domain.IService
Task<Result> ChangeBoxSave(List<SaveChangeBoxRecordRequest> dto, LoginInDto loginInfo, bool isTransaction=true,bool IsInventory=true,bool IsPDA=false);
//移箱保存
Task<Result> MoveBoxSave(List<SaveMoveBoxRecordRequest> dto, bool IsUp, LoginInDto loginInfo);
//出库回退
Task<Result> ChangeBox_BackRecord(BackRecord BackRecord, LoginInDto loginInfo, bool isTransaction = true);
//非采购入库
Task<Result> ChangeBox_InStock(InStock InStocks, LoginInDto loginInfo, bool isTransaction = true);
//出库
Task<Result> ChangeBox_OutStock(OutStock outStock, bool isTransaction = true);
////出库回退
//Task<Result> ChangeBox_BackRecord(BackRecord BackRecord, LoginInDto loginInfo, bool isTransaction = true);
////非采购入库
//Task<Result> ChangeBox_InStock(InStock InStocks, LoginInDto loginInfo, bool isTransaction = true);
////出库
//Task<Result> ChangeBox_OutStock(OutStock outStock, bool isTransaction = true);
}
}

View File

@@ -31,12 +31,14 @@ namespace WMS.Web.Domain.Services
private readonly IErpOpsSyncDateRepositories _erpOpsSyncDateRepositories;
private readonly ISerialNumbersRepositories _serialNumbersRepositories;
private readonly ILogger<BoxService> _Logger;
public readonly IBasicsRepositories _basbicsRepositories;
public BoxService(IMapper mapper, ILoginService loginService,
IBasicsRepositories transactionRepositories,
IBoxRepositories boxRepositories, IOpsService opsService,
ISerialNumberService serialNumberService,
IErpOpsSyncDateRepositories erpOpsSyncDateRepositories,
ISerialNumbersRepositories serialNumbersRepositories,
IBasicsRepositories basbicsRepositories,
ILogger<BoxService> Logger)
{
_mapper = mapper;
@@ -48,6 +50,7 @@ namespace WMS.Web.Domain.Services
_erpOpsSyncDateRepositories = erpOpsSyncDateRepositories;
_serialNumbersRepositories = serialNumbersRepositories;
_Logger = Logger;
_basbicsRepositories = basbicsRepositories;
}
public async Task<Result> Sync(List<OpsBoxResponse> list)
@@ -127,5 +130,43 @@ namespace WMS.Web.Domain.Services
return Result.ReSuccess();
}
/// <summary>
/// 箱库存同步箱信息
/// </summary>
/// <param name="list"></param>
/// <param name="isTransaction"></param>
/// <returns></returns>
public async Task<Result> BoxInventorySync(List<BoxInventory> list, bool isTransaction = true)
{
if (list.Count() == 0) return Result.ReSuccess();
var boxIds = list.Select(s => s.BoxId).Distinct().ToList();
var boxs = await _boxRepositories.GetEntityList(boxIds);
foreach (var db in list)
{
var box = boxs.FirstOrDefault(f => f.Id == db.BoxId);
if (box == null) continue;
box.BoxInventory(db);
}
IDbContextTransaction _transaction = null;
if (isTransaction)
_transaction = _basbicsRepositories.GetTransaction();
Result res_Rollback = Result.ReSuccess();
bool isSuccess = true;
if (res_Rollback.IsSuccess)
{
isSuccess = await _boxRepositories.EditEntityList(boxs, false);
if (!isSuccess) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError);
}
//提交事务
if (isTransaction)
{
isSuccess = _basbicsRepositories.CommitTransaction(res_Rollback.IsSuccess ? false : true, _transaction);
if (!res_Rollback.IsSuccess) return res_Rollback;
if (!isSuccess)
return Result.ReFailure(ResultCodes.DateWriteError);
}
return Result.ReSuccess();
}
}
}

View File

@@ -311,163 +311,165 @@ namespace WMS.Web.Domain.Services
return Result.ReSuccess();
}
/// <summary>
/// 出入库回退改箱
/// </summary>
/// <param name="backRecord"></param>
/// <param name="loginInfo"></param>
/// <param name="isTransaction"></param>
/// <returns></returns>
public async Task<Result> ChangeBox_BackRecord(BackRecord backRecord, LoginInDto loginInfo, bool isTransaction = true)
{
if (backRecord.Method == InventoryInOutMethod.Box) return Result.ReSuccess();
List<SaveChangeBoxRecordRequest> dtoList = new List<SaveChangeBoxRecordRequest>();
var boxIds = backRecord.Details.Select(s => s.BoxId).Distinct().ToList();
var boxs = await _boxRepositories.GetEntityList(boxIds);
foreach (var d in backRecord.Details)
{
var box = boxs.FirstOrDefault(f => f.Id == d.BoxId);
if (box == null) continue;
if (backRecord.Type == BackRecordType.InstockOff)
box.BackRecordDown(d.MaterialId, d.Qty);
else
box.BackRecordUp(d.MaterialId, d.Qty);
}
IDbContextTransaction _transaction = null;
if (isTransaction)
_transaction = _basbicsRepositories.GetTransaction();
Result res_Rollback = Result.ReSuccess();
bool isSuccess = true;
if (res_Rollback.IsSuccess)
{
isSuccess = await _boxRepositories.EditEntityList(boxs, false);
if (!isSuccess) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError);
}
//提交事务
if (isTransaction)
{
isSuccess = _basbicsRepositories.CommitTransaction(res_Rollback.IsSuccess ? false : true, _transaction);
if (!res_Rollback.IsSuccess) return res_Rollback;
if (!isSuccess)
return Result.ReFailure(ResultCodes.DateWriteError);
}
return Result.ReSuccess();
}
/// <summary>
/// 非采购入库
/// </summary>
/// <param name="inStock"></param>
/// <param name="loginInfo"></param>
/// <param name="isTransaction"></param>
/// <returns></returns>
public async Task<Result> ChangeBox_InStock(InStock inStock, LoginInDto loginInfo, bool isTransaction = true)
{
List<SaveChangeBoxRecordRequest> dtoList = new List<SaveChangeBoxRecordRequest>();
//目标箱
var destIds = inStock.Details.GroupBy(g => g.BoxId);
var serialNumbers = inStock.Details.SelectMany(s => s.SerialNumbers).ToList();
var serialNumberList = await _serialNumbersRepositories.GetEntityList(serialNumbers);
foreach (var detail in inStock.Details)
{
if (detail.Qty == 0) continue;
var detailClone = detail.Clone();
//处理序列号
var sList = serialNumberList.Where(w => detailClone.SerialNumbers.Contains(w.SerialNumber)).ToList();
foreach (var s in sList)
{
//原箱和目标箱一样不处理
if (s.BoxId == detailClone.BoxId)
{
detailClone.Qty = detailClone.Qty - 1;
detailClone.SerialNumbers.Remove(s.SerialNumber);
continue;
}
#region
///// <summary>
///// 出入库回退改箱
///// </summary>
///// <param name="backRecord"></param>
///// <param name="loginInfo"></param>
///// <param name="isTransaction"></param>
///// <returns></returns>
//public async Task<Result> ChangeBox_BackRecord(BackRecord backRecord, LoginInDto loginInfo, bool isTransaction = true)
//{
// if (backRecord.Method == InventoryInOutMethod.Box) return Result.ReSuccess();
// List<SaveChangeBoxRecordRequest> dtoList = new List<SaveChangeBoxRecordRequest>();
// var boxIds = backRecord.Details.Select(s => s.BoxId).Distinct().ToList();
// var boxs = await _boxRepositories.GetEntityList(boxIds);
// foreach (var d in backRecord.Details)
// {
// var box = boxs.FirstOrDefault(f => f.Id == d.BoxId);
// if (box == null) continue;
// if (backRecord.Type == BackRecordType.InstockOff)
// box.BackRecordDown(d.MaterialId, d.Qty);
// else
// box.BackRecordUp(d.MaterialId, d.Qty);
// }
// IDbContextTransaction _transaction = null;
// if (isTransaction)
// _transaction = _basbicsRepositories.GetTransaction();
// Result res_Rollback = Result.ReSuccess();
// bool isSuccess = true;
// if (res_Rollback.IsSuccess)
// {
// isSuccess = await _boxRepositories.EditEntityList(boxs, false);
// if (!isSuccess) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError);
// }
// //提交事务
// if (isTransaction)
// {
// isSuccess = _basbicsRepositories.CommitTransaction(res_Rollback.IsSuccess ? false : true, _transaction);
// if (!res_Rollback.IsSuccess) return res_Rollback;
// if (!isSuccess)
// return Result.ReFailure(ResultCodes.DateWriteError);
// }
// return Result.ReSuccess();
//}
///// <summary>
///// 非采购入库
///// </summary>
///// <param name="inStock"></param>
///// <param name="loginInfo"></param>
///// <param name="isTransaction"></param>
///// <returns></returns>
//public async Task<Result> ChangeBox_InStock(InStock inStock, LoginInDto loginInfo, bool isTransaction = true)
//{
// List<SaveChangeBoxRecordRequest> dtoList = new List<SaveChangeBoxRecordRequest>();
// //目标箱
// var destIds = inStock.Details.GroupBy(g => g.BoxId);
// var serialNumbers = inStock.Details.SelectMany(s => s.SerialNumbers).ToList();
// var serialNumberList = await _serialNumbersRepositories.GetEntityList(serialNumbers);
// foreach (var detail in inStock.Details)
// {
// if (detail.Qty == 0) continue;
// var detailClone = detail.Clone();
// //处理序列号
// var sList = serialNumberList.Where(w => detailClone.SerialNumbers.Contains(w.SerialNumber)).ToList();
// foreach (var s in sList)
// {
// //原箱和目标箱一样不处理
// if (s.BoxId == detailClone.BoxId)
// {
// detailClone.Qty = detailClone.Qty - 1;
// detailClone.SerialNumbers.Remove(s.SerialNumber);
// continue;
// }
var d = dtoList.FirstOrDefault(f => f.DestBoxId == detailClone.BoxId && f.SrcBoxId == s.BoxId);
if (d == null)
{
d = new SaveChangeBoxRecordRequest(s.BoxId, detailClone.BoxId);
d.Details.Add(new SaveChangeBoxRecordDetailsRequest(detailClone.MaterialId, 1, s.SerialNumber));
}
else
{
var dtoDetail = d.Details.FirstOrDefault(f => f.MaterialId == detailClone.MaterialId);
if (dtoDetail == null)
d.Details.Add(new SaveChangeBoxRecordDetailsRequest(detailClone.MaterialId, 1, s.SerialNumber));
else
{
dtoDetail.Qty += 1;
dtoDetail.SerialNumbers.Add(s.SerialNumber);
}
}
detailClone.Qty = detailClone.Qty - 1;
detailClone.SerialNumbers.Remove(s.SerialNumber);
}
// var d = dtoList.FirstOrDefault(f => f.DestBoxId == detailClone.BoxId && f.SrcBoxId == s.BoxId);
// if (d == null)
// {
// d = new SaveChangeBoxRecordRequest(s.BoxId, detailClone.BoxId);
// d.Details.Add(new SaveChangeBoxRecordDetailsRequest(detailClone.MaterialId, 1, s.SerialNumber));
// }
// else
// {
// var dtoDetail = d.Details.FirstOrDefault(f => f.MaterialId == detailClone.MaterialId);
// if (dtoDetail == null)
// d.Details.Add(new SaveChangeBoxRecordDetailsRequest(detailClone.MaterialId, 1, s.SerialNumber));
// else
// {
// dtoDetail.Qty += 1;
// dtoDetail.SerialNumbers.Add(s.SerialNumber);
// }
// }
// detailClone.Qty = detailClone.Qty - 1;
// detailClone.SerialNumbers.Remove(s.SerialNumber);
// }
//处理非序列号的数据
if (detailClone.Qty <= 0) continue;
var dto = dtoList.FirstOrDefault(f => f.DestBoxId == detailClone.BoxId && f.SrcBoxId == 0);
if (dto == null)
{
dto = new SaveChangeBoxRecordRequest(0, detailClone.BoxId);
dto.Details.Add(new SaveChangeBoxRecordDetailsRequest(detailClone.MaterialId, detailClone.Qty, detailClone.SerialNumbers));
}
else
{
var dtoDetail = dto.Details.FirstOrDefault(f => f.MaterialId == detailClone.MaterialId);
if (dtoDetail == null)
dto.Details.Add(new SaveChangeBoxRecordDetailsRequest(detailClone.MaterialId, detailClone.Qty, detailClone.SerialNumbers));
else
{
dtoDetail.Qty += detailClone.Qty;
dtoDetail.SerialNumbers.AddRange(detailClone.SerialNumbers);
}
}
}
// //处理非序列号的数据
// if (detailClone.Qty <= 0) continue;
// var dto = dtoList.FirstOrDefault(f => f.DestBoxId == detailClone.BoxId && f.SrcBoxId == 0);
// if (dto == null)
// {
// dto = new SaveChangeBoxRecordRequest(0, detailClone.BoxId);
// dto.Details.Add(new SaveChangeBoxRecordDetailsRequest(detailClone.MaterialId, detailClone.Qty, detailClone.SerialNumbers));
// }
// else
// {
// var dtoDetail = dto.Details.FirstOrDefault(f => f.MaterialId == detailClone.MaterialId);
// if (dtoDetail == null)
// dto.Details.Add(new SaveChangeBoxRecordDetailsRequest(detailClone.MaterialId, detailClone.Qty, detailClone.SerialNumbers));
// else
// {
// dtoDetail.Qty += detailClone.Qty;
// dtoDetail.SerialNumbers.AddRange(detailClone.SerialNumbers);
// }
// }
// }
return await ChangeBoxSave(dtoList, loginInfo, isTransaction, false);
}
/// <summary>
/// 出库
/// </summary>
/// <param name="outStock"></param>
/// <param name="isTransaction"></param>
/// <returns></returns>
public async Task<Result> ChangeBox_OutStock(OutStock outStock, bool isTransaction = true)
{
if (outStock.Method == InventoryInOutMethod.Box) return Result.ReSuccess();
List<SaveChangeBoxRecordRequest> dtoList = new List<SaveChangeBoxRecordRequest>();
var boxDetails = outStock.Details.SelectMany(s => s.BoxsDetails);
var boxIds = boxDetails.Select(s => s.BoxId).Distinct().ToList();
var boxs = await _boxRepositories.GetEntityList(boxIds);
foreach (var d in outStock.Details)
{
foreach (var db in d.BoxsDetails)
{
var box = boxs.FirstOrDefault(f => f.Id == db.BoxId);
if (box == null) continue;
box.OutStock(d.MaterialId, db.Qty);
}
}
IDbContextTransaction _transaction = null;
if (isTransaction)
_transaction = _basbicsRepositories.GetTransaction();
Result res_Rollback = Result.ReSuccess();
bool isSuccess = true;
if (res_Rollback.IsSuccess)
{
isSuccess = await _boxRepositories.EditEntityList(boxs, false);
if (!isSuccess) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError);
}
//提交事务
if (isTransaction)
{
isSuccess = _basbicsRepositories.CommitTransaction(res_Rollback.IsSuccess ? false : true, _transaction);
if (!res_Rollback.IsSuccess) return res_Rollback;
if (!isSuccess)
return Result.ReFailure(ResultCodes.DateWriteError);
}
return Result.ReSuccess();
}
// return await ChangeBoxSave(dtoList, loginInfo, isTransaction, false);
//}
///// <summary>
///// 出库
///// </summary>
///// <param name="outStock"></param>
///// <param name="isTransaction"></param>
///// <returns></returns>
//public async Task<Result> ChangeBox_OutStock(OutStock outStock, bool isTransaction = true)
//{
// if (outStock.Method == InventoryInOutMethod.Box) return Result.ReSuccess();
// List<SaveChangeBoxRecordRequest> dtoList = new List<SaveChangeBoxRecordRequest>();
// var boxDetails = outStock.Details.SelectMany(s => s.BoxsDetails);
// var boxIds = boxDetails.Select(s => s.BoxId).Distinct().ToList();
// var boxs = await _boxRepositories.GetEntityList(boxIds);
// foreach (var d in outStock.Details)
// {
// foreach (var db in d.BoxsDetails)
// {
// var box = boxs.FirstOrDefault(f => f.Id == db.BoxId);
// if (box == null) continue;
// box.OutStock(d.MaterialId, db.Qty);
// }
// }
// IDbContextTransaction _transaction = null;
// if (isTransaction)
// _transaction = _basbicsRepositories.GetTransaction();
// Result res_Rollback = Result.ReSuccess();
// bool isSuccess = true;
// if (res_Rollback.IsSuccess)
// {
// isSuccess = await _boxRepositories.EditEntityList(boxs, false);
// if (!isSuccess) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError);
// }
// //提交事务
// if (isTransaction)
// {
// isSuccess = _basbicsRepositories.CommitTransaction(res_Rollback.IsSuccess ? false : true, _transaction);
// if (!res_Rollback.IsSuccess) return res_Rollback;
// if (!isSuccess)
// return Result.ReFailure(ResultCodes.DateWriteError);
// }
// return Result.ReSuccess();
//}
#endregion
}
}

View File

@@ -197,11 +197,11 @@ namespace WMS.Web.Domain.Services
var res_Inventory = await _boxInventoryService.GenerateOutStockBox(entity, false);
if (!res_Inventory.IsSuccess) res_Rollback = res_Inventory;
}
if (res_Rollback.IsSuccess)
{
var res_changeMoveBox = await _changeMoveBoxService.ChangeBox_OutStock(entity, false);
if (!res_changeMoveBox.IsSuccess) res_Rollback = res_changeMoveBox;
}
//if (res_Rollback.IsSuccess)
//{
// var res_changeMoveBox = await _changeMoveBoxService.ChangeBox_OutStock(entity, false);
// if (!res_changeMoveBox.IsSuccess) res_Rollback = res_changeMoveBox;
//}
if (res_Rollback.IsSuccess)
{
boxIds = entity.Details.SelectMany(s => s.BoxsDetails).Select(s => s.BoxId).ToList();