schangxiang@126.com
2025-05-07 7eb4eb64a854eae4f3f62f0dfc4e63427d7231b6
22222
已添加262个文件
已修改5个文件
14629 ■■■■■ 文件已修改
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanInput.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/MesAppService.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/WorkPlanAppService.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/WorkPlanAutoMapperProfile.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreWorkPlanRepository.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanPublicController.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/.idea/.idea.CMS.Plugin.HIAWms/.idea/encodings.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/.idea/.idea.CMS.Plugin.HIAWms/.idea/indexLayout.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/.idea/.idea.CMS.Plugin.HIAWms/.idea/vcs.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/CMS.Plugin.UtilityApi.sln 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/Directory.Build.props 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/NuGet.config 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/README.md 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/common.props 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/common.test.props 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/configureawait.props 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/delete-bin-obj-folders.bat 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/doc/Domain-Drive-Design.md 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/package.reference.props 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/publish.ps1 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Abstractions/CMS.Plugin.HIAWms.Abstractions.csproj 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Abstractions/CMSPluginHIAWmsAbstractionsModule.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Abstractions/CMSPluginHIAWmsExtensions.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Abstractions/CMSPluginHIAWmsFeatures.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Abstractions/CMSPluginHIAWmsOptions.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Abstractions/CMSPluginHIAWmsSettings.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Abstractions/FodyWeavers.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Abstractions/HIAWmsActivity.cs 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Abstractions/IHIAWmsFlowService.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Abstractions/Properties/AssemblyInfo.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/CMS.Plugin.HIAWms.Application.Contracts.csproj 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/CMSPluginApplicationContractsModule.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/CMSPluginDtoExtensions.cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsAreas/GetWmsAreasInput.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsAreas/WmsAreaCreateDto.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsAreas/WmsAreaCreateOrUpdateDtoBase.cs 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsAreas/WmsAreaDto.cs 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsAreas/WmsAreaUpdateDto.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsAreas/WmsAreasExportModel.cs 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsAreas/WmsAreasImportModel.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainers/GetWmsContainersInput.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainers/WmsContainerCreateDto.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainers/WmsContainerCreateOrUpdateDtoBase.cs 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainers/WmsContainerDto.cs 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainers/WmsContainerUpdateDto.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainers/WmsContainersExportModel.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainers/WmsContainersImportModel.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsEnumDto/WmsEnumInput.cs 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockRecord/GetWmsInOutStockRecordInput.cs 249 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockRecord/WmsInOutStockRecordCreateDto.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockRecord/WmsInOutStockRecordCreateOrUpdateDtoBase.cs 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockRecord/WmsInOutStockRecordDto.cs 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockRecord/WmsInOutStockRecordExportModel.cs 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockRecord/WmsInOutStockRecordUpdateDto.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockRecord/WmsInOutStockRecordsImportModel.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/GetWmsMaterialInput.cs 301 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialCreateDto.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialCreateOrUpdateDtoBase.cs 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialDto.cs 200 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialExportModel.cs 138 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialUpdateDto.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialsImportModel.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/GetWmsPlacesInput.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/WmsPlaceCreateDto.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/WmsPlaceCreateOrUpdateDtoBase.cs 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/WmsPlaceDto.cs 155 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/WmsPlaceUpdateDto.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/WmsPlacesExportModel.cs 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/WmsPlacesImportModel.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsStores/GetWmsStoresInput.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsStores/WmsStoreCreateDto.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsStores/WmsStoreCreateOrUpdateDtoBase.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsStores/WmsStoreDto.cs 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsStores/WmsStoreUpdateDto.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsStores/WmsStoresExportModel.cs 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsStores/WmsStoresImportModel.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/FodyWeavers.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/ICMSPluginQueryAppService.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsAreaAppService.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsContainerAppService.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsEnumAppService.cs 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsInOutStockRecordAppService.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsMaterialAppService.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsPlaceAppService.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsStoreAppService.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application/CMS.Plugin.HIAWms.Application.csproj 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application/CMSPluginAppService.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application/CMSPluginApplicationModule.cs 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application/CMSPluginQueryAppService.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application/FodyWeavers.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application/Implements/WmsAreaAppService.cs 324 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application/Implements/WmsContainerAppService.cs 336 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application/Implements/WmsEnumAppService.cs 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application/Implements/WmsInOutStockRecordAppService.cs 436 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs 445 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application/Implements/WmsPlaceAppService.cs 322 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application/Implements/WmsStoreAppService.cs 313 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsAreaAutoMapperProfile.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsContainerAutoMapperProfile.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsInOutStockRecordAutoMapperProfile.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsMaterialAutoMapperProfile.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsPlaceAutoMapperProfile.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsStoreAutoMapperProfile.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Application/Properties/AssemblyInfo.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/CMS.Plugin.HIAWms.Domain.Shared.csproj 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/CMSPluginDomainErrorCodes.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/CMSPluginDomainSharedModule.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/CMSPluginModuleExtensionConfigurator.cs 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/AreaStatusEnum.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/AreaTypeEnum.cs 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/ContainerStatusEnum.cs 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/ContainerTypeEnum.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/HIAWmsStatus.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/MaterialTypeEnum.cs 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/PlaceStatusEnum.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/PlaceTypeEnum.cs 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/PurchaseTypeEnum.cs 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/SonTaskTypeEnum.cs 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/StockTypeEnum.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/TaskTypeEnum.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/WmsTaskStatus.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/YesNoEnum.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/FodyWeavers.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Localization/HIAWms/en.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Localization/HIAWms/zh-Hans.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Localization/HIAWmsResource.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Util/EnumHelper.cs 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Util/ExportHelper.cs 59 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Util/GetEnumDescriptionUtil.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/WmsAreas/WmsAreaConsts.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/WmsAreas/WmsAreaEto.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/WmsContainers/WmsContainerConsts.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/WmsContainers/WmsContainerEto.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/WmsMaterial/WmsMaterialConsts.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/WmsMaterial/WmsMaterialEto.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/WmsPlaces/WmsPlaceConsts.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/WmsPlaces/WmsPlaceEto.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/WmsStores/WmsStoreConsts.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/WmsStores/WmsStoreEto.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/CMS.Plugin.HIAWms.Domain.csproj 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/CMSPluginDbProperties.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/CMSPluginDomainModule.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/Data/CMSPluginDbMigrationService.cs 211 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/Data/ICMSPluginDapperRepository.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/Data/ICMSPluginDbSchemaMigrator.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/Data/NullCMSPluginDbSchemaMigrator.cs 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/EventHandlers/WmsAreaEventHandler.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/EventHandlers/WmsContainerEventHandler.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/EventHandlers/WmsMaterialEventHandler.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/EventHandlers/WmsPlaceEventHandler.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/EventHandlers/WmsStoreEventHandler.cs 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/FodyWeavers.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/Properties/AssemblyInfo.cs 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/Settings/CMSPluginSettingDefinitionProvider.cs 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsAreas/IWmsAreaRepository.cs 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsAreas/WmsArea.cs 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsAreas/WmsAreaDataSeedContributor.cs 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsAreas/WmsAreaSpecification.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsContainers/IWmsContainerRepository.cs 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsContainers/WmsContainer.cs 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsContainers/WmsContainerDataSeedContributor.cs 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsContainers/WmsContainerSpecification.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsInOutStockRecord/IWmsInOutStockRecordRepository.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsInOutStockRecord/WmsInOutStockRecord.cs 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsMaterial/IWmsMaterialRepository.cs 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsMaterial/WmsMaterial.cs 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsMaterial/WmsMaterialDataSeedContributor.cs 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsMaterial/WmsMaterialSpecification.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsPlaces/IWmsPlaceRepository.cs 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsPlaces/WmsPlace.cs 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsPlaces/WmsPlaceDataSeedContributor.cs 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsPlaces/WmsPlaceSpecification.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsStores/IWmsStoreRepository.cs 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsStores/WmsStore.cs 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsStores/WmsStoreDataSeedContributor.cs 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsStores/WmsStoreSpecification.cs 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.Domain/新文件夹/WmsTask.cs 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/CMS.Plugin.HIAWms.EntityFrameworkCore.csproj 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/CMSPluginDapperRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/CMSPluginDbSchemaMigrator.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/CMSPluginEfCoreEntityExtensionMappings.cs 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/CMSPluginEntityFrameworkCoreModule.cs 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsArea.cs 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsContainer.cs 117 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsInOutStockRecord.cs 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterial.cs 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsPlace.cs 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsStore.cs 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsTask.cs 153 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/FodyWeavers.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/ICMSPluginDbContext.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Properties/AssemblyInfo.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsAreaRepository.cs 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsContainerRepository.cs 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsInOutStockRecordRepository.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialRepository.cs 113 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsPlaceRepository.cs 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsStoreRepository.cs 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/appsettings.json 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.MySQL/CMS.Plugin.HIAWms.MySQL.csproj 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.MySQL/CMSPluginDbContext.cs 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.MySQL/CMSPluginDbContextFactory.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.MySQL/CMSPluginMySQLModule.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.MySQL/FodyWeavers.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.MySQL/Properties/AssemblyInfo.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.MySQL/Scripts/UpdateDB.bat 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.MySQL/Scripts/UpdateMigrations.bat 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.PostgreSql/CMS.Plugin.HIAWms.PostgreSql.csproj 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.PostgreSql/CMSPluginDbContext.cs 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.PostgreSql/CMSPluginDbContextFactory.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.PostgreSql/CMSPluginPostgreSqlModule.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.PostgreSql/FodyWeavers.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.PostgreSql/Properties/AssemblyInfo.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.PostgreSql/Scripts/UpdateDB.bat 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.PostgreSql/Scripts/UpdateMigrations.bat 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.SqlServer/CMS.Plugin.HIAWms.SqlServer.csproj 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.SqlServer/CMSPluginDbContext.cs 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.SqlServer/CMSPluginDbContextFactory.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.SqlServer/CMSPluginSqlServerModule.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.SqlServer/FodyWeavers.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.SqlServer/Properties/AssemblyInfo.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.SqlServer/Scripts/UpdateDB.bat 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms.SqlServer/Scripts/UpdateMigrations.bat 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/Apis/IHIAWmsExternalApi.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/CMS.Plugin.UtilityApi.csproj 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/CMSPluginEntry.cs 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/CMSPluginModule.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/CMSPluginRuntimeMigrator.cs 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/Controller/WmsAreaController.cs 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/Controller/WmsContainerController.cs 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/Controller/WmsEnumController.cs 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/Controller/WmsInOutStockRecordController.cs 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/Controller/WmsMaterialController.cs 188 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/Controller/WmsPlaceController.cs 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/Controller/WmsStoreController.cs 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/EventHandlers/HIAWmsEventHandler.cs 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/FlowProcessors/HIAWmsFlowProcessor.cs 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/Flows/50001_1.pfd 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/Flows/FlowInfo.xml 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/FodyWeavers.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/Jobs/HIAWmsArgs.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/Jobs/HIAWmsJob.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/ProjectService/HIAWmsProjectService.cs 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/Properties/launchSettings.json 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/Resources/Templates/WmsArea导出模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/Resources/Templates/WmsContainer导出模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterial导出模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/Resources/Templates/WmsPlace导出模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/Resources/Templates/WmsStore导出模板.xlsx 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/Services/HIAWmsFlowService.cs 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/Workers/HIAWmsWorker.cs 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/src/CMS.Plugin.HIAWms/appsettings.json 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/stylecop.json 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/test/CMS.Plugin.HIAWms.Application.Tests/CMS.Plugin.HIAWms.Application.Tests.csproj 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/test/CMS.Plugin.HIAWms.Application.Tests/HIAWmsApplicationTestBase.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/test/CMS.Plugin.HIAWms.Application.Tests/HIAWmsApplicationTestModule.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/test/CMS.Plugin.HIAWms.Domain.Tests/CMS.Plugin.HIAWms.Domain.Tests.csproj 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/test/CMS.Plugin.HIAWms.Domain.Tests/HIAWmsDomainTestBase.cs 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/test/CMS.Plugin.HIAWms.Domain.Tests/HIAWmsDomainTestModule.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/test/CMS.Plugin.HIAWms.EntityFrameworkCore.Tests/CMS.Plugin.HIAWms.EntityFrameworkCore.Tests.csproj 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/test/CMS.Plugin.HIAWms.EntityFrameworkCore.Tests/HIAWmsEntityFrameworkTestBase.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/test/CMS.Plugin.HIAWms.EntityFrameworkCore.Tests/HIAWmsTestEntityFrameworkCoreModule.cs 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/test/CMS.Plugin.HIAWms.TestBase/CMS.Plugin.HIAWms.TestBase.csproj 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/test/CMS.Plugin.HIAWms.TestBase/HIAWmsDataSeedContributor.cs 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/test/CMS.Plugin.HIAWms.TestBase/HIAWmsTestBase.cs 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/test/CMS.Plugin.HIAWms.TestBase/HIAWmsTestBaseModule.cs 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Weben_CMS专用代码生成器/UtilityApi/test/CMS.Plugin.HIAWms.TestBase/HIAWmsTestData.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application.Contracts/Dtos/WorkPlan/WorkPlanInput.cs
@@ -9,6 +9,7 @@
    /// <summary>
    /// ä½œä¸šè®¡åˆ’输入参数模型
    /// </summary>
    [Serializable]
    public class WorkPlanInput
    {
        /// <summary>
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/MesAppService.cs
@@ -1,36 +1,31 @@
using CMS.Plugin.FormulaManagement.Abstractions;
using CMS.Plugin.MesSuite.Abstractions.Events;
using CMS.Plugin.OrderManagement.Abstractions;
using CMS.Plugin.OrderManagement.Abstractions.Enums;
using CMS.Plugin.OrderManagement.Abstractions.Models;
using CMS.Plugin.OrderManagement.Abstractions;
using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.MyTestEntityNames;
using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkPlan;
using CMS.Plugin.PipeLineLems.Application.Contracts.Services;
using CMS.Plugin.PipeLineLems.Domain.MyTestEntityNames;
using CMS.Plugin.PipeLineLems.Domain.Shared;
using CMS.Plugin.PipeLineLems.Domain.Shared.MyTestEntityNames;
using CMS.Plugin.PipeLineLems.Domain.WorkPlan;
using CMS.Plugin.ProductManagement.Abstractions;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkPlan;
using Volo.Abp.EventBus;
namespace CMS.Plugin.PipeLineLems.Application.Implements;
public class MesAppService : IMesAppService
public class MesAppService : CMSPluginAppService, IMesAppService
{
    private readonly IServiceProvider _serviceProvider;
    private readonly IWorkPlanAppService _workPlanAppService;
    //private readonly IEventBus _eventBus;
    public MesAppService(IServiceProvider serviceProvider
        , IWorkPlanAppService workPlanAppService
        //, IEventBus eventBus
        )
    {
        _serviceProvider = serviceProvider;
        // _eventBus = eventBus;
        _workPlanAppService = workPlanAppService;
    }
    public async Task<MesOrderResponse> CreateAsync(List<WorkPlanInput> input)
@@ -57,7 +52,7 @@
            var order = await orderManager.GetByCodeAsync(taskCode);
            if (order != null)
            {
                throw new UserFriendlyException($"工单[{taskCode}]已存在");
                throw new UserFriendlyException($"任务编号[{taskCode}]已存在");
            }
@@ -141,6 +136,17 @@
        }
        //保存到表中
        foreach (var item in input)
        {
            var insertObj = ObjectMapper.Map<WorkPlanInput, WorkPlanCreateDto>(item);
            insertObj.OrgMaterialCode = "1111";
            insertObj.Sort = 1;
            await _workPlanAppService.CreateAsync(insertObj);
        }
        // å‘布事件
        //await _eventBus.PublishAsync(new EntityChangedEto("MESCREATE", input, null, EntityChangeType.Add, true));
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/Implements/WorkPlanAppService.cs
@@ -114,10 +114,10 @@
 
        await workPlanRepository.InsertAsync(insertObj); 
 
        if (input.Sort.HasValue && insertObj.Sort != maxSort)
        {
            await AdjustSortAsync(insertObj.Id, insertObj.Sort);
        }
        //if (input.Sort.HasValue && insertObj.Sort != maxSort)
        //{
        //    await AdjustSortAsync(insertObj.Id, insertObj.Sort);
        //}
 
        return ObjectMapper.Map<WorkPlan, WorkPlanDto>(insertObj); 
    } 
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.Application/MapperProfiles/WorkPlanAutoMapperProfile.cs
@@ -22,5 +22,6 @@
        CreateMap<WorkPlan, WorkPlanDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None); 
        CreateMap<WorkPlanCreateDto, WorkPlan>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None); 
        CreateMap<GetWorkPlanInput, WorkPlan>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None); 
        CreateMap<WorkPlanInput, WorkPlanCreateDto>(MemberList.None);
    } 
PipeLineLems/server/src/CMS.Plugin.PipeLineLems.EntityFrameworkCore/Repositories/EfCoreWorkPlanRepository.cs
@@ -84,7 +84,7 @@
            .IncludeDetails(includeDetails) 
            .WhereIf(whereConditions != null, whereConditions.data) 
            .Where(x => !x.IsDeleted) 
            .OrderBy(sorting.IsNullOrEmpty() ? nameof(WorkPlan.Sort) : sorting)
            .OrderByDescending(x=>x.CreationTime)
            .PageBy(skipCount, maxResultCount) 
            .ToListAsync(GetCancellationToken(cancellationToken)); 
    } 
PipeLineLems/server/src/CMS.Plugin.PipeLineLems/Controller/WorkPlanPublicController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,44 @@
using CMS.Extensions.Abp.AspNetCore.Mvc.Filters;
using CMS.Plugin.PipeLineLems.Application.Contracts.Dtos.WorkPlan;
using CMS.Plugin.PipeLineLems.Application.Contracts.Services;
using Microsoft.AspNetCore.Mvc;
using System.Reflection;
namespace CMS.Plugin.PipeLineLems.Controller
{
    /// <summary>
    /// ä½œä¸šè®¡åˆ’服务
    /// </summary>
    [ApiController]
    [TypeFilter(typeof(CMSLanguageFilter))]
    [TypeFilter(typeof(CMSUowActionFilter))]
    [TypeFilter(typeof(CMSAuditActionFilter))]
    [TypeFilter(typeof(CMSExceptionFilter))]
    [Route("api/v{version:apiVersion}/PipeLineLems/[controller]")]
    public class WorkPlanPublicController : ControllerBase
    {
        private readonly IMesAppService _mesAppService;
        /// <summary>
        /// Initializes a new instance of the <see cref="TestEntityNameController"/> class.
        /// </summary>
        /// <param name="testentitynameAppService">The testentityname application service.</param>
        public WorkPlanPublicController(IMesAppService mesAppService)
        {
            _mesAppService = mesAppService;
        }
        /// <summary>
        /// èŽ·å–ç”Ÿäº§è®¡åˆ’.
        /// </summary>
        /// <param name="input">标识符.</param>
        /// <returns></returns>
        [HttpPost]
        public virtual async Task<MesOrderResponse> GetWorkPlanAsync([FromBody] List<WorkPlanInput> input)
        {
            return await _mesAppService.CreateAsync(input);
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/.idea/.idea.CMS.Plugin.HIAWms/.idea/encodings.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
</project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/.idea/.idea.CMS.Plugin.HIAWms/.idea/indexLayout.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="UserContentModel">
    <attachedFolders />
    <explicitIncludes />
    <explicitExcludes />
  </component>
</project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/.idea/.idea.CMS.Plugin.HIAWms/.idea/vcs.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="VcsDirectoryMappings">
    <mapping directory="$PROJECT_DIR$/../../../../.." vcs="Git" />
  </component>
</project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/CMS.Plugin.UtilityApi.sln
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,144 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.4.33110.190
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "解决方案项", "解决方案项", "{28C418E6-AF1D-4B74-ACDF-7B81FA4C256E}"
    ProjectSection(SolutionItems) = preProject
        .editorconfig = .editorconfig
        .gitignore = .gitignore
        common.props = common.props
        common.test.props = common.test.props
        configureawait.props = configureawait.props
        delete-bin-obj-folders.bat = delete-bin-obj-folders.bat
        Directory.Build.props = Directory.Build.props
        NuGet.config = NuGet.config
        package.reference.props = package.reference.props
        publish.ps1 = publish.ps1
        README.md = README.md
        stylecop.json = stylecop.json
    EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{19F68F40-2A05-48EB-86F0-56928B3CCE9C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{5632E2B3-5592-4C6A-9493-768E5B04804D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CMS.Plugin.UtilityApi", "src\CMS.Plugin.HIAWms\CMS.Plugin.UtilityApi.csproj", "{9926DE4C-376D-487E-9C64-494913D94379}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CMS.Plugin.HIAWms.EntityFrameworkCore", "src\CMS.Plugin.HIAWms.EntityFrameworkCore\CMS.Plugin.HIAWms.EntityFrameworkCore.csproj", "{0022A80F-6D52-4B58-B2B3-F029DB4AEC0A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CMS.Plugin.HIAWms.Domain", "src\CMS.Plugin.HIAWms.Domain\CMS.Plugin.HIAWms.Domain.csproj", "{8B2BED13-2B0E-49B5-8B0A-F272D27B2F37}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CMS.Plugin.HIAWms.Domain.Shared", "src\CMS.Plugin.HIAWms.Domain.Shared\CMS.Plugin.HIAWms.Domain.Shared.csproj", "{F405C633-8100-49B8-A270-D5340A165742}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CMS.Plugin.HIAWms.Application.Contracts", "src\CMS.Plugin.HIAWms.Application.Contracts\CMS.Plugin.HIAWms.Application.Contracts.csproj", "{D65BB57E-618A-468C-AA28-BD8C9EBF0AF2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CMS.Plugin.HIAWms.Application", "src\CMS.Plugin.HIAWms.Application\CMS.Plugin.HIAWms.Application.csproj", "{02CB86F3-E614-4193-8B7F-C2FB665C8A5A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "doc", "doc", "{A68B3B6B-DDE8-431E-90F3-A9FEE1D14A53}"
    ProjectSection(SolutionItems) = preProject
        doc\Domain-Drive-Design.md = doc\Domain-Drive-Design.md
    EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CMS.Plugin.HIAWms.TestBase", "test\CMS.Plugin.HIAWms.TestBase\CMS.Plugin.HIAWms.TestBase.csproj", "{33999EE8-73A1-4CF2-BDFD-CE353B05A727}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CMS.Plugin.HIAWms.EntityFrameworkCore.Tests", "test\CMS.Plugin.HIAWms.EntityFrameworkCore.Tests\CMS.Plugin.HIAWms.EntityFrameworkCore.Tests.csproj", "{C6AFC427-C51D-4BD2-BBA6-8841D3495077}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CMS.Plugin.HIAWms.Domain.Tests", "test\CMS.Plugin.HIAWms.Domain.Tests\CMS.Plugin.HIAWms.Domain.Tests.csproj", "{74E86B03-F185-47B2-A4C3-04C1CEC84F14}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CMS.Plugin.HIAWms.Application.Tests", "test\CMS.Plugin.HIAWms.Application.Tests\CMS.Plugin.HIAWms.Application.Tests.csproj", "{731DE36F-27F5-48B8-865D-DA43C8910010}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CMS.Plugin.HIAWms.Abstractions", "src\CMS.Plugin.HIAWms.Abstractions\CMS.Plugin.HIAWms.Abstractions.csproj", "{87D957E4-FE12-4432-9B7B-827A98DD41D1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CMS.Plugin.HIAWms.MySQL", "src\CMS.Plugin.HIAWms.MySQL\CMS.Plugin.HIAWms.MySQL.csproj", "{2F71D6DF-F19A-410C-BD79-F2F871E63902}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CMS.Plugin.HIAWms.PostgreSql", "src\CMS.Plugin.HIAWms.PostgreSql\CMS.Plugin.HIAWms.PostgreSql.csproj", "{698D9FFA-080C-4F22-9FBF-B9509B28A954}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CMS.Plugin.HIAWms.SqlServer", "src\CMS.Plugin.HIAWms.SqlServer\CMS.Plugin.HIAWms.SqlServer.csproj", "{521D17FF-BD3A-43B4-9BEE-183FDE3522F4}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
        Release|Any CPU = Release|Any CPU
    EndGlobalSection
    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {9926DE4C-376D-487E-9C64-494913D94379}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {9926DE4C-376D-487E-9C64-494913D94379}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {9926DE4C-376D-487E-9C64-494913D94379}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {9926DE4C-376D-487E-9C64-494913D94379}.Release|Any CPU.Build.0 = Release|Any CPU
        {0022A80F-6D52-4B58-B2B3-F029DB4AEC0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {0022A80F-6D52-4B58-B2B3-F029DB4AEC0A}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {0022A80F-6D52-4B58-B2B3-F029DB4AEC0A}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {0022A80F-6D52-4B58-B2B3-F029DB4AEC0A}.Release|Any CPU.Build.0 = Release|Any CPU
        {8B2BED13-2B0E-49B5-8B0A-F272D27B2F37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {8B2BED13-2B0E-49B5-8B0A-F272D27B2F37}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {8B2BED13-2B0E-49B5-8B0A-F272D27B2F37}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {8B2BED13-2B0E-49B5-8B0A-F272D27B2F37}.Release|Any CPU.Build.0 = Release|Any CPU
        {F405C633-8100-49B8-A270-D5340A165742}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {F405C633-8100-49B8-A270-D5340A165742}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {F405C633-8100-49B8-A270-D5340A165742}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {F405C633-8100-49B8-A270-D5340A165742}.Release|Any CPU.Build.0 = Release|Any CPU
        {D65BB57E-618A-468C-AA28-BD8C9EBF0AF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {D65BB57E-618A-468C-AA28-BD8C9EBF0AF2}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {D65BB57E-618A-468C-AA28-BD8C9EBF0AF2}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {D65BB57E-618A-468C-AA28-BD8C9EBF0AF2}.Release|Any CPU.Build.0 = Release|Any CPU
        {02CB86F3-E614-4193-8B7F-C2FB665C8A5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {02CB86F3-E614-4193-8B7F-C2FB665C8A5A}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {02CB86F3-E614-4193-8B7F-C2FB665C8A5A}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {02CB86F3-E614-4193-8B7F-C2FB665C8A5A}.Release|Any CPU.Build.0 = Release|Any CPU
        {33999EE8-73A1-4CF2-BDFD-CE353B05A727}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {33999EE8-73A1-4CF2-BDFD-CE353B05A727}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {33999EE8-73A1-4CF2-BDFD-CE353B05A727}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {33999EE8-73A1-4CF2-BDFD-CE353B05A727}.Release|Any CPU.Build.0 = Release|Any CPU
        {C6AFC427-C51D-4BD2-BBA6-8841D3495077}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {C6AFC427-C51D-4BD2-BBA6-8841D3495077}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {C6AFC427-C51D-4BD2-BBA6-8841D3495077}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {C6AFC427-C51D-4BD2-BBA6-8841D3495077}.Release|Any CPU.Build.0 = Release|Any CPU
        {74E86B03-F185-47B2-A4C3-04C1CEC84F14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {74E86B03-F185-47B2-A4C3-04C1CEC84F14}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {74E86B03-F185-47B2-A4C3-04C1CEC84F14}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {74E86B03-F185-47B2-A4C3-04C1CEC84F14}.Release|Any CPU.Build.0 = Release|Any CPU
        {731DE36F-27F5-48B8-865D-DA43C8910010}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {731DE36F-27F5-48B8-865D-DA43C8910010}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {731DE36F-27F5-48B8-865D-DA43C8910010}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {731DE36F-27F5-48B8-865D-DA43C8910010}.Release|Any CPU.Build.0 = Release|Any CPU
        {87D957E4-FE12-4432-9B7B-827A98DD41D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {87D957E4-FE12-4432-9B7B-827A98DD41D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {87D957E4-FE12-4432-9B7B-827A98DD41D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {87D957E4-FE12-4432-9B7B-827A98DD41D1}.Release|Any CPU.Build.0 = Release|Any CPU
        {2F71D6DF-F19A-410C-BD79-F2F871E63902}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {2F71D6DF-F19A-410C-BD79-F2F871E63902}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {2F71D6DF-F19A-410C-BD79-F2F871E63902}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {2F71D6DF-F19A-410C-BD79-F2F871E63902}.Release|Any CPU.Build.0 = Release|Any CPU
        {698D9FFA-080C-4F22-9FBF-B9509B28A954}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {698D9FFA-080C-4F22-9FBF-B9509B28A954}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {698D9FFA-080C-4F22-9FBF-B9509B28A954}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {698D9FFA-080C-4F22-9FBF-B9509B28A954}.Release|Any CPU.Build.0 = Release|Any CPU
        {521D17FF-BD3A-43B4-9BEE-183FDE3522F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {521D17FF-BD3A-43B4-9BEE-183FDE3522F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {521D17FF-BD3A-43B4-9BEE-183FDE3522F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {521D17FF-BD3A-43B4-9BEE-183FDE3522F4}.Release|Any CPU.Build.0 = Release|Any CPU
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
    EndGlobalSection
    GlobalSection(NestedProjects) = preSolution
        {9926DE4C-376D-487E-9C64-494913D94379} = {19F68F40-2A05-48EB-86F0-56928B3CCE9C}
        {0022A80F-6D52-4B58-B2B3-F029DB4AEC0A} = {19F68F40-2A05-48EB-86F0-56928B3CCE9C}
        {8B2BED13-2B0E-49B5-8B0A-F272D27B2F37} = {19F68F40-2A05-48EB-86F0-56928B3CCE9C}
        {F405C633-8100-49B8-A270-D5340A165742} = {19F68F40-2A05-48EB-86F0-56928B3CCE9C}
        {D65BB57E-618A-468C-AA28-BD8C9EBF0AF2} = {19F68F40-2A05-48EB-86F0-56928B3CCE9C}
        {02CB86F3-E614-4193-8B7F-C2FB665C8A5A} = {19F68F40-2A05-48EB-86F0-56928B3CCE9C}
        {33999EE8-73A1-4CF2-BDFD-CE353B05A727} = {5632E2B3-5592-4C6A-9493-768E5B04804D}
        {C6AFC427-C51D-4BD2-BBA6-8841D3495077} = {5632E2B3-5592-4C6A-9493-768E5B04804D}
        {74E86B03-F185-47B2-A4C3-04C1CEC84F14} = {5632E2B3-5592-4C6A-9493-768E5B04804D}
        {731DE36F-27F5-48B8-865D-DA43C8910010} = {5632E2B3-5592-4C6A-9493-768E5B04804D}
        {87D957E4-FE12-4432-9B7B-827A98DD41D1} = {19F68F40-2A05-48EB-86F0-56928B3CCE9C}
        {2F71D6DF-F19A-410C-BD79-F2F871E63902} = {19F68F40-2A05-48EB-86F0-56928B3CCE9C}
        {698D9FFA-080C-4F22-9FBF-B9509B28A954} = {19F68F40-2A05-48EB-86F0-56928B3CCE9C}
        {521D17FF-BD3A-43B4-9BEE-183FDE3522F4} = {19F68F40-2A05-48EB-86F0-56928B3CCE9C}
    EndGlobalSection
    GlobalSection(ExtensibilityGlobals) = postSolution
        SolutionGuid = {220123E7-A888-4DE7-8F9A-8FE271543889}
    EndGlobalSection
EndGlobal
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/Directory.Build.props
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
<Project>
    <!-- C# compiler options (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/) -->
    <PropertyGroup>
        <!-- Nullable (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/language#nullable) -->
        <Nullable>disable</Nullable>
        <Deterministic>true</Deterministic>
        <!-- report errors and warnings (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/errors-warnings) -->
        <WarningLevel>5</WarningLevel>
    </PropertyGroup>
    <!-- Generated file properties (https://docs.microsoft.com/en-us/dotnet/core/project-sdk/msbuild-props#generated-file-properties) -->
    <PropertyGroup>
        <ImplicitUsings>enable</ImplicitUsings>
    </PropertyGroup>
    <!-- Code analysis properties (https://docs.microsoft.com/en-us/dotnet/core/project-sdk/msbuild-props#code-analysis-properties) -->
    <PropertyGroup>
        <EnableNETAnalyzers>true</EnableNETAnalyzers>
        <EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
        <AnalysisMode>All</AnalysisMode>
        <AnalysisLevel>latest</AnalysisLevel>
    </PropertyGroup>
    <ItemGroup>
        <AdditionalFiles Include="$([MSBuild]::GetPathOfFileAbove('stylecop.json'))" Visible="false" />
    </ItemGroup>
    <!-- Dependencies -->
    <ItemGroup Condition="$(MSBuildProjectExtension) == '.csproj'" >
        <PackageReference Include="SonarAnalyzer.CSharp" Version="8.32.0.39516" PrivateAssets="all" />
        <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
        <PackageReference Include="Roslynator.Analyzers" Version="3.3.0" PrivateAssets="all" />
    </ItemGroup>
    <PropertyGroup Condition=" '$(Configuration)' == 'Debug'">
        <DefineConstants>$(DefineConstants);DEBUG;TRACE</DefineConstants>
        <Optimize>false</Optimize>
        <NullableReferenceTypes>true</NullableReferenceTypes>
        <!-- report errors and warnings (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/errors-warnings) -->
        <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
        <CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
    </PropertyGroup>
    <PropertyGroup Condition="'$(Configuration)' == 'Release'">
        <DefineConstants>$(DefineConstants);RELEASE</DefineConstants>
        <Optimize>true</Optimize>
        <!-- report errors and warnings (https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/errors-warnings) -->
        <TreatWarningsAsErrors>false</TreatWarningsAsErrors>
        <CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
    </PropertyGroup>
    <!-- Import reference package -->
    <Import Project="package.reference.props" />
    <!-- Test Project coverlet collector -->
    <PropertyGroup>
        <IsTestProject Condition="$(MSBuildProjectFullPath.Contains('test')) and ($(MSBuildProjectName.EndsWith('.Tests')) or $(MSBuildProjectName.EndsWith('.TestBase')))">true</IsTestProject>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Condition="'$(IsTestProject)' == 'true'" Include="coverlet.collector" Version="3.1.0">
            <PrivateAssets>all</PrivateAssets>
            <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
        </PackageReference>
    </ItemGroup>
</Project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/NuGet.config
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <packageSources>
        <clear />
        <add key="nexus" value="https://nexus.sycdev.com/repository/nuget-group/index.json" />
        <add key="nuget" value="https://api.nuget.org/v3/index.json" />
    </packageSources>
</configuration>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/README.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2 @@
# HIAWms
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/common.props
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
<Project>
    <PropertyGroup>
        <Company>SYC</Company>
        <Copyright>Copyright Â© SYC. All rights reserved.</Copyright>
        <NoWarn>$(NoWarn);CS1591</NoWarn>
        <VersionMajor>1</VersionMajor>
        <VersionMinor>0</VersionMinor>
        <VersionPatch>0</VersionPatch>
        <VersionPrefix>$(VersionMajor).$(VersionMinor).$(VersionPatch)</VersionPrefix>
        <!--<VersionSuffix>-preview1</VersionSuffix>-->
        <Version>$(VersionPrefix)$(VersionSuffix)</Version>
        <AssemblyVersion>$(VersionMajor).0.0.0</AssemblyVersion>
        <LangVersion>latest</LangVersion>
        <GenerateDocumentationFile>true</GenerateDocumentationFile>
        <!-- Include symbol files (*.pdb) in the built .nupkg -->
        <AllowedOutputExtensionsInPackageBuildOutputFolder>$(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
    </PropertyGroup>
</Project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/common.test.props
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
<Project>
  <PropertyGroup>
    <LangVersion>latest</LangVersion>
    <NoWarn>$(NoWarn);CS1591</NoWarn>
    <GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles>
    <GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
    <GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
    <GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
  </PropertyGroup>
</Project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/configureawait.props
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
<Project>
  <ItemGroup>
      <PackageReference Include="ConfigureAwait.Fody" Version="3.3.1" PrivateAssets="All" />
      <PackageReference Include="Fody" Version="6.6.1">
        <PrivateAssets>All</PrivateAssets>
        <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
      </PackageReference>
  </ItemGroup>
</Project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/delete-bin-obj-folders.bat
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
@ECHO off
cls
ECHO Deleting all BIN and OBJ folders...
ECHO.
FOR /d /r . %%d in (bin,obj) DO (
    IF EXIST "%%d" (
        ECHO %%d | FIND /I "\node_modules\" > Nul && (
            ECHO.Skipping: %%d
        ) || (
            ECHO.Deleting: %%d
            rd /s/q "%%d"
        )
    )
)
ECHO.
ECHO.BIN and OBJ folders have been successfully deleted. Press any key to exit.
pause > nul
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/doc/Domain-Drive-Design.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
# é¢†åŸŸæ¨¡åž‹è®¾è®¡
## ä¸€ã€æœ¯è¯­ä¸Žå®šä¹‰
| è‹±æ–‡ç¼©å†™ | è‹±æ–‡å…¨ç§° | ä¸­æ–‡ç¿»è¯‘ |
| -------- | -------- | -------- |
|          |          |          |
## äºŒã€ä¸šåŠ¡æµç¨‹
不涉及
## ä¸‰ã€æ•°æ®ç±»åž‹
数据类型采用的是C#的数据类型,主要有下面的一些类型:
| æ•°æ®ç±»åž‹       | å«ä¹‰           | æœ€å°å€¼/最大值/精度                                           | å ç”¨ç©ºé—´      | è¯´æ˜Ž                             |
| -------------- | -------------- | ------------------------------------------------------------ | ------------- | -------------------------------- |
| bool           | å¸ƒå°”值         | false/true                                                   | 1字节         |                                  |
| sbyte          | è¶…短整型       | -128127                                                      | 1字节         |                                  |
| byte           | æ— ç¬¦å·è¶…短整型 | 0255                                                         | 1字节         |                                  |
| short          | çŸ­æ•´åž‹         | -32,76832,767                                                | 2字节         |                                  |
| ushort         | æ— ç¬¦å·çŸ­æ•´åž‹   | 065,535                                                      | 2字节         |                                  |
| int            | æ•´åž‹           | -2,147,483,6482,147,483,647                                  | 4字节         |                                  |
| uint           | æ— ç¬¦å·æ•´åž‹     | 04,294,967,295                                               | 4字节         |                                  |
| long           | é•¿æ•´åž‹         | -9,223,372,036,854,775,8089,223,372,036,854,775,807          | 8字节         |                                  |
| ulong          | æ— ç¬¦å·é•¿æ•´åž‹   | 0/18,446,744,073,709,551,615                                 | 8字节         |                                  |
| float          | å•精度浮点数   | -3.40282347E+38/F3.40282347E+38F/6~7位有效数字               | 4字节         |                                  |
| double         | åŒç²¾åº¦æµ®ç‚¹æ•°   | -1.7976931348623157E+308/1.7976931348623157E+308/15~16位有效数字 | 8字节         |                                  |
| DateTime       | æ—¥æœŸæ—¶é—´       | 0000-01-01 00:00:00.0000000/9999-12-31 23:59:59.9999999/100ns | 8字节         | ç»Ÿä¸€ä½¿ç”¨UTC时间进行传输和存储。  |
| TimeSpan       | æ—¶é—´è·¨åº¦       | -10,675,199.02:48:05.4775808/10,675,199.02:48:05.4775807100ns | 8字节         |                                  |
| string         | å­—符串         |                                                              | n字节         | ç»Ÿä¸€ä½¿ç”¨UTF8编码进行传输和存储。 |
| Complex        | å¤æ•°           |                                                              | 16字节        |                                  |
| IList<T>       | åˆ—表           | [0]~[n-1]                                                    | n * sizeof(T) |                                  |
| ICollection<T> | é›†åˆ           |                                                              | n * sizeof(T) | ä¸ŽIList类似,只是没有顺序关系。  |
## å››ã€å®žä½“(Entity)及聚合根(AggregateRoot)
实体是模型中需要区分个体的对象,拥有标识、数据和行为。实体有标识,允许变化,判断两个实体相等的标准是标识相等。聚合(Aggregate)表示一组领域对象(包括实体和值对象),用来表述一个完整的领域概念。而每个聚合都有一个根实体,这个根实体又叫做聚合根。聚合根是聚合所表述的领域概念的主体,外部对象需要访问聚合内的实体时,只能通过聚合根进行访问,而不能直接访问。
## äº”、枚举
## å…­ã€å€¼å¯¹è±¡ï¼ˆValueObject)
值对象是通过属性来识别的对象,它将多个相关属性组合为一个概念整体。值对象没有标识,不允许变化,判断两个值对象相等的标准是值对象内部所有属性值相等。
## å…­ã€é¢†åŸŸæœåŠ¡
不涉及
## ä¸ƒã€é¢†åŸŸäº‹ä»¶
不涉及
## å…«ã€å…¶ä»–
不涉及
## ä¹ã€å‚考引用
不涉及
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/package.reference.props
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
<Project>
  <PropertyGroup>
      <!-- All Microsoft packages -->
      <MicrosoftPackageVersion>6.0.0</MicrosoftPackageVersion>
      <!-- All Abp packages -->
      <ABPPackageVersion>6.0.0</ABPPackageVersion>
      <!-- All LMES packages -->
      <LMESPackageVersion>2.3.*</LMESPackageVersion>
      <!-- Microsoft.NET.Test.Sdk https://www.nuget.org/packages/Microsoft.NET.Test.Sdk -->
      <MicrosoftNETTestSdkPackageVersion>16.11.0</MicrosoftNETTestSdkPackageVersion>
      <!-- NSubstitute  https://www.nuget.org/packages/NSubstitute -->
      <NSubstitutePackageVersion>4.2.2</NSubstitutePackageVersion>
      <!-- Shouldly https://www.nuget.org/packages/Shouldly -->
      <ShouldlyPackageVersion>4.0.3</ShouldlyPackageVersion>
      <!-- xunit https://www.nuget.org/packages/xUnit -->
      <xUnitPackageVersion>2.4.1</xUnitPackageVersion>
      <!-- xunit.extensibility.execution https://www.nuget.org/packages/xunit.extensibility.execution -->
      <xUnitExtensibilityExecutionPackageVersion>2.4.1</xUnitExtensibilityExecutionPackageVersion>
      <!-- xunit.runner.visualstudio https://www.nuget.org/packages/xunit.runner.visualstudio -->
      <xUnitRunnerVisualstudioPackageVersion>2.4.3</xUnitRunnerVisualstudioPackageVersion>
  </PropertyGroup>
</Project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/publish.ps1
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
# publishFolder
$publishFolder= $args[0]
# Paths
$rootFolder = (Get-Item -Path "./" -Verbose).FullName
if ([String]::IsNullOrEmpty($publishFolder)) {
    $publishFolder = Join-Path $rootFolder "output/publish"
    $hasPath = Test-Path($publishFolder)
    if (-Not $hasPath) {
        new-item -path $rootFolder -name "output/publish" -type directory
    }
}
Write-Host ("Publish Output " + $publishFolder)
# List of projects
$projects = (
    "src/CMS.Plugin.HIAWms"
)
# Rebuild solution
Set-Location $rootFolder
dotnet restore -s https://nexus.sycdev.com/repository/nuget-hosted/  --runtime win-x64
# dotnet restore --configfile NuGet.config  --runtime win-x64
Write-Host ("Restore Completed ! ")
# Publish all projects
foreach($project in $projects) {
    $projectFolder = Join-Path $rootFolder $project
    $projectName = $project.Substring($project.LastIndexOf("/") + 1)
    Set-Location $projectFolder
    Write-Host ("Publish " + $projectName)
   #  & dotnet publish ($projectName + ".csproj ") --configuration Release --output (Join-Path $publishFolder ("/" + $projectName.ToLower()))  --nologo --verbosity quiet --no-restore
    & dotnet publish ($projectName + ".csproj ") --configuration Release --output (Join-Path $publishFolder ("/" + $projectName.ToLower()))  --nologo --verbosity quiet --no-restore  --runtime win-x64
}
Write-Host ("Publish Completed ! ")
# Go back to the root folder
Set-Location $rootFolder
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Abstractions/CMS.Plugin.HIAWms.Abstractions.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
<Project Sdk="Microsoft.NET.Sdk">
    <Import Project="../../common.props" />
    <Import Project="../../configureawait.props" />
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <EnableDynamicLoading>true</EnableDynamicLoading>
        <ProduceReferenceAssembly>false</ProduceReferenceAssembly>
        <GenerateDocumentationFile>true</GenerateDocumentationFile>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="CMS.Plugin.FlowManagement.Abstractions" Version="$(LMESPackageVersion)" />
        <PackageReference Include="CMS.Plugin.BarcodeManagement.Abstractions" Version="$(LMESPackageVersion)" />
        <PackageReference Include="CMS.Plugin.FormulaManagement.Abstractions" Version="$(LMESPackageVersion)" />
        <PackageReference Include="CMS.Plugin.MaterialManagement.Abstractions" Version="$(LMESPackageVersion)" />
        <PackageReference Include="CMS.Plugin.ProductManagement.Abstractions" Version="$(LMESPackageVersion)" />
        <PackageReference Include="CMS.Plugin.ProductionManagement.Abstractions" Version="$(LMESPackageVersion)" />
        <PackageReference Include="CMS.Plugin.ProcessManagement.Abstractions" Version="$(LMESPackageVersion)" />
        <PackageReference Include="CMS.Plugin.ProductManagement.Abstractions" Version="$(LMESPackageVersion)" />
        <PackageReference Include="CMS.Plugin.QualityManagement.Abstractions" Version="$(LMESPackageVersion)" />
        <PackageReference Include="CMS.Plugin.OrderManagement.Abstractions" Version="$(LMESPackageVersion)" />
        <PackageReference Include="CMS.Plugin.TraceManagement.Abstractions" Version="$(LMESPackageVersion)" />
    </ItemGroup>
</Project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Abstractions/CMSPluginHIAWmsAbstractionsModule.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
namespace CMS.Plugin.HIAWms.Abstractions;
/// <summary>
/// æµç¨‹ä¸šåŠ¡æ‰©å±•æ¨¡å—
/// </summary>
public class CMSPluginHIAWmsAbstractionsModule
{
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Abstractions/CMSPluginHIAWmsExtensions.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
using Microsoft.Extensions.DependencyInjection;
namespace CMS.Plugin.HIAWms.Abstractions
{
    /// <summary>
    /// æ‰©å±•方法
    /// </summary>
    public static class CMSPluginHIAWmsExtensions
    {
        /// <summary>
        /// Tries the add setting management.
        /// </summary>
        /// <param name="services">The services.</param>
        /// <param name="configureOptions">The configure options.</param>
        /// <returns></returns>
        public static IServiceCollection TryAddHIAWms(this IServiceCollection services, Action<CMSPluginHIAWmsOptions>? configureOptions = null)
        {
            if (configureOptions == null)
            {
                services.AddOptions().Configure<CMSPluginHIAWmsOptions>(options => {});
            }
            else
            {
                services.AddOptions().PostConfigure(configureOptions);
            }
            return services;
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Abstractions/CMSPluginHIAWmsFeatures.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
namespace CMS.Plugin.HIAWms.Abstractions
{
    /// <summary>
    /// åŠŸèƒ½å®šä¹‰.
    /// </summary>
    public class CMSPluginHIAWmsFeatures
    {
        /// <summary>
        /// The prefix
        /// </summary>
        private const string Prefix = "LMES";
        /// <summary>
        /// GroupName
        /// </summary>
        public const string GroupName = Prefix + ".HIAWms";
        /// <summary>
        /// æ˜¯å¦å¼€å¯
        /// </summary>
        public const string Enable = GroupName + ".Enable";
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Abstractions/CMSPluginHIAWmsOptions.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
using CMS.Plugin.MesSuite.Abstractions.Models;
namespace CMS.Plugin.HIAWms.Abstractions
{
    public class CMSPluginHIAWmsOptions
    {
        public CMSPluginHIAWmsOptions()
        {
        }
        /// <summary>
        /// æ‰©å±•属性
        /// </summary>
        public List<ExtraProperty> ExtraProperties { get; set; } = new();
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Abstractions/CMSPluginHIAWmsSettings.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
namespace CMS.Plugin.HIAWms.Abstractions
{
    /// <summary>
    /// CMSSettingNames
    /// </summary>
    public static class CMSPluginHIAWmsSettings
    {
        /// <summary>
        /// The prefix
        /// </summary>
        private const string Prefix = "SCMS";
        /// <summary>
        /// The application settings prefix
        /// </summary>
        private const string AppSettingsPrefix = Prefix + ".AppSettings";
        /// <summary>
        /// ç»„件状态:0=关闭,1=开启
        /// </summary>
        public const string PluginState = AppSettingsPrefix + ".HIAWms.PluginState";
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Abstractions/FodyWeavers.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
   <ConfigureAwait ContinueOnCapturedContext="false" />
</Weavers>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Abstractions/HIAWmsActivity.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,78 @@
using System.ComponentModel;
using System.Runtime.Serialization;
using CMS.Plugin.FlowManagement.Abstractions.Enums;
using CMS.Plugin.FlowManagement.Abstractions.FlowBusiness.Activitys;
using CMS.Plugin.MesSuite.Abstractions.Models;
using CMS.Plugin.OrderManagement.Abstractions.Models;
using CMS.Plugin.ProcessManagement.Abstractions.Models;
using CMS.Plugin.TraceManagement.Abstractions.Models.Traces;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using SYC.Flow.Kernel;
namespace CMS.Plugin.HIAWms.Abstractions
{
    /// <summary>
    /// HIAWms ä¸šåŠ¡æ­¥éª¤
    /// </summary>
    [Design("HIAWms", "HIAWms ä¸šåŠ¡æ­¥éª¤", Sort = 99), Category("定制步骤")]
    [Serializable]
    public class HIAWmsActivity : BusinessActivity
    {
        /// <summary>
        /// é…ç½®å±žæ€§1
        /// </summary>
        [Design("配置属性1", "配置属性1", Sort = 1), Category("配置信息")]
        [DataMember]
        public string MyProperty1 { get; set; }
        /// <summary>
        /// é…ç½®å±žæ€§2
        /// </summary>
        [Design("配置属性2", "配置属性2", Sort = 2), Category("配置信息")]
        [DataMember]
        public int MyProperty2 { get; set; }
        /// <summary>
        /// æµç¨‹ä¸Šä¸‹æ–‡æ ‡è¯†é›†åˆ
        /// </summary>
        public override List<FlowItemKey> FlowItemKeys => GetFlowItemKeys();
        /// <summary>
        /// å·¥è‰ºæµç¨‹å¤„理
        /// </summary>
        public override async Task ProcessAsync(ProcessflowEventArgs args)
        {
            // å·¥è‰ºæ¨¡åž‹
            var processModel = Flow.DataItems.ApplicationData as ProcessModel;
            // å·¥å•模型
            var orderModel = Flow.DataItems[FlowItemCollection.OrderModel] as OrderModel;
            // äº§å“æ¨¡åž‹
            var productModel = Flow.DataItems[FlowItemCollection.ProductModel] as AssociationProductModel;
            // è¿½æº¯æ¨¡åž‹
            var traceModel = Flow.DataItems[FlowItemCollection.TraceModel] as TraceModel;
            Flow.Logger.LogInformation($"执行流程:实例={Flow.Instance.ProcID} -> {Flow.Name} -> {Name} HIAWmsActivity");
            // ä¸šåŠ¡å¤„ç†
            // ç”±äºŽServiceProvider来源于Flow组件,此处需共享CMS.Plugin.HIAWms.Abstractions程序集,否则无法调用,修改CMS.Plugin.HIAWms项目中的CMSPluginModule.cs文件,取消注释GetSharedAssemblies()方法
            var hiawmsFlowService = Flow.ServiceProvider.GetService<IHIAWmsFlowService>();
            if (hiawmsFlowService != null)
            {
                await hiawmsFlowService.ProcessAsync(args);
            }
        }
        /// <summary>
        /// Gets the flow item keys.
        /// </summary>
        protected virtual List<FlowItemKey> GetFlowItemKeys()
        {
            var result = new List<FlowItemKey>();
            return result;
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Abstractions/IHIAWmsFlowService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
using SYC.Flow.Kernel;
namespace CMS.Plugin.HIAWms.Abstractions
{
    /// <summary>
    /// HIAWms æµç¨‹æœåŠ¡
    /// </summary>
    public interface IHIAWmsFlowService
    {
        /// <summary>
        /// å·¥è‰ºæµç¨‹å¤„理
        /// </summary>
        Task ProcessAsync(ProcessflowEventArgs args);
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Abstractions/Properties/AssemblyInfo.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
using SYC.Flow.Kernel;
[assembly: ProcessflowExtention(true)]
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/CMS.Plugin.HIAWms.Application.Contracts.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
<Project Sdk="Microsoft.NET.Sdk">
    <Import Project="../../common.props" />
    <Import Project="../../configureawait.props" />
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <GenerateDocumentationFile>True</GenerateDocumentationFile>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Volo.Abp.Ddd.Application.Contracts" Version="$(ABPPackageVersion)" />
        <PackageReference Include="Volo.Abp.Authorization.Abstractions" Version="$(ABPPackageVersion)" />
        <PackageReference Include="MiniExcel" Version="1.31.3" />
    </ItemGroup>
    <ItemGroup>
        <ProjectReference Include="..\CMS.Plugin.HIAWms.Domain.Shared\CMS.Plugin.HIAWms.Domain.Shared.csproj" />
    </ItemGroup>
    <ItemGroup>
      <Reference Include="CmsQueryExtensions">
        <HintPath>..\..\..\..\..\CommonDLL\CmsQueryExtensions.dll</HintPath>
      </Reference>
    </ItemGroup>
</Project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/CMSPluginApplicationContractsModule.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
using CMS.Plugin.HIAWms.Domain.Shared;
using Volo.Abp.Application;
using Volo.Abp.Modularity;
namespace CMS.Plugin.HIAWms.Application.Contracts;
/// <summary>
/// æ’件应用服务契约模块
/// </summary>
[DependsOn(
    typeof(CMSPluginDomainSharedModule),
    typeof(AbpDddApplicationContractsModule)
)]
public class CMSPluginApplicationContractsModule : AbpModule
{
    /// <inheritdoc />
    public override void PreConfigureServices(ServiceConfigurationContext context)
    {
        CMSPluginDtoExtensions.Configure();
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/CMSPluginDtoExtensions.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
using Volo.Abp.Threading;
namespace CMS.Plugin.HIAWms.Application.Contracts;
/// <summary>
/// Dto扩展
/// </summary>
public static class CMSPluginDtoExtensions
{
    private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
    /// <summary>
    /// Configures this instance.
    /// </summary>
    public static void Configure()
    {
        OneTimeRunner.Run(() =>
        {
                /* You can add extension properties to DTOs
                 * defined in the depended modules.
                 *
                 * Example:
                 *
                 * ObjectExtensionManager.Instance
                 *   .AddOrUpdateProperty<IdentityRoleDto, string>("Title");
                 *
                 * See the documentation for more:
                 * https://docs.abp.io/en/abp/latest/Object-Extensions
                 */
        });
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsAreas/GetWmsAreasInput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsAreas;
/// <summary>
/// WmsArea查询参数对象
/// </summary>
public class GetWmsAreasInput : ExtensiblePagedAndSortedResultRequestDto
{
    /// <summary>
    /// Gets or sets the filter.
    /// </summary>
    public string Filter { get; set; }
    /// <summary>
    /// Gets or sets the name.
    /// </summary>
    public string Name { get; set; }
    /// <summary>
    /// åº“区编号
    /// </summary>
    public string AreaNo { get; set; }
    /// <summary>
    /// åº“区名称
    /// </summary>
    public string AreaName { get; set; }
    /// <summary>
    /// æè¿°
    /// </summary>
    public string? AreaDesc { get; set; }
    /// <summary>
    /// åº“区状态
    /// </summary>
    public AreaStatusEnum AreaStatus { get; set; }
    /// <summary>
    /// åº“区类型
    /// </summary>
    public AreaTypeEnum AreaType { get; set; }
    /// <summary>
    /// ä»“库代码
    /// </summary>
    public string? StoreCode { get; set; }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsAreas/WmsAreaCreateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsAreas;
/// <summary>
/// WmsArea创建参数对象
/// </summary>
public class WmsAreaCreateDto : WmsAreaCreateOrUpdateDtoBase
{
    /// <summary>
    /// æŽ’序
    /// </summary>
    public virtual int? Sort { get; set; }
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨
    /// </summary>
    public bool? IsDisabled { get; set; } = false;
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsAreas/WmsAreaCreateOrUpdateDtoBase.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,89 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsAreas;
/// <summary>
/// WmsArea创建或更新基类
/// </summary>
public abstract class WmsAreaCreateOrUpdateDtoBase : ExtensibleEntityDto
{
    /// <summary>
    /// åº“区编号
    /// </summary>
    public string AreaNo { get; set; }
    /// <summary>
    /// åº“区名称
    /// </summary>
    public string AreaName { get; set; }
    /// <summary>
    /// æè¿°
    /// </summary>
    public string? AreaDesc { get; set; }
    /// <summary>
    /// åº“区状态
    /// </summary>
    public AreaStatusEnum AreaStatus { get; set; }
    /// <summary>
    /// åº“区类型
    /// </summary>
    public AreaTypeEnum AreaType { get; set; }
    /// <summary>
    /// ä»“库代码
    /// </summary>
    public string? StoreCode { get; set; }
    /// <summary>
    /// ä»“库名称
    /// </summary>
    public string? StoreName { get; set; }
    /// <summary>
    /// å†—余字段1 - é¢„留扩展用途
    /// </summary>
    public string RedundantField1 { get; set; }
    /// <summary>
    /// å†—余字段2 - é¢„留扩展用途
    /// </summary>
    public string RedundantField2 { get; set; }
    /// <summary>
    /// å†—余字段3 - é¢„留扩展用途
    /// </summary>
    public string RedundantField3 { get; set; }
    /// <summary>
    /// å¤‡æ³¨
    /// </summary>
    public virtual string Remark { get; set; }
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsAreaCreateOrUpdateDtoBase"/> class.
    /// </summary>
    public WmsAreaCreateOrUpdateDtoBase() : base(false)
    {
    }
    /// <summary>
    /// åº“区列表
    /// </summary>
    public class AreaForListOuptut
    {
        /// <summary>
        /// åº“区编号
        /// </summary>
        public string AreaNo { get; set; }
        /// <summary>
        /// åº“区名称
        /// </summary>
        public string AreaName { get; set; }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsAreas/WmsAreaDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,108 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsAreas;
/// <summary>
/// WmsArea数据参数对象
/// </summary>
public class WmsAreaDto : ExtensibleEntityDto<Guid>, IHasConcurrencyStamp
{
    /// <summary>
    /// åº“区编号
    /// </summary>
    public string AreaNo { get; set; }
    /// <summary>
    /// åº“区名称
    /// </summary>
    public string AreaName { get; set; }
    /// <summary>
    /// æè¿°
    /// </summary>
    public string? AreaDesc { get; set; }
    /// <summary>
    /// åº“区状态
    /// </summary>
    public AreaStatusEnum AreaStatus { get; set; }
    /// <summary>
    /// åº“区状态
    /// </summary>
    public string AreaStatusDesc
    {
        get
        {
            return GetEnumDescriptionUtil.GetEnumDescription(AreaStatus);
        }
    }
    /// <summary>
    /// åº“区类型
    /// </summary>
    public AreaTypeEnum AreaType { get; set; }
    /// <summary>
    /// åº“区状态
    /// </summary>
    public string AreaTypeDesc
    {
        get
        {
            return GetEnumDescriptionUtil.GetEnumDescription(AreaType);
        }
    }
    /// <summary>
    /// å†—余字段1 - é¢„留扩展用途
    /// </summary>
    public string RedundantField1 { get; set; }
    /// <summary>
    /// å†—余字段2 - é¢„留扩展用途
    /// </summary>
    public string RedundantField2 { get; set; }
    /// <summary>
    /// å†—余字段3 - é¢„留扩展用途
    /// </summary>
    public string RedundantField3 { get; set; }
    /// <summary>
    /// æŽ’序
    /// </summary>
    public virtual int Sort { get; set; }
    /// <summary>
    /// å¤‡æ³¨
    /// </summary>
    public virtual string Remark { get; set; }
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨
    /// </summary>
    public virtual bool? IsDisabled { get; set; }
    /// <summary>
    /// å¹¶å‘戳
    /// </summary>
    public string ConcurrencyStamp { get; set; }
    /// <summary>
    /// Gets the export data.
    /// </summary>
    /// <returns></returns>
    public Dictionary<string, object> GetExportData()
    {
        var exportData = new Dictionary<string, object>();
        foreach (var property in this.GetType().GetProperties())
        {
            exportData.Add(property.Name, property.GetValue(this));
        }
        return exportData;
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsAreas/WmsAreaUpdateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsAreas;
/// <summary>
/// WmsArea更新参数对象
/// </summary>
public class WmsAreaUpdateDto : WmsAreaCreateOrUpdateDtoBase, IHasConcurrencyStamp
{
    /// <summary>
    /// å¹¶å‘戳
    /// </summary>
    public string ConcurrencyStamp { get; set; }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsAreas/WmsAreasExportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,89 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using MiniExcelLibs.Attributes;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsAreas
{
    /// <summary>
    /// WmsAreas导出模型
    /// </summary>
    public class WmsAreasExportModel
    {
        /// <summary>
        /// WmsArea导出模型
        /// </summary>
        public class WorkSectionExportModel
        {
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®åº“åŒºç¼–å·
            /// </summary>
            /// <example>WH-AREA-001</example>
            [ExcelColumn(Name = "库区编号", Width = 20)]
            public string AreaNo { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®åº“åŒºåç§°
            /// </summary>
            /// <example>原材料A区</example>
            [ExcelColumn(Name = "库区名称", Width = 25)]
            public string AreaName { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®åº“åŒºæè¿°ä¿¡æ¯
            /// </summary>
            /// <example>存放电子元器件</example>
            [ExcelColumn(Name = "描述", Width = 30)]
            public string AreaDesc { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®åº“åŒºçŠ¶æ€
            /// </summary>
            /// <example>Normal</example>
            [ExcelColumn(Name = "库区状态", Width = 15)]
            public AreaStatusEnum AreaStatus { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®åº“åŒºç±»åž‹
            /// </summary>
            /// <example>Storage</example>
            [ExcelColumn(Name = "库区类型", Width = 15)]
            public AreaTypeEnum AreaType { get; set; }
            /// <summary>
            /// ä»“库代码
            /// </summary
            [ExcelColumn(Name = "仓库代码", Width = 15)]
            public string? StoreCode { get; set; }
            /// <summary>
            /// ä»“库名称
            /// </summary>
            [ExcelColumn(Name = "仓库名称", Width = 15)]
            public string? StoreName { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®é¢„ç•™æ‰©å±•å­—æ®µ1
            /// </summary>
            /// <example>自定义用途</example>
            [ExcelColumn(Name = "扩展字段1", Width = 20)]
            public string RedundantField1 { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®é¢„ç•™æ‰©å±•å­—æ®µ2
            /// </summary>
            [ExcelColumn(Name = "扩展字段2", Width = 20)]
            public string RedundantField2 { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®é¢„ç•™æ‰©å±•å­—æ®µ3
            /// </summary>
            [ExcelColumn(Name = "扩展字段3", Width = 20)]
            public string RedundantField3 { get; set; }
            /// <summary>
            /// å¤‡æ³¨
            /// </summary>
            [ExcelColumn(Name = "备注", Width = 25)]
            public virtual string Remark { get; set; }
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsAreas/WmsAreasImportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
using static CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsAreas.WmsAreasExportModel;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsAreas
{
    /// <summary>
    /// WmsAreas导入模型
    /// </summary>
    public class WmsAreasImportModel
    {
        private List<WmsAreaImportModel> _wmsareas = new();
        public List<WmsAreaImportModel> WmsAreas
        {
            get => _wmsareas;
            set
            {
                _wmsareas = value;
                var rowIndex = 2;
                _wmsareas?.ForEach(x => x.RowIndex = rowIndex++);
            }
        }
        /// <summary>
        /// WmsArea导入模型
        /// </summary>
        public class WmsAreaImportModel : WorkSectionExportModel
        {
            /// <summary>
            /// è¡Œå·
            /// </summary>
            public int RowIndex { get; set; }
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainers/GetWmsContainersInput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainers;
/// <summary>
/// WmsContainer查询参数对象
/// </summary>
public class GetWmsContainersInput : ExtensiblePagedAndSortedResultRequestDto
{
    /// <summary>
    /// Gets or sets the filter.
    /// </summary>
    public string Filter { get; set; }
    /// <summary>
    /// Gets or sets the name.
    /// </summary>
    public string Name { get; set; }
    /// <summary>
    /// æ‰˜ç›˜ç¼–号
    /// </summary>
    public string ContainerNo { get; set; }
    /// <summary>
    /// æ‰˜ç›˜ç±»åž‹
    /// </summary>
    public ContainerTypeEnum ContainerType { get; set; }
    /// <summary>
    /// æ‰˜ç›˜çŠ¶æ€
    /// </summary>
    public ContainerStatusEnum ContainerStatus { get; set; }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainers/WmsContainerCreateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainers;
/// <summary>
/// WmsContainer创建参数对象
/// </summary>
public class WmsContainerCreateDto : WmsContainerCreateOrUpdateDtoBase
{
    /// <summary>
    /// æŽ’序
    /// </summary>
    public virtual int? Sort { get; set; }
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨
    /// </summary>
    public bool? IsDisabled { get; set; } = false;
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainers/WmsContainerCreateOrUpdateDtoBase.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,99 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainers;
/// <summary>
/// WmsContainer创建或更新基类
/// </summary>
public abstract class WmsContainerCreateOrUpdateDtoBase : ExtensibleEntityDto
{
    /// <summary>
    /// æ‰˜ç›˜ç¼–号
    /// </summary>
    public string ContainerNo { get; set; }
    /// <summary>
    /// æ‰˜ç›˜ç±»åž‹
    /// </summary>
    public ContainerTypeEnum ContainerType { get; set; }
    /// <summary>
    /// æ‰˜ç›˜çŠ¶æ€
    /// </summary>
    public ContainerStatusEnum ContainerStatus { get; set; }
    /// <summary>
    /// é•¿åº¦
    /// </summary>
    public decimal? SpecLength { get; set; }
    /// <summary>
    /// å®½åº¦
    /// </summary>
    public decimal? SpecWidth { get; set; }
    /// <summary>
    /// é«˜åº¦
    /// </summary>
    public decimal? SpecHeight { get; set; }
    /// <summary>
    /// é™é•¿
    /// </summary>
    public decimal? LimitLength { get; set; }
    /// <summary>
    /// é™å®½
    /// </summary>
    public decimal? LimitWidth { get; set; }
    /// <summary>
    /// é™é«˜
    /// </summary>
    public decimal? LimitHeight { get; set; }
    /// <summary>
    /// è½½é‡ä¸Šé™
    /// </summary>
    public decimal? MaxWeight { get; set; }
    /// <summary>
    /// å¼‚常数量
    /// </summary>
    public int? ExceptionNumber { get; set; }
    /// <summary>
    ///物料数量
    /// </summary>
    public int? MaterialNumber { get; set; }
    /// <summary>
    /// å†—余字段1 - é¢„留扩展用途
    /// </summary>
    public string RedundantField1 { get; set; }
    /// <summary>
    /// å†—余字段2 - é¢„留扩展用途
    /// </summary>
    public string RedundantField2 { get; set; }
    /// <summary>
    /// å†—余字段3 - é¢„留扩展用途
    /// </summary>
    public string RedundantField3 { get; set; }
    /// <summary>
    /// å¤‡æ³¨
    /// </summary>
    public virtual string Remark { get; set; }
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsContainerCreateOrUpdateDtoBase"/> class.
    /// </summary>
    public WmsContainerCreateOrUpdateDtoBase() : base(false)
    {
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainers/WmsContainerDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,145 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainers;
/// <summary>
/// WmsContainer数据参数对象
/// </summary>
public class WmsContainerDto : ExtensibleEntityDto<Guid>, IHasConcurrencyStamp
{
    /// <summary>
    /// æ‰˜ç›˜ç¼–号
    /// </summary>
    public string ContainerNo { get; set; }
    /// <summary>
    /// æ‰˜ç›˜ç±»åž‹
    /// </summary>
    public ContainerTypeEnum ContainerType { get; set; }
    /// <summary>
    /// æ‰˜ç›˜ç±»åž‹
    /// </summary>
    public string ContainerTypeDesc
    {
        get
        {
            return GetEnumDescriptionUtil.GetEnumDescription(ContainerType);
        }
    }
    /// <summary>
    /// æ‰˜ç›˜çŠ¶æ€
    /// </summary>
    public ContainerStatusEnum ContainerStatus { get; set; }
    /// <summary>
    /// æ‰˜ç›˜çŠ¶æ€
    /// </summary>
    public string ContainerStatusDesc
    {
        get
        {
            return GetEnumDescriptionUtil.GetEnumDescription(ContainerStatus);
        }
    }
    /// <summary>
    /// é•¿åº¦
    /// </summary>
    public decimal? SpecLength { get; set; }
    /// <summary>
    /// å®½åº¦
    /// </summary>
    public decimal? SpecWidth { get; set; }
    /// <summary>
    /// é«˜åº¦
    /// </summary>
    public decimal? SpecHeight { get; set; }
    /// <summary>
    /// é™é•¿
    /// </summary>
    public decimal? LimitLength { get; set; }
    /// <summary>
    /// é™å®½
    /// </summary>
    public decimal? LimitWidth { get; set; }
    /// <summary>
    /// é™é«˜
    /// </summary>
    public decimal? LimitHeight { get; set; }
    /// <summary>
    /// è½½é‡ä¸Šé™
    /// </summary>
    public decimal? MaxWeight { get; set; }
    /// <summary>
    /// å¼‚常数量
    /// </summary>
    public int? ExceptionNumber { get; set; }
    /// <summary>
    ///物料数量
    /// </summary>
    public int? MaterialNumber { get; set; }
    /// <summary>
    /// å†—余字段1 - é¢„留扩展用途
    /// </summary>
    public string RedundantField1 { get; set; }
    /// <summary>
    /// å†—余字段2 - é¢„留扩展用途
    /// </summary>
    public string RedundantField2 { get; set; }
    /// <summary>
    /// å†—余字段3 - é¢„留扩展用途
    /// </summary>
    public string RedundantField3 { get; set; }
    /// <summary>
    /// æŽ’序
    /// </summary>
    public virtual int Sort { get; set; }
    /// <summary>
    /// å¤‡æ³¨
    /// </summary>
    public virtual string Remark { get; set; }
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨
    /// </summary>
    public virtual bool? IsDisabled { get; set; }
    /// <summary>
    /// å¹¶å‘戳
    /// </summary>
    public string ConcurrencyStamp { get; set; }
    /// <summary>
    /// Gets the export data.
    /// </summary>
    /// <returns></returns>
    public Dictionary<string, object> GetExportData()
    {
        var exportData = new Dictionary<string, object>();
        foreach (var property in this.GetType().GetProperties())
        {
            exportData.Add(property.Name, property.GetValue(this));
        }
        return exportData;
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainers/WmsContainerUpdateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainers;
/// <summary>
/// WmsContainer更新参数对象
/// </summary>
public class WmsContainerUpdateDto : WmsContainerCreateOrUpdateDtoBase, IHasConcurrencyStamp
{
    /// <summary>
    /// å¹¶å‘戳
    /// </summary>
    public string ConcurrencyStamp { get; set; }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainers/WmsContainersExportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,113 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using MiniExcelLibs.Attributes;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainers
{
    /// <summary>
    /// WmsContainers导出模型
    /// </summary>
    public class WmsContainersExportModel
    {
        /// <summary>
        /// WmsContainer导出模型
        /// </summary>
        public class WorkSectionExportModel
        {
            /// <summary>
            /// æ‰˜ç›˜ç¼–号
            /// </summary>
            [ExcelColumn(Name = "托盘编号", Width = 25)]
            public string ContainerNo { get; set; }
            /// <summary>
            /// æ‰˜ç›˜ç±»åž‹
            /// </summary>
            [ExcelColumn(Name = "托盘类型", Width = 25)]
            public ContainerTypeEnum ContainerType { get; set; }
            /// <summary>
            /// æ‰˜ç›˜çŠ¶æ€
            /// </summary>
            [ExcelColumn(Name = "托盘状态", Width = 25)]
            public ContainerStatusEnum ContainerStatus { get; set; }
            /// <summary>
            /// é•¿åº¦
            /// </summary>
            [ExcelColumn(Name = "长度", Width = 25)]
            public decimal? SpecLength { get; set; }
            /// <summary>
            /// å®½åº¦
            /// </summary>
            [ExcelColumn(Name = "宽度", Width = 25)]
            public decimal? SpecWidth { get; set; }
            /// <summary>
            /// é«˜åº¦
            /// </summary>
            [ExcelColumn(Name = "高度", Width = 25)]
            public decimal? SpecHeight { get; set; }
            /// <summary>
            /// é™é•¿
            /// </summary>
            [ExcelColumn(Name = "限长", Width = 25)]
            public decimal? LimitLength { get; set; }
            /// <summary>
            /// é™å®½
            /// </summary>
            [ExcelColumn(Name = "限宽", Width = 25)]
            public decimal? LimitWidth { get; set; }
            /// <summary>
            /// é™é«˜
            /// </summary>
            [ExcelColumn(Name = "限高", Width = 25)]
            public decimal? LimitHeight { get; set; }
            /// <summary>
            /// è½½é‡ä¸Šé™
            /// </summary>
            [ExcelColumn(Name = "载重上限", Width = 25)]
            public decimal? MaxWeight { get; set; }
            /// <summary>
            /// å¼‚常数量
            /// </summary>
            [ExcelColumn(Name = "异常数量", Width = 25)]
            public int? ExceptionNumber { get; set; }
            /// <summary>
            /// ç‰©æ–™æ•°é‡
            /// </summary>
            [ExcelColumn(Name = "物料数量", Width = 25)]
            public int? MaterialNumber { get; set; }
            /// <summary>
            /// å†—余字段1 - é¢„留扩展用途
            /// </summary>
            [ExcelColumn(Name = "冗余字段1", Width = 25)]
            public string RedundantField1 { get; set; }
            /// <summary>
            /// å†—余字段2 - é¢„留扩展用途
            /// </summary>
            [ExcelColumn(Name = "冗余字段2", Width = 25)]
            public string RedundantField2 { get; set; }
            /// <summary>
            /// å†—余字段3 - é¢„留扩展用途
            /// </summary>
            [ExcelColumn(Name = "冗余字段3", Width = 25)]
            public string RedundantField3 { get; set; }
            /// <summary>
            /// å¤‡æ³¨
            /// </summary>
            [ExcelColumn(Name = "备注", Width = 25)]
            public virtual string Remark { get; set; }
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainers/WmsContainersImportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
using static CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainers.WmsContainersExportModel;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainers
{
    /// <summary>
    /// WmsContainers导入模型
    /// </summary>
    public class WmsContainersImportModel
    {
        private List<WmsContainerImportModel> _wmscontainers = new();
        public List<WmsContainerImportModel> WmsContainers
        {
            get => _wmscontainers;
            set
            {
                _wmscontainers = value;
                var rowIndex = 2;
                _wmscontainers?.ForEach(x => x.RowIndex = rowIndex++);
            }
        }
        /// <summary>
        /// WmsContainer导入模型
        /// </summary>
        public class WmsContainerImportModel : WorkSectionExportModel
        {
            /// <summary>
            /// è¡Œå·
            /// </summary>
            public int RowIndex { get; set; }
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsEnumDto/WmsEnumInput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsEnumDto
{
    /// <summary>
    /// æžšä¸¾è¾“入参数
    /// </summary>
    public class WmsEnumInput
    {
        /// <summary>
        /// æžšä¸¾ç±»åž‹åç§°
        /// </summary>
        /// <example>AccountTypeEnum</example>
        public string EnumName { get; set; }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockRecord/GetWmsInOutStockRecordInput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,249 @@
using CmsQueryExtensions.Extension;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockRecord;
/// <summary>
/// å‡ºå…¥åº“记录表查询参数
/// </summary>
public class GetWmsInOutStockRecordInput : 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 OrderNo { get; set; }
        /// <summary>
        /// å•据编号-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum OrderNo_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        public string MaterialName { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialName_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ç‰©æ–™ä»¶å·
        /// </summary>
        public string MaterialNo { get; set; }
        /// <summary>
        /// ç‰©æ–™ä»¶å·-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialNo_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ“ä½œç±»åž‹
        /// </summary>
        public int?  StockType { get; set; }
        /// <summary>
        /// æ“ä½œç±»åž‹-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum StockType_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// å®¹å™¨ç¼–号
        /// </summary>
        public string ContainerNo { get; set; }
        /// <summary>
        /// å®¹å™¨ç¼–号-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ContainerNo_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æœºåž‹
        /// </summary>
        public string MaterialModel { get; set; }
        /// <summary>
        /// æœºåž‹-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialModel_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ“ä½œæ—¶é—´
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> OperateTime { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string Remark { get; set; }
        /// <summary>
        /// å¤‡æ³¨-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Remark_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ç‰©æ–™ID
        /// </summary>
        public string MaterialId { get; set; }
        /// <summary>
        /// ç‰©æ–™ID-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        public string TaskNo { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum TaskNo_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// èµ·å§‹åº“位
        /// </summary>
        public string SourcePlace { get; set; }
        /// <summary>
        /// èµ·å§‹åº“位-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum SourcePlace_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ç›®æ ‡åº“位
        /// </summary>
        public string ToPlace { get; set; }
        /// <summary>
        /// ç›®æ ‡åº“位-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum ToPlace_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        ///
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> CreationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string CreatorId { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum CreatorId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        ///
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> LastModificationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string LastModifierId { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum LastModifierId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        ///
        /// </summary>
        public bool?  IsDeleted { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum IsDeleted_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        ///
        /// </summary>
        public string DeleterId { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum DeleterId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        ///
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> DeletionTime { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool?  IsDisabled { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum IsDisabled_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// æŽ’序
        /// </summary>
        public int?  Sort { get; set; }
        /// <summary>
        /// æŽ’序-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Sort_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockRecord/WmsInOutStockRecordCreateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockRecord;
/// <summary>
/// å‡ºå…¥åº“记录表创建参数对象
/// </summary>
public class WmsInOutStockRecordCreateDto : WmsInOutStockRecordCreateOrUpdateDtoBase
{
    /// <summary>
    /// æŽ’序
    /// </summary>
    public virtual int? Sort { get; set; }
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨
    /// </summary>
    public bool? IsDisabled { get; set; } = false;
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockRecord/WmsInOutStockRecordCreateOrUpdateDtoBase.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,100 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using System;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockRecord;
/// <summary>
/// å‡ºå…¥åº“记录表创建或更新基类
/// </summary>
public abstract class WmsInOutStockRecordCreateOrUpdateDtoBase : ExtensibleEntityDto
{
            /// <summary>
        /// å•据编号
        /// </summary>
        public string OrderNo { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        public string? MaterialName { get; set; }
        /// <summary>
        /// ç‰©æ–™ä»¶å·
        /// </summary>
        public string MaterialNo { get; set; }
        /// <summary>
        /// æ“ä½œç±»åž‹
        /// </summary>
        public StockTypeEnum StockType { get; set; }
        /// <summary>
        /// å®¹å™¨ç¼–号
        /// </summary>
        public string? ContainerNo { get; set; }
        /// <summary>
        /// æœºåž‹
        /// </summary>
        public string? MaterialModel { get; set; }
        /// <summary>
        /// æ“ä½œæ—¶é—´
        /// </summary>
        public DateTime? OperateTime { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string? Remark { get; set; }
        /// <summary>
        /// ç‰©æ–™ID
        /// </summary>
        public string MaterialId { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        public string TaskNo { get; set; }
        /// <summary>
        /// èµ·å§‹åº“位
        /// </summary>
        public string? SourcePlace { get; set; }
        /// <summary>
        /// ç›®æ ‡åº“位
        /// </summary>
        public string? ToPlace { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? CreatorId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? LastModifierId { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool? IsDisabled { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        public int Sort { get; set; }
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsInOutStockRecordCreateOrUpdateDtoBase"/> class.
    /// </summary>
    public WmsInOutStockRecordCreateOrUpdateDtoBase() : base(false)
    {
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockRecord/WmsInOutStockRecordDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,155 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockRecord;
/// <summary>
/// å‡ºå…¥åº“记录表数据参数对象
/// </summary>
public  class WmsInOutStockRecordDto:  ExtensibleEntityDto<Guid>, IHasConcurrencyStamp
{
            /// <summary>
        /// å•据编号
        /// </summary>
        public string OrderNo { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        public string? MaterialName { get; set; }
        /// <summary>
        /// ç‰©æ–™ä»¶å·
        /// </summary>
        public string MaterialNo { get; set; }
        /// <summary>
        /// æ“ä½œç±»åž‹
        /// </summary>
        public StockTypeEnum StockType { get; set; }
        /// <summary>
        /// æ“ä½œç±»åž‹
        /// </summary>
        public string StockTypeDesc
        {
            get
            {
                return GetEnumDescriptionUtil.GetEnumDescription(StockType);
            }
        }
        /// <summary>
        /// å®¹å™¨ç¼–号
        /// </summary>
        public string? ContainerNo { get; set; }
        /// <summary>
        /// æœºåž‹
        /// </summary>
        public string? MaterialModel { get; set; }
        /// <summary>
        /// æ“ä½œæ—¶é—´
        /// </summary>
        public DateTime? OperateTime { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string? Remark { get; set; }
        /// <summary>
        /// ç‰©æ–™ID
        /// </summary>
        public string MaterialId { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        public string TaskNo { get; set; }
        /// <summary>
        /// èµ·å§‹åº“位
        /// </summary>
        public string? SourcePlace { get; set; }
        /// <summary>
        /// ç›®æ ‡åº“位
        /// </summary>
        public string? ToPlace { get; set; }
        /// <summary>
        ///
        /// </summary>
        public ExtraPropertyDictionary? ExtraProperties { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? ConcurrencyStamp { get; set; }
        /// <summary>
        ///
        /// </summary>
        public DateTime CreationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? CreatorId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public DateTime? LastModificationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? LastModifierId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public bool IsDeleted { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? DeleterId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public DateTime? DeletionTime { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool? IsDisabled { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        public int Sort { 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;
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockRecord/WmsInOutStockRecordExportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,109 @@
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.WmsInOutStockRecord;
/// <summary>
/// å‡ºå…¥åº“记录表导出模型
/// </summary>
public  class WmsInOutStockRecordExportModel
{
            /// <summary>
        /// å•据编号
        /// </summary>
        [ExcelColumn(Name = "单据编号", Width = 25)]
        public string OrderNo { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        [ExcelColumn(Name = "物料名称", Width = 25)]
        public string MaterialName { get; set; }
        /// <summary>
        /// ç‰©æ–™ä»¶å·
        /// </summary>
        [ExcelColumn(Name = "物料件号", Width = 25)]
        public string MaterialNo { get; set; }
        /// <summary>
        /// æ“ä½œç±»åž‹
        /// </summary>
        [ExcelColumn(Name = "操作类型", Width = 25)]
        public StockTypeEnum StockType { get; set; }
        /// <summary>
        /// å®¹å™¨ç¼–号
        /// </summary>
        [ExcelColumn(Name = "容器编号", Width = 25)]
        public string ContainerNo { get; set; }
        /// <summary>
        /// æœºåž‹
        /// </summary>
        [ExcelColumn(Name = "机型", Width = 25)]
        public string MaterialModel { get; set; }
        /// <summary>
        /// æ“ä½œæ—¶é—´
        /// </summary>
        [ExcelColumn(Name = "操作时间", Width = 25)]
        public DateTime OperateTime { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [ExcelColumn(Name = "备注", Width = 25)]
        public string Remark { get; set; }
        /// <summary>
        /// ç‰©æ–™ID
        /// </summary>
        [ExcelColumn(Name = "物料ID", Width = 25)]
        public string MaterialId { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        [ExcelColumn(Name = "任务号", Width = 25)]
        public string TaskNo { get; set; }
        /// <summary>
        /// èµ·å§‹åº“位
        /// </summary>
        [ExcelColumn(Name = "起始库位", Width = 25)]
        public string SourcePlace { get; set; }
        /// <summary>
        /// ç›®æ ‡åº“位
        /// </summary>
        [ExcelColumn(Name = "目标库位", Width = 25)]
        public string ToPlace { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        [ExcelColumn(Name = "是否禁用", Width = 25)]
        public bool? IsDisabled { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        [ExcelColumn(Name = "排序", Width = 25)]
        public int Sort { 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;
        }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockRecord/WmsInOutStockRecordUpdateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockRecord;
/// <summary>
/// å‡ºå…¥åº“记录表更新参数对象
/// </summary>
public class WmsInOutStockRecordUpdateDto : WmsInOutStockRecordCreateOrUpdateDtoBase, IHasConcurrencyStamp
{
   /// <summary>
    /// å¹¶å‘戳
    /// </summary>
    public string ConcurrencyStamp { get; set; }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockRecord/WmsInOutStockRecordsImportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockRecord
{
    /// <summary>
    /// å‡ºå…¥åº“记录表导入模型
    /// </summary>
    public class WmsInOutStockRecordsImportModel
    {
        private List<WmsInOutStockRecordImportModel> _WmsInOutStockRecords = new();
        public List<WmsInOutStockRecordImportModel> WmsInOutStockRecords
        {
            get => _WmsInOutStockRecords;
            set
            {
                _WmsInOutStockRecords = value;
                var rowIndex = 2;
                _WmsInOutStockRecords?.ForEach(x => x.RowIndex = rowIndex++);
            }
        }
        /// <summary>
        /// å‡ºå…¥åº“记录表导入模型
        /// </summary>
        public class WmsInOutStockRecordImportModel : WmsInOutStockRecordExportModel
        {
            /// <summary>
            /// è¡Œå·
            /// </summary>
            public int RowIndex { get; set; }
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/GetWmsMaterialInput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,301 @@
using CmsQueryExtensions.Extension;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial;
/// <summary>
/// ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨æŸ¥è¯¢å‚æ•°
/// </summary>
public class GetWmsMaterialInput : 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 MaterialCode { get; set; }
        /// <summary>
        /// ç‰©æ–™ç¼–码(唯一标识)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialCode_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        public string MaterialName { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialName_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// é‡‡è´­ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// </summary>
        public int?  PurchaseType { get; set; }
        /// <summary>
        /// é‡‡è´­ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum PurchaseType_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// ç‰©æ–™ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// </summary>
        public int?  MaterialType { get; set; }
        /// <summary>
        /// ç‰©æ–™ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialType_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// ä¸»å•位(如:kg、m、个)
        /// </summary>
        public string PrimaryUnit { get; set; }
        /// <summary>
        /// ä¸»å•位(如:kg、m、个)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum PrimaryUnit_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// è§„æ ¼/标准(如:GB/T 8163-2018)
        /// </summary>
        public string Standard { get; set; }
        /// <summary>
        /// è§„æ ¼/标准(如:GB/T 8163-2018)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Standard_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å¤–径(单位:mm)
        /// </summary>
        public decimal?  OuterDiameter { get; set; }
        /// <summary>
        /// å¤–径(单位:mm)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum OuterDiameter_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// å£åŽšï¼ˆå•ä½ï¼šmm)
        /// </summary>
        public decimal?  WallThickness { get; set; }
        /// <summary>
        /// å£åŽšï¼ˆå•ä½ï¼šmm)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum WallThickness_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// æè´¨ï¼ˆå¦‚:304不锈钢)
        /// </summary>
        public string MaterialQuality { get; set; }
        /// <summary>
        /// æè´¨ï¼ˆå¦‚:304不锈钢)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum MaterialQuality_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// é•¿åº¦ï¼ˆå•位:m)
        /// </summary>
        public decimal?  Length { get; set; }
        /// <summary>
        /// é•¿åº¦ï¼ˆå•位:m)-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Length_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// æ˜¯å¦ä¸ºä¸»æ”¯ç®¡
        /// </summary>
        public int?  IsMainBranch { get; set; }
        /// <summary>
        /// æ˜¯å¦ä¸ºä¸»æ”¯ç®¡-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum IsMainBranch_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// ç”Ÿäº§å·¥åŽ‚
        /// </summary>
        public string Factory { get; set; }
        /// <summary>
        /// ç”Ÿäº§å·¥åŽ‚-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Factory_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// è¯ä¹¦ç¼–号
        /// </summary>
        public string Certification { get; set; }
        /// <summary>
        /// è¯ä¹¦ç¼–号-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Certification_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å†—余字段1 - é¢„留扩展用途
        /// </summary>
        public string RedundantField1 { get; set; }
        /// <summary>
        /// å†—余字段1 - é¢„留扩展用途-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum RedundantField1_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å†—余字段2 - é¢„留扩展用途
        /// </summary>
        public string RedundantField2 { get; set; }
        /// <summary>
        /// å†—余字段2 - é¢„留扩展用途-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum RedundantField2_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// å†—余字段3 - é¢„留扩展用途
        /// </summary>
        public string RedundantField3 { get; set; }
        /// <summary>
        /// å†—余字段3 - é¢„留扩展用途-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum RedundantField3_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æŽ’序
        /// </summary>
        public int?  Sort { get; set; }
        /// <summary>
        /// æŽ’序-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Sort_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string Remark { get; set; }
        /// <summary>
        /// å¤‡æ³¨-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum Remark_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool?  IsDisabled { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨-查询关系运算符
        /// </summary>
        public SearchFilterModeEnum IsDisabled_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        ///
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> CreationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string CreatorId { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum CreatorId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        ///
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> LastModificationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string LastModifierId { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum LastModifierId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        ///
        /// </summary>
        public bool?  IsDeleted { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum IsDeleted_FilterMode { get; set; }= SearchFilterModeEnum.精准查询;
        /// <summary>
        ///
        /// </summary>
        public string DeleterId { get; set; }
        /// <summary>
        /// -查询关系运算符
        /// </summary>
        public SearchFilterModeEnum DeleterId_FilterMode { get; set; }= SearchFilterModeEnum.模糊查询;
        /// <summary>
        ///
        /// </summary>
        //表示是 é«˜çº§æŸ¥è¯¢èŒƒå›´æŸ¥è¯¢ç‰¹æ€§
        [HighSearchRangeAttribute]
        public List<string> DeletionTime { get; set; }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialCreateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial;
/// <summary>
/// ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨åˆ›å»ºå‚数对象
/// </summary>
public class WmsMaterialCreateDto : WmsMaterialCreateOrUpdateDtoBase
{
    /// <summary>
    /// æŽ’序
    /// </summary>
    public virtual int? Sort { get; set; }
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨
    /// </summary>
    public bool? IsDisabled { get; set; } = false;
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialCreateOrUpdateDtoBase.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,124 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial;
/// <summary>
/// ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨åˆ›å»ºæˆ–更新基类
/// </summary>
public abstract class WmsMaterialCreateOrUpdateDtoBase : ExtensibleEntityDto
{
            /// <summary>
        /// ç‰©æ–™ç¼–码(唯一标识)
        /// </summary>
        public string MaterialCode { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        public string MaterialName { get; set; }
        /// <summary>
        /// é‡‡è´­ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// </summary>
        public PurchaseTypeEnum PurchaseType { get; set; }
        /// <summary>
        /// ç‰©æ–™ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// </summary>
        public MaterialTypeEnum MaterialType { get; set; }
        /// <summary>
        /// ä¸»å•位(如:kg、m、个)
        /// </summary>
        public string? PrimaryUnit { get; set; }
        /// <summary>
        /// è§„æ ¼/标准(如:GB/T 8163-2018)
        /// </summary>
        public string? Standard { get; set; }
        /// <summary>
        /// å¤–径(单位:mm)
        /// </summary>
        public decimal OuterDiameter { get; set; }
        /// <summary>
        /// å£åŽšï¼ˆå•ä½ï¼šmm)
        /// </summary>
        public decimal WallThickness { get; set; }
        /// <summary>
        /// æè´¨ï¼ˆå¦‚:304不锈钢)
        /// </summary>
        public string? MaterialQuality { get; set; }
        /// <summary>
        /// é•¿åº¦ï¼ˆå•位:m)
        /// </summary>
        public decimal Length { get; set; }
        /// <summary>
        /// æ˜¯å¦ä¸ºä¸»æ”¯ç®¡
        /// </summary>
        public YesNoEnum IsMainBranch { get; set; }
        /// <summary>
        /// ç”Ÿäº§å·¥åŽ‚
        /// </summary>
        public string? Factory { get; set; }
        /// <summary>
        /// è¯ä¹¦ç¼–号
        /// </summary>
        public string? Certification { get; set; }
        /// <summary>
        /// å†—余字段1 - é¢„留扩展用途
        /// </summary>
        public string? RedundantField1 { get; set; }
        /// <summary>
        /// å†—余字段2 - é¢„留扩展用途
        /// </summary>
        public string? RedundantField2 { get; set; }
        /// <summary>
        /// å†—余字段3 - é¢„留扩展用途
        /// </summary>
        public string? RedundantField3 { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        public int Sort { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string? Remark { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool? IsDisabled { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? CreatorId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? LastModifierId { get; set; }
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsMaterialCreateOrUpdateDtoBase"/> class.
    /// </summary>
    public WmsMaterialCreateOrUpdateDtoBase() : base(false)
    {
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,200 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial;
/// <summary>
/// ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨æ•°æ®å‚数对象
/// </summary>
public  class WmsMaterialDto:  ExtensibleEntityDto<Guid>, IHasConcurrencyStamp
{
            /// <summary>
        /// ç‰©æ–™ç¼–码(唯一标识)
        /// </summary>
        public string MaterialCode { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        public string MaterialName { get; set; }
        /// <summary>
        /// é‡‡è´­ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// </summary>
        public PurchaseTypeEnum PurchaseType { get; set; }
        /// <summary>
        /// é‡‡è´­ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// </summary>
        public string PurchaseTypeDesc
        {
            get
            {
                return GetEnumDescriptionUtil.GetEnumDescription(PurchaseType);
            }
        }
        /// <summary>
        /// ç‰©æ–™ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// </summary>
        public MaterialTypeEnum MaterialType { get; set; }
        /// <summary>
        /// ç‰©æ–™ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// </summary>
        public string MaterialTypeDesc
        {
            get
            {
                return GetEnumDescriptionUtil.GetEnumDescription(MaterialType);
            }
        }
        /// <summary>
        /// ä¸»å•位(如:kg、m、个)
        /// </summary>
        public string? PrimaryUnit { get; set; }
        /// <summary>
        /// è§„æ ¼/标准(如:GB/T 8163-2018)
        /// </summary>
        public string? Standard { get; set; }
        /// <summary>
        /// å¤–径(单位:mm)
        /// </summary>
        public decimal OuterDiameter { get; set; }
        /// <summary>
        /// å£åŽšï¼ˆå•ä½ï¼šmm)
        /// </summary>
        public decimal WallThickness { get; set; }
        /// <summary>
        /// æè´¨ï¼ˆå¦‚:304不锈钢)
        /// </summary>
        public string? MaterialQuality { get; set; }
        /// <summary>
        /// é•¿åº¦ï¼ˆå•位:m)
        /// </summary>
        public decimal Length { get; set; }
        /// <summary>
        /// æ˜¯å¦ä¸ºä¸»æ”¯ç®¡
        /// </summary>
        public YesNoEnum IsMainBranch { get; set; }
        /// <summary>
        /// æ˜¯å¦ä¸ºä¸»æ”¯ç®¡
        /// </summary>
        public string IsMainBranchDesc
        {
            get
            {
                return GetEnumDescriptionUtil.GetEnumDescription(IsMainBranch);
            }
        }
        /// <summary>
        /// ç”Ÿäº§å·¥åŽ‚
        /// </summary>
        public string? Factory { get; set; }
        /// <summary>
        /// è¯ä¹¦ç¼–号
        /// </summary>
        public string? Certification { get; set; }
        /// <summary>
        /// å†—余字段1 - é¢„留扩展用途
        /// </summary>
        public string? RedundantField1 { get; set; }
        /// <summary>
        /// å†—余字段2 - é¢„留扩展用途
        /// </summary>
        public string? RedundantField2 { get; set; }
        /// <summary>
        /// å†—余字段3 - é¢„留扩展用途
        /// </summary>
        public string? RedundantField3 { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        public int Sort { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string? Remark { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public bool? IsDisabled { get; set; }
        /// <summary>
        ///
        /// </summary>
        public ExtraPropertyDictionary? ExtraProperties { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? ConcurrencyStamp { get; set; }
        /// <summary>
        ///
        /// </summary>
        public DateTime CreationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? CreatorId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public DateTime? LastModificationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? LastModifierId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public bool IsDeleted { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? DeleterId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public DateTime? DeletionTime { get; set; }
    /// <summary>
    /// Gets the export data.
    /// </summary>
    /// <returns></returns>
    public Dictionary<string, object> GetExportData()
    {
        var exportData = new Dictionary<string, object>();
        foreach (var property in this.GetType().GetProperties())
        {
            exportData.Add(property.Name, property.GetValue(this));
        }
        return exportData;
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialExportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,138 @@
using MiniExcelLibs.Attributes;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial;
/// <summary>
/// ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨å¯¼å‡ºæ¨¡åž‹
/// </summary>
public  class WmsMaterialExportModel
{
            /// <summary>
        /// ç‰©æ–™ç¼–码(唯一标识)
        /// </summary>
        [ExcelColumn(Name = "物料编码(唯一标识)", Width = 25)]
        public string MaterialCode { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        [ExcelColumn(Name = "物料名称", Width = 25)]
        public string MaterialName { get; set; }
        /// <summary>
        /// é‡‡è´­ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// </summary>
        [ExcelColumn(Name = "采购类型(枚举值)", Width = 25)]
        public PurchaseTypeEnum PurchaseType { get; set; }
        /// <summary>
        /// ç‰©æ–™ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// </summary>
        [ExcelColumn(Name = "物料类型(枚举值)", Width = 25)]
        public MaterialTypeEnum MaterialType { get; set; }
        /// <summary>
        /// ä¸»å•位(如:kg、m、个)
        /// </summary>
        [ExcelColumn(Name = "主单位(如:kg、m、个)", Width = 25)]
        public string PrimaryUnit { get; set; }
        /// <summary>
        /// è§„æ ¼/标准(如:GB/T 8163-2018)
        /// </summary>
        [ExcelColumn(Name = "规格/标准(如:GB/T 8163-2018)", Width = 25)]
        public string Standard { get; set; }
        /// <summary>
        /// å¤–径(单位:mm)
        /// </summary>
        [ExcelColumn(Name = "外径(单位:mm)", Width = 25)]
        public decimal OuterDiameter { get; set; }
        /// <summary>
        /// å£åŽšï¼ˆå•ä½ï¼šmm)
        /// </summary>
        [ExcelColumn(Name = "壁厚(单位:mm)", Width = 25)]
        public decimal WallThickness { get; set; }
        /// <summary>
        /// æè´¨ï¼ˆå¦‚:304不锈钢)
        /// </summary>
        [ExcelColumn(Name = "材质(如:304不锈钢)", Width = 25)]
        public string MaterialQuality { get; set; }
        /// <summary>
        /// é•¿åº¦ï¼ˆå•位:m)
        /// </summary>
        [ExcelColumn(Name = "长度(单位:m)", Width = 25)]
        public decimal Length { get; set; }
        /// <summary>
        /// æ˜¯å¦ä¸ºä¸»æ”¯ç®¡
        /// </summary>
        [ExcelColumn(Name = "是否为主支管", Width = 25)]
        public YesNoEnum IsMainBranch { get; set; }
        /// <summary>
        /// ç”Ÿäº§å·¥åŽ‚
        /// </summary>
        [ExcelColumn(Name = "生产工厂", Width = 25)]
        public string Factory { get; set; }
        /// <summary>
        /// è¯ä¹¦ç¼–号
        /// </summary>
        [ExcelColumn(Name = "证书编号", Width = 25)]
        public string Certification { get; set; }
        /// <summary>
        /// å†—余字段1 - é¢„留扩展用途
        /// </summary>
        [ExcelColumn(Name = "冗余字段1 - é¢„留扩展用途", Width = 25)]
        public string RedundantField1 { get; set; }
        /// <summary>
        /// å†—余字段2 - é¢„留扩展用途
        /// </summary>
        [ExcelColumn(Name = "冗余字段2 - é¢„留扩展用途", Width = 25)]
        public string RedundantField2 { get; set; }
        /// <summary>
        /// å†—余字段3 - é¢„留扩展用途
        /// </summary>
        [ExcelColumn(Name = "冗余字段3 - é¢„留扩展用途", Width = 25)]
        public string RedundantField3 { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        [ExcelColumn(Name = "排序", Width = 25)]
        public int Sort { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        [ExcelColumn(Name = "备注", Width = 25)]
        public string Remark { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        [ExcelColumn(Name = "是否禁用", Width = 25)]
        public bool? IsDisabled { 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;
        }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialUpdateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial;
/// <summary>
/// ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨æ›´æ–°å‚数对象
/// </summary>
public class WmsMaterialUpdateDto : WmsMaterialCreateOrUpdateDtoBase, IHasConcurrencyStamp
{
   /// <summary>
    /// å¹¶å‘戳
    /// </summary>
    public string ConcurrencyStamp { get; set; }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterial/WmsMaterialsImportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial
{
    /// <summary>
    /// ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨å¯¼å…¥æ¨¡åž‹
    /// </summary>
    public class WmsMaterialsImportModel
    {
        private List<WmsMaterialImportModel> _WmsMaterials = new();
        public List<WmsMaterialImportModel> WmsMaterials
        {
            get => _WmsMaterials;
            set
            {
                _WmsMaterials = value;
                var rowIndex = 2;
                _WmsMaterials?.ForEach(x => x.RowIndex = rowIndex++);
            }
        }
        /// <summary>
        /// ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨å¯¼å…¥æ¨¡åž‹
        /// </summary>
        public class WmsMaterialImportModel : WmsMaterialExportModel
        {
            /// <summary>
            /// è¡Œå·
            /// </summary>
            public int RowIndex { get; set; }
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/GetWmsPlacesInput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlaces;
/// <summary>
/// WmsPlace查询参数对象
/// </summary>
public class GetWmsPlacesInput : ExtensiblePagedAndSortedResultRequestDto
{
    /// <summary>
    /// Gets or sets the filter.
    /// </summary>
    public string Filter { get; set; }
    /// <summary>
    /// Gets or sets the name.
    /// </summary>
    public string Name { get; set; }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/WmsPlaceCreateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlaces;
/// <summary>
/// WmsPlace创建参数对象
/// </summary>
public class WmsPlaceCreateDto : WmsPlaceCreateOrUpdateDtoBase
{
    /// <summary>
    /// æŽ’序
    /// </summary>
    public virtual int? Sort { get; set; }
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨
    /// </summary>
    public bool? IsDisabled { get; set; } = false;
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/WmsPlaceCreateOrUpdateDtoBase.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,87 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlaces;
/// <summary>
/// WmsPlace创建或更新基类
/// </summary>
public abstract class WmsPlaceCreateOrUpdateDtoBase : ExtensibleEntityDto
{
    /// <summary>
    /// ç¼–号
    /// </summary>
    public virtual string PlaceNo { get;  set; }
    /// <summary>
    /// è´§ä½ç±»åž‹
    /// </summary>
    public PlaceTypeEnum StorageTypeNo { get;  set; }
    /// <summary>
    /// è´§ä½çŠ¶æ€
    /// </summary>
    public PlaceStatusEnum PlaceStatus { get;  set; }
    /// <summary>
    /// æ‰€åœ¨åº“区
    /// </summary>
    public string AreaCode { get;  set; }
    /// <summary>
    /// å··é“
    /// </summary>
    public int Aisle { get;  set; }
    /// <summary>
    /// æŽ’
    /// </summary>
    public int RowNo { get;  set; }
    /// <summary>
    /// åˆ—
    /// </summary>
    public int ColumnNo { get;  set; }
    /// <summary>
    /// å±‚
    /// </summary>
    public int LayerNo { get;  set; }
    /// <summary>
    /// æ˜¯å¦é”å®š
    /// </summary>
    public YesNoEnum Islock { get;  set; }
    /// <summary>
    /// æ˜¯å¦ç©ºæ‰˜
    /// </summary>
    public YesNoEnum EmptyContainer { get;  set; }
    /// <summary>
    /// å†—余字段1 - é¢„留扩展用途
    /// </summary>
    public string RedundantField1 { get; set; }
    /// <summary>
    /// å†—余字段2 - é¢„留扩展用途
    /// </summary>
    public string RedundantField2 { get; set; }
    /// <summary>
    /// å†—余字段3 - é¢„留扩展用途
    /// </summary>
    public string RedundantField3 { get; set; }
    /// <summary>
    /// å¤‡æ³¨
    /// </summary>
    public virtual string Remark { get; set; }
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsPlaceCreateOrUpdateDtoBase"/> class.
    /// </summary>
    public WmsPlaceCreateOrUpdateDtoBase() : base(false)
    {
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/WmsPlaceDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,155 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlaces;
/// <summary>
/// WmsPlace数据参数对象
/// </summary>
public class WmsPlaceDto : ExtensibleEntityDto<Guid>, IHasConcurrencyStamp
{
    /// <summary>
    /// ç¼–号
    /// </summary>
    public virtual string PlaceNo { get; protected set; }
    /// <summary>
    /// è´§ä½ç±»åž‹
    /// </summary>
    public PlaceTypeEnum StorageTypeNo { get; protected set; }
    /// <summary>
    /// è´§ä½ç±»åž‹
    /// </summary>
    public string StorageTypeNoDesc
    {
        get
        {
            return GetEnumDescriptionUtil.GetEnumDescription(StorageTypeNo);
        }
    }
    /// <summary>
    /// è´§ä½çŠ¶æ€
    /// </summary>
    public PlaceStatusEnum PlaceStatus { get; protected set; }
    /// <summary>
    /// è´§ä½çŠ¶æ€
    /// </summary>
    public string PlaceStatusDesc
    {
        get
        {
            return GetEnumDescriptionUtil.GetEnumDescription(PlaceStatus);
        }
    }
    /// <summary>
    /// æ‰€åœ¨åº“区
    /// </summary>
    public string AreaCode { get; protected set; }
    /// <summary>
    /// å··é“
    /// </summary>
    public int Aisle { get; protected set; }
    /// <summary>
    /// æŽ’
    /// </summary>
    public int RowNo { get; protected set; }
    /// <summary>
    /// åˆ—
    /// </summary>
    public int ColumnNo { get; protected set; }
    /// <summary>
    /// å±‚
    /// </summary>
    public int LayerNo { get; protected set; }
    /// <summary>
    /// æ˜¯å¦é”å®š
    /// </summary>
    public YesNoEnum Islock { get; protected set; }
    /// <summary>
    /// æ˜¯å¦é”å®š
    /// </summary>
    public string IslockDesc
    {
        get
        {
            return GetEnumDescriptionUtil.GetEnumDescription(Islock);
        }
    }
    /// <summary>
    /// æ˜¯å¦ç©ºæ‰˜
    /// </summary>
    public YesNoEnum EmptyContainer { get; protected set; }
    /// <summary>
    /// æ˜¯å¦ç©ºæ‰˜
    /// </summary>
    public string EmptyContainerDesc
    {
        get
        {
            return GetEnumDescriptionUtil.GetEnumDescription(EmptyContainer);
        }
    }
    /// <summary>
    /// å†—余字段1 - é¢„留扩展用途
    /// </summary>
    public string RedundantField1 { get; set; }
    /// <summary>
    /// å†—余字段2 - é¢„留扩展用途
    /// </summary>
    public string RedundantField2 { get; set; }
    /// <summary>
    /// å†—余字段3 - é¢„留扩展用途
    /// </summary>
    public string RedundantField3 { get; set; }
    /// <summary>
    /// æŽ’序
    /// </summary>
    public virtual int Sort { get; set; }
    /// <summary>
    /// å¤‡æ³¨
    /// </summary>
    public virtual string Remark { get; set; }
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨
    /// </summary>
    public virtual bool? IsDisabled { get; set; }
    /// <summary>
    /// å¹¶å‘戳
    /// </summary>
    public string ConcurrencyStamp { get; set; }
    /// <summary>
    /// Gets the export data.
    /// </summary>
    /// <returns></returns>
    public Dictionary<string, object> GetExportData()
    {
        var exportData = new Dictionary<string, object>();
        foreach (var property in this.GetType().GetProperties())
        {
            exportData.Add(property.Name, property.GetValue(this));
        }
        return exportData;
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/WmsPlaceUpdateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlaces;
/// <summary>
/// WmsPlace更新参数对象
/// </summary>
public class WmsPlaceUpdateDto : WmsPlaceCreateOrUpdateDtoBase, IHasConcurrencyStamp
{
    /// <summary>
    /// å¹¶å‘戳
    /// </summary>
    public string ConcurrencyStamp { get; set; }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/WmsPlacesExportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,111 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using MiniExcelLibs.Attributes;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlaces
{
    /// <summary>
    /// WmsPlaces导出模型
    /// </summary>
    public class WmsPlacesExportModel
    {
        /// <summary>
        /// WmsPlace导出模型
        /// </summary>
        public class WorkSectionExportModel
        {
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®è´§ä½ç¼–å·
            /// </summary>
            /// <example>PL-001-01-01</example>
            [ExcelColumn(Name = "货位编号", Width = 20)]
            public string PlaceNo { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®è´§ä½ç±»åž‹
            /// </summary>
            /// <example>Normal</example>
            [ExcelColumn(Name = "货位类型", Width = 15)]
            public PlaceTypeEnum StorageTypeNo { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®è´§ä½çŠ¶æ€
            /// </summary>
            /// <example>Available</example>
            [ExcelColumn(Name = "货位状态", Width = 15)]
            public PlaceStatusEnum PlaceStatus { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®æ‰€åœ¨åº“åŒºç¼–å·
            /// </summary>
            /// <example>AREA-001</example>
            [ExcelColumn(Name = "所属库区", Width = 20)]
            public string AreaCode { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®å··é“ç¼–å·
            /// </summary>
            /// <example>1</example>
            [ExcelColumn(Name = "巷道", Width = 10)]
            public int Aisle { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®æŽ’å·
            /// </summary>
            /// <example>2</example>
            [ExcelColumn(Name = "排", Width = 10)]
            public int RowNo { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®åˆ—å·
            /// </summary>
            /// <example>3</example>
            [ExcelColumn(Name = "列", Width = 10)]
            public int ColumnNo { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®å±‚å·
            /// </summary>
            /// <example>1</example>
            [ExcelColumn(Name = "层", Width = 10)]
            public int LayerNo { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®é”å®šçŠ¶æ€
            /// </summary>
            /// <example>No</example>
            [ExcelColumn(Name = "是否锁定", Width = 12)]
            public YesNoEnum Islock { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®ç©ºæ‰˜çŠ¶æ€
            /// </summary>
            /// <example>Yes</example>
            [ExcelColumn(Name = "是否空托", Width = 12)]
            public YesNoEnum EmptyContainer { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®é¢„ç•™æ‰©å±•å­—æ®µ1
            /// </summary>
            [ExcelColumn(Name = "扩展字段1", Width = 20)]
            public string RedundantField1 { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®é¢„ç•™æ‰©å±•å­—æ®µ2
            /// </summary>
            [ExcelColumn(Name = "扩展字段2", Width = 20)]
            public string RedundantField2 { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®é¢„ç•™æ‰©å±•å­—æ®µ3
            /// </summary>
            [ExcelColumn(Name = "扩展字段3", Width = 20)]
            public string RedundantField3 { get; set; }
            /// <summary>
            /// å¤‡æ³¨
            /// </summary>
            [ExcelColumn(Name = "备注", Width = 25)]
            public virtual string Remark { get; set; }
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/WmsPlacesImportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
using static CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlaces.WmsPlacesExportModel;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlaces
{
    /// <summary>
    /// WmsPlaces导入模型
    /// </summary>
    public class WmsPlacesImportModel
    {
        private List<WmsPlaceImportModel> _wmsplaces = new();
        public List<WmsPlaceImportModel> WmsPlaces
        {
            get => _wmsplaces;
            set
            {
                _wmsplaces = value;
                var rowIndex = 2;
                _wmsplaces?.ForEach(x => x.RowIndex = rowIndex++);
            }
        }
        /// <summary>
        /// WmsPlace导入模型
        /// </summary>
        public class WmsPlaceImportModel : WorkSectionExportModel
        {
            /// <summary>
            /// è¡Œå·
            /// </summary>
            public int RowIndex { get; set; }
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsStores/GetWmsStoresInput.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsStores;
/// <summary>
/// WmsStore查询参数对象
/// </summary>
public class GetWmsStoresInput : ExtensiblePagedAndSortedResultRequestDto
{
    /// <summary>
    /// Gets or sets the filter.
    /// </summary>
    public string Filter { get; set; }
    /// <summary>
    /// Gets or sets the name.
    /// </summary>
    public string Name { get; set; }
    /// <summary>
    /// ä»“库代码
    /// </summary>
    public string? StoreCode { get; set; }
    /// <summary>
    /// ä»“库名称
    /// </summary>
    public string? StoreName { get; set; }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsStores/WmsStoreCreateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsStores;
/// <summary>
/// WmsStore创建参数对象
/// </summary>
public class WmsStoreCreateDto : WmsStoreCreateOrUpdateDtoBase
{
    /// <summary>
    /// æŽ’序
    /// </summary>
    public virtual int? Sort { get; set; }
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨
    /// </summary>
    public bool? IsDisabled { get; set; } = false;
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsStores/WmsStoreCreateOrUpdateDtoBase.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
using Volo.Abp.Application.Dtos;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsStores;
/// <summary>
/// WmsStore创建或更新基类
/// </summary>
public abstract class WmsStoreCreateOrUpdateDtoBase : ExtensibleEntityDto
{
    /// <summary>
    /// ä»“库代码
    /// </summary>
    public string? StoreCode { get; set; }
    /// <summary>
    /// ä»“库名称
    /// </summary>
    public string? StoreName { get; set; }
    /// <summary>
    /// å†—余字段1 - é¢„留扩展用途
    /// </summary>
    public string RedundantField1 { get; set; }
    /// <summary>
    /// å†—余字段2 - é¢„留扩展用途
    /// </summary>
    public string RedundantField2 { get; set; }
    /// <summary>
    /// å†—余字段3 - é¢„留扩展用途
    /// </summary>
    public string RedundantField3 { get; set; }
    /// <summary>
    /// å¤‡æ³¨
    /// </summary>
    public virtual string Remark { get; set; }
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsStoreCreateOrUpdateDtoBase"/> class.
    /// </summary>
    public WmsStoreCreateOrUpdateDtoBase() : base(false)
    {
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsStores/WmsStoreDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,87 @@
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsStores;
/// <summary>
/// WmsStore数据参数对象
/// </summary>
public class WmsStoreDto : ExtensibleEntityDto<Guid>, IHasConcurrencyStamp
{
    /// <summary>
    /// ä»“库代码
    /// </summary>
    public string? StoreCode { get; set; }
    /// <summary>
    /// ä»“库名称
    /// </summary>
    public string? StoreName { get; set; }
    /// <summary>
    /// å†—余字段1 - é¢„留扩展用途
    /// </summary>
    public string RedundantField1 { get; set; }
    /// <summary>
    /// å†—余字段2 - é¢„留扩展用途
    /// </summary>
    public string RedundantField2 { get; set; }
    /// <summary>
    /// å†—余字段3 - é¢„留扩展用途
    /// </summary>
    public string RedundantField3 { get; set; }
    /// <summary>
    /// æŽ’序
    /// </summary>
    public virtual int Sort { get; set; }
    /// <summary>
    /// å¤‡æ³¨
    /// </summary>
    public virtual string Remark { get; set; }
    /// <summary>
    /// æ˜¯å¦ç¦ç”¨
    /// </summary>
    public virtual bool? IsDisabled { get; set; }
    /// <summary>
    /// å¹¶å‘戳
    /// </summary>
    public string ConcurrencyStamp { get; set; }
    /// <summary>
    /// Gets the export data.
    /// </summary>
    /// <returns></returns>
    public Dictionary<string, object> GetExportData()
    {
        var exportData = new Dictionary<string, object>();
        foreach (var property in this.GetType().GetProperties())
        {
            exportData.Add(property.Name, property.GetValue(this));
        }
        return exportData;
    }
}
/// <summary>
/// åšä»“库选择使用
/// </summary>
public class WmsStoreForAreaOutpur
{
    /// <summary>
    /// ä»“库代码
    /// </summary>
    public string? StoreCode { get; set; }
    /// <summary>
    /// ä»“库名称
    /// </summary>
    public string? StoreName { get; set; }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsStores/WmsStoreUpdateDto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsStores;
/// <summary>
/// WmsStore更新参数对象
/// </summary>
public class WmsStoreUpdateDto : WmsStoreCreateOrUpdateDtoBase, IHasConcurrencyStamp
{
    /// <summary>
    /// å¹¶å‘戳
    /// </summary>
    public string ConcurrencyStamp { get; set; }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsStores/WmsStoresExportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
using MiniExcelLibs.Attributes;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsStores
{
    /// <summary>
    /// WmsStores导出模型
    /// </summary>
    public class WmsStoresExportModel
    {
        /// <summary>
        /// WmsStore导出模型
        /// </summary>
        public class WorkSectionExportModel
        {
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®ä»“åº“ä»£ç 
            /// </summary>
            /// <example>WH-001</example>
            [ExcelColumn(Name = "仓库代码", Width = 20)]
            public string StoreCode { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®ä»“åº“åç§°
            /// </summary>
            /// <example>上海中心仓</example>
            [ExcelColumn(Name = "仓库名称", Width = 25)]
            public string StoreName { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®é¢„ç•™æ‰©å±•å­—æ®µ1
            /// </summary>
            [ExcelColumn(Name = "扩展字段1", Width = 20)]
            public string RedundantField1 { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®é¢„ç•™æ‰©å±•å­—æ®µ2
            /// </summary>
            [ExcelColumn(Name = "扩展字段2", Width = 20)]
            public string RedundantField2 { get; set; }
            /// <summary>
            /// èŽ·å–æˆ–è®¾ç½®é¢„ç•™æ‰©å±•å­—æ®µ3
            /// </summary>
            [ExcelColumn(Name = "扩展字段3", Width = 20)]
            public string RedundantField3 { get; set; }
            /// <summary>
            /// å¤‡æ³¨
            /// </summary>
            [ExcelColumn(Name = "备注", Width = 25)]
            public virtual string Remark { get; set; }
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsStores/WmsStoresImportModel.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
using static CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsStores.WmsStoresExportModel;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsStores
{
    /// <summary>
    /// WmsStores导入模型
    /// </summary>
    public class WmsStoresImportModel
    {
        private List<WmsStoreImportModel> _wmsstores = new();
        public List<WmsStoreImportModel> WmsStores
        {
            get => _wmsstores;
            set
            {
                _wmsstores = value;
                var rowIndex = 2;
                _wmsstores?.ForEach(x => x.RowIndex = rowIndex++);
            }
        }
        /// <summary>
        /// WmsStore导入模型
        /// </summary>
        public class WmsStoreImportModel : WorkSectionExportModel
        {
            /// <summary>
            /// è¡Œå·
            /// </summary>
            public int RowIndex { get; set; }
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/FodyWeavers.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
   <ConfigureAwait ContinueOnCapturedContext="false" />
</Weavers>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/ICMSPluginQueryAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
using Volo.Abp.Application.Services;
namespace CMS.Plugin.HIAWms.Application.Contracts;
/// <summary>
/// æŸ¥è¯¢åº”用服务
/// </summary>
public interface ICMSPluginQueryAppService : IApplicationService
{
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsAreaAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsAreas;
using Volo.Abp.Application.Services;
namespace CMS.Plugin.HIAWms.Application.Contracts.Services;
/// <summary>
/// WmsArea应用服务
/// </summary>
public interface IWmsAreaAppService : ICrudAppService<WmsAreaDto, Guid, GetWmsAreasInput, WmsAreaCreateDto, WmsAreaUpdateDto>
{
    /// <summary>
    /// Clones the asynchronous.
    /// </summary>
    /// <param name="ids">The ids.</param>
    /// <returns></returns>
    Task<List<WmsAreaDto>> CloneAsync(IEnumerable<Guid> ids);
    /// <summary>
    /// Deletes the many asynchronous.
    /// </summary>
    /// <param name="ids">The ids.</param>
    /// <returns></returns>
    Task DeleteManyAsync(IEnumerable<Guid> ids);
    /// <summary>
    /// Adjusts the sort asynchronous.
    /// </summary>
    /// <param name="id">The identifier.</param>
    /// <param name="sort">The sort.</param>
    /// <returns></returns>
    Task AdjustSortAsync(Guid id, int sort);
    /// <summary>
    /// Imports the asynchronous.
    /// </summary>
    /// <param name="input">The input.</param>
    /// <returns></returns>
    Task ImportAsync(WmsAreasImportModel input);
    /// <summary>
    /// Exports the asynchronous.
    /// </summary>
    /// <param name="input">The input.</param>
    /// <returns></returns>
    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsAreasInput input);
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsContainerAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainers;
using Volo.Abp.Application.Services;
namespace CMS.Plugin.HIAWms.Application.Contracts.Services;
/// <summary>
/// WmsContainer应用服务
/// </summary>
public interface IWmsContainerAppService : ICrudAppService<WmsContainerDto, Guid, GetWmsContainersInput, WmsContainerCreateDto, WmsContainerUpdateDto>
{
    /// <summary>
    /// Clones the asynchronous.
    /// </summary>
    /// <param name="ids">The ids.</param>
    /// <returns></returns>
    Task<List<WmsContainerDto>> CloneAsync(IEnumerable<Guid> ids);
    /// <summary>
    /// Deletes the many asynchronous.
    /// </summary>
    /// <param name="ids">The ids.</param>
    /// <returns></returns>
    Task DeleteManyAsync(IEnumerable<Guid> ids);
    /// <summary>
    /// Adjusts the sort asynchronous.
    /// </summary>
    /// <param name="id">The identifier.</param>
    /// <param name="sort">The sort.</param>
    /// <returns></returns>
    Task AdjustSortAsync(Guid id, int sort);
    /// <summary>
    /// Imports the asynchronous.
    /// </summary>
    /// <param name="input">The input.</param>
    /// <returns></returns>
    Task ImportAsync(WmsContainersImportModel input);
    /// <summary>
    /// Exports the asynchronous.
    /// </summary>
    /// <param name="input">The input.</param>
    /// <returns></returns>
    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsContainersInput input);
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsEnumAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsEnumDto;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsStores;
using CMS.Plugin.HIAWms.Domain.Shared.Util;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsAreas.WmsAreaCreateOrUpdateDtoBase;
namespace CMS.Plugin.HIAWms.Application.Contracts.Services
{
    /// <summary>
    /// æžšä¸¾æŽ¥å£
    /// </summary>
    public interface IWmsEnumAppService
    {
        /// <summary>
        /// èŽ·å–æžšä¸¾.
        /// </summary>
        /// <returns></returns>
        List<EnumItem> GetEnumDataList(WmsEnumInput enumInput);
        /// <summary>
        /// èŽ·å–ä»“åº“åˆ—è¡¨
        /// </summary>
        /// <returns></returns>
        Task<List<WmsStoreForAreaOutpur>> GetStreList();
        /// <summary>
        /// åº“区列表
        /// </summary>
        /// <returns></returns>
        Task<List<AreaForListOuptut>> GetAreaListAsync();
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsInOutStockRecordAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockRecord;
using Volo.Abp.Application.Services;
namespace CMS.Plugin.HIAWms.Application.Contracts.Services;
/// <summary>
/// å‡ºå…¥åº“记录表应用服务接口
/// </summary>
public interface IWmsInOutStockRecordAppService : ICrudAppService<WmsInOutStockRecordDto, Guid, GetWmsInOutStockRecordInput, WmsInOutStockRecordCreateDto, WmsInOutStockRecordUpdateDto>
{
    /// <summary>
    /// å…‹éš†å‡ºå…¥åº“记录表
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    Task<List<WmsInOutStockRecordDto>> 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(WmsInOutStockRecordsImportModel input);
    /// <summary>
    /// å¯¼å‡ºå‡ºå…¥åº“记录表
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsInOutStockRecordInput input);
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsMaterialAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial;
using Volo.Abp.Application.Services;
namespace CMS.Plugin.HIAWms.Application.Contracts.Services;
/// <summary>
/// ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨åº”用服务接口
/// </summary>
public interface IWmsMaterialAppService : ICrudAppService<WmsMaterialDto, Guid, GetWmsMaterialInput, WmsMaterialCreateDto, WmsMaterialUpdateDto>
{
    /// <summary>
    /// å…‹éš†ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    Task<List<WmsMaterialDto>> 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(WmsMaterialsImportModel input);
    /// <summary>
    /// å¯¼å‡ºç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsMaterialInput input);
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsPlaceAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlaces;
using Volo.Abp.Application.Services;
namespace CMS.Plugin.HIAWms.Application.Contracts.Services;
/// <summary>
/// WmsPlace应用服务
/// </summary>
public interface IWmsPlaceAppService : ICrudAppService<WmsPlaceDto, Guid, GetWmsPlacesInput, WmsPlaceCreateDto, WmsPlaceUpdateDto>
{
    /// <summary>
    /// Clones the asynchronous.
    /// </summary>
    /// <param name="ids">The ids.</param>
    /// <returns></returns>
    Task<List<WmsPlaceDto>> CloneAsync(IEnumerable<Guid> ids);
    /// <summary>
    /// Deletes the many asynchronous.
    /// </summary>
    /// <param name="ids">The ids.</param>
    /// <returns></returns>
    Task DeleteManyAsync(IEnumerable<Guid> ids);
    /// <summary>
    /// Adjusts the sort asynchronous.
    /// </summary>
    /// <param name="id">The identifier.</param>
    /// <param name="sort">The sort.</param>
    /// <returns></returns>
    Task AdjustSortAsync(Guid id, int sort);
    /// <summary>
    /// Imports the asynchronous.
    /// </summary>
    /// <param name="input">The input.</param>
    /// <returns></returns>
    Task ImportAsync(WmsPlacesImportModel input);
    /// <summary>
    /// Exports the asynchronous.
    /// </summary>
    /// <param name="input">The input.</param>
    /// <returns></returns>
    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsPlacesInput input);
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsStoreAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsStores;
using Volo.Abp.Application.Services;
namespace CMS.Plugin.HIAWms.Application.Contracts.Services;
/// <summary>
/// WmsStore应用服务
/// </summary>
public interface IWmsStoreAppService : ICrudAppService<WmsStoreDto, Guid, GetWmsStoresInput, WmsStoreCreateDto, WmsStoreUpdateDto>
{
    /// <summary>
    /// Clones the asynchronous.
    /// </summary>
    /// <param name="ids">The ids.</param>
    /// <returns></returns>
    Task<List<WmsStoreDto>> CloneAsync(IEnumerable<Guid> ids);
    /// <summary>
    /// Deletes the many asynchronous.
    /// </summary>
    /// <param name="ids">The ids.</param>
    /// <returns></returns>
    Task DeleteManyAsync(IEnumerable<Guid> ids);
    /// <summary>
    /// Adjusts the sort asynchronous.
    /// </summary>
    /// <param name="id">The identifier.</param>
    /// <param name="sort">The sort.</param>
    /// <returns></returns>
    Task AdjustSortAsync(Guid id, int sort);
    /// <summary>
    /// Imports the asynchronous.
    /// </summary>
    /// <param name="input">The input.</param>
    /// <returns></returns>
    Task ImportAsync(WmsStoresImportModel input);
    /// <summary>
    /// Exports the asynchronous.
    /// </summary>
    /// <param name="input">The input.</param>
    /// <returns></returns>
    Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsStoresInput input);
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application/CMS.Plugin.HIAWms.Application.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
<Project Sdk="Microsoft.NET.Sdk">
    <Import Project="../../common.props" />
    <Import Project="../../configureawait.props" />
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Volo.Abp.Dapper" Version="$(ABPPackageVersion)" />
        <PackageReference Include="Volo.Abp.AutoMapper" Version="$(ABPPackageVersion)" />
        <PackageReference Include="Volo.Abp.Ddd.Application" Version="$(ABPPackageVersion)" />
    </ItemGroup>
    <ItemGroup>
        <ProjectReference Include="..\CMS.Plugin.HIAWms.Application.Contracts\CMS.Plugin.HIAWms.Application.Contracts.csproj" />
        <ProjectReference Include="..\CMS.Plugin.HIAWms.Domain\CMS.Plugin.HIAWms.Domain.csproj" />
    </ItemGroup>
    <ItemGroup>
      <Reference Include="CmsQueryExtensions">
        <HintPath>..\..\..\..\..\CommonDLL\CmsQueryExtensions.dll</HintPath>
      </Reference>
    </ItemGroup>
</Project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application/CMSPluginAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
using CMS.Plugin.HIAWms.Domain.Shared.Localization;
using Volo.Abp.Application.Services;
namespace CMS.Plugin.HIAWms.Application;
/// <summary>
/// Inherit your application services from this class.
/// </summary>
public abstract class CMSPluginAppService : ApplicationService
{
    /// <summary>
    /// Initializes a new instance of the <see cref="CMSPluginAppService"/> class.
    /// </summary>
    protected CMSPluginAppService()
    {
        ObjectMapperContext = typeof(CMSPluginApplicationModule);
        LocalizationResource = typeof(HIAWmsResource);
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application/CMSPluginApplicationModule.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
using CMS.Plugin.HIAWms.Application.Contracts;
using CMS.Plugin.HIAWms.Domain;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Application;
using Volo.Abp.AutoMapper;
using Volo.Abp.EventBus;
using Volo.Abp.Modularity;
namespace CMS.Plugin.HIAWms.Application;
/// <summary>
/// æ’件应用服务模块
/// </summary>
[DependsOn(
    typeof(CMSPluginDomainModule),
    typeof(CMSPluginApplicationContractsModule),
    typeof(AbpAutoMapperModule),
    typeof(AbpEventBusModule),
    typeof(AbpDddApplicationModule)
    )]
public class CMSPluginApplicationModule : AbpModule
{
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        context.Services.AddAutoMapperObjectMapper<CMSPluginApplicationModule>();
        Configure<AbpAutoMapperOptions>(options =>
        {
            options.AddMaps<CMSPluginApplicationModule>(validate: true);
        });
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application/CMSPluginQueryAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
using CMS.Plugin.HIAWms.Application.Contracts;
using CMS.Plugin.HIAWms.Domain.Data;
namespace CMS.Plugin.HIAWms.Application;
/// <inheritdoc />
public class CMSPluginQueryAppService : CMSPluginAppService, ICMSPluginQueryAppService
{
    private readonly ICMSPluginDapperRepository _dapperRepository;
    /// <summary>
    /// Initializes a new instance of the <see cref="CMSPluginQueryAppService"/> class.
    /// </summary>
    /// <param name="dapperRepository">The dapper repository.</param>
    public CMSPluginQueryAppService(ICMSPluginDapperRepository dapperRepository)
    {
        _dapperRepository = dapperRepository;
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application/FodyWeavers.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
   <ConfigureAwait ContinueOnCapturedContext="false" />
</Weavers>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application/Implements/WmsAreaAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,324 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsAreas;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.WmsAreas;
using CMS.Plugin.HIAWms.Domain.Shared;
using CMS.Plugin.HIAWms.Domain.Shared.WmsAreas;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
using CMS.Plugin.HIAWms.Domain.Shared.Util;
namespace CMS.Plugin.HIAWms.Application.Implements;
/// <inheritdoc />
public class WmsAreaAppService : CMSPluginAppService, IWmsAreaAppService
{
    private readonly IWmsAreaRepository _wmsareaRepository;
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsAreaAppService"/> class.
    /// </summary>
    /// <param name="wmsareaRepository">The task job repository.</param>
    public WmsAreaAppService(IWmsAreaRepository wmsareaRepository)
    {
        _wmsareaRepository = wmsareaRepository;
    }
    /// <inheritdoc />
    public virtual async Task<WmsAreaDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<WmsArea, WmsAreaDto>(await _wmsareaRepository.GetAsync(id));
    }
    /// <inheritdoc />
    public virtual async Task<PagedResultDto<WmsAreaDto>> GetListAsync(GetWmsAreasInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsArea.Sort);
        }
        var specification = new WmsAreaSpecification(input.Name);
        var area = ObjectMapper.Map<GetWmsAreasInput, WmsArea>(input);
        var count = await _wmsareaRepository.GetCountAsync(area,input.Filter, specification);
        var list = await _wmsareaRepository.GetListAsync(area,input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification);
        return new PagedResultDto<WmsAreaDto>(count, ObjectMapper.Map<List<WmsArea>, List<WmsAreaDto>>(list));
    }
    /// <inheritdoc />
    public virtual async Task<WmsAreaDto> CreateAsync(WmsAreaCreateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var exist = await _wmsareaRepository.NameExistAsync(input.AreaNo);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.AreaNo]);
        }
        var maxSort = await _wmsareaRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var wmsarea = ObjectMapper.Map<WmsAreaCreateDto, WmsArea>(input);
        wmsarea.Sort = sort;
        input.MapExtraPropertiesTo(wmsarea, MappingPropertyDefinitionChecks.None);
        await _wmsareaRepository.InsertAsync(wmsarea);
        if (input.Sort.HasValue && wmsarea.Sort != maxSort)
        {
            await AdjustSortAsync(wmsarea.Id, wmsarea.Sort);
        }
        return ObjectMapper.Map<WmsArea, WmsAreaDto>(wmsarea);
    }
    /// <inheritdoc />
    public virtual async Task<WmsAreaDto> UpdateAsync(Guid id, WmsAreaUpdateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var wmsarea = await _wmsareaRepository.GetAsync(id);
        var exist = await _wmsareaRepository.NameExistAsync(input.AreaNo, wmsarea.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.AreaNo]);
        }
        wmsarea.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
        input.MapExtraPropertiesTo(wmsarea, MappingPropertyDefinitionChecks.None);
        wmsarea.AreaName = input.AreaName;
        wmsarea.AreaDesc = input.AreaDesc;
        wmsarea.AreaStatus = input.AreaStatus;
        wmsarea.AreaType = input.AreaType;
        wmsarea.StoreCode = input.StoreCode;
        wmsarea.StoreName = input.StoreName;
        await _wmsareaRepository.UpdateAsync(wmsarea);
        return ObjectMapper.Map<WmsArea, WmsAreaDto>(wmsarea);
    }
    /// <inheritdoc />
    public async Task<List<WmsAreaDto>> CloneAsync(IEnumerable<Guid> ids)
    {
        var wmsareas = new List<WmsArea>();
        if (ids != null)
        {
            var sort = await _wmsareaRepository.GetMaxSortAsync();
            foreach (var id in ids)
            {
                var wmsarea = await _wmsareaRepository.FindAsync(id);
                if (wmsarea != null)
                {
                    var name = wmsarea.AreaNo + WmsAreaConsts.CloneTag;
                    var notExist = false;
                    while (!notExist)
                    {
                        var exist = await _wmsareaRepository.NameExistAsync(name);
                        if (exist || wmsareas.Any(x => x.AreaNo == name))
                        {
                            name += WmsAreaConsts.CloneTag;
                            continue;
                        }
                        notExist = true;
                    }
                    wmsareas.Add(wmsarea);
                }
            }
        }
        return ObjectMapper.Map<List<WmsArea>, List<WmsAreaDto>>(wmsareas);
    }
    /// <inheritdoc />
    public virtual Task DeleteAsync(Guid id)
    {
        return _wmsareaRepository.DeleteAsync(id);
    }
    /// <inheritdoc />
    public async Task DeleteManyAsync(IEnumerable<Guid> ids)
    {
        foreach (var id in ids)
        {
            await DeleteAsync(id);
        }
    }
    /// <inheritdoc />
    public virtual async Task AdjustSortAsync(Guid id, int sort)
    {
        var list = await _wmsareaRepository.GetListAsync(null,nameof(WmsArea.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 _wmsareaRepository.UpdateManyAsync(list);
    }
    /// <inheritdoc />
    public async Task ImportAsync(WmsAreasImportModel input)
    {
        Check.NotNull(input, nameof(input));
        var wmsareaCreateDtos = new List<(int RowIndex, WmsAreaCreateDto Item)>();
        var wmsareaUpdateDtos = new List<(int RowIndex, Guid Id, WmsAreaUpdateDto Item)>();
        var wmsareas = input.WmsAreas;
        if (wmsareas != null && wmsareas.Any())
        {
            #region å¯¼å…¥æ ¡éªŒ
            // åˆ¤æ–­åç§°æ˜¯å¦é‡å¤ï¼Œå¹¶è¾“出第几行重复
            var duplicateWmsAreas = wmsareas.GroupBy(x => x.AreaNo).Where(x => x.Count() > 1).ToList();
            if (duplicateWmsAreas?.Any() == true)
            {
                var duplicateWmsAreaMsgs = duplicateWmsAreas.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} è¡Œï¼š{x.Key}  åç§°é‡å¤");
                var errorMsg = $"导入失败!配置, {string.Join(",", duplicateWmsAreaMsgs)},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
            #endregion
            foreach (var wmsarea in wmsareas)
            {
                if (wmsarea.AreaNo.IsNullOrWhiteSpace() && wmsarea.AreaName.IsNullOrWhiteSpace())
                {
                    continue;
                }
                if (wmsarea.AreaName.IsNullOrWhiteSpace())
                {
                    var errorMsg = $"导入失败!配置,第{wmsarea.RowIndex}行:WmsArea名称不能为空";
                    throw new UserFriendlyException(errorMsg);
                }
                var oldWmsArea = await _wmsareaRepository.FindByNameAsync(wmsarea.AreaName);
                if (oldWmsArea != null)
                {
                    var wmsareaUpdateDto = new WmsAreaUpdateDto
                    {
                        AreaName = wmsarea.AreaName,
                        AreaDesc = wmsarea.AreaDesc,
                        AreaStatus = wmsarea.AreaStatus,
                        AreaType = wmsarea.AreaType,
                        StoreCode = wmsarea.StoreCode,
                        StoreName = wmsarea.StoreName,
                        Remark = wmsarea.Remark,
                    };
                    wmsareaUpdateDtos.Add((wmsarea.RowIndex, oldWmsArea.Id, wmsareaUpdateDto));
                }
                else
                {
                    var wmsareaCreateDto = new WmsAreaCreateDto
                    {
                        AreaName = wmsarea.AreaName,
                        AreaDesc = wmsarea.AreaDesc,
                        AreaStatus = wmsarea.AreaStatus,
                        AreaType = wmsarea.AreaType,
                        StoreCode = wmsarea.StoreCode,
                        StoreName = wmsarea.StoreName,
                        Remark = wmsarea.Remark,
                    };
                    wmsareaCreateDtos.Add((wmsarea.RowIndex, wmsareaCreateDto));
                }
            }
        }
        // æ–°å¢ž
        foreach (var wmsareaDto in wmsareaCreateDtos)
        {
            try
            {
                await CreateAsync(wmsareaDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsareaDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
        // æ›´æ–°
        foreach (var wmsareaDto in wmsareaUpdateDtos)
        {
            try
            {
                await UpdateAsync(wmsareaDto.Id, wmsareaDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsareaDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
    }
    /// <inheritdoc />
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsAreasInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsArea.Sort);
        }
        var specification = new WmsAreaSpecification(input.Name);
        var area = ObjectMapper.Map<GetWmsAreasInput, WmsArea>(input);
        var list = await _wmsareaRepository.GetListAsync(area,input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsArea>, List<WmsAreaDto>>(list);
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "WmsArea列表" : result.Count == 1 ? result.First()?.AreaName : "WmsArea模版";
        return (sheets, fileName);
    }
    /// <summary>
    /// Checks the create or update dto asynchronous.
    /// </summary>
    /// <param name="input">The input.</param>
    protected Task CheckCreateOrUpdateDtoAsync(WmsAreaCreateOrUpdateDtoBase input)
    {
        Check.NotNull(input, nameof(input));
        Check.NotNullOrWhiteSpace(input.AreaNo, "编号", WmsAreaConsts.MaxCodeLength);
        Check.NotNullOrWhiteSpace(input.AreaName, "名称", WmsAreaConsts.MaxNameLength);
        Check.Length(input.Remark, "备注", WmsAreaConsts.MaxRemarkLength);
        return Task.CompletedTask;
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application/Implements/WmsContainerAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,336 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainers;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.WmsContainers;
using CMS.Plugin.HIAWms.Domain.Shared;
using CMS.Plugin.HIAWms.Domain.Shared.WmsContainers;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
using CMS.Plugin.HIAWms.Domain.Shared.Util;
namespace CMS.Plugin.HIAWms.Application.Implements;
/// <inheritdoc />
public class WmsContainerAppService : CMSPluginAppService, IWmsContainerAppService
{
    private readonly IWmsContainerRepository _wmscontainerRepository;
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsContainerAppService"/> class.
    /// </summary>
    /// <param name="wmscontainerRepository">The task job repository.</param>
    public WmsContainerAppService(IWmsContainerRepository wmscontainerRepository)
    {
        _wmscontainerRepository = wmscontainerRepository;
    }
    /// <inheritdoc />
    public virtual async Task<WmsContainerDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<WmsContainer, WmsContainerDto>(await _wmscontainerRepository.GetAsync(id));
    }
    /// <inheritdoc />
    public virtual async Task<PagedResultDto<WmsContainerDto>> GetListAsync(GetWmsContainersInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsContainer.Sort);
        }
        var specification = new WmsContainerSpecification(input.Name);
        var container = ObjectMapper.Map < GetWmsContainersInput, WmsContainer>(input);
        var count = await _wmscontainerRepository.GetCountAsync(container,input.Filter, specification);
        var list = await _wmscontainerRepository.GetListAsync(container,input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification);
        return new PagedResultDto<WmsContainerDto>(count, ObjectMapper.Map<List<WmsContainer>, List<WmsContainerDto>>(list));
    }
    /// <inheritdoc />
    public virtual async Task<WmsContainerDto> CreateAsync(WmsContainerCreateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var exist = await _wmscontainerRepository.NameExistAsync(input.ContainerNo);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.ContainerNo]);
        }
        var maxSort = await _wmscontainerRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var wmscontainer = ObjectMapper.Map<WmsContainerCreateDto,WmsContainer>(input);
        input.MapExtraPropertiesTo(wmscontainer, MappingPropertyDefinitionChecks.None);
        wmscontainer.Sort = sort;
        await _wmscontainerRepository.InsertAsync(wmscontainer);
        if (input.Sort.HasValue && wmscontainer.Sort != maxSort)
        {
            await AdjustSortAsync(wmscontainer.Id, wmscontainer.Sort);
        }
        return ObjectMapper.Map<WmsContainer, WmsContainerDto>(wmscontainer);
    }
    /// <inheritdoc />
    public virtual async Task<WmsContainerDto> UpdateAsync(Guid id, WmsContainerUpdateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var wmscontainer = await _wmscontainerRepository.GetAsync(id);
        var exist = await _wmscontainerRepository.NameExistAsync(input.ContainerNo, wmscontainer.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.ContainerNo]);
        }
        wmscontainer.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
        input.MapExtraPropertiesTo(wmscontainer, MappingPropertyDefinitionChecks.None);
        wmscontainer.ContainerStatus = input.ContainerStatus;
        wmscontainer.ContainerType = input.ContainerType;
        wmscontainer.SpecLength = input.SpecLength;
        wmscontainer.SpecWidth = input.SpecWidth;
        wmscontainer.SpecHeight = input.SpecHeight;
        wmscontainer.LimitLength = input.LimitLength;
        wmscontainer.LimitWidth = input.LimitWidth;
        wmscontainer.LimitHeight = input.LimitHeight;
        wmscontainer.MaxWeight = input.MaxWeight;
        wmscontainer.MaterialNumber = input.MaterialNumber;
        wmscontainer.ExceptionNumber = input.ExceptionNumber;
        await _wmscontainerRepository.UpdateAsync(wmscontainer);
        return ObjectMapper.Map<WmsContainer, WmsContainerDto>(wmscontainer);
    }
    /// <inheritdoc />
    public async Task<List<WmsContainerDto>> CloneAsync(IEnumerable<Guid> ids)
    {
        var wmscontainers = new List<WmsContainer>();
        if (ids != null)
        {
            var sort = await _wmscontainerRepository.GetMaxSortAsync();
            foreach (var id in ids)
            {
                var wmscontainer = await _wmscontainerRepository.FindAsync(id);
                if (wmscontainer != null)
                {
                    var containerNo = wmscontainer.ContainerNo + WmsContainerConsts.CloneTag;
                    var notExist = false;
                    while (!notExist)
                    {
                        var exist = await _wmscontainerRepository.NameExistAsync(containerNo);
                        if (exist || wmscontainers.Any(x => x.ContainerNo == containerNo))
                        {
                            containerNo += WmsContainerConsts.CloneTag;
                            continue;
                        }
                        notExist = true;
                    }
                    //wmscontainer = await _wmscontainerRepository.InsertAsync(wmscontainer.Clone(GuidGenerator.Create(), containerNo, sort++));
                    wmscontainers.Add(wmscontainer);
                }
            }
        }
        return ObjectMapper.Map<List<WmsContainer>, List<WmsContainerDto>>(wmscontainers);
    }
    /// <inheritdoc />
    public virtual Task DeleteAsync(Guid id)
    {
        return _wmscontainerRepository.DeleteAsync(id);
    }
    /// <inheritdoc />
    public async Task DeleteManyAsync(IEnumerable<Guid> ids)
    {
        foreach (var id in ids)
        {
            await DeleteAsync(id);
        }
    }
    /// <inheritdoc />
    public virtual async Task AdjustSortAsync(Guid id, int sort)
    {
        var list = await _wmscontainerRepository.GetListAsync(null,nameof(WmsContainer.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 _wmscontainerRepository.UpdateManyAsync(list);
    }
    /// <inheritdoc />
    public async Task ImportAsync(WmsContainersImportModel input)
    {
        Check.NotNull(input, nameof(input));
        var wmscontainerCreateDtos = new List<(int RowIndex, WmsContainerCreateDto Item)>();
        var wmscontainerUpdateDtos = new List<(int RowIndex, Guid Id, WmsContainerUpdateDto Item)>();
        var wmscontainers = input.WmsContainers;
        if (wmscontainers != null && wmscontainers.Any())
        {
            #region å¯¼å…¥æ ¡éªŒ
            // åˆ¤æ–­åç§°æ˜¯å¦é‡å¤ï¼Œå¹¶è¾“出第几行重复
            var duplicateWmsContainers = wmscontainers.GroupBy(x => x.ContainerNo).Where(x => x.Count() > 1).ToList();
            if (duplicateWmsContainers?.Any() == true)
            {
                var duplicateWmsContainerMsgs = duplicateWmsContainers.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} è¡Œï¼š{x.Key}  åç§°é‡å¤");
                var errorMsg = $"导入失败!配置, {string.Join(",", duplicateWmsContainerMsgs)},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
            #endregion
            foreach (var wmscontainer in wmscontainers)
            {
                if (wmscontainer.ContainerNo.IsNullOrWhiteSpace() && wmscontainer.ContainerNo.IsNullOrWhiteSpace())
                {
                    continue;
                }
                if (wmscontainer.ContainerNo.IsNullOrWhiteSpace())
                {
                    var errorMsg = $"导入失败!配置,第{wmscontainer.RowIndex}行:WmsContainer名称不能为空";
                    throw new UserFriendlyException(errorMsg);
                }
                var oldWmsContainer = await _wmscontainerRepository.FindByNameAsync(wmscontainer.ContainerNo);
                if (oldWmsContainer != null)
                {
                    var wmscontainerUpdateDto = new WmsContainerUpdateDto
                    {
                        ContainerNo = wmscontainer.ContainerNo,
                        ContainerType = wmscontainer.ContainerType,
                        ContainerStatus = wmscontainer.ContainerStatus,
                        SpecLength = wmscontainer.SpecLength,
                        SpecWidth = wmscontainer.SpecWidth,
                        SpecHeight = wmscontainer.SpecHeight,
                        LimitLength = wmscontainer.LimitLength,
                        LimitWidth = wmscontainer.LimitWidth,
                        LimitHeight = wmscontainer.LimitHeight,
                        MaxWeight = wmscontainer.MaxWeight,
                        Remark = wmscontainer.Remark,
                    };
                    wmscontainerUpdateDtos.Add((wmscontainer.RowIndex, oldWmsContainer.Id, wmscontainerUpdateDto));
                }
                else
                {
                    var wmscontainerCreateDto = new WmsContainerCreateDto
                    {
                        ContainerNo = wmscontainer.ContainerNo,
                        ContainerType = wmscontainer.ContainerType,
                        ContainerStatus = wmscontainer.ContainerStatus,
                        SpecLength = wmscontainer.SpecLength,
                        SpecWidth = wmscontainer.SpecWidth,
                        SpecHeight = wmscontainer.SpecHeight,
                        LimitLength = wmscontainer.LimitLength,
                        LimitWidth = wmscontainer.LimitWidth,
                        LimitHeight = wmscontainer.LimitHeight,
                        MaxWeight = wmscontainer.MaxWeight,
                        Remark = wmscontainer.Remark
                    };
                    wmscontainerCreateDtos.Add((wmscontainer.RowIndex, wmscontainerCreateDto));
                }
            }
        }
        // æ–°å¢ž
        foreach (var wmscontainerDto in wmscontainerCreateDtos)
        {
            try
            {
                await CreateAsync(wmscontainerDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmscontainerDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
        // æ›´æ–°
        foreach (var wmscontainerDto in wmscontainerUpdateDtos)
        {
            try
            {
                await UpdateAsync(wmscontainerDto.Id, wmscontainerDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmscontainerDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
    }
    /// <inheritdoc />
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsContainersInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsContainer.Sort);
        }
        var specification = new WmsContainerSpecification(input.Name);
        var container = ObjectMapper.Map<GetWmsContainersInput, WmsContainer>(input);
        var list = await _wmscontainerRepository.GetListAsync(container,input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsContainer>, List<WmsContainerDto>>(list);
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "WmsContainer列表" : result.Count == 1 ? result.First()?.ContainerNo : "WmsContainer模版";
        return (sheets, fileName);
    }
    /// <summary>
    /// Checks the create or update dto asynchronous.
    /// </summary>
    /// <param name="input">The input.</param>
    protected Task CheckCreateOrUpdateDtoAsync(WmsContainerCreateOrUpdateDtoBase input)
    {
        Check.NotNull(input, nameof(input));
        Check.NotNullOrWhiteSpace(input.ContainerNo, "编号", WmsContainerConsts.MaxCodeLength);
        Check.Length(input.Remark, "备注", WmsContainerConsts.MaxRemarkLength);
        return Task.CompletedTask;
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application/Implements/WmsEnumAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,69 @@
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.Util;
using CMS.Plugin.HIAWms.Domain.WmsAreas;
using CMS.Plugin.HIAWms.Domain.WmsStores;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsAreas.WmsAreaCreateOrUpdateDtoBase;
namespace CMS.Plugin.HIAWms.Application.Implements
{
    /// <summary>
    /// æžšä¸¾ç±»åž‹æŽ¥å£å®žçް
    /// </summary>
    public class WmsEnumAppService : CMSPluginAppService, IWmsEnumAppService
    {
        private readonly IWmsStoreRepository _storeRepository;
        private readonly IWmsAreaRepository _wmsAreaRepository;
        public WmsEnumAppService(IWmsStoreRepository storeRepository, IWmsAreaRepository wmsAreaRepository)
        {
            _storeRepository = storeRepository;
            _wmsAreaRepository = wmsAreaRepository;
        }
        public List<EnumItem> GetEnumDataList(WmsEnumInput enumInput)
        {
            return EnumHelper.GetEnumItems(enumInput.EnumName);
        }
        /// <summary>
        /// èŽ·å–ä»“åº“åˆ—è¡¨
        /// </summary>
        /// <returns></returns>
        public async Task<List<WmsStoreForAreaOutpur>> GetStreList()
        {
            var list = await _storeRepository.GetListForSelectAsync();
            if (list == null || list.Count <= 0) { return new List<WmsStoreForAreaOutpur>(); }
            var result = list.Select(x => new WmsStoreForAreaOutpur
            {
                StoreCode = x.StoreCode,
                StoreName = x.StoreName,
            }).ToList();
            return result;
        }
        /// <summary>
        /// åº“区列表
        /// </summary>
        /// <returns></returns>
        public async Task<List<AreaForListOuptut>> GetAreaListAsync()
        {
            var list = await  _wmsAreaRepository.GetListForSelectAsync();
            if (list == null || list.Count <= 0) { return new List<AreaForListOuptut>(); }
            var result = list.Select(x=>new AreaForListOuptut
            {
                AreaName = x.AreaName,
                AreaNo = x.AreaNo,
            }).ToList();
            return result;
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application/Implements/WmsInOutStockRecordAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,436 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockRecord;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.Shared;
using CMS.Plugin.HIAWms.Domain.Shared.Util;
using CMS.Plugin.HIAWms.Domain.WmsInOutStockRecord;
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 WmsInOutStockRecordAppService : CMSPluginAppService, IWmsInOutStockRecordAppService
{
    private readonly IWmsInOutStockRecordRepository wmsInOutStockRecordRepository;
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsInOutStockRecordAppService"/> class.
    /// </summary>
    /// <param name="WmsInOutStockRecordRepository">The task job repository.</param>
    public WmsInOutStockRecordAppService(IWmsInOutStockRecordRepository _WmsInOutStockRecordRepository)
    {
        wmsInOutStockRecordRepository = _WmsInOutStockRecordRepository;
    }
    /// <summary>
    /// èŽ·å–æŒ‡å®šå‡ºå…¥åº“è®°å½•è¡¨
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public virtual async Task<WmsInOutStockRecordDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<WmsInOutStockRecord, WmsInOutStockRecordDto>(await wmsInOutStockRecordRepository.GetAsync(id));
    }
    /// <summary>
    /// åˆ†é¡µèŽ·å–å‡ºå…¥åº“è®°å½•è¡¨
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public virtual async Task<PagedResultDto<WmsInOutStockRecordDto>> GetListAsync(GetWmsInOutStockRecordInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsInOutStockRecord.Sort);
        }
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var count = await wmsInOutStockRecordRepository.GetCountAsync(whereConditions);
        var list = await wmsInOutStockRecordRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<WmsInOutStockRecordDto>(count, ObjectMapper.Map<List<WmsInOutStockRecord>, List<WmsInOutStockRecordDto>>(list));
    }
    /// <summary>
    /// åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
    /// </summary>
    /// <param name="input">输入参数</param>
    /// <returns></returns>
    private FunReturnResultModel<Expression<Func<WmsInOutStockRecord, bool>>> DynamicGetQueryParams(GetWmsInOutStockRecordInput input)
    {
        //动态构造查询条件
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsInOutStockRecord, GetWmsInOutStockRecordInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        //也可再次自定义构建查询条件
        Expression<Func<WmsInOutStockRecord, bool>> extendExpression = a => a.IsDeleted == false;
        // ä½¿ç”¨ System.Linq.PredicateBuilder çš„ And
        var pres = (System.Linq.Expressions.Expression<Func<WmsInOutStockRecord, 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<WmsInOutStockRecordDto> CreateAsync(WmsInOutStockRecordCreateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var exist = await wmsInOutStockRecordRepository.NameExistAsync(input.MaterialNo);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialNo]);
        }
        var maxSort = await wmsInOutStockRecordRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var insertObj = ObjectMapper.Map<WmsInOutStockRecordCreateDto, WmsInOutStockRecord>(input);
        insertObj.Sort = sort;
        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None);
        await wmsInOutStockRecordRepository.InsertAsync(insertObj);
        if (input.Sort.HasValue && insertObj.Sort != maxSort)
        {
            await AdjustSortAsync(insertObj.Id, insertObj.Sort);
        }
        return ObjectMapper.Map<WmsInOutStockRecord, WmsInOutStockRecordDto>(insertObj);
    }
    /// <summary>
    /// æ›´æ–°å‡ºå…¥åº“记录表
    /// </summary>
    /// <param name="id"></param>
    /// <param name="input"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public virtual async Task<WmsInOutStockRecordDto> UpdateAsync(Guid id, WmsInOutStockRecordUpdateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var updateObj = await wmsInOutStockRecordRepository.GetAsync(id);
        var exist = await wmsInOutStockRecordRepository.NameExistAsync(input.MaterialNo, updateObj.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialNo]);
        }
        updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
        input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None);
                updateObj.OrderNo = input.OrderNo;
        updateObj.MaterialName = input.MaterialName;
        updateObj.MaterialNo = input.MaterialNo;
        updateObj.StockType = input.StockType;
        updateObj.ContainerNo = input.ContainerNo;
        updateObj.MaterialModel = input.MaterialModel;
        updateObj.OperateTime = input.OperateTime;
        updateObj.Remark = input.Remark;
        updateObj.MaterialId = input.MaterialId;
        updateObj.TaskNo = input.TaskNo;
        updateObj.SourcePlace = input.SourcePlace;
        updateObj.ToPlace = input.ToPlace;
        updateObj.IsDisabled = input.IsDisabled;
        await wmsInOutStockRecordRepository.UpdateAsync(updateObj);
        return ObjectMapper.Map<WmsInOutStockRecord, WmsInOutStockRecordDto>(updateObj);
    }
    /// <summary>
    /// å…‹éš†å‡ºå…¥åº“记录表
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    public async Task<List<WmsInOutStockRecordDto>> CloneAsync(IEnumerable<Guid> ids)
    {
        //var wmsInOutStockRecords = new List<WmsInOutStockRecord>();
        //if (ids != null)
        //{
        //    var sort = await wmsInOutStockRecordRepository.GetMaxSortAsync();
        //    foreach (var id in ids)
        //    {
        //        var WmsInOutStockRecord = await wmsInOutStockRecordRepository.FindAsync(id);
        //        if (WmsInOutStockRecord != null)
        //        {
        //            var name = WmsInOutStockRecord.Name + WmsInOutStockRecordConsts.CloneTag;
        //            var notExist = false;
        //            while (!notExist)
        //            {
        //                var exist = await wmsInOutStockRecordRepository.NameExistAsync(name);
        //                if (exist || wmsInOutStockRecords.Any(x => x.Name == name))
        //                {
        //                    name += WmsInOutStockRecordConsts.CloneTag;
        //                    continue;
        //                }
        //                notExist = true;
        //            }
        //            //WmsInOutStockRecord = await wmsInOutStockRecordRepository.InsertAsync(WmsInOutStockRecord.Clone(GuidGenerator.Create(), name, sort++));
        //            wmsInOutStockRecords.Add(WmsInOutStockRecord);
        //        }
        //    }
        //}
        //return ObjectMapper.Map<List<WmsInOutStockRecord>, List<WmsInOutStockRecordDto>>(wmsInOutStockRecords);
        return new List<WmsInOutStockRecordDto>();
    }
    /// <summary>
    /// åˆ é™¤å•个出入库记录表
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public virtual Task DeleteAsync(Guid id)
    {
        return wmsInOutStockRecordRepository.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 wmsInOutStockRecordRepository.GetListAsync(null, nameof(WmsInOutStockRecord.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 wmsInOutStockRecordRepository.UpdateManyAsync(list);
    }
    /// <summary>
    /// å¯¼å…¥å‡ºå…¥åº“记录表
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public async Task ImportAsync(WmsInOutStockRecordsImportModel input)
    {
        Check.NotNull(input, nameof(input));
        var wmsInOutStockRecordCreateDtos = new List<(int RowIndex, WmsInOutStockRecordCreateDto Item)>();
        var wmsInOutStockRecordUpdateDtos = new List<(int RowIndex, Guid Id, WmsInOutStockRecordUpdateDto Item)>();
        var importItems = input.WmsInOutStockRecords;
        if (importItems != null && importItems.Any())
        {
            #region å¯¼å…¥æ ¡éªŒ
            // åˆ¤æ–­åç§°æ˜¯å¦é‡å¤ï¼Œå¹¶è¾“出第几行重复
            var duplicateWmsInOutStockRecords = importItems.GroupBy(x => x.MaterialNo).Where(x => x.Count() > 1).ToList();
            if (duplicateWmsInOutStockRecords?.Any() == true)
            {
                var duplicateWmsInOutStockRecordMsgs = duplicateWmsInOutStockRecords.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} è¡Œï¼š{x.Key}  åç§°é‡å¤");
                var errorMsg = $"导入失败!配置, {string.Join(",", duplicateWmsInOutStockRecordMsgs)},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
            #endregion
            foreach (var impItem in importItems)
            {
                if (impItem.MaterialNo.IsNullOrWhiteSpace() && impItem.MaterialName.IsNullOrWhiteSpace())
                {
                    continue;
                }
                if (impItem.MaterialNo.IsNullOrWhiteSpace())
                {
                    var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:WmsInOutStockRecord名称不能为空";
                    throw new UserFriendlyException(errorMsg);
                }
                var oldWmsInOutStockRecord = await wmsInOutStockRecordRepository.FindByNameAsync(impItem.MaterialNo);
                if (oldWmsInOutStockRecord != null)
                {
                    var wmsInOutStockRecordUpdateDto = new WmsInOutStockRecordUpdateDto
                    {
                        OrderNo = impItem.OrderNo,
MaterialName = impItem.MaterialName,
MaterialNo = impItem.MaterialNo,
StockType = impItem.StockType,
ContainerNo = impItem.ContainerNo,
MaterialModel = impItem.MaterialModel,
OperateTime = impItem.OperateTime,
Remark = impItem.Remark,
MaterialId = impItem.MaterialId,
TaskNo = impItem.TaskNo,
SourcePlace = impItem.SourcePlace,
ToPlace = impItem.ToPlace,
IsDisabled = impItem.IsDisabled,
                    };
                    wmsInOutStockRecordUpdateDtos.Add((impItem.RowIndex, oldWmsInOutStockRecord.Id, wmsInOutStockRecordUpdateDto));
                }
                else
                {
                    var wmsInOutStockRecordCreateDto = new WmsInOutStockRecordCreateDto
                    {
                        OrderNo = impItem.OrderNo,
MaterialName = impItem.MaterialName,
MaterialNo = impItem.MaterialNo,
StockType = impItem.StockType,
ContainerNo = impItem.ContainerNo,
MaterialModel = impItem.MaterialModel,
OperateTime = impItem.OperateTime,
Remark = impItem.Remark,
MaterialId = impItem.MaterialId,
TaskNo = impItem.TaskNo,
SourcePlace = impItem.SourcePlace,
ToPlace = impItem.ToPlace,
IsDisabled = impItem.IsDisabled,
                    };
                    wmsInOutStockRecordCreateDtos.Add((impItem.RowIndex, wmsInOutStockRecordCreateDto));
                }
            }
        }
        // æ–°å¢ž
        foreach (var wmsInOutStockRecordDto in wmsInOutStockRecordCreateDtos)
        {
            try
            {
                await CreateAsync(wmsInOutStockRecordDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsInOutStockRecordDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
        // æ›´æ–°
        foreach (var wmsInOutStockRecordDto in wmsInOutStockRecordUpdateDtos)
        {
            try
            {
                await UpdateAsync(wmsInOutStockRecordDto.Id, wmsInOutStockRecordDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsInOutStockRecordDto.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(GetWmsInOutStockRecordInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsInOutStockRecord.Sort);
        }
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await wmsInOutStockRecordRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsInOutStockRecord>, List<WmsInOutStockRecordDto>>(list);
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "出入库记录表列表" : result.Count == 1 ? result[0]?.MaterialNo : "WmsInOutStockRecord模版";
        return (sheets, fileName);
    }
    /// <summary>
    /// æ ¡éªŒå‡ºå…¥åº“记录表,当新建或更新时
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    protected Task CheckCreateOrUpdateDtoAsync(WmsInOutStockRecordCreateOrUpdateDtoBase input)
    {
        Check.NotNull(input, nameof(input));
                Check.NotNullOrWhiteSpace(input.OrderNo, "单据编号", 50);
        Check.NotNullOrWhiteSpace(input.MaterialNo, "物料件号", 50);
        Check.NotNull(input.StockType, "操作类型");
        Check.NotNullOrWhiteSpace(input.MaterialId, "物料ID", 50);
        Check.NotNullOrWhiteSpace(input.TaskNo, "任务号", 50);
        return Task.CompletedTask;
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,445 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.Shared;
using CMS.Plugin.HIAWms.Domain.Shared.Util;
using CMS.Plugin.HIAWms.Domain.Shared.WmsMaterial;
using CMS.Plugin.HIAWms.Domain.WmsMaterial;
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 WmsMaterialAppService : CMSPluginAppService, IWmsMaterialAppService
{
    private readonly IWmsMaterialRepository wmsmaterialsRepository;
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsMaterialAppService"/> class.
    /// </summary>
    /// <param name="WmsMaterialRepository">The task job repository.</param>
    public WmsMaterialAppService(IWmsMaterialRepository WmsMaterialRepository)
    {
        wmsmaterialsRepository = WmsMaterialRepository;
    }
    /// <summary>
    /// èŽ·å–æŒ‡å®šç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public virtual async Task<WmsMaterialDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<WmsMaterial, WmsMaterialDto>(await wmsmaterialsRepository.GetAsync(id));
    }
    /// <summary>
    /// åˆ†é¡µèŽ·å–ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    public virtual async Task<PagedResultDto<WmsMaterialDto>> GetListAsync(GetWmsMaterialInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsMaterial.Sort);
        }
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var count = await wmsmaterialsRepository.GetCountAsync(whereConditions);
        var list = await wmsmaterialsRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<WmsMaterialDto>(count, ObjectMapper.Map<List<WmsMaterial>, List<WmsMaterialDto>>(list));
    }
    /// <summary>
    /// åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
    /// </summary>
    /// <param name="input">输入参数</param>
    /// <returns></returns>
    private FunReturnResultModel<Expression<Func<WmsMaterial, bool>>> DynamicGetQueryParams(GetWmsMaterialInput input)
    {
        //动态构造查询条件
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsMaterial, GetWmsMaterialInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        //也可再次自定义构建查询条件
        Expression<Func<WmsMaterial, bool>> extendExpression = a => a.IsDeleted == false;
        // ä½¿ç”¨ System.Linq.PredicateBuilder çš„ And
        var pres = (System.Linq.Expressions.Expression<Func<WmsMaterial, 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<WmsMaterialDto> CreateAsync(WmsMaterialCreateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var exist = await wmsmaterialsRepository.NameExistAsync(input.MaterialCode);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialCode]);
        }
        var maxSort = await wmsmaterialsRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var insertObj = ObjectMapper.Map<WmsMaterialCreateDto, WmsMaterial>(input);
        insertObj.Sort = sort;
        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None);
        await wmsmaterialsRepository.InsertAsync(insertObj);
        if (input.Sort.HasValue && insertObj.Sort != maxSort)
        {
            await AdjustSortAsync(insertObj.Id, insertObj.Sort);
        }
        return ObjectMapper.Map<WmsMaterial, WmsMaterialDto>(insertObj);
    }
    /// <summary>
    /// æ›´æ–°ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨
    /// </summary>
    /// <param name="id"></param>
    /// <param name="input"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public virtual async Task<WmsMaterialDto> UpdateAsync(Guid id, WmsMaterialUpdateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var updateObj = await wmsmaterialsRepository.GetAsync(id);
        var exist = await wmsmaterialsRepository.NameExistAsync(input.MaterialCode, updateObj.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialCode]);
        }
        updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
        input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None);
                updateObj.MaterialCode = input.MaterialCode;
        updateObj.MaterialName = input.MaterialName;
        updateObj.PurchaseType = input.PurchaseType;
        updateObj.MaterialType = input.MaterialType;
        updateObj.PrimaryUnit = input.PrimaryUnit;
        updateObj.Standard = input.Standard;
        updateObj.OuterDiameter = input.OuterDiameter;
        updateObj.WallThickness = input.WallThickness;
        updateObj.MaterialQuality = input.MaterialQuality;
        updateObj.Length = input.Length;
        updateObj.IsMainBranch = input.IsMainBranch;
        updateObj.Factory = input.Factory;
        updateObj.Certification = input.Certification;
        updateObj.RedundantField1 = input.RedundantField1;
        updateObj.RedundantField2 = input.RedundantField2;
        updateObj.RedundantField3 = input.RedundantField3;
        updateObj.Remark = input.Remark;
        updateObj.IsDisabled = input.IsDisabled;
        await wmsmaterialsRepository.UpdateAsync(updateObj);
        return ObjectMapper.Map<WmsMaterial, WmsMaterialDto>(updateObj);
    }
    /// <summary>
    /// å…‹éš†ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    public async Task<List<WmsMaterialDto>> CloneAsync(IEnumerable<Guid> ids)
    {
        //var wmsmaterialss = new List<WmsMaterial>();
        //if (ids != null)
        //{
        //    var sort = await wmsmaterialsRepository.GetMaxSortAsync();
        //    foreach (var id in ids)
        //    {
        //        var WmsMaterial = await wmsmaterialsRepository.FindAsync(id);
        //        if (WmsMaterial != null)
        //        {
        //            var name = WmsMaterial.Name + WmsMaterialConsts.CloneTag;
        //            var notExist = false;
        //            while (!notExist)
        //            {
        //                var exist = await wmsmaterialsRepository.NameExistAsync(name);
        //                if (exist || wmsmaterialss.Any(x => x.Name == name))
        //                {
        //                    name += WmsMaterialConsts.CloneTag;
        //                    continue;
        //                }
        //                notExist = true;
        //            }
        //            //WmsMaterial = await wmsmaterialsRepository.InsertAsync(WmsMaterial.Clone(GuidGenerator.Create(), name, sort++));
        //            wmsmaterialss.Add(WmsMaterial);
        //        }
        //    }
        //}
        //return ObjectMapper.Map<List<WmsMaterial>, List<WmsMaterialDto>>(wmsmaterialss);
        return new List<WmsMaterialDto>();
    }
    /// <summary>
    /// åˆ é™¤å•个物料基础信息表
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public virtual Task DeleteAsync(Guid id)
    {
        return wmsmaterialsRepository.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 wmsmaterialsRepository.GetListAsync(null, nameof(WmsMaterial.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 wmsmaterialsRepository.UpdateManyAsync(list);
    }
    /// <summary>
    /// å¯¼å…¥ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    /// <exception cref="UserFriendlyException"></exception>
    public async Task ImportAsync(WmsMaterialsImportModel input)
    {
        Check.NotNull(input, nameof(input));
        var wmsmaterialsCreateDtos = new List<(int RowIndex, WmsMaterialCreateDto Item)>();
        var wmsmaterialsUpdateDtos = new List<(int RowIndex, Guid Id, WmsMaterialUpdateDto Item)>();
        var importItems = input.WmsMaterials;
        if (importItems != null && importItems.Any())
        {
            #region å¯¼å…¥æ ¡éªŒ
            // åˆ¤æ–­åç§°æ˜¯å¦é‡å¤ï¼Œå¹¶è¾“出第几行重复
            var duplicateWmsMaterials = importItems.GroupBy(x => x.MaterialCode).Where(x => x.Count() > 1).ToList();
            if (duplicateWmsMaterials?.Any() == true)
            {
                var duplicateWmsMaterialMsgs = duplicateWmsMaterials.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} è¡Œï¼š{x.Key}  åç§°é‡å¤");
                var errorMsg = $"导入失败!配置, {string.Join(",", duplicateWmsMaterialMsgs)},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
            #endregion
            foreach (var impItem in importItems)
            {
                if (impItem.MaterialCode.IsNullOrWhiteSpace() && impItem.MaterialName.IsNullOrWhiteSpace())
                {
                    continue;
                }
                if (impItem.MaterialCode.IsNullOrWhiteSpace())
                {
                    var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:WmsMaterial名称不能为空";
                    throw new UserFriendlyException(errorMsg);
                }
                var oldWmsMaterial = await wmsmaterialsRepository.FindByNameAsync(impItem.MaterialCode);
                if (oldWmsMaterial != null)
                {
                    var wmsmaterialsUpdateDto = new WmsMaterialUpdateDto
                    {
                        MaterialCode = impItem.MaterialCode,
                        MaterialName = impItem.MaterialName,
                        PurchaseType = impItem.PurchaseType,
                        MaterialType = impItem.MaterialType,
                        PrimaryUnit = impItem.PrimaryUnit,
                        Standard = impItem.Standard,
                        OuterDiameter = impItem.OuterDiameter,
                        WallThickness = impItem.WallThickness,
                        MaterialQuality = impItem.MaterialQuality,
                        Length = impItem.Length,
                        IsMainBranch = impItem.IsMainBranch,
                        Factory = impItem.Factory,
                        Certification = impItem.Certification,
                        Remark = impItem.Remark,
                    };
                    wmsmaterialsUpdateDtos.Add((impItem.RowIndex, oldWmsMaterial.Id, wmsmaterialsUpdateDto));
                }
                else
                {
                    var wmsmaterialsCreateDto = new WmsMaterialCreateDto
                    {
                        MaterialCode = impItem.MaterialCode,
                        MaterialName = impItem.MaterialName,
                        PurchaseType = impItem.PurchaseType,
                        MaterialType = impItem.MaterialType,
                        PrimaryUnit = impItem.PrimaryUnit,
                        Standard = impItem.Standard,
                        OuterDiameter = impItem.OuterDiameter,
                        WallThickness = impItem.WallThickness,
                        MaterialQuality = impItem.MaterialQuality,
                        Length = impItem.Length,
                        IsMainBranch = impItem.IsMainBranch,
                        Factory = impItem.Factory,
                        Certification = impItem.Certification,
                        Remark = impItem.Remark,
                    };
                    wmsmaterialsCreateDtos.Add((impItem.RowIndex, wmsmaterialsCreateDto));
                }
            }
        }
        // æ–°å¢ž
        foreach (var wmsmaterialsDto in wmsmaterialsCreateDtos)
        {
            try
            {
                await CreateAsync(wmsmaterialsDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsmaterialsDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
        // æ›´æ–°
        foreach (var wmsmaterialsDto in wmsmaterialsUpdateDtos)
        {
            try
            {
                await UpdateAsync(wmsmaterialsDto.Id, wmsmaterialsDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsmaterialsDto.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(GetWmsMaterialInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsMaterial.Sort);
        }
        #region åŠ¨æ€æž„é€ æŸ¥è¯¢æ¡ä»¶
        //动态构造查询条件
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await wmsmaterialsRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsMaterial>, List<WmsMaterialDto>>(list);
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "WmsMaterial列表" : result.Count == 1 ? result[0]?.MaterialCode : "WmsMaterial模版";
        return (sheets, fileName);
    }
    /// <summary>
    /// æ ¡éªŒç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨ï¼Œå½“新建或更新时
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    protected Task CheckCreateOrUpdateDtoAsync(WmsMaterialCreateOrUpdateDtoBase input)
    {
        Check.NotNull(input, nameof(input));
                Check.NotNullOrWhiteSpace(input.MaterialCode, "物料编码(唯一标识)", 64);
        Check.NotNullOrWhiteSpace(input.MaterialName, "物料名称", 128);
        Check.NotNull(input.PurchaseType, "采购类型(枚举值)");
        Check.NotNull(input.MaterialType, "物料类型(枚举值)");
        Check.NotNull(input.OuterDiameter, "外径(单位:mm)");
        Check.NotNull(input.WallThickness, "壁厚(单位:mm)");
        Check.NotNull(input.Length, "长度(单位:m)");
        Check.NotNull(input.IsMainBranch, "是否为主支管");
        return Task.CompletedTask;
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application/Implements/WmsPlaceAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,322 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlaces;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.WmsPlaces;
using CMS.Plugin.HIAWms.Domain.Shared;
using CMS.Plugin.HIAWms.Domain.Shared.WmsPlaces;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
using CMS.Plugin.HIAWms.Domain.Shared.Util;
namespace CMS.Plugin.HIAWms.Application.Implements;
/// <inheritdoc />
public class WmsPlaceAppService : CMSPluginAppService, IWmsPlaceAppService
{
    private readonly IWmsPlaceRepository _wmsplaceRepository;
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsPlaceAppService"/> class.
    /// </summary>
    /// <param name="wmsplaceRepository">The task job repository.</param>
    public WmsPlaceAppService(IWmsPlaceRepository wmsplaceRepository)
    {
        _wmsplaceRepository = wmsplaceRepository;
    }
    /// <inheritdoc />
    public virtual async Task<WmsPlaceDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<WmsPlace, WmsPlaceDto>(await _wmsplaceRepository.GetAsync(id));
    }
    /// <inheritdoc />
    public virtual async Task<PagedResultDto<WmsPlaceDto>> GetListAsync(GetWmsPlacesInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsPlace.Sort);
        }
        var specification = new WmsPlaceSpecification(input.Name);
        var place = ObjectMapper.Map<GetWmsPlacesInput, WmsPlace>(input);
        var count = await _wmsplaceRepository.GetCountAsync(place,input.Filter, specification);
        var list = await _wmsplaceRepository.GetListAsync(place, input.Sorting, input.MaxResultCount,  input.SkipCount, input.Filter, specification);
        return new PagedResultDto<WmsPlaceDto>(count, ObjectMapper.Map<List<WmsPlace>, List<WmsPlaceDto>>(list));
    }
    /// <inheritdoc />
    public virtual async Task<WmsPlaceDto> CreateAsync(WmsPlaceCreateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var exist = await _wmsplaceRepository.NameExistAsync(input.PlaceNo);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.PlaceNo]);
        }
        var maxSort = await _wmsplaceRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var wmsplace = ObjectMapper.Map<WmsPlaceCreateDto,WmsPlace>(input);
        input.MapExtraPropertiesTo(wmsplace, MappingPropertyDefinitionChecks.None);
        wmsplace.Sort = sort;
        await _wmsplaceRepository.InsertAsync(wmsplace);
        if (input.Sort.HasValue && wmsplace.Sort != maxSort)
        {
            await AdjustSortAsync(wmsplace.Id, wmsplace.Sort);
        }
        return ObjectMapper.Map<WmsPlace, WmsPlaceDto>(wmsplace);
    }
    /// <inheritdoc />
    public virtual async Task<WmsPlaceDto> UpdateAsync(Guid id, WmsPlaceUpdateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var wmsplace = await _wmsplaceRepository.GetAsync(id);
        var exist = await _wmsplaceRepository.NameExistAsync(input.PlaceNo, wmsplace.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.PlaceNo]);
        }
        wmsplace.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
        input.MapExtraPropertiesTo(wmsplace, MappingPropertyDefinitionChecks.None);
        wmsplace.StorageTypeNo = input.StorageTypeNo;
        wmsplace.PlaceStatus = input.PlaceStatus;
        wmsplace.AreaCode = input.AreaCode;
        wmsplace.Aisle = input.Aisle;
        wmsplace.RowNo = input.RowNo;
        wmsplace.ColumnNo = input.ColumnNo;
        wmsplace.LayerNo = input.LayerNo;
        wmsplace.Islock = input.Islock;
        wmsplace.EmptyContainer = input.EmptyContainer;
        wmsplace.RedundantField1 = input.RedundantField1;
        wmsplace.RedundantField2 = input.RedundantField2;
        wmsplace.RedundantField3 = input.RedundantField3;
        wmsplace.Remark = input.Remark;
        await _wmsplaceRepository.UpdateAsync(wmsplace);
        return ObjectMapper.Map<WmsPlace, WmsPlaceDto>(wmsplace);
    }
    /// <inheritdoc />
    public async Task<List<WmsPlaceDto>> CloneAsync(IEnumerable<Guid> ids)
    {
        var wmsplaces = new List<WmsPlace>();
        if (ids != null)
        {
            var sort = await _wmsplaceRepository.GetMaxSortAsync();
            foreach (var id in ids)
            {
                var wmsplace = await _wmsplaceRepository.FindAsync(id);
                if (wmsplace != null)
                {
                    var name = wmsplace.PlaceNo + WmsPlaceConsts.CloneTag;
                    var notExist = false;
                    while (!notExist)
                    {
                        var exist = await _wmsplaceRepository.NameExistAsync(name);
                        if (exist || wmsplaces.Any(x => x.PlaceNo == name))
                        {
                            name += WmsPlaceConsts.CloneTag;
                            continue;
                        }
                        notExist = true;
                    }
                    //wmsplace = await _wmsplaceRepository.InsertAsync(wmsplace.Clone(GuidGenerator.Create(), name, sort++));
                    wmsplaces.Add(wmsplace);
                }
            }
        }
        return ObjectMapper.Map<List<WmsPlace>, List<WmsPlaceDto>>(wmsplaces);
    }
    /// <inheritdoc />
    public virtual Task DeleteAsync(Guid id)
    {
        return _wmsplaceRepository.DeleteAsync(id);
    }
    /// <inheritdoc />
    public async Task DeleteManyAsync(IEnumerable<Guid> ids)
    {
        foreach (var id in ids)
        {
            await DeleteAsync(id);
        }
    }
    /// <inheritdoc />
    public virtual async Task AdjustSortAsync(Guid id, int sort)
    {
        var list = await _wmsplaceRepository.GetListAsync(null,nameof(WmsPlace.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 _wmsplaceRepository.UpdateManyAsync(list);
    }
    /// <inheritdoc />
    public async Task ImportAsync(WmsPlacesImportModel input)
    {
        Check.NotNull(input, nameof(input));
        var wmsplaceCreateDtos = new List<(int RowIndex, WmsPlaceCreateDto Item)>();
        var wmsplaceUpdateDtos = new List<(int RowIndex, Guid Id, WmsPlaceUpdateDto Item)>();
        var wmsplaces = input.WmsPlaces;
        if (wmsplaces != null && wmsplaces.Any())
        {
            #region å¯¼å…¥æ ¡éªŒ
            // åˆ¤æ–­åç§°æ˜¯å¦é‡å¤ï¼Œå¹¶è¾“出第几行重复
            var duplicateWmsPlaces = wmsplaces.GroupBy(x => x.PlaceNo).Where(x => x.Count() > 1).ToList();
            if (duplicateWmsPlaces?.Any() == true)
            {
                var duplicateWmsPlaceMsgs = duplicateWmsPlaces.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} è¡Œï¼š{x.Key}  åç§°é‡å¤");
                var errorMsg = $"导入失败!配置, {string.Join(",", duplicateWmsPlaceMsgs)},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
            #endregion
            foreach (var wmsplace in wmsplaces)
            {
                if (wmsplace.PlaceNo.IsNullOrWhiteSpace())
                {
                    continue;
                }
                if (wmsplace.PlaceNo.IsNullOrWhiteSpace())
                {
                    var errorMsg = $"导入失败!配置,第{wmsplace.RowIndex}行:WmsPlace名称不能为空";
                    throw new UserFriendlyException(errorMsg);
                }
                var oldWmsPlace = await _wmsplaceRepository.FindByNameAsync(wmsplace.PlaceNo);
                if (oldWmsPlace != null)
                {
                    var wmsplaceUpdateDto = new WmsPlaceUpdateDto
                    {
                        PlaceNo = wmsplace.PlaceNo,
                        PlaceStatus = wmsplace.PlaceStatus,
                        Remark = wmsplace.Remark,
                    };
                    wmsplaceUpdateDtos.Add((wmsplace.RowIndex, oldWmsPlace.Id, wmsplaceUpdateDto));
                }
                else
                {
                    var wmsplaceCreateDto = new WmsPlaceCreateDto
                    {
                        PlaceNo = wmsplace.PlaceNo,
                        PlaceStatus = wmsplace.PlaceStatus,
                        Remark = wmsplace.Remark,
                    };
                    wmsplaceCreateDtos.Add((wmsplace.RowIndex, wmsplaceCreateDto));
                }
            }
        }
        // æ–°å¢ž
        foreach (var wmsplaceDto in wmsplaceCreateDtos)
        {
            try
            {
                await CreateAsync(wmsplaceDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsplaceDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
        // æ›´æ–°
        foreach (var wmsplaceDto in wmsplaceUpdateDtos)
        {
            try
            {
                await UpdateAsync(wmsplaceDto.Id, wmsplaceDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsplaceDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
    }
    /// <inheritdoc />
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsPlacesInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsPlace.Sort);
        }
        var specification = new WmsPlaceSpecification(input.Name);
        var place = ObjectMapper.Map<GetWmsPlacesInput, WmsPlace>(input);
        var list = await _wmsplaceRepository.GetListAsync(place, input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsPlace>, List<WmsPlaceDto>>(list);
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "WmsPlace列表" : result.Count == 1 ? result.First()?.PlaceNo : "WmsPlace模版";
        return (sheets, fileName);
    }
    /// <summary>
    /// Checks the create or update dto asynchronous.
    /// </summary>
    /// <param name="input">The input.</param>
    protected Task CheckCreateOrUpdateDtoAsync(WmsPlaceCreateOrUpdateDtoBase input)
    {
        Check.NotNull(input, nameof(input));
        Check.NotNullOrWhiteSpace(input.PlaceNo, "编号", WmsPlaceConsts.MaxCodeLength);
        Check.Length(input.Remark, "备注", WmsPlaceConsts.MaxRemarkLength);
        return Task.CompletedTask;
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application/Implements/WmsStoreAppService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,313 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsStores;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.WmsStores;
using CMS.Plugin.HIAWms.Domain.Shared;
using CMS.Plugin.HIAWms.Domain.Shared.WmsStores;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
using CMS.Plugin.HIAWms.Domain.Shared.Util;
namespace CMS.Plugin.HIAWms.Application.Implements;
/// <inheritdoc />
public class WmsStoreAppService : CMSPluginAppService, IWmsStoreAppService
{
    private readonly IWmsStoreRepository _wmsstoreRepository;
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsStoreAppService"/> class.
    /// </summary>
    /// <param name="wmsstoreRepository">The task job repository.</param>
    public WmsStoreAppService(IWmsStoreRepository wmsstoreRepository)
    {
        _wmsstoreRepository = wmsstoreRepository;
    }
    /// <inheritdoc />
    public virtual async Task<WmsStoreDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<WmsStore, WmsStoreDto>(await _wmsstoreRepository.GetAsync(id));
    }
    /// <inheritdoc />
    public virtual async Task<PagedResultDto<WmsStoreDto>> GetListAsync(GetWmsStoresInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsStore.Sort);
        }
        var specification = new WmsStoreSpecification(input.Name);
        var store = ObjectMapper.Map<GetWmsStoresInput, WmsStore>(input);
        var count = await _wmsstoreRepository.GetCountAsync(store,input.Filter, specification);
        var list = await _wmsstoreRepository.GetListAsync(store,input.Sorting, input.MaxResultCount,  input.SkipCount, input.Filter, specification);
        return new PagedResultDto<WmsStoreDto>(count, ObjectMapper.Map<List<WmsStore>, List<WmsStoreDto>>(list));
    }
    /// <inheritdoc />
    public virtual async Task<WmsStoreDto> CreateAsync(WmsStoreCreateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var exist = await _wmsstoreRepository.NameExistAsync(input.StoreCode);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.StoreCode]);
        }
        var maxSort = await _wmsstoreRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var wmsstore = ObjectMapper.Map<WmsStoreCreateDto,WmsStore>(input);
        wmsstore.Sort = sort;
        input.MapExtraPropertiesTo(wmsstore, MappingPropertyDefinitionChecks.None);
        await _wmsstoreRepository.InsertAsync(wmsstore);
        if (input.Sort.HasValue && wmsstore.Sort != maxSort)
        {
            await AdjustSortAsync(wmsstore.Id, wmsstore.Sort);
        }
        return ObjectMapper.Map<WmsStore, WmsStoreDto>(wmsstore);
    }
    /// <inheritdoc />
    public virtual async Task<WmsStoreDto> UpdateAsync(Guid id, WmsStoreUpdateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var wmsstore = await _wmsstoreRepository.GetAsync(id);
        var exist = await _wmsstoreRepository.NameExistAsync(input.StoreCode, wmsstore.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.StoreCode]);
        }
        wmsstore.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
        input.MapExtraPropertiesTo(wmsstore, MappingPropertyDefinitionChecks.None);
        wmsstore.StoreName = input.StoreName;
        wmsstore.Remark = input.Remark;
        await _wmsstoreRepository.UpdateAsync(wmsstore);
        return ObjectMapper.Map<WmsStore, WmsStoreDto>(wmsstore);
    }
    /// <inheritdoc />
    public async Task<List<WmsStoreDto>> CloneAsync(IEnumerable<Guid> ids)
    {
        var wmsstores = new List<WmsStore>();
        if (ids != null)
        {
            var sort = await _wmsstoreRepository.GetMaxSortAsync();
            foreach (var id in ids)
            {
                var wmsstore = await _wmsstoreRepository.FindAsync(id);
                if (wmsstore != null)
                {
                    var name = wmsstore.StoreName + WmsStoreConsts.CloneTag;
                    var notExist = false;
                    while (!notExist)
                    {
                        var exist = await _wmsstoreRepository.NameExistAsync(name);
                        if (exist || wmsstores.Any(x => x.StoreCode == name))
                        {
                            name += WmsStoreConsts.CloneTag;
                            continue;
                        }
                        notExist = true;
                    }
                    //wmsstore = await _wmsstoreRepository.InsertAsync(wmsstore.Clone(GuidGenerator.Create(), name, sort++));
                    wmsstores.Add(wmsstore);
                }
            }
        }
        return ObjectMapper.Map<List<WmsStore>, List<WmsStoreDto>>(wmsstores);
    }
    /// <inheritdoc />
    public virtual Task DeleteAsync(Guid id)
    {
        return _wmsstoreRepository.DeleteAsync(id);
    }
    /// <inheritdoc />
    public async Task DeleteManyAsync(IEnumerable<Guid> ids)
    {
        foreach (var id in ids)
        {
            await DeleteAsync(id);
        }
    }
    /// <inheritdoc />
    public virtual async Task AdjustSortAsync(Guid id, int sort)
    {
        var list = await _wmsstoreRepository.GetListAsync(null,nameof(WmsStore.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 _wmsstoreRepository.UpdateManyAsync(list);
    }
    /// <inheritdoc />
    public async Task ImportAsync(WmsStoresImportModel input)
    {
        Check.NotNull(input, nameof(input));
        var wmsstoreCreateDtos = new List<(int RowIndex, WmsStoreCreateDto Item)>();
        var wmsstoreUpdateDtos = new List<(int RowIndex, Guid Id, WmsStoreUpdateDto Item)>();
        var wmsstores = input.WmsStores;
        if (wmsstores != null && wmsstores.Any())
        {
            #region å¯¼å…¥æ ¡éªŒ
            // åˆ¤æ–­åç§°æ˜¯å¦é‡å¤ï¼Œå¹¶è¾“出第几行重复
            var duplicateWmsStores = wmsstores.GroupBy(x => x.StoreCode).Where(x => x.Count() > 1).ToList();
            if (duplicateWmsStores?.Any() == true)
            {
                var duplicateWmsStoreMsgs = duplicateWmsStores.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} è¡Œï¼š{x.Key}  åç§°é‡å¤");
                var errorMsg = $"导入失败!配置, {string.Join(",", duplicateWmsStoreMsgs)},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
            #endregion
            foreach (var wmsstore in wmsstores)
            {
                if (wmsstore.StoreCode.IsNullOrWhiteSpace() && wmsstore.StoreName.IsNullOrWhiteSpace())
                {
                    continue;
                }
                if (wmsstore.StoreCode.IsNullOrWhiteSpace())
                {
                    var errorMsg = $"导入失败!配置,第{wmsstore.RowIndex}行:WmsStore名称不能为空";
                    throw new UserFriendlyException(errorMsg);
                }
                var oldWmsStore = await _wmsstoreRepository.FindByNameAsync(wmsstore.StoreCode);
                if (oldWmsStore != null)
                {
                    var wmsstoreUpdateDto = new WmsStoreUpdateDto
                    {
                        StoreCode = wmsstore.StoreCode,
                        StoreName = wmsstore.StoreName,
                        Remark = wmsstore.Remark,
                    };
                    wmsstoreUpdateDtos.Add((wmsstore.RowIndex, oldWmsStore.Id, wmsstoreUpdateDto));
                }
                else
                {
                    var wmsstoreCreateDto = new WmsStoreCreateDto
                    {
                        StoreCode = wmsstore.StoreCode,
                        StoreName = wmsstore.StoreName,
                        Remark = wmsstore.Remark,
                    };
                    wmsstoreCreateDtos.Add((wmsstore.RowIndex, wmsstoreCreateDto));
                }
            }
        }
        // æ–°å¢ž
        foreach (var wmsstoreDto in wmsstoreCreateDtos)
        {
            try
            {
                await CreateAsync(wmsstoreDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsstoreDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
        // æ›´æ–°
        foreach (var wmsstoreDto in wmsstoreUpdateDtos)
        {
            try
            {
                await UpdateAsync(wmsstoreDto.Id, wmsstoreDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsstoreDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
    }
    /// <inheritdoc />
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsStoresInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsStore.Sort);
        }
        var specification = new WmsStoreSpecification(input.Name);
        var store = ObjectMapper.Map<GetWmsStoresInput, WmsStore>(input);
        var list = await _wmsstoreRepository.GetListAsync(store, input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter, specification, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsStore>, List<WmsStoreDto>>(list);
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "WmsStore列表" : result.Count == 1 ? result.First()?.StoreCode : "WmsStore模版";
        return (sheets, fileName);
    }
    /// <summary>
    /// Checks the create or update dto asynchronous.
    /// </summary>
    /// <param name="input">The input.</param>
    protected Task CheckCreateOrUpdateDtoAsync(WmsStoreCreateOrUpdateDtoBase input)
    {
        Check.NotNull(input, nameof(input));
        Check.NotNullOrWhiteSpace(input.StoreCode, "编号", WmsStoreConsts.MaxCodeLength);
        Check.NotNullOrWhiteSpace(input.StoreName, "名称", WmsStoreConsts.MaxNameLength);
        Check.Length(input.Remark, "备注", WmsStoreConsts.MaxRemarkLength);
        return Task.CompletedTask;
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsAreaAutoMapperProfile.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
using AutoMapper;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsAreas;
using CMS.Plugin.HIAWms.Domain.WmsAreas;
using Volo.Abp.ObjectExtending;
namespace CMS.Plugin.HIAWms.Application.MapperProfiles;
/// <summary>
/// AutoMapper配置
/// </summary>
/// <seealso cref="AutoMapper.Profile" />
public class WmsAreaAutoMapperProfile : Profile
{
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsAreaAutoMapperProfile"/> class.
    /// </summary>
    public WmsAreaAutoMapperProfile()
    {
        /* You can configure your AutoMapper mapping configuration here.
         * Alternatively, you can split your mapping configurations
         * into multiple profile classes for a better organization. */
        CreateMap<WmsArea, WmsAreaDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<WmsAreaCreateDto, WmsArea>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<GetWmsAreasInput, WmsArea>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsContainerAutoMapperProfile.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
using AutoMapper;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainers;
using CMS.Plugin.HIAWms.Domain.WmsContainers;
using Volo.Abp.ObjectExtending;
namespace CMS.Plugin.HIAWms.Application.MapperProfiles;
/// <summary>
/// AutoMapper配置
/// </summary>
/// <seealso cref="AutoMapper.Profile" />
public class WmsContainerAutoMapperProfile : Profile
{
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsContainerAutoMapperProfile"/> class.
    /// </summary>
    public WmsContainerAutoMapperProfile()
    {
        /* You can configure your AutoMapper mapping configuration here.
         * Alternatively, you can split your mapping configurations
         * into multiple profile classes for a better organization. */
        CreateMap<WmsContainer, WmsContainerDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<WmsContainerCreateDto, WmsContainer>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<GetWmsContainersInput, WmsContainer>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsInOutStockRecordAutoMapperProfile.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
using AutoMapper;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockRecord;
using CMS.Plugin.HIAWms.Domain.WmsInOutStockRecord;
using Volo.Abp.ObjectExtending;
namespace CMS.Plugin.HIAWms.Application.MapperProfiles;
/// <summary>
/// å‡ºå…¥åº“记录表AutoMapper配置
/// </summary>
/// <seealso cref="AutoMapper.Profile" />
public class WmsInOutStockRecordAutoMapperProfile : Profile
{
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsInOutStockRecordAutoMapperProfile"/> class.
    /// </summary>
    public WmsInOutStockRecordAutoMapperProfile()
    {
        /* You can configure your AutoMapper mapping configuration here.
         * Alternatively, you can split your mapping configurations
         * into multiple profile classes for a better organization. */
        CreateMap<WmsInOutStockRecord, WmsInOutStockRecordDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<WmsInOutStockRecordCreateDto, WmsInOutStockRecord>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<GetWmsInOutStockRecordInput, WmsInOutStockRecord>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsMaterialAutoMapperProfile.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
using AutoMapper;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial;
using CMS.Plugin.HIAWms.Domain.WmsMaterial;
using Volo.Abp.ObjectExtending;
namespace CMS.Plugin.HIAWms.Application.MapperProfiles;
/// <summary>
/// AutoMapper配置
/// </summary>
/// <seealso cref="AutoMapper.Profile" />
public class WmsMaterialAutoMapperProfile : Profile
{
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsMaterialAutoMapperProfile"/> class.
    /// </summary>
    public WmsMaterialAutoMapperProfile()
    {
        /* You can configure your AutoMapper mapping configuration here.
         * Alternatively, you can split your mapping configurations
         * into multiple profile classes for a better organization. */
        CreateMap<WmsMaterial, WmsMaterialDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<WmsMaterialCreateDto, WmsMaterial>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<GetWmsMaterialInput, WmsMaterial>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsPlaceAutoMapperProfile.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
using AutoMapper;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlaces;
using CMS.Plugin.HIAWms.Domain.WmsPlaces;
using Volo.Abp.ObjectExtending;
namespace CMS.Plugin.HIAWms.Application.MapperProfiles;
/// <summary>
/// AutoMapper配置
/// </summary>
/// <seealso cref="AutoMapper.Profile" />
public class WmsPlaceAutoMapperProfile : Profile
{
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsPlaceAutoMapperProfile"/> class.
    /// </summary>
    public WmsPlaceAutoMapperProfile()
    {
        /* You can configure your AutoMapper mapping configuration here.
         * Alternatively, you can split your mapping configurations
         * into multiple profile classes for a better organization. */
        CreateMap<WmsPlace, WmsPlaceDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<WmsPlaceCreateDto, WmsPlace>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<GetWmsPlacesInput, WmsPlace>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application/MapperProfiles/WmsStoreAutoMapperProfile.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
using AutoMapper;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsStores;
using CMS.Plugin.HIAWms.Domain.WmsStores;
using Volo.Abp.ObjectExtending;
namespace CMS.Plugin.HIAWms.Application.MapperProfiles;
/// <summary>
/// AutoMapper配置
/// </summary>
/// <seealso cref="AutoMapper.Profile" />
public class WmsStoreAutoMapperProfile : Profile
{
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsStoreAutoMapperProfile"/> class.
    /// </summary>
    public WmsStoreAutoMapperProfile()
    {
        /* You can configure your AutoMapper mapping configuration here.
         * Alternatively, you can split your mapping configurations
         * into multiple profile classes for a better organization. */
        CreateMap<WmsStore, WmsStoreDto>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<WmsStoreCreateDto, WmsStore>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
        CreateMap<GetWmsStoresInput, WmsStore>(MemberList.None).MapExtraProperties(MappingPropertyDefinitionChecks.None);
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Application/Properties/AssemblyInfo.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2 @@
using System.Runtime.CompilerServices;
[assembly:InternalsVisibleToAttribute("CMS.Plugin.Application.Tests")]
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/CMS.Plugin.HIAWms.Domain.Shared.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
<Project Sdk="Microsoft.NET.Sdk">
    <Import Project="../../common.props" />
    <Import Project="../../configureawait.props" />
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
        <GenerateDocumentationFile>True</GenerateDocumentationFile>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="KissUtil" Version="1.0.1" />
        <PackageReference Include="Volo.Abp.Localization" Version="$(ABPPackageVersion)" />
        <PackageReference Include="Volo.Abp.Validation" Version="$(ABPPackageVersion)" />
    </ItemGroup>
    <ItemGroup>
        <EmbeddedResource Include="Localization\HIAWms\*.json" />
        <Content Remove="Localization\HIAWms\*.json" />
    </ItemGroup>
    <ItemGroup>
        <PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
        <PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="6.0.20" />
    </ItemGroup>
</Project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/CMSPluginDomainErrorCodes.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
namespace CMS.Plugin.HIAWms.Domain.Shared;
/// <summary>
/// é”™è¯¯ç¼–码定义
/// </summary>
public static class CMSPluginDomainErrorCodes
{
    /// <summary>
    /// The prefix
    /// </summary>
    private const string Prefix = "CMS.Plugin.HIAWms:";
    /* You can add your business exception error codes here, as constants */
    public const string NameAlreadyExists = Prefix + nameof(NameAlreadyExists);
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/CMSPluginDomainSharedModule.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
using CMS.Plugin.HIAWms.Domain.Shared.Localization;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.Validation;
using Volo.Abp.Validation.Localization;
using Volo.Abp.VirtualFileSystem;
namespace CMS.Plugin.HIAWms.Domain.Shared;
/// <summary>
/// é¢†åŸŸå…±äº«æ¨¡å—
/// </summary>
[DependsOn(typeof(AbpLocalizationModule),
    typeof(AbpValidationModule))]
public class CMSPluginDomainSharedModule : AbpModule
{
    /// <inheritdoc />
    public override void PreConfigureServices(ServiceConfigurationContext context)
    {
        CMSPluginModuleExtensionConfigurator.Configure();
    }
    /// <inheritdoc />
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        Configure<AbpVirtualFileSystemOptions>(options =>
        {
            options.FileSets.AddEmbedded<CMSPluginDomainSharedModule>();
        });
        Configure<AbpLocalizationOptions>(options =>
        {
            options.Resources
                .Add<HIAWmsResource>("en")
                .AddBaseTypes(typeof(AbpValidationResource))
                .AddVirtualJson("/Localization/HIAWms");
            options.DefaultResourceType = typeof(HIAWmsResource);
        });
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/CMSPluginModuleExtensionConfigurator.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,82 @@
using Volo.Abp.Threading;
namespace CMS.Plugin.HIAWms.Domain.Shared;
/// <summary>
/// æ¨¡å—扩展配置器
/// </summary>
public static class CMSPluginModuleExtensionConfigurator
{
    private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
    /// <summary>
    /// Configures this instance.
    /// </summary>
    public static void Configure()
    {
        OneTimeRunner.Run(() =>
        {
            ConfigureExistingProperties();
            ConfigureExtraProperties();
        });
    }
    /// <summary>
    /// Configures the existing properties.
    /// </summary>
    private static void ConfigureExistingProperties()
    {
        /* You can change max lengths for properties of the
         * entities defined in the modules used by your application.
         *
         * Example: Change user and role name max lengths
           IdentityUserConsts.MaxNameLength = 99;
           IdentityRoleConsts.MaxNameLength = 99;
         * Notice: It is not suggested to change property lengths
         * unless you really need it. Go with the standard values wherever possible.
         *
         * If you are using EF Core, you will need to run the add-migration command after your changes.
         */
    }
    /// <summary>
    /// Configures the extra properties.
    /// </summary>
    private static void ConfigureExtraProperties()
    {
        /* You can configure extra properties for the
         * entities defined in the modules used by your application.
         *
         * This class can be used to define these extra properties
         * with a high level, easy to use API.
         *
         * Example: Add a new property to the user entity of the identity module
           ObjectExtensionManager.Instance.Modules()
              .ConfigureIdentity(identity =>
              {
                  identity.ConfigureUser(user =>
                  {
                      user.AddOrUpdateProperty<string>( //property type: string
                          "SocialSecurityNumber", //property name
                          property =>
                          {
                              //validation rules
                              property.Attributes.Add(new RequiredAttribute());
                              property.Attributes.Add(new StringLengthAttribute(64) {MinimumLength = 4});
                              property.Configuration[IdentityModuleExtensionConsts.ConfigurationNames.AllowUserToEdit] = true;
                              //...other configurations for this property
                          }
                      );
                  });
              });
         * See the documentation for more:
         * https://docs.abp.io/en/abp/latest/Module-Entity-Extensions
         */
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/AreaStatusEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CMS.Plugin.HIAWms.Domain.Shared.Enums
{
    /// <summary>
    /// åº“区状态
    /// </summary>
    [Description("库区状态")]
    public enum AreaStatusEnum
    {
        /// <summary>
        /// æ­£å¸¸
        /// </summary>
        [Description("正常")]
        ZHEGNCHANGSHIYONG = 1,
        /// <summary>
        /// åœç”¨
        /// </summary>
        [Description("停用")]
        TINGYONG = 2
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/AreaTypeEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CMS.Plugin.HIAWms.Domain.Shared.Enums
{
    /// <summary>
    /// åº“区类型
    /// </summary>
    [Description("库区类型")]
    public enum AreaTypeEnum
    {
        /// <summary>
        /// ç«‹ä½“库
        /// </summary>
        [Description("立体库")]
        LITIKU = 1,
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/ContainerStatusEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CMS.Plugin.HIAWms.Domain.Shared.Enums
{
    /// <summary>
    /// æ‰˜ç›˜çŠ¶æ€
    /// </summary>
    [Description("托盘状态")]
    public enum ContainerStatusEnum
    {
        /// <summary>
        /// ç©ºé—²
        /// </summary>
        [Description("空闲")]
        KOUXIAN = 1,
        /// <summary>
        /// ç»„盘
        /// </summary>
        [Description("组盘")]
        ZUPANG = 2,
        /// <summary>
        /// åº“位
        /// </summary>
        [Description("库位")]
        KUWEI = 3,
        /// <summary>
        /// è™šæ‹Ÿåº“位
        /// </summary>
        [Description("虚拟库位")]
        XUNIKUWEI = 4,
        /// <summary>
        /// ç»„托
        /// </summary>
        [Description("组托")]
        ZUTUO = 5,
        /// <summary>
        /// å¼‚常
        /// </summary>
        [Description("异常")]
        EXCEPTION = 9,
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/ContainerTypeEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CMS.Plugin.HIAWms.Domain.Shared.Enums
{
    /// <summary>
    /// æ‰˜ç›˜ç±»åž‹
    /// </summary>
    [Description("托盘类型")]
    public enum ContainerTypeEnum
    {
        /// <summary>
        /// è‡ªåˆ¶ä»¶æ‰˜ç›˜
        /// </summary>
        [Description("自制件托盘")]
        ZIZHIJIAN = 1,
        /// <summary>
        /// å¤–协件托盘
        /// </summary>
        [Description("外协件托盘")]
        WAIXIEJIAN = 2,
        /// <summary>
        /// è™šæ‹Ÿæ‰˜ç›˜
        /// </summary>
        [Description("虚拟托盘")]
        XUNI = 3,
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/HIAWmsStatus.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
using System.ComponentModel;
namespace CMS.Plugin.HIAWms.Domain.Shared.Enums
{
    /// <summary>
    /// HIAWms状态
    /// </summary>
    public enum HIAWmsStatus : byte
    {
        /// <summary>
        /// æœªæ‰§è¡Œ
        /// </summary>
        [Description("未执行")]
        Initial = 0,
        /// <summary>
        /// æ‰§è¡Œä¸­
        /// </summary>
        [Description("执行中")]
        Excuting = 1,
        /// <summary>
        /// å·²å®Œæˆ
        /// </summary>
        [Description("已完成")]
        Completed = 4,
        /// <summary>
        /// å·²å¼ºåˆ¶å®Œæˆ
        /// </summary>
        [Description("已完成")]
        Finished = 5,
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/MaterialTypeEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CMS.Plugin.HIAWms.Domain.Shared.Enums
{
    /// <summary>
    /// ç‰©æ–™ç±»åž‹
    /// </summary>
    [Description("物料类型")]
    public enum MaterialTypeEnum
    {
        /// <summary>
        /// æˆå“
        /// </summary>
        [Description(" æˆå“")]
        FinishedGoods =1,
        /// <summary>
        /// åŠæˆå“
        /// </summary>
        [Description("半成品")]
        SemiFinishedGoods =2,
        /// <summary>
        /// åŽŸææ–™
        /// </summary>
        [Description("原材料")]
        RawMaterials =3,
        /// <summary>
        /// é™„ä»¶
        /// </summary>
        [Description(" é™„ä»¶")]
        Attachments =4
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/PlaceStatusEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CMS.Plugin.HIAWms.Domain.Shared.Enums
{
    /// <summary>
    /// åº“位状态
    /// </summary>
    [Description("库位状态")]
    public enum PlaceStatusEnum
    {
        /// <summary>
        /// ç©ºé—²
        /// </summary>
        [Description("空闲")]
        KONGXIAN = 1,
        /// <summary>
        /// å¾…å…¥
        /// </summary>
        [Description("待入")]
        DAIRU = 2,
        /// <summary>
        /// å­˜è´§
        /// </summary>
        [Description("存货")]
        CUNHUO = 3,
        /// <summary>
        /// å¾…出
        /// </summary>
        [Description("待出")]
        DAICHU = 4,
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/PlaceTypeEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CMS.Plugin.HIAWms.Domain.Shared.Enums
{
    /// <summary>
    /// åº“位类型
    /// </summary>
    [Description("库位类型")]
    public enum PlaceTypeEnum
    {
        /// <summary>
        /// åŽŸæ–™åº“ä½
        /// </summary>
        [Description("原料库位")]
        YUANLIAOKUWEI = 1,
        [Description("虚拟库位")]
        XUNIKUWEI = 2,
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/PurchaseTypeEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CMS.Plugin.HIAWms.Domain.Shared.Enums
{
    /// <summary>
    /// é‡‡è´­ç±»åž‹
    /// </summary>
    [Description("采购类型")]
    public enum PurchaseTypeEnum
    {
        /// <summary>
        /// /自制
        /// </summary>
        [Description("自制")]
        SelfMade = 1,
        /// <summary>
        /// é‡‡è´­
        /// </summary>
        [Description("采购")]
        Purchased = 2,
        /// <summary>
        /// å‡å¯
        /// </summary>
        [Description("均可")]
        Both = 3
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/SonTaskTypeEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CMS.Plugin.HIAWms.Domain.Shared.Enums
{
    /// <summary>
    /// å­ä»»åŠ¡ç±»åž‹
    /// </summary>
    [Description("子任务类型")]
    public enum SonTaskTypeEnum
    {
        /// <summary>
        /// è‡ªåŠ¨å…¥åº“
        /// </summary>
        [Description("自动入库")]
        ZDRUKU = 1,
        /// <summary>
        /// äººå·¥å…¥åº“
        /// </summary>
        [Description("人工入库")]
        RGRUKU = 2,
        /// <summary>
        /// äººå·¥å‡ºåº“
        /// </summary>
        [Description("人工出库")]
        RGCHUKU = 3,
        /// <summary>
        /// è‡ªåŠ¨å‡ºåº“
        /// </summary>
        [Description("自动出库")]
        ZDCHUKU = 4,
        /// <summary>
        /// ç©ºæ‰˜å‘¼å«
        /// </summary>
        [Description("空托呼叫")]
        KTHUJIOA = 5,
        /// <summary>
        /// å›žåº“
        /// </summary>
        [Description("回库")]
        HUIKU = 6,
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/StockTypeEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CMS.Plugin.HIAWms.Domain.Shared.Enums
{
    /// <summary>
    /// åº“存类型
    /// </summary>
    [Description("库存类型")]
    public enum StockTypeEnum
    {
        /// <summary>
        /// å…¥åº“
        /// </summary>
        [Description("入库")]
        InBound = 1,
        /// <summary>
        /// å‡ºåº“
        /// </summary>
        [Description("出库")]
        OutBound = 2,
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/TaskTypeEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CMS.Plugin.HIAWms.Domain.Shared.Enums
{
    /// <summary>
    /// ä»»åŠ¡ç±»åž‹
    /// </summary>
    [Description("任务类型")]
    public enum TaskTypeEnum
    {
        /// <summary>
        /// å‡ºåº“
        /// </summary>
        [Description("出库")]
        CHUKU = 1,
        /// <summary>
        /// å…¥åº“
        /// </summary>
        [Description("入库")]
        RUKU = 2,
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/WmsTaskStatus.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CMS.Plugin.HIAWms.Domain.Shared.Enums
{
    /// <summary>
    /// ä»»åŠ¡çŠ¶æ€
    /// </summary>
    [Description("任务状态")]
    public enum WmsTaskStatus
    {
        /// <summary>
        /// æœªæ‰§è¡Œ
        /// </summary>
        [Description("未执行")]
        WEIZHIXING = 1,
        /// <summary>
        /// å¾…执行
        /// </summary>
        [Description("待执行")]
        DAIZHIXINGZHONG = 2,
        /// <summary>
        /// æ‰§è¡Œä¸­
        /// </summary>
        [Description("执行中")]
        ZHIXINGZHONG = 3,
        /// <summary>
        /// å®Œæˆ
        /// </summary>
        [Description("完成")]
        WANCHENG = 4,
        /// <summary>
        /// å–消
        /// </summary>
        [Description("取消")]
        QUXIAO = 5
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Enums/YesNoEnum.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CMS.Plugin.HIAWms.Domain.Shared.Enums
{
    /// <summary>
    /// æ˜¯å¦é”å®š
    /// </summary>
    [Description("是否锁定")]
    public enum YesNoEnum
    {
        /// <summary>
        /// æ˜¯
        /// </summary>
        [Description("是")]
        Y = 1,
        /// <summary>
        /// å¦
        /// </summary>
        [Description("否")]
        N = 2
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/FodyWeavers.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
   <ConfigureAwait ContinueOnCapturedContext="false" />
</Weavers>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Localization/HIAWms/en.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
{
  "culture": "en",
    "texts": {
        "DisplayName:SCMS.AppSettings.HIAWms.PluginState": "HIAWms plugin state",
        "CMS.Plugin.HIAWms:NameAlreadyExists": "The '{0}' name already exists, please re-enter it !"
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Localization/HIAWms/zh-Hans.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,7 @@
{
    "culture": "zh-Hans",
    "texts": {
        "DisplayName:SCMS.AppSettings.HIAWms.PluginState": "HIAWms æ’件状态",
        "CMS.Plugin.HIAWms:NameAlreadyExists": "该'{0}'名称已存在,请重新输入!"
    }
  }
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Localization/HIAWmsResource.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
using Volo.Abp.Localization;
namespace CMS.Plugin.HIAWms.Domain.Shared.Localization;
/// <summary>
/// HIAWms本地化资源
/// </summary>
[LocalizationResourceName("HIAWms")]
public class HIAWmsResource
{
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Util/EnumHelper.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,84 @@
using KissUtil.Helpers;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp;
namespace CMS.Plugin.HIAWms.Domain.Shared.Util
{
    /// <summary>
    /// æžšä¸¾å¸®åŠ©ç±».
    /// </summary>
    public static class EnumHelper
    {
        /// <summary>
        /// èŽ·å–æžšä¸¾.
        /// </summary>
        /// <param name="enumName"> </param>
        /// <returns></returns>
        /// <exception cref="ArgumentException"></exception>
        public static List<EnumItem> GetEnumItems(string enumName)
        {
            // èŽ·å–å½“å‰ç¨‹åºé›†ä¸­çš„æ‰€æœ‰ç±»åž‹
            var enumType = AppDomain.CurrentDomain.GetAssemblies()
                .SelectMany(a => a.GetTypes())
                .FirstOrDefault(t => t.Name == enumName && t.IsEnum);
            if (enumType == null)
            {
                throw new UserFriendlyException($"枚举类型 {enumName} ä¸å­˜åœ¨");
            }
            return GetEnumItems(enumType);
        }
        /// <summary>
        /// èŽ·å–æžšä¸¾ç±»åž‹.
        /// </summary>
        /// <param name="enumType"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentException"></exception>
        public static List<EnumItem> GetEnumItems(Type enumType)
        {
            if (!enumType.IsEnum)
            {
                throw new UserFriendlyException("提供的类型不是枚举类型");
            }
            var result = new List<EnumItem>();
            var values = Enum.GetValues(enumType);
            foreach (var value in values)
            {
                var fieldInfo = enumType.GetField(value.ToString());
                var description = fieldInfo?
                    .GetCustomAttributes(typeof(DescriptionAttribute), false)
                    .FirstOrDefault() as DescriptionAttribute;
                result.Add(new EnumItem
                {
                    Value = (int)value,
                    Name = value.ToString(),
                    Description = description?.Description ?? value.ToString(),
                });
            }
            return result;
        }
    }
    /// <summary>
    /// æžšä¸¾æè¿°.
    /// </summary>
    public class EnumItem
    {
        public int Value { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Util/ExportHelper.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,59 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.ComponentModel;
using System.Reflection;
using System.Threading.Tasks;
namespace CMS.Plugin.HIAWms.Domain.Shared.Util
{
    /// <summary>
    /// å¯¼å‡ºå¸®åŠ©ç±».
    /// </summary>
    public static class ExportHelper
    {
        // é€šç”¨è½¬æ¢æ–¹æ³•(兼容 Func<T, Dictionary<string, object>>)
        public static Dictionary<string, object> ConvertToExportData<T>(T entity)
        {
            var dict = new Dictionary<string, object>();
            if (entity == null) return dict;
            foreach (var prop in typeof(T).GetProperties())
            {
                var value = prop.GetValue(entity);
                dict[prop.Name] = FormatValue(value);
            }
            return dict;
        }
        // æ‰¹é‡è½¬æ¢æ–¹æ³•
        public static List<Dictionary<string, object>> ConvertListToExportData<T>(IEnumerable<T> list)
        {
            return list.Select(ConvertToExportData).ToList();
        }
        private static object FormatValue(object value)
        {
            if (value == null) return string.Empty;
            // å¤„理枚举
            if (value is Enum enumValue)
                return GetEnumDescriptionUtil.GetEnumDescription(enumValue);
            // å¤„理布尔
            if (value is bool boolValue)
                return boolValue ? "是" : "否";
            return value;
        }
        private static string GetEnumDescription(Enum value)
        {
            var fieldInfo = value.GetType().GetField(value.ToString());
            var description = fieldInfo?
                .GetCustomAttributes(typeof(DescriptionAttribute), false)
                .FirstOrDefault() as DescriptionAttribute;
            return description?.Description ?? value.ToString();
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/Util/GetEnumDescriptionUtil.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace CMS.Plugin.HIAWms
{
    public class GetEnumDescriptionUtil
    {
        /// <summary>
        /// èŽ·å–æžšä¸¾çš„æè¿°
        /// </summary>
        /// <param name="enumValue"></param>
        /// <returns></returns>
        public static string GetEnumDescription(Enum enumValue)
        {
            string value = enumValue.ToString();
            if (string.IsNullOrWhiteSpace(value) || value == "0") return "";
            FieldInfo field = enumValue.GetType().GetField(value);
            object[] objs = field.GetCustomAttributes(typeof(DescriptionAttribute), false);  //获取描述属性
            if (objs == null || objs.Length == 0)  //当描述属性没有时,直接返回名称
                return value;
            DescriptionAttribute descriptionAttribute = (DescriptionAttribute)objs[0];
            return descriptionAttribute.Description;
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/WmsAreas/WmsAreaConsts.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
namespace CMS.Plugin.HIAWms.Domain.Shared.WmsAreas;
/// <summary>
/// WmsArea常量定义
/// </summary>
public static class WmsAreaConsts
{
    public const string CloneTag = "_副本";
    public static int MaxCodeLength { get; set; } = 64;
    public static int MaxNameLength { get; set; } = 64;
    public static int MaxRemarkLength { get; set; } = 256;
    public static int MaxAreaNoLength = 50;
    public static int MaxAreaNameLength = 100;
    public static int MaxAreaDescLength = 200;
    public static int MaxRedundantFieldLength = 100;
    public static int MaxStoreCodeLength = 50;
    public static int MaxStoreNameLength = 100;
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/WmsAreas/WmsAreaEto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
namespace CMS.Plugin.HIAWms.Domain.Shared.WmsAreas;
/// <summary>
/// WmsArea事件参数对象
/// </summary>
[Serializable]
public class WmsAreaEto
{
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsAreaEto"/> class.
    /// </summary>
    /// <param name="name">The name.</param>
    public WmsAreaEto(string name)
    {
        Name = name;
    }
    /// <summary>
    /// åç§°
    /// </summary>
    public string Name { get; }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/WmsContainers/WmsContainerConsts.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
namespace CMS.Plugin.HIAWms.Domain.Shared.WmsContainers;
/// <summary>
/// WmsContainer常量定义
/// </summary>
public static class WmsContainerConsts
{
    public const string CloneTag = "_副本";
    public static int MaxCodeLength { get; set; } = 64;
    public static int MaxNameLength { get; set; } = 64;
    public static int MaxRemarkLength { get; set; } = 256;
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/WmsContainers/WmsContainerEto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
namespace CMS.Plugin.HIAWms.Domain.Shared.WmsContainers;
/// <summary>
/// WmsContainer事件参数对象
/// </summary>
[Serializable]
public class WmsContainerEto
{
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsContainerEto"/> class.
    /// </summary>
    /// <param name="name">The name.</param>
    public WmsContainerEto(string name)
    {
        Name = name;
    }
    /// <summary>
    /// åç§°
    /// </summary>
    public string Name { get; }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/WmsMaterial/WmsMaterialConsts.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
namespace CMS.Plugin.HIAWms.Domain.Shared.WmsMaterial;
/// <summary>
/// WmsMaterial常量定义
/// </summary>
public static class WmsMaterialConsts
{
    public const string CloneTag = "_副本";
    public static int MaxCodeLength { get; set; } = 64;
    public static int MaxNameLength { get; set; } = 64;
    public static int MaxRemarkLength { get; set; } = 256;
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/WmsMaterial/WmsMaterialEto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
namespace CMS.Plugin.HIAWms.Domain.Shared.WmsMaterial;
/// <summary>
/// WmsMaterial事件参数对象
/// </summary>
[Serializable]
public class WmsMaterialEto
{
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsMaterialEto"/> class.
    /// </summary>
    /// <param name="name">The name.</param>
    public WmsMaterialEto(string name)
    {
        Name = name;
    }
    /// <summary>
    /// åç§°
    /// </summary>
    public string Name { get; }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/WmsPlaces/WmsPlaceConsts.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
namespace CMS.Plugin.HIAWms.Domain.Shared.WmsPlaces;
/// <summary>
/// WmsPlace常量定义
/// </summary>
public static class WmsPlaceConsts
{
    public const string CloneTag = "_副本";
    public static int MaxCodeLength { get; set; } = 64;
    public static int MaxNameLength { get; set; } = 64;
    public static int MaxRemarkLength { get; set; } = 256;
    public const int MaxPlaceNoLength = 50;
    public const int MaxAreaCodeLength = 50;
    public const int MaxRedundantFieldLength = 100;
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/WmsPlaces/WmsPlaceEto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
namespace CMS.Plugin.HIAWms.Domain.Shared.WmsPlaces;
/// <summary>
/// WmsPlace事件参数对象
/// </summary>
[Serializable]
public class WmsPlaceEto
{
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsPlaceEto"/> class.
    /// </summary>
    /// <param name="name">The name.</param>
    public WmsPlaceEto(string name)
    {
        Name = name;
    }
    /// <summary>
    /// åç§°
    /// </summary>
    public string Name { get; }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/WmsStores/WmsStoreConsts.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
namespace CMS.Plugin.HIAWms.Domain.Shared.WmsStores;
/// <summary>
/// WmsStore常量定义
/// </summary>
public static class WmsStoreConsts
{
    public const string CloneTag = "_副本";
    public static int MaxCodeLength { get; set; } = 64;
    public static int MaxNameLength { get; set; } = 64;
    public static int MaxRemarkLength { get; set; } = 256;
    public const int MaxStoreCodeLength = 50;
    public const int MaxStoreNameLength = 100;
    public const int MaxRedundantFieldLength = 100;
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain.Shared/WmsStores/WmsStoreEto.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
namespace CMS.Plugin.HIAWms.Domain.Shared.WmsStores;
/// <summary>
/// WmsStore事件参数对象
/// </summary>
[Serializable]
public class WmsStoreEto
{
    /// <summary>
    /// Initializes a new instance of the <see cref="WmsStoreEto"/> class.
    /// </summary>
    /// <param name="name">The name.</param>
    public WmsStoreEto(string name)
    {
        Name = name;
    }
    /// <summary>
    /// åç§°
    /// </summary>
    public string Name { get; }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/CMS.Plugin.HIAWms.Domain.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
<Project Sdk="Microsoft.NET.Sdk">
    <Import Project="../../common.props" />
    <Import Project="../../configureawait.props" />
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Volo.Abp.Ddd.Domain" Version="$(ABPPackageVersion)" />
        <PackageReference Include="Volo.Abp.Settings" Version="$(ABPPackageVersion)" />
        <PackageReference Include="Volo.Abp.Caching" Version="$(ABPPackageVersion)" />
    </ItemGroup>
    <ItemGroup>
        <ProjectReference Include="..\CMS.Plugin.HIAWms.Abstractions\CMS.Plugin.HIAWms.Abstractions.csproj" />
        <ProjectReference Include="..\CMS.Plugin.HIAWms.Domain.Shared\CMS.Plugin.HIAWms.Domain.Shared.csproj" />
    </ItemGroup>
    <ItemGroup>
      <Reference Include="CmsQueryExtensions">
        <HintPath>..\..\..\..\..\CommonDLL\CmsQueryExtensions.dll</HintPath>
      </Reference>
    </ItemGroup>
</Project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/CMSPluginDbProperties.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
namespace CMS.Plugin.HIAWms.Domain;
/// <summary>
/// æ•°æ®åº“属性定义
/// </summary>
public static class CMSPluginDbProperties
{
    /// <summary>
    /// Gets or sets the database table prefix.
    /// </summary>
    public static string DbTablePrefix { get; set; } = "SCMS";
    /// <summary>
    /// Gets or sets the database schema.
    /// </summary>
    public static string DbSchema { get; set; }
    /// <summary>
    /// The connection string name
    /// </summary>
    public const string ConnectionStringName = "HIAWms";
    /// <summary>
    /// The migrations history table
    /// </summary>
    public const string MigrationsHistoryTable = "__EFMigrationsHistoryForHIAWms";
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/CMSPluginDomainModule.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
using CMS.Plugin.HIAWms.Domain.Shared;
using Volo.Abp.Caching;
using Volo.Abp.Domain;
using Volo.Abp.Modularity;
using Volo.Abp.Settings;
namespace CMS.Plugin.HIAWms.Domain;
/// <summary>
/// é¢†åŸŸæ¨¡å—
/// </summary>
[DependsOn(
    typeof(CMSPluginDomainSharedModule),
    typeof(AbpSettingsModule),
    typeof(AbpDddDomainModule),
    typeof(AbpCachingModule)
)]
public class CMSPluginDomainModule : AbpModule
{
    /// <inheritdoc />
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/Data/CMSPluginDbMigrationService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,211 @@
using Microsoft.Extensions.Logging;
using System.Diagnostics;
using System.Runtime.InteropServices;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
namespace CMS.Plugin.HIAWms.Domain.Data;
/// <summary>
/// æ•°æ®åº“迁移服务
/// </summary>
public class CMSPluginDbMigrationService : ITransientDependency
{
    private readonly IDataSeeder _dataSeeder;
    private readonly IEnumerable<ICMSPluginDbSchemaMigrator> _dbSchemaMigrators;
    private readonly ILogger<CMSPluginDbMigrationService> _logger;
    /// <summary>
    /// Initializes a new instance of the <see cref="CMSPluginDbMigrationService"/> class.
    /// </summary>
    /// <param name="dataSeeder">The data seeder.</param>
    /// <param name="dbSchemaMigrators">The database schema migrators.</param>
    /// <param name="logger">The logger.</param>
    public CMSPluginDbMigrationService(IDataSeeder dataSeeder,
        IEnumerable<ICMSPluginDbSchemaMigrator> dbSchemaMigrators, ILogger<CMSPluginDbMigrationService> logger)
    {
        _dataSeeder = dataSeeder;
        _dbSchemaMigrators = dbSchemaMigrators;
        _logger = logger;
    }
    /// <summary>
    /// Migrates the asynchronous.
    /// </summary>
    public async Task MigrateAsync()
    {
        var initialMigrationAdded = AddInitialMigrationIfNotExist();
        if (initialMigrationAdded)
        {
            return;
        }
        _logger.LogDebug("Started database migrations...");
        await MigrateDatabaseSchemaAsync();
        await SeedDataAsync();
        _logger.LogDebug($"Successfully completed host database migrations.");
        _logger.LogDebug("You can safely end this process...");
    }
    /// <summary>
    /// Migrates the database schema asynchronous.
    /// </summary>
    private async Task MigrateDatabaseSchemaAsync()
    {
        _logger.LogDebug($"Migrating schema for database...");
        foreach (var migrator in _dbSchemaMigrators)
        {
            await migrator.MigrateAsync();
        }
    }
    /// <summary>
    /// Seeds the data asynchronous.
    /// </summary>
    private async Task SeedDataAsync()
    {
        _logger.LogDebug($"Executing database seed...");
        await _dataSeeder.SeedAsync(new DataSeedContext().WithProperty(CMSPluginDbProperties.ConnectionStringName, CMSPluginDbProperties.ConnectionStringName));
    }
    /// <summary>
    /// Adds the initial migration if not exist.
    /// </summary>
    /// <returns></returns>
    private bool AddInitialMigrationIfNotExist()
    {
        try
        {
            if (!DbMigrationsProjectExists())
            {
                return false;
            }
        }
        catch (Exception)
        {
            return false;
        }
        try
        {
            if (!MigrationsFolderExists())
            {
                AddInitialMigration();
                return true;
            }
            else
            {
                return false;
            }
        }
        catch (Exception e)
        {
            _logger.LogWarning("Couldn't determinate if any migrations exist : " + e.Message);
            return false;
        }
    }
    /// <summary>
    /// Databases the migrations project exists.
    /// </summary>
    /// <returns></returns>
    private bool DbMigrationsProjectExists()
    {
        var dbMigrationsProjectFolder = GetEntityFrameworkCoreProjectFolderPath();
        return dbMigrationsProjectFolder != null;
    }
    /// <summary>
    /// Migrationses the folder exists.
    /// </summary>
    /// <returns></returns>
    private bool MigrationsFolderExists()
    {
        var dbMigrationsProjectFolder = GetEntityFrameworkCoreProjectFolderPath();
        return Directory.Exists(Path.Combine(dbMigrationsProjectFolder, "Migrations"));
    }
    /// <summary>
    /// Adds the initial migration.
    /// </summary>
    /// <exception cref="System.Exception">Couldn't run ABP CLI...</exception>
    private void AddInitialMigration()
    {
        _logger.LogDebug("Creating initial migration...");
        string argumentPrefix;
        string fileName;
        if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX) || RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
        {
            argumentPrefix = "-c";
            fileName = "/bin/bash";
        }
        else
        {
            argumentPrefix = "/C";
            fileName = "cmd.exe";
        }
        var procStartInfo = new ProcessStartInfo(fileName,
            $"{argumentPrefix} \"abp create-migration-and-run-migrator \"{GetEntityFrameworkCoreProjectFolderPath()}\"\""
        );
        try
        {
            Process.Start(procStartInfo);
        }
        catch (Exception)
        {
            throw new Exception("Couldn't run ABP CLI...");
        }
    }
    /// <summary>
    /// Gets the entity framework core project folder path.
    /// </summary>
    /// <returns></returns>
    /// <exception cref="System.Exception">Solution folder not found!</exception>
    private string GetEntityFrameworkCoreProjectFolderPath()
    {
        var slnDirectoryPath = GetSolutionDirectoryPath();
        if (slnDirectoryPath == null)
        {
            throw new Exception("Solution folder not found!");
        }
        var srcDirectoryPath = Path.Combine(slnDirectoryPath, "src");
        return Directory.GetDirectories(srcDirectoryPath)
            .FirstOrDefault(d => d.EndsWith(".EntityFrameworkCore"));
    }
    /// <summary>
    /// Gets the solution directory path.
    /// </summary>
    /// <returns></returns>
    private string GetSolutionDirectoryPath()
    {
        var currentDirectory = new DirectoryInfo(Directory.GetCurrentDirectory());
        while (Directory.GetParent(currentDirectory.FullName) != null)
        {
            currentDirectory = Directory.GetParent(currentDirectory.FullName);
            if (Directory.GetFiles(currentDirectory.FullName).FirstOrDefault(f => f.EndsWith(".sln")) != null)
            {
                return currentDirectory.FullName;
            }
        }
        return null;
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/Data/ICMSPluginDapperRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
using System.Data;
using Volo.Abp.DependencyInjection;
namespace CMS.Plugin.HIAWms.Domain.Data;
/// <summary>
/// Dapper仓储
/// </summary>
public interface ICMSPluginDapperRepository : ITransientDependency
{
    /// <summary>
    /// Gets the database connection asynchronous.
    /// </summary>
    /// <returns></returns>
    Task<IDbConnection> GetDbConnectionAsync();
    /// <summary>
    /// Gets the database transaction asynchronous.
    /// </summary>
    /// <returns></returns>
    Task<IDbTransaction> GetDbTransactionAsync();
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/Data/ICMSPluginDbSchemaMigrator.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,12 @@
namespace CMS.Plugin.HIAWms.Domain.Data;
/// <summary>
/// æ•°æ®åº“架构迁移器
/// </summary>
public interface ICMSPluginDbSchemaMigrator
{
    /// <summary>
    /// Migrates the asynchronous.
    /// </summary>
    Task MigrateAsync();
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/Data/NullCMSPluginDbSchemaMigrator.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
using Volo.Abp.DependencyInjection;
namespace CMS.Plugin.HIAWms.Domain.Data;
/// <summary>
/// This is used if database provider does't define
///  ICMSDbSchemaMigrator implementation.
/// </summary>
public class NullCMSPluginDbSchemaMigrator : ICMSPluginDbSchemaMigrator, ITransientDependency
{
    /// <inheritdoc />
    public Task MigrateAsync()
    {
        return Task.CompletedTask;
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/EventHandlers/WmsAreaEventHandler.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using CMS.Plugin.HIAWms.Domain.Shared.WmsAreas;
using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus.Distributed;
namespace CMS.Plugin.HIAWms.Domain.EventHandlers;
/// <summary>
/// WmsArea事件处理程序
/// </summary>
public class WmsAreaEventHandler : IDistributedEventHandler<WmsAreaEto>, ITransientDependency
{
    /// <inheritdoc />
    public Task HandleEventAsync(WmsAreaEto eventData)
    {
        return Task.CompletedTask;
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/EventHandlers/WmsContainerEventHandler.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using CMS.Plugin.HIAWms.Domain.Shared.WmsContainers;
using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus.Distributed;
namespace CMS.Plugin.HIAWms.Domain.EventHandlers;
/// <summary>
/// WmsContainer事件处理程序
/// </summary>
public class WmsContainerEventHandler : IDistributedEventHandler<WmsContainerEto>, ITransientDependency
{
    /// <inheritdoc />
    public Task HandleEventAsync(WmsContainerEto eventData)
    {
        return Task.CompletedTask;
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/EventHandlers/WmsMaterialEventHandler.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using CMS.Plugin.HIAWms.Domain.Shared.WmsMaterial;
using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus.Distributed;
namespace CMS.Plugin.HIAWms.Domain.EventHandlers;
/// <summary>
/// WmsMaterial事件处理程序
/// </summary>
public class WmsMaterialEventHandler : IDistributedEventHandler<WmsMaterialEto>, ITransientDependency
{
    /// <inheritdoc />
    public Task HandleEventAsync(WmsMaterialEto eventData)
    {
        return Task.CompletedTask;
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/EventHandlers/WmsPlaceEventHandler.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using CMS.Plugin.HIAWms.Domain.Shared.WmsPlaces;
using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus.Distributed;
namespace CMS.Plugin.HIAWms.Domain.EventHandlers;
/// <summary>
/// WmsPlace事件处理程序
/// </summary>
public class WmsPlaceEventHandler : IDistributedEventHandler<WmsPlaceEto>, ITransientDependency
{
    /// <inheritdoc />
    public Task HandleEventAsync(WmsPlaceEto eventData)
    {
        return Task.CompletedTask;
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/EventHandlers/WmsStoreEventHandler.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
using CMS.Plugin.HIAWms.Domain.Shared.WmsStores;
using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus.Distributed;
namespace CMS.Plugin.HIAWms.Domain.EventHandlers;
/// <summary>
/// WmsStore事件处理程序
/// </summary>
public class WmsStoreEventHandler : IDistributedEventHandler<WmsStoreEto>, ITransientDependency
{
    /// <inheritdoc />
    public Task HandleEventAsync(WmsStoreEto eventData)
    {
        return Task.CompletedTask;
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/FodyWeavers.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
   <ConfigureAwait ContinueOnCapturedContext="false" />
</Weavers>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/Properties/AssemblyInfo.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
using System.Runtime.CompilerServices;
[assembly:InternalsVisibleToAttribute("CMS.Plugin.Domain.Tests")]
[assembly:InternalsVisibleToAttribute("CMS.Plugin.TestBase")]
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/Settings/CMSPluginSettingDefinitionProvider.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
using CMS.Plugin.HIAWms.Abstractions;
using CMS.Plugin.HIAWms.Domain.Shared.Localization;
using Volo.Abp.Localization;
using Volo.Abp.Settings;
namespace CMS.Plugin.HIAWms.Domain.Settings;
/// <summary>
/// è®¾ç½®å®šä¹‰æä¾›ç¨‹åº
/// </summary>
public class CMSPluginSettingDefinitionProvider : SettingDefinitionProvider
{
    public override void Define(ISettingDefinitionContext context)
    {
        context.Add(new SettingDefinition(CMSPluginHIAWmsSettings.PluginState, "1", L($"DisplayName:{CMSPluginHIAWmsSettings.PluginState}"), isInherited: true));
    }
    /// <summary>
    /// ls the specified name.
    /// </summary>
    /// <param name="name">The name.</param>
    /// <returns></returns>
    private static LocalizableString L(string name)
    {
        return LocalizableString.Create<HIAWmsResource>(name);
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsAreas/IWmsAreaRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Specifications;
namespace CMS.Plugin.HIAWms.Domain.WmsAreas;
/// <summary>
/// WmsArea仓储
/// </summary>
public interface IWmsAreaRepository : IBasicRepository<WmsArea, Guid>
{
    /// <summary>
    /// Finds the by name asynchronous.
    /// </summary>
    /// <param name="name">The name.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<WmsArea> FindByNameAsync(string name, CancellationToken cancellationToken = default);
    /// <summary>
    /// Names the exist asynchronous.
    /// </summary>
    /// <param name="name">The name.</param>
    /// <param name="id">The identifier.</param>
    /// <returns></returns>
    Task<bool> NameExistAsync(string name, Guid? id = null);
    /// <summary>
    /// Gets the maximum sort asynchronous.
    /// </summary>
    /// <returns></returns>
    Task<int> GetMaxSortAsync();
    /// <summary>
    /// Gets the list asynchronous.
    /// </summary>
    /// <param name="sorting">The sorting.</param>
    /// <param name="maxResultCount">The maximum result count.</param>
    /// <param name="skipCount">The skip count.</param>
    /// <param name="filter">The filter.</param>
    /// <param name="specification">The specification.</param>
    /// <param name="includeDetails">if set to <c>true</c> [include details].</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<List<WmsArea>> GetListAsync(WmsArea? area, string sorting = null, int maxResultCount = int.MaxValue,  int skipCount = 0, string filter = null, Specification<WmsArea> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default);
    /// <summary>
    /// èŽ·å–åº“åŒºåˆ—è¡¨
    /// </summary>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<List<WmsArea>> GetListForSelectAsync(CancellationToken cancellationToken = default);
    /// <summary>
    /// Gets the count asynchronous.
    /// </summary>
    /// <param name="filter">The filter.</param>
    /// <param name="specification">The specification.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<long> GetCountAsync(WmsArea? area, string filter = null, Specification<WmsArea> specification = null, CancellationToken cancellationToken = default);
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsAreas/WmsArea.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,91 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CMS.Plugin.HIAWms.Domain.Shared.WmsAreas;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using System.ComponentModel.DataAnnotations;
using Volo.Abp;
using Volo.Abp.Domain.Entities.Auditing;
namespace CMS.Plugin.HIAWms.Domain.WmsAreas
{
    /// <summary>
    /// WmsArea
    /// </summary>
    public class WmsArea : FullAuditedAggregateRoot<Guid>
    {
        /// <summary>
        /// åº“区编号
        /// </summary>
        public string AreaNo { get; set; }
        /// <summary>
        /// åº“区名称
        /// </summary>
        public string AreaName { get; set; }
        /// <summary>
        /// æè¿°
        /// </summary>
        public string? AreaDesc { get; set; }
        /// <summary>
        /// åº“区状态
        /// </summary>
        public AreaStatusEnum AreaStatus { get; set; }
        /// <summary>
        /// åº“区类型
        /// </summary>
        public AreaTypeEnum AreaType { get; set; }
        /// <summary>
        /// å†—余字段1 - é¢„留扩展用途
        /// </summary>
        public string RedundantField1 { get; set; }
        /// <summary>
        /// å†—余字段2 - é¢„留扩展用途
        /// </summary>
        public string RedundantField2 { get; set; }
        /// <summary>
        /// å†—余字段3 - é¢„留扩展用途
        /// </summary>
        public string RedundantField3 { get; set; }
        /// <summary>
        /// ä»“库代码
        /// </summary>
        public string? StoreCode { get; set; }
        /// <summary>
        /// ä»“库名称
        /// </summary>
        public string? StoreName { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        public virtual int Sort { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public virtual string Remark { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get; set; }
        /// <summary>
        /// Adjusts the sort.
        /// </summary>
        /// <param name="sort">The sort.</param>
        public void AdjustSort(int sort)
        {
            Sort = sort;
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsAreas/WmsAreaDataSeedContributor.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Guids;
using Volo.Abp.Uow;
namespace CMS.Plugin.HIAWms.Domain.WmsAreas
{
    /// <summary>
    /// WmsArea种子数据提供程序
    /// </summary>
    public class WmsAreaDataSeedContributor : IDataSeedContributor, ITransientDependency
    {
        private readonly IUnitOfWorkManager _unitOfWorkManager;
        private readonly IWmsAreaRepository _wmsareaRepository;
        private readonly IGuidGenerator _guidGenerator;
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsAreaDataSeedContributor"/> class.
        /// </summary>
        /// <param name="unitOfWorkManager">The unit of work manager.</param>
        /// <param name="guidGenerator">The unique identifier generator.</param>
        /// <param name="wmsareaRepository">The work section repository.</param>
        public WmsAreaDataSeedContributor(IUnitOfWorkManager unitOfWorkManager,  IGuidGenerator guidGenerator, IWmsAreaRepository wmsareaRepository)
        {
            _unitOfWorkManager = unitOfWorkManager;
            _wmsareaRepository = wmsareaRepository;
            _guidGenerator = guidGenerator;
        }
        /// <inheritdoc />
        public async Task SeedAsync(DataSeedContext context)
        {
            if (context.Properties.ContainsKey(CMSPluginDbProperties.ConnectionStringName) && context.Properties[CMSPluginDbProperties.ConnectionStringName]?.ToString() == CMSPluginDbProperties.ConnectionStringName)
            {
                try
                {
                    //using var unitofWork = _unitOfWorkManager.Begin(requiresNew: true);
                    //await unitofWork.SaveChangesAsync();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
            if (context.Properties.ContainsKey("SeedTestData") && context.Properties["SeedTestData"]?.ToString() == "SeedTestData")
            {
                try
                {
                    await SeedWmsAreaDataAsync();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
        }
        /// <summary>
        /// Seeds the work section data asynchronous.
        /// </summary>
        private async Task SeedWmsAreaDataAsync()
        {
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsAreas/WmsAreaSpecification.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
using System.Linq.Expressions;
namespace CMS.Plugin.HIAWms.Domain.WmsAreas
{
    /// <summary>
    /// WmsArea规约
    /// </summary>
    public class WmsAreaSpecification : Volo.Abp.Specifications.Specification<WmsArea>
    {
        private readonly string _areaCode;
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsAreaSpecification"/> class.
        /// </summary>
        public WmsAreaSpecification()
        {
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsAreaSpecification"/> class.
        /// </summary>
        /// <param name="areaCode">The name.</param>
        public WmsAreaSpecification(string areaCode = null)
        {
            _areaCode = areaCode;
        }
        /// <inheritdoc />
        public override Expression<Func<WmsArea, bool>> ToExpression()
        {
            Expression<Func<WmsArea, bool>> expression = c => 1 == 1;
            if (_areaCode != null)
            {
                expression = expression.And(c => c.AreaNo == _areaCode);
            }
            return expression;
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsContainers/IWmsContainerRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Specifications;
namespace CMS.Plugin.HIAWms.Domain.WmsContainers;
/// <summary>
/// WmsContainer仓储
/// </summary>
public interface IWmsContainerRepository : IBasicRepository<WmsContainer, Guid>
{
    /// <summary>
    /// Finds the by name asynchronous.
    /// </summary>
    /// <param name="name">The name.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<WmsContainer> FindByNameAsync(string name, CancellationToken cancellationToken = default);
    /// <summary>
    /// Names the exist asynchronous.
    /// </summary>
    /// <param name="name">The name.</param>
    /// <param name="id">The identifier.</param>
    /// <returns></returns>
    Task<bool> NameExistAsync(string name, Guid? id = null);
    /// <summary>
    /// Gets the maximum sort asynchronous.
    /// </summary>
    /// <returns></returns>
    Task<int> GetMaxSortAsync();
    /// <summary>
    /// Gets the list asynchronous.
    /// </summary>
    /// <param name="sorting">The sorting.</param>
    /// <param name="maxResultCount">The maximum result count.</param>
    /// <param name="skipCount">The skip count.</param>
    /// <param name="filter">The filter.</param>
    /// <param name="specification">The specification.</param>
    /// <param name="includeDetails">if set to <c>true</c> [include details].</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<List<WmsContainer>> GetListAsync(WmsContainer? container, string sorting = null, int maxResultCount = int.MaxValue,  int skipCount = 0, string filter = null, Specification<WmsContainer> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default);
    /// <summary>
    /// Gets the count asynchronous.
    /// </summary>
    /// <param name="filter">The filter.</param>
    /// <param name="specification">The specification.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<long> GetCountAsync(WmsContainer? container, string filter = null, Specification<WmsContainer> specification = null, CancellationToken cancellationToken = default);
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsContainers/WmsContainer.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,117 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CMS.Plugin.HIAWms.Domain.Shared.WmsContainers;
using Volo.Abp;
using Volo.Abp.Domain.Entities.Auditing;
namespace CMS.Plugin.HIAWms.Domain.WmsContainers
{
    /// <summary>
    /// WmsContainer
    /// </summary>
    public class WmsContainer : FullAuditedAggregateRoot<Guid>
    {
        /// <summary>
        /// ID
        /// </summary>
        public Guid Id { get; set; }
        /// <summary>
        /// æ‰˜ç›˜ç¼–号
        /// </summary>
        public string ContainerNo { get; set; }
        /// <summary>
        /// æ‰˜ç›˜ç±»åž‹
        /// </summary>
        public ContainerTypeEnum ContainerType { get; set; }
        /// <summary>
        /// æ‰˜ç›˜çŠ¶æ€
        /// </summary>
        public ContainerStatusEnum ContainerStatus { get; set; }
        /// <summary>
        /// é•¿åº¦
        /// </summary>
        public decimal? SpecLength { get; set; }
        /// <summary>
        /// å®½åº¦
        /// </summary>
        public decimal? SpecWidth { get; set; }
        /// <summary>
        /// é«˜åº¦
        /// </summary>
        public decimal? SpecHeight { get; set; }
        /// <summary>
        /// é™é•¿
        /// </summary>
        public decimal? LimitLength { get; set; }
        /// <summary>
        /// é™å®½
        /// </summary>
        public decimal? LimitWidth { get; set; }
        /// <summary>
        /// é™é«˜
        /// </summary>
        public decimal? LimitHeight { get; set; }
        /// <summary>
        /// è½½é‡ä¸Šé™
        /// </summary>
        public decimal? MaxWeight { get; set; }
        /// <summary>
        /// å¼‚常数量
        /// </summary>
        public int? ExceptionNumber { get; set; }
        /// <summary>
        ///物料数量
        /// </summary>
        public int? MaterialNumber { get; set; }
        /// <summary>
        /// å†—余字段1 - é¢„留扩展用途
        /// </summary>
        public string RedundantField1 { get; set; }
        /// <summary>
        /// å†—余字段2 - é¢„留扩展用途
        /// </summary>
        public string RedundantField2 { get; set; }
        /// <summary>
        /// å†—余字段3 - é¢„留扩展用途
        /// </summary>
        public string RedundantField3 { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        public virtual int Sort { get;  set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public virtual string Remark { get;  set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get;  set; }
        /// <summary>
        /// Adjusts the sort.
        /// </summary>
        /// <param name="sort">The sort.</param>
        public void AdjustSort(int sort)
        {
            Sort = sort;
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsContainers/WmsContainerDataSeedContributor.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Guids;
using Volo.Abp.Uow;
namespace CMS.Plugin.HIAWms.Domain.WmsContainers
{
    /// <summary>
    /// WmsContainer种子数据提供程序
    /// </summary>
    public class WmsContainerDataSeedContributor : IDataSeedContributor, ITransientDependency
    {
        private readonly IUnitOfWorkManager _unitOfWorkManager;
        private readonly IWmsContainerRepository _wmscontainerRepository;
        private readonly IGuidGenerator _guidGenerator;
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsContainerDataSeedContributor"/> class.
        /// </summary>
        /// <param name="unitOfWorkManager">The unit of work manager.</param>
        /// <param name="guidGenerator">The unique identifier generator.</param>
        /// <param name="wmscontainerRepository">The work section repository.</param>
        public WmsContainerDataSeedContributor(IUnitOfWorkManager unitOfWorkManager,  IGuidGenerator guidGenerator, IWmsContainerRepository wmscontainerRepository)
        {
            _unitOfWorkManager = unitOfWorkManager;
            _wmscontainerRepository = wmscontainerRepository;
            _guidGenerator = guidGenerator;
        }
        /// <inheritdoc />
        public async Task SeedAsync(DataSeedContext context)
        {
            if (context.Properties.ContainsKey(CMSPluginDbProperties.ConnectionStringName) && context.Properties[CMSPluginDbProperties.ConnectionStringName]?.ToString() == CMSPluginDbProperties.ConnectionStringName)
            {
                try
                {
                    //using var unitofWork = _unitOfWorkManager.Begin(requiresNew: true);
                    //await unitofWork.SaveChangesAsync();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
            if (context.Properties.ContainsKey("SeedTestData") && context.Properties["SeedTestData"]?.ToString() == "SeedTestData")
            {
                try
                {
                    await SeedWmsContainerDataAsync();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
        }
        /// <summary>
        /// Seeds the work section data asynchronous.
        /// </summary>
        private async Task SeedWmsContainerDataAsync()
        {
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsContainers/WmsContainerSpecification.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
using System.Linq.Expressions;
namespace CMS.Plugin.HIAWms.Domain.WmsContainers
{
    /// <summary>
    /// WmsContainer规约
    /// </summary>
    public class WmsContainerSpecification : Volo.Abp.Specifications.Specification<WmsContainer>
    {
        private readonly string _containerNo;
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsContainerSpecification"/> class.
        /// </summary>
        public WmsContainerSpecification()
        {
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsContainerSpecification"/> class.
        /// </summary>
        /// <param name="containerNo">The name.</param>
        public WmsContainerSpecification(string containerNo = null)
        {
            _containerNo = containerNo;
        }
        /// <inheritdoc />
        public override Expression<Func<WmsContainer, bool>> ToExpression()
        {
            Expression<Func<WmsContainer, bool>> expression = c => 1 == 1;
            if (_containerNo != null)
            {
                expression = expression.And(c => c.ContainerNo == _containerNo);
            }
            return expression;
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsInOutStockRecord/IWmsInOutStockRecordRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp.Domain.Repositories;
namespace CMS.Plugin.HIAWms.Domain.WmsInOutStockRecord;
/// <summary>
/// å‡ºå…¥åº“记录表仓储
/// </summary>
public interface IWmsInOutStockRecordRepository : IBasicRepository<WmsInOutStockRecord, Guid>
{
    /// <summary>
    /// æŒ‰ç…§åç§°æŸ¥æ‰¾å‡ºå…¥åº“记录表
    /// </summary>
    /// <param name="name"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<WmsInOutStockRecord> 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<WmsInOutStockRecord>> GetListAsync(FunReturnResultModel<Expression<Func<WmsInOutStockRecord, 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<WmsInOutStockRecord, bool>>> whereConditions, CancellationToken cancellationToken = default);
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsInOutStockRecord/WmsInOutStockRecord.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,95 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Domain.Entities.Auditing;
namespace CMS.Plugin.HIAWms.Domain.WmsInOutStockRecord
{
    /// <summary>
    /// å‡ºå…¥åº“记录.
    /// </summary>
    public class WmsInOutStockRecord : FullAuditedAggregateRoot<Guid>
    {
        /// <summary>
        /// å•据编号
        /// </summary>
        public string OrderNo { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        public string? MaterialName { get; set; }
        /// <summary>
        /// ç‰©æ–™ä»¶å·
        /// </summary>
        public string MaterialNo { get; set; }
        /// <summary>
        /// æ“ä½œç±»åž‹
        /// </summary>
        public StockTypeEnum StockType { get; set; }
        /// <summary>
        /// å®¹å™¨ç¼–号.
        /// </summary>
        public string? ContainerNo { get; set; }
        /// <summary>
        /// åž‹å·
        /// </summary>
        public string? MaterialModel { get; set; }
        /// <summary>
        /// æ“ä½œæ—¶é—´
        /// </summary>
        public DateTime? OperateTime { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public string? Remark { get; set; }
        /// <summary>
        /// ç‰©æ–™ID
        /// </summary>
        public string MaterialId { get; set; }
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        public string TaskNo { get; set; }
        /// <summary>
        /// èµ·å§‹åº“位
        /// </summary>
        public string? SourcePlace { get; set; }
        /// <summary>
        /// ç›®æ ‡åº“位
        /// </summary>
        public string? ToPlace { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        public virtual int Sort { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get; set; }
        /// <summary>
        /// Adjusts the sort.
        /// </summary>
        /// <param name="sort">The sort.</param>
        public void AdjustSort(int sort)
        {
            Sort = sort;
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsMaterial/IWmsMaterialRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
using CmsQueryExtensions.Extension;
using System.Linq.Expressions;
using Volo.Abp.Domain.Repositories;
namespace CMS.Plugin.HIAWms.Domain.WmsMaterial;
/// <summary>
/// ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨ä»“储
/// </summary>
public interface IWmsMaterialRepository : IBasicRepository<WmsMaterial, Guid>
{
    /// <summary>
    /// æŒ‰ç…§åç§°æŸ¥æ‰¾ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨
    /// </summary>
    /// <param name="name"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<WmsMaterial> 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<WmsMaterial>> GetListAsync(FunReturnResultModel<Expression<Func<WmsMaterial, 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<WmsMaterial, bool>>> whereConditions, CancellationToken cancellationToken = default);
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsMaterial/WmsMaterial.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,119 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CMS.Plugin.HIAWms.Domain.Shared.WmsMaterial;
using MathNet.Numerics;
using Volo.Abp;
using Volo.Abp.Domain.Entities.Auditing;
namespace CMS.Plugin.HIAWms.Domain.WmsMaterial
{
    /// <summary>
    /// WmsMaterial
    /// </summary>
    public class WmsMaterial : FullAuditedAggregateRoot<Guid>
    {
        /// <summary>
        /// ç‰©æ–™ç¼–码(唯一标识)
        /// </summary>
        public string MaterialCode { get; set; }
        /// <summary>
        /// ç‰©æ–™åç§°
        /// </summary>
        public string MaterialName { get; set; }
        /// <summary>
        /// é‡‡è´­ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// </summary>
        public PurchaseTypeEnum PurchaseType { get; set; }
        /// <summary>
        /// ç‰©æ–™ç±»åž‹ï¼ˆæžšä¸¾å€¼ï¼‰
        /// </summary>
        public MaterialTypeEnum MaterialType { get; set; }
        /// <summary>
        /// ä¸»å•位(如:kg、m、个)
        /// </summary>
        public string PrimaryUnit { get; set; }
        /// <summary>
        /// è§„æ ¼/标准(如:GB/T 8163-2018)
        /// </summary>
        public string Standard { get; set; }
        /// <summary>
        /// å¤–径(单位:mm)
        /// </summary>
        public decimal OuterDiameter { get; set; }
        /// <summary>
        /// å£åŽšï¼ˆå•ä½ï¼šmm)
        /// </summary>
        public decimal WallThickness { get; set; }
        /// <summary>
        /// æè´¨ï¼ˆå¦‚:304不锈钢)
        /// </summary>
        public string MaterialQuality { get; set; }
        /// <summary>
        /// é•¿åº¦ï¼ˆå•位:m)
        /// </summary>
        public decimal Length { get; set; }
        /// <summary>
        /// æ˜¯å¦ä¸ºä¸»æ”¯ç®¡ï¼ˆtrue: ä¸»æ”¯ç®¡, false: éžä¸»æ”¯ç®¡ï¼‰
        /// </summary>
        public YesNoEnum IsMainBranch { get; set; }
        /// <summary>
        /// ç”Ÿäº§å·¥åŽ‚
        /// </summary>
        public string Factory { get; set; }
        /// <summary>
        /// è¯ä¹¦ç¼–号(如:压力容器认证)
        /// </summary>
        public string Certification { get; set; }
        /// <summary>
        /// å†—余字段1 - é¢„留扩展用途
        /// </summary>
        public string RedundantField1 { get; set; }
        /// <summary>
        /// å†—余字段2 - é¢„留扩展用途
        /// </summary>
        public string RedundantField2 { get; set; }
        /// <summary>
        /// å†—余字段3 - é¢„留扩展用途
        /// </summary>
        public string RedundantField3 { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        public virtual int Sort { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public virtual string Remark { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get; set; }
        /// <summary>
        /// Adjusts the sort.
        /// </summary>
        /// <param name="sort">The sort.</param>
        public void AdjustSort(int sort)
        {
            Sort = sort;
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsMaterial/WmsMaterialDataSeedContributor.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Guids;
using Volo.Abp.Uow;
namespace CMS.Plugin.HIAWms.Domain.WmsMaterial
{
    /// <summary>
    /// WmsMaterial种子数据提供程序
    /// </summary>
    public class WmsMaterialDataSeedContributor : IDataSeedContributor, ITransientDependency
    {
        private readonly IUnitOfWorkManager _unitOfWorkManager;
        private readonly IWmsMaterialRepository _wmsmaterialRepository;
        private readonly IGuidGenerator _guidGenerator;
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsMaterialDataSeedContributor"/> class.
        /// </summary>
        /// <param name="unitOfWorkManager">The unit of work manager.</param>
        /// <param name="guidGenerator">The unique identifier generator.</param>
        /// <param name="wmsmaterialRepository">The work section repository.</param>
        public WmsMaterialDataSeedContributor(IUnitOfWorkManager unitOfWorkManager,  IGuidGenerator guidGenerator, IWmsMaterialRepository wmsmaterialRepository)
        {
            _unitOfWorkManager = unitOfWorkManager;
            _wmsmaterialRepository = wmsmaterialRepository;
            _guidGenerator = guidGenerator;
        }
        /// <inheritdoc />
        public async Task SeedAsync(DataSeedContext context)
        {
            if (context.Properties.ContainsKey(CMSPluginDbProperties.ConnectionStringName) && context.Properties[CMSPluginDbProperties.ConnectionStringName]?.ToString() == CMSPluginDbProperties.ConnectionStringName)
            {
                try
                {
                    //using var unitofWork = _unitOfWorkManager.Begin(requiresNew: true);
                    //await unitofWork.SaveChangesAsync();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
            if (context.Properties.ContainsKey("SeedTestData") && context.Properties["SeedTestData"]?.ToString() == "SeedTestData")
            {
                try
                {
                    await SeedWmsMaterialDataAsync();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
        }
        /// <summary>
        /// Seeds the work section data asynchronous.
        /// </summary>
        private async Task SeedWmsMaterialDataAsync()
        {
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsMaterial/WmsMaterialSpecification.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
//using System.Linq.Expressions;
//namespace CMS.Plugin.HIAWms.Domain.WmsMaterials
//{
//    /// <summary>
//    /// WmsMaterial规约
//    /// </summary>
//    public class WmsMaterialSpecification : Volo.Abp.Specifications.Specification<WmsMaterial>
//    {
//        private readonly string _materialCode;
//        /// <summary>
//        /// Initializes a new instance of the <see cref="WmsMaterialSpecification"/> class.
//        /// </summary>
//        public WmsMaterialSpecification()
//        {
//        }
//        /// <summary>
//        /// Initializes a new instance of the <see cref="WmsMaterialSpecification"/> class.
//        /// </summary>
//        /// <param name="materialCode">The name.</param>
//        public WmsMaterialSpecification(string materialCode = null)
//        {
//            _materialCode = materialCode;
//        }
//        /// <inheritdoc />
//        public override Expression<Func<WmsMaterial, bool>> ToExpression()
//        {
//            Expression<Func<WmsMaterial, bool>> expression = c => 1 == 1;
//            if (_materialCode != null)
//            {
//                expression = expression.And(c => c.MaterialCode == _materialCode);
//            }
//            return expression;
//        }
//    }
//}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsPlaces/IWmsPlaceRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Specifications;
namespace CMS.Plugin.HIAWms.Domain.WmsPlaces;
/// <summary>
/// WmsPlace仓储
/// </summary>
public interface IWmsPlaceRepository : IBasicRepository<WmsPlace, Guid>
{
    /// <summary>
    /// Finds the by name asynchronous.
    /// </summary>
    /// <param name="name">The name.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<WmsPlace> FindByNameAsync(string name, CancellationToken cancellationToken = default);
    /// <summary>
    /// Names the exist asynchronous.
    /// </summary>
    /// <param name="name">The name.</param>
    /// <param name="id">The identifier.</param>
    /// <returns></returns>
    Task<bool> NameExistAsync(string name, Guid? id = null);
    /// <summary>
    /// Gets the maximum sort asynchronous.
    /// </summary>
    /// <returns></returns>
    Task<int> GetMaxSortAsync();
    /// <summary>
    /// Gets the list asynchronous.
    /// </summary>
    /// <param name="sorting">The sorting.</param>
    /// <param name="maxResultCount">The maximum result count.</param>
    /// <param name="skipCount">The skip count.</param>
    /// <param name="filter">The filter.</param>
    /// <param name="specification">The specification.</param>
    /// <param name="includeDetails">if set to <c>true</c> [include details].</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<List<WmsPlace>> GetListAsync(WmsPlace? place, string sorting = null, int maxResultCount = int.MaxValue,  int skipCount = 0, string filter = null, Specification<WmsPlace> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default);
    /// <summary>
    /// Gets the count asynchronous.
    /// </summary>
    /// <param name="filter">The filter.</param>
    /// <param name="specification">The specification.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<long> GetCountAsync(WmsPlace? place, string filter = null, Specification<WmsPlace> specification = null, CancellationToken cancellationToken = default);
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsPlaces/WmsPlace.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,104 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CMS.Plugin.HIAWms.Domain.Shared.WmsPlaces;
using Volo.Abp;
using Volo.Abp.Domain.Entities.Auditing;
namespace CMS.Plugin.HIAWms.Domain.WmsPlaces
{
    /// <summary>
    /// WmsPlace
    /// </summary>
    public class WmsPlace : FullAuditedAggregateRoot<Guid>
    {
        /// <summary>
        /// ç¼–号
        /// </summary>
        public virtual string PlaceNo { get;  set; }
        /// <summary>
        /// è´§ä½ç±»åž‹
        /// </summary>
        public PlaceTypeEnum StorageTypeNo { get;  set; }
        /// <summary>
        /// è´§ä½çŠ¶æ€
        /// </summary>
        public PlaceStatusEnum PlaceStatus { get;  set; }
        /// <summary>
        /// æ‰€åœ¨åº“区
        /// </summary>
        public string AreaCode { get;  set; }
        /// <summary>
        /// å··é“
        /// </summary>
        public int Aisle { get;  set; }
        /// <summary>
        /// æŽ’
        /// </summary>
        public int RowNo { get;  set; }
        /// <summary>
        /// åˆ—
        /// </summary>
        public int ColumnNo { get;  set; }
        /// <summary>
        /// å±‚
        /// </summary>
        public int LayerNo { get;  set; }
        /// <summary>
        /// æ˜¯å¦é”å®š
        /// </summary>
        public YesNoEnum Islock { get;  set; }
        /// <summary>
        /// æ˜¯å¦ç©ºæ‰˜
        /// </summary>
        public YesNoEnum EmptyContainer { get;  set; }
        /// <summary>
        /// å†—余字段1 - é¢„留扩展用途
        /// </summary>
        public string RedundantField1 { get; set; }
        /// <summary>
        /// å†—余字段2 - é¢„留扩展用途
        /// </summary>
        public string RedundantField2 { get; set; }
        /// <summary>
        /// å†—余字段3 - é¢„留扩展用途
        /// </summary>
        public string RedundantField3 { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        public virtual int Sort { get; set; }
        /// <summary>
        /// å¤‡æ³¨
        /// </summary>
        public virtual string Remark { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get;  set; }
        /// <summary>
        /// Adjusts the sort.
        /// </summary>
        /// <param name="sort">The sort.</param>
        public void AdjustSort(int sort)
        {
            Sort = sort;
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsPlaces/WmsPlaceDataSeedContributor.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Guids;
using Volo.Abp.Uow;
namespace CMS.Plugin.HIAWms.Domain.WmsPlaces
{
    /// <summary>
    /// WmsPlace种子数据提供程序
    /// </summary>
    public class WmsPlaceDataSeedContributor : IDataSeedContributor, ITransientDependency
    {
        private readonly IUnitOfWorkManager _unitOfWorkManager;
        private readonly IWmsPlaceRepository _wmsplaceRepository;
        private readonly IGuidGenerator _guidGenerator;
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsPlaceDataSeedContributor"/> class.
        /// </summary>
        /// <param name="unitOfWorkManager">The unit of work manager.</param>
        /// <param name="guidGenerator">The unique identifier generator.</param>
        /// <param name="wmsplaceRepository">The work section repository.</param>
        public WmsPlaceDataSeedContributor(IUnitOfWorkManager unitOfWorkManager,  IGuidGenerator guidGenerator, IWmsPlaceRepository wmsplaceRepository)
        {
            _unitOfWorkManager = unitOfWorkManager;
            _wmsplaceRepository = wmsplaceRepository;
            _guidGenerator = guidGenerator;
        }
        /// <inheritdoc />
        public async Task SeedAsync(DataSeedContext context)
        {
            if (context.Properties.ContainsKey(CMSPluginDbProperties.ConnectionStringName) && context.Properties[CMSPluginDbProperties.ConnectionStringName]?.ToString() == CMSPluginDbProperties.ConnectionStringName)
            {
                try
                {
                    //using var unitofWork = _unitOfWorkManager.Begin(requiresNew: true);
                    //await unitofWork.SaveChangesAsync();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
            if (context.Properties.ContainsKey("SeedTestData") && context.Properties["SeedTestData"]?.ToString() == "SeedTestData")
            {
                try
                {
                    await SeedWmsPlaceDataAsync();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
        }
        /// <summary>
        /// Seeds the work section data asynchronous.
        /// </summary>
        private async Task SeedWmsPlaceDataAsync()
        {
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsPlaces/WmsPlaceSpecification.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
using System.Linq.Expressions;
namespace CMS.Plugin.HIAWms.Domain.WmsPlaces
{
    /// <summary>
    /// WmsPlace规约
    /// </summary>
    public class WmsPlaceSpecification : Volo.Abp.Specifications.Specification<WmsPlace>
    {
        private readonly string _placeNo;
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsPlaceSpecification"/> class.
        /// </summary>
        public WmsPlaceSpecification()
        {
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsPlaceSpecification"/> class.
        /// </summary>
        /// <param name="placeNo">The name.</param>
        public WmsPlaceSpecification(string placeNo = null)
        {
            _placeNo = placeNo;
        }
        /// <inheritdoc />
        public override Expression<Func<WmsPlace, bool>> ToExpression()
        {
            Expression<Func<WmsPlace, bool>> expression = c => 1 == 1;
            if (_placeNo != null)
            {
                expression = expression.And(c => c.PlaceNo == _placeNo);
            }
            return expression;
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsStores/IWmsStoreRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Specifications;
namespace CMS.Plugin.HIAWms.Domain.WmsStores;
/// <summary>
/// WmsStore仓储
/// </summary>
public interface IWmsStoreRepository : IBasicRepository<WmsStore, Guid>
{
    /// <summary>
    /// Finds the by name asynchronous.
    /// </summary>
    /// <param name="name">The name.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<WmsStore> FindByNameAsync(string name, CancellationToken cancellationToken = default);
    /// <summary>
    /// Names the exist asynchronous.
    /// </summary>
    /// <param name="name">The name.</param>
    /// <param name="id">The identifier.</param>
    /// <returns></returns>
    Task<bool> NameExistAsync(string name, Guid? id = null);
    /// <summary>
    /// Gets the maximum sort asynchronous.
    /// </summary>
    /// <returns></returns>
    Task<int> GetMaxSortAsync();
    /// <summary>
    /// Gets the list asynchronous.
    /// </summary>
    /// <param name="sorting">The sorting.</param>
    /// <param name="maxResultCount">The maximum result count.</param>
    /// <param name="skipCount">The skip count.</param>
    /// <param name="filter">The filter.</param>
    /// <param name="specification">The specification.</param>
    /// <param name="includeDetails">if set to <c>true</c> [include details].</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<List<WmsStore>> GetListAsync(WmsStore? store, string sorting = null, int maxResultCount = int.MaxValue,  int skipCount = 0, string filter = null, Specification<WmsStore> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default);
    /// <summary>
    /// æŸ¥è¯¢ä»“库列表
    /// </summary>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    Task<List<WmsStore>> GetListForSelectAsync(CancellationToken cancellationToken = default);
    /// <summary>
    /// Gets the count asynchronous.
    /// </summary>
    /// <param name="filter">The filter.</param>
    /// <param name="specification">The specification.</param>
    /// <param name="cancellationToken">The cancellation token.</param>
    /// <returns></returns>
    Task<long> GetCountAsync(WmsStore? store, string filter = null, Specification<WmsStore> specification = null, CancellationToken cancellationToken = default);
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsStores/WmsStore.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,64 @@
using CMS.Plugin.HIAWms.Domain.Shared.WmsStores;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using Volo.Abp;
using Volo.Abp.Domain.Entities.Auditing;
namespace CMS.Plugin.HIAWms.Domain.WmsStores
{
    /// <summary>
    /// WmsStore
    /// </summary>
    public class WmsStore : FullAuditedAggregateRoot<Guid>
    {
        /// <summary>
        /// ä»“库代码
        /// </summary>
        public string? StoreCode { get; set; }
        /// <summary>
        /// ä»“库名称
        /// </summary>
        public string? StoreName { get; set; }
        /// <summary>
        /// å†—余字段1 - é¢„留扩展用途
        /// </summary>
        public string RedundantField1 { get; set; }
        /// <summary>
        /// å†—余字段2 - é¢„留扩展用途
        /// </summary>
        public string RedundantField2 { get; set; }
        /// <summary>
        /// å†—余字段3 - é¢„留扩展用途
        /// </summary>
        public string RedundantField3 { get; set; }
        /// <summary>
        /// å¤‡æ³¨.
        /// </summary>
        public string? Remark { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        public virtual int Sort { get;  set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get;  set; }
        /// <summary>
        /// Adjusts the sort.
        /// </summary>
        /// <param name="sort">The sort.</param>
        public void AdjustSort(int sort)
        {
            Sort = sort;
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsStores/WmsStoreDataSeedContributor.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Guids;
using Volo.Abp.Uow;
namespace CMS.Plugin.HIAWms.Domain.WmsStores
{
    /// <summary>
    /// WmsStore种子数据提供程序
    /// </summary>
    public class WmsStoreDataSeedContributor : IDataSeedContributor, ITransientDependency
    {
        private readonly IUnitOfWorkManager _unitOfWorkManager;
        private readonly IWmsStoreRepository _wmsstoreRepository;
        private readonly IGuidGenerator _guidGenerator;
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsStoreDataSeedContributor"/> class.
        /// </summary>
        /// <param name="unitOfWorkManager">The unit of work manager.</param>
        /// <param name="guidGenerator">The unique identifier generator.</param>
        /// <param name="wmsstoreRepository">The work section repository.</param>
        public WmsStoreDataSeedContributor(IUnitOfWorkManager unitOfWorkManager,  IGuidGenerator guidGenerator, IWmsStoreRepository wmsstoreRepository)
        {
            _unitOfWorkManager = unitOfWorkManager;
            _wmsstoreRepository = wmsstoreRepository;
            _guidGenerator = guidGenerator;
        }
        /// <inheritdoc />
        public async Task SeedAsync(DataSeedContext context)
        {
            if (context.Properties.ContainsKey(CMSPluginDbProperties.ConnectionStringName) && context.Properties[CMSPluginDbProperties.ConnectionStringName]?.ToString() == CMSPluginDbProperties.ConnectionStringName)
            {
                try
                {
                    //using var unitofWork = _unitOfWorkManager.Begin(requiresNew: true);
                    //await unitofWork.SaveChangesAsync();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
            if (context.Properties.ContainsKey("SeedTestData") && context.Properties["SeedTestData"]?.ToString() == "SeedTestData")
            {
                try
                {
                    await SeedWmsStoreDataAsync();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }
        }
        /// <summary>
        /// Seeds the work section data asynchronous.
        /// </summary>
        private async Task SeedWmsStoreDataAsync()
        {
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/WmsStores/WmsStoreSpecification.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,41 @@
using System.Linq.Expressions;
namespace CMS.Plugin.HIAWms.Domain.WmsStores
{
    /// <summary>
    /// WmsStore规约
    /// </summary>
    public class WmsStoreSpecification : Volo.Abp.Specifications.Specification<WmsStore>
    {
        private readonly string _storeCode;
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsStoreSpecification"/> class.
        /// </summary>
        public WmsStoreSpecification()
        {
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsStoreSpecification"/> class.
        /// </summary>
        /// <param name="storeCode">The name.</param>
        public WmsStoreSpecification(string storeCode = null)
        {
            _storeCode = storeCode;
        }
        /// <inheritdoc />
        public override Expression<Func<WmsStore, bool>> ToExpression()
        {
            Expression<Func<WmsStore, bool>> expression = c => 1 == 1;
            if (_storeCode != null)
            {
                expression = expression.And(c => c.StoreCode == _storeCode);
            }
            return expression;
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.Domain/ÐÂÎļþ¼Ð/WmsTask.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,126 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using NPOI.SS.Formula.Functions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Domain.Entities.Auditing;
namespace CMS.Plugin.HIAWms.Domain.WmsTask
{
    /// <summary>
    /// ä»»åŠ¡
    /// </summary>W
    public class WmsTask : FullAuditedAggregateRoot<Guid>
    {
        /// <summary>
        /// ä»»åŠ¡å·
        /// </summary>
        public string TaskNo { get; set; }
        /// <summary>
        /// ä»»åŠ¡ç±»åž‹
        /// </summary>
        public TaskTypeEnum TaskType { get; set; }
        /// <summary>
        /// ä»»åŠ¡ç­‰çº§
        /// </summary>
        public int TaskLevel { get; set; }
        /// <summary>
        /// ä»»åŠ¡çŠ¶æ€
        /// </summary>
        public WmsTaskStatus TaskStatus { get; set; }
        /// <summary>
        /// æ‰˜ç›˜ç¼–号
        /// </summary>
        public string? ContainerNo { get; set; }
        /// <summary>
        /// èµ·å§‹åº“位
        /// </summary>
        public string? SourcePlace { get; set; }
        /// <summary>
        /// ç›®æ ‡åº“位
        /// </summary>
        public string? ToPlace { get; set; }
        /// <summary>
        /// å··é“
        /// </summary>
        public int? Aisle { get; set; }
        /// <summary>
        /// å †åž›æœºID
        /// </summary>
        public int? DodeviceId { get; set; }
        /// <summary>
        /// è®¾å¤‡ç±»åž‹
        /// </summary>
        public int Dodevicetype { get; set; }
        /// <summary>
        /// è®¾å¤‡ä»»åŠ¡çŠ¶æ€
        /// </summary>
        public int TaskDodeviceStatus { get; set; }
        /// <summary>
        /// WCS是否可以读取
        /// </summary>
        public bool IsRead { get; set; }
        /// <summary>
        /// å­ä»»åŠ¡ç±»åž‹
        /// </summary>
        public SonTaskTypeEnum? SonTaskType { get; set; }
        /// <summary>
        /// æ¥æºå•据号
        /// </summary>
        public string? SourceOrderNo { get; set; }
        /// <summary>
        /// ä»»åŠ¡å…³è”çš„ä¸‹ä¸ªä»»åŠ¡æ˜¯å¦ç”ŸæˆæˆåŠŸï¼Œå¤±è´¥ä¸º1,其他无操作
        /// </summary>
        public int? IsNextTask { get; set; }
        /// <summary>
        /// å¯å˜å˜é‡1
        /// </summary>
        public string? MutableParam1 { get; set; }
        /// <summary>
        /// å¯å˜å˜é‡2
        /// </summary>
        public string? MutableParam2 { get; set; }
        /// <summary>
        /// å¯å˜å˜é‡3
        /// </summary>
        public string? MutableParam3 { get; set; }
        /// <summary>
        /// æŽ’序
        /// </summary>
        public virtual int Sort { get; set; }
        /// <summary>
        /// æ˜¯å¦ç¦ç”¨
        /// </summary>
        public virtual bool? IsDisabled { get; set; }
        /// <summary>
        /// Adjusts the sort.
        /// </summary>
        /// <param name="sort">The sort.</param>
        public void AdjustSort(int sort)
        {
            Sort = sort;
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/CMS.Plugin.HIAWms.EntityFrameworkCore.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
<Project Sdk="Microsoft.NET.Sdk">
    <Import Project="../../common.props" />
    <Import Project="../../configureawait.props" />
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Volo.Abp.Dapper" Version="$(ABPPackageVersion)" />
        <PackageReference Include="Volo.Abp.EntityFrameworkCore" Version="$(ABPPackageVersion)" />
    </ItemGroup>
    <ItemGroup>
        <ProjectReference Include="..\CMS.Plugin.HIAWms.Domain\CMS.Plugin.HIAWms.Domain.csproj" />
    </ItemGroup>
    <ItemGroup>
      <Reference Include="CmsQueryExtensions">
        <HintPath>..\..\..\..\..\CommonDLL\CmsQueryExtensions.dll</HintPath>
      </Reference>
    </ItemGroup>
</Project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/CMSPluginDapperRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using CMS.Plugin.HIAWms.Domain.Data;
using Volo.Abp.Domain.Repositories.Dapper;
using Volo.Abp.EntityFrameworkCore;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore;
/// <inheritdoc />
public class CMSPluginDapperRepository : DapperRepository<ICMSPluginDbContext>, ICMSPluginDapperRepository
{
    /// <summary>
    /// Initializes a new instance of the <see cref="CMSPluginDapperRepository"/> class.
    /// </summary>
    /// <param name="dbContextProvider">The database context provider.</param>
    public CMSPluginDapperRepository(IDbContextProvider<ICMSPluginDbContext> dbContextProvider)
        : base(dbContextProvider)
    {
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/CMSPluginDbSchemaMigrator.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
using CMS.Plugin.HIAWms.Domain.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Volo.Abp.DependencyInjection;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore;
/// <inheritdoc />
public class CMSPluginDbSchemaMigrator  : ICMSPluginDbSchemaMigrator, ITransientDependency
{
    private readonly IServiceProvider _serviceProvider;
    private readonly ILogger<CMSPluginDbSchemaMigrator> _logger;
    /// <summary>
    /// Initializes a new instance of the <see cref="CMSPluginDbSchemaMigrator"/> class.
    /// </summary>
    /// <param name="serviceProvider">The service provider.</param>
    public CMSPluginDbSchemaMigrator(IServiceProvider serviceProvider, ILogger<CMSPluginDbSchemaMigrator> logger)
    {
        _serviceProvider = serviceProvider;
        _logger = logger;
    }
    /// <inheritdoc />
    public async Task MigrateAsync()
    {
        /* We intentionally resolving the CMSDbContext
         * from IServiceProvider (instead of directly injecting it)
         * to properly get the connection string of the current tenant in the
         * current scope.
         */
        var database = _serviceProvider.GetRequiredService<ICMSPluginDbContext>().Database;
        _logger.LogInformation($"Start database {database.GetDbConnection().Database} migrate");
        await database.MigrateAsync();
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/CMSPluginEfCoreEntityExtensionMappings.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
using CMS.Plugin.HIAWms.Domain.Shared;
using Volo.Abp.Threading;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore;
/// <summary>
/// EfCore实体扩展
/// </summary>
public static class CMSPluginEfCoreEntityExtensionMappings
{
    private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
    /// <summary>
    /// Configures this instance.
    /// </summary>
    public static void Configure()
    {
        CMSPluginModuleExtensionConfigurator.Configure();
        OneTimeRunner.Run(() =>
        {
            /* You can configure extra properties for the
             * entities defined in the modules used by your application.
             *
             * This class can be used to map these extra properties to table fields in the database.
             *
             * USE THIS CLASS ONLY TO CONFIGURE EF CORE RELATED MAPPING.
             * USE CMSModuleExtensionConfigurator CLASS (in the Domain.Shared project)
             * FOR A HIGH LEVEL API TO DEFINE EXTRA PROPERTIES TO ENTITIES OF THE USED MODULES
             *
             * Example: Map a property to a table field:
                 ObjectExtensionManager.Instance
                     .MapEfCoreProperty<WmsContainer, string>(
                         "MyProperty",
                         (entityBuilder, propertyBuilder) =>
                         {
                             propertyBuilder.HasMaxLength(128);
                         }
                     );
             * See the documentation for more:
             * https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities
             */
        });
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/CMSPluginEntityFrameworkCoreModule.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
using CMS.Plugin.HIAWms.Domain;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Modularity;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore;
/// <summary>
/// EntityFrameworkCore模块
/// </summary>
[DependsOn(
    typeof(CMSPluginDomainModule),
    typeof(AbpEntityFrameworkCoreModule)
    )]
public class CMSPluginEntityFrameworkCoreModule : AbpModule
{
    /// <inheritdoc />
    public override void PreConfigureServices(ServiceConfigurationContext context)
    {
        CMSPluginEfCoreEntityExtensionMappings.Configure();
    }
    /// <inheritdoc />
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsArea.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
using CMS.Plugin.HIAWms.Domain;
using CMS.Plugin.HIAWms.Domain.WmsAreas;
using CMS.Plugin.HIAWms.Domain.Shared.WmsAreas;
using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Volo.Abp.EntityFrameworkCore.Modeling;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
/// <summary>
/// EfCore扩展
/// </summary>
public  static partial class CMSPluginEfCoreExtensions
{
    /// <summary>
    /// Includes the details.
    /// </summary>
    /// <param name="queryable">The queryable.</param>
    /// <param name="include">if set to <c>true</c> [include].</param>
    /// <returns></returns>
    public static IQueryable<WmsArea> IncludeDetails(this IQueryable<WmsArea> queryable, bool include = true)
    {
        if (!include)
        {
            return queryable;
        }
        return queryable;
    }
    /// <summary>
    /// Configures the wmsarea.
    /// </summary>
    /// <param name="builder">The builder.</param>
    public static void ConfigureWmsArea(this ModelBuilder builder)
    {
        Check.NotNull(builder, nameof(builder));
        builder.Entity<WmsArea>(b =>
        {
            // Configure table & schema name
            b.ToTable((CMSPluginDbProperties.DbTablePrefix + "_WmsAreas").ToLower(), CMSPluginDbProperties.DbSchema).HasComment("库区表");
            b.ConfigureByConvention();
            // Properties
            b.Property(x => x.AreaNo).HasMaxLength(WmsAreaConsts.MaxNameLength).IsRequired().HasComment("库区编号");
            b.Property(x => x.AreaName).HasMaxLength(WmsAreaConsts.MaxAreaNameLength).IsRequired().HasComment("库区名称");
            b.Property(x => x.AreaDesc).HasMaxLength(WmsAreaConsts.MaxAreaDescLength).IsRequired(false).HasComment("描述");
            b.Property(x => x.AreaStatus).HasComment("库区状态");
            b.Property(x => x.AreaType).HasComment("库区类型");
            b.Property(x => x.RedundantField1).HasMaxLength(WmsAreaConsts.MaxRedundantFieldLength).IsRequired(false).HasComment("冗余字段1 - é¢„留扩展用途");
            b.Property(x => x.RedundantField2).HasMaxLength(WmsAreaConsts.MaxRedundantFieldLength).IsRequired(false).HasComment("冗余字段2 - é¢„留扩展用途");
            b.Property(x => x.RedundantField3).HasMaxLength(WmsAreaConsts.MaxRedundantFieldLength).IsRequired(false).HasComment("冗余字段3 - é¢„留扩展用途");
            b.Property(x => x.StoreCode).HasMaxLength(WmsAreaConsts.MaxStoreCodeLength).IsRequired(false).HasComment("仓库代码");
            b.Property(x => x.StoreName).HasMaxLength(WmsAreaConsts.MaxStoreNameLength).IsRequired(false).HasComment("仓库名称");
            b.Property(x => x.Sort).HasComment("排序");
            b.Property(x => x.Remark).HasMaxLength(WmsAreaConsts.MaxRemarkLength).IsRequired(false).HasComment("备注");
            b.Property(x => x.IsDisabled).IsRequired(false).HasComment("是否禁用");
            // Indexes
            b.HasIndex(u => u.AreaName);
            // Apply object extension mappings
            b.ApplyObjectExtensionMappings();
        });
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsContainer.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,117 @@
using CMS.Plugin.HIAWms.Domain;
using CMS.Plugin.HIAWms.Domain.WmsContainers;
using CMS.Plugin.HIAWms.Domain.Shared.WmsContainers;
using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Volo.Abp.EntityFrameworkCore.Modeling;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
/// <summary>
/// EfCore扩展
/// </summary>
public  static partial class CMSPluginEfCoreExtensions
{
    /// <summary>
    /// Includes the details.
    /// </summary>
    /// <param name="queryable">The queryable.</param>
    /// <param name="include">if set to <c>true</c> [include].</param>
    /// <returns></returns>
    public static IQueryable<WmsContainer> IncludeDetails(this IQueryable<WmsContainer> queryable, bool include = true)
    {
        if (!include)
        {
            return queryable;
        }
        return queryable;
    }
    /// <summary>
    /// Configures the wmscontainer.
    /// </summary>
    /// <param name="builder">The builder.</param>
    public static void ConfigureWmsContainer(this ModelBuilder builder)
    {
        Check.NotNull(builder, nameof(builder));
        builder.Entity<WmsContainer>(b =>
        {
            b.ToTable((CMSPluginDbProperties.DbTablePrefix + "_WmsContainers").ToLower(), CMSPluginDbProperties.DbSchema)
            .HasComment("托盘信息表");
            b.ConfigureByConvention();
            //Properties
            b.Property(x => x.ContainerNo)
                .HasMaxLength(50)
                .IsRequired()
                .HasComment("托盘编号");
            b.Property(x => x.ContainerType)
                .IsRequired()
                .HasComment("托盘类型");
            b.Property(x => x.ContainerStatus)
                .IsRequired()
                .HasComment("托盘状态");
            b.Property(x => x.SpecLength)
                .HasPrecision(18, 2)
                .HasComment("长度");
            b.Property(x => x.SpecWidth)
                .HasPrecision(18, 2)
                .HasComment("宽度");
            b.Property(x => x.SpecHeight)
                .HasPrecision(18, 2)
                .HasComment("高度");
            b.Property(x => x.LimitLength)
                .HasPrecision(18, 2)
                .HasComment("限长");
            b.Property(x => x.LimitWidth)
                .HasPrecision(18, 2)
                .HasComment("限宽");
            b.Property(x => x.LimitHeight)
                .HasPrecision(18, 2)
                .HasComment("限高");
            b.Property(x => x.MaxWeight)
                .HasPrecision(18, 2)
                .HasComment("载重上限");
            b.Property(x => x.ExceptionNumber)
                .HasComment("异常数量");
            b.Property(x => x.MaterialNumber)
                .HasComment("物料数量");
            b.Property(x => x.RedundantField1)
                .HasMaxLength(200)
                .HasComment("冗余字段1 - é¢„留扩展用途");
            b.Property(x => x.RedundantField2)
                .HasMaxLength(200)
                .HasComment("冗余字段2 - é¢„留扩展用途");
            b.Property(x => x.RedundantField3)
                .HasMaxLength(200)
                .HasComment("冗余字段3 - é¢„留扩展用途");
            b.Property(x => x.Sort).HasComment("排序");
            b.Property(x => x.IsDisabled).IsRequired(false).HasComment("是否禁用");
            b.Property(x => x.Remark).HasMaxLength(WmsContainerConsts.MaxRemarkLength).IsRequired(false).HasComment("备注");
            b.HasIndex(u => u.ContainerNo).IsUnique();
            b.HasIndex(u => u.ContainerType);
            b.HasIndex(u => u.ContainerStatus);
            b.ApplyObjectExtensionMappings();
        });
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsInOutStockRecord.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,121 @@
using CMS.Plugin.HIAWms.Domain;
using CMS.Plugin.HIAWms.Domain.WmsInOutStockRecord;
using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Volo.Abp.EntityFrameworkCore.Modeling;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions
{
    /// <summary>
    ///  EfCore扩展
    /// </summary>
    public static partial class CMSPluginEfCoreExtensions
    {
        /// <summary>
        /// Includes the details.
        /// </summary>
        /// <param name="queryable">The queryable.</param>
        /// <param name="include">if set to <c>true</c> [include].</param>
        /// <returns></returns>
        public static IQueryable<WmsInOutStockRecord> IncludeDetails(this IQueryable<WmsInOutStockRecord> queryable, bool include = true)
        {
            if (!include)
            {
                return queryable;
            }
            return queryable;
        }
        /// <summary>
        /// Configures the wmsmaterial.
        /// </summary>
        /// <param name="builder"></param>
        public static void ConfigureWmsInOutStockRecord(this ModelBuilder builder)
        {
            Check.NotNull(builder, nameof(builder));
            builder.Entity<WmsInOutStockRecord>(b =>
            {
                b.ToTable((CMSPluginDbProperties.DbTablePrefix + "_WmsInOutStockRecords").ToLower(), CMSPluginDbProperties.DbSchema)
                    .HasComment("出入库记录表");
                b.ConfigureByConvention();
                // ä¸»é”®é…ç½®
                b.HasKey(x => x.Id);
                // Properties
                b.Property(x => x.OrderNo)
                    .HasMaxLength(50)
                    .IsRequired()
                    .HasComment("单据编号");
                b.Property(x => x.MaterialName)
                    .HasMaxLength(100)
                    .IsRequired(false)
                    .HasComment("物料名称");
                b.Property(x => x.MaterialNo)
                    .HasMaxLength(50)
                    .IsRequired()
                    .HasComment("物料件号");
                b.Property(x => x.StockType)
                    .IsRequired()
                    .HasComment("操作类型");
                b.Property(x => x.ContainerNo)
                    .HasMaxLength(50)
                    .IsRequired(false)
                    .HasComment("容器编号");
                b.Property(x => x.MaterialModel)
                    .HasMaxLength(50)
                    .IsRequired(false)
                    .HasComment("机型");
                b.Property(x => x.OperateTime)
                    .IsRequired(false)
                    .HasComment("操作时间");
                b.Property(x => x.Remark)
                    .HasMaxLength(500)
                    .IsRequired(false)
                    .HasComment("备注");
                b.Property(x => x.MaterialId)
                    .HasMaxLength(50)
                    .IsRequired()
                    .HasComment("物料ID");
                b.Property(x => x.TaskNo)
                    .HasMaxLength(50)
                    .IsRequired()
                    .HasComment("任务号");
                b.Property(x => x.SourcePlace)
                    .HasMaxLength(50)
                    .IsRequired(false)
                    .HasComment("起始库位");
                b.Property(x => x.ToPlace)
                    .HasMaxLength(50)
                    .IsRequired(false)
                    .HasComment("目标库位");
                b.Property(x => x.Sort).HasComment("排序");
                b.Property(x => x.IsDisabled).IsRequired(false).HasComment("是否禁用");
                // Indexes
                b.HasIndex(x => x.OrderNo);
                b.HasIndex(x => x.MaterialNo);
                b.HasIndex(x => x.MaterialId);
                b.HasIndex(x => x.TaskNo);
                b.HasIndex(x => x.StockType);
                b.HasIndex(x => x.ContainerNo);
                b.HasIndex(x => x.OperateTime);
                b.ApplyObjectExtensionMappings();
            });
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsMaterial.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,144 @@
using CMS.Plugin.HIAWms.Domain;
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CMS.Plugin.HIAWms.Domain.WmsMaterial;
using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Volo.Abp.EntityFrameworkCore.Modeling;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
/// <summary>
/// EfCore扩展
/// </summary>
public  static partial class CMSPluginEfCoreExtensions
{
    /// <summary>
    /// Includes the details.
    /// </summary>
    /// <param name="queryable">The queryable.</param>
    /// <param name="include">if set to <c>true</c> [include].</param>
    /// <returns></returns>
    public static IQueryable<WmsMaterial> IncludeDetails(this IQueryable<WmsMaterial> queryable, bool include = true)
    {
        if (!include)
        {
            return queryable;
        }
        return queryable;
    }
    /// <summary>
    /// Configures the wmsmaterial.
    /// </summary>
    /// <param name="builder">The builder.</param>
    public static void ConfigureWmsMaterial(this ModelBuilder builder)
    {
        Check.NotNull(builder, nameof(builder));
        builder.Entity<WmsMaterial>(b =>
        {
            // é…ç½®è¡¨åå’Œæ³¨é‡Š
            b.ToTable((CMSPluginDbProperties.DbTablePrefix + "_WmsMaterials").ToLower(),
                     CMSPluginDbProperties.DbSchema)
             .HasComment("物料基础信息表");
            b.ConfigureByConvention();
            // ä¸»é”®é…ç½®ï¼ˆFullAuditedAggregateRoot<Guid> å·²é»˜è®¤åŒ…含 Id)
            b.HasKey(x => x.Id);
            // å­—段配置
            b.Property(x => x.MaterialCode)
                .HasMaxLength(64)
                .IsRequired()
                .HasComment("物料编码(唯一标识)");
            b.Property(x => x.MaterialName)
                .HasMaxLength(128)
                .IsRequired()
                .HasComment("物料名称");
            b.Property(x => x.PurchaseType)
                .HasComment("采购类型(枚举值)");
            b.Property(x => x.MaterialType)
                .HasComment("物料类型(枚举值)");
            b.Property(x => x.PrimaryUnit)
                .HasMaxLength(20)
                .HasComment("主单位(如:kg、m、个)");
            b.Property(x => x.Standard)
                .HasMaxLength(128)
                .HasComment("规格/标准(如:GB/T 8163-2018)");
            b.Property(x => x.OuterDiameter)
                .HasColumnType("decimal(18,2)")
                .HasComment("外径(单位:mm)");
            b.Property(x => x.WallThickness)
                .HasColumnType("decimal(18,2)")
                .HasComment("壁厚(单位:mm)");
            b.Property(x => x.MaterialQuality)
                .HasMaxLength(64)
                .HasComment("材质(如:304不锈钢)");
            b.Property(x => x.Length)
                .HasColumnType("decimal(18,2)")
                .HasComment("长度(单位:m)");
            b.Property(x => x.IsMainBranch)
                .HasDefaultValue(YesNoEnum.N)
                .HasComment("是否为主支管");
            b.Property(x => x.Factory)
                .HasMaxLength(64)
                .HasComment("生产工厂");
            b.Property(x => x.Certification)
                .HasMaxLength(128)
                .HasComment("证书编号");
            // å†—余字段配置
            b.Property(x => x.RedundantField1)
                .HasMaxLength(256)
                .IsRequired(false)
                .HasComment("冗余字段1 - é¢„留扩展用途");
            b.Property(x => x.RedundantField2)
                .HasMaxLength(256)
                .IsRequired(false)
                .HasComment("冗余字段2 - é¢„留扩展用途");
            b.Property(x => x.RedundantField3)
                .HasMaxLength(256)
                .IsRequired(false)
                .HasComment("冗余字段3 - é¢„留扩展用途");
            // å…¶ä»–通用字段
            b.Property(x => x.Sort)
                .HasDefaultValue(0)
                .HasComment("排序");
            b.Property(x => x.Remark)
                .HasMaxLength(500)
                .IsRequired(false)
                .HasComment("备注");
            b.Property(x => x.IsDisabled)
                .IsRequired(false)
                .HasDefaultValue(false)
                .HasComment("是否禁用");
            // ç´¢å¼•配置
            b.HasIndex(x => x.MaterialCode).IsUnique(); // ç‰©æ–™ç¼–码唯一索引
            b.HasIndex(x => x.MaterialName);           // ç‰©æ–™åç§°æ™®é€šç´¢å¼•
            b.HasIndex(x => x.PurchaseType);           // é‡‡è´­ç±»åž‹ç´¢å¼•(如需查询过滤)
            b.HasIndex(x => x.MaterialType);           // ç‰©æ–™ç±»åž‹ç´¢å¼•(如需查询过滤)
            b.ApplyObjectExtensionMappings();
        });
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsPlace.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
using CMS.Plugin.HIAWms.Domain;
using CMS.Plugin.HIAWms.Domain.WmsPlaces;
using CMS.Plugin.HIAWms.Domain.Shared.WmsPlaces;
using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Volo.Abp.EntityFrameworkCore.Modeling;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
/// <summary>
/// EfCore扩展
/// </summary>
public  static partial class CMSPluginEfCoreExtensions
{
    /// <summary>
    /// Includes the details.
    /// </summary>
    /// <param name="queryable">The queryable.</param>
    /// <param name="include">if set to <c>true</c> [include].</param>
    /// <returns></returns>
    public static IQueryable<WmsPlace> IncludeDetails(this IQueryable<WmsPlace> queryable, bool include = true)
    {
        if (!include)
        {
            return queryable;
        }
        return queryable;
    }
    /// <summary>
    /// Configures the wmsplace.
    /// </summary>
    /// <param name="builder">The builder.</param>
    public static void ConfigureWmsPlace(this ModelBuilder builder)
    {
        Check.NotNull(builder, nameof(builder));
        builder.Entity<WmsPlace>(b =>
        {
            // Configure table & schema name
            b.ToTable((CMSPluginDbProperties.DbTablePrefix + "_WmsPlaces").ToLower(), CMSPluginDbProperties.DbSchema).HasComment("库位表");
            b.ConfigureByConvention();
            // Properties
            b.Property(x => x.PlaceNo).HasMaxLength(WmsPlaceConsts.MaxPlaceNoLength).IsRequired().HasComment("编号");
            b.Property(x => x.StorageTypeNo).HasComment("货位类型");
            b.Property(x => x.PlaceStatus).HasComment("货位状态");
            b.Property(x => x.AreaCode).HasMaxLength(WmsPlaceConsts.MaxAreaCodeLength).IsRequired().HasComment("所在库区");
            b.Property(x => x.Aisle).HasComment("巷道");
            b.Property(x => x.RowNo).HasComment("排");
            b.Property(x => x.ColumnNo).HasComment("列");
            b.Property(x => x.LayerNo).HasComment("层");
            b.Property(x => x.Islock).HasComment("是否锁定");
            b.Property(x => x.EmptyContainer).HasComment("是否空托");
            b.Property(x => x.RedundantField1).HasMaxLength(WmsPlaceConsts.MaxRedundantFieldLength).IsRequired(false).HasComment("冗余字段1 - é¢„留扩展用途");
            b.Property(x => x.RedundantField2).HasMaxLength(WmsPlaceConsts.MaxRedundantFieldLength).IsRequired(false).HasComment("冗余字段2 - é¢„留扩展用途");
            b.Property(x => x.RedundantField3).HasMaxLength(WmsPlaceConsts.MaxRedundantFieldLength).IsRequired(false).HasComment("冗余字段3 - é¢„留扩展用途");
            b.Property(x => x.Sort).HasComment("排序");
            b.Property(x => x.Remark).HasMaxLength(WmsPlaceConsts.MaxRemarkLength).IsRequired(false).HasComment("备注");
            b.Property(x => x.IsDisabled).IsRequired(false).HasComment("是否禁用");
            // Indexes
            b.HasIndex(u => u.PlaceNo).IsUnique(); // ç¼–号字段添加唯一索引
            b.HasIndex(u => u.AreaCode); // æ‰€åœ¨åº“区字段添加普通索引
            b.HasIndex(u => u.StorageTypeNo); // è´§ä½ç±»åž‹å­—段添加普通索引
            b.HasIndex(u => u.PlaceStatus); // è´§ä½ç±»åž‹å­—段添加普通索引
            // Apply object extension mappings
            b.ApplyObjectExtensionMappings();
        });
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsStore.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
using CMS.Plugin.HIAWms.Domain;
using CMS.Plugin.HIAWms.Domain.WmsStores;
using CMS.Plugin.HIAWms.Domain.Shared.WmsStores;
using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Volo.Abp.EntityFrameworkCore.Modeling;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
/// <summary>
/// EfCore扩展
/// </summary>
public  static partial class CMSPluginEfCoreExtensions
{
    /// <summary>
    /// Includes the details.
    /// </summary>
    /// <param name="queryable">The queryable.</param>
    /// <param name="include">if set to <c>true</c> [include].</param>
    /// <returns></returns>
    public static IQueryable<WmsStore> IncludeDetails(this IQueryable<WmsStore> queryable, bool include = true)
    {
        if (!include)
        {
            return queryable;
        }
        return queryable;
    }
    /// <summary>
    /// Configures the wmsstore.
    /// </summary>
    /// <param name="builder">The builder.</param>
    public static void ConfigureWmsStore(this ModelBuilder builder)
    {
        Check.NotNull(builder, nameof(builder));
        builder.Entity<WmsStore>(b =>
        {
            // Configure table & schema name
            b.ToTable((CMSPluginDbProperties.DbTablePrefix + "_WmsStores").ToLower(), CMSPluginDbProperties.DbSchema).HasComment("仓库信息表");
            b.ConfigureByConvention();
            // Properties
            b.Property(x => x.StoreCode).HasMaxLength(WmsStoreConsts.MaxStoreCodeLength).IsRequired(false).HasComment("仓库代码");
            b.Property(x => x.StoreName).HasMaxLength(WmsStoreConsts.MaxStoreNameLength).IsRequired(false).HasComment("仓库名称");
            b.Property(x => x.RedundantField1).HasMaxLength(WmsStoreConsts.MaxRedundantFieldLength).IsRequired(false).HasComment("冗余字段1 - é¢„留扩展用途");
            b.Property(x => x.RedundantField2).HasMaxLength(WmsStoreConsts.MaxRedundantFieldLength).IsRequired(false).HasComment("冗余字段2 - é¢„留扩展用途");
            b.Property(x => x.RedundantField3).HasMaxLength(WmsStoreConsts.MaxRedundantFieldLength).IsRequired(false).HasComment("冗余字段3 - é¢„留扩展用途");
            b.Property(x => x.Remark).HasMaxLength(WmsStoreConsts.MaxRemarkLength).IsRequired(false).HasComment("备注");
            b.Property(x => x.Sort).HasComment("排序");
            b.Property(x => x.IsDisabled).IsRequired(false).HasComment("是否禁用");
            // Indexes
            b.HasIndex(u => u.StoreName);
            // Apply object extension mappings
            b.ApplyObjectExtensionMappings();
        });
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Extensions/CMSPluginEfCoreExtensions.WmsTask.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,153 @@
using CMS.Plugin.HIAWms.Domain;
using CMS.Plugin.HIAWms.Domain.WmsTask;
using Microsoft.EntityFrameworkCore;
using Volo.Abp;
using Volo.Abp.EntityFrameworkCore.Modeling;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions
{
    /// <summary>
    ///  EfCore扩展
    /// </summary>
    public static partial class CMSPluginEfCoreExtensions
    {
        /// <summary>
        /// Includes the details.
        /// </summary>
        /// <param name="queryable">The queryable.</param>
        /// <param name="include">if set to <c>true</c> [include].</param>
        /// <returns></returns>
        public static IQueryable<WmsTask> IncludeDetails(this IQueryable<WmsTask> queryable, bool include = true)
        {
            if (!include)
            {
                return queryable;
            }
            return queryable;
        }
        /// <summary>
        /// Configures the WMS task entity.
        /// </summary>
        /// <param name="builder">The builder.</param>
        public static void ConfigureWmsTask(this ModelBuilder builder)
        {
            Check.NotNull(builder, nameof(builder));
            builder.Entity<WmsTask>(b =>
            {
                b.ToTable((CMSPluginDbProperties.DbTablePrefix + "_WmsTasks").ToLower(), CMSPluginDbProperties.DbSchema)
                    .HasComment("任务表");
                b.ConfigureByConvention();
                // Primary key configuration (inherited from FullAuditedAggregateRoot<Guid>)
                b.HasKey(x => x.Id);
                // Properties configuration
                b.Property(x => x.TaskNo)
                    .HasMaxLength(50)
                    .IsRequired()
                    .HasComment("任务号");
                b.Property(x => x.TaskType)
                    .IsRequired()
                    .HasComment("任务类型");
                b.Property(x => x.TaskLevel)
                    .IsRequired()
                    .HasComment("任务等级");
                b.Property(x => x.TaskStatus)
                    .IsRequired()
                    .HasComment("任务状态");
                b.Property(x => x.ContainerNo)
                    .HasMaxLength(50)
                    .IsRequired(false)
                    .HasComment("托盘编号");
                b.Property(x => x.SourcePlace)
                    .HasMaxLength(50)
                    .IsRequired(false)
                    .HasComment("起始库位");
                b.Property(x => x.ToPlace)
                    .HasMaxLength(50)
                    .IsRequired(false)
                    .HasComment("目标库位");
                b.Property(x => x.Aisle)
                    .IsRequired(false)
                    .HasComment("巷道");
                b.Property(x => x.DodeviceId)
                    .IsRequired(false)
                    .HasComment("堆垛机ID");
                b.Property(x => x.Dodevicetype)
                    .IsRequired()
                    .HasComment("设备类型");
                b.Property(x => x.TaskDodeviceStatus)
                    .IsRequired()
                    .HasComment("设备任务状态");
                b.Property(x => x.IsRead)
                    .IsRequired()
                    .HasComment("WCS是否可以读取");
                b.Property(x => x.SonTaskType)
                    .IsRequired(false)
                    .HasComment("子任务类型");
                b.Property(x => x.SourceOrderNo)
                    .HasMaxLength(50)
                    .IsRequired(false)
                    .HasComment("来源单据号");
                b.Property(x => x.IsNextTask)
                    .IsRequired(false)
                    .HasComment("下个任务是否生成成功");
                b.Property(x => x.MutableParam1)
                    .HasMaxLength(200)
                    .IsRequired(false)
                    .HasComment("可变变量1");
                b.Property(x => x.MutableParam2)
                    .HasMaxLength(200)
                    .IsRequired(false)
                    .HasComment("可变变量2");
                b.Property(x => x.MutableParam3)
                    .HasMaxLength(200)
                    .IsRequired(false)
                    .HasComment("可变变量3");
                b.Property(x => x.Sort)
                    .IsRequired()
                    .HasComment("排序");
                b.Property(x => x.IsDisabled)
                    .IsRequired(false)
                    .HasComment("是否禁用");
                // Indexes configuration
                b.HasIndex(x => x.TaskNo).IsUnique();
                b.HasIndex(x => x.TaskType);
                b.HasIndex(x => x.TaskStatus);
                b.HasIndex(x => x.ContainerNo);
                b.HasIndex(x => x.SourcePlace);
                b.HasIndex(x => x.ToPlace);
                b.HasIndex(x => x.DodeviceId);
                b.HasIndex(x => x.IsRead);
                b.HasIndex(x => x.SourceOrderNo);
                b.HasIndex(x => x.Sort);
                b.ApplyObjectExtensionMappings();
            });
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/FodyWeavers.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
   <ConfigureAwait ContinueOnCapturedContext="false" />
</Weavers>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/ICMSPluginDbContext.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using CMS.Plugin.HIAWms.Domain;
using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore
{
    /// <summary>
    /// æ•°æ®åº“上下文
    /// </summary>
    [ConnectionStringName(CMSPluginDbProperties.ConnectionStringName)]
    public interface ICMSPluginDbContext : IEfCoreDbContext
    {
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Properties/AssemblyInfo.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2 @@
using System.Runtime.CompilerServices;
[assembly:InternalsVisibleToAttribute("CMS.Plugin.EntityFrameworkCore.Tests")]
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsAreaRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,115 @@
using System;
using System.Linq.Dynamic.Core;
using CMS.Plugin.HIAWms.Domain.WmsAreas;
using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
using DatabaseSchemaReader.Filters;
using MathNet.Numerics;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Specifications;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Repositories;
/// <inheritdoc />
public class EfCoreWmsAreaRepository : EfCoreRepository<ICMSPluginDbContext, WmsArea, Guid>, IWmsAreaRepository
{
    /// <summary>
    /// Initializes a new instance of the <see cref="EfCoreWmsAreaRepository"/> class.
    /// </summary>
    /// <param name="dbContextProvider">The database context provider.</param>
    public EfCoreWmsAreaRepository(IDbContextProvider<ICMSPluginDbContext> dbContextProvider)
        : base(dbContextProvider)
    {
    }
    /// <inheritdoc />
    public virtual async Task<WmsArea> FindByNameAsync(string name, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails()
            .OrderBy(t => t.Sort)
            .Where(x => !x.IsDeleted)
            .FirstOrDefaultAsync(t => t.AreaName == name, GetCancellationToken(cancellationToken));
    }
    /// <summary>
    /// æŸ¥çœ‹åº“区是否存在
    /// </summary>
    /// <param name="areaNo"></param>
    /// <param name="id"></param>
    /// <returns></returns>
    public async Task<bool> NameExistAsync(string areaNo, Guid? id = null)
    {
        return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id)
            .Where(x => !x.IsDeleted).AnyAsync(x => x.AreaNo == areaNo);
    }
    /// <inheritdoc />
    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;
    }
    /// <inheritdoc />
    public async Task<List<WmsArea>> GetListAsync(WmsArea? area, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, string filter = null, Specification<WmsArea> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsAreaSpecification();
        return await (await GetDbSetAsync())
            .IncludeDetails(includeDetails)
            .Where(specification.ToExpression())
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.AreaNo.Contains(filter))
            .WhereIf(!string.IsNullOrEmpty(area.AreaNo), u => u.AreaNo.Contains(area.AreaNo))
            .WhereIf(!string.IsNullOrEmpty(area.AreaName), u => u.AreaNo.Contains(area.AreaName))
            .WhereIf(!string.IsNullOrEmpty(area.StoreCode), u => u.AreaNo == area.StoreCode)
            .WhereIf(area.AreaStatus > 0, u => u.AreaStatus == area.AreaStatus)
            .WhereIf(area.AreaType > 0, u => u.AreaType == area.AreaType)
            .Where(x => !x.IsDeleted)
            .OrderBy(sorting.IsNullOrEmpty() ? nameof(WmsArea.Sort) : sorting)
            .PageBy(skipCount, maxResultCount)
            .ToListAsync(GetCancellationToken(cancellationToken));
    }
    /// <summary>
    /// èŽ·å–åº“åŒºåˆ—è¡¨
    /// </summary>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<List<WmsArea>> GetListForSelectAsync(CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
           .ToListAsync(GetCancellationToken(cancellationToken));
    }
    /// <inheritdoc />
    public async Task<long> GetCountAsync(WmsArea? area, string filter = null, Specification<WmsArea> specification = null, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsAreaSpecification();
        return await (await GetQueryableAsync())
            .Where(specification.ToExpression())
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.AreaNo.Contains(filter))
            .WhereIf(!string.IsNullOrEmpty(area.AreaNo), u => u.AreaNo.Contains(area.AreaNo))
            .WhereIf(!string.IsNullOrEmpty(area.AreaName), u => u.AreaNo.Contains(area.AreaName))
            .WhereIf(!string.IsNullOrEmpty(area.StoreCode), u => u.AreaNo == area.StoreCode)
            .WhereIf(area.AreaStatus > 0, u => u.AreaStatus == area.AreaStatus)
            .WhereIf(area.AreaType > 0, u => u.AreaType == area.AreaType)
            .Where(x => !x.IsDeleted)
            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
    }
    /// <inheritdoc />
    public override async Task<IQueryable<WmsArea>> WithDetailsAsync()
    {
        return (await GetQueryableAsync()).Where(x => !x.IsDeleted).IncludeDetails();
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsContainerRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,107 @@
using System.Linq.Dynamic.Core;
using CMS.Plugin.HIAWms.Domain.WmsContainers;
using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Specifications;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Repositories;
/// <inheritdoc />
public class EfCoreWmsContainerRepository : EfCoreRepository<ICMSPluginDbContext, WmsContainer, Guid>, IWmsContainerRepository
{
    /// <summary>
    /// Initializes a new instance of the <see cref="EfCoreWmsContainerRepository"/> class.
    /// </summary>
    /// <param name="dbContextProvider">The database context provider.</param>
    public EfCoreWmsContainerRepository(IDbContextProvider<ICMSPluginDbContext> dbContextProvider)
        : base(dbContextProvider)
    {
    }
    /// <inheritdoc />
    public virtual async Task<WmsContainer> FindByNameAsync(string containerNo, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails()
            .Where(x => !x.IsDeleted)
            .OrderBy(t => t.Sort)
            .FirstOrDefaultAsync(t => t.ContainerNo == containerNo, GetCancellationToken(cancellationToken));
    }
    /// <inheritdoc />
    public async Task<bool> NameExistAsync(string containerNo, Guid? id = null)
    {
        return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.ContainerNo == containerNo);
    }
    /// <inheritdoc />
    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="container"></param>
    /// <param name="sorting"></param>
    /// <param name="maxResultCount"></param>
    /// <param name="skipCount"></param>
    /// <param name="filter"></param>
    /// <param name="specification"></param>
    /// <param name="includeDetails"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<List<WmsContainer>> GetListAsync(WmsContainer? container,string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, string filter = null, Specification<WmsContainer> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsContainerSpecification();
        return await (await GetDbSetAsync())
            .IncludeDetails(includeDetails)
            .Where(specification.ToExpression())
            .Where(x => !x.IsDeleted)
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.ContainerNo.Contains(filter))
            .WhereIf(!string.IsNullOrEmpty(container.ContainerNo),u=>u.ContainerNo.Contains(container.ContainerNo))
            .WhereIf(container.ContainerStatus>0, u=>u.ContainerStatus == u.ContainerStatus)
            .WhereIf(container.ContainerType>0, u=>u.ContainerType == u.ContainerType)
            .OrderBy(sorting.IsNullOrEmpty() ? nameof(WmsContainer.Sort) : sorting)
            .PageBy(skipCount, maxResultCount)
            .ToListAsync(GetCancellationToken(cancellationToken));
    }
    /// <summary>
    /// æŸ¥è¯¢æ•°é‡
    /// </summary>
    /// <param name="container"></param>
    /// <param name="filter"></param>
    /// <param name="specification"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<long> GetCountAsync(WmsContainer? container, string filter = null, Specification<WmsContainer> specification = null, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsContainerSpecification();
        return await (await GetQueryableAsync())
            .Where(specification.ToExpression())
            .Where(x => !x.IsDeleted)
            .WhereIf(!string.IsNullOrEmpty(container.ContainerNo), u => u.ContainerNo.Contains(container.ContainerNo))
            .WhereIf(container.ContainerStatus > 0, u => u.ContainerStatus == u.ContainerStatus)
            .WhereIf(container.ContainerType > 0, u => u.ContainerType == u.ContainerType)
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.ContainerNo.Contains(filter))
            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
    }
    /// <inheritdoc />
    public override async Task<IQueryable<WmsContainer>> WithDetailsAsync()
    {
        return (await GetQueryableAsync()).Where(x => !x.IsDeleted).IncludeDetails();
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsInOutStockRecordRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,113 @@
using CMS.Plugin.HIAWms.Domain.WmsInOutStockRecord;
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 EfCoreWmsInOutStockRecordRepository : EfCoreRepository<ICMSPluginDbContext, WmsInOutStockRecord, Guid>, IWmsInOutStockRecordRepository
{
    /// <summary>
    /// Initializes a new instance of the <see cref="EfCoreWmsInOutStockRecordRepository"/> class.
    /// </summary>
    /// <param name="dbContextProvider">The database context provider.</param>
    public EfCoreWmsInOutStockRecordRepository(IDbContextProvider<ICMSPluginDbContext> dbContextProvider)
        : base(dbContextProvider)
    {
    }
    /// <summary>
    /// æŒ‰ç…§åç§°æŸ¥æ‰¾å‡ºå…¥åº“记录表
    /// </summary>
    /// <param name="name"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public virtual async Task<WmsInOutStockRecord> FindByNameAsync(string name, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails()
            .Where(x => !x.IsDeleted)
            .OrderBy(t => t.Sort)
            .FirstOrDefaultAsync(t => t.MaterialNo == 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.MaterialNo == 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<WmsInOutStockRecord>> GetListAsync(FunReturnResultModel<Expression<Func<WmsInOutStockRecord, 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)
            .OrderBy(sorting.IsNullOrEmpty() ? nameof(WmsInOutStockRecord.Sort) : sorting)
            .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<WmsInOutStockRecord, 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<WmsInOutStockRecord>> WithDetailsAsync()
    {
        return (await GetQueryableAsync())
            .Where(x => !x.IsDeleted).IncludeDetails();
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsMaterialRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,113 @@
using CMS.Plugin.HIAWms.Domain.WmsMaterial;
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 EfCoreWmsMaterialRepository : EfCoreRepository<ICMSPluginDbContext, WmsMaterial, Guid>, IWmsMaterialRepository
{
    /// <summary>
    /// Initializes a new instance of the <see cref="EfCoreWmsMaterialRepository"/> class.
    /// </summary>
    /// <param name="dbContextProvider">The database context provider.</param>
    public EfCoreWmsMaterialRepository(IDbContextProvider<ICMSPluginDbContext> dbContextProvider)
        : base(dbContextProvider)
    {
    }
    /// <summary>
    /// æŒ‰ç…§åç§°æŸ¥æ‰¾ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨
    /// </summary>
    /// <param name="name"></param>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public virtual async Task<WmsMaterial> FindByNameAsync(string name, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails()
            .Where(x => !x.IsDeleted)
            .OrderBy(t => t.Sort)
            .FirstOrDefaultAsync(t => t.MaterialCode == name, GetCancellationToken(cancellationToken));
    }
    /// <summary>
    /// éªŒè¯åç§°æ˜¯å¦å­˜åœ¨ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨
    /// </summary>
    /// <param name="materialCode"></param>
    /// <param name="id"></param>
    /// <returns></returns>
    public async Task<bool> NameExistAsync(string materialCode, Guid? id = null)
    {
        return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.MaterialCode == materialCode);
    }
    /// <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<WmsMaterial>> GetListAsync(FunReturnResultModel<Expression<Func<WmsMaterial, 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)
            .OrderBy(sorting.IsNullOrEmpty() ? nameof(WmsMaterial.Sort) : sorting)
            .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<WmsMaterial, 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<WmsMaterial>> WithDetailsAsync()
    {
        return (await GetQueryableAsync())
            .Where(x => !x.IsDeleted).IncludeDetails();
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsPlaceRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,104 @@
using System.Linq.Dynamic.Core;
using CMS.Plugin.HIAWms.Domain.WmsPlaces;
using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
using Microsoft.AspNetCore.Components.Forms;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Specifications;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Repositories;
/// <inheritdoc />
public class EfCoreWmsPlaceRepository : EfCoreRepository<ICMSPluginDbContext, WmsPlace, Guid>, IWmsPlaceRepository
{
    /// <summary>
    /// Initializes a new instance of the <see cref="EfCoreWmsPlaceRepository"/> class.
    /// </summary>
    /// <param name="dbContextProvider">The database context provider.</param>
    public EfCoreWmsPlaceRepository(IDbContextProvider<ICMSPluginDbContext> dbContextProvider)
        : base(dbContextProvider)
    {
    }
    /// <inheritdoc />
    public virtual async Task<WmsPlace> FindByNameAsync(string name, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails()
            .Where(x => !x.IsDeleted)
            .OrderBy(t => t.Sort)
            .FirstOrDefaultAsync(t => t.PlaceNo == name, GetCancellationToken(cancellationToken));
    }
    /// <inheritdoc />
    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);
    }
    /// <inheritdoc />
    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;
    }
    /// <inheritdoc />
    public async Task<List<WmsPlace>> GetListAsync(WmsPlace? place, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, string filter = null, Specification<WmsPlace> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsPlaceSpecification();
        return await (await GetDbSetAsync())
            .IncludeDetails(includeDetails)
            .Where(specification.ToExpression())
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.PlaceNo.Contains(filter))
            .WhereIf(!string.IsNullOrEmpty(place.PlaceNo), u => u.PlaceNo == place.PlaceNo)
            .WhereIf(place.PlaceStatus > 0, u => u.PlaceStatus == place.PlaceStatus)
            .WhereIf(place.StorageTypeNo > 0, u => u.StorageTypeNo == place.StorageTypeNo)
            .WhereIf(place.Aisle > 0, u => u.Aisle == place.Aisle)
            .WhereIf(place.RowNo > 0, u => u.RowNo == place.RowNo)
            .WhereIf(place.ColumnNo > 0, u => u.ColumnNo == place.ColumnNo)
            .WhereIf(place.LayerNo > 0, u => u.LayerNo == place.LayerNo)
            .WhereIf(place.Islock > 0, u => u.Islock == place.Islock)
            .WhereIf(place.EmptyContainer > 0, u => u.EmptyContainer == place.EmptyContainer)
            .Where(x => !x.IsDeleted)
            .OrderBy(sorting.IsNullOrEmpty() ? nameof(WmsPlace.Sort) : sorting)
            .PageBy(skipCount, maxResultCount)
            .ToListAsync(GetCancellationToken(cancellationToken));
    }
    /// <inheritdoc />
    public async Task<long> GetCountAsync(WmsPlace? place, string filter = null, Specification<WmsPlace> specification = null, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsPlaceSpecification();
        return await (await GetQueryableAsync())
            .Where(specification.ToExpression())
            .WhereIf(!string.IsNullOrEmpty(place.PlaceNo), u => u.PlaceNo == place.PlaceNo)
            .WhereIf(place.PlaceStatus > 0, u => u.PlaceStatus == place.PlaceStatus)
            .WhereIf(place.StorageTypeNo > 0, u => u.StorageTypeNo == place.StorageTypeNo)
            .WhereIf(place.Aisle > 0, u => u.Aisle == place.Aisle)
            .WhereIf(place.RowNo > 0, u => u.RowNo == place.RowNo)
            .WhereIf(place.ColumnNo > 0, u => u.ColumnNo == place.ColumnNo)
            .WhereIf(place.LayerNo > 0, u => u.LayerNo == place.LayerNo)
            .WhereIf(place.Islock > 0, u => u.Islock == place.Islock)
            .WhereIf(place.EmptyContainer > 0, u => u.EmptyContainer == place.EmptyContainer)
            .Where(x => !x.IsDeleted)
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.PlaceNo.Contains(filter))
            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
    }
    /// <inheritdoc />
    public override async Task<IQueryable<WmsPlace>> WithDetailsAsync()
    {
        return (await GetQueryableAsync())
            .Where(x => !x.IsDeleted).IncludeDetails();
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/Repositories/EfCoreWmsStoreRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,100 @@
using System.Linq.Dynamic.Core;
using CMS.Plugin.HIAWms.Domain.WmsStores;
using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Specifications;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Repositories;
/// <inheritdoc />
public class EfCoreWmsStoreRepository : EfCoreRepository<ICMSPluginDbContext, WmsStore, Guid>, IWmsStoreRepository
{
    /// <summary>
    /// Initializes a new instance of the <see cref="EfCoreWmsStoreRepository"/> class.
    /// </summary>
    /// <param name="dbContextProvider">The database context provider.</param>
    public EfCoreWmsStoreRepository(IDbContextProvider<ICMSPluginDbContext> dbContextProvider)
        : base(dbContextProvider)
    {
    }
    /// <inheritdoc />
    public virtual async Task<WmsStore> FindByNameAsync(string name, CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .IncludeDetails()
            .Where(x => !x.IsDeleted)
            .OrderBy(t => t.Sort)
            .FirstOrDefaultAsync(t => t.StoreCode == name, GetCancellationToken(cancellationToken));
    }
    /// <inheritdoc />
    public async Task<bool> NameExistAsync(string storeCode, Guid? id = null)
    {
        return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.StoreCode == storeCode);
    }
    /// <inheritdoc />
    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;
    }
    /// <inheritdoc />
    public async Task<List<WmsStore>> GetListAsync(WmsStore? store, string sorting = null, int maxResultCount = int.MaxValue, int skipCount = 0, string filter = null, Specification<WmsStore> specification = null, bool includeDetails = false, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsStoreSpecification();
        return await (await GetDbSetAsync())
            .IncludeDetails(includeDetails)
            .Where(specification.ToExpression())
            .Where(x => !x.IsDeleted)
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.StoreCode.Contains(filter))
            .WhereIf(!string.IsNullOrEmpty(store.StoreCode),u=>u.StoreCode.Contains(store.StoreCode))
            .WhereIf(!string.IsNullOrEmpty(store.StoreName),u=>u.StoreName.Contains(store.StoreName))
            .OrderBy(sorting.IsNullOrEmpty() ? nameof(WmsStore.Sort) : sorting)
            .PageBy(skipCount, maxResultCount)
            .ToListAsync(GetCancellationToken(cancellationToken));
    }
    /// <summary>
    /// æŸ¥è¯¢ä»“库列表
    /// </summary>
    /// <param name="cancellationToken"></param>
    /// <returns></returns>
    public async Task<List<WmsStore>> GetListForSelectAsync( CancellationToken cancellationToken = default)
    {
        return await (await GetDbSetAsync())
            .ToListAsync(GetCancellationToken(cancellationToken));
    }
    /// <inheritdoc />
    public async Task<long> GetCountAsync(WmsStore? store, string filter = null, Specification<WmsStore> specification = null, CancellationToken cancellationToken = default)
    {
        specification ??= new WmsStoreSpecification();
        return await (await GetQueryableAsync())
            .Where(specification.ToExpression())
            .Where(x => !x.IsDeleted)
            .WhereIf(!filter.IsNullOrWhiteSpace(), u => u.StoreCode.Contains(filter))
            .WhereIf(!string.IsNullOrEmpty(store.StoreCode), u => u.StoreCode.Contains(store.StoreCode))
            .WhereIf(!string.IsNullOrEmpty(store.StoreName), u => u.StoreName.Contains(store.StoreName))
            .CountAsync(cancellationToken: GetCancellationToken(cancellationToken));
    }
    /// <inheritdoc />
    public override async Task<IQueryable<WmsStore>> WithDetailsAsync()
    {
        return (await GetQueryableAsync())
            .Where(x => !x.IsDeleted).IncludeDetails();
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.EntityFrameworkCore/appsettings.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,5 @@
{
    "ConnectionStrings": {
        "Default": "Server=localhost;Database=CMS.Plugin.HIAWms;User ID=root;Password=123abc.com"
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.MySQL/CMS.Plugin.HIAWms.MySQL.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
<Project Sdk="Microsoft.NET.Sdk">
  <Import Project="../../common.props" />
  <Import Project="../../configureawait.props" />
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
      <PackageReference Include="Volo.Abp.EntityFrameworkCore.MySQL" Version="$(ABPPackageVersion)" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.5">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
      <PrivateAssets>compile; contentFiles; build; buildMultitargeting; buildTransitive; analyzers; native</PrivateAssets>
    </PackageReference>
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\CMS.Plugin.HIAWms.EntityFrameworkCore\CMS.Plugin.HIAWms.EntityFrameworkCore.csproj" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="Migrations\" />
  </ItemGroup>
</Project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.MySQL/CMSPluginDbContext.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
using CMS.Plugin.HIAWms.Domain;
using CMS.Plugin.HIAWms.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.Modeling;
namespace CMS.Plugin.HIAWms.MySQL;
/// <summary>
/// æ•°æ®åº“上下文
/// </summary>
[ConnectionStringName(CMSPluginDbProperties.ConnectionStringName)]
public class CMSPluginDbContext : AbpDbContext<CMSPluginDbContext>, ICMSPluginDbContext
{
    /* Add DbSet properties for your Aggregate Roots / Entities here. */
    /// <summary>
    /// Initializes a new instance of the <see cref="CMSPluginDbContext"/> class.
    /// </summary>
    /// <param name="options">The options.</param>
    public CMSPluginDbContext(DbContextOptions<CMSPluginDbContext> options)
        : base(options)
    {
    }
    /// <inheritdoc />
    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
        /* Include modules to your migration db context */
        builder.ConfigureWmsContainer();
        builder.ConfigureWmsStore();
        builder.ConfigureWmsArea();
        builder.ConfigureWmsPlace();
        builder.ConfigureWmsMaterial();
        builder.ConfigureWmsInOutStockRecord();
        builder.ConfigureWmsTask();
        /* Configure your own tables/entities inside here */
        //builder.Entity<YourEntity>(b =>
        //{
        //    b.ToTable(CMSPluginDbProperties.DbTablePrefix + "YourEntities", CMSPluginDbProperties.DbSchema);
        //    b.ConfigureByConvention(); //auto configure for the base class props
        //    //...
        //});
        builder.TryConfigureObjectExtensions<CMSPluginDbContext>();
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.MySQL/CMSPluginDbContextFactory.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
using CMS.Plugin.HIAWms.Domain;
using CMS.Plugin.HIAWms.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;
namespace CMS.Plugin.HIAWms.MySQL;
/// <summary>
/// This class is needed for EF Core console commands
///  (like Add-Migration and Update-Database commands)
/// </summary>
public class CMSPluginDbContextFactory : IDesignTimeDbContextFactory<CMSPluginDbContext>
{
    /// <summary>
    /// Creates a new instance of a derived context.
    /// </summary>
    /// <param name="args">Arguments provided by the design-time service.</param>
    public CMSPluginDbContext CreateDbContext(string[] args)
    {
        CMSPluginEfCoreEntityExtensionMappings.Configure();
        var configuration = BuildConfiguration();
        var builder = new DbContextOptionsBuilder<CMSPluginDbContext>()
                .UseMySql(configuration.GetConnectionString("Default"), MySqlServerVersion.LatestSupportedServerVersion,  x => x.MigrationsHistoryTable(CMSPluginDbProperties.MigrationsHistoryTable, CMSPluginDbProperties.DbSchema));
        return new CMSPluginDbContext(builder.Options);
    }
    /// <summary>
    /// Builds the configuration.
    /// </summary>
    /// <returns></returns>
    private static IConfigurationRoot BuildConfiguration()
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(Path.Combine(Directory.GetCurrentDirectory(), "../CMS.Plugin.HIAWms.EntityFrameworkCore/"))
            .AddJsonFile("appsettings.json", optional: false);
        return builder.Build();
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.MySQL/CMSPluginMySQLModule.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
using CMS.Plugin.HIAWms.Domain;
using CMS.Plugin.HIAWms.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Modularity;
namespace CMS.Plugin.HIAWms.MySQL;
/// <summary>
/// EntityFrameworkCore模块
/// </summary>
[DependsOn(typeof(CMSPluginEntityFrameworkCoreModule))]
public class CMSPluginMySQLModule : AbpModule
{
    /// <inheritdoc />
    public override void PreConfigureServices(ServiceConfigurationContext context)
    {
        CMSPluginEfCoreEntityExtensionMappings.Configure();
    }
    /// <inheritdoc />
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        context.Services.AddAbpDbContext<CMSPluginDbContext>(options =>
        {
            /* Remove "includeAllEntities: true" to create
             * default repositories only for aggregate roots */
            //options.AddDefaultRepositories(includeAllEntities: true);
        });
        Configure<AbpDbContextOptions>(options =>
        {
            /* The main point to change your DBMS.
             * See also CMSMigrationsDbContextFactory for EF Core tooling. */
            options.UseMySQL(x =>
            {
                x.MigrationsHistoryTable(CMSPluginDbProperties.MigrationsHistoryTable, CMSPluginDbProperties.DbSchema);
                //x.EnableRetryOnFailure();
            });
        });
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.MySQL/FodyWeavers.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
  <ConfigureAwait ContinueOnCapturedContext="false" />
</Weavers>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.MySQL/Properties/AssemblyInfo.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2 @@
using System.Runtime.CompilerServices;
[assembly:InternalsVisibleToAttribute("CMS.Plugin.EntityFrameworkCore.Tests")]
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.MySQL/Scripts/UpdateDB.bat
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
cd ../
dotnet ef database update -c CMSPluginDbContext
cmd
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.MySQL/Scripts/UpdateMigrations.bat
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
cd ../
dotnet ef migrations add InitialCreate1 -c CMSPluginDbContext -o Migrations
::dotnet ef migrations add Update1 -c CMSPluginDbContext -o Migrations
::dotnet ef migrations add Update2 -c CMSPluginDbContext -o Migrations
::dotnet ef migrations add Update3 -c CMSPluginDbContext -o Migrations
cmd
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.PostgreSql/CMS.Plugin.HIAWms.PostgreSql.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
<Project Sdk="Microsoft.NET.Sdk">
  <Import Project="../../common.props" />
  <Import Project="../../configureawait.props" />
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
      <PackageReference Include="Volo.Abp.EntityFrameworkCore.PostgreSql" Version="$(ABPPackageVersion)" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.5">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
      <PrivateAssets>compile; contentFiles; build; buildMultitargeting; buildTransitive; analyzers; native</PrivateAssets>
    </PackageReference>
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\CMS.Plugin.HIAWms.EntityFrameworkCore\CMS.Plugin.HIAWms.EntityFrameworkCore.csproj" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="Migrations\" />
  </ItemGroup>
</Project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.PostgreSql/CMSPluginDbContext.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
using CMS.Plugin.HIAWms.Domain;
using CMS.Plugin.HIAWms.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.Modeling;
namespace CMS.Plugin.HIAWms.PostgreSql;
/// <summary>
/// æ•°æ®åº“上下文
/// </summary>
[ConnectionStringName(CMSPluginDbProperties.ConnectionStringName)]
public class CMSPluginDbContext : AbpDbContext<CMSPluginDbContext>, ICMSPluginDbContext
{
    /* Add DbSet properties for your Aggregate Roots / Entities here. */
    /// <summary>
    /// Initializes a new instance of the <see cref="CMSPluginDbContext"/> class.
    /// </summary>
    /// <param name="options">The options.</param>
    public CMSPluginDbContext(DbContextOptions<CMSPluginDbContext> options)
        : base(options)
    {
    }
    /// <inheritdoc />
    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
        /* Include modules to your migration db context */
        builder.ConfigureWmsContainer();
        builder.ConfigureWmsStore();
        builder.ConfigureWmsArea();
        builder.ConfigureWmsPlace();
        builder.ConfigureWmsMaterial();
        /* Configure your own tables/entities inside here */
        //builder.Entity<YourEntity>(b =>
        //{
        //    b.ToTable(CMSPluginDbProperties.DbTablePrefix + "YourEntities", CMSPluginDbProperties.DbSchema);
        //    b.ConfigureByConvention(); //auto configure for the base class props
        //    //...
        //});
        builder.TryConfigureObjectExtensions<CMSPluginDbContext>();
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.PostgreSql/CMSPluginDbContextFactory.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
using CMS.Plugin.HIAWms.Domain;
using CMS.Plugin.HIAWms.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;
namespace CMS.Plugin.HIAWms.PostgreSql;
/// <summary>
/// This class is needed for EF Core console commands
///  (like Add-Migration and Update-Database commands)
/// </summary>
public class CMSPluginDbContextFactory : IDesignTimeDbContextFactory<CMSPluginDbContext>
{
    /// <summary>
    /// Creates a new instance of a derived context.
    /// </summary>
    /// <param name="args">Arguments provided by the design-time service.</param>
    public CMSPluginDbContext CreateDbContext(string[] args)
    {
        CMSPluginEfCoreEntityExtensionMappings.Configure();
        var configuration = BuildConfiguration();
        var builder = new DbContextOptionsBuilder<CMSPluginDbContext>()
                .UseNpgsql(configuration.GetConnectionString("Default"),  x => x.MigrationsHistoryTable(CMSPluginDbProperties.MigrationsHistoryTable, CMSPluginDbProperties.DbSchema));
        return new CMSPluginDbContext(builder.Options);
    }
    /// <summary>
    /// Builds the configuration.
    /// </summary>
    /// <returns></returns>
    private static IConfigurationRoot BuildConfiguration()
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(Path.Combine(Directory.GetCurrentDirectory(), "../CMS.Plugin.HIAWms.EntityFrameworkCore/"))
            .AddJsonFile("appsettings.json", optional: false);
        return builder.Build();
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.PostgreSql/CMSPluginPostgreSqlModule.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
using CMS.Plugin.HIAWms.Domain;
using CMS.Plugin.HIAWms.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Modularity;
namespace CMS.Plugin.HIAWms.PostgreSql;
/// <summary>
/// EntityFrameworkCore模块
/// </summary>
[DependsOn(typeof(CMSPluginEntityFrameworkCoreModule))]
public class CMSPluginPostgreSqlModule : AbpModule
{
    /// <inheritdoc />
    public override void PreConfigureServices(ServiceConfigurationContext context)
    {
        CMSPluginEfCoreEntityExtensionMappings.Configure();
    }
    /// <inheritdoc />
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        context.Services.AddAbpDbContext<CMSPluginDbContext>(options =>
        {
            /* Remove "includeAllEntities: true" to create
             * default repositories only for aggregate roots */
            //options.AddDefaultRepositories(includeAllEntities: true);
        });
        Configure<AbpDbContextOptions>(options =>
        {
            /* The main point to change your DBMS.
             * See also CMSMigrationsDbContextFactory for EF Core tooling. */
            options.UseNpgsql(x =>
            {
                x.MigrationsHistoryTable(CMSPluginDbProperties.MigrationsHistoryTable, CMSPluginDbProperties.DbSchema);
                //x.EnableRetryOnFailure();
            });
        });
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.PostgreSql/FodyWeavers.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
  <ConfigureAwait ContinueOnCapturedContext="false" />
</Weavers>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.PostgreSql/Properties/AssemblyInfo.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2 @@
using System.Runtime.CompilerServices;
[assembly:InternalsVisibleToAttribute("CMS.Plugin.EntityFrameworkCore.Tests")]
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.PostgreSql/Scripts/UpdateDB.bat
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
cd ../
dotnet ef database update -c CMSPluginDbContext
cmd
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.PostgreSql/Scripts/UpdateMigrations.bat
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
cd ../
dotnet ef migrations add InitialCreate -c CMSPluginDbContext -o Migrations
::dotnet ef migrations add Update1 -c CMSPluginDbContext -o Migrations
::dotnet ef migrations add Update2 -c CMSPluginDbContext -o Migrations
::dotnet ef migrations add Update3 -c CMSPluginDbContext -o Migrations
cmd
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.SqlServer/CMS.Plugin.HIAWms.SqlServer.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
<Project Sdk="Microsoft.NET.Sdk">
  <Import Project="../../common.props" />
  <Import Project="../../configureawait.props" />
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
      <PackageReference Include="Volo.Abp.EntityFrameworkCore.SqlServer" Version="$(ABPPackageVersion)" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.5">
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
      <PrivateAssets>compile; contentFiles; build; buildMultitargeting; buildTransitive; analyzers; native</PrivateAssets>
    </PackageReference>
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\CMS.Plugin.HIAWms.EntityFrameworkCore\CMS.Plugin.HIAWms.EntityFrameworkCore.csproj" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="Migrations\" />
  </ItemGroup>
</Project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.SqlServer/CMSPluginDbContext.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
using CMS.Plugin.HIAWms.Domain;
using CMS.Plugin.HIAWms.EntityFrameworkCore.Extensions;
using CMS.Plugin.HIAWms.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.Modeling;
namespace CMS.Plugin.HIAWms.SqlServer;
/// <summary>
/// æ•°æ®åº“上下文
/// </summary>
[ConnectionStringName(CMSPluginDbProperties.ConnectionStringName)]
public class CMSPluginDbContext : AbpDbContext<CMSPluginDbContext>, ICMSPluginDbContext
{
    /* Add DbSet properties for your Aggregate Roots / Entities here. */
    /// <summary>
    /// Initializes a new instance of the <see cref="CMSPluginDbContext"/> class.
    /// </summary>
    /// <param name="options">The options.</param>
    public CMSPluginDbContext(DbContextOptions<CMSPluginDbContext> options)
        : base(options)
    {
    }
    /// <inheritdoc />
    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
        /* Include modules to your migration db context */
        builder.ConfigureWmsContainer();
        builder.ConfigureWmsStore();
        builder.ConfigureWmsArea();
        builder.ConfigureWmsPlace();
        builder.ConfigureWmsMaterial();
        /* Configure your own tables/entities inside here */
        //builder.Entity<YourEntity>(b =>
        //{
        //    b.ToTable(CMSPluginDbProperties.DbTablePrefix + "YourEntities", CMSPluginDbProperties.DbSchema);
        //    b.ConfigureByConvention(); //auto configure for the base class props
        //    //...
        //});
        builder.TryConfigureObjectExtensions<CMSPluginDbContext>();
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.SqlServer/CMSPluginDbContextFactory.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
using CMS.Plugin.HIAWms.Domain;
using CMS.Plugin.HIAWms.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;
namespace CMS.Plugin.HIAWms.SqlServer;
/// <summary>
/// This class is needed for EF Core console commands
///  (like Add-Migration and Update-Database commands)
/// </summary>
public class CMSPluginDbContextFactory : IDesignTimeDbContextFactory<CMSPluginDbContext>
{
    /// <summary>
    /// Creates a new instance of a derived context.
    /// </summary>
    /// <param name="args">Arguments provided by the design-time service.</param>
    public CMSPluginDbContext CreateDbContext(string[] args)
    {
        CMSPluginEfCoreEntityExtensionMappings.Configure();
        var configuration = BuildConfiguration();
        var builder = new DbContextOptionsBuilder<CMSPluginDbContext>()
                .UseSqlServer(configuration.GetConnectionString("Default"),  x => x.MigrationsHistoryTable(CMSPluginDbProperties.MigrationsHistoryTable, CMSPluginDbProperties.DbSchema));
        return new CMSPluginDbContext(builder.Options);
    }
    /// <summary>
    /// Builds the configuration.
    /// </summary>
    /// <returns></returns>
    private static IConfigurationRoot BuildConfiguration()
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(Path.Combine(Directory.GetCurrentDirectory(), "../CMS.Plugin.HIAWms.EntityFrameworkCore/"))
            .AddJsonFile("appsettings.json", optional: false);
        return builder.Build();
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.SqlServer/CMSPluginSqlServerModule.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
using CMS.Plugin.HIAWms.Domain;
using CMS.Plugin.HIAWms.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Modularity;
namespace CMS.Plugin.HIAWms.SqlServer;
/// <summary>
/// EntityFrameworkCore模块
/// </summary>
[DependsOn(typeof(CMSPluginEntityFrameworkCoreModule))]
public class CMSPluginSqlServerModule : AbpModule
{
    /// <inheritdoc />
    public override void PreConfigureServices(ServiceConfigurationContext context)
    {
        CMSPluginEfCoreEntityExtensionMappings.Configure();
    }
    /// <inheritdoc />
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        context.Services.AddAbpDbContext<CMSPluginDbContext>(options =>
        {
            /* Remove "includeAllEntities: true" to create
             * default repositories only for aggregate roots */
            //options.AddDefaultRepositories(includeAllEntities: true);
        });
        Configure<AbpDbContextOptions>(options =>
        {
            /* The main point to change your DBMS.
             * See also CMSMigrationsDbContextFactory for EF Core tooling. */
            options.UseSqlServer(x =>
            {
                x.MigrationsHistoryTable(CMSPluginDbProperties.MigrationsHistoryTable, CMSPluginDbProperties.DbSchema);
                //x.EnableRetryOnFailure();
            });
        });
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.SqlServer/FodyWeavers.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
  <ConfigureAwait ContinueOnCapturedContext="false" />
</Weavers>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.SqlServer/Properties/AssemblyInfo.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2 @@
using System.Runtime.CompilerServices;
[assembly:InternalsVisibleToAttribute("CMS.Plugin.EntityFrameworkCore.Tests")]
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.SqlServer/Scripts/UpdateDB.bat
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
cd ../
dotnet ef database update -c CMSPluginDbContext
cmd
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms.SqlServer/Scripts/UpdateMigrations.bat
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
cd ../
dotnet ef migrations add InitialCreate -c CMSPluginDbContext -o Migrations
::dotnet ef migrations add Update1 -c CMSPluginDbContext -o Migrations
::dotnet ef migrations add Update2 -c CMSPluginDbContext -o Migrations
::dotnet ef migrations add Update3 -c CMSPluginDbContext -o Migrations
cmd
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/Apis/IHIAWmsExternalApi.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainers;
using WebApiClientCore.Attributes;
namespace CMS.Plugin.HIAWms.Apis
{
    /// <summary>
    /// å¤–部Http API对接 // https://webapiclient.github.io/guide/getting-started.html
    /// </summary>
    public interface IHIAWmsExternalApi
    {
        /// <summary>
        ///  CreateAsync
        /// </summary>
        /// <returns></returns>
        [HttpPost("api/v1/hiawms/wmscontainer")]
        Task<WmsContainerDto> CreateAsync([JsonContent] WmsContainerCreateDto input);
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/CMS.Plugin.UtilityApi.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,73 @@
<Project Sdk="Microsoft.NET.Sdk">
    <Import Project="../../common.props" />
    <Import Project="../../configureawait.props" />
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
        <EnableDynamicLoading>true</EnableDynamicLoading>
        <ProduceReferenceAssembly>false</ProduceReferenceAssembly>
        <GenerateDocumentationFile>true</GenerateDocumentationFile>
    </PropertyGroup>
    <PropertyGroup Condition="$([MSBuild]::IsOSPlatform('Windows'))">
        <CMSRootPath>D:\Program Files\CMS Editor</CMSRootPath>
        <OutputPath>$(CMSRootPath)\plugins\cms.plugin.hiawms</OutputPath>
    </PropertyGroup>
    <PropertyGroup Condition="$([MSBuild]::IsOSPlatform('OSX'))">
        <CMSRootPath>/Volumes/SSD/CMS Editor</CMSRootPath>
        <OutputPath>$(CMSRootPath)\plugins\cms.plugin.hiawms</OutputPath>
    </PropertyGroup>
    <ItemGroup>
      <None Remove="appsettings.json" />
      <None Remove="Flows\50001_1.pfd" />
      <None Remove="Flows\FlowInfo.xml" />
      <None Remove="Resources\Templates\WmsContainer导出模板.xlsx" />
    </ItemGroup>
    <ItemGroup>
      <Content Include="appsettings.json">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Content>
    </ItemGroup>
    <ItemGroup>
      <EmbeddedResource Include="Resources\Templates\WmsContainer导出模板.xlsx">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </EmbeddedResource>
    </ItemGroup>
    <ItemGroup>
        <PackageReference Include="CMS.Framework.AspNetCore" Version="2.16.1" />
        <PackageReference Include="CMS.Extensions.Variable" Version="2.16.1" />
        <PackageReference Include="CMS.Extensions.Data" Version="2.16.1" />
        <PackageReference Include="CMS.Data.Stressing" Version="2.16.1" />
        <PackageReference Include="CMS.Extensions.Abp" Version="1.4.0" />
        <PackageReference Include="WebApiClientCore" Version="2.0.4" />
    </ItemGroup>
    <ItemGroup>
        <ProjectReference Include="..\CMS.Plugin.HIAWms.Application\CMS.Plugin.HIAWms.Application.csproj" />
        <ProjectReference Include="..\CMS.Plugin.HIAWms.MySQL\CMS.Plugin.HIAWms.MySQL.csproj" />
        <ProjectReference Include="..\CMS.Plugin.HIAWms.PostgreSql\CMS.Plugin.HIAWms.PostgreSql.csproj" />
        <ProjectReference Include="..\CMS.Plugin.HIAWms.SqlServer\CMS.Plugin.HIAWms.SqlServer.csproj" />
    </ItemGroup>
    <ItemGroup>
      <Reference Include="CmsQueryExtensions">
        <HintPath>..\..\..\..\CommonDLL\CmsQueryExtensions.dll</HintPath>
      </Reference>
    </ItemGroup>
    <ItemGroup>
      <Resource Include="Flows\50001_1.pfd">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Resource>
      <Resource Include="Flows\FlowInfo.xml">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      </Resource>
    </ItemGroup>
</Project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/CMSPluginEntry.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,109 @@
using System.Collections;
using Autofac;
using CMS.Data.Stressing;
using CMS.DataPersistence;
using CMS.DataPersistence.Data;
using CMS.Extensions.Abp.Autofac.Extensions.DependencyInjection;
using CMS.Plugin.MesSuite.Abstractions;
using CMS.Plugin.MesSuite.Abstractions.Consts;
using CMS.Plugin.HIAWms.Abstractions;
using CMS.Plugin.HIAWms.Apis;
using CMS.Plugin.HIAWms.Domain;
using CMS.Plugin.HIAWms.ProjectService;
using CMS.Plugin.HIAWms.Workers;
using CMS.Plugin.HIAWms.Apis;
using CMS.Project.Abstractions;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Structing.AspNetCore;
using Structing.Core;
using Structing.Web;
using SYC.Plugin;
using Volo.Abp.BackgroundWorkers;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Modularity.PlugIns;
namespace CMS.Plugin.HIAWms;
/// <summary>
/// CMS插件入口,使用<see cref="EnableApplicationPartAttribute"/>将导入Controller.
/// </summary>
[EnableApplicationPart]
public class CMSPluginEntry : PluginEntry
{
    private readonly IServiceCollection _service = new ServiceCollection();
    /// <inheritdoc />
    public override void Register(IRegisteContext context)
    {
        var configuration = context.Features.GetConfiguration();
        // é…ç½®å¤–部HttpApi: https://webapiclient.github.io/
        context.Services
            .AddHttpApi<IHIAWmsExternalApi>()
            .ConfigureHttpApi(configuration.GetSection(nameof(IHIAWmsExternalApi)));
        context.Services.TryAddHIAWms();
        context.Services.AddScoped<IProjectRuntimeMigrator, CMSPluginRuntimeMigrator>();
        context.Services.AddSingleton<IProjectService, HIAWmsProjectService>();
        context.Services.AddScoped<IEFDataProvider>(p =>
        {
            var cfg = p.GetRequiredService<IDataRuntimeConfig>();
            return new DefaultEFDataProvider(CMSPluginMesSuiteOptions.DataProviderName, CMSPluginMesSuiteOptions.GetDatabaseSuffix(CMSPluginDbProperties.MigrationsHistoryTable), CMSPluginDbProperties.MigrationsHistoryTable, cfg);
        });
        _service.AddObjectAccessor<IApplicationBuilder>();
        _service.AddApplication<CMSPluginModule>(options =>
        {
            var databaseType = configuration[SectionName.DatabaseType] ?? "mysql";
            if (KnowsDbCode.IsMysql(databaseType))
            {
                options.PlugInSources.Add(new TypePlugInSource(
                    typeof(MySQL.CMSPluginMySQLModule)
                ));
            }
            else if (KnowsDbCode.IsSqlServer(databaseType))
            {
                options.PlugInSources.Add(new TypePlugInSource(
                    typeof(SqlServer.CMSPluginSqlServerModule)
                ));
            }
            else if (KnowsDbCode.IsPostgreSql(databaseType))
            {
                options.PlugInSources.Add(new TypePlugInSource(
                    typeof(PostgreSql.CMSPluginPostgreSqlModule)
                ));
            }
        });
        base.Register(context);
    }
    /// <inheritdoc />
    public override void ConfigureContainer(ContainerBuilder builder)
    {
        builder.Populate(_service);
        base.ConfigureContainer(builder);
    }
    /// <inheritdoc />
    public override async Task ReadyAsync(IReadyContext context)
    {
        context.Provider.GetRequiredService<ObjectAccessor<IApplicationBuilder>>().Value = context.Features.GetApplicationBuilder();
        var app = context.Features.GetApplicationBuilder();
        await app.InitializeApplicationAsync();
        await base.ReadyAsync(context);
    }
    /// <inheritdoc />
    public override async Task AfterReadyAsync(IReadyContext context)
    {
        await context.GetRequiredService<IBackgroundWorkerManager>().AddAsync(context.GetRequiredService<HIAWmsWorker>());
        await base.AfterReadyAsync(context);
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/CMSPluginModule.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
using System.Reflection;
using CMS.Extensions.Abp;
using CMS.Extensions.Abp.AspNetCore;
using CMS.Plugin.HIAWms.Abstractions;
using CMS.Plugin.HIAWms.Application;
using CMS.Plugin.HIAWms.EntityFrameworkCore;
using CMS.Plugin.HIAWms.Jobs;
using Volo.Abp.BackgroundJobs;
using Volo.Abp.Modularity;
namespace CMS.Plugin.HIAWms
{
    /// <summary>
    /// CMS æ’件依赖加载启动模块
    /// </summary>
    [DependsOn(
        typeof(CMSPluginAbpModule),
        typeof(CMSPluginAbpAspNetCoreModule),
        typeof(CMSPluginApplicationModule),
        typeof(CMSPluginEntityFrameworkCoreModule)
    )]
    public class CMSPluginModule : AbpStartupModule
    {
        /// <inheritdoc />
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
            Configure<AbpBackgroundJobOptions>(options =>
            {
                options.AddJob<HIAWmsJob>();
            });
        }
        /// <inheritdoc />
        public override Assembly[]? GetSharedAssemblies()
        {
            return base.GetSharedAssemblies().Concat(new[]
            {
                typeof(CMSPluginHIAWmsAbstractionsModule).Assembly,
            }).ToArray();
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/CMSPluginRuntimeMigrator.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
using CMS.Plugin.HIAWms.Domain.Data;
using CMS.Project.Abstractions;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Volo.Abp.DependencyInjection;
namespace CMS.Plugin.HIAWms
{
    /// <summary>
    /// å·¥ç¨‹æ•°æ®åº“迁移器,当<see cref="IProjectRunner"/>加载工程时此对象会被创建调用
    /// </summary>
    public class CMSPluginRuntimeMigrator : IProjectRuntimeMigrator
    {
        /// <summary>
        /// æ‰§è¡Œè¿ç§»
        /// </summary>
        /// <param name="project">当前要运行的工程</param>
        /// <param name="serviceProvider">存在运行工程上下文的serviceProvider</param>
        /// <returns></returns>
        public async Task UpgradeAsync(Project.Project project, IServiceProvider serviceProvider)
        {
            var objectAccessor = serviceProvider.GetService<ObjectAccessor<Project.Project>>();
            if (objectAccessor != null)
            {
                objectAccessor.Value = project;
            }
            var logger = serviceProvider.GetRequiredService<ILogger<CMSPluginRuntimeMigrator>>();
            try
            {
                // é€šè¿‡serviceProvider获取自己的DbContext并进行创建或迁移流程
                logger.LogInformation($"Start {project.Info.Id} HIAWms dbcontext create");
                await serviceProvider.GetRequiredService<CMSPluginDbMigrationService>().MigrateAsync();
            }
            catch (Exception ex)
            {
                logger.LogError(ex, "Create HIAWms db failed");
            }
            if (objectAccessor != null)
            {
                objectAccessor.Value = null;
            }
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/Controller/WmsAreaController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,187 @@
using Ao.Lang;
using CMS.Extensions.Abp.AspNetCore.Mvc.Filters;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsAreas;
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>
    /// WmsArea服务
    /// </summary>
    [ApiController]
    [TypeFilter(typeof(CMSLanguageFilter))]
    [TypeFilter(typeof(CMSUowActionFilter))]
    [TypeFilter(typeof(CMSAuditActionFilter))]
    [TypeFilter(typeof(CMSExceptionFilter))]
    [Route("api/v{version:apiVersion}/HIAWms/[controller]")]
    public class WmsAreaController : ControllerBase
    {
        private readonly IWmsAreaAppService _wmsareaAppService;
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsAreaController"/> class.
        /// </summary>
        /// <param name="wmsareaAppService">The wmsarea application service.</param>
        public WmsAreaController(IWmsAreaAppService wmsareaAppService)
        {
            _wmsareaAppService = wmsareaAppService;
        }
        /// <summary>
        /// èŽ·å–wmsarea.
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        [HttpGet]
        [Route("{id}")]
        public virtual Task<WmsAreaDto> GetAsync(Guid id)
        {
            return _wmsareaAppService.GetAsync(id);
        }
        /// <summary>
        /// èŽ·å–wmsarea的列表.
        /// </summary>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        [HttpGet]
        public virtual Task<PagedResultDto<WmsAreaDto>> GetListAsync([FromQuery] GetWmsAreasInput input)
        {
            return _wmsareaAppService.GetListAsync(input);
        }
        /// <summary>
        /// åˆ›å»ºwmsarea.
        /// </summary>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPost]
        public virtual Task<WmsAreaDto> CreateAsync(WmsAreaCreateDto input)
        {
            return _wmsareaAppService.CreateAsync(input);
        }
        /// <summary>
        /// æ›´æ–°wmsarea.
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPut]
        [Route("{id}")]
        public virtual Task<WmsAreaDto> UpdateAsync(Guid id, WmsAreaUpdateDto input)
        {
            return _wmsareaAppService.UpdateAsync(id, input);
        }
        /// <summary>
        /// å…‹éš†WmsArea.
        /// </summary>
        /// <param name="ids">Id集合.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPost]
        [Route("Clone")]
        public virtual Task<List<WmsAreaDto>> CloneAsync([FromBody] IEnumerable<Guid> ids)
        {
            return _wmsareaAppService.CloneAsync(ids);
        }
        /// <summary>
        /// åˆ é™¤wmsarea.
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpDelete]
        [Route("{id}")]
        public virtual Task DeleteAsync(Guid id)
        {
            return _wmsareaAppService.DeleteAsync(id);
        }
        /// <summary>
        /// æ‰¹é‡åˆ é™¤wmsarea.
        /// </summary>
        /// <param name="ids">The ids.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpDelete]
        public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids)
        {
            return _wmsareaAppService.DeleteManyAsync(ids);
        }
        /// <summary>
        /// è°ƒæ•´æŽ’序.
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        [HttpPut]
        [Route("{id}/AdjustSort/{sort}")]
        public virtual Task AdjustSortAsync(Guid id, int sort)
        {
            return _wmsareaAppService.AdjustSortAsync(id, sort);
        }
        /// <summary>
        /// å¯¼å…¥wmsarea.
        /// </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 wmsareaRows = sheetNames.Contains("配置") ? MiniExcel.Query<WmsAreasImportModel.WmsAreaImportModel>(stream, sheetName: "配置").ToList() : new();
            if (!wmsareaRows.Any())
            {
                throw new UserFriendlyException("请检查导入的表格");
            }
            await _wmsareaAppService.ImportAsync(new WmsAreasImportModel
            {
                WmsAreas = wmsareaRows,
            });
            return Ok();
        }
        /// <summary>
        /// å¯¼å‡ºwmsarea.
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("Export")]
        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsAreasInput input)
        {
            input.MaxResultCount = int.MaxValue;
            var exportData = await _wmsareaAppService.ExportAsync(input);
            var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WmsArea导出模板.xlsx");
            if (!System.IO.File.Exists(templatePath))
            {
                templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WmsArea导出模板.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" };
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/Controller/WmsContainerController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,187 @@
using Ao.Lang;
using CMS.Extensions.Abp.AspNetCore.Mvc.Filters;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainers;
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>
    /// WmsContainer服务
    /// </summary>
    [ApiController]
    [TypeFilter(typeof(CMSLanguageFilter))]
    [TypeFilter(typeof(CMSUowActionFilter))]
    [TypeFilter(typeof(CMSAuditActionFilter))]
    [TypeFilter(typeof(CMSExceptionFilter))]
    [Route("api/v{version:apiVersion}/HIAWms/[controller]")]
    public class WmsContainerController : ControllerBase
    {
        private readonly IWmsContainerAppService _wmscontainerAppService;
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsContainerController"/> class.
        /// </summary>
        /// <param name="wmscontainerAppService">The wmscontainer application service.</param>
        public WmsContainerController(IWmsContainerAppService wmscontainerAppService)
        {
            _wmscontainerAppService = wmscontainerAppService;
        }
        /// <summary>
        /// èŽ·å–wmscontainer.
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        [HttpGet]
        [Route("{id}")]
        public virtual Task<WmsContainerDto> GetAsync(Guid id)
        {
            return _wmscontainerAppService.GetAsync(id);
        }
        /// <summary>
        /// èŽ·å–wmscontainer的列表.
        /// </summary>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        [HttpGet]
        public virtual Task<PagedResultDto<WmsContainerDto>> GetListAsync([FromQuery] GetWmsContainersInput input)
        {
            return _wmscontainerAppService.GetListAsync(input);
        }
        /// <summary>
        /// åˆ›å»ºwmscontainer.
        /// </summary>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPost]
        public virtual Task<WmsContainerDto> CreateAsync(WmsContainerCreateDto input)
        {
            return _wmscontainerAppService.CreateAsync(input);
        }
        /// <summary>
        /// æ›´æ–°wmscontainer.
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPut]
        [Route("{id}")]
        public virtual Task<WmsContainerDto> UpdateAsync(Guid id, WmsContainerUpdateDto input)
        {
            return _wmscontainerAppService.UpdateAsync(id, input);
        }
        /// <summary>
        /// å…‹éš†WmsContainer.
        /// </summary>
        /// <param name="ids">Id集合.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPost]
        [Route("Clone")]
        public virtual Task<List<WmsContainerDto>> CloneAsync([FromBody] IEnumerable<Guid> ids)
        {
            return _wmscontainerAppService.CloneAsync(ids);
        }
        /// <summary>
        /// åˆ é™¤wmscontainer.
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpDelete]
        [Route("{id}")]
        public virtual Task DeleteAsync(Guid id)
        {
            return _wmscontainerAppService.DeleteAsync(id);
        }
        /// <summary>
        /// æ‰¹é‡åˆ é™¤wmscontainer.
        /// </summary>
        /// <param name="ids">The ids.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpDelete]
        public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids)
        {
            return _wmscontainerAppService.DeleteManyAsync(ids);
        }
        /// <summary>
        /// è°ƒæ•´æŽ’序.
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        [HttpPut]
        [Route("{id}/AdjustSort/{sort}")]
        public virtual Task AdjustSortAsync(Guid id, int sort)
        {
            return _wmscontainerAppService.AdjustSortAsync(id, sort);
        }
        /// <summary>
        /// å¯¼å…¥wmscontainer.
        /// </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 wmscontainerRows = sheetNames.Contains("配置") ? MiniExcel.Query<WmsContainersImportModel.WmsContainerImportModel>(stream, sheetName: "配置").ToList() : new();
            if (!wmscontainerRows.Any())
            {
                throw new UserFriendlyException("请检查导入的表格");
            }
            await _wmscontainerAppService.ImportAsync(new WmsContainersImportModel
            {
                WmsContainers = wmscontainerRows,
            });
            return Ok();
        }
        /// <summary>
        /// å¯¼å‡ºwmscontainer.
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("Export")]
        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsContainersInput input)
        {
            input.MaxResultCount = int.MaxValue;
            var exportData = await _wmscontainerAppService.ExportAsync(input);
            var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WmsContainer导出模板.xlsx");
            if (!System.IO.File.Exists(templatePath))
            {
                templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WmsContainer导出模板.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" };
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/Controller/WmsEnumController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,69 @@
using CMS.Extensions.Abp.AspNetCore.Mvc.Filters;
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.Util;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Web;
using static CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsAreas.WmsAreaCreateOrUpdateDtoBase;
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 WmsEnumController : ControllerBase
    {
        private readonly IWmsEnumAppService _wmsEnumAppService;
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsEnumController"/> class.
        /// æž„造函数.
        /// </summary>
        /// <param name="wmsEnumAppService"></param>
        public WmsEnumController(IWmsEnumAppService wmsEnumAppService)
        {
            _wmsEnumAppService = wmsEnumAppService;
        }
        /// <summary>
        /// èŽ·å–æžšä¸¾æ•°æ®.
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost]
        public List<EnumItem> GetEnumDataList(WmsEnumInput input)
        {
            return _wmsEnumAppService.GetEnumDataList(input);
        }
        /// <summary>
        /// èŽ·å–ä»“åº“åˆ—è¡¨
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("StoreList")]
        public async Task<List<WmsStoreForAreaOutpur>> GetStreList()
        {
            return await _wmsEnumAppService.GetStreList();
        }
        /// <summary>
        /// åº“区列表
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("AreaList")]
        public async Task<List<AreaForListOuptut>> GetAreaListAsync()
        {
            return await _wmsEnumAppService.GetAreaListAsync();
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/Controller/WmsInOutStockRecordController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,188 @@
using Ao.Lang;
using CMS.Extensions.Abp.AspNetCore.Mvc.Filters;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockRecord;
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 WmsInOutStockRecordController : ControllerBase
    {
        private readonly IWmsInOutStockRecordAppService _wmsInOutStockRecordAppService;
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsInOutStockRecordController"/> class.
        /// </summary>
        /// <param name="wmsInOutStockRecordAppService">The wmsInOutStockRecord application service.</param>
        public WmsInOutStockRecordController(IWmsInOutStockRecordAppService wmsInOutStockRecordAppService)
        {
            _wmsInOutStockRecordAppService = wmsInOutStockRecordAppService;
        }
        /// <summary>
        /// èŽ·å–å‡ºå…¥åº“è®°å½•è¡¨
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        [HttpGet]
        [Route("{id}")]
        public virtual Task<WmsInOutStockRecordDto> GetAsync(Guid id)
        {
            return _wmsInOutStockRecordAppService.GetAsync(id);
        }
        /// <summary>
        /// åˆ†é¡µèŽ·å–å‡ºå…¥åº“è®°å½•è¡¨çš„åˆ—è¡¨.
        /// </summary>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        [HttpGet]
        [Route("Page")]
        public virtual Task<PagedResultDto<WmsInOutStockRecordDto>> GetListAsync([FromQuery] GetWmsInOutStockRecordInput input)
        {
            return _wmsInOutStockRecordAppService.GetListAsync(input);
        }
        /// <summary>
        /// åˆ›å»ºå‡ºå…¥åº“记录表
        /// </summary>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPost]
        public virtual Task<WmsInOutStockRecordDto> CreateAsync(WmsInOutStockRecordCreateDto input)
        {
            return _wmsInOutStockRecordAppService.CreateAsync(input);
        }
        /// <summary>
        /// æ›´æ–°å‡ºå…¥åº“记录表
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPut]
        [Route("{id}")]
        public virtual Task<WmsInOutStockRecordDto> UpdateAsync(Guid id, WmsInOutStockRecordUpdateDto input)
        {
            return _wmsInOutStockRecordAppService.UpdateAsync(id, input);
        }
        /// <summary>
        /// å…‹éš†å‡ºå…¥åº“记录表
        /// </summary>
        /// <param name="ids">Id集合.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPost]
        [Route("Clone")]
        public virtual Task<List<WmsInOutStockRecordDto>> CloneAsync([FromBody] IEnumerable<Guid> ids)
        {
            return _wmsInOutStockRecordAppService.CloneAsync(ids);
        }
        /// <summary>
        /// åˆ é™¤å‡ºå…¥åº“记录表
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpDelete]
        [Route("{id}")]
        public virtual Task DeleteAsync(Guid id)
        {
            return _wmsInOutStockRecordAppService.DeleteAsync(id);
        }
        /// <summary>
        /// æ‰¹é‡åˆ é™¤å‡ºå…¥åº“记录表
        /// </summary>
        /// <param name="ids">The ids.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpDelete]
        public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids)
        {
            return _wmsInOutStockRecordAppService.DeleteManyAsync(ids);
        }
        /// <summary>
        /// è°ƒæ•´æŽ’序出入库记录表
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        [HttpPut]
        [Route("{id}/AdjustSort/{sort}")]
        public virtual Task AdjustSortAsync(Guid id, int sort)
        {
            return _wmsInOutStockRecordAppService.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 wmsInOutStockRecordRows = sheetNames.Contains("配置") ? MiniExcel.Query<WmsInOutStockRecordsImportModel.WmsInOutStockRecordImportModel>(stream, sheetName: "配置").ToList() : new();
            if (!wmsInOutStockRecordRows.Any())
            {
                throw new UserFriendlyException("请检查导入的表格");
            }
            await _wmsInOutStockRecordAppService.ImportAsync(new WmsInOutStockRecordsImportModel
            {
                WmsInOutStockRecords = wmsInOutStockRecordRows,
            });
            return Ok();
        }
        /// <summary>
        /// å¯¼å‡ºå‡ºå…¥åº“记录表
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("Export")]
        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsInOutStockRecordInput input)
        {
            input.MaxResultCount = int.MaxValue;
            var exportData = await _wmsInOutStockRecordAppService.ExportAsync(input);
            var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WmsInOutStockRecord导出模板.xlsx");
            if (!System.IO.File.Exists(templatePath))
            {
                templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WmsInOutStockRecord导出模板.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" };
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/Controller/WmsMaterialController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,188 @@
using Ao.Lang;
using CMS.Extensions.Abp.AspNetCore.Mvc.Filters;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterial;
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 WmsMaterialController : ControllerBase
    {
        private readonly IWmsMaterialAppService _wmsmaterialsAppService;
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsMaterialController"/> class.
        /// </summary>
        /// <param name="wmsmaterialsAppService">The wmsmaterials application service.</param>
        public WmsMaterialController(IWmsMaterialAppService wmsmaterialsAppService)
        {
            _wmsmaterialsAppService = wmsmaterialsAppService;
        }
        /// <summary>
        /// èŽ·å–ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        [HttpGet]
        [Route("{id}")]
        public virtual Task<WmsMaterialDto> GetAsync(Guid id)
        {
            return _wmsmaterialsAppService.GetAsync(id);
        }
        /// <summary>
        /// åˆ†é¡µèŽ·å–ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨çš„åˆ—è¡¨.
        /// </summary>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        [HttpGet]
        [Route("Page")]
        public virtual Task<PagedResultDto<WmsMaterialDto>> GetListAsync([FromQuery] GetWmsMaterialInput input)
        {
            return _wmsmaterialsAppService.GetListAsync(input);
        }
        /// <summary>
        /// åˆ›å»ºç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨
        /// </summary>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPost]
        public virtual Task<WmsMaterialDto> CreateAsync(WmsMaterialCreateDto input)
        {
            return _wmsmaterialsAppService.CreateAsync(input);
        }
        /// <summary>
        /// æ›´æ–°ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPut]
        [Route("{id}")]
        public virtual Task<WmsMaterialDto> UpdateAsync(Guid id, WmsMaterialUpdateDto input)
        {
            return _wmsmaterialsAppService.UpdateAsync(id, input);
        }
        /// <summary>
        /// å…‹éš†ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨
        /// </summary>
        /// <param name="ids">Id集合.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPost]
        [Route("Clone")]
        public virtual Task<List<WmsMaterialDto>> CloneAsync([FromBody] IEnumerable<Guid> ids)
        {
            return _wmsmaterialsAppService.CloneAsync(ids);
        }
        /// <summary>
        /// åˆ é™¤ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpDelete]
        [Route("{id}")]
        public virtual Task DeleteAsync(Guid id)
        {
            return _wmsmaterialsAppService.DeleteAsync(id);
        }
        /// <summary>
        /// æ‰¹é‡åˆ é™¤ç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨
        /// </summary>
        /// <param name="ids">The ids.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpDelete]
        public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids)
        {
            return _wmsmaterialsAppService.DeleteManyAsync(ids);
        }
        /// <summary>
        /// è°ƒæ•´æŽ’序物料基础信息表
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        [HttpPut]
        [Route("{id}/AdjustSort/{sort}")]
        public virtual Task AdjustSortAsync(Guid id, int sort)
        {
            return _wmsmaterialsAppService.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 wmsmaterialsRows = sheetNames.Contains("配置") ? MiniExcel.Query<WmsMaterialsImportModel.WmsMaterialImportModel>(stream, sheetName: "配置").ToList() : new();
            if (!wmsmaterialsRows.Any())
            {
                throw new UserFriendlyException("请检查导入的表格");
            }
            await _wmsmaterialsAppService.ImportAsync(new WmsMaterialsImportModel
            {
                WmsMaterials = wmsmaterialsRows,
            });
            return Ok();
        }
        /// <summary>
        /// å¯¼å‡ºç‰©æ–™åŸºç¡€ä¿¡æ¯è¡¨
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("Export")]
        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsMaterialInput input)
        {
            input.MaxResultCount = int.MaxValue;
            var exportData = await _wmsmaterialsAppService.ExportAsync(input);
            var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WmsMaterial导出模板.xlsx");
            if (!System.IO.File.Exists(templatePath))
            {
                templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WmsMaterial导出模板.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" };
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/Controller/WmsPlaceController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,187 @@
using Ao.Lang;
using CMS.Extensions.Abp.AspNetCore.Mvc.Filters;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlaces;
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>
    /// WmsPlace服务
    /// </summary>
    [ApiController]
    [TypeFilter(typeof(CMSLanguageFilter))]
    [TypeFilter(typeof(CMSUowActionFilter))]
    [TypeFilter(typeof(CMSAuditActionFilter))]
    [TypeFilter(typeof(CMSExceptionFilter))]
    [Route("api/v{version:apiVersion}/HIAWms/[controller]")]
    public class WmsPlaceController : ControllerBase
    {
        private readonly IWmsPlaceAppService _wmsplaceAppService;
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsPlaceController"/> class.
        /// </summary>
        /// <param name="wmsplaceAppService">The wmsplace application service.</param>
        public WmsPlaceController(IWmsPlaceAppService wmsplaceAppService)
        {
            _wmsplaceAppService = wmsplaceAppService;
        }
        /// <summary>
        /// èŽ·å–wmsplace.
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        [HttpGet]
        [Route("{id}")]
        public virtual Task<WmsPlaceDto> GetAsync(Guid id)
        {
            return _wmsplaceAppService.GetAsync(id);
        }
        /// <summary>
        /// èŽ·å–wmsplace的列表.
        /// </summary>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        [HttpGet]
        public virtual Task<PagedResultDto<WmsPlaceDto>> GetListAsync([FromQuery] GetWmsPlacesInput input)
        {
            return _wmsplaceAppService.GetListAsync(input);
        }
        /// <summary>
        /// åˆ›å»ºwmsplace.
        /// </summary>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPost]
        public virtual Task<WmsPlaceDto> CreateAsync(WmsPlaceCreateDto input)
        {
            return _wmsplaceAppService.CreateAsync(input);
        }
        /// <summary>
        /// æ›´æ–°wmsplace.
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPut]
        [Route("{id}")]
        public virtual Task<WmsPlaceDto> UpdateAsync(Guid id, WmsPlaceUpdateDto input)
        {
            return _wmsplaceAppService.UpdateAsync(id, input);
        }
        /// <summary>
        /// å…‹éš†WmsPlace.
        /// </summary>
        /// <param name="ids">Id集合.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPost]
        [Route("Clone")]
        public virtual Task<List<WmsPlaceDto>> CloneAsync([FromBody] IEnumerable<Guid> ids)
        {
            return _wmsplaceAppService.CloneAsync(ids);
        }
        /// <summary>
        /// åˆ é™¤wmsplace.
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpDelete]
        [Route("{id}")]
        public virtual Task DeleteAsync(Guid id)
        {
            return _wmsplaceAppService.DeleteAsync(id);
        }
        /// <summary>
        /// æ‰¹é‡åˆ é™¤wmsplace.
        /// </summary>
        /// <param name="ids">The ids.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpDelete]
        public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids)
        {
            return _wmsplaceAppService.DeleteManyAsync(ids);
        }
        /// <summary>
        /// è°ƒæ•´æŽ’序.
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        [HttpPut]
        [Route("{id}/AdjustSort/{sort}")]
        public virtual Task AdjustSortAsync(Guid id, int sort)
        {
            return _wmsplaceAppService.AdjustSortAsync(id, sort);
        }
        /// <summary>
        /// å¯¼å…¥wmsplace.
        /// </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 wmsplaceRows = sheetNames.Contains("配置") ? MiniExcel.Query<WmsPlacesImportModel.WmsPlaceImportModel>(stream, sheetName: "配置").ToList() : new();
            if (!wmsplaceRows.Any())
            {
                throw new UserFriendlyException("请检查导入的表格");
            }
            await _wmsplaceAppService.ImportAsync(new WmsPlacesImportModel
            {
                WmsPlaces = wmsplaceRows,
            });
            return Ok();
        }
        /// <summary>
        /// å¯¼å‡ºwmsplace.
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("Export")]
        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsPlacesInput input)
        {
            input.MaxResultCount = int.MaxValue;
            var exportData = await _wmsplaceAppService.ExportAsync(input);
            var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WmsPlace导出模板.xlsx");
            if (!System.IO.File.Exists(templatePath))
            {
                templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WmsPlace导出模板.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" };
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/Controller/WmsStoreController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,187 @@
using Ao.Lang;
using CMS.Extensions.Abp.AspNetCore.Mvc.Filters;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsStores;
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>
    /// WmsStore服务
    /// </summary>
    [ApiController]
    [TypeFilter(typeof(CMSLanguageFilter))]
    [TypeFilter(typeof(CMSUowActionFilter))]
    [TypeFilter(typeof(CMSAuditActionFilter))]
    [TypeFilter(typeof(CMSExceptionFilter))]
    [Route("api/v{version:apiVersion}/HIAWms/[controller]")]
    public class WmsStoreController : ControllerBase
    {
        private readonly IWmsStoreAppService _wmsstoreAppService;
        /// <summary>
        /// Initializes a new instance of the <see cref="WmsStoreController"/> class.
        /// </summary>
        /// <param name="wmsstoreAppService">The wmsstore application service.</param>
        public WmsStoreController(IWmsStoreAppService wmsstoreAppService)
        {
            _wmsstoreAppService = wmsstoreAppService;
        }
        /// <summary>
        /// èŽ·å–wmsstore.
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        [HttpGet]
        [Route("{id}")]
        public virtual Task<WmsStoreDto> GetAsync(Guid id)
        {
            return _wmsstoreAppService.GetAsync(id);
        }
        /// <summary>
        /// èŽ·å–wmsstore的列表.
        /// </summary>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        [HttpGet]
        public virtual Task<PagedResultDto<WmsStoreDto>> GetListAsync([FromQuery] GetWmsStoresInput input)
        {
            return _wmsstoreAppService.GetListAsync(input);
        }
        /// <summary>
        /// åˆ›å»ºwmsstore.
        /// </summary>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPost]
        public virtual Task<WmsStoreDto> CreateAsync(WmsStoreCreateDto input)
        {
            return _wmsstoreAppService.CreateAsync(input);
        }
        /// <summary>
        /// æ›´æ–°wmsstore.
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <param name="input">输入.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPut]
        [Route("{id}")]
        public virtual Task<WmsStoreDto> UpdateAsync(Guid id, WmsStoreUpdateDto input)
        {
            return _wmsstoreAppService.UpdateAsync(id, input);
        }
        /// <summary>
        /// å…‹éš†WmsStore.
        /// </summary>
        /// <param name="ids">Id集合.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpPost]
        [Route("Clone")]
        public virtual Task<List<WmsStoreDto>> CloneAsync([FromBody] IEnumerable<Guid> ids)
        {
            return _wmsstoreAppService.CloneAsync(ids);
        }
        /// <summary>
        /// åˆ é™¤wmsstore.
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpDelete]
        [Route("{id}")]
        public virtual Task DeleteAsync(Guid id)
        {
            return _wmsstoreAppService.DeleteAsync(id);
        }
        /// <summary>
        /// æ‰¹é‡åˆ é™¤wmsstore.
        /// </summary>
        /// <param name="ids">The ids.</param>
        /// <returns></returns>
        //[Authorize]
        [HttpDelete]
        public virtual Task DeleteAsync([FromBody] IEnumerable<Guid> ids)
        {
            return _wmsstoreAppService.DeleteManyAsync(ids);
        }
        /// <summary>
        /// è°ƒæ•´æŽ’序.
        /// </summary>
        /// <param name="id">标识符.</param>
        /// <returns></returns>
        [HttpPut]
        [Route("{id}/AdjustSort/{sort}")]
        public virtual Task AdjustSortAsync(Guid id, int sort)
        {
            return _wmsstoreAppService.AdjustSortAsync(id, sort);
        }
        /// <summary>
        /// å¯¼å…¥wmsstore.
        /// </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 wmsstoreRows = sheetNames.Contains("配置") ? MiniExcel.Query<WmsStoresImportModel.WmsStoreImportModel>(stream, sheetName: "配置").ToList() : new();
            if (!wmsstoreRows.Any())
            {
                throw new UserFriendlyException("请检查导入的表格");
            }
            await _wmsstoreAppService.ImportAsync(new WmsStoresImportModel
            {
                WmsStores = wmsstoreRows,
            });
            return Ok();
        }
        /// <summary>
        /// å¯¼å‡ºwmsstore.
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        [Route("Export")]
        public virtual async Task<IActionResult> ExportAsync([FromQuery] GetWmsStoresInput input)
        {
            input.MaxResultCount = int.MaxValue;
            var exportData = await _wmsstoreAppService.ExportAsync(input);
            var templatePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, $"Resources/Templates/WmsStore导出模板.xlsx");
            if (!System.IO.File.Exists(templatePath))
            {
                templatePath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty, $"Resources/Templates/WmsStore导出模板.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" };
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/EventHandlers/HIAWmsEventHandler.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,80 @@
using CMS.Plugin.MesSuite.Abstractions.Events;
using CMS.Plugin.MesSuite.Abstractions.Models;
using CMS.Plugin.HIAWms.Domain.WmsContainers;
using CMS.Plugin.OrderManagement.Abstractions.Models;
using CMS.Plugin.ProcessManagement.Abstractions.Models;
using CMS.Plugin.TraceManagement.Abstractions.Models.Traces;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus.Distributed;
using Volo.Abp.Uow;
namespace CMS.Plugin.HIAWms.EventHandlers
{
    /// <summary>
    /// æµç¨‹äº‹ä»¶å¤„理程序
    /// </summary>
    public class HIAWmsEventHandler : IDistributedEventHandler<ProcessFlowEto>, ITransientDependency
    {
        private readonly ILogger _logger;
        private readonly IServiceProvider _serviceProvider;
        /// <summary>
        /// Initializes a new instance of the <see cref="HIAWmsEventHandler"/> class.
        /// </summary>
        /// <param name="logger">The logger.</param>
        /// <param name="serviceProvider">The service provider.</param>
        public HIAWmsEventHandler(ILogger<HIAWmsEventHandler> logger, IServiceProvider serviceProvider)
        {
            this._logger = logger;
            this._serviceProvider = serviceProvider;
        }
        /// <summary>
        /// Handler handles the event by implementing this method.
        /// </summary>
        /// <param name="eventData">Event data</param>
        public async Task HandleEventAsync(ProcessFlowEto eventData)
        {
            if (eventData.Activity.Equals("步骤名称"))
            {
                _logger.LogInformation($"WmsContainerEventHandler: Activity={eventData.Activity}");
                var serialNumber = eventData?.FlowItems[FlowItemCollection.SerialNumber]?.ToString();
                // å·¥è‰ºæ¨¡åž‹
                var process = eventData?.FlowItems[FlowItemCollection.ApplicationData] as ProcessModel;
                // äº§å“æ¨¡åž‹
                var product = eventData?.FlowItems[FlowItemCollection.ProductModel] as AssociationProductModel;
                // è¿½æº¯æ¨¡åž‹
                var trace = eventData?.FlowItems[FlowItemCollection.TraceModel] as TraceModel;
                // å·¥å•模型
                var order = eventData?.FlowItems[FlowItemCollection.OrderModel] as OrderModel;
                // ä¸šåŠ¡å¤„ç†
                await ProcessAsync();
            }
        }
        /// <summary>
        /// Processes the asynchronous.
        /// </summary>
        private async Task ProcessAsync()
        {
            using var scope = _serviceProvider.CreateScope();
            var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
            using var uow = unitOfWorkManager.Begin(requiresNew: true);
            var wmscontainerRepository = scope.ServiceProvider.GetRequiredService<IWmsContainerRepository>();
            var count = await wmscontainerRepository.GetCountAsync();
            // å¦‚果有更新数据库操作,需提交保存
            // await uow.SaveChangesAsync();
            _logger.LogInformation($"ProcessAsync,Count={count}");
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/FlowProcessors/HIAWmsFlowProcessor.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,91 @@
using CMS.Plugin.FlowManagement.Abstractions;
using CMS.Plugin.FlowManagement.Abstractions.Models;
using CMS.Plugin.MesSuite.Abstractions.Models;
using CMS.Plugin.HIAWms.Domain.WmsContainers;
using CMS.Plugin.OrderManagement.Abstractions.Models;
using CMS.Plugin.ProcessManagement.Abstractions.Models;
using CMS.Plugin.TraceManagement.Abstractions.Models.Traces;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using SYC.Flow.Kernel;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Uow;
namespace CMS.Plugin.HIAWms.FlowProcessors
{
    /// <summary>
    /// æµç¨‹å¤„理器
    /// </summary>
    public class HIAWmsFlowProcessor : IFlowProcessor, ISingletonDependency
    {
        private readonly ILogger<HIAWmsFlowProcessor> _logger;
        private readonly IServiceProvider _serviceProvider;
        /// <summary>
        /// Initializes a new instance of the <see cref="FlowProcessor"/> class.
        /// </summary>
        public HIAWmsFlowProcessor(ILogger<HIAWmsFlowProcessor> logger, IServiceProvider serviceProvider)
        {
            _logger = logger;
            _serviceProvider = serviceProvider;
        }
        /// <inheritdoc />
        public Task OnEnterAsync(FlowProcessor flowProcessor, object sender, EventArgs args)
        {
            return Task.CompletedTask;
        }
        /// <inheritdoc />
        public async Task OnExecuteAsync(FlowProcessor flowProcessor, object sender, EventArgs args)
        {
            if (sender is Activity activity)
            {
                var eventArgs = args as ProcessflowEventArgs;
                var procID = eventArgs.DataItems["Instance_ProcID"];
                if (activity?.Name == "第三方系统合格判断")
                {
                    // å·¥è‰ºæ¨¡åž‹
                    var processModel = eventArgs.DataItems.ApplicationData as ProcessModel;
                    // å·¥å•模型
                    var orderModel = eventArgs.DataItems[FlowItemCollection.OrderModel] as OrderModel;
                    // äº§å“æ¨¡åž‹
                    var productModel = eventArgs.DataItems[FlowItemCollection.ProductModel] as AssociationProductModel;
                    // è¿½æº¯æ¨¡åž‹
                    var traceModel = eventArgs.DataItems[FlowItemCollection.TraceModel] as TraceModel;
                    // ä¸šåŠ¡å¤„ç†
                    await ProcessAsync();
                    _logger.LogInformation($"执行流程:实例={procID} -> {flowProcessor.ProcName} -> {activity.Name} ProductionFlowProcessor");
                }
            }
        }
        /// <summary>
        /// Processes the asynchronous.
        /// </summary>
        private async Task ProcessAsync()
        {
            using var scope = _serviceProvider.CreateScope();
            var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
            using var uow = unitOfWorkManager.Begin(requiresNew: true);
            var wmscontainerRepository = scope.ServiceProvider.GetRequiredService<IWmsContainerRepository>();
            var count = await wmscontainerRepository.GetCountAsync();
            // å¦‚果有更新数据库操作,需提交保存
            // await uow.SaveChangesAsync();
            _logger.LogInformation($"ProcessAsync,Count={count}");
        }
        /// <inheritdoc />
        public Task OnExitAsync(FlowProcessor flowProcessor, object sender, EventArgs args)
        {
            return Task.CompletedTask;
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/Flows/50001_1.pfd
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,158 @@
<ProcessflowDefine Version="1">
    <Define>
        <ProcessflowBuilder xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
            <Parameters/>
            <Name>HIAWms业务流程</Name>
            <Description></Description>
            <Root xsi:type="Activity">
                <Alias>启动</Alias>
                <Name>启动</Name>
                <Description></Description>
                <EnterMode>Automatic</EnterMode>
                <ExitMode>Automatic</ExitMode>
                <JoinType>JoinXOR</JoinType>
                <SplitType>SplitXOR</SplitType>
                <ExtendedProperty></ExtendedProperty>
            </Root>
            <Activities>
                <Activity xsi:type="VariableMonitorActivity">
                    <Alias>变量监听</Alias>
                    <Name>触发信号监听</Name>
                    <EnterMode>Automatic</EnterMode>
                    <ExitMode>Automatic</ExitMode>
                    <JoinType>JoinXOR</JoinType>
                    <SplitType>SplitXOR</SplitType>
                    <NeedTagChange>true</NeedTagChange>
                    <TaskDelay>0</TaskDelay>
                    <MonitorVariableName>HIAWms_TriggerSignal</MonitorVariableName>
                    <CompareVariableValue>1</CompareVariableValue>
                    <ExtendedProperty></ExtendedProperty>
                </Activity>
                <Activity xsi:type="VariableReadActivity">
                    <Alias>变量读取</Alias>
                    <Name>变量读取</Name>
                    <EnterMode>Automatic</EnterMode>
                    <ExitMode>Automatic</ExitMode>
                    <JoinType>JoinXOR</JoinType>
                    <SplitType>SplitXOR</SplitType>
                    <TaskDelay>0</TaskDelay>
                    <ReadRetryCount>10</ReadRetryCount>
                    <ReadRetryDelay>500</ReadRetryDelay>
                    <ExtendedProperty></ExtendedProperty>
                    <ParameterVariables>
                        <ReadParameterVariable>
                            <VariableName>HIAWms_BarcodeVariable</VariableName>
                            <WriteIntoExtAttribute>true</WriteIntoExtAttribute>
                        </ReadParameterVariable>
                    </ParameterVariables>
                </Activity>
                <Activity xsi:type="HIAWmsActivity">
                    <Alias>变量监听</Alias>
                    <Name>扩展步骤</Name>
                    <EnterMode>Automatic</EnterMode>
                    <ExitMode>Automatic</ExitMode>
                    <JoinType>JoinXOR</JoinType>
                    <SplitType>SplitXOR</SplitType>
                    <TaskDelay>0</TaskDelay>
                    <MyProperty>MyProperty1</MyProperty>
                    <ExtendedProperty></ExtendedProperty>
                </Activity>
                <Activity xsi:type="VariableMonitorActivity">
                    <Alias>变量监听</Alias>
                    <Name>触发信号复位监听</Name>
                    <EnterMode>Automatic</EnterMode>
                    <ExitMode>Automatic</ExitMode>
                    <JoinType>JoinXOR</JoinType>
                    <SplitType>SplitXOR</SplitType>
                    <NeedTagChange>true</NeedTagChange>
                    <TaskDelay>0</TaskDelay>
                    <MonitorVariableName>HIAWms_TriggerSignal</MonitorVariableName>
                    <CompareVariableValue>0</CompareVariableValue>
                    <ExtendedProperty></ExtendedProperty>
                </Activity>
                <Activity xsi:type="BusinessActivity">
                    <Alias>通用步骤</Alias>
                    <Name>通用步骤</Name>
                    <EnterMode>Automatic</EnterMode>
                    <ExitMode>Automatic</ExitMode>
                    <JoinType>JoinXOR</JoinType>
                    <SplitType>SplitXOR</SplitType>
                    <PublishFlowEvent>true</PublishFlowEvent>
                    <TaskDelay>0</TaskDelay>
                    <ExtendedProperty>
                        <MyExtendedProperty>MyExtendedProperty1</MyExtendedProperty>
                    </ExtendedProperty>
                </Activity>
                <Activity xsi:type="VariableWriteActivity">
                    <Alias>变量下发</Alias>
                    <Name>变量下发</Name>
                    <EnterMode>Automatic</EnterMode>
                    <ExitMode>Automatic</ExitMode>
                    <JoinType>JoinXOR</JoinType>
                    <SplitType>SplitXOR</SplitType>
                    <TaskDelay>0</TaskDelay>
                    <WriteRetryCount>10</WriteRetryCount>
                    <WriteRetryDelay>500</WriteRetryDelay>
                    <ParameterVariables>
                        <WriteParameterVariable>
                            <Sort>1</Sort>
                            <WriteVariableName>HIAWms_BarcodeVariable</WriteVariableName>
                            <WriteVariableValue></WriteVariableValue>
                        </WriteParameterVariable>
                    </ParameterVariables>
                    <ExtendedProperty></ExtendedProperty>
                </Activity>
                <Activity xsi:type="EndActivity">
                    <Alias>结束</Alias>
                    <Name>结束</Name>
                    <EnterMode>Automatic</EnterMode>
                    <ExitMode>Automatic</ExitMode>
                    <JoinType>JoinXOR</JoinType>
                    <SplitType>SplitXOR</SplitType>
                    <ExtendedProperty></ExtendedProperty>
                </Activity>
            </Activities>
            <Transitions>
                <Transition>
                    <Label>启动-&gt;触发信号监听</Label>
                    <Source>启动</Source>
                    <Sink>触发信号监听</Sink>
                </Transition>
                <Transition>
                    <Label>触发信号监听-&gt;变量读取</Label>
                    <Source>触发信号监听</Source>
                    <Sink>变量读取</Sink>
                </Transition>
                <Transition>
                    <Label>变量读取-&gt;扩展步骤</Label>
                    <Source>变量读取</Source>
                    <Sink>扩展步骤</Sink>
                </Transition>
                <Transition>
                    <Label>扩展步骤-&gt;触发信号复位监听</Label>
                    <Source>扩展步骤</Source>
                    <Sink>触发信号复位监听</Sink>
                </Transition>
                <Transition>
                    <Label>触发信号复位监听-&gt;通用步骤</Label>
                    <Source>触发信号复位监听</Source>
                    <Sink>通用步骤</Sink>
                </Transition>
                <Transition>
                    <Label>通用步骤-&gt;变量下发</Label>
                    <Source>通用步骤</Source>
                    <Sink>变量下发</Sink>
                </Transition>
                <Transition>
                    <Label>变量下发-&gt;结束</Label>
                    <Source>变量下发</Source>
                    <Sink>结束</Sink>
                </Transition>
            </Transitions>
        </ProcessflowBuilder>
    </Define>
    <Appearance>
        <ProcessflowAppearance xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        </ProcessflowAppearance>
    </Appearance>
</ProcessflowDefine>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/Flows/FlowInfo.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<Root>
    <FlowInfo>
        <Type>50001</Type>
        <Name>测试流程</Name>
        <Description></Description>
        <Version>1</Version>
        <FilePath>FlowPfd/50001_1.pfd</FilePath>
        <BusinessType>
            <Name>Other</Name>
            <Value>1</Value>
            <Description>测试流程</Description>
        </BusinessType>
    </FlowInfo>
</Root>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/FodyWeavers.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
   <ConfigureAwait ContinueOnCapturedContext="false" />
</Weavers>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/Jobs/HIAWmsArgs.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
namespace CMS.Plugin.HIAWms.Jobs
{
    /// <summary>
    /// HIAWms ä½œä¸šå‚æ•°
    /// </summary>
    public class HIAWmsArgs
    {
        /// <summary>
        /// Gets or sets the subject.
        /// </summary>
        public string Subject { get; set; }
        /// <summary>
        /// Gets or sets the body.
        /// </summary>
        public string Body { get; set; }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/Jobs/HIAWmsJob.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
using CMS.Plugin.HIAWms.Domain.WmsContainers;
using Microsoft.Extensions.Logging;
using Volo.Abp.BackgroundJobs;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Uow;
namespace CMS.Plugin.HIAWms.Jobs
{
    /// <summary>
    ///  HIAWms åŽå°ä½œä¸š
    /// </summary>
    public class HIAWmsJob : BackgroundJob<HIAWmsArgs>, ITransientDependency
    {
        private readonly ILogger<HIAWmsJob> _logger;
        private readonly IUnitOfWorkManager _unitOfWorkManager;
        private readonly IWmsContainerRepository _wmscontainerRepository;
        /// <summary>
        /// Initializes a new instance of the <see cref="HIAWmsJob"/> class.
        /// </summary>
        /// <param name="logger">The logger.</param>
        /// <param name="unitOfWorkManager">The unit of work manager.</param>
        /// <param name="wmscontainerRepository">My entity name repository.</param>
        public HIAWmsJob(ILogger<HIAWmsJob> logger,  IUnitOfWorkManager unitOfWorkManager, IWmsContainerRepository wmscontainerRepository)
        {
            _logger = logger;
            _unitOfWorkManager = unitOfWorkManager;
            _wmscontainerRepository = wmscontainerRepository;
        }
        /// <inheritdoc />
        public override void Execute(HIAWmsArgs args)
        {
            using var uow = _unitOfWorkManager.Begin(requiresNew: true);
            var count = _wmscontainerRepository.GetCountAsync().GetAwaiter().GetResult();
            // å¦‚果有更新数据库操作,需提交保存
            // uow.SaveChangesAsync().GetAwaiter().GetResult();
            _logger.LogInformation($"HIAWmsJob Execute,Subject={args.Subject},Body={args.Body},Count={count}");
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/ProjectService/HIAWmsProjectService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,165 @@
using CMS.Plugin.FlowManagement.Abstractions.FlowBusiness;
using CMS.Plugin.HIAWms.Apis;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainers;
using CMS.Plugin.HIAWms.Domain.WmsContainers;
using CMS.Plugin.HIAWms.Jobs;
using CMS.Project;
using CMS.Project.Abstractions;
using CMS.Unit.RuntimeValue.Abstractions;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Volo.Abp.BackgroundJobs;
using Volo.Abp.Uow;
namespace CMS.Plugin.HIAWms.ProjectService
{
    /// <summary>
    /// å·¥ç¨‹æœåŠ¡ï¼Œå’Œå·¥ç¨‹å…³è”çš„åŽå°æœåŠ¡ï¼Œå½“<see cref="IProjectServiceRunner"/>以当前Key调用时会被执行
    /// </summary>
    public class HIAWmsProjectService : BaseProjectService
    {
        private IServiceProvider _serviceProvider;
        private readonly ILogger<HIAWmsProjectService> _logger;
        private readonly IVariableDataCache _variableDataCache;
        private FlowVariableChannelListener _channelListener;
        private Dictionary<string, string> _monitorVariableNames;
        /// <summary>
        /// æœåŠ¡çš„Key,唯一,供<see cref="IProjectServiceRunner"/>使用
        /// </summary>
        public override string Key => "HIAWms";
        /// <summary>
        /// æœåŠ¡æè¿°ï¼Œæ˜¾ç¤ºåœ¨æœåŠ¡åˆ—è¡¨UI上的名称
        /// </summary>
        public override string Description => "HIAWms服务";
        /// <summary>
        /// å¯ç”¨æŽˆæƒ
        /// </summary>
        public override bool AuthRequired => false;
        /// <summary>
        /// Initializes a new instance of the <see cref="HIAWmsProjectService"/> class.
        /// </summary>
        /// <param name="logger">The logger.</param>
        /// <param name="variableDataCache">The variable data cache.</param>
        public HIAWmsProjectService(IServiceProvider serviceProvider, ILogger<HIAWmsProjectService> logger, IVariableDataCache variableDataCache)
        {
            _serviceProvider = serviceProvider;
            _logger = logger;
            _variableDataCache = variableDataCache;
        }
        /// <summary>
        /// å¼€å¯æœåŠ¡
        /// </summary>
        /// <param name="serviceProvider">具有工程上下文的实例</param>
        public override async Task StartAsync(IServiceProvider serviceProvider)
        {
            if (State == ProjectServiceState.Started)
            {
                return;
            }
            // ç›‘听变量
            _monitorVariableNames = new Dictionary<string, string>
            {
                { "HIAWms_Variable1", "监听变量1" },
                { "HIAWms_Variable2", "监听变量2" }
            };
            // åˆ›å»ºé€šé“监听
            _channelListener?.Token?.Dispose();
            _channelListener = new FlowVariableChannelListener(_logger, _variableDataCache);
            _channelListener.CreateChannel(Key, waitListener: false, timeout: TimeSpan.FromSeconds(30), variableFilter: _monitorVariableNames.Keys.ToHashSet());
            _channelListener.TagChanged += OnTagValueChanged;
            await base.StartAsync(serviceProvider);
        }
        /// <summary>
        /// åœæ­¢æœåŠ¡
        /// </summary>
        /// <param name="serviceProvider">具有工程上下文的实例</param>
        public override async Task StopAsync(IServiceProvider serviceProvider)
        {
            if (_channelListener != null)
            {
                // é‡Šæ”¾ç›‘听
                _channelListener.TagChanged -= OnTagValueChanged;
                _channelListener.Token.Dispose();
                _channelListener = null;
            }
            // ä½¿ç”¨åŽå°ä½œä¸šå¼‚步处理
            //await _serviceProvider.GetRequiredService<IBackgroundJobManager>().EnqueueAsync(new HIAWmsArgs
            //{
            //    Subject = "HIAWms_Subject",
            //    Body = "HIAWms_Body",
            //});
            await base.StopAsync(serviceProvider);
        }
        /// <summary>
        /// Called when [tag value changed].
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="e">The <see cref="TagChangedEventArgs"/> instance containing the event data.</param>
        private async void OnTagValueChanged(object sender, TagChangedEventArgs e)
        {
            var changeds = e.Changeds.Where(x => _monitorVariableNames != null && _monitorVariableNames.ContainsKey(x.Name));
            if (!changeds.Any())
            {
                return;
            }
            foreach (var changed in changeds)
            {
                var oldValue = changed.Old?.Value;
                var newValue = changed.New?.Value;
                var traceId = e.TraceId;
                _logger.LogInformation($"{changed.Name} å˜é‡å€¼å‘生变化,旧值{oldValue}=新值{newValue},TraceId={traceId}");
                // TODO: å¤„理变量值变化
                // Tips:https://cms-docs.shengyc.com/cms/api/%E5%90%8E%E7%AB%AF#3-%E5%8F%98%E9%87%8F%E6%A8%A1%E5%9D%97
                /* è¯´æ˜Žï¼šé€šè¿‡è®¢é˜… IVariableDataCache.TagChanged äº‹ä»¶ï¼Œæ‚¨å¯ä»¥å®žæ—¶ç›‘控变量的变化。此事件会传递所有变量至事件处理函数,因此,业务层需在函数中筛选关注的变量。
                    æ³¨æ„äº‹é¡¹ï¼š
                    ï¼ˆ1)性能影响: å‘布事件时,事件的发送者将阻塞流程。因此,强烈建议避免在事件处理函数中执行 I/ O æ“ä½œã€HTTP æŽ¥å£è®¿é—®æˆ–其他耗时操作,以防止对系统性能产生严重影响,导致整个系统响应延迟。
                    ï¼ˆ2)高频率触发: ç”±äºŽäº‹ä»¶è®¢é˜…了全量变量,触发频率可能非常高。
                    ï¼ˆ3)异步处理: é‰´äºŽäº‹ä»¶è§¦å‘频率很高,建议业务层在筛选关注变量后,使用 Task å¯åŠ¨æ–°çº¿ç¨‹å¤„ç†ä¸šåŠ¡é€»è¾‘ï¼Œä»¥é¿å…é˜»å¡žæ ¸å¿ƒçš„å˜é‡ç›‘å¬åŠŸèƒ½ï¼Œå®žçŽ°ä¸šåŠ¡å±‚ä¸Žå¹³å°åŸºåº§çš„è§£è€¦ã€‚
                    ï¼ˆ4)并发管理: å¦‚果业务层并发量大,必须优化代码设计和实施,以减少在高并发情况下的系统资源消耗,防止系统性能问题。
                    ï¼ˆ5)代码安全: å®‰è£…并使用 CMS.CodeAnalysis åˆ†æžå™¨æ¥åˆ†æž IVariableDataCache.TagChanged çš„使用情况。该工具能在使用不当时提供编译错误,帮助您提高代码质量。*/
                _ = Task.Run(async () =>
                {
                    // ä¾‹1:同步处理
                    //await ProcessAsync();
                    // ä¾‹2:调用外部API
                    //await ExecuteExternalApiAsync();
                });
            }
        }
        /// <summary>
        /// Processes the asynchronous.
        /// </summary>
        private async Task ProcessAsync()
        {
            using var scope = _serviceProvider.CreateScope();
            var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
            using var uow = unitOfWorkManager.Begin(requiresNew: true);
            var wmscontainerRepository = scope.ServiceProvider.GetRequiredService<IWmsContainerRepository>();
            var count = await wmscontainerRepository.GetCountAsync();
            // å¦‚果有更新数据库操作,需提交保存
            // await uow.SaveChangesAsync();
            _logger.LogInformation($"ProcessAsync,Count={count}");
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/Properties/launchSettings.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
{
    "profiles": {
        "DebugFromCMS": {
            "commandName": "Executable",
            "executablePath": "$(CMSRootPath)\\host\\CMS.Host.exe",
            "workingDirectory": "$(CMSRootPath)\\host",
            "commandLineArgs":"-d",
            "environmentVariables": {
                "DOTNET_ENVIRONMENT": "Development",
                "ASPNETCORE_URLS": "http://*:18000",
                "PluginPath": "../plugins",
                "DatabaseType": "MySQL"
            }
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/Resources/Templates/WmsAreaµ¼³öÄ£°å.xlsx
Binary files differ
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/Resources/Templates/WmsContainerµ¼³öÄ£°å.xlsx
Binary files differ
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/Resources/Templates/WmsMaterialµ¼³öÄ£°å.xlsx
Binary files differ
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/Resources/Templates/WmsPlaceµ¼³öÄ£°å.xlsx
Binary files differ
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/Resources/Templates/WmsStoreµ¼³öÄ£°å.xlsx
Binary files differ
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/Services/HIAWmsFlowService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
using CMS.Plugin.HIAWms.Abstractions;
using CMS.Plugin.HIAWms.Domain.WmsContainers;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using SYC.Flow.Kernel;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Uow;
namespace CMS.Plugin.HIAWms.Services
{
    /// <inheritdoc />
    public class HIAWmsFlowService : IHIAWmsFlowService, ITransientDependency
    {
        private readonly ILogger<HIAWmsFlowService> _logger;
        private readonly IServiceProvider _serviceProvider;
        /// <summary>
        /// Initializes a new instance of the <see cref="HIAWmsFlowService"/> class.
        /// </summary>
        /// <param name="logger">The logger.</param>
        public HIAWmsFlowService(ILogger<HIAWmsFlowService> logger, IServiceProvider serviceProvider)
        {
            _logger = logger;
            _serviceProvider = serviceProvider;
        }
        /// <inheritdoc />
        public async Task ProcessAsync(ProcessflowEventArgs args)
        {
            using var scope = _serviceProvider.CreateScope();
            var unitOfWorkManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
            using var uow = unitOfWorkManager.Begin(requiresNew: true);
            var wmscontainerRepository = scope.ServiceProvider.GetRequiredService<IWmsContainerRepository>();
            var count = await wmscontainerRepository.GetCountAsync();
            // å¦‚果有更新数据库操作,需提交保存
            // await uow.SaveChangesAsync();
            // è¾“出日志
            _logger.LogInformation($"HIAWmsFlowService:ProcessAsync()");
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/Workers/HIAWmsWorker.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,76 @@
using CMS.Extensions.Variable;
using CMS.Project.Abstractions;
using KissUtil.Extensions;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Volo.Abp.BackgroundWorkers;
using Volo.Abp.Threading;
namespace CMS.Plugin.HIAWms.Workers
{
    /// <summary>
    /// HIAWms后台工作者
    /// </summary>
    public class HIAWmsWorker : AsyncPeriodicBackgroundWorkerBase
    {
        private readonly ILogger<HIAWmsWorker> _logger;
        private readonly VariableService _variableService;
        /// <summary>
        /// Initializes a new instance of the <see cref="HIAWmsWorker"/> class.
        /// </summary>
        /// <param name="timer">The timer.</param>
        /// <param name="serviceScopeFactory">The service scope factory.</param>
        public HIAWmsWorker(ILogger<HIAWmsWorker> logger, AbpAsyncTimer timer, VariableService variableService, IServiceScopeFactory serviceScopeFactory) : base(timer, serviceScopeFactory)
        {
            _logger = logger;
            _variableService = variableService;
            Timer.Period = 1 * 300 * 1000; // æ¯éš” 300 ç§’ æ‰§è¡Œä¸€æ¬¡
            Timer.RunOnStart = true;
        }
        /// <inheritdoc />
        protected override async Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext)
        {
            var projectAccessor = workerContext.ServiceProvider.GetRequiredService<IProjectAccessor>();
            var project = await projectAccessor.GetProjectAsync();
            if (project?.Info == null)
            {
                return;
            }
            //_logger.LogInformation($"HIAWmsWorker is working for project {project.Info.Id}");
            //// è®¡ç®—OEE
            //double oee = await CalculateOEEAsync();
            //// ä½¿ç”¨ç™¾åˆ†æ¯”格式 æ‰“印结果日志
            //_logger.LogInformation($"OEE:{oee:P2}");
            //// å†™å…¥å˜é‡
            //await _variableService.WriteValueAsync(new Dictionary<string, object> {{ "OEE", oee } });
        }
        // è®¡ç®—OEE=可用性×性能×质量
        public async Task<double> CalculateOEEAsync()
        {
            // è¯»å–OEE计算所需的值
            double availability = await ReadDoubleValueAsync("Availability");
            double performance = await ReadDoubleValueAsync("Performance");
            double quality = await ReadDoubleValueAsync("Quality");
            // è®¡ç®—OEE
            double oee = availability * performance * quality;
            // è¿”回计算结果
            return oee;
        }
        // æä¾›ä¸€ä¸ªæ³›åž‹æ–¹æ³•,方便直接获取double类型的值
        public async Task<double> ReadDoubleValueAsync(string variableName)
        {
            var variable = await _variableService.ReadValueAsync(variableName);
            return (variable?.Content?.Value).SafeString().ToDoubleOrNull().GetValueOrDefault();
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/src/CMS.Plugin.HIAWms/appsettings.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,6 @@
{
    // é…ç½®æ–‡ä»¶å°½å¯èƒ½å†™åœ¨/host/appsettings.json或数据库中,避免插件升级时被覆盖
    "IHIAWmsExternalApi": {
        "HttpHost": "http://127.0.0.1:18000/" // External API对接地址
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/stylecop.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
{
    "$schema": "https://raw.githubusercontent.com/DotNetAnalyzers/StyleCopAnalyzers/master/StyleCop.Analyzers/StyleCop.Analyzers/Settings/stylecop.schema.json",
    "settings": {
        "orderingRules": {
            "systemUsingDirectivesFirst": false,
            "usingDirectivesPlacement": "outsideNamespace",
            "blankLinesBetweenUsingGroups": "omit"
        },
        "namingRules": {
            "allowCommonHungarianPrefixes": false,
            "allowedNamespaceComponents": [
                "iOS"
            ],
            "includeInferredTupleElementNames": true
        },
        "maintainabilityRules": {
            "topLevelTypes": [
                "class",
                "interface",
                "struct"
            ]
        },
        "layoutRules": {
            "newlineAtEndOfFile": "require"
        },
        "documentationRules": {
            "companyName": "广州盛原成科技有限公司",
            "copyrightText": "Copyright (c) {companyName}. All rights reserved."
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/test/CMS.Plugin.HIAWms.Application.Tests/CMS.Plugin.HIAWms.Application.Tests.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">
    <Import Project="../../common.test.props" />
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" />
    </ItemGroup>
    <ItemGroup>
        <ProjectReference Include="..\..\src\CMS.Plugin.HIAWms.Application\CMS.Plugin.HIAWms.Application.csproj" />
        <ProjectReference Include="..\CMS.Plugin.HIAWms.Domain.Tests\CMS.Plugin.HIAWms.Domain.Tests.csproj" />
    </ItemGroup>
</Project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/test/CMS.Plugin.HIAWms.Application.Tests/HIAWmsApplicationTestBase.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
using CMS.Plugin.HIAWms.EntityFrameworkCore;
using CMS.Plugin.HIAWms.MySQL;
using CMS.Plugin.HIAWms.TestBase;
namespace CMS.Plugin.HIAWms.Application.Tests
{
    /// <summary>
    /// HIAWmsApplicationTestBase
    /// </summary>
    public class HIAWmsApplicationTestBase : HIAWmsTestBase<HIAWmsApplicationTestModule>
    {
        /// <summary>
        /// UsingDbContext
        /// </summary>
        /// <param name="action">IHIAWmsDbContext</param>
        protected virtual void UsingDbContext(Action<CMSPluginDbContext> action)
        {
            using (var dbContext = GetRequiredService<CMSPluginDbContext>())
            {
                action.Invoke(dbContext);
            }
        }
        /// <summary>
        /// UsingDbContext
        /// </summary>
        /// <typeparam name="T">T</typeparam>
        /// <param name="action">IHIAWmsDbContext</param>
        /// <returns>T</returns>
        protected virtual T UsingDbContext<T>(Func<CMSPluginDbContext, T> action)
        {
            using (var dbContext = GetRequiredService<CMSPluginDbContext>())
            {
                return action.Invoke(dbContext);
            }
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/test/CMS.Plugin.HIAWms.Application.Tests/HIAWmsApplicationTestModule.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
using CMS.Plugin.HIAWms.Domain.Tests;
using Volo.Abp.Modularity;
namespace CMS.Plugin.HIAWms.Application.Tests
{
    /// <summary>
    /// HIAWmsApplicationTestModule
    /// </summary>
    [DependsOn(
    typeof(CMSPluginApplicationModule),
    typeof(HIAWmsDomainTestModule))]
    public class HIAWmsApplicationTestModule : AbpModule
    {
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
            base.ConfigureServices(context);
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/test/CMS.Plugin.HIAWms.Domain.Tests/CMS.Plugin.HIAWms.Domain.Tests.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
    <Import Project="../../common.test.props" />
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNETTestSdkPackageVersion)" />
    </ItemGroup>
    <ItemGroup>
        <ProjectReference Include="..\CMS.Plugin.HIAWms.EntityFrameworkCore.Tests\CMS.Plugin.HIAWms.EntityFrameworkCore.Tests.csproj" />
    </ItemGroup>
</Project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/test/CMS.Plugin.HIAWms.Domain.Tests/HIAWmsDomainTestBase.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
using CMS.Plugin.HIAWms.EntityFrameworkCore;
using CMS.Plugin.HIAWms.MySQL;
using CMS.Plugin.HIAWms.TestBase;
namespace CMS.Plugin.HIAWms.Domain.Tests
{
    /// <summary>
    /// HIAWms DomainTestBase
    /// </summary>
    public class HIAWmsDomainTestBase : HIAWmsTestBase<HIAWmsDomainTestModule>
    {
        /// <summary>
        /// UsingDbContext
        /// </summary>
        /// <param name="action">IHIAWmsDbContext</param>
        protected virtual void UsingDbContext(Action<CMSPluginDbContext> action)
        {
            using (var dbContext = GetRequiredService<CMSPluginDbContext>())
            {
                action.Invoke(dbContext);
            }
        }
        /// <summary>
        /// UsingDbContext
        /// </summary>
        /// <typeparam name="T">T</typeparam>
        /// <param name="action">IHIAWmsDbContext</param>
        /// <returns>T</returns>
        protected virtual T UsingDbContext<T>(Func<CMSPluginDbContext, T> action)
        {
            using (var dbContext = GetRequiredService<CMSPluginDbContext>())
            {
                return action.Invoke(dbContext);
            }
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/test/CMS.Plugin.HIAWms.Domain.Tests/HIAWmsDomainTestModule.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
using CMS.Plugin.HIAWms.EntityFrameworkCore.Tests;
using Volo.Abp.Modularity;
namespace CMS.Plugin.HIAWms.Domain.Tests
{
    /// <summary>
    /// HIAWms DomainTestModule
    /// </summary>
    [DependsOn(typeof(HIAWmsTestEntityFrameworkCoreModule))]
    public class HIAWmsDomainTestModule : AbpModule
    {
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/test/CMS.Plugin.HIAWms.EntityFrameworkCore.Tests/CMS.Plugin.HIAWms.EntityFrameworkCore.Tests.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
<Project Sdk="Microsoft.NET.Sdk">
    <Import Project="../../common.test.props" />
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Volo.Abp.EntityFrameworkCore" Version="$(ABPPackageVersion)" />
        <PackageReference Include="Volo.Abp.EntityFrameworkCore.Sqlite" Version="$(ABPPackageVersion)" />
        <PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNETTestSdkPackageVersion)" />
        <PackageReference Include="NSubstitute" Version="$(NSubstitutePackageVersion)" />
        <PackageReference Include="Shouldly" Version="$(ShouldlyPackageVersion)" />
        <PackageReference Include="xunit" Version="$(xUnitPackageVersion)" />
        <PackageReference Include="xunit.extensibility.execution" Version="$(xUnitExtensibilityExecutionPackageVersion)" />
        <PackageReference Include="xunit.runner.visualstudio" Version="$(xUnitRunnerVisualstudioPackageVersion)" />
    </ItemGroup>
    <ItemGroup>
        <ProjectReference Include="..\..\src\CMS.Plugin.HIAWms.EntityFrameworkCore\CMS.Plugin.HIAWms.EntityFrameworkCore.csproj" />
        <ProjectReference Include="..\..\src\CMS.Plugin.HIAWms.MySQL\CMS.Plugin.HIAWms.MySQL.csproj" />
        <ProjectReference Include="..\CMS.Plugin.HIAWms.TestBase\CMS.Plugin.HIAWms.TestBase.csproj" />
    </ItemGroup>
</Project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/test/CMS.Plugin.HIAWms.EntityFrameworkCore.Tests/HIAWmsEntityFrameworkTestBase.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
using CMS.Plugin.HIAWms.TestBase;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Tests
{
    /// <summary>
    /// MyProjectName TestBase
    /// </summary>
    public class HIAWmsEntityFrameworkTestBase : HIAWmsTestBase<HIAWmsTestEntityFrameworkCoreModule>
    {
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/test/CMS.Plugin.HIAWms.EntityFrameworkCore.Tests/HIAWmsTestEntityFrameworkCoreModule.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
using CMS.Plugin.HIAWms.MySQL;
using CMS.Plugin.HIAWms.TestBase;
using Microsoft.Data.Sqlite;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Storage;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.Sqlite;
using Volo.Abp.Modularity;
namespace CMS.Plugin.HIAWms.EntityFrameworkCore.Tests
{
    /// <summary>
    /// MyProjectName TestEntityFrameworkCoreModule
    /// </summary>
    [DependsOn(
        typeof(HIAWmsTestBaseModule),
        typeof(CMSPluginEntityFrameworkCoreModule),
        typeof(AbpEntityFrameworkCoreSqliteModule))]
    public class HIAWmsTestEntityFrameworkCoreModule : AbpModule
    {
        /// <summary>
        /// ConfigureServices
        /// </summary>
        /// <param name="context">ServiceConfigurationContext</param>
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
            var sqliteConnection = CreateDatabaseAndGetConnection();
            Configure<AbpDbContextOptions>(options =>
            {
                options.Configure(dbContextConfigurationContext =>
                {
                    dbContextConfigurationContext.DbContextOptions.UseSqlite(sqliteConnection);
                });
            });
        }
        private static SqliteConnection CreateDatabaseAndGetConnection()
        {
            var connection = new SqliteConnection("Data Source=:memory:");
            connection.Open();
            new CMSPluginDbContext(
                new DbContextOptionsBuilder<CMSPluginDbContext>().UseSqlite(connection).Options).GetService<IRelationalDatabaseCreator>().CreateTables();
            return connection;
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/test/CMS.Plugin.HIAWms.TestBase/CMS.Plugin.HIAWms.TestBase.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
<Project Sdk="Microsoft.NET.Sdk">
    <Import Project="../../common.test.props" />
    <PropertyGroup>
        <TargetFramework>net6.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Volo.Abp.Autofac" Version="$(ABPPackageVersion)" />
        <PackageReference Include="Volo.Abp.TestBase" Version="$(ABPPackageVersion)" />
        <PackageReference Include="Volo.Abp.Authorization" Version="$(ABPPackageVersion)" />
        <PackageReference Include="Microsoft.NET.Test.Sdk" Version="$(MicrosoftNETTestSdkPackageVersion)" />
        <PackageReference Include="NSubstitute" Version="$(NSubstitutePackageVersion)" />
        <PackageReference Include="Shouldly" Version="$(ShouldlyPackageVersion)" />
        <PackageReference Include="xunit" Version="$(xUnitPackageVersion)" />
        <PackageReference Include="xunit.extensibility.execution" Version="$(xUnitExtensibilityExecutionPackageVersion)" />
        <PackageReference Include="xunit.runner.visualstudio" Version="$(xUnitRunnerVisualstudioPackageVersion)" />
    </ItemGroup>
    <ItemGroup>
        <ProjectReference Include="..\..\src\CMS.Plugin.HIAWms.Domain\CMS.Plugin.HIAWms.Domain.csproj" />
    </ItemGroup>
</Project>
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/test/CMS.Plugin.HIAWms.TestBase/HIAWmsDataSeedContributor.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Guids;
namespace CMS.Plugin.HIAWms.TestBase
{
    /// <summary>
    /// MyProjectName DataSeedContributor
    /// </summary>
    public class HIAWmsDataSeedContributor : IDataSeedContributor, ITransientDependency
    {
        private readonly HIAWmsTestData _myProjectNameTestData;
        private readonly IGuidGenerator _guidGenerator;
        /// <summary>
        /// Initializes a new instance of the <see cref="HIAWmsDataSeedContributor"/> class.
        /// </summary>
        /// <param name="serviceProvider">IServiceProvider</param>
        public HIAWmsDataSeedContributor(IServiceProvider serviceProvider)
        {
            _myProjectNameTestData = serviceProvider.GetRequiredService<HIAWmsTestData>();
            _guidGenerator = serviceProvider.GetRequiredService<IGuidGenerator>();
        }
        /// <summary>
        /// SeedAsync
        /// </summary>
        /// <param name="context">DataSeedContext</param>
        /// <returns>Task</returns>
        public async Task SeedAsync(DataSeedContext context)
        {
            await Task.CompletedTask;
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/test/CMS.Plugin.HIAWms.TestBase/HIAWmsTestBase.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,89 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
using Volo.Abp.Modularity;
using Volo.Abp.Testing;
using Volo.Abp.Uow;
namespace CMS.Plugin.HIAWms.TestBase
{
    /// <summary>
    /// MyProjectName TestBase
    /// </summary>
    /// <typeparam name="TStartupModule">IAbpModule</typeparam>
    public class HIAWmsTestBase<TStartupModule> : AbpIntegratedTest<TStartupModule>
        where TStartupModule : IAbpModule
    {
        /// <summary>
        /// SetAbpApplicationCreationOptions
        /// </summary>
        /// <param name="options">AbpApplicationCreationOptions</param>
        protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
        {
            options.UseAutofac();
        }
        /// <summary>
        /// WithUnitOfWorkAsync
        /// </summary>
        /// <param name="func">func</param>
        /// <returns>Task</returns>
        protected virtual Task WithUnitOfWorkAsync(Func<Task> func)
        {
            return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func);
        }
        /// <summary>
        /// WithUnitOfWorkAsync
        /// </summary>
        /// <param name="options">AbpUnitOfWorkOptions</param>
        /// <param name="action">action</param>
        /// <returns>Task</returns>
        protected virtual async Task WithUnitOfWorkAsync(AbpUnitOfWorkOptions options, Func<Task> action)
        {
            using (var scope = ServiceProvider.CreateScope())
            {
                var uowManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
                using (var uow = uowManager.Begin(options))
                {
                    await action();
                    await uow.CompleteAsync();
                }
            }
        }
        /// <summary>
        /// WithUnitOfWorkAsync
        /// </summary>
        /// <typeparam name="TResult">t</typeparam>
        /// <param name="func">TResult</param>
        /// <returns>TResult</returns>
        protected virtual Task<TResult> WithUnitOfWorkAsync<TResult>(Func<Task<TResult>> func)
        {
            return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func);
        }
        /// <summary>
        /// WithUnitOfWorkAsync
        /// </summary>
        /// <typeparam name="TResult">T</typeparam>
        /// <param name="options">AbpUnitOfWorkOptions</param>
        /// <param name="func">Func</param>
        /// <returns>TResult</returns>
        protected virtual async Task<TResult> WithUnitOfWorkAsync<TResult>(AbpUnitOfWorkOptions options, Func<Task<TResult>> func)
        {
            using (var scope = ServiceProvider.CreateScope())
            {
                var uowManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
                using (var uow = uowManager.Begin(options))
                {
                    var result = await func();
                    await uow.CompleteAsync();
                    return result;
                }
            }
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/test/CMS.Plugin.HIAWms.TestBase/HIAWmsTestBaseModule.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
using CMS.Plugin.HIAWms.Domain;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp;
using Volo.Abp.Autofac;
using Volo.Abp.Data;
using Volo.Abp.Modularity;
using Volo.Abp.Threading;
using Volo.Abp.Uow;
namespace CMS.Plugin.HIAWms.TestBase
{
    /// <summary>
    /// MyProjectName TestBaseModule
    /// </summary>
    [DependsOn(
        typeof(AbpAutofacModule),
        typeof(AbpTestBaseModule),
        typeof(CMSPluginDomainModule))]
    public class HIAWmsTestBaseModule : AbpModule
    {
        /// <summary>
        /// PreConfigureServices
        /// </summary>
        /// <param name="context">ServiceConfigurationContext</param>
        public override void PreConfigureServices(ServiceConfigurationContext context)
        {
        }
        /// <summary>
        /// ConfigureServices
        /// </summary>
        /// <param name="context">ServiceConfigurationContext</param>
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
            context.Services.AddAlwaysAllowAuthorization();
            Configure<AbpUnitOfWorkDefaultOptions>(options =>
            {
                options.TransactionBehavior = UnitOfWorkTransactionBehavior.Enabled;
            });
        }
        /// <summary>
        /// OnApplicationInitialization
        /// </summary>
        /// <param name="context">ApplicationInitializationContext</param>
        public override void OnApplicationInitialization(ApplicationInitializationContext context)
        {
            SeedTestData(context);
        }
        private static void SeedTestData(ApplicationInitializationContext context)
        {
            AsyncHelper.RunSync(async () =>
            {
                using (var scope = context.ServiceProvider.CreateScope())
                {
                    var dataSeeder = scope.ServiceProvider.GetRequiredService<IDataSeeder>();
                    await dataSeeder.SeedAsync();
                }
            });
        }
    }
}
Weben_CMSרÓôúÂëÉú³ÉÆ÷/UtilityApi/test/CMS.Plugin.HIAWms.TestBase/HIAWmsTestData.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,8 @@
using Volo.Abp.DependencyInjection;
namespace CMS.Plugin.HIAWms.TestBase
{
    public class HIAWmsTestData : ISingletonDependency
    {
    }
}