From dc3d984bd54b457725f0f9ea4136c0c0b0c7c407 Mon Sep 17 00:00:00 2001
From: tongfei <244188119@qq.com>
Date: Thu, 16 Nov 2023 14:35:41 +0800
Subject: [PATCH] =?UTF-8?q?=E5=87=BA=E5=BA=93-=E7=AE=B1=E5=BA=93=E5=AD=98?=
=?UTF-8?q?=E5=8F=98=E6=9B=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml | 40 +++++++++
src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml | 23 +++++
.../BoxInventoryOutStockGenerateDto.cs | 46 ++++++++++
.../Services/InventoryService.cs | 90 ++++++++++++++++++-
.../Values/InOutInventoryMethod.cs | 24 +++++
src/WMS.Web.Domain/Values/ResultCodes.cs | 1 +
6 files changed, 221 insertions(+), 3 deletions(-)
create mode 100644 src/WMS.Web.Core/Dto/Inventory/BoxInventoryOutStockGenerateDto.cs
create mode 100644 src/WMS.Web.Domain/Values/InOutInventoryMethod.cs
diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml
index f5f4812f..8b264b74 100644
--- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml
+++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml
@@ -2241,6 +2241,46 @@
序列号集
+
+
+ 出库-箱库存变更请求对象
+
+
+
+
+ 出入库存-方式(详情见枚举值)
+
+
+
+
+ 箱ID
+
+
+
+
+ 明细
+
+
+
+
+ 出库明细-箱库存变更请求对象
+
+
+
+
+ 物料ID
+
+
+
+
+ 数量
+
+
+
+
+ 序列号集
+
+
采购上架-箱库存处理对象
diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
index 5b3f58a4..33586b06 100644
--- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
+++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml
@@ -3241,6 +3241,14 @@
+
+
+ 出库下架-箱库存变更
+
+
+
+
+
出库服务
@@ -4256,6 +4264,21 @@
出入库回退上下架
+
+
+ 出入库存-方式
+
+
+
+
+ 按箱
+
+
+
+
+ 按产品
+
+
入库状态
diff --git a/src/WMS.Web.Core/Dto/Inventory/BoxInventoryOutStockGenerateDto.cs b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryOutStockGenerateDto.cs
new file mode 100644
index 00000000..32b8fd5b
--- /dev/null
+++ b/src/WMS.Web.Core/Dto/Inventory/BoxInventoryOutStockGenerateDto.cs
@@ -0,0 +1,46 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace WMS.Web.Core.Dto.Inventory
+{
+ ///
+ /// 出库-箱库存变更请求对象
+ ///
+ public class BoxInventoryOutStockGenerateDto
+ {
+ ///
+ /// 出入库存-方式(详情见枚举值)
+ ///
+ public int InOutInventoryMethod { get; set; }
+
+ ///
+ /// 箱ID
+ ///
+ public int BoxId { get; set; }
+
+ ///
+ /// 明细
+ ///
+ public List Details { get; set; } = new List();
+ }
+ ///
+ /// 出库明细-箱库存变更请求对象
+ ///
+ public class BoxInventoryOutStockDetailsGenerateDto
+ {
+ ///
+ /// 物料ID
+ ///
+ public int MaterialId { get; set; }
+ ///
+ /// 数量
+ ///
+ public decimal Qty { get; set; }
+
+ ///
+ /// 序列号集
+ ///
+ public List SerialNumbers { get; set; } = new List();
+ }
+}
diff --git a/src/WMS.Web.Domain/Services/InventoryService.cs b/src/WMS.Web.Domain/Services/InventoryService.cs
index 6132dcd5..a39680e3 100644
--- a/src/WMS.Web.Domain/Services/InventoryService.cs
+++ b/src/WMS.Web.Domain/Services/InventoryService.cs
@@ -370,7 +370,7 @@ namespace WMS.Web.Domain.Services
foreach (var dto in dtoDatas)
{
//3.1上架的时候:箱一定是不存在于箱库存当中的,有则返回提示“已有箱库存,不需要再扫上架”
- var ishave = boxInventorys.Where(x =>dto.BoxIds.Contains(x.BoxId)).Any();
+ var ishave = dto.BoxIds.All(x => boxInventorys.Any(t => t.BoxId == x));////代码意义:当前dto中的BoxIds是否全部等于箱库存中的boxId;dto中有一个boxID不等于箱库存中的,就失败
if (ishave)
return Result.ReFailure(ResultCodes.BoxInventoryHaveInventoryError);
@@ -416,8 +416,8 @@ namespace WMS.Web.Domain.Services
if (dto.ShelfMethod == (int)ShelfMethod.Box)
{
//3.1上架的时候:箱一定是不存在于箱库存当中的,有则返回提示“已有箱库存,不需要再扫上架”
- var ishave = boxInventorys.Where(x => dto.BoxIds.Contains(x.BoxId)).Any();
- if (ishave)
+ var isAllTrueHave = dto.BoxIds.All(x => boxInventorys.Any(t => t.BoxId == x));//代码意义:当前dto中的BoxIds是否全部等于箱库存中的boxId;dto中有一个boxID不等于箱库存中的,就失败
+ if (isAllTrueHave)
return Result.ReFailure(ResultCodes.BoxInventoryHaveInventoryError);
//3.2组装要新增的箱库存信息:箱和明细和序列号
@@ -486,5 +486,89 @@ namespace WMS.Web.Domain.Services
}
return Result.ReSuccess();
}
+
+ ///
+ /// 出库下架-箱库存变更
+ ///
+ ///
+ ///
+ ///
+ public async Task GenerateOutStockBox(List dtoDatas, bool isTransaction)
+ {
+ //1.判断来源数据是否存在
+ if (dtoDatas != null || dtoDatas.Count == 0)
+ return Result.ReFailure(ResultCodes.InventoryNoSourceError);
+
+ var delete_entitys_ids = new List();
+ var update_entitys = new List();
+
+ //1.1通过箱IDS获取箱库存
+ var boxIds = dtoDatas.Select(x => x.BoxId).ToList();
+ var boxInventorys = await _boxInventoryRepositories.GetList(boxIds);
+
+ //2.遍历:dto
+ foreach (var dto in dtoDatas)
+ {
+ //3.1出库的时候:箱一定是存在于箱库存当中的,没有则返回提示“箱库存数据不存在,请稍候再试!”
+ // 获取箱库存
+ var boxInventory = boxInventorys.Where(x => x.BoxId == dto.BoxId).FirstOrDefault();
+ if (boxInventory==null)
+ return Result.ReFailure(ResultCodes.BoxInventoryNoDataError);
+
+ //按箱:出库
+ if (dto.InOutInventoryMethod == (int)InOutInventoryMethod.Box)
+ {
+ //直接添加要删除的箱
+ delete_entitys_ids.Add(boxInventory.Id);
+ }
+ //按产品:出库
+ else
+ {
+ //3.3创建更新对象
+ var update_entity = boxInventory;
+ update_entity.Details = boxInventory.Details;
+
+ //3.2.遍历:dto明细
+ foreach (var dtoItem in dto.Details)
+ {
+ //3.3.找到当前明细物料:没有则返回失败;提示:“该箱物料库存不存在”
+ var update_entityDetail = update_entity.Details.Where(x => x.MaterialId == dtoItem.MaterialId).FirstOrDefault();
+ if (update_entityDetail == null)
+ return Result.ReFailure(ResultCodes.BoxInventoryMaterialNoDataError);
+ //3.4判断库存数量是否不足
+ if (update_entityDetail.Qty < dtoItem.Qty)
+ return Result.ReFailure(ResultCodes.BoxInventoryNoInventoryError);
+
+ //3.5物料库存数量变更:减库存
+ update_entityDetail.Qty = update_entityDetail.Qty - dtoItem.Qty;
+ //3.6移除要出库的序列号
+ update_entityDetail.SerialNumbers.RemoveAll(x => dtoItem.SerialNumbers.Contains(x));
+
+ }
+ //4.1判断要修改的箱库存对象:是否所有的物料库存的数量都为0,“是”则删除该箱库存,"否"则修改;
+ var isAllNoInventory = update_entity.Details.All(x => x.Qty == 0);
+ if (isAllNoInventory)
+ delete_entitys_ids.Add(update_entity.Id);
+ else
+ //4.2添加要更新的箱库存实体
+ update_entitys.Add(update_entity);
+ }
+
+ }
+
+ //4.数据库更新操作:更新和删除
+ var isSuccess = true;
+ if (delete_entitys_ids.Count != 0)
+ {
+ isSuccess = await _boxInventoryRepositories.DeleteRange(delete_entitys_ids, 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();
+ }
}
}
diff --git a/src/WMS.Web.Domain/Values/InOutInventoryMethod.cs b/src/WMS.Web.Domain/Values/InOutInventoryMethod.cs
new file mode 100644
index 00000000..66cf9fc3
--- /dev/null
+++ b/src/WMS.Web.Domain/Values/InOutInventoryMethod.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using WMS.Web.Core;
+
+namespace WMS.Web.Domain.Values
+{
+ ///
+ /// 出入库存-方式
+ ///
+ public enum InOutInventoryMethod
+ {
+ ///
+ /// 按箱
+ ///
+ [EnumRemark("按箱")]
+ Box =1,
+ ///
+ /// 按产品
+ ///
+ [EnumRemark("按产品")]
+ Product =2
+ }
+}
diff --git a/src/WMS.Web.Domain/Values/ResultCodes.cs b/src/WMS.Web.Domain/Values/ResultCodes.cs
index 66a1e945..53c50191 100644
--- a/src/WMS.Web.Domain/Values/ResultCodes.cs
+++ b/src/WMS.Web.Domain/Values/ResultCodes.cs
@@ -48,6 +48,7 @@ namespace WMS.Web.Domain.Values
public static ValueTuple AdjustError = (80009, "与金蝶校准发生错误,请稍候再试!");
public static ValueTuple InventoryNoSourceError = (800010, "来源数据不存在,请稍候再试!");
public static ValueTuple BoxInventoryNoDataError = (800011, "箱库存数据不存在,请稍候再试!");
+ public static ValueTuple BoxInventoryMaterialNoDataError = (800041, "箱物料库存数据不存在,请稍候再试!");
public static ValueTuple BoxInventoryNoInventoryError = (800012, "箱库存物料数量不足,请核对后再试!");
public static ValueTuple BoxInventoryHaveInventoryError = (800013, "该箱库存已经存在,请核对后再试!");