From 4eafe9c975b88483da2a16f20c45285db0a3e791 Mon Sep 17 00:00:00 2001
From: zs <zhousong@weben-smart.com>
Date: 周一, 05 5月 2025 21:33:05 +0800
Subject: [PATCH] 库存及库存明细

---
 HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505121050_InitialCreate3.cs                                     |   28 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfoDto.cs                     |   86 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialDto.cs                             |    4 
 HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505121050_InitialCreate3.Designer.cs                            | 1003 +++++++++
 HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/MaterialCheckStatusEnum.cs                                        |   35 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStocksExportModel.cs          |    7 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialCreateOrUpdateDtoBase.cs           |    4 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfoCreateDto.cs               |   17 
 HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsPlaceController.cs                                                      |    4 
 HIAWms/web/src/config/menu.ts                                                                                             |   14 
 HIAWms/web/src/widgets/WmsMaterialStock/Models/WmsMaterialStock.ts                                                        |   41 
 HIAWms/web/src/widgets/WmsMaterialStock/Views/WmsMaterialStock.module.scss                                                |    7 
 HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/CMSPluginDbContext.cs                                                           |    1 
 HIAWms/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterialInfo导出模板.xlsx                                          |    0 
 HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Scripts/UpdateMigrations.bat                                                    |    2 
 HIAWms/web/src/widgets/WmsMaterialStock/type/Type.d.ts                                                                    |   45 
 HIAWms/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterialStock导出模板.xlsx                                         |    0 
 HIAWms/web/src/widgets/WmsMaterialStock/index.ts                                                                          |   14 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfoUpdateDto.cs               |   14 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsPlaceAppService.cs                                 |    4 
 HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsAreaRepository.cs                           |    5 
 HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/Dialog/WmsMaterialStockDrawer/WmsMaterialStockDrawer.module.scss      |    3 
 HIAWms/web/src/widgets/WmsMaterialStock/Controllers/File.ts                                                               |   31 
 HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialInfos/WmsMaterialInfoSpecification.cs                               |   41 
 HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505105851_InitialCreate2.Designer.cs                            |  998 +++++++++
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/GetWmsMaterialsInput.cs                       |    6 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialInfoAppService.cs                                   |  350 +++
 HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/Dialog/WmsMaterialStockDrawer/WmsMaterialStockDrawer.tsx              |   61 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs                                       |    1 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsPlaceAutoMapperProfile.cs                               |    2 
 HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStock/WmsMaterialStock.module.scss                         |  113 +
 HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsAreaAppService.cs                                           |    2 
 HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterialInfo.cs           |  120 +
 HIAWms/web/src/widgets/WmsMaterialStock/Models/Service/WmsMaterialStock.ts                                                |   30 
 HIAWms/web/src/widgets/WmsMaterialStock/Models/Service/WmsMaterialStockDrawer.ts                                          |   29 
 HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialInfos/WmsMaterialInfo.cs                                            |   92 
 HIAWms/web/src/widgets/WmsMaterialStock/Views/config/WmsMaterialStock.json                                                |    3 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsPlaceAppService.cs                                          |    8 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfosExportModel.cs            |   77 
 HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialStocks/WmsMaterialStock.cs                                          |   25 
 HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/CMSPluginDbContextModelSnapshot.cs                                   |  328 +++
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockDto.cs                   |   16 
 HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/WmsMaterialInfos/WmsMaterialInfoEto.cs                                  |   22 
 HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505105851_InitialCreate2.cs                                     |  196 +
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/GetWmsMaterialStocksInput.cs             |    4 
 HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialInfoRepository.cs                   |  100 
 HIAWms/web/src/widgets/HIAWms/Controllers/WmsMaterialDrawer.tsx                                                           |    8 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfoCreateOrUpdateDtoBase.cs   |   77 
 HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialInfos/IWmsMaterialInfoRepository.cs                                 |   54 
 HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterial.cs               |    3 
 HIAWms/web/src/widgets/WmsMaterialStock/Controllers/WmsMaterialStock.ts                                                   |  264 ++
 HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialInfos/WmsMaterialInfoDataSeedContributor.cs                         |   67 
 HIAWms/web/src/widgets/WmsMaterialStock/Models/WmsMaterialStockDrawer.ts                                                  |   38 
 HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStock/Config.ts                                            |   55 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsMaterialInfoAutoMapperProfile.cs                        |   28 
 HIAWms/server/src/CMS.Plugin.HIAWms.PostgreSql/CMSPluginDbContext.cs                                                      |    1 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfosImportModel.cs            |   34 
 HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterials/WmsMaterial.cs                                                    |    6 
 HIAWms/web/src/widgets/WmsMaterialStock/enum.ts                                                                           |   15 
 HIAWms/web/src/widgets/WmsContainer/Controllers/WmsContainer.ts                                                           |   68 
 HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialStockRepository.cs                  |  119 +
 HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs                                  |  125 +
 HIAWms/web/src/widgets/WmsMaterialStock/Views/WmsMaterialStock.tsx                                                        |   80 
 HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterialStock.cs          |   19 
 HIAWms/web/src/widgets/WmsMaterialStock/Controllers/WmsMaterialStockDrawer.tsx                                            |  343 +++
 HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/WmsMaterialInfos/WmsMaterialInfoConsts.cs                               |   17 
 HIAWms/web/src/widgets/HIAWms/Views/Pages/WmsMaterial/Config.ts                                                           |    4 
 HIAWms/web/components.d.ts                                                                                                |    1 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialsExportModel.cs                    |    5 
 HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialInfoController.cs                                               |  187 +
 HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStock/WmsMaterialStock.tsx                                 |  468 ++++
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateOrUpdateDtoBase.cs |    7 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsMaterialInfoAppService.cs                          |   46 
 HIAWms/server/src/CMS.Plugin.HIAWms.SqlServer/CMSPluginDbContext.cs                                                       |    1 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/GetWmsMaterialInfosInput.cs               |   59 
 HIAWms/server/src/CMS.Plugin.HIAWms.Domain/EventHandlers/WmsMaterialInfoEventHandler.cs                                   |   17 
 HIAWms/web/src/widgets/WmsStoreInfo/Controllers/WmsAreaDrawer.ts                                                          |    4 
 HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/GetWmsPlacesInput.cs                             |    2 
 78 files changed, 6,132 insertions(+), 83 deletions(-)

diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/GetWmsMaterialInfosInput.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/GetWmsMaterialInfosInput.cs
new file mode 100644
index 0000000..d68800b
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/GetWmsMaterialInfosInput.cs
@@ -0,0 +1,59 @@
+using CMS.Plugin.HIAWms.Domain.Shared.Enums;
+using Volo.Abp.Application.Dtos;
+
+namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialInfos;
+
+/// <summary>
+/// WmsMaterialInfo鏌ヨ鍙傛暟瀵硅薄
+/// </summary>
+public class GetWmsMaterialInfosInput : ExtensiblePagedAndSortedResultRequestDto
+{
+    /// <summary>
+    /// Gets or sets the filter.
+    /// </summary>
+    public string Filter { get; set; }
+
+    /// <summary>
+    /// Gets or sets the name.
+    /// </summary>
+    public string Name { get; set; }
+    /// <summary>
+    /// 鐗╂枡浠e彿
+    /// </summary>
+    public string MaterialNo { get; set; }
+
+    /// <summary>
+    /// 鐗╂枡鍚嶇О
+    /// </summary>
+    public string MaterialName { get; set; }
+
+    /// <summary>
+    /// 鏈哄瀷
+    /// </summary>
+    public string? MaterialModel { get; set; }
+
+    /// <summary>
+    /// 鐗╂枡鍞竴鐮�
+    /// </summary>
+    public string MaterialId { get; set; }
+
+    /// <summary>
+    /// 鏁伴噺
+    /// </summary>
+    public int? StockNumber { get; set; }
+
+    /// <summary>
+    /// 鐗╂枡鎵瑰彿
+    /// </summary>
+    public string? MaterialBatch { get; set; }
+
+    /// <summary>
+    /// 渚涘簲鍟嗙紪鍙�
+    /// </summary>
+    public string? SupplierCode { get; set; }
+
+    /// <summary>
+    /// 妫�楠岀姸鎬�
+    /// </summary>
+    public MaterialCheckStatusEnum? CheckStatus { get; set; }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfoCreateDto.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfoCreateDto.cs
new file mode 100644
index 0000000..1b51090
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfoCreateDto.cs
@@ -0,0 +1,17 @@
+namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialInfos;
+
+/// <summary>
+/// WmsMaterialInfo鍒涘缓鍙傛暟瀵硅薄
+/// </summary>
+public class WmsMaterialInfoCreateDto : WmsMaterialInfoCreateOrUpdateDtoBase
+{
+    /// <summary>
+    /// 鎺掑簭
+    /// </summary>
+    public virtual int? Sort { get; set; }
+
+    /// <summary>
+    /// 鏄惁绂佺敤
+    /// </summary>
+    public bool? IsDisabled { get; set; } = false;
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfoCreateOrUpdateDtoBase.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfoCreateOrUpdateDtoBase.cs
new file mode 100644
index 0000000..f634209
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfoCreateOrUpdateDtoBase.cs
@@ -0,0 +1,77 @@
+using CMS.Plugin.HIAWms.Domain.Shared.Enums;
+using Volo.Abp.Application.Dtos;
+
+namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialInfos;
+
+/// <summary>
+/// WmsMaterialInfo鍒涘缓鎴栨洿鏂板熀绫�
+/// </summary>
+public abstract class WmsMaterialInfoCreateOrUpdateDtoBase : ExtensibleEntityDto
+{
+    /// <summary>
+    /// 鐗╂枡浠e彿
+    /// </summary>
+    public string MaterialNo { get; set; }
+
+    /// <summary>
+    /// 鐗╂枡鍚嶇О
+    /// </summary>
+    public string MaterialName { get; set; }
+
+    /// <summary>
+    /// 鏈哄瀷
+    /// </summary>
+    public string? MaterialModel { get; set; }
+
+    /// <summary>
+    /// 鐗╂枡鍞竴鐮�
+    /// </summary>
+    public string MaterialId { get; set; }
+
+    /// <summary>
+    /// 鏁伴噺
+    /// </summary>
+    public int? StockNumber { get; set; }
+
+    /// <summary>
+    /// 鐗╂枡鎵瑰彿
+    /// </summary>
+    public string? MaterialBatch { get; set; }
+
+    /// <summary>
+    /// 渚涘簲鍟嗙紪鍙�
+    /// </summary>
+    public string? SupplierCode { get; set; }
+
+    /// <summary>
+    /// 妫�楠岀姸鎬�
+    /// </summary>
+    public MaterialCheckStatusEnum? CheckStatus { get; set; }
+
+    /// <summary>
+    /// 鍐椾綑瀛楁1 - 棰勭暀鎵╁睍鐢ㄩ��
+    /// </summary>
+    public string RedundantField1 { get; set; }
+
+    /// <summary>
+    /// 鍐椾綑瀛楁2 - 棰勭暀鎵╁睍鐢ㄩ��
+    /// </summary>
+    public string RedundantField2 { get; set; }
+
+    /// <summary>
+    /// 鍐椾綑瀛楁3 - 棰勭暀鎵╁睍鐢ㄩ��
+    /// </summary>
+    public string RedundantField3 { get; set; }
+
+    /// <summary>
+    /// 澶囨敞
+    /// </summary>
+    public virtual string Remark { get; set; }
+
+    /// <summary>
+    /// Initializes a new instance of the <see cref="WmsMaterialInfoCreateOrUpdateDtoBase"/> class.
+    /// </summary>
+    public WmsMaterialInfoCreateOrUpdateDtoBase() : base(false)
+    {
+    }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfoDto.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfoDto.cs
new file mode 100644
index 0000000..736a0b3
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfoDto.cs
@@ -0,0 +1,86 @@
+using CMS.Plugin.HIAWms.Domain.Shared.Enums;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.Domain.Entities;
+
+namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialInfos;
+
+/// <summary>
+/// WmsMaterialInfo鏁版嵁鍙傛暟瀵硅薄
+/// </summary>
+public class WmsMaterialInfoDto : ExtensibleEntityDto<Guid>, IHasConcurrencyStamp
+{
+    /// <summary>
+    /// 鐗╂枡浠e彿
+    /// </summary>
+    public string MaterialNo { get; set; }
+
+    /// <summary>
+    /// 鐗╂枡鍚嶇О
+    /// </summary>
+    public string MaterialName { get; set; }
+
+    /// <summary>
+    /// 鏈哄瀷
+    /// </summary>
+    public string? MaterialModel { get; set; }
+
+    /// <summary>
+    /// 鐗╂枡鍞竴鐮�
+    /// </summary>
+    public string MaterialId { get; set; }
+
+    /// <summary>
+    /// 鏁伴噺
+    /// </summary>
+    public int? StockNumber { get; set; }
+
+    /// <summary>
+    /// 鐗╂枡鎵瑰彿
+    /// </summary>
+    public string? MaterialBatch { get; set; }
+
+    /// <summary>
+    /// 渚涘簲鍟嗙紪鍙�
+    /// </summary>
+    public string? SupplierCode { get; set; }
+
+    /// <summary>
+    /// 妫�楠岀姸鎬�
+    /// </summary>
+    public MaterialCheckStatusEnum? CheckStatus { get; set; }
+
+    /// <summary>
+    /// 鎺掑簭
+    /// </summary>
+    public virtual int Sort { get; set; }
+
+    /// <summary>
+    /// 澶囨敞
+    /// </summary>
+    public virtual string Remark { get; set; }
+
+    /// <summary>
+    /// 鏄惁绂佺敤
+    /// </summary>
+    public virtual bool? IsDisabled { get; set; }
+
+    /// <summary>
+    /// 骞跺彂鎴�
+    /// </summary>
+    public string ConcurrencyStamp { get; set; }
+
+    /// <summary>
+    /// Gets the export data.
+    /// </summary>
+    /// <returns></returns>
+    public Dictionary<string, object> GetExportData()
+    {
+        var exportData = new Dictionary<string, object>();
+        foreach (var property in this.GetType().GetProperties())
+        {
+            exportData.Add(property.Name, property.GetValue(this));
+        }
+
+        return exportData;
+    }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfoUpdateDto.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfoUpdateDto.cs
new file mode 100644
index 0000000..aef6c50
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfoUpdateDto.cs
@@ -0,0 +1,14 @@
+using Volo.Abp.Domain.Entities;
+
+namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialInfos;
+
+/// <summary>
+/// WmsMaterialInfo鏇存柊鍙傛暟瀵硅薄
+/// </summary>
+public class WmsMaterialInfoUpdateDto : WmsMaterialInfoCreateOrUpdateDtoBase, IHasConcurrencyStamp
+{
+    /// <summary>
+    /// 骞跺彂鎴�
+    /// </summary>
+    public string ConcurrencyStamp { get; set; }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfosExportModel.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfosExportModel.cs
new file mode 100644
index 0000000..481491c
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfosExportModel.cs
@@ -0,0 +1,77 @@
+using CMS.Plugin.HIAWms.Domain.Shared.Enums;
+using MiniExcelLibs.Attributes;
+
+namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialInfos
+{
+    /// <summary>
+    /// WmsMaterialInfos瀵煎嚭妯″瀷
+    /// </summary>
+    public class WmsMaterialInfosExportModel
+    {
+        /// <summary>
+        /// WmsMaterialInfo瀵煎嚭妯″瀷
+        /// </summary>
+        public class WorkSectionExportModel
+        {
+            /// <summary>
+            /// 鐗╂枡缂栧彿
+            /// </summary>
+            [ExcelColumn(Name = "鐗╂枡缂栧彿", Width = 20)]
+            public string MaterialNo { get; set; }
+
+            /// <summary>
+            /// 鐗╂枡鍚嶇О
+            /// </summary>
+            [ExcelColumn(Name = "鐗╂枡鍚嶇О", Width = 25)]
+            public string MaterialName { get; set; }
+
+            /// <summary>
+            /// 鏈哄瀷/瑙勬牸
+            /// </summary>
+            [ExcelColumn(Name = "鏈哄瀷瑙勬牸", Width = 20)]
+            public string MaterialModel { get; set; }
+
+            /// <summary>
+            /// 鐗╂枡鍞竴鐮�
+            /// </summary>
+            [ExcelColumn(Name = "鍞竴鏍囪瘑鐮�", Width = 25)]
+            public string MaterialId { get; set; }
+
+            /// <summary>
+            /// 搴撳瓨鏁伴噺
+            /// </summary>
+            [ExcelColumn(Name = "搴撳瓨鏁伴噺", Width = 15)]
+            public int? StockNumber { get; set; }
+
+            /// <summary>
+            /// 鐗╂枡鎵规
+            /// </summary>
+            [ExcelColumn(Name = "鐗╂枡鎵规", Width = 20)]
+            public string MaterialBatch { get; set; }
+
+            /// <summary>
+            /// 渚涘簲鍟嗙紪鍙�
+            /// </summary>
+            [ExcelColumn(Name = "渚涘簲鍟嗙紪鍙�", Width = 25)]
+            public string SupplierCode { get; set; }
+
+            /// <summary>
+            /// 妫�楠岀姸鎬�
+            /// </summary>
+            [ExcelColumn(Name = "妫�楠岀姸鎬�", Width = 25)]
+            public MaterialCheckStatusEnum? CheckStatus { get; set; }
+
+            /// <summary>
+            /// 鍏ュ簱鏃堕棿
+            /// </summary>
+            [ExcelColumn(Name = "鍏ュ簱鏃堕棿", Width = 25, Format = "yyyy-MM-dd HH:mm")]
+            public DateTime? InStockTime { get; set; }
+
+            /// <summary>
+            /// 澶囨敞
+            /// </summary>
+            [ExcelColumn(Name = "澶囨敞", Width = 30)]
+            public string Remark { get; set; }
+        }
+    }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfosImportModel.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfosImportModel.cs
new file mode 100644
index 0000000..954133d
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfosImportModel.cs
@@ -0,0 +1,34 @@
+using static CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialInfos.WmsMaterialInfosExportModel;
+
+namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialInfos
+{
+    /// <summary>
+    /// WmsMaterialInfos瀵煎叆妯″瀷
+    /// </summary>
+    public class WmsMaterialInfosImportModel
+    {
+        private List<WmsMaterialInfoImportModel> _wmsmaterialinfos = new();
+
+        public List<WmsMaterialInfoImportModel> WmsMaterialInfos
+        {
+            get => _wmsmaterialinfos;
+            set
+            {
+                _wmsmaterialinfos = value;
+                var rowIndex = 2;
+                _wmsmaterialinfos?.ForEach(x => x.RowIndex = rowIndex++);
+            }
+        }
+
+        /// <summary>
+        /// WmsMaterialInfo瀵煎叆妯″瀷
+        /// </summary>
+        public class WmsMaterialInfoImportModel : WorkSectionExportModel
+        {
+            /// <summary>
+            /// 琛屽彿
+            /// </summary>
+            public int RowIndex { get; set; }
+        }
+    }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/GetWmsMaterialStocksInput.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/GetWmsMaterialStocksInput.cs
index a3bddeb..79db668 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/GetWmsMaterialStocksInput.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/GetWmsMaterialStocksInput.cs
@@ -34,6 +34,10 @@
     public virtual string MaterialId { get; set; }
 
     /// <summary>
+    /// 妫�楠岀姸鎬�
+    /// </summary>
+    public MaterialCheckStatusEnum? CheckStatus { get; set; }
+    /// <summary>
     /// 鍚嶇О
     /// </summary>
     public virtual string MaterialName { get; set; }
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateOrUpdateDtoBase.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateOrUpdateDtoBase.cs
index 8f776ef..c6da695 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateOrUpdateDtoBase.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateOrUpdateDtoBase.cs
@@ -84,9 +84,14 @@
     public string AreaName { get; set; }
 
     /// <summary>
+    /// 妫�楠岀姸鎬�
+    /// </summary>
+    public MaterialCheckStatusEnum? CheckStatus { get; set; }
+
+    /// <summary>
     /// 鏄惁閿佸畾
     /// </summary>
-    public int IsLock { get; set; }
+    public YesNoEnum IsLock { get; set; }
 
     /// <summary>
     /// 鏄惁绌烘墭
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockDto.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockDto.cs
index 722b8e6..16f60e0 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockDto.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockDto.cs
@@ -132,6 +132,22 @@
     public string AreaName { get; set; }
 
     /// <summary>
+    /// 妫�楠岀姸鎬�
+    /// </summary>
+    public MaterialCheckStatusEnum? CheckStatus { get; set; }
+
+    /// <summary>
+    /// 妫�楠岀姸鎬�
+    /// </summary>
+    public string CheckStatusDesc
+    {
+        get
+        {
+            return GetEnumDescriptionUtil.GetEnumDescription(CheckStatus);
+        }
+    }
+
+    /// <summary>
     /// 鏄惁閿佸畾
     /// </summary>
     public YesNoEnum IsLock { get; set; }
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStocksExportModel.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStocksExportModel.cs
index 46f79ea..e9a10eb 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStocksExportModel.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStocksExportModel.cs
@@ -102,11 +102,16 @@
             public string AreaName { get; set; }
 
             /// <summary>
+            /// 妫�楠岀姸鎬�
+            /// </summary>
+            public MaterialCheckStatusEnum? CheckStatus { get; set; }
+
+            /// <summary>
             /// 閿佸畾鐘舵��
             /// <para>0-鏈攣瀹� 1-宸查攣瀹�</para>
             /// </summary>
             [ExcelColumn(Name = "鏄惁閿佸畾", Width = 25)]
-            public int IsLock { get; set; }
+            public YesNoEnum IsLock { get; set; }
 
             /// <summary>
             /// 鏄惁绌烘墭
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/GetWmsMaterialsInput.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/GetWmsMaterialsInput.cs
index 4a5d512..5427e01 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/GetWmsMaterialsInput.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/GetWmsMaterialsInput.cs
@@ -28,6 +28,12 @@
     /// </summary>
     public string MaterialName { get; set; }
 
+
+    /// <summary>
+    /// 鍨嬪彿
+    /// </summary>
+    public string MaterialModel { get; set; }
+
     /// <summary>
     /// 閲囪喘绫诲瀷锛堟灇涓惧�硷級
     /// </summary>
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialCreateOrUpdateDtoBase.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialCreateOrUpdateDtoBase.cs
index 9d4e9c8..cfe0a7d 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialCreateOrUpdateDtoBase.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialCreateOrUpdateDtoBase.cs
@@ -19,6 +19,10 @@
     public string MaterialName { get; set; }
 
     /// <summary>
+    /// 鍨嬪彿
+    /// </summary>
+    public string MaterialModel { get; set; }
+    /// <summary>
     /// 閲囪喘绫诲瀷锛堟灇涓惧�硷級
     /// </summary>
     public PurchaseTypeEnum PurchaseType { get; set; }
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialDto.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialDto.cs
index 9681abf..d9cd88b 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialDto.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialDto.cs
@@ -98,6 +98,10 @@
     }
 
     /// <summary>
+    /// 鍨嬪彿
+    /// </summary>
+    public string MaterialModel { get; set; }
+    /// <summary>
     /// 鐢熶骇宸ュ巶
     /// </summary>
     public string Factory { get; set; }
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialsExportModel.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialsExportModel.cs
index 3a90013..e34c158 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialsExportModel.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialsExportModel.cs
@@ -81,6 +81,11 @@
         public string MaterialQuality { get; set; }
 
         /// <summary>
+        /// 鍨嬪彿
+        /// </summary>
+        [ExcelColumn(Name = "鍨嬪彿", Width = 25)]
+        public string MaterialModel { get; set; }
+        /// <summary>
         /// 闀垮害锛堝崟浣嶏細绫筹級
         /// </summary>
         /// <example>6.0</example>
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/GetWmsPlacesInput.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/GetWmsPlacesInput.cs
index 11c2d01..64fea4b 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/GetWmsPlacesInput.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/GetWmsPlacesInput.cs
@@ -6,7 +6,7 @@
 /// <summary>
 /// WmsPlace鏌ヨ鍙傛暟瀵硅薄
 /// </summary>
-public class GetWmsPlacesInput : ExtensiblePagedAndSortedResultRequestDto
+public class GetWmsMaterialInfoInput : ExtensiblePagedAndSortedResultRequestDto
 {
     /// <summary>
     /// Gets or sets the filter.
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsMaterialInfoAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsMaterialInfoAppService.cs
new file mode 100644
index 0000000..970ee0b
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsMaterialInfoAppService.cs
@@ -0,0 +1,46 @@
+using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialInfos;
+using Volo.Abp.Application.Services;
+
+namespace CMS.Plugin.HIAWms.Application.Contracts.Services;
+
+/// <summary>
+/// WmsMaterialInfo搴旂敤鏈嶅姟
+/// </summary>
+public interface IWmsMaterialInfoAppService : ICrudAppService<WmsMaterialInfoDto, Guid, GetWmsMaterialInfosInput, WmsMaterialInfoCreateDto, WmsMaterialInfoUpdateDto>
+{
+    /// <summary>
+    /// Clones the asynchronous.
+    /// </summary>
+    /// <param name="ids">The ids.</param>
+    /// <returns></returns>
+    Task<List<WmsMaterialInfoDto>> CloneAsync(IEnumerable<Guid> ids);
+
+    /// <summary>
+    /// Deletes the many asynchronous.
+    /// </summary>
+    /// <param name="ids">The ids.</param>
+    /// <returns></returns>
+    Task DeleteManyAsync(IEnumerable<Guid> ids);
+
+    /// <summary>
+    /// Adjusts the sort asynchronous.
+    /// </summary>
+    /// <param name="id">The identifier.</param>
+    /// <param name="sort">The sort.</param>
+    /// <returns></returns>
+    Task AdjustSortAsync(Guid id, int sort);
+
+    /// <summary>
+    /// Imports the asynchronous.
+    /// </summary>
+    /// <param name="input">The input.</param>
+    /// <returns></returns>
+    Task ImportAsync(WmsMaterialInfosImportModel input);
+
+    /// <summary>
+    /// Exports the asynchronous.
+    /// </summary>
+    /// <param name="input">The input.</param>
+    /// <returns></returns>
+    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsMaterialInfosInput input);
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsPlaceAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsPlaceAppService.cs
index 5aa95c9..04c1832 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsPlaceAppService.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsPlaceAppService.cs
@@ -6,7 +6,7 @@
 /// <summary>
 /// WmsPlace搴旂敤鏈嶅姟
 /// </summary>
-public interface IWmsPlaceAppService : ICrudAppService<WmsPlaceDto, Guid, GetWmsPlacesInput, WmsPlaceCreateDto, WmsPlaceUpdateDto>
+public interface IWmsPlaceAppService : ICrudAppService<WmsPlaceDto, Guid, GetWmsMaterialInfoInput, WmsPlaceCreateDto, WmsPlaceUpdateDto>
 {
     /// <summary>
     /// Clones the asynchronous.
@@ -42,5 +42,5 @@
     /// </summary>
     /// <param name="input">The input.</param>
     /// <returns></returns>
-    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsPlacesInput input);
+    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsMaterialInfoInput input);
 }
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsAreaAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsAreaAppService.cs
index 044e7d3..cbbdf8e 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsAreaAppService.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsAreaAppService.cs
@@ -236,7 +236,7 @@
                     throw new UserFriendlyException(errorMsg);
                 }
 
-                var oldWmsArea = await _wmsareaRepository.FindByNameAsync(wmsarea.AreaName);
+                var oldWmsArea = await _wmsareaRepository.FindByNameAsync(wmsarea.AreaNo);
                 if (oldWmsArea != null)
                 {
                     var wmsareaUpdateDto = new WmsAreaUpdateDto
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs
index c70214a..8231e75 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs
@@ -105,6 +105,7 @@
         wmsmaterial.Length = input.Length;
         wmsmaterial.IsMainBranch = input.IsMainBranch;
         wmsmaterial.Factory = input.Factory;
+        wmsmaterial.MaterialModel = input.MaterialModel;
         wmsmaterial.Certification = input.Certification;
 
         await _wmsmaterialRepository.UpdateAsync(wmsmaterial);
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialInfoAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialInfoAppService.cs
new file mode 100644
index 0000000..d25bdf5
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialInfoAppService.cs
@@ -0,0 +1,350 @@
+using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialInfos;
+using CMS.Plugin.HIAWms.Application.Contracts.Services;
+using CMS.Plugin.HIAWms.Domain.WmsMaterialInfos;
+using CMS.Plugin.HIAWms.Domain.Shared;
+using CMS.Plugin.HIAWms.Domain.Shared.WmsMaterialInfos;
+using Volo.Abp;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.Data;
+using Volo.Abp.ObjectExtending;
+using Volo.Abp.ObjectMapping;
+
+namespace CMS.Plugin.HIAWms.Application.Implements;
+
+/// <inheritdoc />
+public class WmsMaterialInfoAppService : CMSPluginAppService, IWmsMaterialInfoAppService
+{
+    private readonly IWmsMaterialInfoRepository _wmsmaterialinfoRepository;
+
+    /// <summary>
+    /// Initializes a new instance of the <see cref="WmsMaterialInfoAppService"/> class.
+    /// </summary>
+    /// <param name="wmsmaterialinfoRepository">The task job repository.</param>
+    public WmsMaterialInfoAppService(IWmsMaterialInfoRepository wmsmaterialinfoRepository)
+    {
+        _wmsmaterialinfoRepository = wmsmaterialinfoRepository;
+    }
+
+    /// <inheritdoc />
+    public virtual async Task<WmsMaterialInfoDto> GetAsync(Guid id)
+    {
+        return ObjectMapper.Map<WmsMaterialInfo, WmsMaterialInfoDto>(await _wmsmaterialinfoRepository.GetAsync(id));
+    }
+
+    /// <inheritdoc />
+    public virtual async Task<PagedResultDto<WmsMaterialInfoDto>> GetListAsync(GetWmsMaterialInfosInput input)
+    {
+        Check.NotNull(input, nameof(input));
+
+        if (input.Sorting.IsNullOrWhiteSpace())
+        {
+            input.Sorting = nameof(WmsMaterialInfo.Sort);
+        }
+
+        var specification = new WmsMaterialInfoSpecification(input.Name);
+        var materialInfo = ObjectMapper.Map<GetWmsMaterialInfosInput, WmsMaterialInfo>(input);
+        var count = await _wmsmaterialinfoRepository.GetCountAsync(materialInfo,input.Filter, specification);
+        var list = await _wmsmaterialinfoRepository.GetListAsync(materialInfo,input.Sorting, input.MaxResultCount,  input.SkipCount, input.Filter, specification);
+
+        return new PagedResultDto<WmsMaterialInfoDto>(count, ObjectMapper.Map<List<WmsMaterialInfo>, List<WmsMaterialInfoDto>>(list));
+    }
+
+    /// <inheritdoc />
+    public virtual async Task<WmsMaterialInfoDto> CreateAsync(WmsMaterialInfoCreateDto input)
+    {
+        await CheckCreateOrUpdateDtoAsync(input);
+
+        var exist = await _wmsmaterialinfoRepository.NameExistAsync(input.MaterialNo);
+        if (exist)
+        {
+            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialNo]);
+        }
+
+        var maxSort = await _wmsmaterialinfoRepository.GetMaxSortAsync();
+        var sort = input.Sort ?? maxSort;
+        var wmsmaterialinfo = ObjectMapper.Map<WmsMaterialInfoCreateDto, WmsMaterialInfo>(input);
+        input.MapExtraPropertiesTo(wmsmaterialinfo, MappingPropertyDefinitionChecks.None);
+        wmsmaterialinfo.Sort = sort;
+        await _wmsmaterialinfoRepository.InsertAsync(wmsmaterialinfo);
+
+        if (input.Sort.HasValue && wmsmaterialinfo.Sort != maxSort)
+        {
+            await AdjustSortAsync(wmsmaterialinfo.Id, wmsmaterialinfo.Sort);
+        }
+
+        return ObjectMapper.Map<WmsMaterialInfo, WmsMaterialInfoDto>(wmsmaterialinfo);
+    }
+
+    /// <inheritdoc />
+    public virtual async Task<WmsMaterialInfoDto> UpdateAsync(Guid id, WmsMaterialInfoUpdateDto input)
+    {
+        await CheckCreateOrUpdateDtoAsync(input);
+
+        var wmsMaterialInfo = await _wmsmaterialinfoRepository.GetAsync(id);
+        var exist = await _wmsmaterialinfoRepository.NameExistAsync(input.MaterialNo, wmsMaterialInfo.Id);
+        if (exist)
+        {
+            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialNo]);
+        }
+
+        wmsMaterialInfo.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
+        input.MapExtraPropertiesTo(wmsMaterialInfo, MappingPropertyDefinitionChecks.None);
+
+        wmsMaterialInfo.MaterialNo = input.MaterialNo;
+        wmsMaterialInfo.MaterialName = input.MaterialName;
+        wmsMaterialInfo.MaterialModel = input.MaterialModel;
+        wmsMaterialInfo.MaterialId = input.MaterialId;
+        wmsMaterialInfo.StockNumber = input.StockNumber;
+        wmsMaterialInfo.MaterialBatch = input.MaterialBatch;
+        wmsMaterialInfo.SupplierCode = input.SupplierCode;
+        wmsMaterialInfo.CheckStatus = input.CheckStatus;
+        wmsMaterialInfo.RedundantField1 = input.RedundantField1;
+        wmsMaterialInfo.RedundantField2 = input.RedundantField2;
+        wmsMaterialInfo.RedundantField3 = input.RedundantField3;
+        wmsMaterialInfo.Remark = input.Remark;
+
+        await _wmsmaterialinfoRepository.UpdateAsync(wmsMaterialInfo);
+
+        return ObjectMapper.Map<WmsMaterialInfo, WmsMaterialInfoDto>(wmsMaterialInfo);
+    }
+
+    /// <inheritdoc />
+    public async Task<List<WmsMaterialInfoDto>> CloneAsync(IEnumerable<Guid> ids)
+    {
+        var wmsmaterialinfos = new List<WmsMaterialInfo>();
+        if (ids != null)
+        {
+            var sort = await _wmsmaterialinfoRepository.GetMaxSortAsync();
+            foreach (var id in ids)
+            {
+                var wmsmaterialinfo = await _wmsmaterialinfoRepository.FindAsync(id);
+                if (wmsmaterialinfo != null)
+                {
+                    var name = wmsmaterialinfo.MaterialName + WmsMaterialInfoConsts.CloneTag;
+                    var notExist = false;
+                    while (!notExist)
+                    {
+                        var exist = await _wmsmaterialinfoRepository.NameExistAsync(name);
+                        if (exist || wmsmaterialinfos.Any(x => x.MaterialName == name))
+                        {
+                            name += WmsMaterialInfoConsts.CloneTag;
+                            continue;
+                        }
+
+                        notExist = true;
+                    }
+
+                    //wmsmaterialinfo = await _wmsmaterialinfoRepository.InsertAsync(wmsmaterialinfo.Clone(GuidGenerator.Create(), name, sort++));
+                    wmsmaterialinfos.Add(wmsmaterialinfo);
+                }
+            }
+        }
+
+        return ObjectMapper.Map<List<WmsMaterialInfo>, List<WmsMaterialInfoDto>>(wmsmaterialinfos);
+    }
+
+    /// <inheritdoc />
+    public virtual Task DeleteAsync(Guid id)
+    {
+        return _wmsmaterialinfoRepository.DeleteAsync(id);
+    }
+
+    /// <inheritdoc />
+    public async Task DeleteManyAsync(IEnumerable<Guid> ids)
+    {
+        foreach (var id in ids)
+        {
+            await DeleteAsync(id);
+        }
+    }
+
+    /// <inheritdoc />
+    public virtual async Task AdjustSortAsync(Guid id, int sort)
+    {
+        var list = await _wmsmaterialinfoRepository.GetListAsync(null,nameof(WmsMaterialInfo.Sort));
+        if (list != null && list.Any())
+        {
+            var initSort = 1;
+            list.ForEach(x => x.AdjustSort(initSort++));
+            var entity = list.FirstOrDefault(x => x.Id == id);
+            if (entity != null)
+            {
+                if (sort == 1)
+                {
+                    list.Where(x => x.Id != id).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
+                }
+                else if (entity.Sort > sort)
+                {
+                    list.Where(x => x.Id != id && x.Sort >= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
+                    list.Where(x => x.Id != id && x.Sort < sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1));
+                }
+                else if (entity.Sort < sort)
+                {
+                    list.Where(x => x.Id != id && x.Sort > sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort + 1));
+                    list.Where(x => x.Id != id && x.Sort <= sort).ToList()?.ForEach(x => x.AdjustSort(x.Sort - 1));
+                }
+
+                entity.AdjustSort(sort);
+            }
+        }
+
+        await _wmsmaterialinfoRepository.UpdateManyAsync(list);
+    }
+
+    /// <inheritdoc />
+    public async Task ImportAsync(WmsMaterialInfosImportModel input)
+    {
+        Check.NotNull(input, nameof(input));
+
+        var wmsmaterialinfoCreateDtos = new List<(int RowIndex, WmsMaterialInfoCreateDto Item)>();
+        var wmsmaterialinfoUpdateDtos = new List<(int RowIndex, Guid Id, WmsMaterialInfoUpdateDto Item)>();
+        var wmsmaterialinfos = input.WmsMaterialInfos;
+
+        if (wmsmaterialinfos != null && wmsmaterialinfos.Any())
+        {
+            #region 瀵煎叆鏍¢獙
+
+            // 鍒ゆ柇鍚嶇О鏄惁閲嶅锛屽苟杈撳嚭绗嚑琛岄噸澶�
+            var duplicateWmsMaterialInfos = wmsmaterialinfos.GroupBy(x => x.MaterialNo).Where(x => x.Count() > 1).ToList();
+            if (duplicateWmsMaterialInfos?.Any() == true)
+            {
+                var duplicateWmsMaterialInfoMsgs = duplicateWmsMaterialInfos.Select(x => $"绗� {string.Join(",", x.Select(x => x.RowIndex))} 琛岋細{x.Key}  鍚嶇О閲嶅");
+                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝 {string.Join(",", duplicateWmsMaterialInfoMsgs)}锛岀粓姝㈠鍏�";
+                throw new UserFriendlyException(errorMsg);
+            }
+
+            #endregion
+
+            foreach (var wmsmaterialinfo in wmsmaterialinfos)
+            {
+                if (wmsmaterialinfo.MaterialNo.IsNullOrWhiteSpace() && wmsmaterialinfo.MaterialNo.IsNullOrWhiteSpace())
+                {
+                    continue;
+                }
+
+                if (wmsmaterialinfo.MaterialNo.IsNullOrWhiteSpace())
+                {
+                    var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊wmsmaterialinfo.RowIndex}琛岋細WmsMaterialInfo鍚嶇О涓嶈兘涓虹┖";
+                    throw new UserFriendlyException(errorMsg);
+                }
+
+                var oldWmsMaterialInfo = await _wmsmaterialinfoRepository.FindByNameAsync(wmsmaterialinfo.MaterialNo);
+                if (oldWmsMaterialInfo != null)
+                {
+                    var wmsmaterialinfoUpdateDto = new WmsMaterialInfoUpdateDto
+                    {
+                        MaterialNo = wmsmaterialinfo.MaterialNo,
+                        MaterialName = wmsmaterialinfo.MaterialName,
+                        MaterialId = wmsmaterialinfo.MaterialId,
+
+                        // 鐗╂枡鐗规��
+                        MaterialModel = wmsmaterialinfo.MaterialModel,
+                        MaterialBatch = wmsmaterialinfo.MaterialBatch,
+                        StockNumber = wmsmaterialinfo.StockNumber,
+
+                        // 渚涘簲鍟嗕俊鎭�
+                        SupplierCode = wmsmaterialinfo.SupplierCode,
+
+                        // 鐘舵�佷俊鎭�
+                        CheckStatus = wmsmaterialinfo.CheckStatus,
+
+                        // 绯荤粺瀛楁
+                        Remark = wmsmaterialinfo.Remark,
+                    };
+
+                    wmsmaterialinfoUpdateDtos.Add((wmsmaterialinfo.RowIndex, oldWmsMaterialInfo.Id, wmsmaterialinfoUpdateDto));
+                }
+                else
+                {
+                    var wmsmaterialinfoCreateDto = new WmsMaterialInfoCreateDto
+                    {
+                        MaterialNo = wmsmaterialinfo.MaterialNo,
+                        MaterialName = wmsmaterialinfo.MaterialName,
+                        MaterialId = wmsmaterialinfo.MaterialId,
+
+                        // 鐗╂枡鐗规��
+                        MaterialModel = wmsmaterialinfo.MaterialModel,
+                        MaterialBatch = wmsmaterialinfo.MaterialBatch,
+                        StockNumber = wmsmaterialinfo.StockNumber,
+
+                        // 渚涘簲鍟嗕俊鎭�
+                        SupplierCode = wmsmaterialinfo.SupplierCode,
+
+                        // 鐘舵�佷俊鎭�
+                        CheckStatus = wmsmaterialinfo.CheckStatus,
+
+                        // 绯荤粺瀛楁
+                        Remark = wmsmaterialinfo.Remark,
+                    };
+
+                    wmsmaterialinfoCreateDtos.Add((wmsmaterialinfo.RowIndex, wmsmaterialinfoCreateDto));
+                }
+            }
+        }
+
+        // 鏂板
+        foreach (var wmsmaterialinfoDto in wmsmaterialinfoCreateDtos)
+        {
+            try
+            {
+                await CreateAsync(wmsmaterialinfoDto.Item);
+            }
+            catch (Exception e)
+            {
+                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊wmsmaterialinfoDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�";
+                throw new UserFriendlyException(errorMsg);
+            }
+        }
+
+        // 鏇存柊
+        foreach (var wmsmaterialinfoDto in wmsmaterialinfoUpdateDtos)
+        {
+            try
+            {
+                await UpdateAsync(wmsmaterialinfoDto.Id, wmsmaterialinfoDto.Item);
+            }
+            catch (Exception e)
+            {
+                var errorMsg = $"瀵煎叆澶辫触锛侀厤缃紝绗瑊wmsmaterialinfoDto.RowIndex}琛岋細{e.Message}锛岀粓姝㈠鍏�";
+                throw new UserFriendlyException(errorMsg);
+            }
+        }
+    }
+
+    /// <inheritdoc />
+    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsMaterialInfosInput input)
+    {
+        Check.NotNull(input, nameof(input));
+
+        if (input.Sorting.IsNullOrWhiteSpace())
+        {
+            input.Sorting = nameof(WmsMaterialInfo.Sort);
+        }
+
+        var specification = new WmsMaterialInfoSpecification(input.Name);
+        var materialInfo = ObjectMapper.Map<GetWmsMaterialInfosInput, WmsMaterialInfo>(input);
+        var list = await _wmsmaterialinfoRepository.GetListAsync(materialInfo,input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification, includeDetails: true);
+        var result = ObjectMapper.Map<List<WmsMaterialInfo>, List<WmsMaterialInfoDto>>(list);
+
+        var sheets = new Dictionary<string, object>
+        {
+            ["閰嶇疆"] = result.Select(x => x.GetExportData()).ToList(),
+        };
+
+        var fileName = result.Count > 1 ? "WmsMaterialInfo鍒楄〃" : result.Count == 1 ? result.First()?.MaterialNo : "WmsMaterialInfo妯$増";
+        return (sheets, fileName);
+    }
+
+    /// <summary>
+    /// Checks the create or update dto asynchronous.
+    /// </summary>
+    /// <param name="input">The input.</param>
+    protected Task CheckCreateOrUpdateDtoAsync(WmsMaterialInfoCreateOrUpdateDtoBase input)
+    {
+        Check.NotNull(input, nameof(input));
+        Check.NotNullOrWhiteSpace(input.MaterialNo, "缂栧彿", WmsMaterialInfoConsts.MaxMaterialIdLength);
+        Check.NotNullOrWhiteSpace(input.MaterialName, "鍚嶇О", WmsMaterialInfoConsts.MaxMaterialIdLength);
+        Check.Length(input.Remark, "澶囨敞", WmsMaterialInfoConsts.MaxRemarkLength);
+        return Task.CompletedTask;
+    }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs
index 6b88e6a..4f3b9ee 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs
@@ -8,6 +8,10 @@
 using Volo.Abp.Data;
 using Volo.Abp.ObjectExtending;
 using CMS.Plugin.HIAWms.Domain.Shared.Util;
