zs
2025-05-13 becbbb4135880b054e20153e889a3932bae679b9
库存查询
已添加2个文件
已修改15个文件
已删除1个文件
1188 ■■■■ 文件已修改
CommonDLL/CmsQueryExtensions.dll 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStock/WmsMaterialStock.tsx 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/GetWmsMaterialStockInput.cs 360 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/GetWmsMaterialStocksInput.cs 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateDto.cs 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateOrUpdateDtoBase.cs 91 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockDto.cs 146 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockExportModel.cs 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockUpdateDto.cs 27 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStocksImportModel.cs 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsMaterialStockAppService.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsCommonAppService.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsMaterialStockAutoMapperProfile.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialStocks/IWmsMaterialStockRepository.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialStockRepository.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialStockController.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/queryExtensions/CmsQueryExtensions/Utils/GetEnumDescriptionUtil.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CommonDLL/CmsQueryExtensions.dll
Binary files differ
HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStock/WmsMaterialStock.tsx
@@ -145,7 +145,7 @@
      tableRef.value = {
        dataSource: [],
      }
      handleQueryForMain()
      // handleQueryForMain()
    })
    // å®šä¹‰å“åº”式查询数据
@@ -158,10 +158,10 @@
      _curHighQueryData.value.searchVal = queryForm.value.searchVal
      _curHighQueryData.value.str_searchFormInputAttrs =
        _searchFormInputAttrs.value
      if (!_curHighQueryData.value?.storageTypeNo) {
        _curHighQueryData.value.storageTypeNo = 1
      }
      tableRef.value.getList(_curHighQueryData.value)
      // if (!_curHighQueryData.value?.storageTypeNo) {
      //   _curHighQueryData.value.storageTypeNo = 1
      // }
      tableRef.value?.getList(_curHighQueryData.value)
    }
    // æ–°ç‰ˆçš„æŸ¥è¯¢æ–¹æ³•(高级查询中的按钮【查询】)
    const handleQuery = async (extraParams = {}) => {
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/GetWmsMaterialStockInput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,360 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CmsQueryExtensions.Extension;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks;
/// <summary>
/// å‡ºå…¥åº“单据详情查询参数
/// </summary>
public class GetWmsMaterialStockInput : ExtensiblePagedAndSortedResultRequestDto
{
    #region å…³é”®å­—查询
    /// <summary>
    /// å…³é”®å­—模糊查询(注意是小写!)
    /// </summary>
    public string searchVal { get; set; }
    /// <summary>
    /// é€šç”¨æŸ¥è¯¢é…ç½® (1:模糊查询 , 2:精准查询)(注意是小写!)
    /// </summary>
    public SearchFilterModeEnum searchVal_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// å­æœç´¢ç»„件传递的通用查询配置的属性名(注意是小写!)
    /// </summary>
    [NoAutoQuery]
    public string str_searchFormInputAttrs { get; set; }
    /// <summary>
    /// å­æœç´¢ç»„件传递的通用查询配置的属性名(注意是小写!)
    /// </summary>
    public List<string> searchFormInputAttrs
    {
        get
        {
            if (!string.IsNullOrEmpty(str_searchFormInputAttrs))
            {
                return str_searchFormInputAttrs.Split(',').ToList();
            }
            return new List<string>();
        }
    }
    #endregion
    /// <summary>
    /// ç‰©æ–™ID
    /// </summary>
    public string MaterialId { get; set; }
    /// <summary>
    /// ç‰©æ–™ID-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum MaterialId_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// ç‰©æ–™åç§°
    /// </summary>
    public string MaterialName { get; set; }
    /// <summary>
    /// ç‰©æ–™åç§°-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum MaterialName_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// å®¹å™¨ç¼–号
    /// </summary>
    public string ContainerNo { get; set; }
    /// <summary>
    /// å®¹å™¨ç¼–号-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum ContainerNo_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// å®¹å™¨çŠ¶æ€
    /// </summary>
    public ContainerStatusEnum? ContainerStatus { get; set; }
    /// <summary>
    /// å®¹å™¨çŠ¶æ€-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum ContainerStatus_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// å®¹å™¨ç±»åž‹
    /// </summary>
    public ContainerTypeEnum? ContainerType { get; set; }
    /// <summary>
    /// å®¹å™¨ç±»åž‹-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum ContainerType_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// ç‰©æ–™ç¼–号
    /// </summary>
    public string MaterialNo { get; set; }
    /// <summary>
    /// ç‰©æ–™ç¼–号-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum MaterialNo_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// åº“存数量
    /// </summary>
    public int? StockNumber { get; set; }
    /// <summary>
    /// åº“存数量-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum StockNumber_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// ç‰©æ–™æ‰¹æ¬¡
    /// </summary>
    public string MaterialBatch { get; set; }
    /// <summary>
    /// ç‰©æ–™æ‰¹æ¬¡-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum MaterialBatch_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// ä¾›åº”商编号
    /// </summary>
    public string SupplierCode { get; set; }
    /// <summary>
    /// ä¾›åº”商编号-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum SupplierCode_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// æœºåž‹/规格
    /// </summary>
    public string MaterialModel { get; set; }
    /// <summary>
    /// æœºåž‹/规格-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum MaterialModel_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// åº“位编号
    /// </summary>
    public string PlaceNo { get; set; }
    /// <summary>
    /// åº“位编号-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum PlaceNo_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// åº“位状态;
    /// </summary>
    public PlaceStatusEnum? PlaceStatus { get; set; }
    /// <summary>
    /// åº“位状态;-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum PlaceStatus_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// åº“位类型
    /// </summary>
    public PlaceTypeEnum? StorageTypeNo { get; set; } = PlaceTypeEnum.YUANLIAOKUWEI;
    /// <summary>
    /// åº“位类型-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum StorageTypeNo_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// åŒºåŸŸç¼–号
    /// </summary>
    public string AreaCode { get; set; }
    /// <summary>
    /// åŒºåŸŸç¼–号-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum AreaCode_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// åº“区名称
    /// </summary>
    public string AreaName { get; set; }
    /// <summary>
    /// åº“区名称-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum AreaName_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// æ£€éªŒçŠ¶æ€(1:未检验,2:检验通过,3:检验不通过)
    /// </summary>
    public MaterialCheckStatusEnum? CheckStatus { get; set; }
    /// <summary>
    /// æ£€éªŒçŠ¶æ€(1:未检验,2:检验通过,3:检验不通过)-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum CheckStatus_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// æ˜¯å¦é”å®š(2:未锁定,1:已锁定)
    /// </summary>
    public YesNoEnum? IsLock { get; set; }
    /// <summary>
    /// æ˜¯å¦é”å®š(2:未锁定,1:已锁定)-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum IsLock_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// æ˜¯å¦ç©ºæ‰˜(2:否,1:是)
    /// </summary>
    public YesNoEnum? EmptyContainer { get; set; }
    /// <summary>
    /// æ˜¯å¦ç©ºæ‰˜(2:否,1:是)-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum EmptyContainer_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// å…¥åº“æ—¶é—´
    /// </summary>
    //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
    [HighSearchRangeAttribute]
    public List<string> InStockTime { get; set; }
    /// <summary>
    /// æŽ’序
    /// </summary>
    public int? Sort { get; set; }
    /// <summary>
    /// æŽ’序-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum Sort_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    /// å¤‡æ³¨
    /// </summary>
    public string Remark { get; set; }
    /// <summary>
    /// å¤‡æ³¨-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum Remark_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// å†—余字段1 - é¢„留扩展用途
    /// </summary>
    public string RedundantField1 { get; set; }
    /// <summary>
    /// å†—余字段1 - é¢„留扩展用途-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum RedundantField1_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// å†—余字段2 - é¢„留扩展用途
    /// </summary>
    public string RedundantField2 { get; set; }
    /// <summary>
    /// å†—余字段2 - é¢„留扩展用途-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum RedundantField2_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// å†—余字段3 - é¢„留扩展用途
    /// </summary>
    public string RedundantField3 { get; set; }
    /// <summary>
    /// å†—余字段3 - é¢„留扩展用途-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum RedundantField3_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨
    /// </summary>
    public bool? IsDisabled { get; set; }
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨-查询关系运算符
    /// </summary>
    public SearchFilterModeEnum IsDisabled_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    ///
    /// </summary>
    //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
    [HighSearchRangeAttribute]
    public List<string> CreationTime { get; set; }
    /// <summary>
    ///
    /// </summary>
    public string CreatorId { get; set; }
    /// <summary>
    /// -查询关系运算符
    /// </summary>
    public SearchFilterModeEnum CreatorId_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    ///
    /// </summary>
    //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
    [HighSearchRangeAttribute]
    public List<string> LastModificationTime { get; set; }
    /// <summary>
    ///
    /// </summary>
    public string LastModifierId { get; set; }
    /// <summary>
    /// -查询关系运算符
    /// </summary>
    public SearchFilterModeEnum LastModifierId_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    ///
    /// </summary>
    public bool? IsDeleted { get; set; }
    /// <summary>
    /// -查询关系运算符
    /// </summary>
    public SearchFilterModeEnum IsDeleted_FilterMode { get; set; } = SearchFilterModeEnum.精准查询;
    /// <summary>
    ///
    /// </summary>
    public string DeleterId { get; set; }
    /// <summary>
    /// -查询关系运算符
    /// </summary>
    public SearchFilterModeEnum DeleterId_FilterMode { get; set; } = SearchFilterModeEnum.模糊查询;
    /// <summary>
    ///
    /// </summary>
    //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
    [HighSearchRangeAttribute]
    public List<string> DeletionTime { get; set; }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/GetWmsMaterialStocksInput.cs
ÎļþÒÑɾ³ý
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateDto.cs
@@ -1,17 +1,19 @@
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks;
/// <summary>
/// WmsMaterialStock创建参数对象
/// </summary>
public class WmsMaterialStockCreateDto : WmsMaterialStockCreateOrUpdateDtoBase
{
    /// <summary>
    /// æŽ’序
    /// </summary>
    public virtual int? Sort { get; set; }
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨
    /// </summary>
    public bool? IsDisabled { get; set; } = false;
}
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks;
/// <summary>
/// å‡ºå…¥åº“单据详情创建参数对象
/// </summary>
public class WmsMaterialStockCreateDto : WmsMaterialStockCreateOrUpdateDtoBase
{
    /// <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/WmsMaterialStocks/WmsMaterialStockCreateOrUpdateDtoBase.cs
@@ -1,27 +1,28 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using System;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks;
/// <summary>
/// WmsMaterialStock创建或更新基类
/// </summary>
/// <summary>
/// å‡ºå…¥åº“单据详情创建或更新基类
/// </summary>
public abstract class WmsMaterialStockCreateOrUpdateDtoBase : ExtensibleEntityDto
{
    /// <summary>
    /// ç¼–号
    /// ç‰©æ–™ID
    /// </summary>
    public virtual string MaterialId { get; set; }
    public string MaterialId { get; set; }
    /// <summary>
    /// åç§°
    /// ç‰©æ–™åç§°
    /// </summary>
    public virtual string MaterialName { get; set; }
    public string MaterialName { get; set; }
    /// <summary>
    /// å®¹å™¨ç¼–号
    /// </summary>
    public string ContainerNo { get; set; }
    public string? ContainerNo { get; set; }
    /// <summary>
    /// å®¹å™¨çŠ¶æ€
@@ -46,55 +47,55 @@
    /// <summary>
    /// ç‰©æ–™æ‰¹æ¬¡
    /// </summary>
    public string MaterialBatch { get; set; }
    public string? MaterialBatch { get; set; }
    /// <summary>
    /// ä¾›åº”商编号
    /// </summary>
    public string SupplierCode { get; set; }
    public string? SupplierCode { get; set; }
    /// <summary>
    /// æœºåž‹
    /// æœºåž‹/规格
    /// </summary>
    public string MaterialModel { get; set; }
    public string? MaterialModel { get; set; }
    /// <summary>
    /// åº“位编号
    /// </summary>
    public string PlaceNo { get; set; }
    public string? PlaceNo { get; set; }
    /// <summary>
    /// åº“位状态
    /// åº“位状态;
    /// </summary>
    public PlaceStatusEnum PlaceStatus { get; set; }
    /// <summary>
    /// åº“位类型编号
    /// åº“位类型
    /// </summary>
    public PlaceTypeEnum StorageTypeNo { get; set; }
    /// <summary>
    /// åŒºåŸŸç¼–号
    /// </summary>
    public string AreaCode { get; set; }
    public string? AreaCode { get; set; }
    /// <summary>
    /// åº“区名称
    /// </summary>
    public string AreaName { get; set; }
    public string? AreaName { get; set; }
    /// <summary>
    /// æ£€éªŒçŠ¶æ€
    /// æ£€éªŒçŠ¶æ€(1:未检验,2:检验通过,3:检验不通过)
    /// </summary>
    public MaterialCheckStatusEnum? CheckStatus { get; set; }
    public MaterialCheckStatusEnum? CheckStatus { get; set; } = MaterialCheckStatusEnum.HEGE;
    /// <summary>
    /// æ˜¯å¦é”å®š
    /// æ˜¯å¦é”å®š(2:未锁定,1:已锁定)
    /// </summary>
    public YesNoEnum IsLock { get; set; }
    /// <summary>
    /// æ˜¯å¦ç©ºæ‰˜
    /// æ˜¯å¦ç©ºæ‰˜(2:否,1:是)
    /// </summary>
    public YesNoEnum EmptyContainer { get; set; }
@@ -104,13 +105,55 @@
    public DateTime? InStockTime { get; set; }
    /// <summary>
    /// å¤‡æ³¨
    /// æŽ’序
    /// </summary>
    public virtual string Remark { get; set; }
    public int Sort { get; set; }
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsMaterialStockCreateOrUpdateDtoBase"/> class.
    /// å¤‡æ³¨
    /// </summary>
    public 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>
    public bool? IsDisabled { get; set; }
    /// <summary>
    ///
    /// </summary>
    public string? CreatorId { get; set; }
    /// <summary>
    ///
    /// </summary>
    public string? LastModifierId { get; set; }
    /// <summary>
    ///
    /// </summary>
    public DateTime? DeletionTime { get; set; }
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsMaterialStockCreateOrUpdateDtoBase"/> class.
    /// </summary>
    public WmsMaterialStockCreateOrUpdateDtoBase() : base(false)
    {
    }
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockDto.cs
@@ -1,30 +1,31 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CmsQueryExtensions;
using System.Runtime.CompilerServices;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks;
/// <summary>
/// WmsMaterialStock数据参数对象
/// </summary>
/// <summary>
/// å‡ºå…¥åº“单据详情数据参数对象
/// </summary>
public class WmsMaterialStockDto : ExtensibleEntityDto<Guid>, IHasConcurrencyStamp
{
    /// <summary>
    /// ç¼–号
    /// ç‰©æ–™ID
    /// </summary>
    public virtual string MaterialId { get; set; }
    public string MaterialId { get; set; }
    /// <summary>
    /// åç§°
    /// ç‰©æ–™åç§°
    /// </summary>
    public virtual string MaterialName { get; set; }
    public string MaterialName { get; set; }
    /// <summary>
    /// å®¹å™¨ç¼–号
    /// </summary>
    public string ContainerNo { get; set; }
    public string? ContainerNo { get; set; }
    /// <summary>
    /// å®¹å™¨çŠ¶æ€
@@ -32,7 +33,7 @@
    public ContainerStatusEnum ContainerStatus { get; set; }
    /// <summary>
    /// æ‰˜ç›˜çŠ¶æ€
    /// å®¹å™¨çŠ¶æ€
    /// </summary>
    public string ContainerStatusDesc
    {
@@ -41,14 +42,13 @@
            return GetEnumDescriptionUtil.GetEnumDescription(ContainerStatus);
        }
    }
    /// <summary>
    /// å®¹å™¨ç±»åž‹
    /// </summary>
    public ContainerTypeEnum ContainerType { get; set; }
    /// <summary>
    /// æ‰˜ç›˜ç±»åž‹
    /// å®¹å™¨ç±»åž‹
    /// </summary>
    public string ContainerTypeDesc
    {
@@ -57,8 +57,6 @@
            return GetEnumDescriptionUtil.GetEnumDescription(ContainerType);
        }
    }
    /// <summary>
    /// ç‰©æ–™ç¼–号
    /// </summary>
@@ -72,30 +70,30 @@
    /// <summary>
    /// ç‰©æ–™æ‰¹æ¬¡
    /// </summary>
    public string MaterialBatch { get; set; }
    public string? MaterialBatch { get; set; }
    /// <summary>
    /// ä¾›åº”商编号
    /// </summary>
    public string SupplierCode { get; set; }
    public string? SupplierCode { get; set; }
    /// <summary>
    /// æœºåž‹
    /// æœºåž‹/规格
    /// </summary>
    public string MaterialModel { get; set; }
    public string? MaterialModel { get; set; }
    /// <summary>
    /// åº“位编号
    /// </summary>
    public string PlaceNo { get; set; }
    public string? PlaceNo { get; set; }
    /// <summary>
    /// åº“位状态
    /// åº“位状态;
    /// </summary>
    public PlaceStatusEnum PlaceStatus { get; set; }
    /// <summary>
    /// è´§ä½çŠ¶æ€
    /// åº“位状态;
    /// </summary>
    public string PlaceStatusDesc
    {
@@ -104,15 +102,13 @@
            return GetEnumDescriptionUtil.GetEnumDescription(PlaceStatus);
        }
    }
    /// <summary>
    /// åº“位类型编号
    /// åº“位类型
    /// </summary>
    public PlaceTypeEnum StorageTypeNo { get; set; }
    /// <summary>
    /// è´§ä½ç±»åž‹
    /// åº“位类型
    /// </summary>
    public string StorageTypeNoDesc
    {
@@ -121,40 +117,39 @@
            return GetEnumDescriptionUtil.GetEnumDescription(StorageTypeNo);
        }
    }
    /// <summary>
    /// åŒºåŸŸç¼–号
    /// </summary>
    public string AreaCode { get; set; }
    public string? AreaCode { get; set; }
    /// <summary>
    /// åº“区名称
    /// </summary>
    public string AreaName { get; set; }
    public string? AreaName { get; set; }
    /// <summary>
    /// æ£€éªŒçŠ¶æ€
    /// æ£€éªŒçŠ¶æ€(1:未检验,2:检验通过,3:检验不通过)
    /// </summary>
    public MaterialCheckStatusEnum? CheckStatus { get; set; }
    /// <summary>
    /// æ£€éªŒçŠ¶æ€
    /// æ£€éªŒçŠ¶æ€(1:未检验,2:检验通过,3:检验不通过)
    /// </summary>
    public string CheckStatusDesc
    public string? CheckStatusDesc
    {
        get
        {
            if (!CheckStatus.HasValue) { return "未检验"; }
            return GetEnumDescriptionUtil.GetEnumDescription(CheckStatus);
        }
    }
    /// <summary>
    /// æ˜¯å¦é”å®š
    /// æ˜¯å¦é”å®š(2:未锁定,1:已锁定)
    /// </summary>
    public YesNoEnum IsLock { get; set; }
    /// <summary>
    /// æ˜¯å¦é”å®š
    /// æ˜¯å¦é”å®š(2:未锁定,1:已锁定)
    /// </summary>
    public string IsLockDesc
    {
@@ -163,14 +158,13 @@
            return GetEnumDescriptionUtil.GetEnumDescription(IsLock);
        }
    }
    /// <summary>
    /// æ˜¯å¦ç©ºæ‰˜
    /// æ˜¯å¦ç©ºæ‰˜(2:否,1:是)
    /// </summary>
    public YesNoEnum EmptyContainer { get; protected set; }
    public YesNoEnum EmptyContainer { get; set; }
    /// <summary>
    /// æ˜¯å¦ç©ºæ‰˜
    /// æ˜¯å¦ç©ºæ‰˜(2:否,1:是)
    /// </summary>
    public string EmptyContainerDesc
    {
@@ -179,7 +173,6 @@
            return GetEnumDescriptionUtil.GetEnumDescription(EmptyContainer);
        }
    }
    /// <summary>
    /// å…¥åº“æ—¶é—´
    /// </summary>
