增加箱库存同步箱信息

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.Linq;
using System.Text; using System.Text;
using WMS.Web.Core; using WMS.Web.Core;
using WMS.Web.Core.Help;
using WMS.Web.Core.Internal.Results; using WMS.Web.Core.Internal.Results;
using WMS.Web.Domain.Values; using WMS.Web.Domain.Values;
@@ -158,6 +159,36 @@ namespace WMS.Web.Domain.Entitys
if (d != null) if (d != null)
d.Qty = (d.Qty - qty) > 0 ? (d.Qty - qty) : 0; 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(); return Result.ReSuccess();
} }
} }

View File

@@ -13,5 +13,7 @@ namespace WMS.Web.Domain.IService
{ {
// 同步老Ops箱信息 // 同步老Ops箱信息
Task<Result> Sync(List<OpsBoxResponse> list = null); 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> 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> MoveBoxSave(List<SaveMoveBoxRecordRequest> dto, bool IsUp, LoginInDto loginInfo);
//出库回退 ////出库回退
Task<Result> ChangeBox_BackRecord(BackRecord BackRecord, LoginInDto loginInfo, 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_InStock(InStock InStocks, LoginInDto loginInfo, bool isTransaction = true);
//出库 ////出库
Task<Result> ChangeBox_OutStock(OutStock outStock, 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 IErpOpsSyncDateRepositories _erpOpsSyncDateRepositories;
private readonly ISerialNumbersRepositories _serialNumbersRepositories; private readonly ISerialNumbersRepositories _serialNumbersRepositories;
private readonly ILogger<BoxService> _Logger; private readonly ILogger<BoxService> _Logger;
public readonly IBasicsRepositories _basbicsRepositories;
public BoxService(IMapper mapper, ILoginService loginService, public BoxService(IMapper mapper, ILoginService loginService,
IBasicsRepositories transactionRepositories, IBasicsRepositories transactionRepositories,
IBoxRepositories boxRepositories, IOpsService opsService, IBoxRepositories boxRepositories, IOpsService opsService,
ISerialNumberService serialNumberService, ISerialNumberService serialNumberService,
IErpOpsSyncDateRepositories erpOpsSyncDateRepositories, IErpOpsSyncDateRepositories erpOpsSyncDateRepositories,
ISerialNumbersRepositories serialNumbersRepositories, ISerialNumbersRepositories serialNumbersRepositories,
IBasicsRepositories basbicsRepositories,
ILogger<BoxService> Logger) ILogger<BoxService> Logger)
{ {
_mapper = mapper; _mapper = mapper;
@@ -48,6 +50,7 @@ namespace WMS.Web.Domain.Services
_erpOpsSyncDateRepositories = erpOpsSyncDateRepositories; _erpOpsSyncDateRepositories = erpOpsSyncDateRepositories;
_serialNumbersRepositories = serialNumbersRepositories; _serialNumbersRepositories = serialNumbersRepositories;
_Logger = Logger; _Logger = Logger;
_basbicsRepositories = basbicsRepositories;
} }
public async Task<Result> Sync(List<OpsBoxResponse> list) public async Task<Result> Sync(List<OpsBoxResponse> list)
@@ -127,5 +130,43 @@ namespace WMS.Web.Domain.Services
return Result.ReSuccess(); 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(); return Result.ReSuccess();
} }
/// <summary> #region
/// 出入库回退改箱 ///// <summary>
/// </summary> ///// 出入库回退改箱
/// <param name="backRecord"></param> ///// </summary>
/// <param name="loginInfo"></param> ///// <param name="backRecord"></param>
/// <param name="isTransaction"></param> ///// <param name="loginInfo"></param>
/// <returns></returns> ///// <param name="isTransaction"></param>
public async Task<Result> ChangeBox_BackRecord(BackRecord backRecord, LoginInDto loginInfo, bool isTransaction = true) ///// <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>(); // if (backRecord.Method == InventoryInOutMethod.Box) return Result.ReSuccess();
var boxIds = backRecord.Details.Select(s => s.BoxId).Distinct().ToList(); // List<SaveChangeBoxRecordRequest> dtoList = new List<SaveChangeBoxRecordRequest>();
var boxs = await _boxRepositories.GetEntityList(boxIds); // var boxIds = backRecord.Details.Select(s => s.BoxId).Distinct().ToList();
foreach (var d in backRecord.Details) // 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; // var box = boxs.FirstOrDefault(f => f.Id == d.BoxId);
if (backRecord.Type == BackRecordType.InstockOff) // if (box == null) continue;
box.BackRecordDown(d.MaterialId, d.Qty); // if (backRecord.Type == BackRecordType.InstockOff)
else // box.BackRecordDown(d.MaterialId, d.Qty);
box.BackRecordUp(d.MaterialId, d.Qty); // else
} // box.BackRecordUp(d.MaterialId, d.Qty);
IDbContextTransaction _transaction = null; // }
if (isTransaction) // IDbContextTransaction _transaction = null;
_transaction = _basbicsRepositories.GetTransaction(); // if (isTransaction)
Result res_Rollback = Result.ReSuccess(); // _transaction = _basbicsRepositories.GetTransaction();
bool isSuccess = true; // Result res_Rollback = Result.ReSuccess();
if (res_Rollback.IsSuccess) // bool isSuccess = true;
{ // if (res_Rollback.IsSuccess)
isSuccess = await _boxRepositories.EditEntityList(boxs, false); // {
if (!isSuccess) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError); // isSuccess = await _boxRepositories.EditEntityList(boxs, false);
} // if (!isSuccess) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError);
//提交事务 // }
if (isTransaction) // //提交事务
{ // if (isTransaction)
isSuccess = _basbicsRepositories.CommitTransaction(res_Rollback.IsSuccess ? false : true, _transaction); // {
if (!res_Rollback.IsSuccess) return res_Rollback; // isSuccess = _basbicsRepositories.CommitTransaction(res_Rollback.IsSuccess ? false : true, _transaction);
if (!isSuccess) // if (!res_Rollback.IsSuccess) return res_Rollback;
return Result.ReFailure(ResultCodes.DateWriteError); // if (!isSuccess)
} // return Result.ReFailure(ResultCodes.DateWriteError);
return Result.ReSuccess(); // }
} // return Result.ReSuccess();
/// <summary> //}
/// 非采购入库 ///// <summary>
/// </summary> ///// 非采购入库
/// <param name="inStock"></param> ///// </summary>
/// <param name="loginInfo"></param> ///// <param name="inStock"></param>
/// <param name="isTransaction"></param> ///// <param name="loginInfo"></param>
/// <returns></returns> ///// <param name="isTransaction"></param>
public async Task<Result> ChangeBox_InStock(InStock inStock, LoginInDto loginInfo, bool isTransaction = true) ///// <returns></returns>
{ //public async Task<Result> ChangeBox_InStock(InStock inStock, LoginInDto loginInfo, bool isTransaction = true)
List<SaveChangeBoxRecordRequest> dtoList = new List<SaveChangeBoxRecordRequest>(); //{
//目标箱 // List<SaveChangeBoxRecordRequest> dtoList = new List<SaveChangeBoxRecordRequest>();
var destIds = inStock.Details.GroupBy(g => g.BoxId); // //目标箱
var serialNumbers = inStock.Details.SelectMany(s => s.SerialNumbers).ToList(); // var destIds = inStock.Details.GroupBy(g => g.BoxId);
var serialNumberList = await _serialNumbersRepositories.GetEntityList(serialNumbers); // var serialNumbers = inStock.Details.SelectMany(s => s.SerialNumbers).ToList();
foreach (var detail in inStock.Details) // var serialNumberList = await _serialNumbersRepositories.GetEntityList(serialNumbers);
{ // foreach (var detail in inStock.Details)
if (detail.Qty == 0) continue; // {
var detailClone = detail.Clone(); // 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) // var sList = serialNumberList.Where(w => detailClone.SerialNumbers.Contains(w.SerialNumber)).ToList();
{ // foreach (var s in sList)
//原箱和目标箱一样不处理 // {
if (s.BoxId == detailClone.BoxId) // //原箱和目标箱一样不处理
{ // if (s.BoxId == detailClone.BoxId)
detailClone.Qty = detailClone.Qty - 1; // {
detailClone.SerialNumbers.Remove(s.SerialNumber); // detailClone.Qty = detailClone.Qty - 1;
continue; // detailClone.SerialNumbers.Remove(s.SerialNumber);
} // continue;
// }
var d = dtoList.FirstOrDefault(f => f.DestBoxId == detailClone.BoxId && f.SrcBoxId == s.BoxId); // var d = dtoList.FirstOrDefault(f => f.DestBoxId == detailClone.BoxId && f.SrcBoxId == s.BoxId);
if (d == null) // if (d == null)
{ // {
d = new SaveChangeBoxRecordRequest(s.BoxId, detailClone.BoxId); // d = new SaveChangeBoxRecordRequest(s.BoxId, detailClone.BoxId);
d.Details.Add(new SaveChangeBoxRecordDetailsRequest(detailClone.MaterialId, 1, s.SerialNumber)); // d.Details.Add(new SaveChangeBoxRecordDetailsRequest(detailClone.MaterialId, 1, s.SerialNumber));
} // }
else // else
{ // {
var dtoDetail = d.Details.FirstOrDefault(f => f.MaterialId == detailClone.MaterialId); // var dtoDetail = d.Details.FirstOrDefault(f => f.MaterialId == detailClone.MaterialId);
if (dtoDetail == null) // if (dtoDetail == null)
d.Details.Add(new SaveChangeBoxRecordDetailsRequest(detailClone.MaterialId, 1, s.SerialNumber)); // d.Details.Add(new SaveChangeBoxRecordDetailsRequest(detailClone.MaterialId, 1, s.SerialNumber));
else // else
{ // {
dtoDetail.Qty += 1; // dtoDetail.Qty += 1;
dtoDetail.SerialNumbers.Add(s.SerialNumber); // dtoDetail.SerialNumbers.Add(s.SerialNumber);
} // }
} // }
detailClone.Qty = detailClone.Qty - 1; // detailClone.Qty = detailClone.Qty - 1;
detailClone.SerialNumbers.Remove(s.SerialNumber); // detailClone.SerialNumbers.Remove(s.SerialNumber);
} // }
//处理非序列号的数据 // //处理非序列号的数据
if (detailClone.Qty <= 0) continue; // if (detailClone.Qty <= 0) continue;
var dto = dtoList.FirstOrDefault(f => f.DestBoxId == detailClone.BoxId && f.SrcBoxId == 0); // var dto = dtoList.FirstOrDefault(f => f.DestBoxId == detailClone.BoxId && f.SrcBoxId == 0);
if (dto == null) // if (dto == null)
{ // {
dto = new SaveChangeBoxRecordRequest(0, detailClone.BoxId); // dto = new SaveChangeBoxRecordRequest(0, detailClone.BoxId);
dto.Details.Add(new SaveChangeBoxRecordDetailsRequest(detailClone.MaterialId, detailClone.Qty, detailClone.SerialNumbers)); // dto.Details.Add(new SaveChangeBoxRecordDetailsRequest(detailClone.MaterialId, detailClone.Qty, detailClone.SerialNumbers));
} // }
else // else
{ // {
var dtoDetail = dto.Details.FirstOrDefault(f => f.MaterialId == detailClone.MaterialId); // var dtoDetail = dto.Details.FirstOrDefault(f => f.MaterialId == detailClone.MaterialId);
if (dtoDetail == null) // if (dtoDetail == null)
dto.Details.Add(new SaveChangeBoxRecordDetailsRequest(detailClone.MaterialId, detailClone.Qty, detailClone.SerialNumbers)); // dto.Details.Add(new SaveChangeBoxRecordDetailsRequest(detailClone.MaterialId, detailClone.Qty, detailClone.SerialNumbers));
else // else
{ // {
dtoDetail.Qty += detailClone.Qty; // dtoDetail.Qty += detailClone.Qty;
dtoDetail.SerialNumbers.AddRange(detailClone.SerialNumbers); // dtoDetail.SerialNumbers.AddRange(detailClone.SerialNumbers);
} // }
} // }
} // }
return await ChangeBoxSave(dtoList, loginInfo, isTransaction, false); // return await ChangeBoxSave(dtoList, loginInfo, isTransaction, false);
} //}
/// <summary> ///// <summary>
/// 出库 ///// 出库
/// </summary> ///// </summary>
/// <param name="outStock"></param> ///// <param name="outStock"></param>
/// <param name="isTransaction"></param> ///// <param name="isTransaction"></param>
/// <returns></returns> ///// <returns></returns>
public async Task<Result> ChangeBox_OutStock(OutStock outStock, bool isTransaction = true) //public async Task<Result> ChangeBox_OutStock(OutStock outStock, bool isTransaction = true)
{ //{
if (outStock.Method == InventoryInOutMethod.Box) return Result.ReSuccess(); // if (outStock.Method == InventoryInOutMethod.Box) return Result.ReSuccess();
List<SaveChangeBoxRecordRequest> dtoList = new List<SaveChangeBoxRecordRequest>(); // List<SaveChangeBoxRecordRequest> dtoList = new List<SaveChangeBoxRecordRequest>();
var boxDetails = outStock.Details.SelectMany(s => s.BoxsDetails); // var boxDetails = outStock.Details.SelectMany(s => s.BoxsDetails);
var boxIds = boxDetails.Select(s => s.BoxId).Distinct().ToList(); // var boxIds = boxDetails.Select(s => s.BoxId).Distinct().ToList();
var boxs = await _boxRepositories.GetEntityList(boxIds); // var boxs = await _boxRepositories.GetEntityList(boxIds);
foreach (var d in outStock.Details) // foreach (var d in outStock.Details)
{ // {
foreach (var db in d.BoxsDetails) // foreach (var db in d.BoxsDetails)
{ // {
var box = boxs.FirstOrDefault(f => f.Id == db.BoxId); // var box = boxs.FirstOrDefault(f => f.Id == db.BoxId);
if (box == null) continue; // if (box == null) continue;
box.OutStock(d.MaterialId, db.Qty); // box.OutStock(d.MaterialId, db.Qty);
} // }
} // }
IDbContextTransaction _transaction = null; // IDbContextTransaction _transaction = null;
if (isTransaction) // if (isTransaction)
_transaction = _basbicsRepositories.GetTransaction(); // _transaction = _basbicsRepositories.GetTransaction();
Result res_Rollback = Result.ReSuccess(); // Result res_Rollback = Result.ReSuccess();
bool isSuccess = true; // bool isSuccess = true;
if (res_Rollback.IsSuccess) // if (res_Rollback.IsSuccess)
{ // {
isSuccess = await _boxRepositories.EditEntityList(boxs, false); // isSuccess = await _boxRepositories.EditEntityList(boxs, false);
if (!isSuccess) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError); // if (!isSuccess) res_Rollback = Result.ReFailure(ResultCodes.DateWriteError);
} // }
//提交事务 // //提交事务
if (isTransaction) // if (isTransaction)
{ // {
isSuccess = _basbicsRepositories.CommitTransaction(res_Rollback.IsSuccess ? false : true, _transaction); // isSuccess = _basbicsRepositories.CommitTransaction(res_Rollback.IsSuccess ? false : true, _transaction);
if (!res_Rollback.IsSuccess) return res_Rollback; // if (!res_Rollback.IsSuccess) return res_Rollback;
if (!isSuccess) // if (!isSuccess)
return Result.ReFailure(ResultCodes.DateWriteError); // return Result.ReFailure(ResultCodes.DateWriteError);
} // }
return Result.ReSuccess(); // return Result.ReSuccess();
} //}
#endregion
} }
} }

View File

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