+using CMS.Plugin.HIAWms.Domain.WmsMaterials;
+using CMS.Plugin.HIAWms.Domain.WmsContainers;
+using CMS.Plugin.HIAWms.Domain.WmsPlaces;
+using CMS.Plugin.HIAWms.Domain.WmsAreas;
 
 namespace CMS.Plugin.HIAWms.Application.Implements;
 
@@ -15,14 +19,27 @@
 public class WmsMaterialStockAppService : CMSPluginAppService, IWmsMaterialStockAppService
 {
     private readonly IWmsMaterialStockRepository _wmsmaterialstockRepository;
+    private readonly IWmsMaterialRepository _wmsMaterialRepository;
+    private readonly IWmsContainerRepository _wmscontainerRepository;
+    private readonly IWmsPlaceRepository _wmsplaceRepository;
+    private readonly IWmsAreaRepository _wmsareaRepository;
 
     /// <summary>
     /// Initializes a new instance of the <see cref="WmsMaterialStockAppService"/> class.
     /// </summary>
     /// <param name="wmsmaterialstockRepository">The task job repository.</param>
-    public WmsMaterialStockAppService(IWmsMaterialStockRepository wmsmaterialstockRepository)
+    public WmsMaterialStockAppService(IWmsMaterialStockRepository wmsmaterialstockRepository, 
+        IWmsMaterialRepository wmsMaterialRepository, 
+        IWmsContainerRepository wmscontainerRepository, 
+        IWmsPlaceRepository wmsplaceRepository, 
+        IWmsAreaRepository wmsareaRepository
+        )
     {
         _wmsmaterialstockRepository = wmsmaterialstockRepository;
+        _wmsMaterialRepository = wmsMaterialRepository;
+        _wmscontainerRepository = wmscontainerRepository;
+        _wmsplaceRepository = wmsplaceRepository;
+        _wmsareaRepository = wmsareaRepository;
     }
 
     /// <inheritdoc />
@@ -54,19 +71,60 @@
     {
         await CheckCreateOrUpdateDtoAsync(input);
 
-        var exist = await _wmsmaterialstockRepository.NameExistAsync(input.MaterialNo);
-        if (exist)
+        //var exist = await _wmsmaterialstockRepository.NameExistAsync(input.MaterialNo);
+        //if (exist)
+        //{
+        //    throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialNo]);
+        //}
+        var material = await _wmsMaterialRepository.FindByNameAsync(input.MaterialNo);
+        if(material == null)
         {
-            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialNo]);
+            throw new UserFriendlyException("鐗╂枡淇℃伅涓嶅瓨鍦�");
         }
-
+        var container = await _wmscontainerRepository.FindByNameAsync(input.ContainerNo); 
+        if (container == null)
+        {
+            throw new UserFriendlyException("鎵樼洏淇℃伅涓嶅瓨鍦�");
+        }
+        var place = await _wmsplaceRepository.FindByNameAsync(input.PlaceNo);
+        if(place == null)
+        {
+            throw new UserFriendlyException("搴撲綅淇℃伅涓嶅瓨鍦�");
+        }
+        var area = await _wmsareaRepository.FindByNameAsync(place.AreaCode);
+        if(area == null)
+        {
+            throw new UserFriendlyException("搴撲綅搴撳尯淇℃伅涓嶅瓨鍦�");
+        }
         var maxSort = await _wmsmaterialstockRepository.GetMaxSortAsync();
         var sort = input.Sort ?? maxSort;
         var wmsmaterialstock = ObjectMapper.Map<WmsMaterialStockCreateDto, WmsMaterialStock>(input);
         input.MapExtraPropertiesTo(wmsmaterialstock, MappingPropertyDefinitionChecks.None);
+        wmsmaterialstock.MaterialId = Guid.NewGuid().ToString("N");
+        material.MaterialName = material.MaterialName;
+
+        wmsmaterialstock.ContainerStatus = Domain.Shared.Enums.ContainerStatusEnum.KUWEI;
+        wmsmaterialstock.ContainerType = container.ContainerType;
+
+        wmsmaterialstock.PlaceStatus = Domain.Shared.Enums.PlaceStatusEnum.CUNHUO;
+        wmsmaterialstock.StorageTypeNo = place.StorageTypeNo;
+        wmsmaterialstock.AreaCode = place.AreaCode;
+        wmsmaterialstock.AreaName = area.AreaName;
+
+        wmsmaterialstock.MaterialModel = material.MaterialModel;
+        wmsmaterialstock.MaterialBatch = input.MaterialBatch;
+
         wmsmaterialstock.Sort = sort;
         wmsmaterialstock.InStockTime = DateTime.Now;
         await _wmsmaterialstockRepository.InsertAsync(wmsmaterialstock);
+
+
+        container.ContainerStatus = Domain.Shared.Enums.ContainerStatusEnum.KUWEI;
+        place.PlaceStatus = Domain.Shared.Enums.PlaceStatusEnum.CUNHUO;
+        place.Islock = input.IsLock;
+
+        await _wmscontainerRepository.UpdateAsync(container);
+        await _wmsplaceRepository.UpdateAsync(place);
 
         if (input.Sort.HasValue && wmsmaterialstock.Sort != maxSort)
         {
@@ -82,35 +140,62 @@
         await CheckCreateOrUpdateDtoAsync(input);
 
         var wmsmaterialstock = await _wmsmaterialstockRepository.GetAsync(id);
-        var exist = await _wmsmaterialstockRepository.NameExistAsync(input.MaterialNo, wmsmaterialstock.Id);
-        if (exist)
+        //var exist = await _wmsmaterialstockRepository.NameExistAsync(input.MaterialNo, wmsmaterialstock.Id);
+        //if (exist)
+        //{
+        //    throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialNo]);
+        //}
+        var material = await _wmsMaterialRepository.FindByNameAsync(input.MaterialNo);
+        if (material == null)
         {
-            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialNo]);
+            throw new UserFriendlyException("鐗╂枡淇℃伅涓嶅瓨鍦�");
         }
-
+        var container = await _wmscontainerRepository.FindByNameAsync(input.ContainerNo);
+        if (container == null)
+        {
+            throw new UserFriendlyException("鎵樼洏淇℃伅涓嶅瓨鍦�");
+        }
+        var place = await _wmsplaceRepository.FindByNameAsync(input.PlaceNo);
+        if (place == null)
+        {
+            throw new UserFriendlyException("搴撲綅淇℃伅涓嶅瓨鍦�");
+        }
+        var area = await _wmsareaRepository.FindByNameAsync(place.AreaCode);
+        if (area == null)
+        {
+            throw new UserFriendlyException("搴撲綅搴撳尯淇℃伅涓嶅瓨鍦�");
+        }
         wmsmaterialstock.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
         input.MapExtraPropertiesTo(wmsmaterialstock, MappingPropertyDefinitionChecks.None);
-
         wmsmaterialstock.MaterialNo = input.MaterialNo;
-        wmsmaterialstock.MaterialName = input.MaterialName;
         wmsmaterialstock.ContainerNo = input.ContainerNo;
-        wmsmaterialstock.ContainerStatus = input.ContainerStatus;
-        wmsmaterialstock.ContainerType = input.ContainerType;
         wmsmaterialstock.StockNumber = input.StockNumber;
-        wmsmaterialstock.MaterialBatch = input.MaterialBatch;
-        wmsmaterialstock.SupplierCode = input.SupplierCode;
-        wmsmaterialstock.MaterialModel = input.MaterialModel;
         wmsmaterialstock.PlaceNo = input.PlaceNo;
-        wmsmaterialstock.PlaceStatus = input.PlaceStatus;
-        wmsmaterialstock.StorageTypeNo = input.StorageTypeNo;
-        wmsmaterialstock.AreaCode = input.AreaCode;
-        wmsmaterialstock.AreaName = input.AreaName;
         wmsmaterialstock.IsLock = input.IsLock;
         wmsmaterialstock.InStockTime = input.InStockTime;
         wmsmaterialstock.Remark = input.Remark;
 
+        wmsmaterialstock.MaterialName = material.MaterialName;
+        wmsmaterialstock.ContainerStatus = Domain.Shared.Enums.ContainerStatusEnum.KUWEI;
+        wmsmaterialstock.ContainerType = container.ContainerType;
+
+        wmsmaterialstock.PlaceStatus = Domain.Shared.Enums.PlaceStatusEnum.CUNHUO;
+        wmsmaterialstock.StorageTypeNo = place.StorageTypeNo;
+        wmsmaterialstock.AreaCode = place.AreaCode;
+        wmsmaterialstock.AreaName = area.AreaName;
+
+        wmsmaterialstock.MaterialModel = material.MaterialModel;
+        wmsmaterialstock.MaterialBatch = input.MaterialBatch;
+
         await _wmsmaterialstockRepository.UpdateAsync(wmsmaterialstock);
 
+        container.ContainerStatus = Domain.Shared.Enums.ContainerStatusEnum.KUWEI;
+        place.PlaceStatus = Domain.Shared.Enums.PlaceStatusEnum.CUNHUO;
+        place.Islock = input.IsLock;
+
+        await _wmscontainerRepository.UpdateAsync(container);
+        await _wmsplaceRepository.UpdateAsync(place);
+
         return ObjectMapper.Map<WmsMaterialStock, WmsMaterialStockDto>(wmsmaterialstock);
     }
 
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsPlaceAppService.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsPlaceAppService.cs
index 8d3b362..8c94ab0 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsPlaceAppService.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsPlaceAppService.cs
@@ -32,7 +32,7 @@
     }
 
     /// <inheritdoc />
-    public virtual async Task<PagedResultDto<WmsPlaceDto>> GetListAsync(GetWmsPlacesInput input)
+    public virtual async Task<PagedResultDto<WmsPlaceDto>> GetListAsync(GetWmsMaterialInfoInput input)
     {
         Check.NotNull(input, nameof(input));
 
@@ -42,7 +42,7 @@
         }
 
         var specification = new WmsPlaceSpecification(input.Name);
-        var place = ObjectMapper.Map<GetWmsPlacesInput, WmsPlace>(input);
+        var place = ObjectMapper.Map<GetWmsMaterialInfoInput, WmsPlace>(input);
         var count = await _wmsplaceRepository.GetCountAsync(place,input.Filter, specification);
         var list = await _wmsplaceRepository.GetListAsync(place, input.Sorting, input.MaxResultCount,  input.SkipCount, input.Filter, specification);
 
@@ -285,7 +285,7 @@
     }
 
     /// <inheritdoc />
-    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsPlacesInput input)
+    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsMaterialInfoInput input)
     {
         Check.NotNull(input, nameof(input));
 
@@ -295,7 +295,7 @@
         }
 
         var specification = new WmsPlaceSpecification(input.Name);
