箱库存变更方法

This commit is contained in:
tongfei
2023-11-15 09:34:42 +08:00
parent 622e5d3b2b
commit e07c762cd3
12 changed files with 248 additions and 34 deletions

View File

@@ -59,7 +59,7 @@ namespace WMS.Web.Api.Controllers
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null) if (loginInfo == null || loginInfo.UserInfo == null)
return Result.ReFailure(ResultCodes.Token_Invalid_Error); return Result.ReFailure(ResultCodes.Token_Invalid_Error);
return await _backRecordService.BackShelf(dto, loginInfo); return await _backRecordService.BackShelf(dto, BackRecordType.OutstockOn, loginInfo);
} }
/// <summary> /// <summary>
@@ -74,7 +74,7 @@ namespace WMS.Web.Api.Controllers
var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]); var loginInfo = _loginService.GetLoginInfo(this.HttpContext.Request.Headers["Authorization"]);
if (loginInfo == null || loginInfo.UserInfo == null) if (loginInfo == null || loginInfo.UserInfo == null)
return Result.ReFailure(ResultCodes.Token_Invalid_Error); return Result.ReFailure(ResultCodes.Token_Invalid_Error);
return await _backRecordService.BackShelf(dto, loginInfo); return await _backRecordService.BackShelf(dto, BackRecordType.InstockOff, loginInfo);
} }
} }

View File

@@ -205,6 +205,11 @@
数量 数量
</summary> </summary>
</member> </member>
<member name="P:WMS.Web.Core.Dto.BackRecord.SaveBackRecordDetailsRequest.StockCode">
<summary>
仓库code
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.BackRecord.SaveBackRecordDetailsRequest.SubStockId"> <member name="P:WMS.Web.Core.Dto.BackRecord.SaveBackRecordDetailsRequest.SubStockId">
<summary> <summary>
仓位ID 仓位ID
@@ -220,11 +225,6 @@
保存出入库回退上下架:请求对象 保存出入库回退上下架:请求对象
</summary> </summary>
</member> </member>
<member name="P:WMS.Web.Core.Dto.BackRecord.SaveBackRecordRequest.BackRecordType">
<summary>
类型1为入库回退下架2为出库回退上架
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.BackRecord.SaveBackRecordRequest.Details"> <member name="P:WMS.Web.Core.Dto.BackRecord.SaveBackRecordRequest.Details">
<summary> <summary>
明细 明细
@@ -1945,6 +1945,56 @@
保存入库单-请求对象 保存入库单-请求对象
</summary> </summary>
</member> </member>
<member name="T:WMS.Web.Core.Dto.Inventory.BoxInventoryBackGenerateDto">
<summary>
出入库回退上下架-箱库存处理对象
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.Inventory.BoxInventoryBackGenerateDto.BackRecordType">
<summary>
类型1为入库回退下架2为出库回退上架
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.Inventory.BoxInventoryBackGenerateDto.BoxId">
<summary>
箱ID
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.Inventory.BoxInventoryBackGenerateDto.StockCode">
<summary>
仓库编码
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.Inventory.BoxInventoryBackGenerateDto.SubStockId">
<summary>
仓位ID
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.Inventory.BoxInventoryBackGenerateDto.Details">
<summary>
明细
</summary>
</member>
<member name="T:WMS.Web.Core.Dto.Inventory.BoxInventoryBackDetailsGenerateDto">
<summary>
出入库回退上下架明细-箱库存处理对象
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.Inventory.BoxInventoryBackDetailsGenerateDto.MaterialId">
<summary>
物料ID
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.Inventory.BoxInventoryBackDetailsGenerateDto.Qty">
<summary>
数量
</summary>
</member>
<member name="P:WMS.Web.Core.Dto.Inventory.BoxInventoryBackDetailsGenerateDto.SerialNumbers">
<summary>
序列号集
</summary>
</member>
<member name="T:WMS.Web.Core.Dto.Inventory.BoxInventoryChangeGenerateDto"> <member name="T:WMS.Web.Core.Dto.Inventory.BoxInventoryChangeGenerateDto">
<summary> <summary>
改箱-使用 改箱-使用

View File

