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; /// /// 出入库记录表应用服务 /// public class WmsInOutStockRecordAppService : CMSPluginAppService, IWmsInOutStockRecordAppService { private readonly IWmsInOutStockRecordRepository _wmsInOutStockRecordRepository; /// /// Initializes a new instance of the class. /// /// The task job repository. public WmsInOutStockRecordAppService(IWmsInOutStockRecordRepository wmsInOutStockRecordRepository) { _wmsInOutStockRecordRepository = wmsInOutStockRecordRepository; } /// /// 获取指定出入库记录表 /// /// /// public virtual async Task GetAsync(Guid id) { return ObjectMapper.Map(await _wmsInOutStockRecordRepository.GetAsync(id)); } /// /// 分页获取出入库记录表 /// /// /// public virtual async Task> 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(count, ObjectMapper.Map, List>(list)); } /// /// 动态构造查询条件 /// /// 输入参数 /// private FunReturnResultModel>> DynamicGetQueryParams(GetWmsInOutStockRecordInput 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; } /// /// 新建出入库记录表 /// /// /// /// public virtual async Task CreateAsync(WmsInOutStockRecordCreateDto input) { await CheckCreateOrUpdateDtoAsync(input); var maxSort = await _wmsInOutStockRecordRepository.GetMaxSortAsync(); var sort = input.Sort ?? maxSort; var insertObj = ObjectMapper.Map(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(insertObj); } /// /// 更新出入库记录表 /// /// /// /// /// public virtual async Task UpdateAsync(Guid id, WmsInOutStockRecordUpdateDto input) { await CheckCreateOrUpdateDtoAsync(input); var updateObj = await _wmsInOutStockRecordRepository.GetAsync(id); 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; await _wmsInOutStockRecordRepository.UpdateAsync(updateObj); return ObjectMapper.Map(updateObj); } /// /// 克隆出入库记录表 /// /// /// public async Task> CloneAsync(IEnumerable ids) { //var wmsInOutStockRecords = new List(); //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>(wmsInOutStockRecords); return new List(); } /// /// 删除单个出入库记录表 /// /// /// public virtual Task DeleteAsync(Guid id) { return _wmsInOutStockRecordRepository.DeleteAsync(id); } /// /// 删除多个出入库记录表 /// /// /// public async Task DeleteManyAsync(IEnumerable ids) { foreach (var id in ids) { await DeleteAsync(id); } } /// /// 调整排序出入库记录表 /// /// /// /// 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); } /// /// 导入出入库记录表 /// /// /// /// public async Task ImportAsync(WmsInOutStockRecordsImportModel input) { } /// /// 导出出入库记录表 /// /// /// public async Task<(Dictionary 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>(list); var sheets = new Dictionary { ["配置"] = ExportHelper.ConvertListToExportData(result), }; var fileName = result.Count > 1 ? "WmsInOutStockRecord列表" : result.Count == 1 ? result[0]?.MaterialName : "WmsInOutStockRecord模版"; return (sheets, fileName); } /// /// 校验出入库记录表,当新建或更新时 /// /// /// 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; } }