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
{
///
/// 枚举类型接口实现
///
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 GetEnumDataList(WmsEnumInput enumInput)
{
return EnumHelper.GetEnumItems(enumInput.EnumName);
}
///
/// 获取仓库列表
///
///
public async Task> GetStreList()
{
var list = await _storeRepository.GetListForSelectAsync();
if (list == null || list.Count <= 0) { return new List(); }
var result = list.Select(x => new WmsStoreForAreaOutpur
{
StoreCode = x.StoreCode,
StoreName = x.StoreName,
}).ToList();
return result;
}
///
/// 库区列表
///
///
public async Task> GetAreaListAsync()
{
var list = await _wmsAreaRepository.GetListForSelectAsync();
if (list == null || list.Count <= 0) { return new List(); }
var result = list.Select(x => new AreaForListOuptut
{
AreaName = x.AreaName,
AreaNo = x.AreaNo,
}).ToList();
return result;
}
///
/// 巷道列表
///
///
public async Task> GetAisleListAsync()
{
var list = await _wmsPlaceRepository.GetAisleListForSelectAsync();
if (list == null || list.Count <= 0) { return new List(); }
var result = list.Select(x => new PlaceAisleForListOuptut
{
Aisle = x.Aisle,
AisleName = $"第{x.Aisle}巷道",
}).ToList();
return result;
}
///
/// 获取机型
///
///
public async Task> GetMaterialModeListAsync()
{
var materialList = await _wmsMaterialRepository.GetMaterialListAsync(new WmsMaterial());
if (materialList == null || materialList.Count <= 0) return new List();
return materialList.Select(material => new MaterialModelOutput
{
MaterialModel = material.MaterialModel,
MaterialModelDesc = material.MaterialModel
}).ToList();
}
///
/// 获取库区列表
///
///
///
public async Task> GetPlaceListForSelectAsync(PlaceTypeEnum placeType)
{
var placeList = await _wmsPlaceRepository.GetPlaceListForSelectAsync(placeType);
if (placeList == null || placeList.Count <= 0) return new List(); ;
return placeList.Select(place => new PlaceListOutput
{
PlaceNo = place.PlaceNo,
PlaceNoDesc = place.PlaceNo
}).ToList();
}
///
/// 获取类型列表
///
///
public async Task> GetMaterialTypeListAsync()
{
var queryInput = new GetWmsMaterialTypeInput();
var whereConditions = DynamicGetQueryParams(queryInput);
var list = await _WmsMaterialTypeRepository.GetListAsync(whereConditions);
var result = new List();
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>> DynamicGetQueryParams(GetWmsMaterialTypeInput input)
{
//动态构造查询条件
var whereConditions = WhereConditionsExtensions.GetWhereConditions(input);
if (!whereConditions.IsSuccess)
{
throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
}
//也可再次自定义构建查询条件
Expression> extendExpression = a => a.IsDeleted == false;
// 使用 System.Linq.PredicateBuilder 的 And
var pres = (System.Linq.Expressions.Expression>)(whereConditions.data);
whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
return whereConditions;
}
}
}