@@ -80,6 +80,11 @@
数量 数量
</summary> </summary>
</member> </member>
<member name="P:WMS.Web.Domain.Entitys.BackRecordDetails.StockCode">
<summary>
仓库code
</summary>
</member>
<member name="P:WMS.Web.Domain.Entitys.BackRecordDetails.SubStockId"> <member name="P:WMS.Web.Domain.Entitys.BackRecordDetails.SubStockId">
<summary> <summary>
仓位ID 仓位ID
@@ -1836,11 +1841,12 @@
出入库回退上下架:服务接口 出入库回退上下架:服务接口
</summary> </summary>
</member> </member>
<member name="M:WMS.Web.Domain.IService.IBackRecordService.BackShelf(WMS.Web.Core.Dto.BackRecord.SaveBackRecordRequest,WMS.Web.Core.Dto.Login.LoginInDto)"> <member name="M:WMS.Web.Domain.IService.IBackRecordService.BackShelf(WMS.Web.Core.Dto.BackRecord.SaveBackRecordRequest,WMS.Web.Domain.Values.BackRecordType,WMS.Web.Core.Dto.Login.LoginInDto)">
<summary> <summary>
回退上下架 回退上下架
</summary> </summary>
<param name="dto"></param> <param name="dto"></param>
<param name="type"></param>
<param name="loginInfo"></param> <param name="loginInfo"></param>
<returns></returns> <returns></returns>
</member> </member>
@@ -2841,11 +2847,12 @@
出入库回退上下架:服务接口 出入库回退上下架:服务接口
</summary> </summary>
</member> </member>
<member name="M:WMS.Web.Domain.Services.BackRecordService.BackShelf(WMS.Web.Core.Dto.BackRecord.SaveBackRecordRequest,WMS.Web.Core.Dto.Login.LoginInDto)"> <member name="M:WMS.Web.Domain.Services.BackRecordService.BackShelf(WMS.Web.Core.Dto.BackRecord.SaveBackRecordRequest,WMS.Web.Domain.Values.BackRecordType,WMS.Web.Core.Dto.Login.LoginInDto)">
<summary> <summary>
回退上下架 回退上下架
</summary> </summary>
<param name="dto"></param> <param name="dto"></param>
<param name="type"></param>
<param name="loginInfo"></param> <param name="loginInfo"></param>
<returns></returns> <returns></returns>
</member> </member>
@@ -3084,6 +3091,14 @@
<param name="isTransaction"></param> <param name="isTransaction"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:WMS.Web.Domain.Services.InventoryService.GenerateBackBox(System.Collections.Generic.List{WMS.Web.Core.Dto.Inventory.BoxInventoryBackGenerateDto},System.Boolean)">
<summary>
入库回退上下架-箱库存的变更
</summary>
<param name="dtoDatas"></param>
<param name="isTransaction"></param>
<returns></returns>
</member>
<member name="T:WMS.Web.Domain.Services.OutStockService"> <member name="T:WMS.Web.Domain.Services.OutStockService">
<summary> <summary>
出库服务 出库服务

View File

@@ -25,6 +25,13 @@ namespace WMS.Web.Core.Dto.BackRecord
/// </summary> /// </summary>
[Required(ErrorMessage = "数量不能为空")] [Required(ErrorMessage = "数量不能为空")]
public decimal Qty { get; set; } public decimal Qty { get; set; }
/// <summary>
/// 仓库code
/// </summary>
[Required(ErrorMessage = "仓库不能为空")]
public string StockCode { get; set; }
/// <summary> /// <summary>
/// 仓位ID /// 仓位ID
/// </summary> /// </summary>

View File

@@ -10,12 +10,6 @@ namespace WMS.Web.Core.Dto.BackRecord
/// </summary> /// </summary>
public class SaveBackRecordRequest public class SaveBackRecordRequest
{ {
/// <summary>
/// 类型1为入库回退下架2为出库回退上架
/// </summary>
[Required(ErrorMessage = "回退类型不能为空")]
public int BackRecordType { get; set; }
/// <summary> /// <summary>
/// 明细 /// 明细
/// </summary> /// </summary>

View File

@@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace WMS.Web.Core.Dto.Inventory
{
/// <summary>
/// 出入库回退上下架-箱库存处理对象
/// </summary>
public class BoxInventoryBackGenerateDto
{
/// <summary>
/// 类型1为入库回退下架2为出库回退上架
/// </summary>
public int BackRecordType { get; set; }
/// <summary>
/// 箱ID
/// </summary>
public int BoxId { get; set; }
/// <summary>
/// 仓库编码
/// </summary>
public string StockCode { get; set; }
/// <summary>
/// 仓位ID
/// </summary>
public int SubStockId { get; set; }
/// <summary>
/// 明细
/// </summary>
public List<BoxInventoryBackDetailsGenerateDto> Details { get; set; }
}
/// <summary>
/// 出入库回退上下架明细-箱库存处理对象
/// </summary>
public class BoxInventoryBackDetailsGenerateDto
{
/// <summary>
/// 物料ID
/// </summary>
public int MaterialId { get; set; }
/// <summary>
/// 数量
/// </summary>
public decimal Qty { get; set; }
/// <summary>
/// 序列号集
/// </summary>
public List<string> SerialNumbers { get; set; } = new List<string>();
}
}

View File

@@ -19,21 +19,6 @@ namespace WMS.Web.Core.Dto.Inventory
/// </summary> /// </summary>
public int TargetBoxId { get; set; } public int TargetBoxId { get; set; }
///// <summary>
///// 仓库编码:目标仓库
///// </summary>
//public string StockCode { get; set; }
///// <summary>
///// 仓位:目标仓位
///// </summary>
//public int SubStockId { get; set; }
///// <summary>
///// 出入库类型:有个枚举的
///// </summary>
//public int InventoryInOutType { get; set; }
/// <summary> /// <summary>
/// 明细 /// 明细
/// </summary> /// </summary>

View File

@@ -33,6 +33,10 @@ namespace WMS.Web.Domain.Entitys
/// </summary> /// </summary>
public decimal Qty { get; set; } public decimal Qty { get; set; }
/// <summary> /// <summary>
/// 仓库code
/// </summary>
public string StockCode { get; set; }
/// <summary>
/// 仓位ID /// 仓位ID
/// </summary> /// </summary>
public int SubStockId { get; set; } public int SubStockId { get; set; }

View File

@@ -5,6 +5,7 @@ using System.Threading.Tasks;
using WMS.Web.Core.Dto.BackRecord; using WMS.Web.Core.Dto.BackRecord;
using WMS.Web.Core.Dto.Login; using WMS.Web.Core.Dto.Login;
using WMS.Web.Core.Internal.Results; using WMS.Web.Core.Internal.Results;
using WMS.Web.Domain.Values;
namespace WMS.Web.Domain.IService namespace WMS.Web.Domain.IService
{ {
@@ -17,8 +18,9 @@ namespace WMS.Web.Domain.IService
/// 回退上下架 /// 回退上下架
/// </summary> /// </summary>
/// <param name="dto"></param> /// <param name="dto"></param>
/// <param name="type"></param>
/// <param name="loginInfo"></param> /// <param name="loginInfo"></param>
/// <returns></returns> /// <returns></returns>
Task<Result> BackShelf(SaveBackRecordRequest dto, LoginInDto loginInfo); Task<Result> BackShelf(SaveBackRecordRequest dto, BackRecordType type, LoginInDto loginInfo);
} }
} }

