zs
2025-05-18 4b3fd35893972bb05fd7ab89dc624ab805093ff3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
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.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
{
    /// <summary>
    /// 枚举类型接口实现
    /// </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;
        }
    }
}