zs
2025-05-05 4eafe9c975b88483da2a16f20c45285db0a3e791
库存及库存明细
已添加44个文件
已修改34个文件
6215 ■■■■■ 文件已修改
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/GetWmsMaterialInfosInput.cs 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfoCreateDto.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfoCreateOrUpdateDtoBase.cs 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfoDto.cs 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfoUpdateDto.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfosExportModel.cs 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialInfos/WmsMaterialInfosImportModel.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/GetWmsMaterialStocksInput.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateOrUpdateDtoBase.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockDto.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStocksExportModel.cs 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/GetWmsMaterialsInput.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialCreateOrUpdateDtoBase.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialDto.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialsExportModel.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/GetWmsPlacesInput.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsMaterialInfoAppService.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsPlaceAppService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsAreaAppService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialInfoAppService.cs 350 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs 125 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsPlaceAppService.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsMaterialInfoAutoMapperProfile.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsPlaceAutoMapperProfile.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/MaterialCheckStatusEnum.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/WmsMaterialInfos/WmsMaterialInfoConsts.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/WmsMaterialInfos/WmsMaterialInfoEto.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/EventHandlers/WmsMaterialInfoEventHandler.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialInfos/IWmsMaterialInfoRepository.cs 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialInfos/WmsMaterialInfo.cs 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialInfos/WmsMaterialInfoDataSeedContributor.cs 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialInfos/WmsMaterialInfoSpecification.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialStocks/WmsMaterialStock.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterials/WmsMaterial.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterial.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterialInfo.cs 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterialStock.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsAreaRepository.cs 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialInfoRepository.cs 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialStockRepository.cs 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/CMSPluginDbContext.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505105851_InitialCreate2.Designer.cs 998 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505105851_InitialCreate2.cs 196 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505121050_InitialCreate3.Designer.cs 1003 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505121050_InitialCreate3.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/CMSPluginDbContextModelSnapshot.cs 328 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Scripts/UpdateMigrations.bat 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.PostgreSql/CMSPluginDbContext.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.SqlServer/CMSPluginDbContext.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialInfoController.cs 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsPlaceController.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterialInfo导出模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterialStock导出模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/components.d.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/config/menu.ts 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/HIAWms/Controllers/WmsMaterialDrawer.tsx 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/HIAWms/Views/Pages/WmsMaterial/Config.ts 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsContainer/Controllers/WmsContainer.ts 68 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsMaterialStock/Controllers/File.ts 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsMaterialStock/Controllers/WmsMaterialStock.ts 264 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsMaterialStock/Controllers/WmsMaterialStockDrawer.tsx 343 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsMaterialStock/Models/Service/WmsMaterialStock.ts 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsMaterialStock/Models/Service/WmsMaterialStockDrawer.ts 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsMaterialStock/Models/WmsMaterialStock.ts 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsMaterialStock/Models/WmsMaterialStockDrawer.ts 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/Dialog/WmsMaterialStockDrawer/WmsMaterialStockDrawer.module.scss 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/Dialog/WmsMaterialStockDrawer/WmsMaterialStockDrawer.tsx 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStock/Config.ts 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStock/WmsMaterialStock.module.scss 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStock/WmsMaterialStock.tsx 468 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsMaterialStock/Views/WmsMaterialStock.module.scss 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsMaterialStock/Views/WmsMaterialStock.tsx 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsMaterialStock/Views/config/WmsMaterialStock.json 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsMaterialStock/enum.ts 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsMaterialStock/index.ts 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsMaterialStock/type/Type.d.ts 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/web/src/widgets/WmsStoreInfo/Controllers/WmsAreaDrawer.ts 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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>
    /// ç‰©æ–™ä»£å·
    /// </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; }
}
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;
}
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>
    /// ç‰©æ–™ä»£å·
    /// </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)
    {
    }
}
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>
    /// ç‰©æ–™ä»£å·
    /// </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;
    }
}
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; }
}
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; }
        }
    }
}
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; }
        }
    }
}
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; }
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>
    /// æ˜¯å¦ç©ºæ‰˜
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; }
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>
            /// æ˜¯å¦ç©ºæ‰˜
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>
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; }
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; }
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>
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.
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);
}
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);
}
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
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);
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;
    }
}
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);
    }
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);
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);
    }
}
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);
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/MaterialCheckStatusEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
using 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,
    }
}
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;
}
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; }
}
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;
    }
}
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);
}
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>
        /// ç‰©æ–™ä»£å·
        /// </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;
        }
    }
}
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()
        {
        }
    }
}
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;
        }
    }
}
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>
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>
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)
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("物料代号");
            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();
        });
    }
}
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("是否禁用");
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>
    /// æŸ¥çœ‹åº“区是否存在
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();
    }
}
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);
    }
}
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 */
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("仓库代码");
                    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("物料代号");
                    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、m、个)");
                    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("规格/标准(如:GB/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("仓库代码");
                    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
        }
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505105851_InitialCreate2.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,196 @@
using 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: "物料代号")
                        .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");
        }
    }
}
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("仓库代码");
                    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("物料代号");
                    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、m、个)");
                    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("规格/标准(如:GB/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("仓库代码");
                    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
        }
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505121050_InitialCreate3.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
using 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");
        }
    }
}
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("物料代号");
                    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")
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
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 =>
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 */
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" };
        }
    }
}
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);
HIAWms/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterialInfoµ¼³öÄ£°å.xlsx
Binary files differ
HIAWms/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterialStockµ¼³öÄ£°å.xlsx
Binary files differ
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']
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",
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,
HIAWms/web/src/widgets/HIAWms/Views/Pages/WmsMaterial/Config.ts
@@ -21,6 +21,10 @@
    title: '物料类型',
  },
  {
    field: 'materialModel',
    title: '物料型号',
  },
  {
    field: 'primaryUnit',
    title: '主单位',
  },
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) => {
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,
  }
}
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,
  }
}
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)
    },
  })
  /**
   * æ·»åŠ çš„form字段
   */
  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,
  }
}
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)
}
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)
}
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)
  }
}
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)
  }
}
HIAWms/web/src/widgets/WmsMaterialStock/Views/Pages/Dialog/WmsMaterialStockDrawer/WmsMaterialStockDrawer.module.scss
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
.drawer {
  width: 800px;
}
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>
    )
  },
})
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: '备注',
  },
]
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%;
  }
}
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>
      )
    }
  },
})
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;
}
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>
      )
    }
  },
})
HIAWms/web/src/widgets/WmsMaterialStock/Views/config/WmsMaterialStock.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
{
  "name": "WmsMaterialStock"
}
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': '列表-输出',
}
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,
}
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
}
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, // ä»“库代码
      // storeName: formData.value.storeName, // ä»“库名称
      storeCode: formData.value.storeCode.areaCode, // ä»“库代码
      storeName: formData.value.storeCode.storeName, // ä»“库名称
      remark: formData.value.remark, // å¤‡æ³¨
    }
    if (!current.value) {