zs
2025-05-16 f99638e9d69cce5d0bbb7b99cbaff2f758c3c810
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsEnumAppService.cs
@@ -1,11 +1,25 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsEnumDto;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.CommonDto;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsEnumDto;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterialType;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsStore;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.Shared.Util;
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CMS.Plugin.HIAWms.Domain.WmsAreas;
using CMS.Plugin.HIAWms.Domain.WmsMaterials;
using CMS.Plugin.HIAWms.Domain.WmsMaterialTypes;
using CMS.Plugin.HIAWms.Domain.WmsPlaces;
using CMS.Plugin.HIAWms.Domain.WmsStores;
using CmsQueryExtensions;
using CmsQueryExtensions.Extension;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using CMS.Plugin.HIAWms.Domain.WmsMaterialTypes;
using static CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsArea.WmsAreaCreateOrUpdateDtoBase;
using static CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlace.WmsPlaceCreateOrUpdateDtoBase;
namespace CMS.Plugin.HIAWms.Application.Implements
{
@@ -14,9 +28,149 @@
    /// </summary>
    public class WmsEnumAppService : CMSPluginAppService, IWmsEnumAppService
    {
        private readonly IWmsStoreRepository _storeRepository;
        private readonly IWmsAreaRepository _wmsAreaRepository;
        private readonly IWmsPlaceRepository _wmsPlaceRepository;
        private readonly IWmsMaterialRepository _wmsMaterialRepository;
        private readonly IWmsMaterialTypeRepository _WmsMaterialTypeRepository;
        public WmsEnumAppService(IWmsStoreRepository storeRepository, IWmsAreaRepository wmsAreaRepository, IWmsPlaceRepository wmsPlaceRepository, IWmsMaterialRepository wmsMaterialRepository, IWmsMaterialTypeRepository wmsMaterialTypeRepository)
        {
            _storeRepository = storeRepository;
            _wmsAreaRepository = wmsAreaRepository;
            _wmsPlaceRepository = wmsPlaceRepository;
            _wmsMaterialRepository = wmsMaterialRepository;
            _WmsMaterialTypeRepository = wmsMaterialTypeRepository;
        }
        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;
        }
        /// <summary>
        /// 巷道列表
        /// </summary>
        /// <returns></returns>
        public async Task<List<PlaceAisleForListOuptut>> GetAisleListAsync()
        {
            var list = await _wmsPlaceRepository.GetAisleListForSelectAsync();
            if (list == null || list.Count <= 0) { return new List<PlaceAisleForListOuptut>(); }
            var result = list.Select(x => new PlaceAisleForListOuptut
            {
                Aisle = x.Aisle,
                AisleName = $"第{x.Aisle}巷道",
            }).ToList();
            return result;
        }
        /// <summary>
        /// 获取机型
        /// </summary>
        /// <returns></returns>
        public async Task<List<MaterialModelOutput>> GetMaterialModeListAsync()
        {
            var materialList = await _wmsMaterialRepository.GetMaterialListAsync(new WmsMaterial());
            if (materialList == null || materialList.Count <= 0) return new List<MaterialModelOutput>();
            return materialList.Select(material => new MaterialModelOutput
            {
                MaterialModel = material.MaterialModel,
                MaterialModelDesc = material.MaterialModel
            }).ToList();
        }
        /// <summary>
        /// 获取库区列表
        /// </summary>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task<List<PlaceListOutput>> GetPlaceListForSelectAsync(PlaceTypeEnum placeType)
        {
            var placeList = await _wmsPlaceRepository.GetPlaceListForSelectAsync(placeType);
            if (placeList == null || placeList.Count <= 0) return new List<PlaceListOutput>(); ;
            return placeList.Select(place => new PlaceListOutput
            {
                PlaceNo = place.PlaceNo,
                PlaceNoDesc = place.PlaceNo
            }).ToList();
        }
        /// <summary>
        /// 获取类型列表
        /// </summary>
        /// <returns></returns>
        public async Task<List<MaterialTypeOutput>> GetMaterialTypeListAsync()
        {
            var queryInput = new GetWmsMaterialTypeInput();
            var whereConditions = DynamicGetQueryParams(queryInput);
            var list = await _WmsMaterialTypeRepository.GetListAsync(whereConditions);
            var result = new List<MaterialTypeOutput>();
            if (list == null || list.Count <= 0) return result;
            result = list.Select(x => new MaterialTypeOutput
            {
                MaterialTypeCode = x.MaterialTypeCode,
                MaterialTypeDesc = x.MaterialTypeDesc,
            }).ToList();
            return result;
        }
        private FunReturnResultModel<Expression<Func<WmsMaterialType, bool>>> DynamicGetQueryParams(GetWmsMaterialTypeInput input)
        {
            //动态构造查询条件
            var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsMaterialType, GetWmsMaterialTypeInput>(input);
            if (!whereConditions.IsSuccess)
            {
                throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
            }
            //也可再次自定义构建查询条件
            Expression<Func<WmsMaterialType, bool>> extendExpression = a => a.IsDeleted == false;
            // 使用 System.Linq.PredicateBuilder 的 And
            var pres = (System.Linq.Expressions.Expression<Func<WmsMaterialType, bool>>)(whereConditions.data);
            whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
            return whereConditions;
        }
    }
}