schangxiang@126.com
2025-05-13 25246d39da4b74b54a844b36d8a50752917b81cc
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsInOutStockOrderAppService.cs
@@ -1,127 +1,152 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrder;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.Shared;
using CmsQueryExtensions;
using CMS.Plugin.HIAWms.Domain.WmsInOutStockOrder;
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;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockOrder;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.Shared;
using CmsQueryExtensions;
using CMS.Plugin.HIAWms.Domain.WmsInOutStockOrder;
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;
using CMS.Plugin.HIAWms.Domain.WmsMaterials;
namespace CMS.Plugin.HIAWms.Application.Implements;
/// <summary> 
/// 出入库单据应用服务 
/// </summary> 
public class WmsInOutStockOrderAppService : CMSPluginAppService, IWmsInOutStockOrderAppService
{
    private readonly IWmsInOutStockOrderRepository wmsInOutStockOrderRepository;
public class WmsInOutStockOrderAppService : CMSPluginAppService, IWmsInOutStockOrderAppService
{
    private readonly IWmsInOutStockOrderRepository wmsInOutStockOrderRepository;
    private readonly IWmsMaterialRepository _wmsMaterialRepository;
    /// <summary> 
    /// Initializes a new instance of the <see cref="WmsInOutStockOrderAppService"/> class. 
    /// </summary> 
    /// <param name="WmsInOutStockOrderRepository">The task job repository.</param> 
    public WmsInOutStockOrderAppService(IWmsInOutStockOrderRepository _WmsInOutStockOrderRepository)
    {
        wmsInOutStockOrderRepository = _WmsInOutStockOrderRepository;
    }
    public WmsInOutStockOrderAppService(IWmsInOutStockOrderRepository _WmsInOutStockOrderRepository, IWmsMaterialRepository wmsMaterialRepository)
    {
        wmsInOutStockOrderRepository = _WmsInOutStockOrderRepository;
        _wmsMaterialRepository = wmsMaterialRepository;
    }
    /// <summary> 
    /// 获取指定出入库单据 
    /// </summary> 
    /// <param name="id"></param> 
    /// <returns></returns> 
    public virtual async Task<WmsInOutStockOrderDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<WmsInOutStockOrder, WmsInOutStockOrderDto>(await wmsInOutStockOrderRepository.GetAsync(id));
    }
    public virtual async Task<WmsInOutStockOrderDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<WmsInOutStockOrder, WmsInOutStockOrderDto>(await wmsInOutStockOrderRepository.GetAsync(id));
    }
    /// <summary> 
    /// 分页获取出入库单据 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    public virtual async Task<PagedResultDto<WmsInOutStockOrderDto>> GetListAsync(GetWmsInOutStockOrderInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsInOutStockOrder.Sort);
        }
    public virtual async Task<PagedResultDto<WmsInOutStockOrderDto>> GetListAsync(GetWmsInOutStockOrderInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsInOutStockOrder.Sort);
        }
        #region 动态构造查询条件  
        //动态构造查询条件  
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var count = await wmsInOutStockOrderRepository.GetCountAsync(whereConditions);
        var list = await wmsInOutStockOrderRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<WmsInOutStockOrderDto>(count, ObjectMapper.Map<List<WmsInOutStockOrder>, List<WmsInOutStockOrderDto>>(list));
    }
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var count = await wmsInOutStockOrderRepository.GetCountAsync(whereConditions);
        var list = await wmsInOutStockOrderRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<WmsInOutStockOrderDto>(count, ObjectMapper.Map<List<WmsInOutStockOrder>, List<WmsInOutStockOrderDto>>(list));
    }
    /// <summary>  
    /// 动态构造查询条件  
    /// </summary>  
    /// <param name="input">输入参数</param>  
    /// <returns></returns>  
    private FunReturnResultModel<Expression<Func<WmsInOutStockOrder, bool>>> DynamicGetQueryParams(GetWmsInOutStockOrderInput input)
    {
    private FunReturnResultModel<Expression<Func<WmsInOutStockOrder, bool>>> DynamicGetQueryParams(GetWmsInOutStockOrderInput input)
    {
        //动态构造查询条件  
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsInOutStockOrder, GetWmsInOutStockOrderInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsInOutStockOrder, GetWmsInOutStockOrderInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        //也可再次自定义构建查询条件  
        Expression<Func<WmsInOutStockOrder, bool>> extendExpression = a => a.IsDeleted == false;
        Expression<Func<WmsInOutStockOrder, bool>> extendExpression = a => a.IsDeleted == false;
        // 使用 System.Linq.PredicateBuilder 的 And 
        var pres = (System.Linq.Expressions.Expression<Func<WmsInOutStockOrder, bool>>)(whereConditions.data);
        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
        return whereConditions;
    }
        var pres = (System.Linq.Expressions.Expression<Func<WmsInOutStockOrder, 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<WmsInOutStockOrderDto> CreateAsync(WmsInOutStockOrderCreateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var exist = await wmsInOutStockOrderRepository.NameExistAsync(input.OrderNo);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.OrderNo]);
        }
        var maxSort = await wmsInOutStockOrderRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var insertObj = ObjectMapper.Map<WmsInOutStockOrderCreateDto, WmsInOutStockOrder>(input);
        insertObj.Sort = sort;
        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None);
        await wmsInOutStockOrderRepository.InsertAsync(insertObj);
    public virtual async Task<WmsInOutStockOrderDto> CreateAsync(WmsInOutStockOrderCreateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var material = await _wmsMaterialRepository.FindByNameAsync(input.MaterialNo);
        if (material == null)
        {
            throw new UserFriendlyException("物料信息不存在");
        }
        var exist = await wmsInOutStockOrderRepository.NameExistAsync(input.OrderNo);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.OrderNo]);
        }
        var maxSort = await wmsInOutStockOrderRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var maxPriority = await wmsInOutStockOrderRepository.GetMaxPriorityAsync();
        var priority = input.Priority > 0 ? input.Priority : maxPriority;
        var insertObj = ObjectMapper.Map<WmsInOutStockOrderCreateDto, WmsInOutStockOrder>(input);
        insertObj.MaterialName = material.MaterialName;
        insertObj.MaterialModel = material.MaterialModel;
        insertObj.OrderStatus = Domain.Shared.Enums.OrderStatusEnum.NoStart;
        var type = "RK-";
        insertObj.StockType = Domain.Shared.Enums.StockTypeEnum.InBound;
        if (input.OrderType == Domain.Shared.Enums.OrderTypeEnum.PRODUCTCALL || input.OrderType == Domain.Shared.Enums.OrderTypeEnum.PERSONOT)
        {
            type = "CK-";
            insertObj.StockType = Domain.Shared.Enums.StockTypeEnum.OutBound;
        }
        insertObj.OrderNo = string.IsNullOrEmpty(input.OrderNo) ? type + DateTime.Now.ToString("yyyyMMddHHmmssfff") : input.OrderNo;
        insertObj.Sort = sort;
        insertObj.Priority = priority;
        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None);
        await wmsInOutStockOrderRepository.InsertAsync(insertObj);
        //if (input.Sort.HasValue && insertObj.Sort != maxSort) 
        //{ 
        //    await AdjustSortAsync(insertObj.Id, insertObj.Sort); 
        //} 
        return ObjectMapper.Map<WmsInOutStockOrder, WmsInOutStockOrderDto>(insertObj);
    }
        return ObjectMapper.Map<WmsInOutStockOrder, WmsInOutStockOrderDto>(insertObj);
    }
    /// <summary> 
    /// 更新出入库单据 
    /// </summary> 