View File

@@ -20,6 +20,10 @@ namespace WMS.Web.Domain.Mappers
//移箱映射 //移箱映射
CreateMap<BoxInventoryMoveGenerateDto, BoxInventory>(); CreateMap<BoxInventoryMoveGenerateDto, BoxInventory>();
CreateMap<BoxDetails, BoxInventoryDetails>() ; CreateMap<BoxDetails, BoxInventoryDetails>() ;
//出入库回退上下架映射
CreateMap<BoxInventoryBackGenerateDto, BoxInventory>();
CreateMap<BoxInventoryBackDetailsGenerateDto, BoxInventoryDetails>();
} }
} }
} }

View File

@@ -40,16 +40,17 @@ namespace WMS.Web.Domain.Services
/// 回退上下架 /// 回退上下架
/// </summary> /// </summary>
/// <param name="dto"></param> /// <param name="dto"></param>
/// <param name="type"></param>
/// <param name="loginInfo"></param> /// <param name="loginInfo"></param>
/// <returns></returns> /// <returns></returns>
public async Task<Result> BackShelf(SaveBackRecordRequest dto, LoginInDto loginInfo) public async Task<Result> BackShelf(SaveBackRecordRequest dto, BackRecordType type, LoginInDto loginInfo)
{ {
IDbContextTransaction _transaction = _basicsRepositories.GetTransaction(); IDbContextTransaction _transaction = _basicsRepositories.GetTransaction();
bool isRollback = false; bool isRollback = false;
bool isTransaction = false; bool isTransaction = false;
var entity = new BackRecord(); var entity = new BackRecord();
entity.Type = (BackRecordType)dto.BackRecordType; entity.Type = type;
entity.Details = _mapper.Map<List<BackRecordDetails>>(dto.Details); entity.Details = _mapper.Map<List<BackRecordDetails>>(dto.Details);
entity.Create(loginInfo.UserInfo.StaffId); entity.Create(loginInfo.UserInfo.StaffId);
entity = await _backRecordRepositories.Add(entity, isTransaction); entity = await _backRecordRepositories.Add(entity, isTransaction);

View File

@@ -231,5 +231,100 @@ namespace WMS.Web.Domain.Services
} }
return Result.ReSuccess(); return Result.ReSuccess();
} }
/// <summary>
/// 入库回退上下架-箱库存的变更
/// </summary>
/// <param name="dtoDatas"></param>
/// <param name="isTransaction"></param>
/// <returns></returns>
public async Task<Result> GenerateBackBox(List<BoxInventoryBackGenerateDto> dtoDatas, bool isTransaction)
{
//1.判断来源数据是否存在
if (dtoDatas != null || dtoDatas.Count == 0)
return Result.ReFailure(ResultCodes.InventoryNoSourceError);
var update_entitys = new List<BoxInventory>();
var add_entitys = new List<BoxInventory>();
//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<BoxInventory>(dto);
addEntity.Details = _mapper.Map<List<BoxInventoryDetails>>(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<BoxInventoryDetails>();
//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<string>();
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();
}
} }
} }