zs
2025-05-09 14f9c8378bde7d9a8d8f1fcc393e0e8d49eced82
查找空库位,查找库存
已添加15个文件
已重命名1个文件
已修改45个文件
2120 ■■■■■ 文件已修改
HIAWms/hiawms_web/src/widgets/HIAWms/Controllers/WmsMaterialDrawer.tsx 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/HIAWms/Views/Pages/WmsMaterial/Config.ts 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/HIAWms/Views/Pages/WmsMaterial/WmsMaterial.tsx 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStock/WmsMaterialStock.tsx 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/BindInstockDto/BindInstockInput.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/MaterialModelOutput.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainerPlace/GetWmsContainerPlaceInput.cs 239 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainerPlace/WmsContainerPlaceCreateDto.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainerPlace/WmsContainerPlaceCreateOrUpdateDtoBase.cs 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainerPlace/WmsContainerPlaceDto.cs 141 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainerPlace/WmsContainerPlaceExportModel.cs 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainerPlace/WmsContainerPlaceUpdateDto.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainerPlace/WmsContainerPlacesImportModel.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateOrUpdateDtoBase.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/ExportWmsMaterialModel.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/GetWmsMaterialsInput.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialCreateOrUpdateDtoBase.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialDto.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialsExportModel.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsCommonAppService.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsContainerPlaceAppService.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsEnumAppService.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAssService.cs 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsCommonAppService.cs 67 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsContainerPlaceAppService.cs 430 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsEnumAppService.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsContainerPlaceAutoMapperProfile.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsContainerPlace/IWmsContainerPlaceRepository.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsContainerPlace/WmsContainerPlace.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterials/IWmsMaterialRepository.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterials/WmsMaterial.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterials/WmsMaterialSpecification.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsPlaces/IWmsPlaceRepository.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsContainerPlace.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterial.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterialContainer.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsTask.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsAreaRepository.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsContainerPlaceRepository.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialRepository.cs 44 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsPlaceRepository.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsStoreRepository.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250429025531_InitialCreate.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250429025531_InitialCreate.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250430035549_InitialCreate1.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505105851_InitialCreate2.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505121050_InitialCreate3.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505135455_InitialCreate4.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505140345_InitialCreate5.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250506070902_InitialCreate6.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250506074429_InitialCreate7.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250507093411_InitialCreate8.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250508005509_InitialCreate9.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250509054804_InitialCreate10.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250509065902_InitialCreate11.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/CMSPluginDbContextModelSnapshot.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsContainerPlaceController.cs 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsEnumController.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsContainerPlace导出模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/hiawms_web/src/widgets/HIAWms/Controllers/WmsMaterialDrawer.tsx
@@ -56,7 +56,7 @@
  const formItems = reactive([
    {
      label: '物料编码',
      prop: 'materialCode',
      prop: 'materialNo',
      el: 'input',
      disabled: disabled,
      placeholder: '请输入物料编码',
@@ -214,7 +214,7 @@
  const onConfirm = async () => {
    await formRef.value?.validate()
    const data = {
      materialCode: formData.value.materialCode,
      materialNo: formData.value.materialNo,
      materialName: formData.value.materialName,
      purchaseType: formData.value.purchaseType,
      materialType: formData.value.materialType,
@@ -279,7 +279,7 @@
      const res = await wmsMaterialDrawer.getWmsMaterialDetail(current.value)
      formData.value = {
        materialCode: res.materialCode,
        materialNo: res.materialNo,
        materialName: res.materialName,
        purchaseType: res.purchaseType,
        materialType: res.materialType,
HIAWms/hiawms_web/src/widgets/HIAWms/Views/Pages/WmsMaterial/Config.ts
@@ -5,7 +5,7 @@
    title: '序号',
  },
  {
    field: 'materialCode',
    field: 'materialNo',
    title: '物料编码',
  },
  {
HIAWms/hiawms_web/src/widgets/HIAWms/Views/Pages/WmsMaterial/WmsMaterial.tsx
@@ -62,7 +62,7 @@
    // æ–°å¢žçš„æŸ¥è¯¢æ¡ä»¶
    const queryForm = ref({
      materialCode: '',
      materialNo: '',
      materialName: '',
      materialType: '',
      purchaseType: '',
@@ -122,7 +122,7 @@
    // é‡ç½®æŸ¥è¯¢æ¡ä»¶
    const resetQuery = () => {
      queryForm.value = {
        materialCode: '',
        materialNo: '',
        materialName: '',
        materialType: '',
        purchaseType: '',
@@ -216,7 +216,7 @@
            </ElFormItem>
            <ElFormItem label="物料编码">
              <ElInput
                v-model={queryForm.value.materialCode}
                v-model={queryForm.value.materialNo}
                placeholder="请输入物料编码"
                clearable
                class={styles.formItem}
HIAWms/hiawms_web/src/widgets/WmsMaterialStock/Views/Pages/WmsMaterialStock/WmsMaterialStock.tsx
@@ -64,7 +64,7 @@
      materialName: '',
      containerType: '',
      containerStatus: '',
      storageTypeNo: '',
      storageTypeNo: 1,
      placeStatus: '',
      placeNo: '',
      isLock: '',
@@ -77,7 +77,7 @@
      ...queryForm.value,
      containerType: queryForm.value.containerType || '', // å¤„理下拉
      containerStatus: queryForm.value.containerStatus || '',
      storageTypeNo: queryForm.value.storageTypeNo || '', // å¤„理下拉
      storageTypeNo: queryForm.value.storageTypeNo || 1, // å¤„理下拉
      placeStatus: queryForm.value.placeStatus || '',
      islock: queryForm.value.isLock || '',
      emptyContainer: queryForm.value.emptyContainer || '',
@@ -147,6 +147,7 @@
    // ç»„件挂载时获取枚举数据
    onMounted(() => {
      fetchEnumData()
      handleQuery()
    })
    // æ–°å¢žçš„æŸ¥è¯¢æ–¹æ³•
@@ -164,7 +165,7 @@
        materialName: '',
        containerType: '',
        containerStatus: '',
        storageTypeNo: '',
        storageTypeNo: 1,
        placeStatus: '',
        placeNo: '',
        isLock: '',
@@ -186,7 +187,10 @@
        params,
        autoHeight,
      } = props
      props.params = {
        ...queryParams.value,
        ...params,
      }
      return (
        <div
          class={{
@@ -334,7 +338,6 @@
              <ElSelect
                v-model={queryForm.value.storageTypeNo}
                placeholder="请选择托盘类型"
                clearable
                loading={enumOptions.storageTypeNo.length === 0}
                class={styles.formItem}
              >
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/BindInstockDto/BindInstockInput.cs
@@ -45,6 +45,6 @@
        /// <summary>
        /// ç»‘定数量
        /// </summary>
        public int MaterialStockNumber { get; set; }
        public int StockNumber { get; set; }
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/CommonDto/MaterialModelOutput.cs
@@ -21,4 +21,20 @@
        /// </summary>
        public string MaterialModelDesc { get; set; }
    }
    /// <summary>
    /// åº“位列表输出
    /// </summary>
    public class PlaceListOutput
    {
        /// <summary>
        /// åº“位号
        /// </summary>
        public string PlaceNo { get; set; }
        /// <summary>
        /// åº“位号
        /// </summary>
        public string PlaceNoDesc { get; set; }
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainerPlace/GetWmsContainerPlaceInput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,239 @@
using CmsQueryExtensions.Extension;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainerPlace;
/// <summary>
/// åº“位容器关系查询参数
/// </summary>
public class GetWmsContainerPlaceInput : 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>
        /// åº“位编码
        /// </summary>
        public string PlaceNo { get; set; }
        /// <summary>
        /// åº“位编码-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum PlaceNo_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ç¼–码
        /// </summary>
        public string ContainerNo { get; set; }
        /// <summary>
        /// ç¼–码-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ContainerNo_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æŽ’序
        /// </summary>
        public int?  Sort { get; set; }
        /// <summary>
        /// æŽ’序-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Sort_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// åç§°
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> BindTime { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool?  IsDisabled { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum IsDisabled_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string Remark { get; set; }
        /// <summary>
        /// å¤‡æ³¨-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Remark_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> CreationTime { get; set; }
        /// <summary>
        /// åˆ›å»ºäººID
        /// </summary>
        public string CreatorId { get; set; }
        /// <summary>
        /// åˆ›å»ºäººID-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum CreatorId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ä¿®æ”¹æ—¶é—´
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> LastModificationTime { get; set; }
        /// <summary>
        /// ä¿®æ”¹äººID
        /// </summary>
        public string LastModifierId { get; set; }
        /// <summary>
        /// ä¿®æ”¹äººID-查询关系运算符
        /// </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>
        /// åˆ é™¤äººID
        /// </summary>
        public string DeleterId { get; set; }
        /// <summary>
        /// åˆ é™¤äººID-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum DeleterId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// åˆ é™¤æ—¶é—´
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> DeletionTime { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        public string CreatorName { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum CreatorName_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// åˆ é™¤å¤‡æ³¨
        /// </summary>
        public string DeleteRemark { get; set; }
        /// <summary>
        /// åˆ é™¤å¤‡æ³¨-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum DeleteRemark_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ‰©å±•字段1
        /// </summary>
        public string ExtraField1 { get; set; }
        /// <summary>
        /// æ‰©å±•字段1-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ExtraField1_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ‰©å±•字段2
        /// </summary>
        public string ExtraField2 { get; set; }
        /// <summary>
        /// æ‰©å±•字段2-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ExtraField2_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ‰©å±•字段3
        /// </summary>
        public string ExtraField3 { get; set; }
        /// <summary>
        /// æ‰©å±•字段3-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ExtraField3_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ä¿®æ”¹äºº
        /// </summary>
        public string LastModifierName { get; set; }
        /// <summary>
        /// ä¿®æ”¹äºº-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum LastModifierName_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ“ä½œå¤‡æ³¨
        /// </summary>
        public string OperationRemark { get; set; }
        /// <summary>
        /// æ“ä½œå¤‡æ³¨-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum OperationRemark_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainerPlace/WmsContainerPlaceCreateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainerPlace;
/// <summary>
/// åº“位容器关系创建参数对象
/// </summary>
public class WmsContainerPlaceCreateDto : WmsContainerPlaceCreateOrUpdateDtoBase
{
    /// <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/WmsContainerPlace/WmsContainerPlaceCreateOrUpdateDtoBase.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,95 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using System;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainerPlace;
/// <summary>
/// åº“位容器关系创建或更新基类
/// </summary>
public abstract class WmsContainerPlaceCreateOrUpdateDtoBase : ExtensibleEntityDto
{
            /// <summary>
        /// åº“位编码
        /// </summary>
        public string PlaceNo { get; set; }
        /// <summary>
        /// ç¼–码
        /// </summary>
        public string ContainerNo { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        public int Sort { get; set; }
        /// <summary>
        /// åç§°
        /// </summary>
        public DateTime BindTime { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool? IsDisabled { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string? Remark { get; set; }
        /// <summary>
        /// åˆ›å»ºäººID
        /// </summary>
        public string? CreatorId { get; set; }
        /// <summary>
        /// ä¿®æ”¹äººID
        /// </summary>
        public string? LastModifierId { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        public string? CreatorName { get; set; }
        /// <summary>
        /// åˆ é™¤å¤‡æ³¨
        /// </summary>
        public string? DeleteRemark { get; set; }
        /// <summary>
        /// æ‰©å±•字段1
        /// </summary>
        public string? ExtraField1 { get; set; }
        /// <summary>
        /// æ‰©å±•字段2
        /// </summary>
        public string? ExtraField2 { get; set; }
        /// <summary>
        /// æ‰©å±•字段3
        /// </summary>
        public string? ExtraField3 { get; set; }
        /// <summary>
        /// ä¿®æ”¹äºº
        /// </summary>
        public string? LastModifierName { get; set; }
        /// <summary>
        /// æ“ä½œå¤‡æ³¨
        /// </summary>
        public string? OperationRemark { get; set; }
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsContainerPlaceCreateOrUpdateDtoBase"/> class.
    /// </summary>
    public WmsContainerPlaceCreateOrUpdateDtoBase() : base(false)
    {
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainerPlace/WmsContainerPlaceDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,141 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CmsQueryExtensions;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainerPlace;
/// <summary>
/// åº“位容器关系数据参数对象
/// </summary>
public  class WmsContainerPlaceDto:  ExtensibleEntityDto<Guid>, IHasConcurrencyStamp
{
            /// <summary>
        /// åº“位编码
        /// </summary>
        public string PlaceNo { get; set; }
        /// <summary>
        /// ç¼–码
        /// </summary>
        public string ContainerNo { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        public int Sort { get; set; }
        /// <summary>
        /// åç§°
        /// </summary>
        public DateTime BindTime { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool? IsDisabled { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string? Remark { get; set; }
        /// <summary>
        /// æ‰©å±•属性
        /// </summary>
        public ExtraPropertyDictionary? ExtraProperties { get; set; }
        /// <summary>
        /// å¹¶å‘戳
        /// </summary>
        public string? ConcurrencyStamp { get; set; }
        /// <summary>
        /// åˆ›å»ºæ—¶é—´
        /// </summary>
        public DateTime CreationTime { get; set; }
        /// <summary>
        /// åˆ›å»ºäººID
        /// </summary>
        public string? CreatorId { get; set; }
        /// <summary>
        /// ä¿®æ”¹æ—¶é—´
        /// </summary>
        public DateTime? LastModificationTime { get; set; }
        /// <summary>
        /// ä¿®æ”¹äººID
        /// </summary>
        public string? LastModifierId { get; set; }
        /// <summary>
        /// æ˜¯å¦åˆ é™¤
        /// </summary>
        public bool IsDeleted { get; set; }
        /// <summary>
        /// åˆ é™¤äººID
        /// </summary>
        public string? DeleterId { get; set; }
        /// <summary>
        /// åˆ é™¤æ—¶é—´
        /// </summary>
        public DateTime? DeletionTime { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        public string? CreatorName { get; set; }
        /// <summary>
        /// åˆ é™¤å¤‡æ³¨
        /// </summary>
        public string? DeleteRemark { get; set; }
        /// <summary>
        /// æ‰©å±•字段1
        /// </summary>
        public string? ExtraField1 { get; set; }
        /// <summary>
        /// æ‰©å±•字段2
        /// </summary>
        public string? ExtraField2 { get; set; }
        /// <summary>
        /// æ‰©å±•字段3
        /// </summary>
        public string? ExtraField3 { get; set; }
        /// <summary>
        /// ä¿®æ”¹äºº
        /// </summary>
        public string? LastModifierName { get; set; }
        /// <summary>
        /// æ“ä½œå¤‡æ³¨
        /// </summary>
        public string? OperationRemark { 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/WmsContainerPlace/WmsContainerPlaceExportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,103 @@
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.WmsContainerPlace;
/// <summary>
/// åº“位容器关系导出模型
/// </summary>
public  class WmsContainerPlaceExportModel
{
            /// <summary>
        /// åº“位编码
        /// </summary>
        [ExcelColumn(Name = "库位编码", Width = 25)]
        public string PlaceNo { get; set; }
        /// <summary>
        /// ç¼–码
        /// </summary>
        [ExcelColumn(Name = "编码", Width = 25)]
        public string ContainerNo { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        [ExcelColumn(Name = "排序", Width = 25)]
        public int Sort { get; set; }
        /// <summary>
        /// åç§°
        /// </summary>
        [ExcelColumn(Name = "名称", Width = 25)]
        public DateTime BindTime { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        [ExcelColumn(Name = "是否禁用", Width = 25)]
        public bool? IsDisabled { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [ExcelColumn(Name = "备注", Width = 25)]
        public string Remark { get; set; }
        /// <summary>
        /// åˆ›å»ºäºº
        /// </summary>
        [ExcelColumn(Name = "创建人", Width = 25)]
        public string CreatorName { get; set; }
        /// <summary>
        /// åˆ é™¤å¤‡æ³¨
        /// </summary>
        [ExcelColumn(Name = "删除备注", Width = 25)]
        public string DeleteRemark { get; set; }
        /// <summary>
        /// æ‰©å±•字段1
        /// </summary>
        [ExcelColumn(Name = "扩展字段1", Width = 25)]
        public string ExtraField1 { get; set; }
        /// <summary>
        /// æ‰©å±•字段2
        /// </summary>
        [ExcelColumn(Name = "扩展字段2", Width = 25)]
        public string ExtraField2 { get; set; }
        /// <summary>
        /// æ‰©å±•字段3
        /// </summary>
        [ExcelColumn(Name = "扩展字段3", Width = 25)]
        public string ExtraField3 { get; set; }
        /// <summary>
        /// ä¿®æ”¹äºº
        /// </summary>
        [ExcelColumn(Name = "修改人", Width = 25)]
        public string LastModifierName { get; set; }
        /// <summary>
        /// æ“ä½œå¤‡æ³¨
        /// </summary>
        [ExcelColumn(Name = "操作备注", Width = 25)]
        public string OperationRemark { 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/WmsContainerPlace/WmsContainerPlaceUpdateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainerPlace;
/// <summary>
/// åº“位容器关系更新参数对象
/// </summary>
public class WmsContainerPlaceUpdateDto : WmsContainerPlaceCreateOrUpdateDtoBase, IHasConcurrencyStamp
{
   /// <summary>
    /// å¹¶å‘戳
    /// </summary>
    public string ConcurrencyStamp { get; set; }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainerPlace/WmsContainerPlacesImportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainerPlace
{
    /// <summary>
    /// åº“位容器关系导入模型
    /// </summary>
    public class WmsContainerPlacesImportModel
    {
        private List<WmsContainerPlaceImportModel> _WmsContainerPlaces = new();
        public List<WmsContainerPlaceImportModel> WmsContainerPlaces
        {
            get => _WmsContainerPlaces;
            set
            {
                _WmsContainerPlaces = value;
                var rowIndex = 2;
                _WmsContainerPlaces?.ForEach(x => x.RowIndex = rowIndex++);
            }
        }
        /// <summary>
        /// åº“位容器关系导入模型
        /// </summary>
        public class WmsContainerPlaceImportModel : WmsContainerPlaceExportModel
        {
            /// <summary>
            /// è¡Œå·
            /// </summary>
            public int RowIndex { get; set; }
        }
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockCreateOrUpdateDtoBase.cs
@@ -96,7 +96,7 @@
    /// <summary>
    /// æ˜¯å¦ç©ºæ‰˜
    /// </summary>
    public YesNoEnum EmptyContainer { get; protected set; }
    public YesNoEnum EmptyContainer { get; set; }
    /// <summary>
    /// å…¥åº“æ—¶é—´
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/ExportWmsMaterialModel.cs
@@ -17,7 +17,7 @@
        /// ç‰©æ–™ç¼–码(唯一标识)
        /// </summary>
        [Description("物料编码(唯一标识)")]
        public string MaterialCode { get; set; }
        public string MaterialNo { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/GetWmsMaterialsInput.cs
@@ -21,7 +21,7 @@
    /// <summary>
    /// ç‰©æ–™ç¼–码(唯一标识)
    /// </summary>
    public string MaterialCode { get; set; }
    public string MaterialNo { get; set; }
    /// <summary>
    /// ç‰©æ–™åç§°
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialCreateOrUpdateDtoBase.cs
@@ -11,7 +11,7 @@
    /// <summary>
    /// ç‰©æ–™ç¼–码(唯一标识)
    /// </summary>
    public string MaterialCode { get; set; }
    public string MaterialNo { get; set; }
    /// <summary>
    /// ç‰©æ–™åç§°
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialDto.cs
@@ -13,7 +13,7 @@
    /// <summary>
    /// ç‰©æ–™ç¼–码(唯一标识)
    /// </summary>
    public string MaterialCode { get; set; }
    public string MaterialNo { get; set; }
    /// <summary>
    /// ç‰©æ–™åç§°
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialsExportModel.cs
@@ -16,7 +16,7 @@
        /// </summary>
        /// <example>MAT-2023-001</example>
        [ExcelColumn(Name = "物料编码", Width = 25)]
        public string MaterialCode { get; set; }
        public string MaterialNo { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsCommonAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlaces;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CMS.Plugin.HIAWms.Application.Contracts.Services
{
    public interface IWmsCommonAppService
    {
        /// <summary>
        /// æŸ¥æ‰¾å¯ç”¨åº“位
        /// </summary>
        /// <param name="materialModel"></param>
        /// <param name="requiredNum"></param>
        /// <param name="materialNo"></param>
        /// <returns></returns>
        Task<Dictionary<WmsPlaceDto, int>> FindAvailablePlacesAsync(string materialModel, int requiredNum, string materialNo = "");
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsContainerPlaceAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainerPlace;
using Volo.Abp.Application.Services;
namespace CMS.Plugin.HIAWms.Application.Contracts.Services;
/// <summary>
/// åº“位容器关系应用服务接口
/// </summary>
public interface IWmsContainerPlaceAppService : ICrudAppService<WmsContainerPlaceDto, Guid, GetWmsContainerPlaceInput, WmsContainerPlaceCreateDto, WmsContainerPlaceUpdateDto>
{
    /// <summary>
    /// å…‹éš†åº“位容器关系
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    Task<List<WmsContainerPlaceDto>> CloneAsync(IEnumerable<Guid> ids);
    /// <summary>
    /// åˆ é™¤åº“位容器关系
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    Task DeleteManyAsync(IEnumerable<Guid> ids);
    /// <summary>
    /// è°ƒæ•´æŽ’序库位容器关系
    /// </summary>
    /// <param name="id"></param>
    /// <param name="sort"></param>
    /// <returns></returns>
    Task AdjustSortAsync(Guid id, int sort);
    /// <summary>
    /// å¯¼å…¥åº“位容器关系
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task ImportAsync(WmsContainerPlacesImportModel input);
    /// <summary>
    /// å¯¼å‡ºåº“位容器关系
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsContainerPlaceInput input);
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsEnumAppService.cs
@@ -1,5 +1,7 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsEnumDto;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.CommonDto;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsEnumDto;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsStores;
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CmsQueryExtensions;
using static CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsAreas.WmsAreaCreateOrUpdateDtoBase;
using static CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlaces.WmsPlaceCreateOrUpdateDtoBase;
@@ -34,5 +36,19 @@
        /// </summary>
        /// <returns></returns>
        Task<List<PlaceAisleForListOuptut>> GetAisleListAsync();
        /// <summary>
        /// èŽ·å–æœºåž‹
        /// </summary>
        /// <returns></returns>
        Task<List<MaterialModelOutput>> GetMaterialModeListAsync();
        /// <summary>
        /// èŽ·å–åº“ä½åˆ—è¡¨
        /// </summary>
        /// <param name="placeType"></param>
        /// <returns></returns>
        Task<List<PlaceListOutput>> GetPlaceListForSelectAsync(PlaceTypeEnum placeType);
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsBindInStockAssService.cs
@@ -1,4 +1,15 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.BindInstockDto;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialStocks;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsTask;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CMS.Plugin.HIAWms.Domain.WmsContainerPlace;
using CMS.Plugin.HIAWms.Domain.WmsContainers;
using CMS.Plugin.HIAWms.Domain.WmsMaterialContainer;
using CMS.Plugin.HIAWms.Domain.WmsMaterialInfos;
using CMS.Plugin.HIAWms.Domain.WmsMaterials;
using CMS.Plugin.HIAWms.Domain.WmsPlaces;
using CMS.Plugin.HIAWms.Domain.WmsTask;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -13,21 +24,161 @@
    /// </summary>
    public class WmsBindInStockAssService : CMSPluginAppService
    {
        public async Task BindMaterialContaienrAsync(BindMaterialInput input)
        private readonly IWmsMaterialRepository _wmsMaterialRepository;
        private readonly IWmsContainerRepository _wmsContainerRepository;
        private readonly IWmsPlaceRepository _wmsPlaceRepository;
        private readonly IWmsMaterialContainerRepository _wmsMaterialContainerRepository;
        private readonly IWmsContainerPlaceRepository _wmsContainerPlaceRepository;
        private readonly IWmsMaterialInfoRepository _wmsMaterialInfoRepository;
        private readonly IWmsMaterialStockAppService _wmsMaterialStockAppService;
        private readonly IWmsCommonAppService _wmsCommonAppService;
        private readonly IWmsTaskRepository _wmsTaskRepository;
        private readonly IWmsTaskAppService _wmsTaskAppService;
        public WmsBindInStockAssService(IWmsMaterialRepository wmsMaterialRepository,
            IWmsContainerRepository wmsContainerRepository,
            IWmsPlaceRepository wmsPlaceRepository
,
            IWmsMaterialContainerRepository wmsMaterialContainerRepository,
            IWmsContainerPlaceRepository wmsContainerPlaceRepository,
            IWmsMaterialInfoRepository wmsMaterialInfoRepository,
            IWmsMaterialStockAppService wmsMaterialStockAppService,
            IWmsCommonAppService wmsCommonAppService,
            IWmsTaskRepository wmsTaskRepository,
            IWmsTaskAppService wmsTaskAppService)
        {
            _wmsMaterialRepository = wmsMaterialRepository;
            _wmsContainerRepository = wmsContainerRepository;
            _wmsPlaceRepository = wmsPlaceRepository;
            _wmsMaterialContainerRepository = wmsMaterialContainerRepository;
            _wmsContainerPlaceRepository = wmsContainerPlaceRepository;
            _wmsMaterialInfoRepository = wmsMaterialInfoRepository;
            _wmsMaterialStockAppService = wmsMaterialStockAppService;
            _wmsCommonAppService = wmsCommonAppService;
            _wmsTaskRepository = wmsTaskRepository;
            _wmsTaskAppService = wmsTaskAppService;
        }
        public async Task BindMaterialContaienrAsync(BindInstockInput input)
        {
            if (string.IsNullOrEmpty(input.MaterialModel)) { throw new UserFriendlyException("请选择库位编号"); }
            if (string.IsNullOrEmpty(input.MaterialBatch)) { throw new UserFriendlyException("请输入批次号"); }
            if (input.MaterialStockNumber<=0) { throw new UserFriendlyException("入库数量必须大于0"); }
            if (input.StockNumber <= 0) { throw new UserFriendlyException("入库数量必须大于0"); }
            #region åºŸå¼ƒ
            //string containerNo = DateTime.Now.ToString("yyMMddHHmmss") + new Random(Guid.NewGuid().GetHashCode()).Next(100, 9999).ToString();
            //// 5. åˆ›å»ºæ‰˜ç›˜
            //var container = new WmsContainer
            //{
            //    ContainerNo = containerNo,
            //    ContainerType = Domain.Shared.Enums.ContainerTypeEnum.XUNI,
            //    ContainerStatus = Domain.Shared.Enums.ContainerStatusEnum.ZUPANG,
            //};
            //await _wmsContainerRepository.InsertAsync(container);
            //var materialContainerList = new List<WmsMaterialContainer>();
            //var materialInfoList = new List<WmsMaterialInfo>();
            //for (int i = 0; i < input.MaterialStockNumber; i++)
            //{
            //    string materialId = Guid.NewGuid().ToString("N");
            //    var materialContainer = new WmsMaterialContainer
            //    {
            //        MaterialId = materialId,
            //        ContainerNo = containerNo,
            //    };
            //    materialContainerList.Add(materialContainer);
            //    var materialInfo = new WmsMaterialInfo
            //    {
            //    };
            //    materialInfoList.Add(materialInfo);
            //}
            //await _wmsMaterialContainerRepository.InsertManyAsync(materialContainerList);
            //await _wmsMaterialInfoRepository.InsertManyAsync(materialInfoList);
            #endregion
            var material = await _wmsMaterialRepository.FindByModelAsync(input.MaterialModel);
            if (material == null)
            {
                throw new UserFriendlyException($"物料型号 {input.MaterialModel} ä¸å­˜åœ¨ï¼");
        }
            // 5. åˆ›å»ºæ‰˜ç›˜
            var containerNo = input.ContainerNo;
            if (string.IsNullOrEmpty(containerNo))
            {
                containerNo = DateTime.Now.ToString("yyMMddHHmmss") + new Random(Guid.NewGuid().GetHashCode()).Next(100, 9999).ToString();
            }
            var container = new WmsContainer
            {
                ContainerNo = containerNo,
                ContainerType = Domain.Shared.Enums.ContainerTypeEnum.XUNI,
                ContainerStatus = Domain.Shared.Enums.ContainerStatusEnum.ZUPANG,
            };
            await _wmsContainerRepository.InsertAsync(container);
            var materialStock = new WmsMaterialStockCreateDto
            {
                MaterialNo = material.MaterialNo,
                MaterialName = material.MaterialName,
                MaterialBatch = input.MaterialBatch,
                StockNumber = input.StockNumber,
                CheckStatus = Domain.Shared.Enums.MaterialCheckStatusEnum.HEGE,
                IsLock = Domain.Shared.Enums.YesNoEnum.N,
                PlaceNo = input.PlaceNo,
                ContainerNo = containerNo,
                EmptyContainer = Domain.Shared.Enums.YesNoEnum.N,
            };
            await _wmsMaterialStockAppService.CreateAsync(materialStock);
        }
        /// <summary>
        /// ç»„盘入库
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        /// <exception cref="UserFriendlyException"></exception>
        public async Task BindInStockAsync(BindInstockInput input)
        {
            if(string.IsNullOrEmpty(input.PlaceNo)) { throw new UserFriendlyException("请选择库位编号"); }
            var bindInput = ObjectMapper.Map<BindInstockInput, BindMaterialInput>(input);
            await BindMaterialContaienrAsync(bindInput);
            input.ContainerNo = DateTime.Now.ToString("yyMMddHHmmss") + new Random(Guid.NewGuid().GetHashCode()).Next(100, 9999).ToString();
            await BindMaterialContaienrAsync(input);
            // ç”Ÿæˆä»»åŠ¡
            var plactDict = await _wmsCommonAppService.FindAvailablePlacesAsync(input.MaterialNo, input.StockNumber);
            var taskList = new List<WmsTask>();
            foreach (var kvp in plactDict)
            {
                var place = kvp.Key;    // WmsPlace对象
                var quantity = kvp.Value; // åˆ†é…æ•°é‡
                for (int i = 0; i < quantity; i++)
                {
                    var task = new WmsTask
                    {
                        TaskNo = $"RK_{DateTime.Now:yyyyMMddHHmmss}_{Guid.NewGuid().ToString("N").Substring(0, 6)}",
                        ContainerNo = input.ContainerNo,
                        SourcePlace = input.PlaceNo,
                        ToPlace = place.PlaceNo,
                        TaskType = TaskTypeEnum.RUKU,
                        SonTaskType = SonTaskTypeEnum.RGRUKU,
                        TaskStatus = WmsTaskStatus.WEIZHIXING,
                        TaskLevel = 999,
                        Aisle = 1,
                        DodeviceId = 0,
                        TaskDodeviceStatus = TaskDodeviceStatus.SrmNoStart,
                        IsNextTask = (int)YesNoEnum.Y,
                        IsRead = true,
                        MutableParam1 = input.MaterialModel,
                    };
                    taskList.Add(task);
                }
            }
            await _wmsTaskRepository.InsertManyAsync(taskList);
        }
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsCommonAppService.cs
@@ -1,4 +1,6 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.CommonDto;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlaces;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.WmsMaterials;
using CMS.Plugin.HIAWms.Domain.WmsMaterialStocks;
using CMS.Plugin.HIAWms.Domain.WmsPlaces;
@@ -14,7 +16,7 @@
    /// <summary>
    /// å…¬å…±æ“ä½œæœåŠ¡
    /// </summary>
    public class WmsCommonAppService : CMSPluginAppService
    public class WmsCommonAppService : CMSPluginAppService,IWmsCommonAppService
    {
        private readonly IWmsMaterialRepository _wmsMaterialRepository;
        private readonly IWmsPlaceRepository _wmsPlaceRepository;
@@ -30,17 +32,6 @@
            _wmsMaterialStockRepository = wmsMaterialStockRepository;
        }
        public async Task<List<MaterialModelOutput>> GetMaterialModeListAsync()
        {
            var materialList = await _wmsMaterialRepository.GetMaterialListAsync(new WmsMaterial());
            if (materialList == null || materialList.Count <= 0) return new List<MaterialModelOutput>(); ;
            return materialList.Select(material => new MaterialModelOutput
            {
                MaterialModel = material.MaterialModel,
                MaterialModelDesc = material.MaterialModel
            }).ToList();
        }
        /// <summary>
        /// æŸ¥æ‰¾ç©ºåº“位
@@ -50,11 +41,12 @@
        /// <param name="requiredNum"></param>
        /// <returns></returns>
        /// <exception cref="UserFriendlyException"></exception>
        public async Task<Dictionary<WmsPlace, int>> FindAvailablePlacesAsync(string materialModel, string materialNo, int requiredNum)
        public async Task<Dictionary<WmsPlaceDto, int>> FindAvailablePlacesAsync(string materialModel,int requiredNum, string materialNo="" )
        {
            // 1. èŽ·å–æ‰€æœ‰åº“å­˜å’Œåº“ä½ä¿¡æ¯
            var stockList = await _wmsMaterialStockRepository.GetListAsync(new WmsMaterialStock());
            var allPlaceList = await _wmsPlaceRepository.GetListAsync(new WmsPlace());
            var allPlaceList = ObjectMapper.Map<List<WmsPlace>, List<WmsPlaceDto>>(await _wmsPlaceRepository.GetListAsync(new WmsPlace()));
            // 2. æŸ¥æ‰¾ç›¸åŒç‰©æ–™åž‹å·å’Œç¼–号的库存(按库存量降序)
            var sameModelStocks = stockList
@@ -63,7 +55,7 @@
                .OrderByDescending(x => x.StockNumber)
                .ToList();
            var availablePlaces = new Dictionary<WmsPlace, int>();
            var availablePlaces = new Dictionary<WmsPlaceDto, int>();
            int remainingNum = requiredNum;
            // 3. ä¼˜å…ˆæ£€æŸ¥å·²æœ‰åº“存的库位是否能存放(相同 MaterialNo)
@@ -108,5 +100,50 @@
            return availablePlaces;
        }
        /// <summary>
        /// æŸ¥æ‰¾åº“å­˜
        /// </summary>
        /// <param name="materialModel"></param>
        /// <param name="requiredNum"></param>
        /// <param name="materialNo"></param>
        /// <returns></returns>
        public async Task<Dictionary<string, int>> FindStockAsync(string materialModel, int requiredNum, string materialNo = "")
        {
            // 1. èŽ·å–æ‰€æœ‰åº“å­˜ï¼ˆæŽ’é™¤é”å®šåº“å­˜ï¼‰
            var stockList = (await _wmsMaterialStockRepository.GetListAsync(new WmsMaterialStock()))
                .Where(x => x.IsLock == Domain.Shared.Enums.YesNoEnum.N)
                .ToList();
            // 2. ç­›é€‰åŒ¹é…ç‰©æ–™
            var availableStocks = stockList
                .Where(x => x.MaterialModel == materialModel)
                .WhereIf(!string.IsNullOrEmpty(materialNo), x => x.MaterialNo == materialNo)
                .OrderBy(x => x.StockNumber) // ä¼˜å…ˆä»Žåº“存少的库位出
                .ToList();
            // 3. æ£€æŸ¥æ€»åº“存是否足够
            int totalAvailable = availableStocks.Sum(x => x.StockNumber);
            if (totalAvailable < requiredNum)
            {
                throw new UserFriendlyException(
                    $"库存不足!需求: {requiredNum}, å¯ç”¨: {totalAvailable}, ç¼º: {requiredNum - totalAvailable}");
            }
            // 4. è®¡ç®—各库位出库数量
            var allocation = new Dictionary<string, int>(); // <库位号, å‡ºåº“æ•°>
            int remaining = requiredNum;
            foreach (var stock in availableStocks)
            {
                if (remaining <= 0) break;
                int deductAmount = Math.Min(stock.StockNumber, remaining);
                allocation.Add(stock.PlaceNo, deductAmount);
                remaining -= deductAmount;
            }
            return allocation;
        }
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsContainerPlaceAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,430 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainerPlace;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.Shared;
using CmsQueryExtensions;
using CMS.Plugin.HIAWms.Domain.WmsContainerPlace;
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
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;
/// <summary>
/// åº“位容器关系应用服务
/// </summary>
public class WmsContainerPlaceAppService : CMSPluginAppService, IWmsContainerPlaceAppService
{
    private readonly IWmsContainerPlaceRepository wmsContainerPlaceRepository;
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsContainerPlaceAppService"/> class.
    /// </summary>
    /// <param name="WmsContainerPlaceRepository">The task job repository.</param>
    public WmsContainerPlaceAppService(IWmsContainerPlaceRepository _WmsContainerPlaceRepository)
    {
        wmsContainerPlaceRepository = _WmsContainerPlaceRepository;
    }
    /// <summary>
    /// èŽ·å–æŒ‡å®šåº“ä½å®¹å™¨å…³ç³»
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public virtual async Task<WmsContainerPlaceDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<WmsContainerPlace, WmsContainerPlaceDto>(await wmsContainerPlaceRepository.GetAsync(id));
    }
    /// <summary>
    /// åˆ†é¡µèŽ·å–åº“ä½å®¹å™¨å…³ç³»
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public virtual async Task<PagedResultDto<WmsContainerPlaceDto>> GetListAsync(GetWmsContainerPlaceInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsContainerPlace.Sort);
        }
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var count = await wmsContainerPlaceRepository.GetCountAsync(whereConditions);
        var list = await wmsContainerPlaceRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<WmsContainerPlaceDto>(count, ObjectMapper.Map<List<WmsContainerPlace>, List<WmsContainerPlaceDto>>(list));
    }
    /// <summary>
    /// åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
    /// </summary>
    /// <param name="input">输入参数</param>
    /// <returns></returns>
    private FunReturnResultModel<Expression<Func<WmsContainerPlace, bool>>> DynamicGetQueryParams(GetWmsContainerPlaceInput input)
    {
        //动态构造查询条件
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsContainerPlace, GetWmsContainerPlaceInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        //也可再次自定义构建查询条件
        Expression<Func<WmsContainerPlace, bool>> extendExpression = a => a.IsDeleted == false;
        // ä½¿ç”¨ System.Linq.PredicateBuilder çš„ And
        var pres = (System.Linq.Expressions.Expression<Func<WmsContainerPlace, bool>>)(whereConditions.data);
        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
        return whereConditions;
    }
    /// <summary>
    /// æ–°å»ºåº“位容器关系
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public virtual async Task<WmsContainerPlaceDto> CreateAsync(WmsContainerPlaceCreateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var exist = await wmsContainerPlaceRepository.NameExistAsync(input.PlaceNo);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.PlaceNo]);
        }
        var maxSort = await wmsContainerPlaceRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var insertObj = ObjectMapper.Map<WmsContainerPlaceCreateDto, WmsContainerPlace>(input);
        insertObj.Sort = sort;
        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None);
        await wmsContainerPlaceRepository.InsertAsync(insertObj);
        //if (input.Sort.HasValue && insertObj.Sort != maxSort)
        //{
        //    await AdjustSortAsync(insertObj.Id, insertObj.Sort);
        //}
        return ObjectMapper.Map<WmsContainerPlace, WmsContainerPlaceDto>(insertObj);
    }
    /// <summary>
    /// æ›´æ–°åº“位容器关系
    /// </summary>
    /// <param name="id"></param>
    /// <param name="input"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public virtual async Task<WmsContainerPlaceDto> UpdateAsync(Guid id, WmsContainerPlaceUpdateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var updateObj = await wmsContainerPlaceRepository.GetAsync(id);
        var exist = await wmsContainerPlaceRepository.NameExistAsync(input.PlaceNo, updateObj.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.PlaceNo]);
        }
        updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
        input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None);
        updateObj.PlaceNo = input.PlaceNo;
        updateObj.ContainerNo = input.ContainerNo;
        updateObj.IsDisabled = input.IsDisabled;
        updateObj.Remark = input.Remark;
        updateObj.CreatorName = input.CreatorName;
        updateObj.DeleteRemark = input.DeleteRemark;
        updateObj.ExtraField1 = input.ExtraField1;
        updateObj.ExtraField2 = input.ExtraField2;
        updateObj.ExtraField3 = input.ExtraField3;
        updateObj.LastModifierName = input.LastModifierName;
        updateObj.OperationRemark = input.OperationRemark;
        await wmsContainerPlaceRepository.UpdateAsync(updateObj);
        return ObjectMapper.Map<WmsContainerPlace, WmsContainerPlaceDto>(updateObj);
    }
    /// <summary>
    /// å…‹éš†åº“位容器关系
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    public async Task<List<WmsContainerPlaceDto>> CloneAsync(IEnumerable<Guid> ids)
    {
        //var wmsContainerPlaces = new List<WmsContainerPlace>();
        //if (ids != null)
        //{
        //    var sort = await wmsContainerPlaceRepository.GetMaxSortAsync();
        //    foreach (var id in ids)
        //    {
        //        var WmsContainerPlace = await wmsContainerPlaceRepository.FindAsync(id);
        //        if (WmsContainerPlace != null)
        //        {
        //            var name = WmsContainerPlace.Name + WmsContainerPlaceConsts.CloneTag;
        //            var notExist = false;
        //            while (!notExist)
        //            {
        //                var exist = await wmsContainerPlaceRepository.NameExistAsync(name);
        //                if (exist || wmsContainerPlaces.Any(x => x.Name == name))
        //                {
        //                    name += WmsContainerPlaceConsts.CloneTag;
        //                    continue;
        //                }
        //                notExist = true;
        //            }
        //            //WmsContainerPlace = await wmsContainerPlaceRepository.InsertAsync(WmsContainerPlace.Clone(GuidGenerator.Create(), name, sort++));
        //            wmsContainerPlaces.Add(WmsContainerPlace);
        //        }
        //    }
        //}
        //return ObjectMapper.Map<List<WmsContainerPlace>, List<WmsContainerPlaceDto>>(wmsContainerPlaces);
        return new List<WmsContainerPlaceDto>();
    }
    /// <summary>
    /// åˆ é™¤å•个库位容器关系
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public virtual Task DeleteAsync(Guid id)
    {
        return wmsContainerPlaceRepository.DeleteAsync(id);
    }
    /// <summary>
    /// åˆ é™¤å¤šä¸ªåº“位容器关系
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    public async Task DeleteManyAsync(IEnumerable<Guid> ids)
    {
        foreach (var id in ids)
        {
            await DeleteAsync(id);
        }
    }
    /// <summary>
    /// è°ƒæ•´æŽ’序库位容器关系
    /// </summary>
    /// <param name="id"></param>
    /// <param name="sort"></param>
    /// <returns></returns>
    public virtual async Task AdjustSortAsync(Guid id, int sort)
    {
        var list = await wmsContainerPlaceRepository.GetListAsync(null, nameof(WmsContainerPlace.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 wmsContainerPlaceRepository.UpdateManyAsync(list);
    }
    /// <summary>
    /// å¯¼å…¥åº“位容器关系
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public async Task ImportAsync(WmsContainerPlacesImportModel input)
    {
        Check.NotNull(input, nameof(input));
        var wmsContainerPlaceCreateDtos = new List<(int RowIndex, WmsContainerPlaceCreateDto Item)>();
        var wmsContainerPlaceUpdateDtos = new List<(int RowIndex, Guid Id, WmsContainerPlaceUpdateDto Item)>();
        var importItems = input.WmsContainerPlaces;
        if (importItems != null && importItems.Any())
        {
            #region å¯¼å…¥æ ¡éªŒ
            // åˆ¤æ–­åç§°æ˜¯å¦é‡å¤ï¼Œå¹¶è¾“出第几行重复
            var duplicateWmsContainerPlaces = importItems.GroupBy(x => x.PlaceNo).Where(x => x.Count() > 1).ToList();
            if (duplicateWmsContainerPlaces?.Any() == true)
            {
                var duplicateWmsContainerPlaceMsgs = duplicateWmsContainerPlaces.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} è¡Œï¼š{x.Key}  åç§°é‡å¤");
                var errorMsg = $"导入失败!配置, {string.Join(",", duplicateWmsContainerPlaceMsgs)},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
            #endregion
            foreach (var impItem in importItems)
            {
                if (impItem.PlaceNo.IsNullOrWhiteSpace())
                {
                    continue;
                }
                if (impItem.PlaceNo.IsNullOrWhiteSpace())
                {
                    var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:WmsContainerPlace名称不能为空";
                    throw new UserFriendlyException(errorMsg);
                }
                var oldWmsContainerPlace = await wmsContainerPlaceRepository.FindByNameAsync(impItem.PlaceNo);
                if (oldWmsContainerPlace != null)
                {
                    var wmsContainerPlaceUpdateDto = new WmsContainerPlaceUpdateDto
                    {
                        PlaceNo = impItem.PlaceNo,
                        ContainerNo = impItem.ContainerNo,
                        BindTime = impItem.BindTime,
                        IsDisabled = impItem.IsDisabled,
                        Remark = impItem.Remark,
                        CreatorName = impItem.CreatorName,
                        DeleteRemark = impItem.DeleteRemark,
                        ExtraField1 = impItem.ExtraField1,
                        ExtraField2 = impItem.ExtraField2,
                        ExtraField3 = impItem.ExtraField3,
                        LastModifierName = impItem.LastModifierName,
                        OperationRemark = impItem.OperationRemark,
                    };
                    wmsContainerPlaceUpdateDtos.Add((impItem.RowIndex, oldWmsContainerPlace.Id, wmsContainerPlaceUpdateDto));
                }
                else
                {
                    var wmsContainerPlaceCreateDto = new WmsContainerPlaceCreateDto
                    {
                        PlaceNo = impItem.PlaceNo,
                        ContainerNo = impItem.ContainerNo,
                        BindTime = impItem.BindTime,
                        IsDisabled = impItem.IsDisabled,
                        Remark = impItem.Remark,
                        CreatorName = impItem.CreatorName,
                        DeleteRemark = impItem.DeleteRemark,
                        ExtraField1 = impItem.ExtraField1,
                        ExtraField2 = impItem.ExtraField2,
                        ExtraField3 = impItem.ExtraField3,
                        LastModifierName = impItem.LastModifierName,
                        OperationRemark = impItem.OperationRemark,
                    };
                    wmsContainerPlaceCreateDtos.Add((impItem.RowIndex, wmsContainerPlaceCreateDto));
                }
            }
        }
        // æ–°å¢ž
        foreach (var wmsContainerPlaceDto in wmsContainerPlaceCreateDtos)
        {
            try
            {
                await CreateAsync(wmsContainerPlaceDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsContainerPlaceDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
        // æ›´æ–°
        foreach (var wmsContainerPlaceDto in wmsContainerPlaceUpdateDtos)
        {
            try
            {
                await UpdateAsync(wmsContainerPlaceDto.Id, wmsContainerPlaceDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsContainerPlaceDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
    }
    /// <summary>
    /// å¯¼å‡ºåº“位容器关系
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsContainerPlaceInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsContainerPlace.Sort);
        }
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await wmsContainerPlaceRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsContainerPlace>, List<WmsContainerPlaceDto>>(list);
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "库位容器关系列表" : result.Count == 1 ? result[0]?.PlaceNo : "WmsContainerPlace模版";
        return (sheets, fileName);
    }
    /// <summary>
    /// æ ¡éªŒåº“位容器关系,当新建或更新时
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    protected Task CheckCreateOrUpdateDtoAsync(WmsContainerPlaceCreateOrUpdateDtoBase input)
    {
        Check.NotNull(input, nameof(input));
        Check.NotNullOrWhiteSpace(input.PlaceNo, "库位编码", 50);
        Check.NotNullOrWhiteSpace(input.ContainerNo, "编码", 64);
        Check.NotNull(input.BindTime, "名称");
        return Task.CompletedTask;
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsEnumAppService.cs
@@ -1,7 +1,10 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsEnumDto;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.CommonDto;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsEnumDto;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsStores;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CMS.Plugin.HIAWms.Domain.WmsAreas;
using CMS.Plugin.HIAWms.Domain.WmsMaterials;
using CMS.Plugin.HIAWms.Domain.WmsPlaces;
using CMS.Plugin.HIAWms.Domain.WmsStores;
using CmsQueryExtensions;
@@ -23,12 +26,14 @@
        private readonly IWmsStoreRepository _storeRepository;
        private readonly IWmsAreaRepository _wmsAreaRepository;
        private readonly IWmsPlaceRepository _wmsPlaceRepository;
        private readonly IWmsMaterialRepository _wmsMaterialRepository;
        public WmsEnumAppService(IWmsStoreRepository storeRepository, IWmsAreaRepository wmsAreaRepository, IWmsPlaceRepository wmsPlaceRepository)
        public WmsEnumAppService(IWmsStoreRepository storeRepository, IWmsAreaRepository wmsAreaRepository, IWmsPlaceRepository wmsPlaceRepository, IWmsMaterialRepository wmsMaterialRepository)
        {
            _storeRepository = storeRepository;
            _wmsAreaRepository = wmsAreaRepository;
            _wmsPlaceRepository = wmsPlaceRepository;
            _wmsMaterialRepository = wmsMaterialRepository;
        }
        public List<EnumItem> GetEnumDataList(WmsEnumInput enumInput)
@@ -87,5 +92,39 @@
            return result;
        }
        /// <summary>
        /// èŽ·å–æœºåž‹
        /// </summary>
        /// <returns></returns>
        public async Task<List<MaterialModelOutput>> GetMaterialModeListAsync()
        {
            var materialList = await _wmsMaterialRepository.GetMaterialListAsync(new WmsMaterial());
            if (materialList == null || materialList.Count <= 0) return new List<MaterialModelOutput>(); ;
            return materialList.Select(material => new MaterialModelOutput
            {
                MaterialModel = material.MaterialModel,
                MaterialModelDesc = material.MaterialModel
            }).ToList();
        }
        /// <summary>
        /// èŽ·å–åº“åŒºåˆ—è¡¨
        /// </summary>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task<List<PlaceListOutput>> GetPlaceListForSelectAsync(PlaceTypeEnum placeType)
        {
            var placeList = await _wmsPlaceRepository.GetPlaceListForSelectAsync(placeType);
            if (placeList == null || placeList.Count <= 0) return new List<PlaceListOutput>(); ;
            return placeList.Select(place => new PlaceListOutput
            {
                PlaceNo = place.PlaceNo,
                PlaceNoDesc = place.PlaceNo
            }).ToList();
        }
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs
@@ -56,10 +56,10 @@
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var exist = await _wmsmaterialRepository.NameExistAsync(input.MaterialCode);
        var exist = await _wmsmaterialRepository.NameExistAsync(input.MaterialNo);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialCode]);
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialNo]);
        }
        var maxSort = await _wmsmaterialRepository.GetMaxSortAsync();
@@ -85,10 +85,10 @@
        await CheckCreateOrUpdateDtoAsync(input);
        var wmsmaterial = await _wmsmaterialRepository.GetAsync(id);
        var exist = await _wmsmaterialRepository.NameExistAsync(input.MaterialCode, wmsmaterial.Id);
        var exist = await _wmsmaterialRepository.NameExistAsync(input.MaterialNo, wmsmaterial.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialCode]);
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialNo]);
        }
        wmsmaterial.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
@@ -211,7 +211,7 @@
            #region å¯¼å…¥æ ¡éªŒ
            // åˆ¤æ–­åç§°æ˜¯å¦é‡å¤ï¼Œå¹¶è¾“出第几行重复
            var duplicateWmsMaterials = wmsmaterials.GroupBy(x => x.MaterialCode).Where(x => x.Count() > 1).ToList();
            var duplicateWmsMaterials = wmsmaterials.GroupBy(x => x.MaterialNo).Where(x => x.Count() > 1).ToList();
            if (duplicateWmsMaterials?.Any() == true)
            {
                var duplicateWmsMaterialMsgs = duplicateWmsMaterials.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} è¡Œï¼š{x.Key}  åç§°é‡å¤");
@@ -223,23 +223,23 @@
            foreach (var wmsmaterial in wmsmaterials)
            {
                if (wmsmaterial.MaterialCode.IsNullOrWhiteSpace() && wmsmaterial.MaterialName.IsNullOrWhiteSpace())
                if (wmsmaterial.MaterialNo.IsNullOrWhiteSpace() && wmsmaterial.MaterialName.IsNullOrWhiteSpace())
                {
                    continue;
                }
                if (wmsmaterial.MaterialCode.IsNullOrWhiteSpace())
                if (wmsmaterial.MaterialNo.IsNullOrWhiteSpace())
                {
                    var errorMsg = $"导入失败!配置,第{wmsmaterial.RowIndex}行:WmsMaterial名称不能为空";
                    throw new UserFriendlyException(errorMsg);
                }
                var oldWmsMaterial = await _wmsmaterialRepository.FindByNameAsync(wmsmaterial.MaterialCode);
                var oldWmsMaterial = await _wmsmaterialRepository.FindByNameAsync(wmsmaterial.MaterialNo);
                if (oldWmsMaterial != null)
                {
                    var wmsmaterialUpdateDto = new WmsMaterialUpdateDto
                    {
                        MaterialCode = wmsmaterial.MaterialCode,
                        MaterialNo = wmsmaterial.MaterialNo,
                        MaterialName = wmsmaterial.MaterialName,
                        PurchaseType = wmsmaterial.PurchaseType,
                        MaterialType = wmsmaterial.MaterialType,
@@ -261,7 +261,7 @@
                {
                    var wmsmaterialCreateDto = new WmsMaterialCreateDto
                    {
                        MaterialCode = wmsmaterial.MaterialCode,
                        MaterialNo = wmsmaterial.MaterialNo,
                        MaterialName = wmsmaterial.MaterialName,
                        PurchaseType = wmsmaterial.PurchaseType,
                        MaterialType = wmsmaterial.MaterialType,
@@ -332,7 +332,7 @@
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "WmsMaterial列表" : result.Count == 1 ? result[0]?.MaterialCode : "WmsMaterial模版";
        var fileName = result.Count > 1 ? "WmsMaterial列表" : result.Count == 1 ? result[0]?.MaterialNo : "WmsMaterial模版";
        return (sheets, fileName);
    }
@@ -343,7 +343,7 @@
    protected Task CheckCreateOrUpdateDtoAsync(WmsMaterialCreateOrUpdateDtoBase input)
    {
        Check.NotNull(input, nameof(input));
        Check.NotNullOrWhiteSpace(input.MaterialCode, "编号", WmsMaterialConsts.MaxCodeLength);
        Check.NotNullOrWhiteSpace(input.MaterialNo, "编号", WmsMaterialConsts.MaxCodeLength);
        Check.NotNullOrWhiteSpace(input.MaterialName, "名称", WmsMaterialConsts.MaxNameLength);
        Check.Length(input.Remark, "备注", WmsMaterialConsts.MaxRemarkLength);
        return Task.CompletedTask;
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialStockAppService.cs
@@ -94,6 +94,18 @@
        {
            throw new UserFriendlyException("托盘信息不存在");
        }
        var wmsmaterialstock = ObjectMapper.Map<WmsMaterialStockCreateDto, WmsMaterialStock>(input);
        input.MapExtraPropertiesTo(wmsmaterialstock, MappingPropertyDefinitionChecks.None);
        wmsmaterialstock.MaterialId = Guid.NewGuid().ToString("N");
        wmsmaterialstock.MaterialName = material.MaterialName;
        wmsmaterialstock.ContainerStatus = Domain.Shared.Enums.ContainerStatusEnum.KUWEI;
        wmsmaterialstock.ContainerType = container.ContainerType;
        wmsmaterialstock.StorageTypeNo = Domain.Shared.Enums.PlaceTypeEnum.XUNIKUWEI;
        wmsmaterialstock.PlaceStatus = Domain.Shared.Enums.PlaceStatusEnum.DAIRU;
        if (!string.IsNullOrEmpty(input.PlaceNo))
        {
        var place = await _wmsplaceRepository.FindByNameAsync(input.PlaceNo);
        if(place == null)
        {
@@ -103,6 +115,17 @@
        if(area == null)
        {
            throw new UserFriendlyException("库位库区信息不存在");
            }
            wmsmaterialstock.PlaceStatus = Domain.Shared.Enums.PlaceStatusEnum.CUNHUO;
            wmsmaterialstock.StorageTypeNo = place.StorageTypeNo;
            wmsmaterialstock.AreaCode = place.AreaCode;
            wmsmaterialstock.AreaName = area.AreaName;
            place.PlaceStatus = Domain.Shared.Enums.PlaceStatusEnum.CUNHUO;
            place.Islock = input.IsLock;
            await _wmsplaceRepository.UpdateAsync(place);
        }
        var wmsmaterialstockList = await _wmsmaterialstockRepository.GetStockListAsync(new WmsMaterialStock { PlaceNo = input.PlaceNo });
        if (wmsmaterialstockList.Count > 0)
@@ -115,18 +138,6 @@
        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");
        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;
@@ -149,11 +160,8 @@
        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)
        //{
HIAWms/server/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsContainerPlaceAutoMapperProfile.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
using AutoMapper;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainerPlace;
using CMS.Plugin.HIAWms.Domain.WmsContainerPlace;
using Volo.Abp.ObjectExtending;
namespace CMS.Plugin.HIAWms.Application.MapperProfiles;
/// <summary>
/// åº“位容器关系AutoMapper配置
/// </summary>
/// <seealso cref="AutoMapper.Profile" />
public class WmsContainerPlaceAutoMapperProfile : Profile
{
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsContainerPlaceAutoMapperProfile"/> class.
    /// </summary>
    public WmsContainerPlaceAutoMapperProfile()
    {
        /* You can configure your AutoMapper mapping configuration here.
         * Alternatively, you can split your mapping configurations
         * into multiple profile classes for a better organization. */
        CreateMap<WmsContainerPlace, WmsContainerPlaceDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<WmsContainerPlaceCreateDto, WmsContainerPlace>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<GetWmsContainerPlaceInput, WmsContainerPlace>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsContainerPlace/IWmsContainerPlaceRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp.Domain.Repositories;
namespace CMS.Plugin.HIAWms.Domain.WmsContainerPlace;
/// <summary>
/// åº“位容器关系仓储
/// </summary>
public interface IWmsContainerPlaceRepository : IBasicRepository<WmsContainerPlace, Guid>
{
    /// <summary>
    /// æŒ‰ç…§åç§°æŸ¥æ‰¾åº“位容器关系
    /// </summary>
    /// <param name="name"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<WmsContainerPlace> FindByNameAsync(string name, CancellationToken cancellationToken = default);
    /// <summary>
    /// éªŒè¯åç§°æ˜¯å¦å­˜åœ¨åº“位容器关系
    /// </summary>
    /// <param name="name"></param>
    /// <param name="id"></param>
    /// <returns></returns>
    Task<bool> NameExistAsync(string name, Guid? id = null);
    /// <summary>
    /// èŽ·å–æœ€å¤§æŽ’åºåº“ä½å®¹å™¨å…³ç³»
    /// </summary>
    /// <returns></returns>
    Task<int> GetMaxSortAsync();
    /// <summary>
    /// èŽ·å–åˆ†é¡µåˆ—è¡¨åº“ä½å®¹å™¨å…³ç³»
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="sorting"></param>
    /// <param name="maxResultCount"></param>
    /// <param name="skipCount"></param>
    /// <param name="includeDetails"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<List<WmsContainerPlace>> GetListAsync(FunReturnResultModel<Expression<Func<WmsContainerPlace, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default);
    /// <summary>
    /// èŽ·å–æ€»æ•°åº“ä½å®¹å™¨å…³ç³»
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsContainerPlace, bool>>> whereConditions, CancellationToken cancellationToken = default);
}
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsContainerPlace/WmsContainerPlace.cs
ÎļþÃû´Ó HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsContainerPlaces/WmsContainerPlace.cs ÐÞ¸Ä
@@ -8,7 +8,7 @@
using System.Threading.Tasks;
using Volo.Abp.Domain.Entities.Auditing;
namespace CMS.Plugin.HIAWms.Domain.WmsContainerPlaces
namespace CMS.Plugin.HIAWms.Domain.WmsContainerPlace
{
    /// <summary>
    /// åº“位容器关系
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterials/IWmsMaterialRepository.cs
@@ -17,6 +17,14 @@
    Task<WmsMaterial> FindByNameAsync(string name, CancellationToken cancellationToken = default);
    /// <summary>
    /// æ ¹æ®åž‹å·ä¼ ç‰©æ–™
    /// </summary>
    /// <param name="model"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<WmsMaterial> FindByModelAsync(string model, CancellationToken cancellationToken = default);
    /// <summary>
    /// Names the exist asynchronous.
    /// </summary>
    /// <param name="name">The name.</param>
@@ -58,4 +66,11 @@
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<long> GetCountAsync(WmsMaterial material, string filter = null, Specification<WmsMaterial> specification = null, CancellationToken cancellationToken = default);
    /// <summary>
    /// èŽ·å–ç‰©æ–™åˆ—è¡¨
    /// </summary>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<List<WmsMaterial>> GetListForSelectAsync(CancellationToken cancellationToken = default);
}
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterials/WmsMaterial.cs
@@ -14,7 +14,7 @@
        /// <summary>
        /// ç‰©æ–™ç¼–码(唯一标识)
        /// </summary>
        public string MaterialCode { get; set; }
        public string MaterialNo { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsMaterials/WmsMaterialSpecification.cs
@@ -7,7 +7,7 @@
    /// </summary>
    public class WmsMaterialSpecification : Volo.Abp.Specifications.Specification<WmsMaterial>
    {
        private readonly string _materialCode;
        private readonly string _MaterialNo;
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsMaterialSpecification"/> class.
@@ -19,10 +19,10 @@
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsMaterialSpecification"/> class.
        /// </summary>
        /// <param name="materialCode">The name.</param>
        public WmsMaterialSpecification(string materialCode = null)
        /// <param name="MaterialNo">The name.</param>
        public WmsMaterialSpecification(string MaterialNo = null)
        {
            _materialCode = materialCode;
            _MaterialNo = MaterialNo;
        }
        /// <inheritdoc />
@@ -30,9 +30,9 @@
        {
            Expression<Func<WmsMaterial, bool>> expression = c => 1 == 1;
            if (_materialCode != null)
            if (_MaterialNo != null)
            {
                expression = expression.And(c => c.MaterialCode == _materialCode);
                expression = expression.And(c => c.MaterialNo == _MaterialNo);
            }
            return expression;
HIAWms/server/src/CMS.Plugin.HIAWms.Domain/WmsPlaces/IWmsPlaceRepository.cs
@@ -1,3 +1,4 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CMS.Plugin.HIAWms.Domain.WmsAreas;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Specifications;
@@ -59,4 +60,12 @@
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<long> GetCountAsync(WmsPlace? place, string filter = null, Specification<WmsPlace> specification = null, CancellationToken cancellationToken = default);
    /// <summary>
    /// æ ¹æ®ç±»åž‹èŽ·å–åº“ä½åˆ—è¡¨
    /// </summary>
    /// <param name="placeType"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<List<WmsPlace>> GetPlaceListForSelectAsync(PlaceTypeEnum placeType, CancellationToken cancellationToken = default);
}
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsContainerPlace.cs
@@ -1,5 +1,4 @@
using CMS.Plugin.HIAWms.Domain;
using CMS.Plugin.HIAWms.Domain.WmsContainerPlaces;
using CMS.Plugin.HIAWms.Domain.WmsContainers;
using Microsoft.EntityFrameworkCore;
using System;
@@ -11,6 +10,7 @@
using CMS.Plugin.MyExtension;
using Volo.Abp.EntityFrameworkCore.Modeling;
using CMS.Plugin.MyExtension.Domain;
using CMS.Plugin.HIAWms.Domain.WmsContainerPlace;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions
{
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterial.cs
@@ -50,7 +50,7 @@
            b.HasKey(x => x.Id);
            // å­—段配置
            b.Property(x => x.MaterialCode)
            b.Property(x => x.MaterialNo)
                .HasMaxLength(64)
                .IsRequired()
                .HasComment("物料编码(唯一标识)");
@@ -137,7 +137,7 @@
                .HasComment("是否禁用");
            // ç´¢å¼•配置
            b.HasIndex(x => x.MaterialCode).IsUnique(); // ç‰©æ–™ç¼–码唯一索引
            b.HasIndex(x => x.MaterialNo).IsUnique(); // ç‰©æ–™ç¼–码唯一索引
            b.HasIndex(x => x.MaterialName);           // ç‰©æ–™åç§°æ™®é€šç´¢å¼•
            b.HasIndex(x => x.PurchaseType);           // é‡‡è´­ç±»åž‹ç´¢å¼•(如需查询过滤)
            b.HasIndex(x => x.MaterialType);           // ç‰©æ–™ç±»åž‹ç´¢å¼•(如需查询过滤)
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterialContainer.cs
@@ -1,5 +1,5 @@
using CMS.Plugin.HIAWms.Domain;
using CMS.Plugin.HIAWms.Domain.WmsContainerPlaces;
using CMS.Plugin.HIAWms.Domain.WmsContainerPlace;
using CMS.Plugin.HIAWms.Domain.WmsMaterialContainer;
using Microsoft.EntityFrameworkCore;
using System;
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsTask.cs
@@ -1,5 +1,5 @@
using CMS.Plugin.HIAWms.Domain;
using CMS.Plugin.HIAWms.Domain.WmsContainerPlaces;
using CMS.Plugin.HIAWms.Domain.WmsContainerPlace;
using CMS.Plugin.HIAWms.Domain.WmsTask;
using Microsoft.EntityFrameworkCore;
using System;
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsAreaRepository.cs
@@ -87,6 +87,7 @@
    public async Task<List<WmsArea>> GetListForSelectAsync(CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .Where(x => !x.IsDeleted)
           .ToListAsync(GetCancellationToken(cancellationToken));
    }
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsContainerPlaceRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,113 @@
using CMS.Plugin.HIAWms.Domain.WmsContainerPlace;
using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
using CmsQueryExtensions.Extension;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
using System.Linq.Expressions;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Repositories;
/// <summary>
/// åº“位容器关系仓储实现
/// </summary>
public class EfCoreWmsContainerPlaceRepository : EfCoreRepository<ICMSPluginDbContext, WmsContainerPlace, Guid>, IWmsContainerPlaceRepository
{
    /// <summary>
    /// Initializes a new instance of the <see cref="EfCoreWmsContainerPlaceRepository"/> class.
    /// </summary>
    /// <param name="dbContextProvider">The database context provider.</param>
    public EfCoreWmsContainerPlaceRepository(IDbContextProvider<ICMSPluginDbContext> dbContextProvider)
        : base(dbContextProvider)
    {
    }
    /// <summary>
    /// æŒ‰ç…§åç§°æŸ¥æ‰¾åº“位容器关系
    /// </summary>
    /// <param name="name"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public virtual async Task<WmsContainerPlace> FindByNameAsync(string name, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails()
            .Where(x => !x.IsDeleted)
            .OrderByDescending(x=>x.CreationTime)
            .FirstOrDefaultAsync(t => t.PlaceNo == name, GetCancellationToken(cancellationToken));
    }
    /// <summary>
    /// éªŒè¯åç§°æ˜¯å¦å­˜åœ¨åº“位容器关系
    /// </summary>
    /// <param name="name">校验值</param>
    /// <param name="id"></param>
    /// <returns></returns>
    public async Task<bool> NameExistAsync(string name, Guid? id = null)
    {
        return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.PlaceNo == name);
    }
    /// <summary>
    /// èŽ·å–æœ€å¤§æŽ’åºåº“ä½å®¹å™¨å…³ç³»
    /// </summary>
    /// <returns></returns>
    public async Task<int> GetMaxSortAsync()
    {
        var hasAny = await (await GetQueryableAsync())
            .Where(x => !x.IsDeleted).AnyAsync();
        if (!hasAny)
        {
            return 1;
        }
        var sort = await (await GetQueryableAsync())
            .Where(x => !x.IsDeleted).MaxAsync(x => x.Sort);
        return sort + 1;
    }
    /// <summary>
    /// èŽ·å–åˆ†é¡µåˆ—è¡¨åº“ä½å®¹å™¨å…³ç³»
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="sorting"></param>
    /// <param name="maxResultCount"></param>
    /// <param name="skipCount"></param>
    /// <param name="includeDetails"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<List<WmsContainerPlace>> GetListAsync(FunReturnResultModel<Expression<Func<WmsContainerPlace, bool>>> whereConditions, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, bool includeDetails = false, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails(includeDetails)
            .WhereIf(whereConditions != null, whereConditions.data)
            .Where(x => !x.IsDeleted)
            .OrderByDescending(x=>x.CreationTime)
            .PageBy(skipCount, maxResultCount)
            .ToListAsync(GetCancellationToken(cancellationToken));
    }
    /// <summary>
    /// èŽ·å–æ€»æ•°åº“ä½å®¹å™¨å…³ç³»
    /// </summary>
    /// <param name="whereConditions"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<long> GetCountAsync(FunReturnResultModel<Expression<Func<WmsContainerPlace, bool>>> whereConditions, CancellationToken cancellationToken = default)
    {
        return await (await GetQueryableAsync())
            .WhereIf(whereConditions != null, whereConditions.data)
            .Where(x => !x.IsDeleted)
            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
    }
    /// <inheritdoc />
    public override async Task<IQueryable<WmsContainerPlace>> WithDetailsAsync()
    {
        return (await GetQueryableAsync())
            .Where(x => !x.IsDeleted).IncludeDetails();
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialRepository.cs
@@ -2,6 +2,7 @@
using System.Linq;
using System.Linq.Dynamic.Core;
using System.Linq.Expressions;
using CMS.Plugin.HIAWms.Domain.WmsAreas;
using CMS.Plugin.HIAWms.Domain.WmsMaterials;
using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
using Microsoft.EntityFrameworkCore;
@@ -30,13 +31,28 @@
            .IncludeDetails()
            .Where(x => !x.IsDeleted)
            .OrderBy(t => t.Sort)
            .FirstOrDefaultAsync(t => t.MaterialCode == name, GetCancellationToken(cancellationToken));
            .FirstOrDefaultAsync(t => t.MaterialNo == name, GetCancellationToken(cancellationToken));
    }
    /// <summary>
    /// æŸ¥æ‰¾åž‹å·
    /// </summary>
    /// <param name="model"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public virtual async Task<WmsMaterial> FindByModelAsync(string model, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails()
            .Where(x => !x.IsDeleted)
            .OrderBy(t => t.Sort)
            .FirstOrDefaultAsync(t => t.MaterialModel == model, GetCancellationToken(cancellationToken));
    }
    /// <inheritdoc />
    public async Task<bool> NameExistAsync(string materialCode, Guid? id = null)
    public async Task<bool> NameExistAsync(string MaterialNo, Guid? id = null)
    {
        return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.MaterialCode == materialCode);
        return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.MaterialNo == MaterialNo);
    }
    /// <inheritdoc />
@@ -61,9 +77,9 @@
        return await (await GetDbSetAsync())
            .IncludeDetails(includeDetails)
            .Where(specification.ToExpression())
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.MaterialCode.Contains(filter))
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.MaterialNo.Contains(filter))
            .WhereIf(!string.IsNullOrEmpty(material.MaterialName), u => u.MaterialName.Contains(material.MaterialName))
            .WhereIf(!string.IsNullOrEmpty(material.MaterialCode), u => u.MaterialName.Contains(material.MaterialCode))
            .WhereIf(!string.IsNullOrEmpty(material.MaterialNo), u => u.MaterialName.Contains(material.MaterialNo))
            .WhereIf(material.MaterialType > 0, u => u.MaterialType == material.MaterialType)
            .WhereIf(material.PurchaseType > 0, u => u.PurchaseType == material.PurchaseType)
            .Where(x => !x.IsDeleted)
@@ -82,7 +98,7 @@
    {
        return await (await GetDbSetAsync())
            .WhereIf(!string.IsNullOrEmpty(material.MaterialName), u => u.MaterialName.Contains(material.MaterialName))
            .WhereIf(!string.IsNullOrEmpty(material.MaterialCode), u => u.MaterialName.Contains(material.MaterialCode))
            .WhereIf(!string.IsNullOrEmpty(material.MaterialNo), u => u.MaterialName.Contains(material.MaterialNo))
            .WhereIf(material.MaterialType > 0, u => u.MaterialType == material.MaterialType)
            .WhereIf(material.PurchaseType > 0, u => u.PurchaseType == material.PurchaseType)
            .Where(x => !x.IsDeleted)
@@ -103,11 +119,11 @@
        return await (await GetQueryableAsync())
            .Where(specification.ToExpression())
            .WhereIf(!string.IsNullOrEmpty(material.MaterialName), u => u.MaterialName.Contains(material.MaterialName))
            .WhereIf(!string.IsNullOrEmpty(material.MaterialCode), u => u.MaterialName.Contains(material.MaterialCode))
            .WhereIf(!string.IsNullOrEmpty(material.MaterialNo), u => u.MaterialName.Contains(material.MaterialNo))
            .WhereIf(material.MaterialType > 0, u => u.MaterialType == material.MaterialType)
            .WhereIf(material.PurchaseType > 0, u => u.PurchaseType == material.PurchaseType)
            .Where(x => !x.IsDeleted)
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.MaterialCode.Contains(filter))
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.MaterialNo.Contains(filter))
            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
    }
@@ -117,4 +133,16 @@
        return (await GetQueryableAsync())
            .Where(x => !x.IsDeleted).IncludeDetails();
    }
    /// <summary>
    /// èŽ·å–ç‰©æ–™è¡¨
    /// </summary>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<List<WmsMaterial>> GetListForSelectAsync(CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .Where(x => !x.IsDeleted)
           .ToListAsync(GetCancellationToken(cancellationToken));
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsPlaceRepository.cs
@@ -1,4 +1,5 @@
using System.Linq.Dynamic.Core;
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CMS.Plugin.HIAWms.Domain.WmsAreas;
using CMS.Plugin.HIAWms.Domain.WmsPlaces;
using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
@@ -84,7 +85,7 @@
    /// <returns></returns>
    public async Task<List<WmsPlace>> GetAisleListForSelectAsync(CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
        return await (await GetDbSetAsync()).Where(x => !x.IsDeleted)
            .ToListAsync(GetCancellationToken(cancellationToken));
    }
@@ -115,4 +116,17 @@
        return (await GetQueryableAsync())
            .Where(x => !x.IsDeleted).IncludeDetails();
    }
    /// <summary>
    /// èŽ·å–åº“åŒºåˆ—è¡¨
    /// </summary>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<List<WmsPlace>> GetPlaceListForSelectAsync(PlaceTypeEnum placeType,CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .Where(x => !x.IsDeleted)
            .Where(x=>x.StorageTypeNo == placeType)
           .ToListAsync(GetCancellationToken(cancellationToken));
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsStoreRepository.cs
@@ -75,6 +75,7 @@
    public async Task<List<WmsStore>> GetListForSelectAsync( CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .Where(x=>!x.IsDeleted)
            .ToListAsync(GetCancellationToken(cancellationToken));
    }
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250429025531_InitialCreate.Designer.cs
@@ -358,7 +358,7 @@
                        .HasColumnType("decimal(18,2)")
                        .HasComment("长度(单位:m)");
                    b.Property<string>("MaterialCode")
                    b.Property<string>("MaterialNo")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
@@ -429,7 +429,7 @@
                    b.HasKey("Id");
                    b.HasIndex("MaterialCode")
                    b.HasIndex("MaterialNo")
                        .IsUnique();
                    b.HasIndex("MaterialName");
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250429025531_InitialCreate.cs
@@ -110,7 +110,7 @@
                columns: table => new
                {
                    Id = table.Column<Guid>(type: "char(36)", nullable: false, collation: "ascii_general_ci"),
                    MaterialCode = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: false, comment: "物料编码(唯一标识)")
                    MaterialNo = table.Column<string>(type: "varchar(64)", maxLength: 64, nullable: false, comment: "物料编码(唯一标识)")
                        .Annotation("MySql:CharSet", "utf8mb4"),
                    MaterialName = table.Column<string>(type: "varchar(128)", maxLength: 128, nullable: false, comment: "物料名称")
                        .Annotation("MySql:CharSet", "utf8mb4"),
@@ -265,9 +265,9 @@
                column: "ContainerType");
            migrationBuilder.CreateIndex(
                name: "IX_scms_wmsmaterials_MaterialCode",
                name: "IX_scms_wmsmaterials_MaterialNo",
                table: "scms_wmsmaterials",
                column: "MaterialCode",
                column: "MaterialNo",
                unique: true);
            migrationBuilder.CreateIndex(
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250430035549_InitialCreate1.Designer.cs
@@ -358,7 +358,7 @@
                        .HasColumnType("decimal(18,2)")
                        .HasComment("长度(单位:m)");
                    b.Property<string>("MaterialCode")
                    b.Property<string>("MaterialNo")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
@@ -429,7 +429,7 @@
                    b.HasKey("Id");
                    b.HasIndex("MaterialCode")
                    b.HasIndex("MaterialNo")
                        .IsUnique();
                    b.HasIndex("MaterialName");
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505105851_InitialCreate2.Designer.cs
@@ -496,7 +496,7 @@
                        .HasColumnType("decimal(18,2)")
                        .HasComment("长度(单位:m)");
                    b.Property<string>("MaterialCode")
                    b.Property<string>("MaterialNo")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
@@ -567,7 +567,7 @@
                    b.HasKey("Id");
                    b.HasIndex("MaterialCode")
                    b.HasIndex("MaterialNo")
                        .IsUnique();
                    b.HasIndex("MaterialName");
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505121050_InitialCreate3.Designer.cs
@@ -496,7 +496,7 @@
                        .HasColumnType("decimal(18,2)")
                        .HasComment("长度(单位:m)");
                    b.Property<string>("MaterialCode")
                    b.Property<string>("MaterialNo")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
@@ -572,7 +572,7 @@
                    b.HasKey("Id");
                    b.HasIndex("MaterialCode")
                    b.HasIndex("MaterialNo")
                        .IsUnique();
                    b.HasIndex("MaterialName");
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505135455_InitialCreate4.Designer.cs
@@ -496,7 +496,7 @@
                        .HasColumnType("decimal(18,2)")
                        .HasComment("长度(单位:m)");
                    b.Property<string>("MaterialCode")
                    b.Property<string>("MaterialNo")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
@@ -572,7 +572,7 @@
                    b.HasKey("Id");
                    b.HasIndex("MaterialCode")
                    b.HasIndex("MaterialNo")
                        .IsUnique();
                    b.HasIndex("MaterialName");
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250505140345_InitialCreate5.Designer.cs
@@ -496,7 +496,7 @@
                        .HasColumnType("decimal(18,2)")
                        .HasComment("长度(单位:m)");
                    b.Property<string>("MaterialCode")
                    b.Property<string>("MaterialNo")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
@@ -572,7 +572,7 @@
                    b.HasKey("Id");
                    b.HasIndex("MaterialCode")
                    b.HasIndex("MaterialNo")
                        .IsUnique();
                    b.HasIndex("MaterialName");
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250506070902_InitialCreate6.Designer.cs
@@ -705,7 +705,7 @@
                        .HasColumnType("decimal(18,2)")
                        .HasComment("长度(单位:m)");
                    b.Property<string>("MaterialCode")
                    b.Property<string>("MaterialNo")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
@@ -781,7 +781,7 @@
                    b.HasKey("Id");
                    b.HasIndex("MaterialCode")
                    b.HasIndex("MaterialNo")
                        .IsUnique();
                    b.HasIndex("MaterialName");
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250506074429_InitialCreate7.Designer.cs
@@ -705,7 +705,7 @@
                        .HasColumnType("decimal(18,2)")
                        .HasComment("长度(单位:m)");
                    b.Property<string>("MaterialCode")
                    b.Property<string>("MaterialNo")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
@@ -781,7 +781,7 @@
                    b.HasKey("Id");
                    b.HasIndex("MaterialCode")
                    b.HasIndex("MaterialNo")
                        .IsUnique();
                    b.HasIndex("MaterialName");
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250507093411_InitialCreate8.Designer.cs
@@ -987,7 +987,7 @@
                        .HasColumnType("decimal(18,2)")
                        .HasComment("长度(单位:m)");
                    b.Property<string>("MaterialCode")
                    b.Property<string>("MaterialNo")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
@@ -1063,7 +1063,7 @@
                    b.HasKey("Id");
                    b.HasIndex("MaterialCode")
                    b.HasIndex("MaterialNo")
                        .IsUnique();
                    b.HasIndex("MaterialName");
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250508005509_InitialCreate9.Designer.cs
@@ -1050,7 +1050,7 @@
                        .HasColumnType("decimal(18,2)")
                        .HasComment("长度(单位:m)");
                    b.Property<string>("MaterialCode")
                    b.Property<string>("MaterialNo")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
@@ -1126,7 +1126,7 @@
                    b.HasKey("Id");
                    b.HasIndex("MaterialCode")
                    b.HasIndex("MaterialNo")
                        .IsUnique();
                    b.HasIndex("MaterialName");
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250509054804_InitialCreate10.Designer.cs
@@ -1050,7 +1050,7 @@
                        .HasColumnType("decimal(18,2)")
                        .HasComment("长度(单位:m)");
                    b.Property<string>("MaterialCode")
                    b.Property<string>("MaterialNo")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
@@ -1126,7 +1126,7 @@
                    b.HasKey("Id");
                    b.HasIndex("MaterialCode")
                    b.HasIndex("MaterialNo")
                        .IsUnique();
                    b.HasIndex("MaterialName");
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/20250509065902_InitialCreate11.Designer.cs
@@ -1108,7 +1108,7 @@
                        .HasColumnType("decimal(18,2)")
                        .HasComment("长度(单位:m)");
                    b.Property<string>("MaterialCode")
                    b.Property<string>("MaterialNo")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
@@ -1184,7 +1184,7 @@
                    b.HasKey("Id");
                    b.HasIndex("MaterialCode")
                    b.HasIndex("MaterialNo")
                        .IsUnique();
                    b.HasIndex("MaterialName");
HIAWms/server/src/CMS.Plugin.HIAWms.MySQL/Migrations/CMSPluginDbContextModelSnapshot.cs
@@ -1106,7 +1106,7 @@
                        .HasColumnType("decimal(18,2)")
                        .HasComment("长度(单位:m)");
                    b.Property<string>("MaterialCode")
                    b.Property<string>("MaterialNo")
                        .IsRequired()
                        .HasMaxLength(64)
                        .HasColumnType("varchar(64)")
@@ -1182,7 +1182,7 @@
                    b.HasKey("Id");
                    b.HasIndex("MaterialCode")
                    b.HasIndex("MaterialNo")
                        .IsUnique();
                    b.HasIndex("MaterialName");
HIAWms/server/src/CMS.Plugin.HIAWms/Controller/WmsContainerPlaceController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,188 @@
using Ao.Lang;
using CMS.Extensions.Abp.AspNetCore.Mvc.Filters;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainerPlace;
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>
    /// åº“位容器关系服务
    /// </summary>
    [ApiController]
    [TypeFilter(typeof(CMSLanguageFilter))]
    [TypeFilter(typeof(CMSUowActionFilter))]
    [TypeFilter(typeof(CMSAuditActionFilter))]
    [TypeFilter(typeof(CMSExceptionFilter))]
    [Route("api/v{version:apiVersion}/HIAWms/[controller]")]
    public class WmsContainerPlaceController : ControllerBase
    {
        private readonly IWmsContainerPlaceAppService _wmsContainerPlaceAppService;
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsContainerPlaceController"/> class.
        /// </summary>
        /// <param name="wmsContainerPlaceAppService">The wmsContainerPlace application service.</param>
        public WmsContainerPlaceController(IWmsContainerPlaceAppService wmsContainerPlaceAppService)
        {
            _wmsContainerPlaceAppService = wmsContainerPlaceAppService;
        }
        /// <summary>
        /// èŽ·å–åº“ä½å®¹å™¨å…³ç³»
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        [HttpGet]
        [Route("{id}")]
        public virtual Task<WmsContainerPlaceDto> GetAsync(Guid id)
        {
            return _wmsContainerPlaceAppService.GetAsync(id);
        }
        /// <summary>
        /// åˆ†é¡µèŽ·å–åº“ä½å®¹å™¨å…³ç³»çš„åˆ—è¡¨.
        /// </summary>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        [HttpGet]
        [Route("Page")]
        public virtual Task<PagedResultDto<WmsContainerPlaceDto>> GetListAsync([FromQuery] GetWmsContainerPlaceInput input)
        {
            return _wmsContainerPlaceAppService.GetListAsync(input);
        }
        /// <summary>
        /// åˆ›å»ºåº“位容器关系
        /// </summary>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPost]
        public virtual Task<WmsContainerPlaceDto> CreateAsync(WmsContainerPlaceCreateDto input)
        {
            return _wmsContainerPlaceAppService.CreateAsync(input);
        }
        /// <summary>
        /// æ›´æ–°åº“位容器关系
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPut]
        [Route("{id}")]
        public virtual Task<WmsContainerPlaceDto> UpdateAsync(Guid id, WmsContainerPlaceUpdateDto input)
        {
            return _wmsContainerPlaceAppService.UpdateAsync(id, input);
        }
        /// <summary>
        /// å…‹éš†åº“位容器关系
        /// </summary>
        /// <param name="ids">Id集合.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPost]
        [Route("Clone")]
        public virtual Task<List<WmsContainerPlaceDto>> CloneAsync([FromBody] IEnumerable<Guid> ids)
        {
            return _wmsContainerPlaceAppService.CloneAsync(ids);
        }
        /// <summary>
        /// åˆ é™¤åº“位容器关系
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpDelete]
        [Route("{id}")]
        public virtual Task DeleteAsync(Guid id)
        {
            return _wmsContainerPlaceAppService.DeleteAsync(id);
        }
        /// <summary>
        /// æ‰¹é‡åˆ é™¤åº“位容器关系
        /// </summary>
        /// <param name="ids">The ids.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpDelete]
        public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids)
        {
            return _wmsContainerPlaceAppService.DeleteManyAsync(ids);
        }
        /// <summary>
        /// è°ƒæ•´æŽ’序库位容器关系
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        [HttpPut]
        [Route("{id}/AdjustSort/{sort}")]
        public virtual Task AdjustSortAsync(Guid id, int sort)
        {
            return _wmsContainerPlaceAppService.AdjustSortAsync(id, sort);
        }
        /// <summary>
        /// å¯¼å…¥åº“位容器关系
        /// </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 wmsContainerPlaceRows = sheetNames.Contains("配置") ? MiniExcel.Query<WmsContainerPlacesImportModel.WmsContainerPlaceImportModel>(stream, sheetName: "配置").ToList() : new();
            if (!wmsContainerPlaceRows.Any())
            {
                throw new UserFriendlyException("请检查导入的表格");
            }
            await _wmsContainerPlaceAppService.ImportAsync(new WmsContainerPlacesImportModel
            {
                WmsContainerPlaces = wmsContainerPlaceRows,
            });
            return Ok();
        }
        /// <summary>
        /// å¯¼å‡ºåº“位容器关系
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("Export")]
        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsContainerPlaceInput input)
        {
            input.MaxResultCount = int.MaxValue;
            var exportData = await _wmsContainerPlaceAppService.ExportAsync(input);
            var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WmsContainerPlace导出模板.xlsx");
            if (!System.IO.File.Exists(templatePath))
            {
                templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WmsContainerPlace导出模板.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/WmsEnumController.cs
@@ -1,7 +1,10 @@
using CMS.Extensions.Abp.AspNetCore.Mvc.Filters;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.CommonDto;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsEnumDto;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsStores;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CMS.Plugin.HIAWms.Domain.WmsMaterials;
using CmsQueryExtensions;
using Microsoft.AspNetCore.Mvc;
using System;
@@ -77,5 +80,28 @@
        {
            return await _wmsEnumAppService.GetAisleListAsync();
        }
        /// <summary>
        /// èŽ·å–æœºåž‹
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("ModelList")]
        public async Task<List<MaterialModelOutput>> GetMaterialModeListAsync()
        {
           return await  _wmsEnumAppService.GetMaterialModeListAsync();
        }
        /// <summary>
        /// èŽ·å–åº“ä½åˆ—è¡¨
        /// </summary>
        /// <param name="placeType"></param>
        /// <returns></returns>
        [HttpGet]
        [Route("PlaceList")]
        public async Task<List<PlaceListOutput>> GetPlaceListForSelectAsync(PlaceTypeEnum placeType)
        {
            return await _wmsEnumAppService.GetPlaceListForSelectAsync(placeType);
        }
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms/Resources/Templates/WmsContainerPlaceµ¼³öÄ£°å.xlsx
Binary files differ