@@ -188,27 +181,88 @@
    /// <summary>
    /// æŽ’序
    /// </summary>
    public virtual int Sort { get; set; }
    public int Sort { get; set; }
    /// <summary>
    /// åº“存次序
    /// </summary>
    public int OrderInPlace { get; set; }
    /// <summary>
    /// å¤‡æ³¨
    /// </summary>
    public virtual string Remark { get; set; }
    public 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>
    public virtual bool? IsDisabled { get; set; }
    public bool? IsDisabled { get; set; }
    /// <summary>
    /// å¹¶å‘戳
    ///
    /// </summary>
    public string ConcurrencyStamp { get; set; }
    public ExtraPropertyDictionary? ExtraProperties { get; set; }
    /// <summary>
    /// Gets the export data.
    ///
    /// </summary>
    /// <returns></returns>
    public string? ConcurrencyStamp { get; set; }
    /// <summary>
    ///
    /// </summary>
    public DateTime CreationTime { get; set; }
    /// <summary>
    ///
    /// </summary>
    public string? CreatorId { get; set; }
    /// <summary>
    ///
    /// </summary>
    public DateTime? LastModificationTime { get; set; }
    /// <summary>
    ///
    /// </summary>
    public string? LastModifierId { get; set; }
    /// <summary>
    ///
    /// </summary>
    public bool IsDeleted { get; set; }
    /// <summary>
    ///
    /// </summary>
    public string? DeleterId { get; set; }
    /// <summary>
    ///
    /// </summary>
    public DateTime? DeletionTime { get; set; }
    /// <summary>
    /// Gets the export data.
    /// </summary>
    /// <returns></returns>
    public Dictionary<string, object> GetExportData()
    {
        var exportData = new Dictionary<string, object>();
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockExportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,175 @@
using MiniExcelLibs.Attributes;
using System.ComponentModel.DataAnnotations;
using System;
using System.ComponentModel;
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks;
/// <summary>
/// å‡ºå…¥åº“单据详情导出模型
/// </summary>
public  class WmsMaterialStockExportModel
{
            /// <summary>
        /// ç‰©æ–™ID
        /// </summary>
        [ExcelColumn(Name = "物料ID", Width = 25)]
        public string MaterialId { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        [ExcelColumn(Name = "物料名称", Width = 25)]
        public string MaterialName { get; set; }
        /// <summary>
        /// å®¹å™¨ç¼–号
        /// </summary>
        [ExcelColumn(Name = "容器编号", Width = 25)]
        public string ContainerNo { get; set; }
        /// <summary>
        /// å®¹å™¨çŠ¶æ€
        /// </summary>
        [ExcelColumn(Name = "容器状态", Width = 25)]
        public ContainerStatusEnum ContainerStatus { get; set; }
        /// <summary>
        /// å®¹å™¨ç±»åž‹
        /// </summary>
        [ExcelColumn(Name = "容器类型", Width = 25)]
        public ContainerTypeEnum ContainerType { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–号
        /// </summary>
        [ExcelColumn(Name = "物料编号", Width = 25)]
        public string MaterialNo { get; set; }
        /// <summary>
        /// åº“存数量
        /// </summary>
        [ExcelColumn(Name = "库存数量", Width = 25)]
        public int StockNumber { get; set; }
        /// <summary>
        /// ç‰©æ–™æ‰¹æ¬¡
        /// </summary>
        [ExcelColumn(Name = "物料批次", Width = 25)]
        public string MaterialBatch { get; set; }
        /// <summary>
        /// ä¾›åº”商编号
        /// </summary>
        [ExcelColumn(Name = "供应商编号", Width = 25)]
        public string SupplierCode { get; set; }
        /// <summary>
        /// æœºåž‹/规格
        /// </summary>
        [ExcelColumn(Name = "机型/规格", Width = 25)]
        public string MaterialModel { get; set; }
        /// <summary>
        /// åº“位编号
        /// </summary>
        [ExcelColumn(Name = "库位编号", Width = 25)]
        public string PlaceNo { get; set; }
        /// <summary>
        /// åº“位状态;
        /// </summary>
        [ExcelColumn(Name = "库位状态;", Width = 25)]
        public PlaceStatusEnum PlaceStatus { get; set; }
        /// <summary>
        /// åº“位类型
        /// </summary>
        [ExcelColumn(Name = "库位类型", Width = 25)]
        public PlaceTypeEnum StorageTypeNo { get; set; }
        /// <summary>
        /// åŒºåŸŸç¼–号
        /// </summary>
        [ExcelColumn(Name = "区域编号", Width = 25)]
        public string AreaCode { get; set; }
        /// <summary>
        /// åº“区名称
        /// </summary>
        [ExcelColumn(Name = "库区名称", Width = 25)]
        public string AreaName { get; set; }
        /// <summary>
        /// æ£€éªŒçŠ¶æ€(1:未检验,2:检验通过,3:检验不通过)
        /// </summary>
        [ExcelColumn(Name = "检验状态(1:未检验,2:检验通过,3:检验不通过)", Width = 25)]
        public MaterialCheckStatusEnum? CheckStatus { get; set; }
        /// <summary>
        /// æ˜¯å¦é”å®š(2:未锁定,1:已锁定)
        /// </summary>
        [ExcelColumn(Name = "是否锁定(2:未锁定,1:已锁定)", Width = 25)]
        public YesNoEnum IsLock { get; set; }
        /// <summary>
        /// æ˜¯å¦ç©ºæ‰˜(2:否,1:是)
        /// </summary>
        [ExcelColumn(Name = "是否空托(2:否,1:是)", Width = 25)]
        public YesNoEnum EmptyContainer { get; set; }
        /// <summary>
        /// å…¥åº“æ—¶é—´
        /// </summary>
        [ExcelColumn(Name = "入库时间", Width = 25)]
        public DateTime InStockTime { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [ExcelColumn(Name = "备注", Width = 25)]
        public string Remark { get; set; }
        /// <summary>
        /// å†—余字段1 - é¢„留扩展用途
        /// </summary>
        [ExcelColumn(Name = "冗余字段1 - é¢„留扩展用途", Width = 25)]
        public string RedundantField1 { get; set; }
        /// <summary>
        /// å†—余字段2 - é¢„留扩展用途
        /// </summary>
        [ExcelColumn(Name = "冗余字段2 - é¢„留扩展用途", Width = 25)]
        public string RedundantField2 { get; set; }
        /// <summary>
        /// å†—余字段3 - é¢„留扩展用途
        /// </summary>
        [ExcelColumn(Name = "冗余字段3 - é¢„留扩展用途", Width = 25)]
        public string RedundantField3 { get; set; }
        /// <summary>
        ///
        /// </summary>
        [ExcelColumn(Name = "", Width = 25)]
        public DateTime CreationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        [ExcelColumn(Name = "", Width = 25)]
        public DateTime LastModificationTime { get; set; }
    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/WmsMaterialStocks/WmsMaterialStockUpdateDto.cs
@@ -1,14 +1,13 @@
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks;
/// <summary>
/// WmsMaterialStock更新参数对象
/// </summary>
public class WmsMaterialStockUpdateDto : WmsMaterialStockCreateOrUpdateDtoBase, IHasConcurrencyStamp
{
    /// <summary>
    /// å¹¶å‘戳
    /// </summary>
    public string ConcurrencyStamp { get; set; }
}
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks;
/// <summary>
/// å‡ºå…¥åº“单据详情更新参数对象
/// </summary>
public class WmsMaterialStockUpdateDto : WmsMaterialStockCreateOrUpdateDtoBase, IHasConcurrencyStamp
{
   /// <summary>
    /// å¹¶å‘戳
    /// </summary>
    public string ConcurrencyStamp { get; set; }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStocksImportModel.cs
@@ -1,34 +1,33 @@
using static CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks.WmsMaterialStocksExportModel;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks
{
    /// <summary>
    /// WmsMaterialStocks导入模型
    /// </summary>
    public class WmsMaterialStocksImportModel
    {
        private List<WmsMaterialStockImportModel> _wmsmaterialstocks = new();
        public List<WmsMaterialStockImportModel> WmsMaterialStocks
        {
            get => _wmsmaterialstocks;
            set
            {
                _wmsmaterialstocks = value;
                var rowIndex = 2;
                _wmsmaterialstocks?.ForEach(x => x.RowIndex = rowIndex++);
            }
        }
        /// <summary>
        /// WmsMaterialStock导入模型
        /// </summary>
        public class WmsMaterialStockImportModel : WorkSectionExportModel
        {
            /// <summary>
            /// è¡Œå·
            /// </summary>
            public int RowIndex { get; set; }
        }
    }
}
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks
{
    /// <summary>
    /// å‡ºå…¥åº“单据详情导入模型
    /// </summary>
    public class WmsMaterialStocksImportModel
    {
        private List<WmsMaterialStockImportModel> _WmsMaterialStocks = new();
        public List<WmsMaterialStockImportModel> WmsMaterialStocks
        {
            get => _WmsMaterialStocks;
            set
            {
                _WmsMaterialStocks = value;
                var rowIndex = 2;
                _WmsMaterialStocks?.ForEach(x => x.RowIndex = rowIndex++);
            }
        }
        /// <summary>
        /// å‡ºå…¥åº“单据详情导入模型
        /// </summary>
        public class WmsMaterialStockImportModel : WmsMaterialStockExportModel
        {
            /// <summary>
            /// è¡Œå·
            /// </summary>
            public int RowIndex { get; set; }
        }
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsMaterialStockAppService.cs
@@ -7,7 +7,7 @@
/// <summary>
/// WmsMaterialStock应用服务
/// </summary>
public interface IWmsMaterialStockAppService : ICrudAppService<WmsMaterialStockDto, Guid, GetWmsMaterialStocksInput, WmsMaterialStockCreateDto, WmsMaterialStockUpdateDto>
public interface IWmsMaterialStockAppService : ICrudAppService<WmsMaterialStockDto, Guid, GetWmsMaterialStockInput, WmsMaterialStockCreateDto, WmsMaterialStockUpdateDto>
{
    /// <summary>
    /// Clones the asynchronous.
@@ -21,7 +21,7 @@
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<PagedResultDto<WmsMaterialStockDto>> GetStockDetailAsync(GetWmsMaterialStocksInput input);
    Task<PagedResultDto<WmsMaterialStockDto>> GetStockDetailAsync(GetWmsMaterialStockInput input);
    /// <summary>
    /// Deletes the many asynchronous.
@@ -57,5 +57,5 @@
    /// </summary>
    /// <param name="input">The input.</param>
    /// <returns></returns>
    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsMaterialStocksInput input);
    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsMaterialStockInput input);
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsCommonAppService.cs
@@ -5,9 +5,11 @@
using CMS.Plugin.HIAWms.Domain.WmsMaterials;
using CMS.Plugin.HIAWms.Domain.WmsMaterialStocks;
using CMS.Plugin.HIAWms.Domain.WmsPlaces;
using CmsQueryExtensions.Extension;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp;
@@ -44,8 +46,10 @@
        /// <exception cref="UserFriendlyException"></exception>
        public async Task<Dictionary<WmsPlaceDto, int>> FindAvailablePlacesAsync(string materialModel,int requiredNum, string materialNo="" )
        {
            var whereConditions = DynamicGetQueryParams(new GetWmsMaterialStockInput { StorageTypeNo = Domain.Shared.Enums.PlaceTypeEnum.YUANLIAOKUWEI });
            // 1. èŽ·å–æ‰€æœ‰åº“å­˜å’Œåº“ä½ä¿¡æ¯
            var stockList = await _wmsMaterialStockRepository.GetListAsync(new WmsMaterialStock { StorageTypeNo = Domain.Shared.Enums.PlaceTypeEnum.YUANLIAOKUWEI});
            var stockList = await _wmsMaterialStockRepository.GetListAsync(whereConditions);
            var placeList = await _wmsPlaceRepository.GetListAsync(new WmsPlace { StorageTypeNo = Domain.Shared.Enums.PlaceTypeEnum.YUANLIAOKUWEI});
            var allPlaceList = ObjectMapper.Map<List<WmsPlace>, List<WmsPlaceDto>>(placeList);
@@ -113,7 +117,8 @@
        public async Task<Dictionary<WmsMaterialStockDto, int>> FindStockAsync(string materialModel, int requiredNum, string materialNo = "")
        {
            // 1. èŽ·å–æ‰€æœ‰åº“å­˜ï¼ˆæŽ’é™¤é”å®šåº“å­˜ï¼‰
            var stockList = (await _wmsMaterialStockRepository.GetListAsync(new WmsMaterialStock()))
            var whereConditions = DynamicGetQueryParams(new GetWmsMaterialStockInput());
            var stockList = (await _wmsMaterialStockRepository.GetListAsync(whereConditions))
                .Where(x => x.IsLock == Domain.Shared.Enums.YesNoEnum.N)
                .Where(x=>x.StorageTypeNo == Domain.Shared.Enums.PlaceTypeEnum.YUANLIAOKUWEI)
                .ToList();
@@ -150,5 +155,23 @@
            return allocation;
        }
        private FunReturnResultModel<Expression<Func<WmsMaterialStock, bool>>> DynamicGetQueryParams(GetWmsMaterialStockInput input)
        {
            //动态构造查询条件
            var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsMaterialStock, GetWmsMaterialStockInput>(input);
            if (!whereConditions.IsSuccess)
            {
                throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
            }
            //也可再次自定义构建查询条件
            Expression<Func<WmsMaterialStock, bool>> extendExpression = a => a.IsDeleted == false;
            // ä½¿ç”¨ System.Linq.PredicateBuilder çš„ And
            var pres = (System.Linq.Expressions.Expression<Func<WmsMaterialStock, bool>>)(whereConditions.data);
            whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
            return whereConditions;
        }
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs
@@ -58,7 +58,7 @@
    }
    /// <inheritdoc />
    public virtual async Task<PagedResultDto<WmsMaterialStockDto>> GetListAsync(GetWmsMaterialStocksInput input)
    public virtual async Task<PagedResultDto<WmsMaterialStockDto>> GetListAsync(GetWmsMaterialStockInput input)
    {
        Check.NotNull(input, nameof(input));
@@ -67,15 +67,17 @@
            input.Sorting = nameof(WmsMaterialStock.Sort);
        }
        var specification = new WmsMaterialStockSpecification(input.Name);
        var stock = ObjectMapper.Map<GetWmsMaterialStocksInput, WmsMaterialStock>(input);
        var count = await _wmsmaterialstockRepository.GetCountAsync(stock, input.StartTime, input.EndTime, input.Filter, specification);
        var list = await _wmsmaterialstockRepository.GetListAsync(stock, input.StartTime, input.EndTime, input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification);
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        var stock = ObjectMapper.Map<GetWmsMaterialStockInput, WmsMaterialStock>(input);
        var count = await _wmsmaterialstockRepository.GetCountAsync(whereConditions);
        var list = await _wmsmaterialstockRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<WmsMaterialStockDto>(count, ObjectMapper.Map<List<WmsMaterialStock>, List<WmsMaterialStockDto>>(list));
    }
    public async Task<PagedResultDto<WmsMaterialStockDto>> GetStockDetailAsync(GetWmsMaterialStocksInput input)
    public async Task<PagedResultDto<WmsMaterialStockDto>> GetStockDetailAsync(GetWmsMaterialStockInput input)
    {
        Check.NotNull(input, nameof(input));
@@ -93,8 +95,40 @@
        var count = await _wmsmaterialstockRepository.GetDetailCountAsync(whereConditions);
        var list = await _wmsmaterialstockRepository.GetStockDetailListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        var result = list
        .GroupBy(x => x.PlaceNo)  // æŒ‰åº“位号分组
        .SelectMany(g => g
            .OrderBy(x => x.InStockTime)  // æŒ‰å…¥åº“时间排序
            .Select((x, index) => new WmsMaterialStockDto
            {
                MaterialId = x.MaterialId,
                MaterialBatch = x.MaterialBatch,
                MaterialModel = x.MaterialModel,
                MaterialName = x.MaterialName,
                MaterialNo = x.MaterialNo,
                CheckStatus = x.CheckStatus,
                ContainerNo = x.ContainerNo,
                ContainerType = x.ContainerType,
                StockNumber = x.StockNumber,
                SupplierCode = x.SupplierCode,
                PlaceNo = x.PlaceNo,
                PlaceStatus = x.PlaceStatus,
                StorageTypeNo = x.StorageTypeNo,
                AreaCode = x.AreaCode,
                AreaName = x.AreaName,
                IsLock = x.IsLock,
                Id = x.Id,
                EmptyContainer = x.EmptyContainer,
                InStockTime = x.InStockTime,
                RedundantField1 = x.RedundantField1,
                RedundantField2 = x.RedundantField2,
                RedundantField3 = x.RedundantField3,
                Remark = x.Remark,
                OrderInPlace = index+1
        return new PagedResultDto<WmsMaterialStockDto>(count, ObjectMapper.Map<List<WmsMaterialStock>, List<WmsMaterialStockDto>>(list));
            })).ToList();
        return new PagedResultDto<WmsMaterialStockDto>(count, result);
    }
    /// <summary>  
@@ -102,17 +136,17 @@
    /// </summary>  
    /// <param name="input">输入参数</param>  
    /// <returns></returns>  
    private FunReturnResultModel<Expression<Func<WmsMaterialStock, bool>>> DynamicGetQueryParams(GetWmsMaterialStocksInput input)
    private FunReturnResultModel<Expression<Func<WmsMaterialStock, bool>>> DynamicGetQueryParams(GetWmsMaterialStockInput input)
    {
        //动态构造查询条件  
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsMaterialStock, GetWmsMaterialStocksInput>(input);
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsMaterialStock, GetWmsMaterialStockInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        //也可再次自定义构建查询条件  
        Expression<Func<WmsMaterialStock, bool>> extendExpression = a => a.IsDeleted == false ;
        Expression<Func<WmsMaterialStock, bool>> extendExpression = a => a.IsDeleted == false;
        // ä½¿ç”¨ System.Linq.PredicateBuilder çš„ And 
        var pres = (System.Linq.Expressions.Expression<Func<WmsMaterialStock, bool>>)(whereConditions.data);
        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
@@ -415,7 +449,7 @@
    /// <inheritdoc />
    public virtual async Task AdjustSortAsync(Guid id, int sort)
    {
        var list = await _wmsmaterialstockRepository.GetListAsync(null, null, null, nameof(WmsMaterialStock.Sort));
        var list = await _wmsmaterialstockRepository.GetListAsync(null, "", 0, 999);
        if (list != null && list.Any())
        {
            var initSort = 1;
@@ -595,7 +629,7 @@
    }
    /// <inheritdoc />
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsMaterialStocksInput input)
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsMaterialStockInput input)
    {
        Check.NotNull(input, nameof(input));
@@ -604,9 +638,9 @@
            input.Sorting = nameof(WmsMaterialStock.Sort);
        }
        var specification = new WmsMaterialStockSpecification(input.Name);
        var stock = ObjectMapper.Map<GetWmsMaterialStocksInput, WmsMaterialStock>(input);
        var list = await _wmsmaterialstockRepository.GetListAsync(stock, input.StartTime, input.EndTime, input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification, includeDetails: true);
        var whereConditions = DynamicGetQueryParams(input);
        var stock = ObjectMapper.Map<GetWmsMaterialStockInput, WmsMaterialStock>(input);
        var list = await _wmsmaterialstockRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        var result = ObjectMapper.Map<List<WmsMaterialStock>, List<WmsMaterialStockDto>>(list);
        var sheets = new Dictionary<string, object>
HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsMaterialStockAutoMapperProfile.cs
@@ -23,6 +23,6 @@
         * into multiple profile classes for a better organization. */
        CreateMap<WmsMaterialStock, WmsMaterialStockDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<WmsMaterialStockCreateDto, WmsMaterialStock>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<GetWmsMaterialStocksInput, WmsMaterialStock>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<GetWmsMaterialStockInput, WmsMaterialStock>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterialStocks/IWmsMaterialStockRepository.cs
@@ -51,7 +51,7 @@
    /// <param name="includeDetails">if set to <c>true</c> [include details].</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    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);
    Task<List<WmsMaterialStock>> GetListAsync(FunReturnResultModel<Expression<Func<WmsMaterialStock, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default);
    /// <summary>
    /// èŽ·å–æ‰€æœ‰çš„åº“å­˜ä¿¡æ¯
@@ -87,5 +87,5 @@
    /// <param name="specification">The specification.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<long> GetCountAsync(WmsMaterialStock? stock, DateTime? startTime = null, DateTime? endTime = null, string filter = null, Specification<WmsMaterialStock> specification = null, CancellationToken cancellationToken = default);
    Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsMaterialStock, bool>>> whereConditions, CancellationToken cancellationToken = default);
}
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialStockRepository.cs
@@ -73,33 +73,10 @@
    }
    /// <inheritdoc />
    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)
    public async Task<List<WmsMaterialStock>> GetListAsync(FunReturnResultModel<Expression<Func<WmsMaterialStock, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsMaterialStockSpecification();
        var baseQuery = (await GetDbSetAsync())
        .IncludeDetails(includeDetails)
        .WhereIf(!filter.IsNullOrWhiteSpace(),
            u => u.MaterialNo.Contains(filter) ||
                 u.MaterialName.Contains(filter) ||
                 u.MaterialBatch.Contains(filter) ||
                 u.PlaceNo.Contains(filter) ||
                 u.AreaName.Contains(filter))
        .WhereIf(!string.IsNullOrEmpty(stock?.MaterialNo), u => u.MaterialNo.Contains(stock.MaterialNo))
        .WhereIf(!string.IsNullOrEmpty(stock?.MaterialName), u => u.MaterialName.Contains(stock.MaterialName))
        .WhereIf(!string.IsNullOrEmpty(stock?.ContainerNo), u => u.ContainerNo == stock.ContainerNo)
        .WhereIf(stock?.ContainerStatus > 0, u => u.ContainerStatus == stock.ContainerStatus)
        .WhereIf(stock?.ContainerType > 0, u => u.ContainerType == stock.ContainerType)
        .WhereIf(!string.IsNullOrEmpty(stock?.MaterialBatch), u => u.MaterialBatch == stock.MaterialBatch)
        .WhereIf(!string.IsNullOrEmpty(stock?.SupplierCode), u => u.SupplierCode == stock.SupplierCode)
        .WhereIf(!string.IsNullOrEmpty(stock?.MaterialModel), u => u.MaterialModel==stock.MaterialModel)
        .WhereIf(!string.IsNullOrEmpty(stock?.PlaceNo), u => u.PlaceNo == stock.PlaceNo)
        .WhereIf(stock.PlaceStatus > 0, u => u.PlaceStatus == stock.PlaceStatus)
        .WhereIf(stock?.StorageTypeNo > 0, u => u.StorageTypeNo == stock.StorageTypeNo)
        .WhereIf(!string.IsNullOrEmpty(stock?.AreaCode), u => u.AreaCode == stock.AreaCode)
        .WhereIf(!string.IsNullOrEmpty(stock?.AreaName), u => u.AreaName.Contains(stock.AreaName))
        .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)
        .IncludeDetails(includeDetails).WhereIf(whereConditions != null, whereConditions.data)
        .Where(u => !u.IsDeleted)
        .AsQueryable();
@@ -157,32 +134,10 @@
    }
    /// <inheritdoc />
    public async Task<long> GetCountAsync(WmsMaterialStock? stock, DateTime? startTime = null, DateTime? endTime = null, string filter = null, Specification<WmsMaterialStock> specification = null, CancellationToken cancellationToken = default)
    public async Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsMaterialStock, bool>>> whereConditions, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsMaterialStockSpecification();
        var baseQuery = (await GetQueryableAsync())
            .WhereIf(!filter.IsNullOrWhiteSpace(),
            u => u.MaterialNo.Contains(filter) ||
                 u.MaterialName.Contains(filter) ||
                 u.MaterialBatch.Contains(filter) ||
                 u.PlaceNo.Contains(filter) ||
                 u.AreaName.Contains(filter))
            .WhereIf(!string.IsNullOrEmpty(stock?.MaterialNo), u => u.MaterialNo.Contains(stock.MaterialNo))
            .WhereIf(!string.IsNullOrEmpty(stock?.MaterialName), u => u.MaterialName.Contains(stock.MaterialName))
            .WhereIf(!string.IsNullOrEmpty(stock?.ContainerNo), u => u.ContainerNo == stock.ContainerNo)
            .WhereIf(stock?.ContainerStatus > 0, u => u.ContainerStatus == stock.ContainerStatus)
            .WhereIf(stock?.ContainerType > 0, u => u.ContainerType == stock.ContainerType)
            .WhereIf(!string.IsNullOrEmpty(stock?.MaterialBatch), u => u.MaterialBatch == stock.MaterialBatch)
            .WhereIf(!string.IsNullOrEmpty(stock?.SupplierCode), u => u.SupplierCode == stock.SupplierCode)
            .WhereIf(!string.IsNullOrEmpty(stock?.MaterialModel), u => u.MaterialModel.Contains(stock.MaterialModel))
            .WhereIf(!string.IsNullOrEmpty(stock?.PlaceNo), u => u.PlaceNo == stock.PlaceNo)
            .WhereIf(stock.PlaceStatus > 0, u => u.PlaceStatus == stock.PlaceStatus)
            .WhereIf(stock?.StorageTypeNo > 0, u => u.StorageTypeNo == stock.StorageTypeNo)
            .WhereIf(!string.IsNullOrEmpty(stock?.AreaCode), u => u.AreaCode == stock.AreaCode)
            .WhereIf(!string.IsNullOrEmpty(stock?.AreaName), u => u.AreaName.Contains(stock.AreaName))
            .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)
           .WhereIf(whereConditions != null, whereConditions.data)
            .Where(u => !u.IsDeleted)
            .AsQueryable();
HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsMaterialStockController.cs
@@ -52,7 +52,7 @@
        /// <param name="input">输入.</param>
        /// <returns></returns>
        [HttpGet]
        public virtual Task<PagedResultDto<WmsMaterialStockDto>> GetListAsync([FromQuery] GetWmsMaterialStocksInput input)
        public virtual Task<PagedResultDto<WmsMaterialStockDto>> GetListAsync([FromQuery] GetWmsMaterialStockInput input)
        {
            return _wmsmaterialstockAppService.GetListAsync(input);
        }
@@ -64,7 +64,7 @@
        /// <returns></returns>
        [HttpGet]
        [Route("StockDetail")]
        public async Task<PagedResultDto<WmsMaterialStockDto>> GetStockDetailAsync([FromQuery]GetWmsMaterialStocksInput input)
        public async Task<PagedResultDto<WmsMaterialStockDto>> GetStockDetailAsync([FromQuery]GetWmsMaterialStockInput input)
        {
            return await _wmsmaterialstockAppService.GetStockDetailAsync(input);
        }
@@ -186,7 +186,7 @@
        /// <returns></returns>
        [HttpGet]
        [Route("Export")]
        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsMaterialStocksInput input)
        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsMaterialStockInput input)
        {
            input.MaxResultCount = int.MaxValue;
            var exportData = await _wmsmaterialstockAppService.ExportAsync(input);
Weben_CMSרÓôúÂëÉú³ÉÆ÷/queryExtensions/CmsQueryExtensions/Utils/GetEnumDescriptionUtil.cs
@@ -18,7 +18,7 @@
        public static string GetEnumDescription(Enum enumValue)
        {
            string value = enumValue.ToString();
            if (string.IsNullOrWhiteSpace(value) || value == "0") return "";
            if (string.IsNullOrEmpty(value) || value == "0") return "";
            FieldInfo field = enumValue.GetType().GetField(value);
            object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false);  //获取描述属性
            if (objs == null || objs.Length == 0)  //当描述属性没有时,直接返回名称