@@ -129,21 +154,21 @@
    /// <param name="input"></param> 
    /// <returns></returns> 
    /// <exception cref="UserFriendlyException"></exception> 
    public virtual async Task<WmsInOutStockOrderDto> UpdateAsync(Guid id, WmsInOutStockOrderUpdateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var updateObj = await wmsInOutStockOrderRepository.GetAsync(id);
        var exist = await wmsInOutStockOrderRepository.NameExistAsync(input.OrderNo, updateObj.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.OrderNo]);
        }
        updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
        input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None);
                updateObj.OrderNo = input.OrderNo;
    public virtual async Task<WmsInOutStockOrderDto> UpdateAsync(Guid id, WmsInOutStockOrderUpdateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var updateObj = await wmsInOutStockOrderRepository.GetAsync(id);
        var exist = await wmsInOutStockOrderRepository.NameExistAsync(input.OrderNo, updateObj.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.OrderNo]);
        }
        updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
        input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None);
        updateObj.OrderNo = input.OrderNo;
        updateObj.OrderStatus = input.OrderStatus;
        updateObj.MaterialName = input.MaterialName;
        updateObj.MaterialNo = input.MaterialNo;
@@ -159,20 +184,20 @@
        updateObj.OperateTime = input.OperateTime;
        updateObj.Remark = input.Remark;
        updateObj.IsDisabled = input.IsDisabled;
        await wmsInOutStockOrderRepository.UpdateAsync(updateObj);
        return ObjectMapper.Map<WmsInOutStockOrder, WmsInOutStockOrderDto>(updateObj);
    }
        await wmsInOutStockOrderRepository.UpdateAsync(updateObj);
        return ObjectMapper.Map<WmsInOutStockOrder, WmsInOutStockOrderDto>(updateObj);
    }
    /// <summary> 
    /// 克隆出入库单据 
    /// </summary> 
    /// <param name="ids"></param> 
    /// <returns></returns> 
    public async Task<List<WmsInOutStockOrderDto>> CloneAsync(IEnumerable<Guid> ids)
    {
    public async Task<List<WmsInOutStockOrderDto>> CloneAsync(IEnumerable<Guid> ids)
    {
        //var wmsInOutStockOrders = new List<WmsInOutStockOrder>(); 
        //if (ids != null) 
        //{ 
@@ -192,259 +217,259 @@
        //                    name += WmsInOutStockOrderConsts.CloneTag; 
        //                    continue; 
        //                } 
        //                notExist = true; 
        //            } 
        //            //WmsInOutStockOrder = await wmsInOutStockOrderRepository.InsertAsync(WmsInOutStockOrder.Clone(GuidGenerator.Create(), name, sort++)); 
        //            wmsInOutStockOrders.Add(WmsInOutStockOrder); 
        //        } 
        //    } 
        //} 
        //return ObjectMapper.Map<List<WmsInOutStockOrder>, List<WmsInOutStockOrderDto>>(wmsInOutStockOrders); 
        return new List<WmsInOutStockOrderDto>();
    }
        return new List<WmsInOutStockOrderDto>();
    }
    /// <summary> 
    /// 删除单个出入库单据 
    /// </summary> 
    /// <param name="id"></param> 
    /// <returns></returns> 
    public virtual Task DeleteAsync(Guid id)
    {
        return wmsInOutStockOrderRepository.DeleteAsync(id);
    }
    public virtual async Task DeleteAsync(Guid id)
    {
        var order = await wmsInOutStockOrderRepository.GetAsync(id);
        if(order != null && order.OrderStatus != Domain.Shared.Enums.OrderStatusEnum.NoStart)
        {
            throw new UserFriendlyException("只能删除未开始的单据");
        }
        await wmsInOutStockOrderRepository.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);
        }
    }
    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 wmsInOutStockOrderRepository.GetListAsync(null, nameof(WmsInOutStockOrder.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 wmsInOutStockOrderRepository.UpdateManyAsync(list);
    }
    public virtual async Task AdjustSortAsync(Guid id, int sort)
    {
        var list = await wmsInOutStockOrderRepository.GetListAsync(null, nameof(WmsInOutStockOrder.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 wmsInOutStockOrderRepository.UpdateManyAsync(list);
    }
    /// <summary> 
    /// 导入出入库单据 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    /// <exception cref="UserFriendlyException"></exception> 
    public async Task ImportAsync(WmsInOutStockOrdersImportModel input)
    {
        Check.NotNull(input, nameof(input));
        var wmsInOutStockOrderCreateDtos = new List<(int RowIndex, WmsInOutStockOrderCreateDto Item)>();
        var wmsInOutStockOrderUpdateDtos = new List<(int RowIndex, Guid Id, WmsInOutStockOrderUpdateDto Item)>();
        var importItems = input.WmsInOutStockOrders;
        if (importItems != null && importItems.Any())
        {
    public async Task ImportAsync(WmsInOutStockOrdersImportModel input)
    {
        Check.NotNull(input, nameof(input));
        var wmsInOutStockOrderCreateDtos = new List<(int RowIndex, WmsInOutStockOrderCreateDto Item)>();
        var wmsInOutStockOrderUpdateDtos = new List<(int RowIndex, Guid Id, WmsInOutStockOrderUpdateDto Item)>();
        var importItems = input.WmsInOutStockOrders;
        if (importItems != null && importItems.Any())
        {
            #region 导入校验 
            // 判断名称是否重复,并输出第几行重复 
            var duplicateWmsInOutStockOrders = importItems.GroupBy(x => x.OrderNo).Where(x => x.Count() > 1).ToList();
            if (duplicateWmsInOutStockOrders?.Any() == true)
            {
                var duplicateWmsInOutStockOrderMsgs = duplicateWmsInOutStockOrders.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} 行:{x.Key}  名称重复");
                var errorMsg = $"导入失败!配置, {string.Join(",", duplicateWmsInOutStockOrderMsgs)},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
            #endregion
            foreach (var impItem in importItems)
            {
                if (impItem.OrderNo.IsNullOrWhiteSpace())
                {
                    continue;
                }
                if (impItem.OrderNo.IsNullOrWhiteSpace())
                {
                    var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:WmsInOutStockOrder名称不能为空";
                    throw new UserFriendlyException(errorMsg);
                }
                var oldWmsInOutStockOrder = await wmsInOutStockOrderRepository.FindByNameAsync(impItem.OrderNo);
                if (oldWmsInOutStockOrder != null)
                {
                    var wmsInOutStockOrderUpdateDto = new WmsInOutStockOrderUpdateDto
                    {
            var duplicateWmsInOutStockOrders = importItems.GroupBy(x => x.OrderNo).Where(x => x.Count() > 1).ToList();
            if (duplicateWmsInOutStockOrders?.Any() == true)
            {
                var duplicateWmsInOutStockOrderMsgs = duplicateWmsInOutStockOrders.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} 行:{x.Key}  名称重复");
                var errorMsg = $"导入失败!配置, {string.Join(",", duplicateWmsInOutStockOrderMsgs)},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
            #endregion
            foreach (var impItem in importItems)
            {
                if (impItem.OrderNo.IsNullOrWhiteSpace())
                {
                    continue;
                }
                if (impItem.OrderNo.IsNullOrWhiteSpace())
                {
                    var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:WmsInOutStockOrder名称不能为空";
                    throw new UserFriendlyException(errorMsg);
                }
                var oldWmsInOutStockOrder = await wmsInOutStockOrderRepository.FindByNameAsync(impItem.OrderNo);
                if (oldWmsInOutStockOrder != null)
                {
                    var wmsInOutStockOrderUpdateDto = new WmsInOutStockOrderUpdateDto
                    {
                        OrderNo = impItem.OrderNo,
OrderStatus = impItem.OrderStatus,
MaterialName = impItem.MaterialName,
MaterialNo = impItem.MaterialNo,
MaterialModel = impItem.MaterialModel,
MaterialBatch = impItem.MaterialBatch,
OrderType = impItem.OrderType,
StockType = impItem.StockType,
MaterialNumber = impItem.MaterialNumber,
DistributeNumber = impItem.DistributeNumber,
CompleteNumber = impItem.CompleteNumber,
Priority = impItem.Priority,
PlanNo = impItem.PlanNo,
OperateTime = impItem.OperateTime,
Remark = impItem.Remark,
IsDisabled = impItem.IsDisabled,
                    };
                    wmsInOutStockOrderUpdateDtos.Add((impItem.RowIndex, oldWmsInOutStockOrder.Id, wmsInOutStockOrderUpdateDto));
                }
                else
                {
                    var wmsInOutStockOrderCreateDto = new WmsInOutStockOrderCreateDto
                    {
                        OrderStatus = impItem.OrderStatus,
                        MaterialName = impItem.MaterialName,
                        MaterialNo = impItem.MaterialNo,
                        MaterialModel = impItem.MaterialModel,
                        MaterialBatch = impItem.MaterialBatch,
                        OrderType = impItem.OrderType,
                        StockType = impItem.StockType,
                        MaterialNumber = impItem.MaterialNumber,
                        DistributeNumber = impItem.DistributeNumber,
                        CompleteNumber = impItem.CompleteNumber,
                        Priority = impItem.Priority,
                        PlanNo = impItem.PlanNo,
                        OperateTime = impItem.OperateTime,
                        Remark = impItem.Remark,
                        IsDisabled = impItem.IsDisabled,
                    };
                    wmsInOutStockOrderUpdateDtos.Add((impItem.RowIndex, oldWmsInOutStockOrder.Id, wmsInOutStockOrderUpdateDto));
                }
                else
                {
                    var wmsInOutStockOrderCreateDto = new WmsInOutStockOrderCreateDto
                    {
                        OrderNo = impItem.OrderNo,
OrderStatus = impItem.OrderStatus,
MaterialName = impItem.MaterialName,
MaterialNo = impItem.MaterialNo,
MaterialModel = impItem.MaterialModel,
MaterialBatch = impItem.MaterialBatch,
OrderType = impItem.OrderType,
StockType = impItem.StockType,
MaterialNumber = impItem.MaterialNumber,
DistributeNumber = impItem.DistributeNumber,
CompleteNumber = impItem.CompleteNumber,
Priority = impItem.Priority,
PlanNo = impItem.PlanNo,
OperateTime = impItem.OperateTime,
Remark = impItem.Remark,
IsDisabled = impItem.IsDisabled,
                    };
                    wmsInOutStockOrderCreateDtos.Add((impItem.RowIndex, wmsInOutStockOrderCreateDto));
                }
            }
        }
                        OrderStatus = impItem.OrderStatus,
                        MaterialName = impItem.MaterialName,
                        MaterialNo = impItem.MaterialNo,
                        MaterialModel = impItem.MaterialModel,
                        MaterialBatch = impItem.MaterialBatch,
                        OrderType = impItem.OrderType,
                        StockType = impItem.StockType,
                        MaterialNumber = impItem.MaterialNumber,
                        DistributeNumber = impItem.DistributeNumber,
                        CompleteNumber = impItem.CompleteNumber,
                        Priority = impItem.Priority,
                        PlanNo = impItem.PlanNo,
                        OperateTime = impItem.OperateTime,
                        Remark = impItem.Remark,
                        IsDisabled = impItem.IsDisabled,
                    };
                    wmsInOutStockOrderCreateDtos.Add((impItem.RowIndex, wmsInOutStockOrderCreateDto));
                }
            }
        }
        // 新增 
        foreach (var wmsInOutStockOrderDto in wmsInOutStockOrderCreateDtos)
        {
            try
            {
                await CreateAsync(wmsInOutStockOrderDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsInOutStockOrderDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
        foreach (var wmsInOutStockOrderDto in wmsInOutStockOrderCreateDtos)
        {
            try
            {
                await CreateAsync(wmsInOutStockOrderDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsInOutStockOrderDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
        // 更新 
        foreach (var wmsInOutStockOrderDto in wmsInOutStockOrderUpdateDtos)
        {
            try
            {
                await UpdateAsync(wmsInOutStockOrderDto.Id, wmsInOutStockOrderDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsInOutStockOrderDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
    }
        foreach (var wmsInOutStockOrderDto in wmsInOutStockOrderUpdateDtos)
        {
            try
            {
                await UpdateAsync(wmsInOutStockOrderDto.Id, wmsInOutStockOrderDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsInOutStockOrderDto.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(GetWmsInOutStockOrderInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsInOutStockOrder.Sort);
        }
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsInOutStockOrderInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsInOutStockOrder.Sort);
        }
        #region 动态构造查询条件  
        //动态构造查询条件  
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await wmsInOutStockOrderRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsInOutStockOrder>, List<WmsInOutStockOrderDto>>(list);
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "出入库单据列表" : result.Count == 1 ? result[0]?.OrderNo : "WmsInOutStockOrder模版";
        return (sheets, fileName);
    }
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await wmsInOutStockOrderRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsInOutStockOrder>, List<WmsInOutStockOrderDto>>(list);
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "出入库单据列表" : result.Count == 1 ? result[0]?.OrderNo : "WmsInOutStockOrder模版";
        return (sheets, fileName);
    }
    /// <summary> 
    /// 校验出入库单据,当新建或更新时 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    protected Task CheckCreateOrUpdateDtoAsync(WmsInOutStockOrderCreateOrUpdateDtoBase input)
    {
        Check.NotNull(input, nameof(input));
                Check.NotNullOrWhiteSpace(input.OrderNo, "单据编号", 50);
        Check.NotNull(input.OrderStatus, "单据状态");
        Check.NotNullOrWhiteSpace(input.MaterialNo, "物料件号", 50);
    protected Task CheckCreateOrUpdateDtoAsync(WmsInOutStockOrderCreateOrUpdateDtoBase input)
    {
        Check.NotNull(input, nameof(input));
        Check.NotNullOrWhiteSpace(input.MaterialNo, "物料编号", 50);
        Check.NotNullOrWhiteSpace(input.MaterialBatch, "批次号", 50);
        Check.NotNull(input.OrderType, "单据类型");
        Check.NotNull(input.StockType, "操作类型(枚举值)");
        Check.NotNull(input.StockType, "操作类型");
        Check.NotNull(input.MaterialNumber, "单据数量");
        Check.NotNull(input.DistributeNumber, "下发数量");
        Check.NotNull(input.CompleteNumber, "完成数量");
        Check.NotNull(input.Priority, "优先级");
        return Task.CompletedTask;
    }
}
        return Task.CompletedTask;
    }
}