-        var place = ObjectMapper.Map<GetWmsPlacesInput, WmsPlace>(input);
+        var place = ObjectMapper.Map<GetWmsMaterialInfoInput, WmsPlace>(input);
         var list = await _wmsplaceRepository.GetListAsync(place, input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification, includeDetails: true);
         var result = ObjectMapper.Map<List<WmsPlace>, List<WmsPlaceDto>>(list);
 
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsMaterialInfoAutoMapperProfile.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsMaterialInfoAutoMapperProfile.cs
new file mode 100644
index 0000000..3c94602
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsMaterialInfoAutoMapperProfile.cs
@@ -0,0 +1,28 @@
+using AutoMapper;
+using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialInfos;
+using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlaces;
+using CMS.Plugin.HIAWms.Domain.WmsMaterialInfos;
+using CMS.Plugin.HIAWms.Domain.WmsPlaces;
+using Volo.Abp.ObjectExtending;
+
+namespace CMS.Plugin.HIAWms.Application.MapperProfiles;
+
+/// <summary>
+/// AutoMapper閰嶇疆
+/// </summary>
+/// <seealso cref="AutoMapper.Profile" />
+public class WmsMaterialInfoAutoMapperProfile : Profile
+{
+    /// <summary>
+    /// Initializes a new instance of the <see cref="WmsMaterialInfoAutoMapperProfile"/> class.
+    /// </summary>
+    public WmsMaterialInfoAutoMapperProfile()
+    {
+        /* You can configure your AutoMapper mapping configuration here.
+         * Alternatively, you can split your mapping configurations
+         * into multiple profile classes for a better organization. */
+        CreateMap<WmsMaterialInfo, WmsMaterialInfoDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
+        CreateMap<WmsMaterialInfoCreateDto, WmsMaterialInfo>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
+        CreateMap<GetWmsMaterialInfoInput, WmsMaterialInfo>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
+    }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsPlaceAutoMapperProfile.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsPlaceAutoMapperProfile.cs
index f58553d..85c14d0 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsPlaceAutoMapperProfile.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsPlaceAutoMapperProfile.cs
@@ -21,6 +21,6 @@
          * into multiple profile classes for a better organization. */
         CreateMap<WmsPlace, WmsPlaceDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
         CreateMap<WmsPlaceCreateDto, WmsPlace>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
-        CreateMap<GetWmsPlacesInput, WmsPlace>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
+        CreateMap<GetWmsMaterialInfoInput, WmsPlace>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
     }
 }
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/MaterialCheckStatusEnum.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/MaterialCheckStatusEnum.cs
new file mode 100644
index 0000000..0d9125d
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/MaterialCheckStatusEnum.cs
@@ -0,0 +1,35 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CMS.Plugin.HIAWms.Domain.Shared.Enums
+{
+    /// <summary>
+    /// 搴撳瓨鐗╂枡鐨勬楠岀姸鎬�
+    /// </summary>
+    [Description("搴撳瓨鐗╂枡鐨勬楠岀姸鎬�")]
+    public enum MaterialCheckStatusEnum
+    {
+        /// <summary>
+        /// 鏈楠�
+        /// </summary>
+        [Description("鏈楠�")]
+        WEIJIANYAN = 1,
+
+        /// <summary>
+        /// 鍚堟牸
+        /// </summary>
+        [Description("鍚堟牸")]
+        HEGE = 2,
+
+        /// <summary>
+        /// 涓嶅悎鏍�
+        /// </summary>
+        [Description("涓嶅悎鏍�")]
+        BUHEGE = 3,
+
+    }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/WmsMaterialInfos/WmsMaterialInfoConsts.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/WmsMaterialInfos/WmsMaterialInfoConsts.cs
new file mode 100644
index 0000000..a7bdf8e
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/WmsMaterialInfos/WmsMaterialInfoConsts.cs
@@ -0,0 +1,17 @@
+namespace CMS.Plugin.HIAWms.Domain.Shared.WmsMaterialInfos;
+
+/// <summary>
+/// WmsMaterialInfo甯搁噺瀹氫箟
+/// </summary>
+public static class WmsMaterialInfoConsts
+{
+    public const string CloneTag = "_鍓湰";
+    public const int MaxMaterialNoLength = 50;
+    public const int MaxMaterialNameLength = 100;
+    public const int MaxMaterialModelLength = 50;
+    public const int MaxMaterialIdLength = 64;
+    public const int MaxMaterialBatchLength = 50;
+    public const int MaxSupplierCodeLength = 50;
+    public const int MaxRedundantFieldLength = 255;
+    public const int MaxRemarkLength = 500;
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/WmsMaterialInfos/WmsMaterialInfoEto.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/WmsMaterialInfos/WmsMaterialInfoEto.cs
new file mode 100644
index 0000000..0757427
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/WmsMaterialInfos/WmsMaterialInfoEto.cs
@@ -0,0 +1,22 @@
+namespace CMS.Plugin.HIAWms.Domain.Shared.WmsMaterialInfos;
+
+/// <summary>
+/// WmsMaterialInfo浜嬩欢鍙傛暟瀵硅薄
+/// </summary>
+[Serializable]
+public class WmsMaterialInfoEto
+{
+    /// <summary>
+    /// Initializes a new instance of the <see cref="WmsMaterialInfoEto"/> class.
+    /// </summary>
+    /// <param name="name">The name.</param>
+    public WmsMaterialInfoEto(string name)
+    {
+        Name = name;
+    }
+
+    /// <summary>
+    /// 鍚嶇О
+    /// </summary>
+    public string Name { get; }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/EventHandlers/WmsMaterialInfoEventHandler.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/EventHandlers/WmsMaterialInfoEventHandler.cs
new file mode 100644
index 0000000..a8efffc
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/EventHandlers/WmsMaterialInfoEventHandler.cs
@@ -0,0 +1,17 @@
+using CMS.Plugin.HIAWms.Domain.Shared.WmsMaterialInfos;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.EventBus.Distributed;
+
+namespace CMS.Plugin.HIAWms.Domain.EventHandlers;
+
+/// <summary>
+/// WmsMaterialInfo浜嬩欢澶勭悊绋嬪簭
+/// </summary>
+public class WmsMaterialInfoEventHandler : IDistributedEventHandler<WmsMaterialInfoEto>, ITransientDependency
+{
+    /// <inheritdoc />
+    public Task HandleEventAsync(WmsMaterialInfoEto eventData)
+    {
+        return Task.CompletedTask;
+    }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialInfos/IWmsMaterialInfoRepository.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialInfos/IWmsMaterialInfoRepository.cs
new file mode 100644
index 0000000..d3f08ec
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialInfos/IWmsMaterialInfoRepository.cs
@@ -0,0 +1,54 @@
+using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Specifications;
+
+namespace CMS.Plugin.HIAWms.Domain.WmsMaterialInfos;
+
+/// <summary>
+/// WmsMaterialInfo浠撳偍
+/// </summary>
+public interface IWmsMaterialInfoRepository : IBasicRepository<WmsMaterialInfo, Guid>
+{
+    /// <summary>
+    /// Finds the by name asynchronous.
+    /// </summary>
+    /// <param name="name">The name.</param>
+    /// <param name="cancellationToken">The cancellation token.</param>
+    /// <returns></returns>
+    Task<WmsMaterialInfo> FindByNameAsync(string name, CancellationToken cancellationToken = default);
+
+    /// <summary>
+    /// Names the exist asynchronous.
+    /// </summary>
+    /// <param name="name">The name.</param>
+    /// <param name="id">The identifier.</param>
+    /// <returns></returns>
+    Task<bool> NameExistAsync(string name, Guid? id = null);
+
+    /// <summary>
+    /// Gets the maximum sort asynchronous.
+    /// </summary>
+    /// <returns></returns>
+    Task<int> GetMaxSortAsync();
+
+    /// <summary>
+    /// Gets the list asynchronous.
+    /// </summary>
+    /// <param name="sorting">The sorting.</param>
+    /// <param name="maxResultCount">The maximum result count.</param>
+    /// <param name="skipCount">The skip count.</param>
+    /// <param name="filter">The filter.</param>
+    /// <param name="specification">The specification.</param>
+    /// <param name="includeDetails">if set to <c>true</c> [include details].</param>
+    /// <param name="cancellationToken">The cancellation token.</param>
+    /// <returns></returns>
+    Task<List<WmsMaterialInfo>> GetListAsync(WmsMaterialInfo? materialInfo, string sorting = null, int maxResultCount = int.MaxValue,  int skipCount = 0, string filter = null, Specification<WmsMaterialInfo> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default);
+
+    /// <summary>
+    /// Gets the count asynchronous.
+    /// </summary>
+    /// <param name="filter">The filter.</param>
+    /// <param name="specification">The specification.</param>
+    /// <param name="cancellationToken">The cancellation token.</param>
+    /// <returns></returns>
+    Task<long> GetCountAsync(WmsMaterialInfo? materialInfo, string filter = null, Specification<WmsMaterialInfo> specification = null, CancellationToken cancellationToken = default);
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialInfos/WmsMaterialInfo.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialInfos/WmsMaterialInfo.cs
new file mode 100644
index 0000000..57fa045
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialInfos/WmsMaterialInfo.cs
@@ -0,0 +1,92 @@
+using CMS.Plugin.HIAWms.Domain.Shared.Enums;
+using CMS.Plugin.HIAWms.Domain.Shared.WmsMaterialInfos;
+using Volo.Abp;
+using Volo.Abp.Domain.Entities.Auditing;
+
+namespace CMS.Plugin.HIAWms.Domain.WmsMaterialInfos
+{
+    /// <summary>
+    /// WmsMaterialInfo
+    /// </summary>
+    public class WmsMaterialInfo : FullAuditedAggregateRoot<Guid>
+    {
+        /// <summary>
+        /// 鐗╂枡浠e彿
+        /// </summary>
+        public string MaterialNo { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        public string MaterialName { get; set; }
+
+        /// <summary>
+        /// 鏈哄瀷
+        /// </summary>
+        public string? MaterialModel { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鍞竴鐮�
+        /// </summary>
+        public string MaterialId { get; set; }
+
+        /// <summary>
+        /// 鏁伴噺
+        /// </summary>
+        public int? StockNumber { get; set; }
+
+        /// <summary>
+        /// 鐗╂枡鎵瑰彿
+        /// </summary>
+        public string? MaterialBatch { get; set; }
+
+        /// <summary>
+        /// 渚涘簲鍟嗙紪鍙�
+        /// </summary>
+        public string? SupplierCode { get; set; }
+
+        /// <summary>
+        /// 妫�楠岀姸鎬�
+        /// </summary>
+        public MaterialCheckStatusEnum? CheckStatus { get; set; }
+
+        /// <summary>
+        /// 鍐椾綑瀛楁1 - 棰勭暀鎵╁睍鐢ㄩ��
+        /// </summary>
+        public string RedundantField1 { get; set; }
+
+        /// <summary>
+        /// 鍐椾綑瀛楁2 - 棰勭暀鎵╁睍鐢ㄩ��
+        /// </summary>
+        public string RedundantField2 { get; set; }
+
+        /// <summary>
+        /// 鍐椾綑瀛楁3 - 棰勭暀鎵╁睍鐢ㄩ��
+        /// </summary>
+        public string RedundantField3 { get; set; }
+        /// <summary>
+        /// 鎺掑簭
+        /// </summary>
+        public virtual int Sort { get;  set; }
+
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        public virtual string Remark { get;  set; }
+
+        /// <summary>
+        /// 鏄惁绂佺敤
+        /// </summary>
+        public virtual bool? IsDisabled { get;  set; }
+
+        /// <summary>
+        /// Adjusts the sort.
+        /// </summary>
+        /// <param name="sort">The sort.</param>
+        public void AdjustSort(int sort)
+        {
+            Sort = sort;
+        }
+
+    }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialInfos/WmsMaterialInfoDataSeedContributor.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialInfos/WmsMaterialInfoDataSeedContributor.cs
new file mode 100644
index 0000000..825721c
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialInfos/WmsMaterialInfoDataSeedContributor.cs
@@ -0,0 +1,67 @@
+using Volo.Abp.Data;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Guids;
+using Volo.Abp.Uow;
+
+namespace CMS.Plugin.HIAWms.Domain.WmsMaterialInfos
+{
+    /// <summary>
+    /// WmsMaterialInfo绉嶅瓙鏁版嵁鎻愪緵绋嬪簭
+    /// </summary>
+    public class WmsMaterialInfoDataSeedContributor : IDataSeedContributor, ITransientDependency
+    {
+        private readonly IUnitOfWorkManager _unitOfWorkManager;
+        private readonly IWmsMaterialInfoRepository _wmsmaterialinfoRepository;
+        private readonly IGuidGenerator _guidGenerator;
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="WmsMaterialInfoDataSeedContributor"/> class.
+        /// </summary>
+        /// <param name="unitOfWorkManager">The unit of work manager.</param>
+        /// <param name="guidGenerator">The unique identifier generator.</param>
+        /// <param name="wmsmaterialinfoRepository">The work section repository.</param>
+        public WmsMaterialInfoDataSeedContributor(IUnitOfWorkManager unitOfWorkManager,  IGuidGenerator guidGenerator, IWmsMaterialInfoRepository wmsmaterialinfoRepository)
+        {
+            _unitOfWorkManager = unitOfWorkManager;
+            _wmsmaterialinfoRepository = wmsmaterialinfoRepository;
+            _guidGenerator = guidGenerator;
+        }
+
+        /// <inheritdoc />
+        public async Task SeedAsync(DataSeedContext context)
+        {
+            if (context.Properties.ContainsKey(CMSPluginDbProperties.ConnectionStringName) && context.Properties[CMSPluginDbProperties.ConnectionStringName]?.ToString() == CMSPluginDbProperties.ConnectionStringName)
+            {
+                try
+                {
+                    //using var unitofWork = _unitOfWorkManager.Begin(requiresNew: true);
+                    //await unitofWork.SaveChangesAsync();
+                }
+                catch (Exception ex)
+                {
+                    Console.WriteLine(ex.Message);
+                }
+            }
+
+            if (context.Properties.ContainsKey("SeedTestData") && context.Properties["SeedTestData"]?.ToString() == "SeedTestData")
+            {
+                try
+                {
+                    await SeedWmsMaterialInfoDataAsync();
+                }
+                catch (Exception e)
+                {
+                    Console.WriteLine(e.Message);
+                }
+            }
+        }
+
+        /// <summary>
+        /// Seeds the work section data asynchronous.
+        /// </summary>
+        private async Task SeedWmsMaterialInfoDataAsync()
+        {
+          
+        }
+    }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialInfos/WmsMaterialInfoSpecification.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialInfos/WmsMaterialInfoSpecification.cs
new file mode 100644
index 0000000..672c877
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialInfos/WmsMaterialInfoSpecification.cs
@@ -0,0 +1,41 @@
+using System.Linq.Expressions;
+
+namespace CMS.Plugin.HIAWms.Domain.WmsMaterialInfos
+{
+    /// <summary>
+    /// WmsMaterialInfo瑙勭害
+    /// </summary>
+    public class WmsMaterialInfoSpecification : Volo.Abp.Specifications.Specification<WmsMaterialInfo>
+    {
+        private readonly string _materialNo;
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="WmsMaterialInfoSpecification"/> class.
+        /// </summary>
+        public WmsMaterialInfoSpecification()
+        {
+        }
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="WmsMaterialInfoSpecification"/> class.
+        /// </summary>
+        /// <param name="materialNo">The name.</param>
+        public WmsMaterialInfoSpecification(string materialNo = null)
+        {
+            _materialNo = materialNo;
+        }
+
+        /// <inheritdoc />
+        public override Expression<Func<WmsMaterialInfo, bool>> ToExpression()
+        {
+            Expression<Func<WmsMaterialInfo, bool>> expression = c => 1 == 1;
+
+            if (_materialNo != null)
+            {
+                expression = expression.And(c => c.MaterialNo == _materialNo);
+            }
+
+            return expression;
+        }
+    }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialStocks/WmsMaterialStock.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialStocks/WmsMaterialStock.cs
index 1b3279e..dc2982c 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialStocks/WmsMaterialStock.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialStocks/WmsMaterialStock.cs
@@ -87,14 +87,19 @@
         public string AreaName { get; set; }
 
         /// <summary>
+        /// 妫�楠岀姸鎬�
+        /// </summary>
+        public MaterialCheckStatusEnum? CheckStatus { get; set; }
+
+        /// <summary>
         /// 鏄惁閿佸畾
         /// </summary>
-        public int IsLock { get; set; }
+        public YesNoEnum IsLock { get; set; }
 
         /// <summary>
         /// 鏄惁绌烘墭
         /// </summary>
-        public YesNoEnum EmptyContainer { get; protected set; }
+        public YesNoEnum EmptyContainer { get; set; }
 
         /// <summary>
         /// 鍏ュ簱鏃堕棿
@@ -111,6 +116,22 @@
         /// </summary>
         public virtual string Remark { get; set; }
 
+
+        /// <summary>
+        /// 鍐椾綑瀛楁1 - 棰勭暀鎵╁睍鐢ㄩ��
+        /// </summary>
+        public string RedundantField1 { get; set; }
+
+        /// <summary>
+        /// 鍐椾綑瀛楁2 - 棰勭暀鎵╁睍鐢ㄩ��
+        /// </summary>
+        public string RedundantField2 { get; set; }
+
+        /// <summary>
+        /// 鍐椾綑瀛楁3 - 棰勭暀鎵╁睍鐢ㄩ��
+        /// </summary>
+        public string RedundantField3 { get; set; }
+
         /// <summary>
         /// 鏄惁绂佺敤
         /// </summary>
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterials/WmsMaterial.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterials/WmsMaterial.cs
index 4b9d049..2ffc4ca 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterials/WmsMaterial.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterials/WmsMaterial.cs
@@ -21,6 +21,12 @@
         /// </summary>
         public string MaterialName { get; set; }
 
+
+        /// <summary>
+        /// 鍨嬪彿
+        /// </summary>
+        public string MaterialModel { get; set; }
+
         /// <summary>
         /// 閲囪喘绫诲瀷锛堟灇涓惧�硷級
         /// </summary>
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterial.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterial.cs
index f04c91b..7bce03b 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterial.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterial.cs
@@ -101,6 +101,9 @@
             b.Property(x => x.Certification)
                 .HasMaxLength(128)
                 .HasComment("璇佷功缂栧彿");
+            b.Property(x => x.MaterialModel)
+                .HasMaxLength(128)
+                .HasComment("鍨嬪彿");
 
             // 鍐椾綑瀛楁閰嶇疆
             b.Property(x => x.RedundantField1)
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterialInfo.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterialInfo.cs
new file mode 100644
index 0000000..a65cb63
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterialInfo.cs
@@ -0,0 +1,120 @@
+using CMS.Plugin.HIAWms.Domain;
+using CMS.Plugin.HIAWms.Domain.WmsMaterialInfos;
+using CMS.Plugin.HIAWms.Domain.Shared.WmsMaterialInfos;
+using Microsoft.EntityFrameworkCore;
+using Volo.Abp;
+using Volo.Abp.EntityFrameworkCore.Modeling;
+
+namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
+
+/// <summary>
+/// EfCore鎵╁睍
+/// </summary>
+public  static partial class CMSPluginEfCoreExtensions
+{
+    /// <summary>
+    /// Includes the details.
+    /// </summary>
+    /// <param name="queryable">The queryable.</param>
+    /// <param name="include">if set to <c>true</c> [include].</param>
+    /// <returns></returns>
+    public static IQueryable<WmsMaterialInfo> IncludeDetails(this IQueryable<WmsMaterialInfo> queryable, bool include = true)
+    {
+        if (!include)
+        {
+            return queryable;
+        }
+
+        return queryable;
+    }
+
+    /// <summary>
+    /// Configures the wmsmaterialinfo.
+    /// </summary>
+    /// <param name="builder">The builder.</param>
+    public static void ConfigureWmsMaterialInfo(this ModelBuilder builder)
+    {
+        Check.NotNull(builder, nameof(builder));
+
+        builder.Entity<WmsMaterialInfo>(b =>
+        {
+            // 閰嶇疆琛ㄥ拰鏋舵瀯鍚嶇О
+            b.ToTable((CMSPluginDbProperties.DbTablePrefix + "_WmsMaterialInfos").ToLower(),
+                     CMSPluginDbProperties.DbSchema)
+             .HasComment("WMS鐗╂枡淇℃伅琛�");
+
+            b.ConfigureByConvention();
+
+            // 涓婚敭閰嶇疆
+            b.HasKey(x => x.Id);
+
+            // 灞炴�ч厤缃�
+            b.Property(x => x.MaterialNo)
+                .HasMaxLength(WmsMaterialInfoConsts.MaxMaterialNoLength)
+                .IsRequired()
+                .HasComment("鐗╂枡浠e彿");
+
+            b.Property(x => x.MaterialName)
+                .HasMaxLength(WmsMaterialInfoConsts.MaxMaterialNameLength)
+                .IsRequired()
+                .HasComment("鐗╂枡鍚嶇О");
+
+            b.Property(x => x.MaterialModel)
+                .HasMaxLength(WmsMaterialInfoConsts.MaxMaterialModelLength)
+                .HasComment("鏈哄瀷/瑙勬牸");
+
+            b.Property(x => x.MaterialId)
+                .HasMaxLength(WmsMaterialInfoConsts.MaxMaterialIdLength)
+                .IsRequired()
+                .HasComment("鐗╂枡鍞竴鐮�");
+
+            b.Property(x => x.StockNumber)
+                .HasComment("搴撳瓨鏁伴噺");
+
+            b.Property(x => x.MaterialBatch)
+                .HasMaxLength(WmsMaterialInfoConsts.MaxMaterialBatchLength)
+                .HasComment("鐗╂枡鎵瑰彿");
+
+            b.Property(x => x.SupplierCode)
+                .HasMaxLength(WmsMaterialInfoConsts.MaxSupplierCodeLength)
+                .HasComment("渚涘簲鍟嗙紪鍙�");
+
+            b.Property(x => x.CheckStatus)
+                .HasComment("妫�楠岀姸鎬�(0:鏈楠�,1:妫�楠岄�氳繃,2:妫�楠屼笉閫氳繃)");
+
+            b.Property(x => x.RedundantField1)
+                .HasMaxLength(WmsMaterialInfoConsts.MaxRedundantFieldLength)
+                .HasComment("鍐椾綑瀛楁1");
+
+            b.Property(x => x.RedundantField2)
+                .HasMaxLength(WmsMaterialInfoConsts.MaxRedundantFieldLength)
+                .HasComment("鍐椾綑瀛楁2");
+
+            b.Property(x => x.RedundantField3)
+                .HasMaxLength(WmsMaterialInfoConsts.MaxRedundantFieldLength)
+                .HasComment("鍐椾綑瀛楁3");
+
+            b.Property(x => x.Sort)
+                .HasDefaultValue(0)
+                .HasComment("鎺掑簭");
+
+            b.Property(x => x.Remark)
+                .HasMaxLength(WmsMaterialInfoConsts.MaxRemarkLength)
+                .HasComment("澶囨敞");
+
+            b.Property(x => x.IsDisabled)
+                .HasComment("鏄惁绂佺敤");
+
+            // 绱㈠紩閰嶇疆
+            b.HasIndex(x => x.MaterialNo).IsUnique();
+            b.HasIndex(x => x.MaterialName);
+            b.HasIndex(x => x.MaterialId).IsUnique();
+            b.HasIndex(x => x.MaterialBatch);
+            b.HasIndex(x => x.SupplierCode);
+            b.HasIndex(x => x.CheckStatus);
+
+            // 鎵╁睍灞炴�ч厤缃�
+            b.ApplyObjectExtensionMappings();
+        });
+    }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterialStock.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterialStock.cs
index d178432..cb7f889 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterialStock.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterialStock.cs
@@ -123,6 +123,25 @@
                 .HasMaxLength(500)
                 .HasComment("澶囨敞");
 
+            b.Property(x => x.CheckStatus)
+                .HasComment("妫�楠岀姸鎬�(1:鏈楠�,2:妫�楠岄�氳繃,3:妫�楠屼笉閫氳繃)");
+
+            // 鍐椾綑瀛楁閰嶇疆
+            b.Property(x => x.RedundantField1)
+                .HasMaxLength(256)
+                .IsRequired(false)
+                .HasComment("鍐椾綑瀛楁1 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+            b.Property(x => x.RedundantField2)
+                .HasMaxLength(256)
+                .IsRequired(false)
+                .HasComment("鍐椾綑瀛楁2 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+            b.Property(x => x.RedundantField3)
+                .HasMaxLength(256)
+                .IsRequired(false)
+                .HasComment("鍐椾綑瀛楁3 - 棰勭暀鎵╁睍鐢ㄩ��");
+
             b.Property(x => x.IsDisabled)
                 .HasComment("鏄惁绂佺敤");
 
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsAreaRepository.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsAreaRepository.cs
index 64d4d26..3f3a094 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsAreaRepository.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsAreaRepository.cs
@@ -24,15 +24,14 @@
     }
 
     /// <inheritdoc />
-    public virtual async Task<WmsArea> FindByNameAsync(string name, CancellationToken cancellationToken = default)
+    public virtual async Task<WmsArea> FindByNameAsync(string areaNo, CancellationToken cancellationToken = default)
     {
         return await (await GetDbSetAsync())
             .IncludeDetails()
             .OrderBy(t => t.Sort)
             .Where(x => !x.IsDeleted)
-            .FirstOrDefaultAsync(t => t.AreaName == name, GetCancellationToken(cancellationToken));
+            .FirstOrDefaultAsync(t => t.AreaNo == areaNo, GetCancellationToken(cancellationToken));
     }
-
 
     /// <summary>
     /// 查看库区是否存在
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialInfoRepository.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialInfoRepository.cs
new file mode 100644
index 0000000..ae965d9
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialInfoRepository.cs
@@ -0,0 +1,100 @@
+using System.Linq.Dynamic.Core;
+using CMS.Plugin.HIAWms.Domain.WmsMaterialInfos;
+using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
+using MathNet.Numerics;
+using Microsoft.EntityFrameworkCore;
+using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
+using Volo.Abp.EntityFrameworkCore;
+using Volo.Abp.Specifications;
+
+namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Repositories;
+
+/// <inheritdoc />
+public class EfCoreWmsMaterialInfoRepository : EfCoreRepository<ICMSPluginDbContext, WmsMaterialInfo, Guid>, IWmsMaterialInfoRepository
+{
+    /// <summary>
+    /// Initializes a new instance of the <see cref="EfCoreWmsMaterialInfoRepository"/> class.
+    /// </summary>
+    /// <param name="dbContextProvider">The database context provider.</param>
+    public EfCoreWmsMaterialInfoRepository(IDbContextProvider<ICMSPluginDbContext> dbContextProvider)
+        : base(dbContextProvider)
+    {
+    }
+
+    /// <inheritdoc />
+    public virtual async Task<WmsMaterialInfo> FindByNameAsync(string materialInfo, CancellationToken cancellationToken = default)
+    {
+        return await (await GetDbSetAsync())
+            .IncludeDetails()
+            .OrderBy(t => t.Sort)
+            .FirstOrDefaultAsync(t => t.MaterialNo == materialInfo, GetCancellationToken(cancellationToken));
+    }
+
+    /// <inheritdoc />
+    public async Task<bool> NameExistAsync(string materialInfo, Guid? id = null)
+    {
+        return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).AnyAsync(x => x.MaterialNo == materialInfo);
+    }
+
+    /// <inheritdoc />
+    public async Task<int> GetMaxSortAsync()
+    {
+        var hasAny = await (await GetQueryableAsync()).AnyAsync();
+        if (!hasAny)
+        {
+            return 1;
+        }
+
+        var sort = await (await GetQueryableAsync()).MaxAsync(x => x.Sort);
+        return sort + 1;
+    }
+
+    /// <inheritdoc />
+    public async Task<List<WmsMaterialInfo>> GetListAsync(WmsMaterialInfo? materialInfo,string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, string filter = null, Specification<WmsMaterialInfo> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default)
+    {
+        specification ??= new WmsMaterialInfoSpecification();
+        return await (await GetDbSetAsync())
+           .IncludeDetails(includeDetails)
+           .WhereIf(!filter.IsNullOrWhiteSpace(),
+               u => u.MaterialNo.Contains(filter) ||
+                    u.MaterialName.Contains(filter) ||
+                    u.MaterialModel.Contains(filter) ||
+                    u.MaterialBatch.Contains(filter) ||
+                    u.SupplierCode.Contains(filter))
+           // 精确查询条件
+           .WhereIf(!string.IsNullOrEmpty(materialInfo?.MaterialNo), u => u.MaterialNo.Contains(materialInfo.MaterialNo))
+           .WhereIf(!string.IsNullOrEmpty(materialInfo?.MaterialName), u => u.MaterialName.Contains(materialInfo.MaterialName))
+           .WhereIf(!string.IsNullOrEmpty(materialInfo?.MaterialModel), u => u.MaterialModel.Contains(materialInfo.MaterialModel))
+           .WhereIf(!string.IsNullOrEmpty(materialInfo?.MaterialBatch), u => u.MaterialBatch == materialInfo.MaterialBatch)
+           .WhereIf(!string.IsNullOrEmpty(materialInfo?.SupplierCode), u => u.SupplierCode == materialInfo.SupplierCode)
+           .OrderBy(sorting)
+           .PageBy(skipCount, maxResultCount)
+           .ToListAsync(GetCancellationToken(cancellationToken));
+    }
+
+    /// <inheritdoc />
+    public async Task<long> GetCountAsync(WmsMaterialInfo? materialInfo, string filter = null, Specification<WmsMaterialInfo> specification = null, CancellationToken cancellationToken = default)
+    {
+        specification ??= new WmsMaterialInfoSpecification();
+        return await (await GetQueryableAsync())
+            .WhereIf(!filter.IsNullOrWhiteSpace(),
+               u => u.MaterialNo.Contains(filter) ||
+                    u.MaterialName.Contains(filter) ||
+                    u.MaterialModel.Contains(filter) ||
+                    u.MaterialBatch.Contains(filter) ||
+                    u.SupplierCode.Contains(filter))
+           // 精确查询条件
+           .WhereIf(!string.IsNullOrEmpty(materialInfo?.MaterialNo), u => u.MaterialNo.Contains(materialInfo.MaterialNo))
+           .WhereIf(!string.IsNullOrEmpty(materialInfo?.MaterialName), u => u.MaterialName.Contains(materialInfo.MaterialName))
+           .WhereIf(!string.IsNullOrEmpty(materialInfo?.MaterialModel), u => u.MaterialModel.Contains(materialInfo.MaterialModel))
+           .WhereIf(!string.IsNullOrEmpty(materialInfo?.MaterialBatch), u => u.MaterialBatch == materialInfo.MaterialBatch)
+           .WhereIf(!string.IsNullOrEmpty(materialInfo?.SupplierCode), u => u.SupplierCode == materialInfo.SupplierCode)
+            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
+    }
+
+    /// <inheritdoc />
+    public override async Task<IQueryable<WmsMaterialInfo>> WithDetailsAsync()
+    {
+        return (await GetQueryableAsync()).IncludeDetails();
+    }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialStockRepository.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialStockRepository.cs
index 4e491d3..86b12d4 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialStockRepository.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialStockRepository.cs
@@ -2,6 +2,7 @@
 using CMS.Plugin.HIAWms.Domain.WmsMaterialStocks;
 using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
 using Microsoft.EntityFrameworkCore;
+using SqlKata;
 using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
 using Volo.Abp.EntityFrameworkCore;
 using Volo.Abp.Specifications;
@@ -25,6 +26,7 @@
     {
         return await (await GetDbSetAsync())
             .IncludeDetails()
+        .Where(u => !u.IsDeleted)
             .OrderBy(t => t.Sort)
             .FirstOrDefaultAsync(t => t.MaterialNo == materialNo, GetCancellationToken(cancellationToken));
     }
@@ -32,19 +34,22 @@
     /// <inheritdoc />
     public async Task<bool> NameExistAsync(string materialNo, Guid? id = null)
     {
-        return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).AnyAsync(x => x.MaterialNo == materialNo);
+        return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id)
+        .Where(u => !u.IsDeleted).AnyAsync(x => x.MaterialNo == materialNo);
     }
 
     /// <inheritdoc />
     public async Task<int> GetMaxSortAsync()
     {
-        var hasAny = await (await GetQueryableAsync()).AnyAsync();
+        var hasAny = await (await GetQueryableAsync())
+        .Where(u => !u.IsDeleted).AnyAsync();
         if (!hasAny)
         {
             return 1;
         }
 
-        var sort = await (await GetQueryableAsync()).MaxAsync(x => x.Sort);
+        var sort = await (await GetQueryableAsync())
+        .Where(u => !u.IsDeleted).MaxAsync(x => x.Sort);
         return sort + 1;
     }
 
@@ -52,7 +57,7 @@
     public async Task<List<WmsMaterialStock>> GetListAsync(WmsMaterialStock? stock, DateTime? startTime = null, DateTime? endTime = null, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, string filter = null, Specification<WmsMaterialStock> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default)
     {
         specification ??= new WmsMaterialStockSpecification();
-        return await (await GetDbSetAsync())
+        var baseQuery = (await GetDbSetAsync())
         .IncludeDetails(includeDetails)
         .WhereIf(!filter.IsNullOrWhiteSpace(),
             u => u.MaterialNo.Contains(filter) ||
@@ -76,16 +81,66 @@
         .WhereIf(stock.IsLock > 0, u => u.IsLock == stock.IsLock)
         .WhereIf(startTime.HasValue, u => u.InStockTime >= startTime.Value)
         .WhereIf(endTime.HasValue, u => u.InStockTime <= endTime.Value)
+        .Where(u => !u.IsDeleted)
+        .AsQueryable();
+
+        var materialList = await baseQuery
+        .Select(x => new
+        {
+            x.MaterialNo,
+            x.MaterialName,
+            x.PlaceNo,
+            x.ContainerNo,
+            x.ContainerStatus,
+            x.PlaceStatus,
+            x.StorageTypeNo,
+            x.MaterialBatch,
+            x.MaterialModel,
+            x.AreaCode,
+            x.AreaName,
+            x.CheckStatus,
+            x.IsLock,
+            x.EmptyContainer,
+            x.InStockTime
+        })
+        .ToListAsync(GetCancellationToken(cancellationToken));
+
+        var groupedData = materialList
+       .GroupBy(x => new { x.MaterialNo, x.PlaceNo, x.ContainerNo, x.MaterialName })
+       .Select(g => new WmsMaterialStock
+       {
+           MaterialNo = g.Key.MaterialNo,
+           MaterialName = g.Key.MaterialName,
+           PlaceNo = g.Key.PlaceNo,
+           ContainerNo = g.Key.ContainerNo,
+           ContainerStatus = g.First().ContainerStatus,
+           PlaceStatus = g.First().PlaceStatus,
+           StorageTypeNo = g.First().StorageTypeNo,
+           MaterialBatch = g.First().MaterialBatch,
+           MaterialModel = g.First().MaterialModel,
+           AreaCode = g.First().AreaCode,
+           AreaName = g.First().AreaName,
+           CheckStatus = g.First().CheckStatus,
+           IsLock = g.First().IsLock,
+           EmptyContainer = g.First().EmptyContainer,
+           InStockTime = g.First().InStockTime,
+           StockNumber = g.Count()
+       })
+       .AsQueryable(); // 转换回IQueryable以支持后续操作
+
+        var result = groupedData
         .OrderBy(sorting.IsNullOrEmpty() ? nameof(WmsMaterialStock.Sort) : sorting)
         .PageBy(skipCount, maxResultCount)
-        .ToListAsync(GetCancellationToken(cancellationToken));
+        .ToList();
+
+        return result;
     }
 
     /// <inheritdoc />
     public async Task<long> GetCountAsync(WmsMaterialStock? stock, DateTime? startTime = null, DateTime? endTime = null, string filter = null, Specification<WmsMaterialStock> specification = null, CancellationToken cancellationToken = default)
     {
         specification ??= new WmsMaterialStockSpecification();
-        return await (await GetQueryableAsync())
+        var baseQuery = (await GetQueryableAsync())
             .WhereIf(!filter.IsNullOrWhiteSpace(),
             u => u.MaterialNo.Contains(filter) ||
                  u.MaterialName.Contains(filter) ||
@@ -108,12 +163,60 @@
             .WhereIf(stock.IsLock > 0, u => u.IsLock == stock.IsLock)
             .WhereIf(startTime.HasValue, u => u.InStockTime >= startTime.Value)
             .WhereIf(endTime.HasValue, u => u.InStockTime <= endTime.Value)
-            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
+            .Where(u => !u.IsDeleted)
+            .AsQueryable();
+
+        var materialList = await baseQuery
+       .Select(x => new
+       {
+           x.MaterialNo,
+           x.MaterialName,
+           x.PlaceNo,
+           x.ContainerNo,
+           x.ContainerStatus,
+           x.PlaceStatus,
+           x.StorageTypeNo,
+           x.MaterialBatch,
+           x.MaterialModel,
+           x.AreaCode,
+           x.AreaName,
+           x.CheckStatus,
+           x.IsLock,
+           x.EmptyContainer,
+           x.InStockTime
+       })
+       .ToListAsync(GetCancellationToken(cancellationToken));
+
+        var groupedData = materialList
+       .GroupBy(x => new { x.MaterialNo, x.PlaceNo, x.ContainerNo, x.MaterialName })
+       .Select(g => new WmsMaterialStock
+       {
+           MaterialNo = g.Key.MaterialNo,
+           MaterialName = g.Key.MaterialName,
+           PlaceNo = g.Key.PlaceNo,
+           ContainerNo = g.Key.ContainerNo,
+           ContainerStatus = g.First().ContainerStatus,
+           PlaceStatus = g.First().PlaceStatus,
+           StorageTypeNo = g.First().StorageTypeNo,
+           MaterialBatch = g.First().MaterialBatch,
+           MaterialModel = g.First().MaterialModel,
+           AreaCode = g.First().AreaCode,
+           AreaName = g.First().AreaName,
+           CheckStatus = g.First().CheckStatus,
+           IsLock = g.First().IsLock,
+           EmptyContainer = g.First().EmptyContainer,
+           InStockTime = g.First().InStockTime,
+           StockNumber = g.Count()
+       })
+       .AsQueryable(); // 转换回IQueryable以支持后续操作
+
+        return groupedData.Count();
     }
 
     /// <inheritdoc />
     public override async Task<IQueryable<WmsMaterialStock>> WithDetailsAsync()
     {
-        return (await GetQueryableAsync()).IncludeDetails();
+        return (await GetQueryableAsync()).IncludeDetails()
+        .Where(u => !u.IsDeleted);
     }
 }
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/CMSPluginDbContext.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/CMSPluginDbContext.cs
index 69c16c1..204efe4 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/CMSPluginDbContext.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/CMSPluginDbContext.cs
@@ -38,6 +38,7 @@
         builder.ConfigureWmsPlace();
         builder.ConfigureWmsMaterial();
         builder.ConfigureWmsMaterialStock();
+        builder.ConfigureWmsMaterialInfo();
 
         /* Configure your own tables/entities inside here */
 
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505105851_InitialCreate2.Designer.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505105851_InitialCreate2.Designer.cs
new file mode 100644
index 0000000..d34dfb9
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505105851_InitialCreate2.Designer.cs
@@ -0,0 +1,998 @@
+锘�// <auto-generated />
+using System;
+using CMS.Plugin.HIAWms.MySQL;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Volo.Abp.EntityFrameworkCore;
+
+#nullable disable
+
+namespace CMS.Plugin.HIAWms.MySQL.Migrations
+{
+    [DbContext(typeof(CMSPluginDbContext))]
+    [Migration("20250505105851_InitialCreate2")]
+    partial class InitialCreate2
+    {
+        protected override void BuildTargetModel(ModelBuilder modelBuilder)
+        {
+#pragma warning disable 612, 618
+            modelBuilder
+                .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql)
+                .HasAnnotation("ProductVersion", "6.0.16")
+                .HasAnnotation("Relational:MaxIdentifierLength", 64);
+
+            modelBuilder.Entity("CMS.Plugin.HIAWms.Domain.WmsAreas.WmsArea", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("char(36)");
+
+                    b.Property<string>("AreaDesc")
+                        .HasMaxLength(200)
+                        .HasColumnType("varchar(200)")
+                        .HasComment("鎻忚堪");
+
+                    b.Property<string>("AreaName")
+                        .IsRequired()
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("搴撳尯鍚嶇О");
+
+                    b.Property<string>("AreaNo")
+                        .IsRequired()
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("搴撳尯缂栧彿");
+
+                    b.Property<int>("AreaStatus")
+                        .HasColumnType("int")
+                        .HasComment("搴撳尯鐘舵��");
+
+                    b.Property<int>("AreaType")
+                        .HasColumnType("int")
+                        .HasComment("搴撳尯绫诲瀷");
+
+                    b.Property<string>("ConcurrencyStamp")
+                        .IsConcurrencyToken()
+                        .HasMaxLength(40)
+                        .HasColumnType("varchar(40)")
+                        .HasColumnName("ConcurrencyStamp");
+
+                    b.Property<DateTime>("CreationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("CreationTime");
+
+                    b.Property<Guid?>("CreatorId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("CreatorId");
+
+                    b.Property<Guid?>("DeleterId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("DeleterId");
+
+                    b.Property<DateTime?>("DeletionTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("DeletionTime");
+
+                    b.Property<string>("ExtraProperties")
+                        .HasColumnType("longtext")
+                        .HasColumnName("ExtraProperties");
+
+                    b.Property<bool>("IsDeleted")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasColumnName("IsDeleted");
+
+                    b.Property<bool?>("IsDisabled")
+                        .HasColumnType("tinyint(1)")
+                        .HasComment("鏄惁绂佺敤");
+
+                    b.Property<DateTime?>("LastModificationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("LastModificationTime");
+
+                    b.Property<Guid?>("LastModifierId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("LastModifierId");
+
+                    b.Property<string>("RedundantField1")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("鍐椾綑瀛楁1 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField2")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("鍐椾綑瀛楁2 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField3")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("鍐椾綑瀛楁3 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("Remark")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("澶囨敞");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int")
+                        .HasComment("鎺掑簭");
+
+                    b.Property<string>("StoreCode")
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("浠撳簱浠g爜");
+
+                    b.Property<string>("StoreName")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("浠撳簱鍚嶇О");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("AreaName");
+
+                    b.ToTable("scms_wmsareas", (string)null);
+
+                    b.HasComment("搴撳尯琛�");
+                });
+
+            modelBuilder.Entity("CMS.Plugin.HIAWms.Domain.WmsContainers.WmsContainer", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("char(36)");
+
+                    b.Property<string>("ConcurrencyStamp")
+                        .IsConcurrencyToken()
+                        .HasMaxLength(40)
+                        .HasColumnType("varchar(40)")
+                        .HasColumnName("ConcurrencyStamp");
+
+                    b.Property<string>("ContainerNo")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("鎵樼洏缂栧彿");
+
+                    b.Property<int>("ContainerStatus")
+                        .HasColumnType("int")
+                        .HasComment("鎵樼洏鐘舵��");
+
+                    b.Property<int>("ContainerType")
+                        .HasColumnType("int")
+                        .HasComment("鎵樼洏绫诲瀷");
+
+                    b.Property<DateTime>("CreationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("CreationTime");
+
+                    b.Property<Guid?>("CreatorId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("CreatorId");
+
+                    b.Property<Guid?>("DeleterId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("DeleterId");
+
+                    b.Property<DateTime?>("DeletionTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("DeletionTime");
+
+                    b.Property<int?>("ExceptionNumber")
+                        .HasColumnType("int")
+                        .HasComment("寮傚父鏁伴噺");
+
+                    b.Property<string>("ExtraProperties")
+                        .HasColumnType("longtext")
+                        .HasColumnName("ExtraProperties");
+
+                    b.Property<bool>("IsDeleted")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasColumnName("IsDeleted");
+
+                    b.Property<bool?>("IsDisabled")
+                        .HasColumnType("tinyint(1)")
+                        .HasComment("鏄惁绂佺敤");
+
+                    b.Property<DateTime?>("LastModificationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("LastModificationTime");
+
+                    b.Property<Guid?>("LastModifierId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("LastModifierId");
+
+                    b.Property<decimal?>("LimitHeight")
+                        .HasPrecision(18, 2)
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("闄愰珮");
+
+                    b.Property<decimal?>("LimitLength")
+                        .HasPrecision(18, 2)
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("闄愰暱");
+
+                    b.Property<decimal?>("LimitWidth")
+                        .HasPrecision(18, 2)
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("闄愬");
+
+                    b.Property<int?>("MaterialNumber")
+                        .HasColumnType("int")
+                        .HasComment("鐗╂枡鏁伴噺");
+
+                    b.Property<decimal?>("MaxWeight")
+                        .HasPrecision(18, 2)
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("杞介噸涓婇檺");
+
+                    b.Property<string>("RedundantField1")
+                        .HasMaxLength(200)
+                        .HasColumnType("varchar(200)")
+                        .HasComment("鍐椾綑瀛楁1 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField2")
+                        .HasMaxLength(200)
+                        .HasColumnType("varchar(200)")
+                        .HasComment("鍐椾綑瀛楁2 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField3")
+                        .HasMaxLength(200)
+                        .HasColumnType("varchar(200)")
+                        .HasComment("鍐椾綑瀛楁3 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("Remark")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("澶囨敞");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int")
+                        .HasComment("鎺掑簭");
+
+                    b.Property<decimal?>("SpecHeight")
+                        .HasPrecision(18, 2)
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("楂樺害");
+
+                    b.Property<decimal?>("SpecLength")
+                        .HasPrecision(18, 2)
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("闀垮害");
+
+                    b.Property<decimal?>("SpecWidth")
+                        .HasPrecision(18, 2)
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("瀹藉害");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ContainerNo")
+                        .IsUnique();
+
+                    b.HasIndex("ContainerStatus");
+
+                    b.HasIndex("ContainerType");
+
+                    b.ToTable("scms_wmscontainers", (string)null);
+
+                    b.HasComment("鎵樼洏淇℃伅琛�");
+                });
+
+            modelBuilder.Entity("CMS.Plugin.HIAWms.Domain.WmsMaterialInfos.WmsMaterialInfo", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("char(36)");
+
+                    b.Property<int?>("CheckStatus")
+                        .HasColumnType("int")
+                        .HasComment("妫�楠岀姸鎬�(0:鏈楠�,1:妫�楠岄�氳繃,2:妫�楠屼笉閫氳繃)");
+
+                    b.Property<string>("ConcurrencyStamp")
+                        .IsConcurrencyToken()
+                        .HasMaxLength(40)
+                        .HasColumnType("varchar(40)")
+                        .HasColumnName("ConcurrencyStamp");
+
+                    b.Property<DateTime>("CreationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("CreationTime");
+
+                    b.Property<Guid?>("CreatorId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("CreatorId");
+
+                    b.Property<Guid?>("DeleterId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("DeleterId");
+
+                    b.Property<DateTime?>("DeletionTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("DeletionTime");
+
+                    b.Property<string>("ExtraProperties")
+                        .HasColumnType("longtext")
+                        .HasColumnName("ExtraProperties");
+
+                    b.Property<bool>("IsDeleted")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasColumnName("IsDeleted");
+
+                    b.Property<bool?>("IsDisabled")
+                        .HasColumnType("tinyint(1)")
+                        .HasComment("鏄惁绂佺敤");
+
+                    b.Property<DateTime?>("LastModificationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("LastModificationTime");
+
+                    b.Property<Guid?>("LastModifierId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("LastModifierId");
+
+                    b.Property<string>("MaterialBatch")
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("鐗╂枡鎵瑰彿");
+
+                    b.Property<string>("MaterialId")
+                        .IsRequired()
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鐗╂枡鍞竴鐮�");
+
+                    b.Property<string>("MaterialModel")
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("鏈哄瀷/瑙勬牸");
+
+                    b.Property<string>("MaterialName")
+                        .IsRequired()
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("鐗╂枡鍚嶇О");
+
+                    b.Property<string>("MaterialNo")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("鐗╂枡浠e彿");
+
+                    b.Property<string>("RedundantField1")
+                        .HasMaxLength(255)
+                        .HasColumnType("varchar(255)")
+                        .HasComment("鍐椾綑瀛楁1");
+
+                    b.Property<string>("RedundantField2")
+                        .HasMaxLength(255)
+                        .HasColumnType("varchar(255)")
+                        .HasComment("鍐椾綑瀛楁2");
+
+                    b.Property<string>("RedundantField3")
+                        .HasMaxLength(255)
+                        .HasColumnType("varchar(255)")
+                        .HasComment("鍐椾綑瀛楁3");
+
+                    b.Property<string>("Remark")
+                        .HasMaxLength(500)
+                        .HasColumnType("varchar(500)")
+                        .HasComment("澶囨敞");
+
+                    b.Property<int>("Sort")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasDefaultValue(0)
+                        .HasComment("鎺掑簭");
+
+                    b.Property<int?>("StockNumber")
+                        .HasColumnType("int")
+                        .HasComment("搴撳瓨鏁伴噺");
+
+                    b.Property<string>("SupplierCode")
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("渚涘簲鍟嗙紪鍙�");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CheckStatus");
+
+                    b.HasIndex("MaterialBatch");
+
+                    b.HasIndex("MaterialId")
+                        .IsUnique();
+
+                    b.HasIndex("MaterialName");
+
+                    b.HasIndex("MaterialNo")
+                        .IsUnique();
+
+                    b.HasIndex("SupplierCode");
+
+                    b.ToTable("scms_wmsmaterialinfos", (string)null);
+
+                    b.HasComment("WMS鐗╂枡淇℃伅琛�");
+                });
+
+            modelBuilder.Entity("CMS.Plugin.HIAWms.Domain.WmsMaterials.WmsMaterial", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("char(36)");
+
+                    b.Property<string>("Certification")
+                        .HasMaxLength(128)
+                        .HasColumnType("varchar(128)")
+                        .HasComment("璇佷功缂栧彿");
+
+                    b.Property<string>("ConcurrencyStamp")
+                        .IsConcurrencyToken()
+                        .HasMaxLength(40)
+                        .HasColumnType("varchar(40)")
+                        .HasColumnName("ConcurrencyStamp");
+
+                    b.Property<DateTime>("CreationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("CreationTime");
+
+                    b.Property<Guid?>("CreatorId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("CreatorId");
+
+                    b.Property<Guid?>("DeleterId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("DeleterId");
+
+                    b.Property<DateTime?>("DeletionTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("DeletionTime");
+
+                    b.Property<string>("ExtraProperties")
+                        .HasColumnType("longtext")
+                        .HasColumnName("ExtraProperties");
+
+                    b.Property<string>("Factory")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鐢熶骇宸ュ巶");
+
+                    b.Property<bool>("IsDeleted")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasColumnName("IsDeleted");
+
+                    b.Property<bool?>("IsDisabled")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasComment("鏄惁绂佺敤");
+
+                    b.Property<int>("IsMainBranch")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasDefaultValue(2)
+                        .HasComment("鏄惁涓轰富鏀");
+
+                    b.Property<DateTime?>("LastModificationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("LastModificationTime");
+
+                    b.Property<Guid?>("LastModifierId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("LastModifierId");
+
+                    b.Property<decimal>("Length")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("闀垮害锛堝崟浣嶏細m锛�");
+
+                    b.Property<string>("MaterialCode")
+                        .IsRequired()
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鐗╂枡缂栫爜锛堝敮涓�鏍囪瘑锛�");
+
+                    b.Property<string>("MaterialName")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("varchar(128)")
+                        .HasComment("鐗╂枡鍚嶇О");
+
+                    b.Property<string>("MaterialQuality")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鏉愯川锛堝锛�304涓嶉攬閽級");
+
+                    b.Property<int>("MaterialType")
+                        .HasColumnType("int")
+                        .HasComment("鐗╂枡绫诲瀷锛堟灇涓惧�硷級");
+
+                    b.Property<decimal>("OuterDiameter")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("澶栧緞锛堝崟浣嶏細mm锛�");
+
+                    b.Property<string>("PrimaryUnit")
+                        .HasMaxLength(20)
+                        .HasColumnType("varchar(20)")
+                        .HasComment("涓诲崟浣嶏紙濡傦細kg銆乵銆佷釜锛�");
+
+                    b.Property<int>("PurchaseType")
+                        .HasColumnType("int")
+                        .HasComment("閲囪喘绫诲瀷锛堟灇涓惧�硷級");
+
+                    b.Property<string>("RedundantField1")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍐椾綑瀛楁1 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField2")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍐椾綑瀛楁2 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField3")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍐椾綑瀛楁3 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("Remark")
+                        .HasMaxLength(500)
+                        .HasColumnType("varchar(500)")
+                        .HasComment("澶囨敞");
+
+                    b.Property<int>("Sort")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasDefaultValue(0)
+                        .HasComment("鎺掑簭");
+
+                    b.Property<string>("Standard")
+                        .HasMaxLength(128)
+                        .HasColumnType("varchar(128)")
+                        .HasComment("瑙勬牸/鏍囧噯锛堝锛欸B/T 8163-2018锛�");
+
+                    b.Property<decimal>("WallThickness")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("澹佸帤锛堝崟浣嶏細mm锛�");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("MaterialCode")
+                        .IsUnique();
+
+                    b.HasIndex("MaterialName");
+
+                    b.HasIndex("MaterialType");
+
+                    b.HasIndex("PurchaseType");
+
+                    b.ToTable("scms_wmsmaterials", (string)null);
+
+                    b.HasComment("鐗╂枡鍩虹淇℃伅琛�");
+                });
+
+            modelBuilder.Entity("CMS.Plugin.HIAWms.Domain.WmsMaterialStocks.WmsMaterialStock", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("char(36)");
+
+                    b.Property<string>("AreaCode")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鍖哄煙缂栧彿");
+
+                    b.Property<string>("AreaName")
+                        .HasMaxLength(128)
+                        .HasColumnType("varchar(128)")
+                        .HasComment("搴撳尯鍚嶇О");
+
+                    b.Property<int?>("CheckStatus")
+                        .HasColumnType("int")
+                        .HasComment("妫�楠岀姸鎬�(1:鏈楠�,2:妫�楠岄�氳繃,3:妫�楠屼笉閫氳繃)");
+
+                    b.Property<string>("ConcurrencyStamp")
+                        .IsConcurrencyToken()
+                        .HasMaxLength(40)
+                        .HasColumnType("varchar(40)")
+                        .HasColumnName("ConcurrencyStamp");
+
+                    b.Property<string>("ContainerNo")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("瀹瑰櫒缂栧彿");
+
+                    b.Property<int>("ContainerStatus")
+                        .HasColumnType("int")
+                        .HasComment("瀹瑰櫒鐘舵��");
+
+                    b.Property<int>("ContainerType")
+                        .HasColumnType("int")
+                        .HasComment("瀹瑰櫒绫诲瀷");
+
+                    b.Property<DateTime>("CreationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("CreationTime");
+
+                    b.Property<Guid?>("CreatorId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("CreatorId");
+
+                    b.Property<Guid?>("DeleterId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("DeleterId");
+
+                    b.Property<DateTime?>("DeletionTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("DeletionTime");
+
+                    b.Property<int>("EmptyContainer")
+                        .HasColumnType("int")
+                        .HasComment("鏄惁绌烘墭(2:鍚�,1:鏄�)");
+
+                    b.Property<string>("ExtraProperties")
+                        .HasColumnType("longtext")
+                        .HasColumnName("ExtraProperties");
+
+                    b.Property<DateTime?>("InStockTime")
+                        .HasColumnType("datetime(6)")
+                        .HasComment("鍏ュ簱鏃堕棿");
+
+                    b.Property<bool>("IsDeleted")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasColumnName("IsDeleted");
+
+                    b.Property<bool?>("IsDisabled")
+                        .HasColumnType("tinyint(1)")
+                        .HasComment("鏄惁绂佺敤");
+
+                    b.Property<int>("IsLock")
+                        .HasColumnType("int")
+                        .HasComment("鏄惁閿佸畾(2:鏈攣瀹�,1:宸查攣瀹�)");
+
+                    b.Property<DateTime?>("LastModificationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("LastModificationTime");
+
+                    b.Property<Guid?>("LastModifierId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("LastModifierId");
+
+                    b.Property<string>("MaterialBatch")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鐗╂枡鎵规");
+
+                    b.Property<string>("MaterialId")
+                        .IsRequired()
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鐗╂枡ID");
+
+                    b.Property<string>("MaterialModel")
+                        .HasMaxLength(128)
+                        .HasColumnType("varchar(128)")
+                        .HasComment("鏈哄瀷/瑙勬牸");
+
+                    b.Property<string>("MaterialName")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("varchar(128)")
+                        .HasComment("鐗╂枡鍚嶇О");
+
+                    b.Property<string>("MaterialNo")
+                        .IsRequired()
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鐗╂枡缂栧彿");
+
+                    b.Property<string>("PlaceNo")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("搴撲綅缂栧彿");
+
+                    b.Property<int>("PlaceStatus")
+                        .HasColumnType("int")
+                        .HasComment("搴撲綅鐘舵��;");
+
+                    b.Property<string>("RedundantField1")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍐椾綑瀛楁1 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField2")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍐椾綑瀛楁2 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField3")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍐椾綑瀛楁3 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("Remark")
+                        .HasMaxLength(500)
+                        .HasColumnType("varchar(500)")
+                        .HasComment("澶囨敞");
+
+                    b.Property<int>("Sort")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasDefaultValue(0)
+                        .HasComment("鎺掑簭");
+
+                    b.Property<int>("StockNumber")
+                        .HasColumnType("int")
+                        .HasComment("搴撳瓨鏁伴噺");
+
+                    b.Property<int>("StorageTypeNo")
+                        .HasColumnType("int")
+                        .HasComment("搴撲綅绫诲瀷");
+
+                    b.Property<string>("SupplierCode")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("渚涘簲鍟嗙紪鍙�");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("AreaCode");
+
+                    b.HasIndex("ContainerNo");
+
+                    b.HasIndex("MaterialName");
+
+                    b.HasIndex("MaterialNo")
+                        .IsUnique();
+
+                    b.HasIndex("PlaceNo");
+
+                    b.HasIndex("MaterialBatch", "SupplierCode");
+
+                    b.ToTable("scms_wmsmaterialstocks", (string)null);
+
+                    b.HasComment("WMS鐗╂枡搴撳瓨琛�");
+                });
+
+            modelBuilder.Entity("CMS.Plugin.HIAWms.Domain.WmsPlaces.WmsPlace", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("char(36)");
+
+                    b.Property<int>("Aisle")
+                        .HasColumnType("int")
+                        .HasComment("宸烽亾");
+
+                    b.Property<string>("AreaCode")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("鎵�鍦ㄥ簱鍖�");
+
+                    b.Property<int>("ColumnNo")
+                        .HasColumnType("int")
+                        .HasComment("鍒�");
+
+                    b.Property<string>("ConcurrencyStamp")
+                        .IsConcurrencyToken()
+                        .HasMaxLength(40)
+                        .HasColumnType("varchar(40)")
+                        .HasColumnName("ConcurrencyStamp");
+
+                    b.Property<DateTime>("CreationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("CreationTime");
+
+                    b.Property<Guid?>("CreatorId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("CreatorId");
+
+                    b.Property<Guid?>("DeleterId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("DeleterId");
+
+                    b.Property<DateTime?>("DeletionTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("DeletionTime");
+
+                    b.Property<int>("EmptyContainer")
+                        .HasColumnType("int")
+                        .HasComment("鏄惁绌烘墭");
+
+                    b.Property<string>("ExtraProperties")
+                        .HasColumnType("longtext")
+                        .HasColumnName("ExtraProperties");
+
+                    b.Property<bool>("IsDeleted")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasColumnName("IsDeleted");
+
+                    b.Property<bool?>("IsDisabled")
+                        .HasColumnType("tinyint(1)")
+                        .HasComment("鏄惁绂佺敤");
+
+                    b.Property<int>("Islock")
+                        .HasColumnType("int")
+                        .HasComment("鏄惁閿佸畾");
+
+                    b.Property<DateTime?>("LastModificationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("LastModificationTime");
+
+                    b.Property<Guid?>("LastModifierId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("LastModifierId");
+
+                    b.Property<int>("LayerNo")
+                        .HasColumnType("int")
+                        .HasComment("灞�");
+
+                    b.Property<string>("PlaceNo")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("缂栧彿");
+
+                    b.Property<int>("PlaceStatus")
+                        .HasColumnType("int")
+                        .HasComment("璐т綅鐘舵��");
+
+                    b.Property<string>("RedundantField1")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("鍐椾綑瀛楁1 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField2")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("鍐椾綑瀛楁2 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField3")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("鍐椾綑瀛楁3 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("Remark")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("澶囨敞");
+
+                    b.Property<int>("RowNo")
+                        .HasColumnType("int")
+                        .HasComment("鎺�");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int")
+                        .HasComment("鎺掑簭");
+
+                    b.Property<int>("StorageTypeNo")
+                        .HasColumnType("int")
+                        .HasComment("璐т綅绫诲瀷");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("AreaCode");
+
+                    b.HasIndex("PlaceNo")
+                        .IsUnique();
+
+                    b.HasIndex("PlaceStatus");
+
+                    b.HasIndex("StorageTypeNo");
+
+                    b.ToTable("scms_wmsplaces", (string)null);
+
+                    b.HasComment("搴撲綅琛�");
+                });
+
+            modelBuilder.Entity("CMS.Plugin.HIAWms.Domain.WmsStores.WmsStore", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("char(36)");
+
+                    b.Property<string>("ConcurrencyStamp")
+                        .IsConcurrencyToken()
+                        .HasMaxLength(40)
+                        .HasColumnType("varchar(40)")
+                        .HasColumnName("ConcurrencyStamp");
+
+                    b.Property<DateTime>("CreationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("CreationTime");
+
+                    b.Property<Guid?>("CreatorId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("CreatorId");
+
+                    b.Property<Guid?>("DeleterId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("DeleterId");
+
+                    b.Property<DateTime?>("DeletionTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("DeletionTime");
+
+                    b.Property<string>("ExtraProperties")
+                        .HasColumnType("longtext")
+                        .HasColumnName("ExtraProperties");
+
+                    b.Property<bool>("IsDeleted")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasColumnName("IsDeleted");
+
+                    b.Property<bool?>("IsDisabled")
+                        .HasColumnType("tinyint(1)")
+                        .HasComment("鏄惁绂佺敤");
+
+                    b.Property<DateTime?>("LastModificationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("LastModificationTime");
+
+                    b.Property<Guid?>("LastModifierId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("LastModifierId");
+
+                    b.Property<string>("RedundantField1")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("鍐椾綑瀛楁1 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField2")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("鍐椾綑瀛楁2 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField3")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("鍐椾綑瀛楁3 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("Remark")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("澶囨敞");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int")
+                        .HasComment("鎺掑簭");
+
+                    b.Property<string>("StoreCode")
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("浠撳簱浠g爜");
+
+                    b.Property<string>("StoreName")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("浠撳簱鍚嶇О");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("StoreName");
+
+                    b.ToTable("scms_wmsstores", (string)null);
+
+                    b.HasComment("浠撳簱淇℃伅琛�");
+                });
+#pragma warning restore 612, 618
+        }
+    }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505105851_InitialCreate2.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505105851_InitialCreate2.cs
new file mode 100644
index 0000000..e9f63c4
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505105851_InitialCreate2.cs
@@ -0,0 +1,196 @@
+锘縰sing System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace CMS.Plugin.HIAWms.MySQL.Migrations
+{
+    public partial class InitialCreate2 : Migration
+    {
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.CreateTable(
+                name: "scms_wmsmaterialinfos",
+                columns: table => new
+                {
+                    Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
+                    MaterialNo = table.Column<string>(type: "varchar(50)", maxLength: 50, nullable: false, comment: "鐗╂枡浠e彿")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    MaterialName = table.Column<string>(type: "varchar(100)", maxLength: 100, nullable: false, comment: "鐗╂枡鍚嶇О")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    MaterialModel = table.Column<string>(type: "varchar(50)", maxLength: 50, nullable: true, comment: "鏈哄瀷/瑙勬牸")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    MaterialId = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: false, comment: "鐗╂枡鍞竴鐮�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    StockNumber = table.Column<int>(type: "int", nullable: true, comment: "搴撳瓨鏁伴噺"),
+                    MaterialBatch = table.Column<string>(type: "varchar(50)", maxLength: 50, nullable: true, comment: "鐗╂枡鎵瑰彿")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    SupplierCode = table.Column<string>(type: "varchar(50)", maxLength: 50, nullable: true, comment: "渚涘簲鍟嗙紪鍙�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    CheckStatus = table.Column<int>(type: "int", nullable: true, comment: "妫�楠岀姸鎬�(0:鏈楠�,1:妫�楠岄�氳繃,2:妫�楠屼笉閫氳繃)"),
+                    RedundantField1 = table.Column<string>(type: "varchar(255)", maxLength: 255, nullable: true, comment: "鍐椾綑瀛楁1")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    RedundantField2 = table.Column<string>(type: "varchar(255)", maxLength: 255, nullable: true, comment: "鍐椾綑瀛楁2")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    RedundantField3 = table.Column<string>(type: "varchar(255)", maxLength: 255, nullable: true, comment: "鍐椾綑瀛楁3")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    Sort = table.Column<int>(type: "int", nullable: false, defaultValue: 0, comment: "鎺掑簭"),
+                    Remark = table.Column<string>(type: "varchar(500)", maxLength: 500, nullable: true, comment: "澶囨敞")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    IsDisabled = table.Column<bool>(type: "tinyint(1)", nullable: true, comment: "鏄惁绂佺敤"),
+                    ExtraProperties = table.Column<string>(type: "longtext", nullable: true)
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ConcurrencyStamp = table.Column<string>(type: "varchar(40)", maxLength: 40, nullable: true)
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    CreationTime = table.Column<DateTime>(type: "datetime(6)", nullable: false),
+                    CreatorId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
+                    LastModificationTime = table.Column<DateTime>(type: "datetime(6)", nullable: true),
+                    LastModifierId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
+                    IsDeleted = table.Column<bool>(type: "tinyint(1)", nullable: false, defaultValue: false),
+                    DeleterId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
+                    DeletionTime = table.Column<DateTime>(type: "datetime(6)", nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_scms_wmsmaterialinfos", x => x.Id);
+                },
+                comment: "WMS鐗╂枡淇℃伅琛�")
+                .Annotation("MySql:CharSet", "utf8mb4");
+
+            migrationBuilder.CreateTable(
+                name: "scms_wmsmaterialstocks",
+                columns: table => new
+                {
+                    Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
+                    MaterialId = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: false, comment: "鐗╂枡ID")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    MaterialName = table.Column<string>(type: "varchar(128)", maxLength: 128, nullable: false, comment: "鐗╂枡鍚嶇О")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ContainerNo = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: true, comment: "瀹瑰櫒缂栧彿")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ContainerStatus = table.Column<int>(type: "int", nullable: false, comment: "瀹瑰櫒鐘舵��"),
+                    ContainerType = table.Column<int>(type: "int", nullable: false, comment: "瀹瑰櫒绫诲瀷"),
+                    MaterialNo = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: false, comment: "鐗╂枡缂栧彿")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    StockNumber = table.Column<int>(type: "int", nullable: false, comment: "搴撳瓨鏁伴噺"),
+                    MaterialBatch = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: true, comment: "鐗╂枡鎵规")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    SupplierCode = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: true, comment: "渚涘簲鍟嗙紪鍙�")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    MaterialModel = table.Column<string>(type: "varchar(128)", maxLength: 128, nullable: true, comment: "鏈哄瀷/瑙勬牸")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    PlaceNo = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: true, comment: "搴撲綅缂栧彿")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    PlaceStatus = table.Column<int>(type: "int", nullable: false, comment: "搴撲綅鐘舵��;"),
+                    StorageTypeNo = table.Column<int>(type: "int", nullable: false, comment: "搴撲綅绫诲瀷"),
+                    AreaCode = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: true, comment: "鍖哄煙缂栧彿")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    AreaName = table.Column<string>(type: "varchar(128)", maxLength: 128, nullable: true, comment: "搴撳尯鍚嶇О")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    CheckStatus = table.Column<int>(type: "int", nullable: true, comment: "妫�楠岀姸鎬�(1:鏈楠�,2:妫�楠岄�氳繃,3:妫�楠屼笉閫氳繃)"),
+                    IsLock = table.Column<int>(type: "int", nullable: false, comment: "鏄惁閿佸畾(2:鏈攣瀹�,1:宸查攣瀹�)"),
+                    EmptyContainer = table.Column<int>(type: "int", nullable: false, comment: "鏄惁绌烘墭(2:鍚�,1:鏄�)"),
+                    InStockTime = table.Column<DateTime>(type: "datetime(6)", nullable: true, comment: "鍏ュ簱鏃堕棿"),
+                    Sort = table.Column<int>(type: "int", nullable: false, defaultValue: 0, comment: "鎺掑簭"),
+                    Remark = table.Column<string>(type: "varchar(500)", maxLength: 500, nullable: true, comment: "澶囨敞")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    RedundantField1 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鍐椾綑瀛楁1 - 棰勭暀鎵╁睍鐢ㄩ��")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    RedundantField2 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鍐椾綑瀛楁2 - 棰勭暀鎵╁睍鐢ㄩ��")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    RedundantField3 = table.Column<string>(type: "varchar(256)", maxLength: 256, nullable: true, comment: "鍐椾綑瀛楁3 - 棰勭暀鎵╁睍鐢ㄩ��")
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    IsDisabled = table.Column<bool>(type: "tinyint(1)", nullable: true, comment: "鏄惁绂佺敤"),
+                    ExtraProperties = table.Column<string>(type: "longtext", nullable: true)
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    ConcurrencyStamp = table.Column<string>(type: "varchar(40)", maxLength: 40, nullable: true)
+                        .Annotation("MySql:CharSet", "utf8mb4"),
+                    CreationTime = table.Column<DateTime>(type: "datetime(6)", nullable: false),
+                    CreatorId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
+                    LastModificationTime = table.Column<DateTime>(type: "datetime(6)", nullable: true),
+                    LastModifierId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
+                    IsDeleted = table.Column<bool>(type: "tinyint(1)", nullable: false, defaultValue: false),
+                    DeleterId = table.Column<Guid>(type: "char(36)", nullable: true, collation: "ascii_general_ci"),
+                    DeletionTime = table.Column<DateTime>(type: "datetime(6)", nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_scms_wmsmaterialstocks", x => x.Id);
+                },
+                comment: "WMS鐗╂枡搴撳瓨琛�")
+                .Annotation("MySql:CharSet", "utf8mb4");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_wmsmaterialinfos_CheckStatus",
+                table: "scms_wmsmaterialinfos",
+                column: "CheckStatus");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_wmsmaterialinfos_MaterialBatch",
+                table: "scms_wmsmaterialinfos",
+                column: "MaterialBatch");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_wmsmaterialinfos_MaterialId",
+                table: "scms_wmsmaterialinfos",
+                column: "MaterialId",
+                unique: true);
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_wmsmaterialinfos_MaterialName",
+                table: "scms_wmsmaterialinfos",
+                column: "MaterialName");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_wmsmaterialinfos_MaterialNo",
+                table: "scms_wmsmaterialinfos",
+                column: "MaterialNo",
+                unique: true);
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_wmsmaterialinfos_SupplierCode",
+                table: "scms_wmsmaterialinfos",
+                column: "SupplierCode");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_wmsmaterialstocks_AreaCode",
+                table: "scms_wmsmaterialstocks",
+                column: "AreaCode");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_wmsmaterialstocks_ContainerNo",
+                table: "scms_wmsmaterialstocks",
+                column: "ContainerNo");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_wmsmaterialstocks_MaterialBatch_SupplierCode",
+                table: "scms_wmsmaterialstocks",
+                columns: new[] { "MaterialBatch", "SupplierCode" });
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_wmsmaterialstocks_MaterialName",
+                table: "scms_wmsmaterialstocks",
+                column: "MaterialName");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_wmsmaterialstocks_MaterialNo",
+                table: "scms_wmsmaterialstocks",
+                column: "MaterialNo",
+                unique: true);
+
+            migrationBuilder.CreateIndex(
+                name: "IX_scms_wmsmaterialstocks_PlaceNo",
+                table: "scms_wmsmaterialstocks",
+                column: "PlaceNo");
+        }
+
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropTable(
+                name: "scms_wmsmaterialinfos");
+
+            migrationBuilder.DropTable(
+                name: "scms_wmsmaterialstocks");
+        }
+    }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505121050_InitialCreate3.Designer.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505121050_InitialCreate3.Designer.cs
new file mode 100644
index 0000000..a1f1d07
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505121050_InitialCreate3.Designer.cs
@@ -0,0 +1,1003 @@
+锘�// <auto-generated />
+using System;
+using CMS.Plugin.HIAWms.MySQL;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Volo.Abp.EntityFrameworkCore;
+
+#nullable disable
+
+namespace CMS.Plugin.HIAWms.MySQL.Migrations
+{
+    [DbContext(typeof(CMSPluginDbContext))]
+    [Migration("20250505121050_InitialCreate3")]
+    partial class InitialCreate3
+    {
+        protected override void BuildTargetModel(ModelBuilder modelBuilder)
+        {
+#pragma warning disable 612, 618
+            modelBuilder
+                .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql)
+                .HasAnnotation("ProductVersion", "6.0.16")
+                .HasAnnotation("Relational:MaxIdentifierLength", 64);
+
+            modelBuilder.Entity("CMS.Plugin.HIAWms.Domain.WmsAreas.WmsArea", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("char(36)");
+
+                    b.Property<string>("AreaDesc")
+                        .HasMaxLength(200)
+                        .HasColumnType("varchar(200)")
+                        .HasComment("鎻忚堪");
+
+                    b.Property<string>("AreaName")
+                        .IsRequired()
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("搴撳尯鍚嶇О");
+
+                    b.Property<string>("AreaNo")
+                        .IsRequired()
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("搴撳尯缂栧彿");
+
+                    b.Property<int>("AreaStatus")
+                        .HasColumnType("int")
+                        .HasComment("搴撳尯鐘舵��");
+
+                    b.Property<int>("AreaType")
+                        .HasColumnType("int")
+                        .HasComment("搴撳尯绫诲瀷");
+
+                    b.Property<string>("ConcurrencyStamp")
+                        .IsConcurrencyToken()
+                        .HasMaxLength(40)
+                        .HasColumnType("varchar(40)")
+                        .HasColumnName("ConcurrencyStamp");
+
+                    b.Property<DateTime>("CreationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("CreationTime");
+
+                    b.Property<Guid?>("CreatorId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("CreatorId");
+
+                    b.Property<Guid?>("DeleterId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("DeleterId");
+
+                    b.Property<DateTime?>("DeletionTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("DeletionTime");
+
+                    b.Property<string>("ExtraProperties")
+                        .HasColumnType("longtext")
+                        .HasColumnName("ExtraProperties");
+
+                    b.Property<bool>("IsDeleted")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasColumnName("IsDeleted");
+
+                    b.Property<bool?>("IsDisabled")
+                        .HasColumnType("tinyint(1)")
+                        .HasComment("鏄惁绂佺敤");
+
+                    b.Property<DateTime?>("LastModificationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("LastModificationTime");
+
+                    b.Property<Guid?>("LastModifierId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("LastModifierId");
+
+                    b.Property<string>("RedundantField1")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("鍐椾綑瀛楁1 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField2")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("鍐椾綑瀛楁2 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField3")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("鍐椾綑瀛楁3 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("Remark")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("澶囨敞");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int")
+                        .HasComment("鎺掑簭");
+
+                    b.Property<string>("StoreCode")
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("浠撳簱浠g爜");
+
+                    b.Property<string>("StoreName")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("浠撳簱鍚嶇О");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("AreaName");
+
+                    b.ToTable("scms_wmsareas", (string)null);
+
+                    b.HasComment("搴撳尯琛�");
+                });
+
+            modelBuilder.Entity("CMS.Plugin.HIAWms.Domain.WmsContainers.WmsContainer", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("char(36)");
+
+                    b.Property<string>("ConcurrencyStamp")
+                        .IsConcurrencyToken()
+                        .HasMaxLength(40)
+                        .HasColumnType("varchar(40)")
+                        .HasColumnName("ConcurrencyStamp");
+
+                    b.Property<string>("ContainerNo")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("鎵樼洏缂栧彿");
+
+                    b.Property<int>("ContainerStatus")
+                        .HasColumnType("int")
+                        .HasComment("鎵樼洏鐘舵��");
+
+                    b.Property<int>("ContainerType")
+                        .HasColumnType("int")
+                        .HasComment("鎵樼洏绫诲瀷");
+
+                    b.Property<DateTime>("CreationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("CreationTime");
+
+                    b.Property<Guid?>("CreatorId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("CreatorId");
+
+                    b.Property<Guid?>("DeleterId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("DeleterId");
+
+                    b.Property<DateTime?>("DeletionTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("DeletionTime");
+
+                    b.Property<int?>("ExceptionNumber")
+                        .HasColumnType("int")
+                        .HasComment("寮傚父鏁伴噺");
+
+                    b.Property<string>("ExtraProperties")
+                        .HasColumnType("longtext")
+                        .HasColumnName("ExtraProperties");
+
+                    b.Property<bool>("IsDeleted")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasColumnName("IsDeleted");
+
+                    b.Property<bool?>("IsDisabled")
+                        .HasColumnType("tinyint(1)")
+                        .HasComment("鏄惁绂佺敤");
+
+                    b.Property<DateTime?>("LastModificationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("LastModificationTime");
+
+                    b.Property<Guid?>("LastModifierId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("LastModifierId");
+
+                    b.Property<decimal?>("LimitHeight")
+                        .HasPrecision(18, 2)
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("闄愰珮");
+
+                    b.Property<decimal?>("LimitLength")
+                        .HasPrecision(18, 2)
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("闄愰暱");
+
+                    b.Property<decimal?>("LimitWidth")
+                        .HasPrecision(18, 2)
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("闄愬");
+
+                    b.Property<int?>("MaterialNumber")
+                        .HasColumnType("int")
+                        .HasComment("鐗╂枡鏁伴噺");
+
+                    b.Property<decimal?>("MaxWeight")
+                        .HasPrecision(18, 2)
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("杞介噸涓婇檺");
+
+                    b.Property<string>("RedundantField1")
+                        .HasMaxLength(200)
+                        .HasColumnType("varchar(200)")
+                        .HasComment("鍐椾綑瀛楁1 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField2")
+                        .HasMaxLength(200)
+                        .HasColumnType("varchar(200)")
+                        .HasComment("鍐椾綑瀛楁2 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField3")
+                        .HasMaxLength(200)
+                        .HasColumnType("varchar(200)")
+                        .HasComment("鍐椾綑瀛楁3 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("Remark")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("澶囨敞");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int")
+                        .HasComment("鎺掑簭");
+
+                    b.Property<decimal?>("SpecHeight")
+                        .HasPrecision(18, 2)
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("楂樺害");
+
+                    b.Property<decimal?>("SpecLength")
+                        .HasPrecision(18, 2)
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("闀垮害");
+
+                    b.Property<decimal?>("SpecWidth")
+                        .HasPrecision(18, 2)
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("瀹藉害");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("ContainerNo")
+                        .IsUnique();
+
+                    b.HasIndex("ContainerStatus");
+
+                    b.HasIndex("ContainerType");
+
+                    b.ToTable("scms_wmscontainers", (string)null);
+
+                    b.HasComment("鎵樼洏淇℃伅琛�");
+                });
+
+            modelBuilder.Entity("CMS.Plugin.HIAWms.Domain.WmsMaterialInfos.WmsMaterialInfo", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("char(36)");
+
+                    b.Property<int?>("CheckStatus")
+                        .HasColumnType("int")
+                        .HasComment("妫�楠岀姸鎬�(0:鏈楠�,1:妫�楠岄�氳繃,2:妫�楠屼笉閫氳繃)");
+
+                    b.Property<string>("ConcurrencyStamp")
+                        .IsConcurrencyToken()
+                        .HasMaxLength(40)
+                        .HasColumnType("varchar(40)")
+                        .HasColumnName("ConcurrencyStamp");
+
+                    b.Property<DateTime>("CreationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("CreationTime");
+
+                    b.Property<Guid?>("CreatorId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("CreatorId");
+
+                    b.Property<Guid?>("DeleterId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("DeleterId");
+
+                    b.Property<DateTime?>("DeletionTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("DeletionTime");
+
+                    b.Property<string>("ExtraProperties")
+                        .HasColumnType("longtext")
+                        .HasColumnName("ExtraProperties");
+
+                    b.Property<bool>("IsDeleted")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasColumnName("IsDeleted");
+
+                    b.Property<bool?>("IsDisabled")
+                        .HasColumnType("tinyint(1)")
+                        .HasComment("鏄惁绂佺敤");
+
+                    b.Property<DateTime?>("LastModificationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("LastModificationTime");
+
+                    b.Property<Guid?>("LastModifierId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("LastModifierId");
+
+                    b.Property<string>("MaterialBatch")
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("鐗╂枡鎵瑰彿");
+
+                    b.Property<string>("MaterialId")
+                        .IsRequired()
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鐗╂枡鍞竴鐮�");
+
+                    b.Property<string>("MaterialModel")
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("鏈哄瀷/瑙勬牸");
+
+                    b.Property<string>("MaterialName")
+                        .IsRequired()
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("鐗╂枡鍚嶇О");
+
+                    b.Property<string>("MaterialNo")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("鐗╂枡浠e彿");
+
+                    b.Property<string>("RedundantField1")
+                        .HasMaxLength(255)
+                        .HasColumnType("varchar(255)")
+                        .HasComment("鍐椾綑瀛楁1");
+
+                    b.Property<string>("RedundantField2")
+                        .HasMaxLength(255)
+                        .HasColumnType("varchar(255)")
+                        .HasComment("鍐椾綑瀛楁2");
+
+                    b.Property<string>("RedundantField3")
+                        .HasMaxLength(255)
+                        .HasColumnType("varchar(255)")
+                        .HasComment("鍐椾綑瀛楁3");
+
+                    b.Property<string>("Remark")
+                        .HasMaxLength(500)
+                        .HasColumnType("varchar(500)")
+                        .HasComment("澶囨敞");
+
+                    b.Property<int>("Sort")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasDefaultValue(0)
+                        .HasComment("鎺掑簭");
+
+                    b.Property<int?>("StockNumber")
+                        .HasColumnType("int")
+                        .HasComment("搴撳瓨鏁伴噺");
+
+                    b.Property<string>("SupplierCode")
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("渚涘簲鍟嗙紪鍙�");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CheckStatus");
+
+                    b.HasIndex("MaterialBatch");
+
+                    b.HasIndex("MaterialId")
+                        .IsUnique();
+
+                    b.HasIndex("MaterialName");
+
+                    b.HasIndex("MaterialNo")
+                        .IsUnique();
+
+                    b.HasIndex("SupplierCode");
+
+                    b.ToTable("scms_wmsmaterialinfos", (string)null);
+
+                    b.HasComment("WMS鐗╂枡淇℃伅琛�");
+                });
+
+            modelBuilder.Entity("CMS.Plugin.HIAWms.Domain.WmsMaterials.WmsMaterial", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("char(36)");
+
+                    b.Property<string>("Certification")
+                        .HasMaxLength(128)
+                        .HasColumnType("varchar(128)")
+                        .HasComment("璇佷功缂栧彿");
+
+                    b.Property<string>("ConcurrencyStamp")
+                        .IsConcurrencyToken()
+                        .HasMaxLength(40)
+                        .HasColumnType("varchar(40)")
+                        .HasColumnName("ConcurrencyStamp");
+
+                    b.Property<DateTime>("CreationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("CreationTime");
+
+                    b.Property<Guid?>("CreatorId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("CreatorId");
+
+                    b.Property<Guid?>("DeleterId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("DeleterId");
+
+                    b.Property<DateTime?>("DeletionTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("DeletionTime");
+
+                    b.Property<string>("ExtraProperties")
+                        .HasColumnType("longtext")
+                        .HasColumnName("ExtraProperties");
+
+                    b.Property<string>("Factory")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鐢熶骇宸ュ巶");
+
+                    b.Property<bool>("IsDeleted")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasColumnName("IsDeleted");
+
+                    b.Property<bool?>("IsDisabled")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasComment("鏄惁绂佺敤");
+
+                    b.Property<int>("IsMainBranch")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasDefaultValue(2)
+                        .HasComment("鏄惁涓轰富鏀");
+
+                    b.Property<DateTime?>("LastModificationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("LastModificationTime");
+
+                    b.Property<Guid?>("LastModifierId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("LastModifierId");
+
+                    b.Property<decimal>("Length")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("闀垮害锛堝崟浣嶏細m锛�");
+
+                    b.Property<string>("MaterialCode")
+                        .IsRequired()
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鐗╂枡缂栫爜锛堝敮涓�鏍囪瘑锛�");
+
+                    b.Property<string>("MaterialModel")
+                        .HasMaxLength(128)
+                        .HasColumnType("varchar(128)")
+                        .HasComment("鍨嬪彿");
+
+                    b.Property<string>("MaterialName")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("varchar(128)")
+                        .HasComment("鐗╂枡鍚嶇О");
+
+                    b.Property<string>("MaterialQuality")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鏉愯川锛堝锛�304涓嶉攬閽級");
+
+                    b.Property<int>("MaterialType")
+                        .HasColumnType("int")
+                        .HasComment("鐗╂枡绫诲瀷锛堟灇涓惧�硷級");
+
+                    b.Property<decimal>("OuterDiameter")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("澶栧緞锛堝崟浣嶏細mm锛�");
+
+                    b.Property<string>("PrimaryUnit")
+                        .HasMaxLength(20)
+                        .HasColumnType("varchar(20)")
+                        .HasComment("涓诲崟浣嶏紙濡傦細kg銆乵銆佷釜锛�");
+
+                    b.Property<int>("PurchaseType")
+                        .HasColumnType("int")
+                        .HasComment("閲囪喘绫诲瀷锛堟灇涓惧�硷級");
+
+                    b.Property<string>("RedundantField1")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍐椾綑瀛楁1 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField2")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍐椾綑瀛楁2 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField3")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍐椾綑瀛楁3 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("Remark")
+                        .HasMaxLength(500)
+                        .HasColumnType("varchar(500)")
+                        .HasComment("澶囨敞");
+
+                    b.Property<int>("Sort")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasDefaultValue(0)
+                        .HasComment("鎺掑簭");
+
+                    b.Property<string>("Standard")
+                        .HasMaxLength(128)
+                        .HasColumnType("varchar(128)")
+                        .HasComment("瑙勬牸/鏍囧噯锛堝锛欸B/T 8163-2018锛�");
+
+                    b.Property<decimal>("WallThickness")
+                        .HasColumnType("decimal(18,2)")
+                        .HasComment("澹佸帤锛堝崟浣嶏細mm锛�");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("MaterialCode")
+                        .IsUnique();
+
+                    b.HasIndex("MaterialName");
+
+                    b.HasIndex("MaterialType");
+
+                    b.HasIndex("PurchaseType");
+
+                    b.ToTable("scms_wmsmaterials", (string)null);
+
+                    b.HasComment("鐗╂枡鍩虹淇℃伅琛�");
+                });
+
+            modelBuilder.Entity("CMS.Plugin.HIAWms.Domain.WmsMaterialStocks.WmsMaterialStock", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("char(36)");
+
+                    b.Property<string>("AreaCode")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鍖哄煙缂栧彿");
+
+                    b.Property<string>("AreaName")
+                        .HasMaxLength(128)
+                        .HasColumnType("varchar(128)")
+                        .HasComment("搴撳尯鍚嶇О");
+
+                    b.Property<int?>("CheckStatus")
+                        .HasColumnType("int")
+                        .HasComment("妫�楠岀姸鎬�(1:鏈楠�,2:妫�楠岄�氳繃,3:妫�楠屼笉閫氳繃)");
+
+                    b.Property<string>("ConcurrencyStamp")
+                        .IsConcurrencyToken()
+                        .HasMaxLength(40)
+                        .HasColumnType("varchar(40)")
+                        .HasColumnName("ConcurrencyStamp");
+
+                    b.Property<string>("ContainerNo")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("瀹瑰櫒缂栧彿");
+
+                    b.Property<int>("ContainerStatus")
+                        .HasColumnType("int")
+                        .HasComment("瀹瑰櫒鐘舵��");
+
+                    b.Property<int>("ContainerType")
+                        .HasColumnType("int")
+                        .HasComment("瀹瑰櫒绫诲瀷");
+
+                    b.Property<DateTime>("CreationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("CreationTime");
+
+                    b.Property<Guid?>("CreatorId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("CreatorId");
+
+                    b.Property<Guid?>("DeleterId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("DeleterId");
+
+                    b.Property<DateTime?>("DeletionTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("DeletionTime");
+
+                    b.Property<int>("EmptyContainer")
+                        .HasColumnType("int")
+                        .HasComment("鏄惁绌烘墭(2:鍚�,1:鏄�)");
+
+                    b.Property<string>("ExtraProperties")
+                        .HasColumnType("longtext")
+                        .HasColumnName("ExtraProperties");
+
+                    b.Property<DateTime?>("InStockTime")
+                        .HasColumnType("datetime(6)")
+                        .HasComment("鍏ュ簱鏃堕棿");
+
+                    b.Property<bool>("IsDeleted")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasColumnName("IsDeleted");
+
+                    b.Property<bool?>("IsDisabled")
+                        .HasColumnType("tinyint(1)")
+                        .HasComment("鏄惁绂佺敤");
+
+                    b.Property<int>("IsLock")
+                        .HasColumnType("int")
+                        .HasComment("鏄惁閿佸畾(2:鏈攣瀹�,1:宸查攣瀹�)");
+
+                    b.Property<DateTime?>("LastModificationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("LastModificationTime");
+
+                    b.Property<Guid?>("LastModifierId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("LastModifierId");
+
+                    b.Property<string>("MaterialBatch")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鐗╂枡鎵规");
+
+                    b.Property<string>("MaterialId")
+                        .IsRequired()
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鐗╂枡ID");
+
+                    b.Property<string>("MaterialModel")
+                        .HasMaxLength(128)
+                        .HasColumnType("varchar(128)")
+                        .HasComment("鏈哄瀷/瑙勬牸");
+
+                    b.Property<string>("MaterialName")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("varchar(128)")
+                        .HasComment("鐗╂枡鍚嶇О");
+
+                    b.Property<string>("MaterialNo")
+                        .IsRequired()
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鐗╂枡缂栧彿");
+
+                    b.Property<string>("PlaceNo")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("搴撲綅缂栧彿");
+
+                    b.Property<int>("PlaceStatus")
+                        .HasColumnType("int")
+                        .HasComment("搴撲綅鐘舵��;");
+
+                    b.Property<string>("RedundantField1")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍐椾綑瀛楁1 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField2")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍐椾綑瀛楁2 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField3")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍐椾綑瀛楁3 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("Remark")
+                        .HasMaxLength(500)
+                        .HasColumnType("varchar(500)")
+                        .HasComment("澶囨敞");
+
+                    b.Property<int>("Sort")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasDefaultValue(0)
+                        .HasComment("鎺掑簭");
+
+                    b.Property<int>("StockNumber")
+                        .HasColumnType("int")
+                        .HasComment("搴撳瓨鏁伴噺");
+
+                    b.Property<int>("StorageTypeNo")
+                        .HasColumnType("int")
+                        .HasComment("搴撲綅绫诲瀷");
+
+                    b.Property<string>("SupplierCode")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("渚涘簲鍟嗙紪鍙�");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("AreaCode");
+
+                    b.HasIndex("ContainerNo");
+
+                    b.HasIndex("MaterialName");
+
+                    b.HasIndex("MaterialNo")
+                        .IsUnique();
+
+                    b.HasIndex("PlaceNo");
+
+                    b.HasIndex("MaterialBatch", "SupplierCode");
+
+                    b.ToTable("scms_wmsmaterialstocks", (string)null);
+
+                    b.HasComment("WMS鐗╂枡搴撳瓨琛�");
+                });
+
+            modelBuilder.Entity("CMS.Plugin.HIAWms.Domain.WmsPlaces.WmsPlace", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("char(36)");
+
+                    b.Property<int>("Aisle")
+                        .HasColumnType("int")
+                        .HasComment("宸烽亾");
+
+                    b.Property<string>("AreaCode")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("鎵�鍦ㄥ簱鍖�");
+
+                    b.Property<int>("ColumnNo")
+                        .HasColumnType("int")
+                        .HasComment("鍒�");
+
+                    b.Property<string>("ConcurrencyStamp")
+                        .IsConcurrencyToken()
+                        .HasMaxLength(40)
+                        .HasColumnType("varchar(40)")
+                        .HasColumnName("ConcurrencyStamp");
+
+                    b.Property<DateTime>("CreationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("CreationTime");
+
+                    b.Property<Guid?>("CreatorId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("CreatorId");
+
+                    b.Property<Guid?>("DeleterId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("DeleterId");
+
+                    b.Property<DateTime?>("DeletionTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("DeletionTime");
+
+                    b.Property<int>("EmptyContainer")
+                        .HasColumnType("int")
+                        .HasComment("鏄惁绌烘墭");
+
+                    b.Property<string>("ExtraProperties")
+                        .HasColumnType("longtext")
+                        .HasColumnName("ExtraProperties");
+
+                    b.Property<bool>("IsDeleted")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasColumnName("IsDeleted");
+
+                    b.Property<bool?>("IsDisabled")
+                        .HasColumnType("tinyint(1)")
+                        .HasComment("鏄惁绂佺敤");
+
+                    b.Property<int>("Islock")
+                        .HasColumnType("int")
+                        .HasComment("鏄惁閿佸畾");
+
+                    b.Property<DateTime?>("LastModificationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("LastModificationTime");
+
+                    b.Property<Guid?>("LastModifierId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("LastModifierId");
+
+                    b.Property<int>("LayerNo")
+                        .HasColumnType("int")
+                        .HasComment("灞�");
+
+                    b.Property<string>("PlaceNo")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("缂栧彿");
+
+                    b.Property<int>("PlaceStatus")
+                        .HasColumnType("int")
+                        .HasComment("璐т綅鐘舵��");
+
+                    b.Property<string>("RedundantField1")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("鍐椾綑瀛楁1 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField2")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("鍐椾綑瀛楁2 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField3")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("鍐椾綑瀛楁3 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("Remark")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("澶囨敞");
+
+                    b.Property<int>("RowNo")
+                        .HasColumnType("int")
+                        .HasComment("鎺�");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int")
+                        .HasComment("鎺掑簭");
+
+                    b.Property<int>("StorageTypeNo")
+                        .HasColumnType("int")
+                        .HasComment("璐т綅绫诲瀷");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("AreaCode");
+
+                    b.HasIndex("PlaceNo")
+                        .IsUnique();
+
+                    b.HasIndex("PlaceStatus");
+
+                    b.HasIndex("StorageTypeNo");
+
+                    b.ToTable("scms_wmsplaces", (string)null);
+
+                    b.HasComment("搴撲綅琛�");
+                });
+
+            modelBuilder.Entity("CMS.Plugin.HIAWms.Domain.WmsStores.WmsStore", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("char(36)");
+
+                    b.Property<string>("ConcurrencyStamp")
+                        .IsConcurrencyToken()
+                        .HasMaxLength(40)
+                        .HasColumnType("varchar(40)")
+                        .HasColumnName("ConcurrencyStamp");
+
+                    b.Property<DateTime>("CreationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("CreationTime");
+
+                    b.Property<Guid?>("CreatorId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("CreatorId");
+
+                    b.Property<Guid?>("DeleterId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("DeleterId");
+
+                    b.Property<DateTime?>("DeletionTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("DeletionTime");
+
+                    b.Property<string>("ExtraProperties")
+                        .HasColumnType("longtext")
+                        .HasColumnName("ExtraProperties");
+
+                    b.Property<bool>("IsDeleted")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasColumnName("IsDeleted");
+
+                    b.Property<bool?>("IsDisabled")
+                        .HasColumnType("tinyint(1)")
+                        .HasComment("鏄惁绂佺敤");
+
+                    b.Property<DateTime?>("LastModificationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("LastModificationTime");
+
+                    b.Property<Guid?>("LastModifierId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("LastModifierId");
+
+                    b.Property<string>("RedundantField1")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("鍐椾綑瀛楁1 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField2")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("鍐椾綑瀛楁2 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField3")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("鍐椾綑瀛楁3 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("Remark")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("澶囨敞");
+
+                    b.Property<int>("Sort")
+                        .HasColumnType("int")
+                        .HasComment("鎺掑簭");
+
+                    b.Property<string>("StoreCode")
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("浠撳簱浠g爜");
+
+                    b.Property<string>("StoreName")
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("浠撳簱鍚嶇О");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("StoreName");
+
+                    b.ToTable("scms_wmsstores", (string)null);
+
+                    b.HasComment("浠撳簱淇℃伅琛�");
+                });
+#pragma warning restore 612, 618
+        }
+    }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505121050_InitialCreate3.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505121050_InitialCreate3.cs
new file mode 100644
index 0000000..ea59180
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505121050_InitialCreate3.cs
@@ -0,0 +1,28 @@
+锘縰sing Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace CMS.Plugin.HIAWms.MySQL.Migrations
+{
+    public partial class InitialCreate3 : Migration
+    {
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.AddColumn<string>(
+                name: "MaterialModel",
+                table: "scms_wmsmaterials",
+                type: "varchar(128)",
+                maxLength: 128,
+                nullable: true,
+                comment: "鍨嬪彿")
+                .Annotation("MySql:CharSet", "utf8mb4");
+        }
+
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropColumn(
+                name: "MaterialModel",
+                table: "scms_wmsmaterials");
+        }
+    }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/CMSPluginDbContextModelSnapshot.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/CMSPluginDbContextModelSnapshot.cs
index 88d2312..6ec187c 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/CMSPluginDbContextModelSnapshot.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/CMSPluginDbContextModelSnapshot.cs
@@ -284,6 +284,144 @@
                     b.HasComment("鎵樼洏淇℃伅琛�");
                 });
 
+            modelBuilder.Entity("CMS.Plugin.HIAWms.Domain.WmsMaterialInfos.WmsMaterialInfo", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("char(36)");
+
+                    b.Property<int?>("CheckStatus")
+                        .HasColumnType("int")
+                        .HasComment("妫�楠岀姸鎬�(0:鏈楠�,1:妫�楠岄�氳繃,2:妫�楠屼笉閫氳繃)");
+
+                    b.Property<string>("ConcurrencyStamp")
+                        .IsConcurrencyToken()
+                        .HasMaxLength(40)
+                        .HasColumnType("varchar(40)")
+                        .HasColumnName("ConcurrencyStamp");
+
+                    b.Property<DateTime>("CreationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("CreationTime");
+
+                    b.Property<Guid?>("CreatorId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("CreatorId");
+
+                    b.Property<Guid?>("DeleterId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("DeleterId");
+
+                    b.Property<DateTime?>("DeletionTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("DeletionTime");
+
+                    b.Property<string>("ExtraProperties")
+                        .HasColumnType("longtext")
+                        .HasColumnName("ExtraProperties");
+
+                    b.Property<bool>("IsDeleted")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasColumnName("IsDeleted");
+
+                    b.Property<bool?>("IsDisabled")
+                        .HasColumnType("tinyint(1)")
+                        .HasComment("鏄惁绂佺敤");
+
+                    b.Property<DateTime?>("LastModificationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("LastModificationTime");
+
+                    b.Property<Guid?>("LastModifierId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("LastModifierId");
+
+                    b.Property<string>("MaterialBatch")
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("鐗╂枡鎵瑰彿");
+
+                    b.Property<string>("MaterialId")
+                        .IsRequired()
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鐗╂枡鍞竴鐮�");
+
+                    b.Property<string>("MaterialModel")
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("鏈哄瀷/瑙勬牸");
+
+                    b.Property<string>("MaterialName")
+                        .IsRequired()
+                        .HasMaxLength(100)
+                        .HasColumnType("varchar(100)")
+                        .HasComment("鐗╂枡鍚嶇О");
+
+                    b.Property<string>("MaterialNo")
+                        .IsRequired()
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("鐗╂枡浠e彿");
+
+                    b.Property<string>("RedundantField1")
+                        .HasMaxLength(255)
+                        .HasColumnType("varchar(255)")
+                        .HasComment("鍐椾綑瀛楁1");
+
+                    b.Property<string>("RedundantField2")
+                        .HasMaxLength(255)
+                        .HasColumnType("varchar(255)")
+                        .HasComment("鍐椾綑瀛楁2");
+
+                    b.Property<string>("RedundantField3")
+                        .HasMaxLength(255)
+                        .HasColumnType("varchar(255)")
+                        .HasComment("鍐椾綑瀛楁3");
+
+                    b.Property<string>("Remark")
+                        .HasMaxLength(500)
+                        .HasColumnType("varchar(500)")
+                        .HasComment("澶囨敞");
+
+                    b.Property<int>("Sort")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasDefaultValue(0)
+                        .HasComment("鎺掑簭");
+
+                    b.Property<int?>("StockNumber")
+                        .HasColumnType("int")
+                        .HasComment("搴撳瓨鏁伴噺");
+
+                    b.Property<string>("SupplierCode")
+                        .HasMaxLength(50)
+                        .HasColumnType("varchar(50)")
+                        .HasComment("渚涘簲鍟嗙紪鍙�");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CheckStatus");
+
+                    b.HasIndex("MaterialBatch");
+
+                    b.HasIndex("MaterialId")
+                        .IsUnique();
+
+                    b.HasIndex("MaterialName");
+
+                    b.HasIndex("MaterialNo")
+                        .IsUnique();
+
+                    b.HasIndex("SupplierCode");
+
+                    b.ToTable("scms_wmsmaterialinfos", (string)null);
+
+                    b.HasComment("WMS鐗╂枡淇℃伅琛�");
+                });
+
             modelBuilder.Entity("CMS.Plugin.HIAWms.Domain.WmsMaterials.WmsMaterial", b =>
                 {
                     b.Property<Guid>("Id")
@@ -362,6 +500,11 @@
                         .HasColumnType("varchar(64)")
                         .HasComment("鐗╂枡缂栫爜锛堝敮涓�鏍囪瘑锛�");
 
+                    b.Property<string>("MaterialModel")
+                        .HasMaxLength(128)
+                        .HasColumnType("varchar(128)")
+                        .HasComment("鍨嬪彿");
+
                     b.Property<string>("MaterialName")
                         .IsRequired()
                         .HasMaxLength(128)
@@ -441,6 +584,191 @@
                     b.HasComment("鐗╂枡鍩虹淇℃伅琛�");
                 });
 
+            modelBuilder.Entity("CMS.Plugin.HIAWms.Domain.WmsMaterialStocks.WmsMaterialStock", b =>
+                {
+                    b.Property<Guid>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("char(36)");
+
+                    b.Property<string>("AreaCode")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鍖哄煙缂栧彿");
+
+                    b.Property<string>("AreaName")
+                        .HasMaxLength(128)
+                        .HasColumnType("varchar(128)")
+                        .HasComment("搴撳尯鍚嶇О");
+
+                    b.Property<int?>("CheckStatus")
+                        .HasColumnType("int")
+                        .HasComment("妫�楠岀姸鎬�(1:鏈楠�,2:妫�楠岄�氳繃,3:妫�楠屼笉閫氳繃)");
+
+                    b.Property<string>("ConcurrencyStamp")
+                        .IsConcurrencyToken()
+                        .HasMaxLength(40)
+                        .HasColumnType("varchar(40)")
+                        .HasColumnName("ConcurrencyStamp");
+
+                    b.Property<string>("ContainerNo")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("瀹瑰櫒缂栧彿");
+
+                    b.Property<int>("ContainerStatus")
+                        .HasColumnType("int")
+                        .HasComment("瀹瑰櫒鐘舵��");
+
+                    b.Property<int>("ContainerType")
+                        .HasColumnType("int")
+                        .HasComment("瀹瑰櫒绫诲瀷");
+
+                    b.Property<DateTime>("CreationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("CreationTime");
+
+                    b.Property<Guid?>("CreatorId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("CreatorId");
+
+                    b.Property<Guid?>("DeleterId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("DeleterId");
+
+                    b.Property<DateTime?>("DeletionTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("DeletionTime");
+
+                    b.Property<int>("EmptyContainer")
+                        .HasColumnType("int")
+                        .HasComment("鏄惁绌烘墭(2:鍚�,1:鏄�)");
+
+                    b.Property<string>("ExtraProperties")
+                        .HasColumnType("longtext")
+                        .HasColumnName("ExtraProperties");
+
+                    b.Property<DateTime?>("InStockTime")
+                        .HasColumnType("datetime(6)")
+                        .HasComment("鍏ュ簱鏃堕棿");
+
+                    b.Property<bool>("IsDeleted")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false)
+                        .HasColumnName("IsDeleted");
+
+                    b.Property<bool?>("IsDisabled")
+                        .HasColumnType("tinyint(1)")
+                        .HasComment("鏄惁绂佺敤");
+
+                    b.Property<int>("IsLock")
+                        .HasColumnType("int")
+                        .HasComment("鏄惁閿佸畾(2:鏈攣瀹�,1:宸查攣瀹�)");
+
+                    b.Property<DateTime?>("LastModificationTime")
+                        .HasColumnType("datetime(6)")
+                        .HasColumnName("LastModificationTime");
+
+                    b.Property<Guid?>("LastModifierId")
+                        .HasColumnType("char(36)")
+                        .HasColumnName("LastModifierId");
+
+                    b.Property<string>("MaterialBatch")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鐗╂枡鎵规");
+
+                    b.Property<string>("MaterialId")
+                        .IsRequired()
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鐗╂枡ID");
+
+                    b.Property<string>("MaterialModel")
+                        .HasMaxLength(128)
+                        .HasColumnType("varchar(128)")
+                        .HasComment("鏈哄瀷/瑙勬牸");
+
+                    b.Property<string>("MaterialName")
+                        .IsRequired()
+                        .HasMaxLength(128)
+                        .HasColumnType("varchar(128)")
+                        .HasComment("鐗╂枡鍚嶇О");
+
+                    b.Property<string>("MaterialNo")
+                        .IsRequired()
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("鐗╂枡缂栧彿");
+
+                    b.Property<string>("PlaceNo")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("搴撲綅缂栧彿");
+
+                    b.Property<int>("PlaceStatus")
+                        .HasColumnType("int")
+                        .HasComment("搴撲綅鐘舵��;");
+
+                    b.Property<string>("RedundantField1")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍐椾綑瀛楁1 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField2")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍐椾綑瀛楁2 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("RedundantField3")
+                        .HasMaxLength(256)
+                        .HasColumnType("varchar(256)")
+                        .HasComment("鍐椾綑瀛楁3 - 棰勭暀鎵╁睍鐢ㄩ��");
+
+                    b.Property<string>("Remark")
+                        .HasMaxLength(500)
+                        .HasColumnType("varchar(500)")
+                        .HasComment("澶囨敞");
+
+                    b.Property<int>("Sort")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int")
+                        .HasDefaultValue(0)
+                        .HasComment("鎺掑簭");
+
+                    b.Property<int>("StockNumber")
+                        .HasColumnType("int")
+                        .HasComment("搴撳瓨鏁伴噺");
+
+                    b.Property<int>("StorageTypeNo")
+                        .HasColumnType("int")
+                        .HasComment("搴撲綅绫诲瀷");
+
+                    b.Property<string>("SupplierCode")
+                        .HasMaxLength(64)
+                        .HasColumnType("varchar(64)")
+                        .HasComment("渚涘簲鍟嗙紪鍙�");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("AreaCode");
+
+                    b.HasIndex("ContainerNo");
+
+                    b.HasIndex("MaterialName");
+
+                    b.HasIndex("MaterialNo")
+                        .IsUnique();
+
+                    b.HasIndex("PlaceNo");
+
+                    b.HasIndex("MaterialBatch", "SupplierCode");
+
+                    b.ToTable("scms_wmsmaterialstocks", (string)null);
+
+                    b.HasComment("WMS鐗╂枡搴撳瓨琛�");
+                });
+
             modelBuilder.Entity("CMS.Plugin.HIAWms.Domain.WmsPlaces.WmsPlace", b =>
                 {
                     b.Property<Guid>("Id")
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Scripts/UpdateMigrations.bat b/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Scripts/UpdateMigrations.bat
index 101a898..5254e36 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Scripts/UpdateMigrations.bat
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Scripts/UpdateMigrations.bat
@@ -1,5 +1,5 @@
 cd ../
-dotnet ef migrations add InitialCreate1 -c CMSPluginDbContext -o Migrations
+dotnet ef migrations add InitialCreate3 -c CMSPluginDbContext -o Migrations
 ::dotnet ef migrations add Update1 -c CMSPluginDbContext -o Migrations
 ::dotnet ef migrations add Update2 -c CMSPluginDbContext -o Migrations
 ::dotnet ef migrations add Update3 -c CMSPluginDbContext -o Migrations
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.PostgreSql/CMSPluginDbContext.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.PostgreSql/CMSPluginDbContext.cs
index de77d36..dac2f4d 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.PostgreSql/CMSPluginDbContext.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.PostgreSql/CMSPluginDbContext.cs
@@ -38,6 +38,7 @@
         builder.ConfigureWmsPlace();
         builder.ConfigureWmsMaterial();
         builder.ConfigureWmsMaterialStock();
+        builder.ConfigureWmsMaterialInfo();
         /* Configure your own tables/entities inside here */
 
         //builder.Entity<YourEntity>(b =>
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms.SqlServer/CMSPluginDbContext.cs b/HIAWms/server/src/CMS.Plugin.HIAWms.SqlServer/CMSPluginDbContext.cs
index 7a4e331..74d194a 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms.SqlServer/CMSPluginDbContext.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms.SqlServer/CMSPluginDbContext.cs
@@ -38,6 +38,7 @@
         builder.ConfigureWmsPlace();
         builder.ConfigureWmsMaterial();
         builder.ConfigureWmsMaterialStock();
+        builder.ConfigureWmsMaterialInfo();
 
         /* Configure your own tables/entities inside here */
 
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialInfoController.cs b/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialInfoController.cs
new file mode 100644
index 0000000..5a15adb
--- /dev/null
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialInfoController.cs
@@ -0,0 +1,187 @@
+using Ao.Lang;
+using CMS.Extensions.Abp.AspNetCore.Mvc.Filters;
+using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialInfos;
+using CMS.Plugin.HIAWms.Application.Contracts.Services;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using MiniExcelLibs;
+using System.Reflection;
+using Volo.Abp;
+using Volo.Abp.Application.Dtos;
+
+namespace CMS.Plugin.HIAWms.Controller
+{
+    /// <summary>
+    /// WmsMaterialInfo鏈嶅姟
+    /// </summary>
+    [ApiController]
+    [TypeFilter(typeof(CMSLanguageFilter))]
+    [TypeFilter(typeof(CMSUowActionFilter))]
+    [TypeFilter(typeof(CMSAuditActionFilter))]
+    [TypeFilter(typeof(CMSExceptionFilter))]
+    [Route("api/v{version:apiVersion}/HIAWms/[controller]")]
+    public class WmsMaterialInfoController : ControllerBase
+    {
+        private readonly IWmsMaterialInfoAppService _wmsmaterialinfoAppService;
+
+        /// <summary>
+        /// Initializes a new instance of the <see cref="WmsMaterialInfoController"/> class.
+        /// </summary>
+        /// <param name="wmsmaterialinfoAppService">The wmsmaterialinfo application service.</param>
+        public WmsMaterialInfoController(IWmsMaterialInfoAppService wmsmaterialinfoAppService)
+        {
+            _wmsmaterialinfoAppService = wmsmaterialinfoAppService;
+        }
+
+        /// <summary>
+        /// 鑾峰彇wmsmaterialinfo.
+        /// </summary>
+        /// <param name="id">鏍囪瘑绗�.</param>
+        /// <returns></returns>
+        [HttpGet]
+        [Route("{id}")]
+        public virtual Task<WmsMaterialInfoDto> GetAsync(Guid id)
+        {
+            return _wmsmaterialinfoAppService.GetAsync(id);
+        }
+
+        /// <summary>
+        /// 鑾峰彇wmsmaterialinfo鐨勫垪琛�.
+        /// </summary>
+        /// <param name="input">杈撳叆.</param>
+        /// <returns></returns>
+        [HttpGet]
+        public virtual Task<PagedResultDto<WmsMaterialInfoDto>> GetListAsync([FromQuery] GetWmsMaterialInfosInput input)
+        {
+            return _wmsmaterialinfoAppService.GetListAsync(input);
+        }
+
+        /// <summary>
+        /// 鍒涘缓wmsmaterialinfo.
+        /// </summary>
+        /// <param name="input">杈撳叆.</param>
+        /// <returns></returns>
+        //[Authorize]
+        [HttpPost]
+        public virtual Task<WmsMaterialInfoDto> CreateAsync(WmsMaterialInfoCreateDto input)
+        {
+            return _wmsmaterialinfoAppService.CreateAsync(input);
+        }
+
+        /// <summary>
+        /// 鏇存柊wmsmaterialinfo.
+        /// </summary>
+        /// <param name="id">鏍囪瘑绗�.</param>
+        /// <param name="input">杈撳叆.</param>
+        /// <returns></returns>
+        //[Authorize]
+        [HttpPut]
+        [Route("{id}")]
+        public virtual Task<WmsMaterialInfoDto> UpdateAsync(Guid id, WmsMaterialInfoUpdateDto input)
+        {
+            return _wmsmaterialinfoAppService.UpdateAsync(id, input);
+        }
+
+        /// <summary>
+        /// 鍏嬮殕WmsMaterialInfo.
+        /// </summary>
+        /// <param name="ids">Id闆嗗悎.</param>
+        /// <returns></returns>
+        //[Authorize]
+        [HttpPost]
+        [Route("Clone")]
+        public virtual Task<List<WmsMaterialInfoDto>> CloneAsync([FromBody] IEnumerable<Guid> ids)
+        {
+            return _wmsmaterialinfoAppService.CloneAsync(ids);
+        }
+
+        /// <summary>
+        /// 鍒犻櫎wmsmaterialinfo.
+        /// </summary>
+        /// <param name="id">鏍囪瘑绗�.</param>
+        /// <returns></returns>
+        //[Authorize]
+        [HttpDelete]
+        [Route("{id}")]
+        public virtual Task DeleteAsync(Guid id)
+        {
+            return _wmsmaterialinfoAppService.DeleteAsync(id);
+        }
+
+        /// <summary>
+        /// 鎵归噺鍒犻櫎wmsmaterialinfo.
+        /// </summary>
+        /// <param name="ids">The ids.</param>
+        /// <returns></returns>
+        //[Authorize]
+        [HttpDelete]
+        public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids)
+        {
+            return _wmsmaterialinfoAppService.DeleteManyAsync(ids);
+        }
+
+        /// <summary>
+        /// 璋冩暣鎺掑簭.
+        /// </summary>
+        /// <param name="id">鏍囪瘑绗�.</param>
+        /// <returns></returns>
+        [HttpPut]
+        [Route("{id}/AdjustSort/{sort}")]
+        public virtual Task AdjustSortAsync(Guid id, int sort)
+        {
+            return _wmsmaterialinfoAppService.AdjustSortAsync(id, sort);
+        }
+
+        /// <summary>
+        /// 瀵煎叆wmsmaterialinfo.
+        /// </summary>
+        /// <returns></returns>
+        [Authorize]
+        [HttpPost]
+        [Route("Import")]
+        public virtual async Task<IActionResult> ImportAsync(IFormFile file)
+        {
+            using var stream = new MemoryStream();
+            await file.CopyToAsync(stream);
+            stream.Seek(0L, SeekOrigin.Begin);
+
+            var sheetNames = stream.GetSheetNames();
+            var wmsmaterialinfoRows = sheetNames.Contains("閰嶇疆") ? MiniExcel.Query<WmsMaterialInfosImportModel.WmsMaterialInfoImportModel>(stream, sheetName: "閰嶇疆").ToList() : new();
+
+            if (!wmsmaterialinfoRows.Any())
+            {
+                throw new UserFriendlyException("璇锋鏌ュ鍏ョ殑琛ㄦ牸");
+            }
+
+            await _wmsmaterialinfoAppService.ImportAsync(new WmsMaterialInfosImportModel
+            {
+                WmsMaterialInfos = wmsmaterialinfoRows,
+            });
+
+            return Ok();
+        }
+
+        /// <summary>
+        /// 瀵煎嚭wmsmaterialinfo.
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet]
+        [Route("Export")]
+        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsMaterialInfosInput input)
+        {
+            input.MaxResultCount = int.MaxValue;
+            var exportData = await _wmsmaterialinfoAppService.ExportAsync(input);
+            var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WmsMaterialInfo瀵煎嚭妯℃澘.xlsx");
+            if (!System.IO.File.Exists(templatePath))
+            {
+                templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WmsMaterialInfo瀵煎嚭妯℃澘.xlsx");
+            }
+
+            var memoryStream = new MemoryStream();
+            await memoryStream.SaveAsByTemplateAsync(templatePath, exportData.Sheets);
+            memoryStream.Seek(0L, SeekOrigin.Begin);
+            return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = $"{exportData.FileName}_{DateTime.Now:yyyyMMddhhmmss}.xlsx" };
+        }
+    }
+}
diff --git a/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsPlaceController.cs b/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsPlaceController.cs
index 07c65ab..de889ce 100644
--- a/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsPlaceController.cs
+++ b/HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsPlaceController.cs
@@ -52,7 +52,7 @@
         /// <param name="input">杈撳叆.</param>
         /// <returns></returns>
         [HttpGet]
-        public virtual Task<PagedResultDto<WmsPlaceDto>> GetListAsync([FromQuery] GetWmsPlacesInput input)
+        public virtual Task<PagedResultDto<WmsPlaceDto>> GetListAsync([FromQuery] GetWmsMaterialInfoInput input)
         {
             return _wmsplaceAppService.GetListAsync(input);
         }
@@ -168,7 +168,7 @@
         /// <returns></returns>
         [HttpGet]
         [Route("Export")]
-        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsPlacesInput input)
+        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsMaterialInfoInput input)
         {
             input.MaxResultCount = int.MaxValue;
             var exportData = await _wmsplaceAppService.ExportAsync(input);
diff --git "a/HIAWms/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterialInfo\345\257\274\345\207\272\346\250\241\346\235\277.xlsx" "b/HIAWms/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterialInfo\345\257\274\345\207\272\346\250\241\346\235\277.xlsx"
new file mode 100644
index 0000000..4e15cde
--- /dev/null
+++ "b/HIAWms/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterialInfo\345\257\274\345\207\272\346\250\241\346\235\277.xlsx"
Binary files differ
diff --git "a/HIAWms/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterialStock\345\257\274\345\207\272\346\250\241\346\235\277.xlsx" "b/HIAWms/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterialStock\345\257\274\345\207\272\346\250\241\346\235\277.xlsx"
index 59dee9c..0f7d92e 100644
--- "a/HIAWms/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterialStock\345\257\274\345\207\272\346\250\241\346\235\277.xlsx"
+++ "b/HIAWms/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterialStock\345\257\274\345\207\272\346\250\241\346\235\277.xlsx"
Binary files differ
diff --git a/HIAWms/web/components.d.ts b/HIAWms/web/components.d.ts
index dfdfd24..135cdd6 100644
--- a/HIAWms/web/components.d.ts
+++ b/HIAWms/web/components.d.ts
@@ -22,6 +22,7 @@
     ElButton: typeof import('element-plus/es')['ElButton']
     ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
     ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
+    ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
     ElDialog: typeof import('element-plus/es')['ElDialog']
     ElDivider: typeof import('element-plus/es')['ElDivider']
     ElDrawer: typeof import('element-plus/es')['ElDrawer']
diff --git a/HIAWms/web/src/config/menu.ts b/HIAWms/web/src/config/menu.ts
index 1a0aaf6..39897c5 100644
--- a/HIAWms/web/src/config/menu.ts
+++ b/HIAWms/web/src/config/menu.ts
@@ -7,6 +7,13 @@
     "notPage": false
   },
   {
+    "name": "搴撳瓨淇℃伅",
+    "path": "/information-base/WmsMaterialStock",
+    "patchName": "WmsMaterialStock",
+    "icon": "p",
+    "notPage": false
+  },
+  {
     "name": "Wms鎵樼洏绠$悊",
     "path": "/information-base/WmsContainer",
     "patchName": "WmsContainer",
@@ -36,6 +43,13 @@
     "icon": "p",
     "notPage": false
   },
+  "WmsMaterialStock": {
+    "name": "搴撳瓨淇℃伅",
+    "path": "/information-base/WmsMaterialStock",
+    "patchName": "WmsMaterialStock",
+    "icon": "p",
+    "notPage": false
+  },
   "WmsContainer": {
     "name": "Wms鎵樼洏绠$悊",
     "path": "/information-base/WmsContainer",
diff --git a/HIAWms/web/src/widgets/HIAWms/Controllers/WmsMaterialDrawer.tsx b/HIAWms/web/src/widgets/HIAWms/Controllers/WmsMaterialDrawer.tsx
index 2e2946f..7e1295f 100644
--- a/HIAWms/web/src/widgets/HIAWms/Controllers/WmsMaterialDrawer.tsx
+++ b/HIAWms/web/src/widgets/HIAWms/Controllers/WmsMaterialDrawer.tsx
@@ -86,6 +86,12 @@
       rules: [{ required: true, message: '璇烽�夋嫨鐗╂枡绫诲瀷', trigger: 'change' }],
     },
     {
+      label: '鍨嬪彿',
+      prop: 'materialModel',
+      el: 'input',
+      placeholder: '璇疯緭鍏ュ瀷鍙�',
+    },
+    {
       label: '涓诲崟浣�',
       prop: 'primaryUnit',
       el: 'input',
@@ -214,6 +220,7 @@
       materialType: formData.value.materialType,
       primaryUnit: formData.value.primaryUnit,
       standard: formData.value.standard,
+      materialModel: formData.value.materialModel,
       outerDiameter: formData.value.outerDiameter,
       wallThickness: formData.value.wallThickness,
       materialQuality: formData.value.materialQuality,
@@ -278,6 +285,7 @@
         materialType: res.materialType,
         primaryUnit: res.primaryUnit,
         standard: res.standard,
+        materialModel: res.materialModel,
         outerDiameter: res.outerDiameter,
         wallThickness: res.wallThickness,
         materialQuality: res.materialQuality,
diff --git a/HIAWms/web/src/widgets/HIAWms/Views/Pages/WmsMaterial/Config.ts b/HIAWms/web/src/widgets/HIAWms/Views/Pages/WmsMaterial/Config.ts
index 2b0e6f5..a6762bf 100644
--- a/HIAWms/web/src/widgets/HIAWms/Views/Pages/WmsMaterial/Config.ts
+++ b/HIAWms/web/src/widgets/HIAWms/Views/Pages/WmsMaterial/Config.ts
@@ -21,6 +21,10 @@
     title: '鐗╂枡绫诲瀷',
   },
   {
+    field: 'materialModel',
+    title: '鐗╂枡鍨嬪彿',
+  },
+  {
     field: 'primaryUnit',
     title: '涓诲崟浣�',
   },
diff --git a/HIAWms/web/src/widgets/WmsContainer/Controllers/WmsContainer.ts b/HIAWms/web/src/widgets/WmsContainer/Controllers/WmsContainer.ts
index d3a9ab0..97ecbec 100644
--- a/HIAWms/web/src/widgets/WmsContainer/Controllers/WmsContainer.ts
+++ b/HIAWms/web/src/widgets/WmsContainer/Controllers/WmsContainer.ts
@@ -85,40 +85,40 @@
       divided: true,
       icon: 'o',
     },
-    {
-      label: '鍚戜笂娣诲姞',
-      fn: (c: CurrentType, pageNum: number) => {
-        current.value = null
-        sort.value = c.index + 1 + (pageNum - 1) * 50
-        dialogConfig.visible = true
-        dialogConfig.title = '娣诲姞'
-        dialogConfig.isAdd = false
-      },
-      divided: true,
-      icon: 'up',
-    },
-    {
-      label: '鍚戜笅娣诲姞',
-      fn: (c: CurrentType, pageNum: number) => {
-        current.value = null
-        sort.value = c.index + 2 + (pageNum - 1) * 50
-        dialogConfig.visible = true
-        dialogConfig.title = '娣诲姞'
-        dialogConfig.isAdd = false
-      },
-      divided: true,
-      icon: 'down',
-    },
-    {
-      label: '鍒涘缓鍓湰',
-      fn: async ({ row }: CurrentType) => {
-        await wmsContainer.cloneData([row.id])
-        ElMessage.success('鍒涘缓鍓湰鎴愬姛')
-        tableRef.value?.getList()
-      },
-      divided: true,
-      icon: 'copy',
-    },
+    // {
+    //   label: '鍚戜笂娣诲姞',
+    //   fn: (c: CurrentType, pageNum: number) => {
+    //     current.value = null
+    //     sort.value = c.index + 1 + (pageNum - 1) * 50
+    //     dialogConfig.visible = true
+    //     dialogConfig.title = '娣诲姞'
+    //     dialogConfig.isAdd = false
+    //   },
+    //   divided: true,
+    //   icon: 'up',
+    // },
+    // {
+    //   label: '鍚戜笅娣诲姞',
+    //   fn: (c: CurrentType, pageNum: number) => {
+    //     current.value = null
+    //     sort.value = c.index + 2 + (pageNum - 1) * 50
+    //     dialogConfig.visible = true
+    //     dialogConfig.title = '娣诲姞'
+    //     dialogConfig.isAdd = false
+    //   },
+    //   divided: true,
+    //   icon: 'down',
+    // },
+    // {
+    //   label: '鍒涘缓鍓湰',
+    //   fn: async ({ row }: CurrentType) => {
+    //     await wmsContainer.cloneData([row.id])
+    //     ElMessage.success('鍒涘缓鍓湰鎴愬姛')
+    //     tableRef.value?.getList()
+    //   },
+    //   divided: true,
+    //   icon: 'copy',
+    // },
     {
       label: '鍒犻櫎',
       fn: async (c: CurrentType) => {
diff --git a/HIAWms/web/src/widgets/WmsMaterialStock/Controllers/File.ts b/HIAWms/web/src/widgets/WmsMaterialStock/Controllers/File.ts
new file mode 100644
index 0000000..75397ed
--- /dev/null
+++ b/HIAWms/web/src/widgets/WmsMaterialStock/Controllers/File.ts
@@ -0,0 +1,31 @@
+import { importFileToService, exportFileToClient } from '@/api/file'
+import { ElMessage } from 'element-plus'
+import { downloadFile } from '@/utils'
+import dayjs from 'dayjs'
+
+export const useFile = () => {
+  /**
+   * 瀵煎叆鏂囦欢
+   * @param url
+   */
+  const importFile = async (url: string, file: File) => {
+    const formData = new FormData()
+    formData.append('file', file)
+    await importFileToService(url, formData)
+    ElMessage('瀵煎叆鎴愬姛')
+  }
+  /**
+   * 瀵煎嚭鏂囦欢
+   * @param url
+   */
+  const exportFile = async (url: string, params: any, name: string) => {
+    const res = await exportFileToClient(url, params)
+    downloadFile(res, `${name}_${dayjs().format('YYYYMMDDHHMMss')}.xlsx`)
+    ElMessage.success('瀵煎嚭鎴愬姛')
+  }
+
+  return {
+    importFile,
+    exportFile,
+  }
+}
diff --git a/HIAWms/web/src/widgets/WmsMaterialStock/Controllers/WmsMaterialStock.ts b/HIAWms/web/src/widgets/WmsMaterialStock/Controllers/WmsMaterialStock.ts
new file mode 100644
index 0000000..670166c
--- /dev/null
+++ b/HIAWms/web/src/widgets/WmsMaterialStock/Controllers/WmsMaterialStock.ts
@@ -0,0 +1,264 @@
+import { ref, onMounted, reactive, Ref, nextTick, computed } from 'vue'
+import { injectModel } from '@/libs/Provider/Provider'
+import { WmsMaterialStock } from '../Models/WmsMaterialStock'
+import { ElMessage } from 'element-plus'
+import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
+import { useFile } from './File'
+
+interface CurrentType {
+  row: any
+  index: number
+}
+export const useWmsMaterialStock = (props: any, ctx?: any) => {
+  const wmsMaterialStock = injectModel<WmsMaterialStock>('wmsMaterialStock')
+  const { exportFile } = useFile()
+  /**
+   * 澶撮儴閰嶇疆
+   */
+  const headers = ref({})
+  /**
+   * 鍔ㄦ�佸垪閰嶇疆
+   */
+  const wmsMaterialStockColumns = ref<Record<string, any>>([])
+  /**
+   * 鎼滅储鍊�
+   */
+  const search = ref('')
+
+  /**
+   * 鎺掑簭
+   */
+  const sort = ref(0)
+  /**
+   * 閫夋嫨椤�
+   */
+  const selection = ref([])
+  /**
+   * 褰撳墠閫変腑鐨勮
+   */
+  const current = ref<any>(null)
+  /**
+   * 鏁版嵁婧�
+   */
+  const dataSource: Ref<any[]> = ref([])
+
+  /**
+   * 琛ㄦ牸
+   */
+  const tableRef = ref()
+  const dialogConfig = reactive({
+    visible: false,
+    title: '',
+    isAdd: false,
+  })
+
+  const dialogSettingConfig = reactive({
+    visible: false,
+    title: '',
+  })
+
+  /**
+   * 鍒嗛〉鏁版嵁
+   */
+  const paginationParams = ref({})
+
+  /**
+   * 鎵撳紑璇︽儏
+   * @param row
+   */
+  const openDetail = (row: any) => {
+    current.value = row
+    dialogConfig.visible = true
+    dialogConfig.title = row.name
+    dialogConfig.isAdd = false
+    sort.value = row.sort
+  }
+
+  const contextMenu = [
+    {
+      label: '灞曞紑璇︽儏',
+      fn: (c: CurrentType) => {
+        current.value = null
+        sort.value = c.row.sort
+        nextTick(() => openDetail(c.row))
+      },
+      divided: true,
+      icon: 'o',
+    },
+    // {
+    //   label: '鍚戜笂娣诲姞',
+    //   fn: (c: CurrentType, pageNum: number) => {
+    //     current.value = null
+    //     sort.value = c.index + 1 + (pageNum - 1) * 50
+    //     dialogConfig.visible = true
+    //     dialogConfig.title = '娣诲姞'
+    //     dialogConfig.isAdd = false
+    //   },
+    //   divided: true,
+    //   icon: 'up',
+    // },
+    // {
+    //   label: '鍚戜笅娣诲姞',
+    //   fn: (c: CurrentType, pageNum: number) => {
+    //     current.value = null
+    //     sort.value = c.index + 2 + (pageNum - 1) * 50
+    //     dialogConfig.visible = true
+    //     dialogConfig.title = '娣诲姞'
+    //     dialogConfig.isAdd = false
+    //   },
+    //   divided: true,
+    //   icon: 'down',
+    // },
+    // {
+    //   label: '鍒涘缓鍓湰',
+    //   fn: async ({ row }: CurrentType) => {
+    //     await wmsMaterialStock.cloneData([row.id])
+    //     ElMessage.success('鍒涘缓鍓湰鎴愬姛')
+    //     tableRef.value?.getList()
+    //   },
+    //   divided: true,
+    //   icon: 'copy',
+    // },
+    {
+      label: '鍒犻櫎',
+      fn: async (c: CurrentType) => {
+        const names = selection.value.map((item: { name: string }) => item.name)
+        ConfirmBox(
+          `鏄惁鍒犻櫎${names.length ? names.join(',') : c.row.name}`
+        ).then(async () => {
+          const ids = selection.value.map((item: { id: string }) => item.id)
+          await wmsMaterialStock.deleteWmsMaterialStocks(
+            ids.length ? ids : [c.row.id]
+          )
+          ElMessage.success('鍒犻櫎鎴愬姛')
+          tableRef.value.getList()
+        })
+      },
+      icon: 'close',
+    },
+  ]
+
+  const onCheck = (records: any) => {
+    selection.value = records
+  }
+
+  const onAddWmsMaterialStock = () => {
+    const params = tableRef.value?.getPaginationParams()
+    current.value = null
+    dialogConfig.visible = true
+    dialogConfig.isAdd = true
+    dialogConfig.title = '娣诲姞'
+    sort.value = params.totalCount + 1
+  }
+
+  const onConfirmWmsMaterialStock = async () => {
+    dialogConfig.visible = false
+    if (dialogConfig.isAdd) {
+      tableRef.value?.scrollToRow({
+        skip: true,
+      })
+    } else {
+      await tableRef.value?.getList()
+    }
+  }
+  /**
+   * 琛岀偣鍑绘椂鏇存柊current
+   */
+  const onRowClick = ({ row }: any) => {
+    if (dialogConfig.visible && current.value) {
+      current.value = row
+    }
+  }
+  /**
+   * 瀵煎嚭
+   */
+  const onExport = () => {
+    const params = tableRef.value?.getParams()
+    exportFile(
+      '/api/v1/HIAWms/wmsMaterialStock/export',
+      params,
+      'wmsMaterialStock'
+    )
+  }
+
+  /**
+   * 鍏抽敭瀛楁悳绱�
+   */
+  const onSearch = () => {
+    tableRef.value?.getList({
+      Filter: search.value,
+    })
+  }
+
+  /**
+   * 閲嶇疆琛ㄦ牸鏁版嵁
+   */
+  const reloadList = () => {
+    tableRef.value?.getList()
+  }
+  /**
+   * 涓婁紶鎴愬姛
+   */
+  const onSuccess = () => {
+    tableRef.value?.getList()
+    ElMessage.success('瀵煎叆鎴愬姛')
+  }
+  /**
+   * 澶辫触
+   * @param err
+   */
+  const onError = (err: any) => {
+    try {
+      const message = JSON.parse(err.message)
+      ElMessage.error(message.msg)
+    } catch (error) {
+      ElMessage.error('瀵煎叆澶辫触')
+    }
+  }
+  /**
+   * 涓婁紶閽╁瓙
+   */
+  const onBeforeUpload = (file: File) => {
+    const format = ['xlsx', 'xls', 'csv']
+    if (!format.includes(file.name.split('.')[1])) {
+      ElMessage.error('瀵煎叆鏂囦欢鏍煎紡涓嶆纭紝璇峰鍏�.xlsx/.xls涓�.csv鏍煎紡鐨勬枃浠�')
+      return false
+    }
+    return true
+  }
+
+  onMounted(() => {
+    headers.value = {
+      Authorization: `Bearer ${sessionStorage.getItem('Token')}`,
+      'X-Project': sessionStorage.getItem('X-Project'),
+    }
+  })
+
+  ctx.expose({
+    reloadList,
+  })
+
+  return {
+    dataSource,
+    contextMenu,
+    dialogConfig,
+    dialogSettingConfig,
+    tableRef,
+    current,
+    search,
+    sort,
+    wmsMaterialStockColumns,
+    paginationParams,
+    headers,
+    onBeforeUpload,
+    onError,
+    onSuccess,
+    openDetail,
+    onSearch,
+    onExport,
+    onRowClick,
+    onConfirmWmsMaterialStock,
+    onCheck,
+    onAddWmsMaterialStock,
+  }
+}
diff --git a/HIAWms/web/src/widgets/WmsMaterialStock/Controllers/WmsMaterialStockDrawer.tsx b/HIAWms/web/src/widgets/WmsMaterialStock/Controllers/WmsMaterialStockDrawer.tsx
new file mode 100644
index 0000000..b3f6014
--- /dev/null
+++ b/HIAWms/web/src/widgets/WmsMaterialStock/Controllers/WmsMaterialStockDrawer.tsx
@@ -0,0 +1,343 @@
+import {
+  ref,
+  onMounted,
+  reactive,
+  computed,
+  Ref,
+  watch,
+  SetupContext,
+  h,
+} from 'vue'
+import { injectModel } from '@/libs/Provider/Provider'
+import { WmsMaterialStockDrawer } from '../Models/WmsMaterialStockDrawer'
+import { ElMessage } from 'element-plus'
+import isEqual from 'lodash/isEqual'
+import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox'
+import { cloneDeep } from 'lodash'
+import {
+  getAreaAreaDataList,
+  getWmsEnumData,
+} from '@/widgets/HIAWms/Models/Service/WmsMaterialDrawer'
+
+export const useWmsMaterialStockDrawer = (props: any, ctx?: any) => {
+  const wmsMaterialStockDrawer = injectModel<WmsMaterialStockDrawer>(
+    'wmsMaterialStockDrawer'
+  )
+  /**
+   * 鐢ㄦ潵瀵规瘮鐨勫垵濮嬪寲鏁版嵁
+   */
+  const initiateData: Ref<Record<string, any>> = ref({})
+  const formData = ref<Record<string, any>>({})
+  // ref
+  const formRef = ref()
+
+  const inputNumber = (attrs) => {
+    return (
+      <el-input-number
+        min="1"
+        step="1"
+        precision="0"
+        {...attrs}
+      ></el-input-number>
+    )
+  }
+  const datePicker = (attrs) => {
+    return (
+      <el-date-picker
+        type="datetime"
+        format="YYYY-MM-DD HH:mm:ss"
+        {...attrs}
+      ></el-date-picker>
+    )
+  }
+
+  const current = computed(() => {
+    return props.row || null
+  })
+  const visible = computed({
+    get() {
+      return props.modelValue
+    },
+    set(val) {
+      ctx.emit('update:modelValue', val)
+    },
+  })
+  /**
+   * 娣诲姞鐨刦orm瀛楁
+   */
+  const formItems = reactive([
+    // 鍩虹淇℃伅
+    {
+      label: '鐗╂枡缂栧彿',
+      prop: 'materialNo',
+      el: 'input',
+      placeholder: '璇疯緭鍏ョ墿鏂欑紪鍙�',
+      rules: [
+        { required: true, message: '鐗╂枡缂栧彿涓嶈兘涓虹┖', trigger: 'blur' },
+        { max: 50, message: '闀垮害涓嶈兘瓒呰繃50涓瓧绗�', trigger: 'blur' },
+      ],
+    },
+    {
+      label: '鐗╂枡鍚嶇О',
+      prop: 'materialName',
+      el: 'input',
+      placeholder: '璇疯緭鍏ョ墿鏂欏悕绉�',
+      rules: [
+        { required: true, message: '鐗╂枡鍚嶇О涓嶈兘涓虹┖', trigger: 'blur' },
+        { max: 100, message: '闀垮害涓嶈兘瓒呰繃100涓瓧绗�', trigger: 'blur' },
+      ],
+    },
+    // 瀹瑰櫒淇℃伅
+    {
+      label: '瀹瑰櫒缂栧彿',
+      prop: 'containerNo',
+      el: 'input',
+      placeholder: '璇疯緭鍏ュ鍣ㄧ紪鍙�',
+      rules: [
+        { required: true, message: '鐗╂枡缂栧彿涓嶈兘涓虹┖', trigger: 'blur' },
+        { max: 50, message: '闀垮害涓嶈兘瓒呰繃50涓瓧绗�', trigger: 'blur' },
+      ],
+    },
+    // 搴撳瓨淇℃伅
+    {
+      label: '搴撳瓨鏁伴噺',
+      prop: 'stockNumber',
+      el: (props: any, { attrs }: SetupContext) => {
+        return h(inputNumber, {
+          ...props,
+          clearable: true,
+          ...attrs,
+        })
+      },
+      width: '100%',
+      placeholder: '璇疯緭鍏ュ簱瀛樻暟閲�',
+      rules: [{ required: true, message: '璇疯緭鍏ュ簱瀛樻暟閲�', trigger: 'blur' }],
+    },
+    {
+      label: '鐗╂枡鎵规',
+      prop: 'materialBatch',
+      el: 'input',
+      placeholder: '璇疯緭鍏ョ墿鏂欐壒娆″彿',
+      rules: [
+        { required: true, message: '鐗╂枡鎵规涓嶈兘涓虹┖', trigger: 'blur' },
+        { max: 50, message: '闀垮害涓嶈兘瓒呰繃50涓瓧绗�', trigger: 'blur' },
+      ],
+    },
+
+    {
+      label: '搴撲綅缂栧彿',
+      prop: 'placeNo',
+      el: 'input',
+      placeholder: '璇疯緭鍏ュ簱浣嶇紪鍙�',
+      rules: [
+        { required: true, message: '搴撲綅缂栧彿涓嶈兘涓虹┖', trigger: 'blur' },
+        { max: 50, message: '闀垮害涓嶈兘瓒呰繃50涓瓧绗�', trigger: 'blur' },
+      ],
+    },
+    // 鐘舵�佷俊鎭�
+    {
+      label: '妫�楠岀姸鎬�',
+      prop: 'checkStatus',
+      el: 'select',
+      options: [],
+      placeholder: '璇烽�夋嫨妫�楠岀姸鎬�',
+    },
+    {
+      label: '鏄惁閿佸畾',
+      prop: 'isLock',
+      el: 'select',
+      options: [],
+      placeholder: '璇烽�夋嫨閿佸畾鐘舵��',
+    },
+    {
+      label: '鏄惁绌烘墭',
+      prop: 'emptyContainer',
+      el: 'select',
+      options: [],
+      placeholder: '璇烽�夋嫨绌烘墭鐘舵��',
+    },
+    // 鏃堕棿淇℃伅
+
+    {
+      label: '鍏ュ簱鏃堕棿',
+      prop: 'inStockTime',
+      el: (props: any, { attrs }: SetupContext) => {
+        return h(datePicker, {
+          ...props,
+          clearable: true,
+          ...attrs,
+        })
+      },
+      width: '100%',
+      placeholder: '璇疯緭鍏ユ搷浣滄椂闂�',
+    },
+    {
+      label: '澶囨敞',
+      prop: 'remark',
+      el: 'input',
+      type: 'textarea',
+      placeholder: '璇疯緭鍏ュ娉ㄤ俊鎭�',
+      rules: [{ max: 500, message: '闀垮害涓嶈兘瓒呰繃500涓瓧绗�', trigger: 'blur' }],
+    },
+  ])
+  /**
+   * 鏍¢獙鏄惁鏈夋暟鎹彉鍖�
+   */
+  const checkIsEqualObject = () => {
+    const data = {
+      formData: formData.value,
+    }
+    const check = isEqual(initiateData.value, data)
+    return check
+  }
+
+  const onClose = (done: () => void) => {
+    if (visible.value) {
+      if (checkIsEqualObject()) {
+        visible.value = false
+        done && done()
+      } else {
+        ConfirmBox('鏄惁淇濆瓨璁剧疆锛�')
+          .then(() => {
+            onConfirm()
+          })
+          .catch(() => {
+            visible.value = false
+            done && done()
+          })
+      }
+    }
+  }
+  /**
+   * 淇濆瓨
+   */
+  const onConfirm = async () => {
+    await formRef.value?.validate()
+    const data = {
+      materialNo: formData.value.materialNo,
+      materialName: formData.value.materialName,
+      containerNo: formData.value.containerNo,
+      stockNumber: formData.value.stockNumber,
+      materialBatch: formData.value.materialBatch,
+      placeNo: formData.value.placeNo,
+      checkStatus: formData.value.checkStatus,
+      isLock: formData.value.isLock,
+      emptyContainer: formData.value.emptyContainer,
+      inStockTime: formData.value.inStockTime,
+      remark: formData.value.remark,
+      sort: props.sort,
+    }
+    if (!current.value) {
+      await wmsMaterialStockDrawer.addWmsMaterialStock(data)
+    } else {
+      const id = current.value.id
+      await wmsMaterialStockDrawer.updateWmsMaterialStock(id, data)
+    }
+    ElMessage.success('淇濆瓨鎴愬姛')
+    ctx.emit('confirm')
+  }
+
+  const updateCheckData = () => {
+    initiateData.value = {
+      formData: {
+        ...formData.value,
+      },
+    }
+  }
+  const updateFormItemOptions = (propName: string, enumData: any[]) => {
+    const item = formItems.find((item) => item.prop === propName)
+    if (item && enumData) {
+      item.options = enumData.map((item) => ({
+        label: item.description,
+        value: item.value,
+      }))
+    }
+  }
+  const updateFormAreaOptions = (propName: string, enumData: any[]) => {
+    const item = formItems.find((item) => item.prop === propName)
+    if (item && enumData) {
+      item.options = enumData.map((item) => ({
+        label: item.areaName,
+        value: item.areaNo,
+      }))
+    }
+  }
+  /**
+   * 寮圭獥鎵撳紑鑾峰彇璇︽儏
+   */
+  const onOpen = async () => {
+    const containerTypeEnum = await getWmsEnumData({
+      EnumName: 'ContainerTypeEnum',
+    })
+    updateFormItemOptions('containerType', containerTypeEnum)
+
+    const containerStatusEnum = await getWmsEnumData({
+      EnumName: 'ContainerStatusEnum',
+    })
+    updateFormItemOptions('containerStatus', containerStatusEnum)
+    const placeStatusData = await getWmsEnumData({
+      EnumName: 'PlaceStatusEnum',
+    })
+
+    updateFormItemOptions('placeStatus', placeStatusData)
+    const storageTypeNoData = await getWmsEnumData({
+      EnumName: 'PlaceTypeEnum',
+    })
+    updateFormItemOptions('storageTypeNo', storageTypeNoData)
+
+    const checkStatusList = await getWmsEnumData({
+      EnumName: 'MaterialCheckStatusEnum',
+    })
+    updateFormItemOptions('checkStatus', checkStatusList)
+
+    const yesNoData = await getWmsEnumData({
+      EnumName: 'YesNoEnum',
+    })
+    updateFormItemOptions('isLock', yesNoData)
+    updateFormItemOptions('emptyContainer', yesNoData)
+
+    const areaList = await getAreaAreaDataList()
+    updateFormAreaOptions('areaCode', areaList)
+
+    if (current.value) {
+      const res = await wmsMaterialStockDrawer.getWmsMaterialStockDetail(
+        current.value
+      )
+
+      formData.value = {
+        materialNo: res.materialNo,
+        materialName: res.materialName,
+        containerNo: res.containerNo,
+        stockNumber: res.stockNumber,
+        materialBatch: res.materialBatch,
+        placeNo: res.placeNo,
+        checkStatus: res.checkStatus,
+        isLock: res.isLock,
+        emptyContainer: res.emptyContainer,
+        inStockTime: res.inStockTime,
+        remark: res.remark,
+        id: res.id,
+      }
+      updateCheckData()
+    } else {
+      formData.value = {
+        isLock: 2,
+        emptyContainer: 2,
+        inStockTime: new Date(),
+      }
+      updateCheckData()
+    }
+  }
+
+  watch(() => current.value, onOpen)
+
+  return {
+    formItems,
+    formData,
+    visible,
+    formRef,
+    onOpen,
+    onClose,
+    onConfirm,
+  }
+}
diff --git a/HIAWms/web/src/widgets/WmsMaterialStock/Models/Service/WmsMaterialStock.ts b/HIAWms/web/src/widgets/WmsMaterialStock/Models/Service/WmsMaterialStock.ts
new file mode 100644
index 0000000..213b2d5
--- /dev/null
+++ b/HIAWms/web/src/widgets/WmsMaterialStock/Models/Service/WmsMaterialStock.ts
@@ -0,0 +1,30 @@
+import { Base } from '@/libs/Base/Base'
+const request = Base.request
+
+/**
+ * 娣诲姞
+ * @returns
+ */
+export const addWmsMaterialStock = (data: any) => {
+  return request.post('/api/v1/HIAWms/wmsMaterialStock', data)
+}
+
+/**
+ * 鎵归噺鍒犻櫎
+ * @returns
+ */
+export const deleteWmsMaterialStocks = (ids: string[]) => {
+  return request({
+    data: ids,
+    url: '/api/v1/HIAWms/wmsMaterialStock',
+    method: 'delete',
+  })
+}
+
+/**
+ * 鍏嬮殕
+ * @returns
+ */
+export const cloneData = (data: any) => {
+  return request.post('/api/v1/HIAWms/wmsMaterialStock/clone', data)
+}
diff --git a/HIAWms/web/src/widgets/WmsMaterialStock/Models/Service/WmsMaterialStockDrawer.ts b/HIAWms/web/src/widgets/WmsMaterialStock/Models/Service/WmsMaterialStockDrawer.ts
new file mode 100644
index 0000000..2b80508
--- /dev/null
+++ b/HIAWms/web/src/widgets/WmsMaterialStock/Models/Service/WmsMaterialStockDrawer.ts
@@ -0,0 +1,29 @@
+import { Base } from '@/libs/Base/Base'
+const request = Base.request
+
+/**
+ * 娣诲姞
+ * @returns
+ */
+export const addWmsMaterialStock = (data: any) => {
+  return request.post('/api/v1/HIAWms/wmsMaterialStock', data)
+}
+
+/**
+ * 鑾峰彇璇︽儏
+ * @returns
+ */
+export const getWmsMaterialStock = (id: string) => {
+  return request.get(`/api/v1/HIAWms/wmsMaterialStock/${id}`)
+}
+
+/**
+ * 鏇存柊
+ * @returns
+ */
+export const updateWmsMaterialStock = (
+  id: string,
+  data: Record<string, any>
+) => {
+  return request.put(`/api/v1/HIAWms/wmsMaterialStock/${id}`, data)
+}
diff --git a/HIAWms/web/src/widgets/WmsMaterialStock/Models/WmsMaterialStock.ts b/HIAWms/web/src/widgets/WmsMaterialStock/Models/WmsMaterialStock.ts
new file mode 100644
index 0000000..75c6081
--- /dev/null
+++ b/HIAWms/web/src/widgets/WmsMaterialStock/Models/WmsMaterialStock.ts
@@ -0,0 +1,41 @@
+import { Base } from '@/libs/Base/Base'
+import {
+  deleteWmsMaterialStocks,
+  addWmsMaterialStock,
+  cloneData,
+} from './Service/WmsMaterialStock'
+
+export class WmsMaterialStock extends Base<{ [key: string]: any }> {
+  constructor() {
+    super({
+      data: [],
+    })
+  }
+  onMounted() {}
+  /**
+   * 鍒犻櫎
+   * @param id
+   * @returns
+   */
+  async deleteWmsMaterialStocks(ids: string[]) {
+    return deleteWmsMaterialStocks(ids)
+  }
+
+  /**
+   * 娣诲姞鏁版嵁
+   * @param data
+   * @returns
+   */
+  addWmsMaterialStock(data: Record<string, any>) {
+    return addWmsMaterialStock(data)
+  }
+
+  /**
+   * 鍏嬮殕
+   * @param ids
+   * @returns
+   */
+  cloneData(ids: string[]) {
+    return cloneData(ids)
+  }
+}
diff --git a/HIAWms/web/src/widgets/WmsMaterialStock/Models/WmsMaterialStockDrawer.ts b/HIAWms/web/src/widgets/WmsMaterialStock/Models/WmsMaterialStockDrawer.ts
new file mode 100644
index 0000000..7954e7c
--- /dev/null
+++ b/HIAWms/web/src/widgets/WmsMaterialStock/Models/WmsMaterialStockDrawer.ts
@@ -0,0 +1,38 @@
+import { Base } from '@/libs/Base/Base'
+import {
+  addWmsMaterialStock,
+  getWmsMaterialStock,
+  updateWmsMaterialStock,
+} from './Service/WmsMaterialStockDrawer'
+import { useGlobalState } from '@/libs/Store/Store'
+
+export class WmsMaterialStockDrawer extends Base<{ [key: string]: any }> {
+  constructor() {
+    super({
+      data: [],
+      wmsMaterialStock: {},
+    })
+  }
+
+  /**
+   * 娣诲姞
+   * @param data
+   */
+  async addWmsMaterialStock(data: Record<string, any>) {
+    return addWmsMaterialStock(data)
+  }
+  /**
+   * 鏇存柊
+   * @param data
+   */
+  async updateWmsMaterialStock(id: string, data: Record<string, any>) {
+    return updateWmsMaterialStock(id, data)
+  }
+
+  /**
+   * 鑾峰彇璇︽儏
+   */
+  async getWmsMaterialStockDetail(current: any, id?: string) {
+    return getWmsMaterialStock(id || current?.id)
+  }
+}
diff --git a/HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/Dialog/WmsMaterialStockDrawer/WmsMaterialStockDrawer.module.scss b/HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/Dialog/WmsMaterialStockDrawer/WmsMaterialStockDrawer.module.scss
new file mode 100644
index 0000000..98607dd
--- /dev/null
+++ b/HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/Dialog/WmsMaterialStockDrawer/WmsMaterialStockDrawer.module.scss
@@ -0,0 +1,3 @@
+.drawer {
+  width: 800px;
+}
diff --git a/HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/Dialog/WmsMaterialStockDrawer/WmsMaterialStockDrawer.tsx b/HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/Dialog/WmsMaterialStockDrawer/WmsMaterialStockDrawer.tsx
new file mode 100644
index 0000000..59a5263
--- /dev/null
+++ b/HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/Dialog/WmsMaterialStockDrawer/WmsMaterialStockDrawer.tsx
@@ -0,0 +1,61 @@
+import { SetupContext, defineComponent } from 'vue'
+import BaseDrawer from '@/components/BaseDrawer/BaseDrawer'
+import styles from './WmsMaterialStockDrawer.module.scss'
+import { useWmsMaterialStockDrawer } from '../../../../Controllers/WmsMaterialStockDrawer.tsx'
+import DyForm from '@/components/DyForm/DyForm'
+
+// @ts-ignore
+export default defineComponent<{
+  [key: string]: any
+}>({
+  name: '寮圭獥',
+  props: {
+    modelValue: {
+      type: Boolean,
+      default: false,
+    },
+    title: {
+      type: String,
+      default: '',
+    },
+    row: {
+      type: Object,
+    },
+    sort: {
+      type: Number,
+      default: 0,
+    },
+  },
+  emits: ['update:modelValue', 'close', 'submit', 'confirm'],
+  setup(props: Record<string, any>, ctx: SetupContext) {
+    const {
+      onClose,
+      onConfirm,
+      onOpen,
+      formRef,
+      visible,
+      formItems,
+      formData,
+    } = useWmsMaterialStockDrawer(props, ctx)
+    return () => (
+      <BaseDrawer
+        class={styles.drawer}
+        size="800px"
+        title={props.title || '娣诲姞'}
+        v-model={visible.value}
+        close-on-click-modal={true}
+        onConfirm={onConfirm}
+        onOpen={onOpen}
+        before-close={onClose}
+        onClose={onClose}
+      >
+        <DyForm
+          ref={formRef}
+          formData={formData.value}
+          labelWidth="106px"
+          formItemProps={formItems}
+        ></DyForm>
+      </BaseDrawer>
+    )
+  },
+})
diff --git a/HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStock/Config.ts b/HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStock/Config.ts
new file mode 100644
index 0000000..03b2ab3
--- /dev/null
+++ b/HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStock/Config.ts
@@ -0,0 +1,55 @@
+export const columns = [
+  {
+    type: 'seq',
+    width: 60,
+    title: '搴忓彿',
+  },
+  {
+    field: 'materialNo',
+    title: '鐗╂枡缂栧彿',
+  },
+  {
+    field: 'materialName',
+    title: '鐗╂枡鍚嶇О',
+  },
+  {
+    field: 'placeNo',
+    title: '搴撲綅缂栧彿',
+  },
+  {
+    field: 'placeStatusDesc',
+    title: '搴撲綅鐘舵��',
+  },
+  {
+    field: 'containerNo',
+    title: '瀹瑰櫒缂栧彿',
+  },
+  {
+    field: 'stockNumber',
+    title: '搴撳瓨鏁伴噺',
+  },
+  {
+    field: 'materialBatch',
+    title: '鐗╂枡鎵规',
+  },
+  {
+    field: 'areaName',
+    title: '鎵�灞炲簱鍖�',
+  },
+  {
+    field: 'checkStatusDesc',
+    title: '妫�楠岀姸鎬�',
+  },
+  {
+    field: 'inStockTime',
+    title: '鍏ュ簱鏃堕棿',
+  },
+  {
+    field: 'isLockDesc',
+    title: '閿佸畾鐘舵��',
+  },
+  {
+    field: 'remark',
+    title: '澶囨敞',
+  },
+]
diff --git a/HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStock/WmsMaterialStock.module.scss b/HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStock/WmsMaterialStock.module.scss
new file mode 100644
index 0000000..365acbf
--- /dev/null
+++ b/HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStock/WmsMaterialStock.module.scss
@@ -0,0 +1,113 @@
+.wmsMaterialStockContent {
+  width: 100%;
+  height: 80%;
+
+  .wmsMaterialStockList {
+    width: 100%;
+    height: calc(100% - 70px);
+  }
+  .headerContent {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    height: 43px;
+  }
+  .header {
+    margin-bottom: 12px;
+    display: flex;
+    justify-content: flex-start;
+    align-items: center;
+  }
+}
+
+.tagBox {
+  width: auto;
+  min-width: 80px;
+  height: 24px;
+  background: #ffffff;
+  border-radius: 19px 19px 19px 19px;
+  opacity: 1;
+  border: 1px dashed #bcc4cc;
+  width: 50px;
+  height: 20px;
+  font-size: 14px;
+  font-family: PingFang SC, PingFang SC;
+  font-weight: 400;
+  color: #5a84ff;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  // cursor: pointer;
+}
+
+.group {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.groupTable {
+  width: 100%;
+}
+
+.overBox {
+  width: 100%;
+  height: calc(100% - 20px);
+  overflow: auto;
+  :global(.cs-collapse-item__header) {
+    background-color: #f1f1f1;
+    padding: 0 20px;
+    height: 35px;
+    font-size: 16px;
+    font-family: PingFang SC, PingFang SC;
+    font-weight: 500;
+  }
+  :global(.cs-collapse-item__content) {
+    padding-bottom: 0px;
+  }
+}
+.groupHeader {
+  width: 100%;
+  height: 30px;
+  background: #ccc;
+}
+
+.hideBlock {
+  display: none;
+}
+.queryForm {
+  padding: 10px;
+  background: #f5f7fa;
+  margin-bottom: 0px;
+  border-radius: 4px;
+  
+  .el-form-item {
+    margin-right: 20px;
+    margin-bottom: 0;
+    
+    // 缁熶竴杈撳叆妗嗗拰閫夋嫨妗嗙殑瀹藉害
+    .el-input, .el-select {
+      width: 200px; // 璁剧疆缁熶竴鐨勫搴�
+    }
+    
+    // 閫夋嫨妗嗗唴閮ㄨ緭鍏ユ鏍峰紡
+    .el-select .el-input__wrapper {
+      height: 32px; // 涓庤緭鍏ユ楂樺害涓�鑷�
+      padding: 1px 11px; // 涓庤緭鍏ユ鍐呰竟璺濅竴鑷�
+    }
+    
+    // 鏃ユ湡閫夋嫨鍣ㄥ搴�
+    .el-date-editor {
+      width: 220px;
+    }
+  }
+}
+
+// 濡傛灉闇�瑕佹洿绮剧‘鐨勬帶鍒讹紝鍙互鍗曠嫭璁剧疆
+.formItem {
+  width: 200px;
+  
+  &.el-input, &.el-select {
+    width: 100%;
+  }
+}
\ No newline at end of file
diff --git a/HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStock/WmsMaterialStock.tsx b/HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStock/WmsMaterialStock.tsx
new file mode 100644
index 0000000..f208e22
--- /dev/null
+++ b/HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStock/WmsMaterialStock.tsx
@@ -0,0 +1,468 @@
+import { computed, defineComponent, onMounted, reactive, ref } from 'vue'
+import type { Ref } from 'vue'
+import BaseTable from '@/components/Table/Table'
+import styles from './WmsMaterialStock.module.scss'
+import { useWmsMaterialStock } from '../../../Controllers/WmsMaterialStock'
+import IconButton from '@/components/IconButton/IconButton'
+import WmsMaterialStockDrawer from '../Dialog/WmsMaterialStockDrawer/WmsMaterialStockDrawer'
+import Search from '@/components/Search/Search'
+import { columns } from './Config'
+import TdButton from '@/components/TdButton/TdButton'
+import { vPermission } from '@/libs/Permission/Permission'
+import dayjs from 'dayjs'
+import {
+  ElDatePicker,
+  ElForm,
+  ElFormItem,
+  ElInput,
+  ElOption,
+  ElSelect,
+} from 'element-plus'
+import { getWmsEnumData } from '@/widgets/HIAWms/Models/Service/WmsMaterialDrawer'
+
+interface RenderTableType {
+  url?: string
+  dataSource: Ref<any[]>
+  isDrag?: boolean
+  isChecked?: boolean
+  isHidePagination?: boolean
+  params?: Record<string, any>
+  autoHeight?: boolean
+}
+
+export default defineComponent({
+  name: 'WmsMaterialStock',
+  directives: {
+    permission: vPermission,
+  },
+  setup(props, ctx) {
+    const {
+      dataSource,
+      contextMenu,
+      dialogConfig,
+      tableRef,
+      current,
+      search,
+      sort,
+      headers,
+      onError,
+      onSearch,
+      onRowClick,
+      onConfirmWmsMaterialStock,
+      onCheck,
+      onAddWmsMaterialStock,
+      onExport,
+      openDetail,
+      onSuccess,
+      onBeforeUpload,
+    } = useWmsMaterialStock(props, ctx)
+
+    // 鏂板鐨勬煡璇㈡潯浠�
+    const queryForm = ref({
+      containerNo: '',
+      materialNo: '',
+      materialName: '',
+      containerType: '',
+      containerStatus: '',
+      storageTypeNo: '',
+      placeStatus: '',
+      placeNo: '',
+      isLock: '',
+      emptyContainer: '',
+      dateRange: [],
+      filter: '',
+    })
+
+    const queryParams = computed(() => ({
+      ...queryForm.value,
+      containerType: queryForm.value.containerType || '', // 澶勭悊涓嬫媺
+      containerStatus: queryForm.value.containerStatus || '',
+      storageTypeNo: queryForm.value.storageTypeNo || '', // 澶勭悊涓嬫媺
+      placeStatus: queryForm.value.placeStatus || '',
+      islock: queryForm.value.isLock || '',
+      emptyContainer: queryForm.value.emptyContainer || '',
+      startTime: queryForm.value.dateRange[0] || '',
+      endTime: queryForm.value.dateRange[1] || '',
+    }))
+
+    // 鍔ㄦ�佹灇涓鹃�夐」
+    const enumOptions = reactive({
+      containerType: [] as Array<{ label: string; value: any }>,
+      containerStatus: [] as Array<{ label: string; value: any }>,
+      storageTypeNo: [] as Array<{ label: string; value: any }>,
+      placeStatus: [] as Array<{ label: string; value: any }>,
+      yesOrNo: [] as Array<{ label: string; value: any }>,
+    })
+
+    // 鑾峰彇鏋氫妇鏁版嵁
+    const fetchEnumData = async () => {
+      try {
+        // 鑾峰彇鐗╂枡绫诲瀷鏋氫妇
+        const containerTypeData = await getWmsEnumData({
+          EnumName: 'ContainerTypeEnum',
+        })
+        enumOptions.containerType = containerTypeData.map((item) => ({
+          label: item.description,
+          value: item.value,
+        }))
+        // 鑾峰彇鐗╂枡绫诲瀷鏋氫妇
+        const storageTypeNoData = await getWmsEnumData({
+          EnumName: 'PlaceTypeEnum',
+        })
+        enumOptions.storageTypeNo = storageTypeNoData.map((item) => ({
+          label: item.description,
+          value: item.value,
+        }))
+
+        // 鑾峰彇閲囪喘绫诲瀷鏋氫妇
+        const placeStatusData = await getWmsEnumData({
+          EnumName: 'PlaceStatusEnum',
+        })
+        enumOptions.placeStatus = placeStatusData.map((item) => ({
+          label: item.description,
+          value: item.value,
+        }))
+
+        // 鑾峰彇閲囪喘绫诲瀷鏋氫妇
+        const containerStatusData = await getWmsEnumData({
+          EnumName: 'ContainerStatusEnum',
+        })
+        enumOptions.containerStatus = containerStatusData.map((item) => ({
+          label: item.description,
+          value: item.value,
+        }))
+      } catch (error) {
+        console.error('鑾峰彇鏋氫妇鏁版嵁澶辫触:', error)
+      }
+    }
+
+    // 缁勪欢鎸傝浇鏃惰幏鍙栨灇涓炬暟鎹�
+    onMounted(() => {
+      fetchEnumData()
+    })
+
+    // 鏂板鐨勬煡璇㈡柟娉�
+    const handleQuery = async () => {
+      console.log('鏌ヨ鏉′欢:', queryParams.value)
+      // tableRef.value.getTableList()
+      tableRef.value.getList(queryParams.value)
+    }
+
+    // 閲嶇疆鏌ヨ鏉′欢
+    const resetQuery = () => {
+      queryForm.value = {
+        containerNo: '',
+        materialNo: '',
+        materialName: '',
+        containerType: '',
+        containerStatus: '',
+        storageTypeNo: '',
+        placeStatus: '',
+        placeNo: '',
+        isLock: '',
+        emptyContainer: '',
+        dateRange: [],
+        filter: '',
+      }
+    }
+    /**
+     * @returns 琛ㄦ牸
+     */
+    const RenderBaseTable = (props: RenderTableType) => {
+      const {
+        url,
+        dataSource,
+        isDrag,
+        isChecked,
+        isHidePagination,
+        params,
+        autoHeight,
+      } = props
+
+      return (
+        <div
+          class={{
+            [styles.wmsMaterialStockList]: true,
+          }}
+        >
+          <BaseTable
+            ref={tableRef}
+            url={url}
+            sortUrlTpl="/api/v1/HIAWms/wmsMaterialStock/{id}/adjustsort/{sort}"
+            v-model:dataSource={dataSource.value}
+            columns={columns}
+            contextMenu={contextMenu}
+            params={params}
+            isDrag={isDrag}
+            isChecked={isChecked}
+            autoHeight={autoHeight}
+            onCheck={onCheck}
+            onRowClick={onRowClick}
+            isHidePagination={isHidePagination}
+            pageSize={20}
+            v-slots={{
+              inStockTime: ({ row }: any) => {
+                return (
+                  <div>
+                    {row.inStockTime != null
+                      ? dayjs(row.inStockTime).format('YYYY-MM-DD HH:mm:ss')
+                      : '-'}
+                  </div>
+                )
+              },
+              name: ({ row }: any) => {
+                return row?.name ? (
+                  <TdButton
+                    onClick={() => openDetail(row)}
+                    text={<span style="color:#5a84ff">璇︽儏</span>}
+                    icon="scale"
+                    tip={row?.name}
+                    hover
+                  >
+                    {row?.name}
+                  </TdButton>
+                ) : (
+                  '-'
+                )
+              },
+            }}
+          ></BaseTable>
+        </div>
+      )
+    }
+    return () => {
+      return (
+        <div class={styles.wmsMaterialStockContent}>
+          {/* 娣诲姞/缂栬緫 */}
+          <WmsMaterialStockDrawer
+            v-model={dialogConfig.visible}
+            title={dialogConfig.title}
+            row={current.value}
+            sort={sort.value}
+            onConfirm={onConfirmWmsMaterialStock}
+          />
+          {/* 鏂板鐨勬煡璇㈣〃鍗� */}
+          <ElForm
+            inline
+            model={queryForm.value}
+            class={styles.queryForm}
+            label-width="80px"
+          >
+            <ElFormItem label="鍏抽敭瀛�">
+              <ElInput
+                v-model={queryForm.value.filter}
+                placeholder="璇疯緭鍏ュ叧閿瓧鎼滅储"
+                clearable
+                class={styles.formItem}
+              />
+            </ElFormItem>
+            <ElFormItem label="鐗╂枡缂栫爜">
+              <ElInput
+                v-model={queryForm.value.materialNo}
+                placeholder="璇疯緭鍏ョ墿鏂欑紪鐮�"
+                clearable
+                class={styles.formItem}
+              />
+            </ElFormItem>
+            <ElFormItem label="鐗╂枡鍚嶇О">
+              <ElInput
+                v-model={queryForm.value.materialName}
+                placeholder="璇疯緭鍏ョ墿鏂欏悕绉�"
+                clearable
+                class={styles.formItem}
+              />
+            </ElFormItem>
+            <ElFormItem label="鎵樼洏缂栫爜">
+              <ElInput
+                v-model={queryForm.value.containerNo}
+                placeholder="璇疯緭鍏ユ墭鐩樼紪鐮�"
+                clearable
+                class={styles.formItem}
+              />
+            </ElFormItem>
+            <ElFormItem label="鎵樼洏绫诲瀷">
+              <ElSelect
+                v-model={queryForm.value.containerType}
+                placeholder="璇烽�夋嫨鎵樼洏绫诲瀷"
+                clearable
+                loading={enumOptions.containerType.length === 0}
+                class={styles.formItem}
+              >
+                {enumOptions.containerType.map((option) => (
+                  <ElOption
+                    key={option.value}
+                    label={option.label}
+                    value={option.value}
+                  />
+                ))}
+              </ElSelect>
+            </ElFormItem>
+            <ElFormItem label="鎵樼洏鐘舵��">
+              <ElSelect
+                v-model={queryForm.value.containerStatus}
+                placeholder="璇烽�夋嫨鎵樼洏鐘舵��"
+                clearable
+                loading={enumOptions.containerStatus.length === 0}
+                class={styles.formItem}
+              >
+                {enumOptions.containerStatus.map((option) => (
+                  <ElOption
+                    key={option.value}
+                    label={option.label}
+                    value={option.value}
+                  />
+                ))}
+              </ElSelect>
+            </ElFormItem>
+            <ElFormItem label="搴撲綅缂栧彿">
+              <ElInput
+                v-model={queryForm.value.placeNo}
+                placeholder="璇疯緭鍏ュ簱浣嶇紪鍙�"
+                clearable
+                class={styles.formItem}
+              />
+            </ElFormItem>
+            <ElFormItem label="搴撲綅绫诲瀷">
+              <ElSelect
+                v-model={queryForm.value.storageTypeNo}
+                placeholder="璇烽�夋嫨鎵樼洏绫诲瀷"
+                clearable
+                loading={enumOptions.storageTypeNo.length === 0}
+                class={styles.formItem}
+              >
+                {enumOptions.storageTypeNo.map((option) => (
+                  <ElOption
+                    key={option.value}
+                    label={option.label}
+                    value={option.value}
+                  />
+                ))}
+              </ElSelect>
+            </ElFormItem>
+            <ElFormItem label="搴撲綅鐘舵��">
+              <ElSelect
+                v-model={queryForm.value.placeStatus}
+                placeholder="璇烽�夋嫨鎵樼洏鐘舵��"
+                clearable
+                loading={enumOptions.placeStatus.length === 0}
+                class={styles.formItem}
+              >
+                {enumOptions.placeStatus.map((option) => (
+                  <ElOption
+                    key={option.value}
+                    label={option.label}
+                    value={option.value}
+                  />
+                ))}
+              </ElSelect>
+            </ElFormItem>
+            <ElFormItem label="鏄惁閿佸畾">
+              <ElSelect
+                v-model={queryForm.value.isLock}
+                placeholder="璇烽�夋嫨鏄惁閿佸畾"
+                clearable
+                loading={enumOptions.yesOrNo.length === 0}
+                class={styles.formItem}
+              >
+                {enumOptions.yesOrNo.map((option) => (
+                  <ElOption
+                    key={option.value}
+                    label={option.label}
+                    value={option.value}
+                  />
+                ))}
+              </ElSelect>
+            </ElFormItem>
+            <ElFormItem label="鏄惁绌烘墭">
+              <ElSelect
+                v-model={queryForm.value.emptyContainer}
+                placeholder="璇烽�夋嫨鏄惁绌烘墭"
+                clearable
+                loading={enumOptions.yesOrNo.length === 0}
+                class={styles.formItem}
+              >
+                {enumOptions.yesOrNo.map((option) => (
+                  <ElOption
+                    key={option.value}
+                    label={option.label}
+                    value={option.value}
+                  />
+                ))}
+              </ElSelect>
+            </ElFormItem>
+            <ElFormItem label="鏃ユ湡鑼冨洿">
+              <ElDatePicker
+                v-model={queryForm.value.dateRange}
+                type="datetimerange"
+                range-separator="鑷�"
+                show-now="true"
+                start-placeholder="寮�濮嬫棩鏈�"
+                end-placeholder="缁撴潫鏃ユ湡"
+                format="YYYY-MM-DD HH:mm:ss"
+                valueFormat="YYYY-MM-DD HH:mm:ss"
+              />
+            </ElFormItem>
+            <ElFormItem>
+              <IconButton type="primary" icon="search" onClick={handleQuery}>
+                鏌ヨ
+              </IconButton>
+              <IconButton
+                style="margin-left: 10px;"
+                icon="refresh"
+                onClick={resetQuery}
+              >
+                閲嶇疆
+              </IconButton>
+            </ElFormItem>
+          </ElForm>
+          <div class={styles.headerContent}>
+            <div class={styles.header}>
+              <IconButton
+                v-permission="wmsMaterialStock-add"
+                icon="add-p"
+                onClick={onAddWmsMaterialStock}
+                type="primary"
+              >
+                娣诲姞
+              </IconButton>
+              <el-divider direction="vertical" />
+              <el-upload
+                v-permission="wmsMaterialStock-import"
+                name="file"
+                accept=".xlsx,.xls,.csv"
+                show-file-list={false}
+                onError={onError}
+                onSuccess={onSuccess}
+                before-upload={onBeforeUpload}
+                headers={headers.value}
+                action="/api/v1/HIAWms/wmsMaterialStock/import"
+              >
+                <IconButton icon="in">瀵煎叆</IconButton>
+              </el-upload>
+
+              <IconButton
+                v-permission="wmsMaterialStock-output"
+                icon="out"
+                onClick={onExport}
+              >
+                瀵煎嚭
+              </IconButton>
+            </div>
+            {/* <Search
+              placeholder="璇疯緭鍏ュ叧閿瓧"
+              v-model={search.value}
+              onConfirm={onSearch}
+              style={{ marginTop: '-1px' }}
+            /> */}
+          </div>
+          <RenderBaseTable
+            url="/api/v1/HIAWms/wmsMaterialStock"
+            dataSource={dataSource}
+            isChecked={true}
+            isDrag={true}
+          />
+        </div>
+      )
+    }
+  },
+})
diff --git a/HIAWms/web/src/widgets/WmsMaterialStock/Views/WmsMaterialStock.module.scss b/HIAWms/web/src/widgets/WmsMaterialStock/Views/WmsMaterialStock.module.scss
new file mode 100644
index 0000000..d8710c5
--- /dev/null
+++ b/HIAWms/web/src/widgets/WmsMaterialStock/Views/WmsMaterialStock.module.scss
@@ -0,0 +1,7 @@
+.WmsMaterialStock {
+  background-color: #fff;
+  border-radius: 5px 5px 0 0;
+  width: 100%;
+  height: 100%;
+  border: 1px solid #dbdbdb;
+}
diff --git a/HIAWms/web/src/widgets/WmsMaterialStock/Views/WmsMaterialStock.tsx b/HIAWms/web/src/widgets/WmsMaterialStock/Views/WmsMaterialStock.tsx
new file mode 100644
index 0000000..9bb4efb
--- /dev/null
+++ b/HIAWms/web/src/widgets/WmsMaterialStock/Views/WmsMaterialStock.tsx
@@ -0,0 +1,80 @@
+import {
+  Component,
+  DefineComponent,
+  defineComponent,
+  markRaw,
+  ref,
+  SetupContext,
+  onMounted,
+} from 'vue'
+import styles from './WmsMaterialStock.module.scss'
+// import WmsMaterialStock from './Pages/WmsMaterialStock/WmsMaterialStock'
+import Tab from '@/components/Tab/Tab'
+import { useProvideModels } from '@/libs/Provider/app'
+import { usePermission } from '@/libs/Permission/Permission'
+import { permissionCodes } from '../enum'
+import { ModuleType, TabItem } from '../type/Type'
+import { getEntityNames } from '@/hooks/hook'
+import TabPane from '@/components/Tab/TabPane'
+
+const Models: ModuleType = import.meta.glob('./config/*.json', {
+  eager: true,
+})
+
+const entityNames = getEntityNames(Models)
+const nameToLabelMap = [{ name: 'WmsMaterialStock', label: '搴撳瓨' }]
+
+export default defineComponent({
+  name: 'WmsMaterialStock',
+
+  setup(props, ctx: SetupContext) {
+    useProvideModels()
+    usePermission(props, permissionCodes)
+
+    const rf = ref<{
+      [key: string]: any
+    }>({})
+
+    const tabData = ref<TabItem[]>([])
+
+    const onTabChange = (v: string) => {
+      rf.value?.[v]?.reloadList()
+    }
+
+    const initTableData = async () => {
+      for (const i in entityNames) {
+        const name = entityNames[i]
+        const module = await import(`./Pages/${name}/${name}.tsx`)
+        const WmsPlaces = markRaw(module.default)
+        const foundLabel =
+          nameToLabelMap.find((item) => item.name === name)?.label || name
+        tabData.value.push({
+          label: foundLabel,
+          name,
+          component: WmsPlaces,
+        })
+      }
+    }
+
+    initTableData()
+
+    return () => {
+      return (
+        <div class={styles.WmsMaterialStock}>
+          <Tab data={tabData.value} type="list" onTab={onTabChange}>
+            {tabData.value.map((widgetInfo) => {
+              const Widget: any = widgetInfo.component
+              return (
+                <TabPane label={widgetInfo.label} name={widgetInfo.name}>
+                  <Widget
+                    ref={(r: any) => (rf.value['WmsMaterialStock'] = r)}
+                  ></Widget>
+                </TabPane>
+              )
+            })}
+          </Tab>
+        </div>
+      )
+    }
+  },
+})
diff --git a/HIAWms/web/src/widgets/WmsMaterialStock/Views/config/WmsMaterialStock.json b/HIAWms/web/src/widgets/WmsMaterialStock/Views/config/WmsMaterialStock.json
new file mode 100644
index 0000000..fdfdd72
--- /dev/null
+++ b/HIAWms/web/src/widgets/WmsMaterialStock/Views/config/WmsMaterialStock.json
@@ -0,0 +1,3 @@
+{
+  "name": "WmsMaterialStock"
+}
diff --git a/HIAWms/web/src/widgets/WmsMaterialStock/enum.ts b/HIAWms/web/src/widgets/WmsMaterialStock/enum.ts
new file mode 100644
index 0000000..947c2b0
--- /dev/null
+++ b/HIAWms/web/src/widgets/WmsMaterialStock/enum.ts
@@ -0,0 +1,15 @@
+export interface TabType {
+  label: string
+  name: string
+  columns?: any[]
+  data?: any[]
+  isFooter: boolean
+  [key: string]: any
+}
+
+export const permissionCodes = {
+  'wmsMaterialStock-list': '鍒楄〃-鍒楄〃',
+  'wmsMaterialStock-add': '鍒楄〃-娣诲姞',
+  'wmsMaterialStock-import': '鍒楄〃-瀵煎叆',
+  'wmsMaterialStock-output': '鍒楄〃-杈撳嚭',
+}
diff --git a/HIAWms/web/src/widgets/WmsMaterialStock/index.ts b/HIAWms/web/src/widgets/WmsMaterialStock/index.ts
new file mode 100644
index 0000000..bbe6aab
--- /dev/null
+++ b/HIAWms/web/src/widgets/WmsMaterialStock/index.ts
@@ -0,0 +1,14 @@
+import WmsMaterialStock from './Views/WmsMaterialStock'
+import Setting from '@/components/Setting/Setting'
+import { provider } from '@/provider/index'
+import p from '../../assets/svg/p.svg'
+
+export default {
+  is: 'WmsMaterialStock',
+  name: '搴撳瓨淇℃伅',
+  category: 'run',
+  icon: p,
+  authorizationRequired: false,
+  canvasView: provider(WmsMaterialStock),
+  settingsView: Setting,
+}
diff --git a/HIAWms/web/src/widgets/WmsMaterialStock/type/Type.d.ts b/HIAWms/web/src/widgets/WmsMaterialStock/type/Type.d.ts
new file mode 100644
index 0000000..aff4bc5
--- /dev/null
+++ b/HIAWms/web/src/widgets/WmsMaterialStock/type/Type.d.ts
@@ -0,0 +1,45 @@
+import { Component } from 'vue'
+
+export interface DataItemType {
+  id?: string
+  name?: string
+  code?: string
+  description?: string
+  label?: string
+  value?: string | number
+}
+
+export interface WmsMaterialStockBaseType {
+  id?: string
+  name?: string
+  code?: string
+  value?: number
+  description?: string
+  options?: Array<DataItemType>
+  abilityValue?: number | string
+  data?: DataItemType
+  defaultValue?: string | number
+  flow: string
+}
+
+export interface FlowDefinitionType {
+  id?: string
+  name?: string
+  code?: string
+  description?: string
+}
+
+export type ModuleType = Record<
+  string,
+  {
+    default: Record<string, string>
+    name: string
+  }
+>
+
+export interface TabItem {
+  name: string
+  label: string
+  component: Component
+  hidden?: boolean
+}
diff --git a/HIAWms/web/src/widgets/WmsStoreInfo/Controllers/WmsAreaDrawer.ts b/HIAWms/web/src/widgets/WmsStoreInfo/Controllers/WmsAreaDrawer.ts
index 326c88d..a23713e 100644
--- a/HIAWms/web/src/widgets/WmsStoreInfo/Controllers/WmsAreaDrawer.ts
+++ b/HIAWms/web/src/widgets/WmsStoreInfo/Controllers/WmsAreaDrawer.ts
@@ -145,8 +145,8 @@
       areaDesc: formData.value.areaDesc, // 鎻忚堪
       areaStatus: formData.value.areaStatus, // 搴撳尯鐘舵��
       areaType: formData.value.areaType, // 搴撳尯绫诲瀷
-      storeCode: formData.value.storeCode, // 浠撳簱浠g爜
-      // storeName: formData.value.storeName, // 浠撳簱鍚嶇О
+      storeCode: formData.value.storeCode.areaCode, // 浠撳簱浠g爜
+      storeName: formData.value.storeCode.storeName, // 浠撳簱鍚嶇О
       remark: formData.value.remark, // 澶囨敞
     }
     if (!current.value) {

--
Gitblit v1.9.3