zs
2025-05-07 5d9dd2f0366be4b4f175cc9dcf1e3f6ab177acf7
修改引用
已修改15个文件
1402 ■■■■ 文件已修改
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainers/WmsContainerDto.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockRecord/WmsInOutStockRecordDto.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockDto.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialDto.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/WmsPlaceDto.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsTask/WmsTaskDto.cs 338 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsEnumAppService.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsAreaAppService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsContainerAppService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsInOutStockRecordAppService.cs 394 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialInfoAppService.cs 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsPlaceAppService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsStoreAppService.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs 640 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsContainers/WmsContainerDto.cs
@@ -1,4 +1,5 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CmsQueryExtensions;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsInOutStockRecord/WmsInOutStockRecordDto.cs
@@ -1,4 +1,5 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CmsQueryExtensions;
using Volo.Abp.Application.Dtos; 
using Volo.Abp.Data; 
using Volo.Abp.Domain.Entities; 
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterialStocks/WmsMaterialStockDto.cs
@@ -1,4 +1,5 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CmsQueryExtensions;
using System.Runtime.CompilerServices;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsMaterials/WmsMaterialDto.cs
@@ -1,4 +1,5 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CmsQueryExtensions;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsPlaces/WmsPlaceDto.cs
@@ -1,4 +1,5 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CmsQueryExtensions;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Dtos/WmsTask/WmsTaskDto.cs
@@ -1,205 +1,205 @@
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsTask;
using CMS.Plugin.HIAWms.Domain.Shared.Enums;
using CmsQueryExtensions;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.Domain.Entities;
namespace CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsTask;
/// <summary> 
/// Wms任务管理表数据参数对象 
/// </summary> 
public  class WmsTaskDto:  ExtensibleEntityDto<Guid>, IHasConcurrencyStamp
{
            /// <summary>
        /// 巷道
        /// </summary>
        public int? Aisle { get; set; }
public class WmsTaskDto : ExtensibleEntityDto<Guid>, IHasConcurrencyStamp
{
    /// <summary>
    /// 巷道
    /// </summary>
    public int? Aisle { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? ConcurrencyStamp { get; set; }
    /// <summary>
    ///
    /// </summary>
    public string? ConcurrencyStamp { get; set; }
        /// <summary>
        /// 托盘编号
        /// </summary>
        public string? ContainerNo { get; set; }
    /// <summary>
    /// 托盘编号
    /// </summary>
    public string? ContainerNo { get; set; }
        /// <summary>
        ///
        /// </summary>
        public DateTime CreationTime { get; set; }
    /// <summary>
    ///
    /// </summary>
    public DateTime CreationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? CreatorId { get; set; }
    /// <summary>
    ///
    /// </summary>
    public string? CreatorId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? DeleterId { get; set; }
    /// <summary>
    ///
    /// </summary>
    public string? DeleterId { get; set; }
        /// <summary>
        ///
        /// </summary>
        public DateTime? DeletionTime { get; set; }
    /// <summary>
    ///
    /// </summary>
    public DateTime? DeletionTime { get; set; }
        /// <summary>
        /// 堆垛机ID
        /// </summary>
        public int? DodeviceId { get; set; }
    /// <summary>
    /// 堆垛机ID
    /// </summary>
    public int? DodeviceId { get; set; }
        /// <summary>
        /// 设备类型
        /// </summary>
        public int Dodevicetype { get; set; }
    /// <summary>
    /// 设备类型
    /// </summary>
    public int Dodevicetype { get; set; }
        /// <summary>
        ///
        /// </summary>
        public ExtraPropertyDictionary? ExtraProperties { get; set; }
    /// <summary>
    ///
    /// </summary>
    public ExtraPropertyDictionary? ExtraProperties { get; set; }
        /// <summary>
        ///
        /// </summary>
        public bool IsDeleted { get; set; }
    /// <summary>
    ///
    /// </summary>
    public bool IsDeleted { get; set; }
        /// <summary>
        /// 是否禁用
        /// </summary>
        public bool? IsDisabled { get; set; }
    /// <summary>
    /// 是否禁用
    /// </summary>
    public bool? IsDisabled { get; set; }
        /// <summary>
        /// 下个任务是否生成成功
        /// </summary>
        public int? IsNextTask { get; set; }
    /// <summary>
    /// 下个任务是否生成成功
    /// </summary>
    public int? IsNextTask { get; set; }
        /// <summary>
        /// WCS是否可以读取
        /// </summary>
        public bool IsRead { get; set; }
    /// <summary>
    /// WCS是否可以读取
    /// </summary>
    public bool IsRead { get; set; }
        /// <summary>
        ///
        /// </summary>
        public DateTime? LastModificationTime { get; set; }
    /// <summary>
    ///
    /// </summary>
    public DateTime? LastModificationTime { get; set; }
        /// <summary>
        ///
        /// </summary>
        public string? LastModifierId { get; set; }
    /// <summary>
    ///
    /// </summary>
    public string? LastModifierId { get; set; }
        /// <summary>
        /// 可变变量1
        /// </summary>
        public string? MutableParam1 { get; set; }
    /// <summary>
    /// 可变变量1
    /// </summary>
    public string? MutableParam1 { get; set; }
        /// <summary>
        /// 可变变量2
        /// </summary>
        public string? MutableParam2 { get; set; }
    /// <summary>
    /// 可变变量2
    /// </summary>
    public string? MutableParam2 { get; set; }
        /// <summary>
        /// 可变变量3
        /// </summary>
        public string? MutableParam3 { get; set; }
    /// <summary>
    /// 可变变量3
    /// </summary>
    public string? MutableParam3 { get; set; }
        /// <summary>
        /// 子任务类型
        /// </summary>
        public SonTaskTypeEnum? SonTaskType { get; set; }
    /// <summary>
    /// 子任务类型
    /// </summary>
    public SonTaskTypeEnum? SonTaskType { get; set; }
        /// <summary>
        /// 子任务类型
        /// </summary>
        public string? SonTaskTypeDesc
        {
            get
            {
                return GetEnumDescriptionUtil.GetEnumDescription(SonTaskType);
            }
        }
        /// <summary>
        /// 排序
        /// </summary>
        public int Sort { get; set; }
    /// <summary>
    /// 子任务类型
    /// </summary>
    public string? SonTaskTypeDesc
    {
        get
        {
            return GetEnumDescriptionUtil.GetEnumDescription(SonTaskType);
        }
    }
    /// <summary>
    /// 排序
    /// </summary>
    public int Sort { get; set; }
        /// <summary>
        /// 来源单据号
        /// </summary>
        public string? SourceOrderNo { get; set; }
    /// <summary>
    /// 来源单据号
    /// </summary>
    public string? SourceOrderNo { get; set; }
        /// <summary>
        /// 起始库位
        /// </summary>
        public string? SourcePlace { get; set; }
    /// <summary>
    /// 起始库位
    /// </summary>
    public string? SourcePlace { get; set; }
        /// <summary>
        /// 设备任务状态
        /// </summary>
        public int TaskDodeviceStatus { get; set; }
    /// <summary>
    /// 设备任务状态
    /// </summary>
    public int TaskDodeviceStatus { get; set; }
        /// <summary>
        /// 任务等级
        /// </summary>
        public int TaskLevel { get; set; }
    /// <summary>
    /// 任务等级
    /// </summary>
    public int TaskLevel { get; set; }
        /// <summary>
        /// 任务号
        /// </summary>
        public string TaskNo { get; set; }
    /// <summary>
    /// 任务号
    /// </summary>
    public string TaskNo { get; set; }
        /// <summary>
        /// 任务状态
        /// </summary>
        public WmsTaskStatus TaskStatus { get; set; }
    /// <summary>
    /// 任务状态
    /// </summary>
    public WmsTaskStatus TaskStatus { get; set; }
        /// <summary>
        /// 任务状态
        /// </summary>
        public string TaskStatusDesc
        {
            get
            {
                return GetEnumDescriptionUtil.GetEnumDescription(TaskStatus);
            }
        }
        /// <summary>
        /// 任务类型
        /// </summary>
        public TaskTypeEnum TaskType { get; set; }
    /// <summary>
    /// 任务状态
    /// </summary>
    public string TaskStatusDesc
    {
        get
        {
            return GetEnumDescriptionUtil.GetEnumDescription(TaskStatus);
        }
    }
    /// <summary>
    /// 任务类型
    /// </summary>
    public TaskTypeEnum TaskType { get; set; }
        /// <summary>
        /// 任务类型
        /// </summary>
        public string TaskTypeDesc
        {
            get
            {
                return GetEnumDescriptionUtil.GetEnumDescription(TaskType);
            }
        }
        /// <summary>
        /// 目标库位
        /// </summary>
        public string? ToPlace { get; set; }
    /// <summary>
    /// 任务类型
    /// </summary>
    public string TaskTypeDesc
    {
        get
        {
            return GetEnumDescriptionUtil.GetEnumDescription(TaskType);
        }
    }
    /// <summary>
    /// 目标库位
    /// </summary>
    public string? ToPlace { get; set; }
    /// <summary> 
    /// Gets the export data. 
    /// </summary> 
    /// <returns></returns> 
    public Dictionary<string, object> GetExportData()
    {
        var exportData = new Dictionary<string, object>();
        foreach (var property in this.GetType().GetProperties())
        {
            exportData.Add(property.Name, property.GetValue(this));
        }
        return exportData;
    }
}
    public Dictionary<string, object> GetExportData()
    {
        var exportData = new Dictionary<string, object>();
        foreach (var property in this.GetType().GetProperties())
        {
            exportData.Add(property.Name, property.GetValue(this));
        }
        return exportData;
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application.Contracts/Services/IWmsEnumAppService.cs
@@ -1,12 +1,6 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsEnumDto;
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsStores;
using CMS.Plugin.HIAWms.Domain.Shared.Util;
using CmsQueryExtensions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsAreas.WmsAreaCreateOrUpdateDtoBase;
using static CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlaces.WmsPlaceCreateOrUpdateDtoBase;
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsAreaAppService.cs
@@ -7,8 +7,8 @@
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
using CMS.Plugin.HIAWms.Domain.Shared.Util;
using CMS.Plugin.HIAWms.Domain.WmsStores;
using CmsQueryExtensions;
namespace CMS.Plugin.HIAWms.Application.Implements;
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsContainerAppService.cs
@@ -1,13 +1,13 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsContainers;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.WmsContainers;
using CMS.Plugin.HIAWms.Domain.Shared;
using CMS.Plugin.HIAWms.Domain.Shared.WmsContainers;
using CMS.Plugin.HIAWms.Domain.WmsContainers;
using CmsQueryExtensions;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
using CMS.Plugin.HIAWms.Domain.Shared.Util;
namespace CMS.Plugin.HIAWms.Application.Implements;
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsInOutStockRecordAppService.cs
@@ -1,123 +1,123 @@
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.Application.Contracts.Dtos.WmsInOutStockRecord;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.Shared;
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;
using CmsQueryExtensions;
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;
/// <summary> 
/// 出入库记录表应用服务 
/// </summary> 
public class WmsInOutStockRecordAppService : CMSPluginAppService, IWmsInOutStockRecordAppService
{
    private readonly IWmsInOutStockRecordRepository _wmsInOutStockRecordRepository;
public class WmsInOutStockRecordAppService : CMSPluginAppService, IWmsInOutStockRecordAppService
{
    private readonly IWmsInOutStockRecordRepository _wmsInOutStockRecordRepository;
    /// <summary> 
    /// Initializes a new instance of the <see cref="WmsInOutStockRecordAppService"/> class. 
    /// </summary> 
    /// <param name="WmsInOutStockRecordRepository">The task job repository.</param> 
    public WmsInOutStockRecordAppService(IWmsInOutStockRecordRepository wmsInOutStockRecordRepository)
    {
        _wmsInOutStockRecordRepository = wmsInOutStockRecordRepository;
    }
    public WmsInOutStockRecordAppService(IWmsInOutStockRecordRepository wmsInOutStockRecordRepository)
    {
        _wmsInOutStockRecordRepository = wmsInOutStockRecordRepository;
    }
    /// <summary> 
    /// 获取指定出入库记录表 
    /// </summary> 
    /// <param name="id"></param> 
    /// <returns></returns> 
    public virtual async Task<WmsInOutStockRecordDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<WmsInOutStockRecord, WmsInOutStockRecordDto>(await _wmsInOutStockRecordRepository.GetAsync(id));
    }
    public virtual async Task<WmsInOutStockRecordDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<WmsInOutStockRecord, WmsInOutStockRecordDto>(await _wmsInOutStockRecordRepository.GetAsync(id));
    }
    /// <summary> 
    /// 分页获取出入库记录表 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    public virtual async Task<PagedResultDto<WmsInOutStockRecordDto>> GetListAsync(GetWmsInOutStockRecordInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsInOutStockRecord.Sort);
        }
    public virtual async Task<PagedResultDto<WmsInOutStockRecordDto>> 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<WmsInOutStockRecordDto>(count, ObjectMapper.Map<List<WmsInOutStockRecord>, List<WmsInOutStockRecordDto>>(list));
    }
        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<WmsInOutStockRecordDto>(count, ObjectMapper.Map<List<WmsInOutStockRecord>, List<WmsInOutStockRecordDto>>(list));
    }
    /// <summary>  
    /// 动态构造查询条件  
    /// </summary>  
    /// <param name="input">输入参数</param>  
    /// <returns></returns>  
    private FunReturnResultModel<Expression<Func<WmsInOutStockRecord, bool>>> DynamicGetQueryParams(GetWmsInOutStockRecordInput input)
    {
    private FunReturnResultModel<Expression<Func<WmsInOutStockRecord, bool>>> DynamicGetQueryParams(GetWmsInOutStockRecordInput input)
    {
        //动态构造查询条件  
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsInOutStockRecord, GetWmsInOutStockRecordInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsInOutStockRecord, GetWmsInOutStockRecordInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        //也可再次自定义构建查询条件  
        Expression<Func<WmsInOutStockRecord, bool>> extendExpression = a => a.IsDeleted == false;
        Expression<Func<WmsInOutStockRecord, bool>> extendExpression = a => a.IsDeleted == false;
        // 使用 System.Linq.PredicateBuilder 的 And 
        var pres = (System.Linq.Expressions.Expression<Func<WmsInOutStockRecord, bool>>)(whereConditions.data);
        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
        return whereConditions;
    }
        var pres = (System.Linq.Expressions.Expression<Func<WmsInOutStockRecord, 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<WmsInOutStockRecordDto> CreateAsync(WmsInOutStockRecordCreateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var maxSort = await _wmsInOutStockRecordRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var insertObj = ObjectMapper.Map<WmsInOutStockRecordCreateDto, WmsInOutStockRecord>(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<WmsInOutStockRecord, WmsInOutStockRecordDto>(insertObj);
    }
    public virtual async Task<WmsInOutStockRecordDto> CreateAsync(WmsInOutStockRecordCreateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var maxSort = await _wmsInOutStockRecordRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var insertObj = ObjectMapper.Map<WmsInOutStockRecordCreateDto, WmsInOutStockRecord>(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<WmsInOutStockRecord, WmsInOutStockRecordDto>(insertObj);
    }
    /// <summary> 
    /// 更新出入库记录表 
    /// </summary> 
@@ -125,17 +125,17 @@
    /// <param name="input"></param> 
    /// <returns></returns> 
    /// <exception cref="UserFriendlyException"></exception> 
    public virtual async Task<WmsInOutStockRecordDto> 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;
    public virtual async Task<WmsInOutStockRecordDto> 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;
@@ -147,20 +147,20 @@
        updateObj.TaskNo = input.TaskNo;
        updateObj.SourcePlace = input.SourcePlace;
        updateObj.ToPlace = input.ToPlace;
        await _wmsInOutStockRecordRepository.UpdateAsync(updateObj);
        return ObjectMapper.Map<WmsInOutStockRecord, WmsInOutStockRecordDto>(updateObj);
    }
        await _wmsInOutStockRecordRepository.UpdateAsync(updateObj);
        return ObjectMapper.Map<WmsInOutStockRecord, WmsInOutStockRecordDto>(updateObj);
    }
    /// <summary> 
    /// 克隆出入库记录表 
    /// </summary> 
    /// <param name="ids"></param> 
    /// <returns></returns> 
    public async Task<List<WmsInOutStockRecordDto>> CloneAsync(IEnumerable<Guid> ids)
    {
    public async Task<List<WmsInOutStockRecordDto>> CloneAsync(IEnumerable<Guid> ids)
    {
        //var wmsInOutStockRecords = new List<WmsInOutStockRecord>(); 
        //if (ids != null) 
        //{ 
@@ -180,140 +180,140 @@
        //                    name += WmsInOutStockRecordConsts.CloneTag; 
        //                    continue; 
        //                } 
        //                notExist = true; 
        //            } 
        //            //WmsInOutStockRecord = await wmsInOutStockRecordRepository.InsertAsync(WmsInOutStockRecord.Clone(GuidGenerator.Create(), name, sort++)); 
        //            wmsInOutStockRecords.Add(WmsInOutStockRecord); 
        //        } 
        //    } 
        //} 
        //return ObjectMapper.Map<List<WmsInOutStockRecord>, List<WmsInOutStockRecordDto>>(wmsInOutStockRecords); 
        return new List<WmsInOutStockRecordDto>();
    }
        return new List<WmsInOutStockRecordDto>();
    }
    /// <summary> 
    /// 删除单个出入库记录表 
    /// </summary> 
    /// <param name="id"></param> 
    /// <returns></returns> 
    public virtual Task DeleteAsync(Guid id)
    {
        return _wmsInOutStockRecordRepository.DeleteAsync(id);
    }
    public virtual Task DeleteAsync(Guid id)
    {
        return _wmsInOutStockRecordRepository.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 _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 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);
    }
    /// <summary> 
    /// 导入出入库记录表 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    /// <exception cref="UserFriendlyException"></exception> 
    public async Task ImportAsync(WmsInOutStockRecordsImportModel input)
    {
    }
    public async Task ImportAsync(WmsInOutStockRecordsImportModel input)
    {
    }
    /// <summary> 
    /// 导出出入库记录表 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsInOutStockRecordInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsInOutStockRecord.Sort);
        }
    public async Task<(Dictionary<string, object> 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<WmsInOutStockRecord>, List<WmsInOutStockRecordDto>>(list);
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "WmsInOutStockRecord列表" : result.Count == 1 ? result[0]?.MaterialName : "WmsInOutStockRecord模版";
        return (sheets, fileName);
    }
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await _wmsInOutStockRecordRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsInOutStockRecord>, List<WmsInOutStockRecordDto>>(list);
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "WmsInOutStockRecord列表" : result.Count == 1 ? result[0]?.MaterialName : "WmsInOutStockRecord模版";
        return (sheets, fileName);
    }
    /// <summary> 
    /// 校验出入库记录表,当新建或更新时 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    protected Task CheckCreateOrUpdateDtoAsync(WmsInOutStockRecordCreateOrUpdateDtoBase input)
    {
        Check.NotNull(input, nameof(input));
                Check.NotNullOrWhiteSpace(input.OrderNo, "单据编号", 50);
    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;
    }
}
        return Task.CompletedTask;
    }
}
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialAppService.cs
@@ -1,9 +1,9 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsMaterials;
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.Shared.WmsMaterials;
using CMS.Plugin.HIAWms.Domain.WmsMaterials;
using CmsQueryExtensions;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsMaterialInfoAppService.cs
@@ -8,6 +8,7 @@
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
using Volo.Abp.ObjectMapping;
using CmsQueryExtensions;
namespace CMS.Plugin.HIAWms.Application.Implements;
@@ -328,7 +329,7 @@
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = result.Select(x => x.GetExportData()).ToList(),
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "WmsMaterialInfo列表" : result.Count == 1 ? result.First()?.MaterialNo : "WmsMaterialInfo模版";
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsPlaceAppService.cs
@@ -1,13 +1,13 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsPlaces;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.WmsPlaces;
using CMS.Plugin.HIAWms.Domain.Shared;
using CMS.Plugin.HIAWms.Domain.Shared.WmsPlaces;
using CMS.Plugin.HIAWms.Domain.WmsPlaces;
using CmsQueryExtensions;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
using CMS.Plugin.HIAWms.Domain.Shared.Util;
namespace CMS.Plugin.HIAWms.Application.Implements;
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsStoreAppService.cs
@@ -7,7 +7,7 @@
using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
using CMS.Plugin.HIAWms.Domain.Shared.Util;
using CmsQueryExtensions;
namespace CMS.Plugin.HIAWms.Application.Implements;
HIAWms/server/src/CMS.Plugin.HIAWms.Application/Implements/WmsTaskAppService.cs
@@ -1,127 +1,127 @@
using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsTask;
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.WmsTask;
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.WmsTask;
using CMS.Plugin.HIAWms.Application.Contracts.Services;
using CMS.Plugin.HIAWms.Domain.Shared;
using CMS.Plugin.HIAWms.Domain.WmsTask;
using CmsQueryExtensions;
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;
/// <summary> 
/// Wms任务管理表应用服务 
/// </summary> 
public class WmsTaskAppService : CMSPluginAppService, IWmsTaskAppService
{
    private readonly IWmsTaskRepository wmsTaskRepository;
public class WmsTaskAppService : CMSPluginAppService, IWmsTaskAppService
{
    private readonly IWmsTaskRepository wmsTaskRepository;
    /// <summary> 
    /// Initializes a new instance of the <see cref="WmsTaskAppService"/> class. 
    /// </summary> 
    /// <param name="WmsTaskRepository">The task job repository.</param> 
    public WmsTaskAppService(IWmsTaskRepository _WmsTaskRepository)
    {
        wmsTaskRepository = _WmsTaskRepository;
    }
    public WmsTaskAppService(IWmsTaskRepository _WmsTaskRepository)
    {
        wmsTaskRepository = _WmsTaskRepository;
    }
    /// <summary> 
    /// 获取指定Wms任务管理表 
    /// </summary> 
    /// <param name="id"></param> 
    /// <returns></returns> 
    public virtual async Task<WmsTaskDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<WmsTask, WmsTaskDto>(await wmsTaskRepository.GetAsync(id));
    }
    public virtual async Task<WmsTaskDto> GetAsync(Guid id)
    {
        return ObjectMapper.Map<WmsTask, WmsTaskDto>(await wmsTaskRepository.GetAsync(id));
    }
    /// <summary> 
    /// 分页获取Wms任务管理表 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    public virtual async Task<PagedResultDto<WmsTaskDto>> GetListAsync(GetWmsTaskInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsTask.Sort);
        }
    public virtual async Task<PagedResultDto<WmsTaskDto>> GetListAsync(GetWmsTaskInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsTask.Sort);
        }
        #region 动态构造查询条件  
        //动态构造查询条件  
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var count = await wmsTaskRepository.GetCountAsync(whereConditions);
        var list = await wmsTaskRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<WmsTaskDto>(count, ObjectMapper.Map<List<WmsTask>, List<WmsTaskDto>>(list));
    }
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var count = await wmsTaskRepository.GetCountAsync(whereConditions);
        var list = await wmsTaskRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount);
        return new PagedResultDto<WmsTaskDto>(count, ObjectMapper.Map<List<WmsTask>, List<WmsTaskDto>>(list));
    }
    /// <summary>  
    /// 动态构造查询条件  
    /// </summary>  
    /// <param name="input">输入参数</param>  
    /// <returns></returns>  
    private FunReturnResultModel<Expression<Func<WmsTask, bool>>> DynamicGetQueryParams(GetWmsTaskInput input)
    {
    private FunReturnResultModel<Expression<Func<WmsTask, bool>>> DynamicGetQueryParams(GetWmsTaskInput input)
    {
        //动态构造查询条件  
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsTask, GetWmsTaskInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        var whereConditions = WhereConditionsExtensions.GetWhereConditions<WmsTask, GetWmsTaskInput>(input);
        if (!whereConditions.IsSuccess)
        {
            throw new Exception("动态构造查询条件失败:" + whereConditions.ErrMsg);
        }
        //也可再次自定义构建查询条件  
        Expression<Func<WmsTask, bool>> extendExpression = a => a.IsDeleted == false;
        Expression<Func<WmsTask, bool>> extendExpression = a => a.IsDeleted == false;
        // 使用 System.Linq.PredicateBuilder 的 And 
        var pres = (System.Linq.Expressions.Expression<Func<WmsTask, bool>>)(whereConditions.data);
        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
        return whereConditions;
    }
        var pres = (System.Linq.Expressions.Expression<Func<WmsTask, bool>>)(whereConditions.data);
        whereConditions.data = System.Linq.PredicateBuilder.And(pres, extendExpression);
        return whereConditions;
    }
    /// <summary> 
    /// 新建Wms任务管理表 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    /// <exception cref="UserFriendlyException"></exception> 
    public virtual async Task<WmsTaskDto> CreateAsync(WmsTaskCreateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var exist = await wmsTaskRepository.NameExistAsync(input.TaskNo);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.TaskNo]);
        }
        var maxSort = await wmsTaskRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var insertObj = ObjectMapper.Map<WmsTaskCreateDto, WmsTask>(input);
        insertObj.Sort = sort;
        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None);
        await wmsTaskRepository.InsertAsync(insertObj);
        if (input.Sort.HasValue && insertObj.Sort != maxSort)
        {
            await AdjustSortAsync(insertObj.Id, insertObj.Sort);
        }
        return ObjectMapper.Map<WmsTask, WmsTaskDto>(insertObj);
    }
    public virtual async Task<WmsTaskDto> CreateAsync(WmsTaskCreateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var exist = await wmsTaskRepository.NameExistAsync(input.TaskNo);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.TaskNo]);
        }
        var maxSort = await wmsTaskRepository.GetMaxSortAsync();
        var sort = input.Sort ?? maxSort;
        var insertObj = ObjectMapper.Map<WmsTaskCreateDto, WmsTask>(input);
        insertObj.Sort = sort;
        input.MapExtraPropertiesTo(insertObj, MappingPropertyDefinitionChecks.None);
        await wmsTaskRepository.InsertAsync(insertObj);
        if (input.Sort.HasValue && insertObj.Sort != maxSort)
        {
            await AdjustSortAsync(insertObj.Id, insertObj.Sort);
        }
        return ObjectMapper.Map<WmsTask, WmsTaskDto>(insertObj);
    }
    /// <summary> 
    /// 更新Wms任务管理表 
    /// </summary> 
@@ -129,21 +129,21 @@
    /// <param name="input"></param> 
    /// <returns></returns> 
    /// <exception cref="UserFriendlyException"></exception> 
    public virtual async Task<WmsTaskDto> UpdateAsync(Guid id, WmsTaskUpdateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var updateObj = await wmsTaskRepository.GetAsync(id);
        var exist = await wmsTaskRepository.NameExistAsync(input.TaskNo, updateObj.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.TaskNo]);
        }
        updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
        input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None);
                updateObj.Aisle = input.Aisle;
    public virtual async Task<WmsTaskDto> UpdateAsync(Guid id, WmsTaskUpdateDto input)
    {
        await CheckCreateOrUpdateDtoAsync(input);
        var updateObj = await wmsTaskRepository.GetAsync(id);
        var exist = await wmsTaskRepository.NameExistAsync(input.TaskNo, updateObj.Id);
        if (exist)
        {
            throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.TaskNo]);
        }
        updateObj.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
        input.MapExtraPropertiesTo(updateObj, MappingPropertyDefinitionChecks.None);
        updateObj.Aisle = input.Aisle;
        updateObj.ContainerNo = input.ContainerNo;
        updateObj.DodeviceId = input.DodeviceId;
        updateObj.Dodevicetype = input.Dodevicetype;
@@ -162,20 +162,20 @@
        updateObj.TaskStatus = input.TaskStatus;
        updateObj.TaskType = input.TaskType;
        updateObj.ToPlace = input.ToPlace;
        await wmsTaskRepository.UpdateAsync(updateObj);
        return ObjectMapper.Map<WmsTask, WmsTaskDto>(updateObj);
    }
        await wmsTaskRepository.UpdateAsync(updateObj);
        return ObjectMapper.Map<WmsTask, WmsTaskDto>(updateObj);
    }
    /// <summary> 
    /// 克隆Wms任务管理表 
    /// </summary> 
    /// <param name="ids"></param> 
    /// <returns></returns> 
    public async Task<List<WmsTaskDto>> CloneAsync(IEnumerable<Guid> ids)
    {
    public async Task<List<WmsTaskDto>> CloneAsync(IEnumerable<Guid> ids)
    {
        //var wmsTasks = new List<WmsTask>(); 
        //if (ids != null) 
        //{ 
@@ -195,262 +195,262 @@
        //                    name += WmsTaskConsts.CloneTag; 
        //                    continue; 
        //                } 
        //                notExist = true; 
        //            } 
        //            //WmsTask = await wmsTaskRepository.InsertAsync(WmsTask.Clone(GuidGenerator.Create(), name, sort++)); 
        //            wmsTasks.Add(WmsTask); 
        //        } 
        //    } 
        //} 
        //return ObjectMapper.Map<List<WmsTask>, List<WmsTaskDto>>(wmsTasks); 
        return new List<WmsTaskDto>();
    }
        return new List<WmsTaskDto>();
    }
    /// <summary> 
    /// 删除单个Wms任务管理表 
    /// </summary> 
    /// <param name="id"></param> 
    /// <returns></returns> 
    public virtual Task DeleteAsync(Guid id)
    {
        return wmsTaskRepository.DeleteAsync(id);
    }
    public virtual Task DeleteAsync(Guid id)
    {
        return wmsTaskRepository.DeleteAsync(id);
    }
    /// <summary> 
    /// 删除多个Wms任务管理表 
    /// </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> 
    /// 调整排序Wms任务管理表 
    /// </summary> 
    /// <param name="id"></param> 
    /// <param name="sort"></param> 
    /// <returns></returns> 
    public virtual async Task AdjustSortAsync(Guid id, int sort)
    {
        var list = await wmsTaskRepository.GetListAsync(null, nameof(WmsTask.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 wmsTaskRepository.UpdateManyAsync(list);
    }
    public virtual async Task AdjustSortAsync(Guid id, int sort)
    {
        var list = await wmsTaskRepository.GetListAsync(null, nameof(WmsTask.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 wmsTaskRepository.UpdateManyAsync(list);
    }
    /// <summary> 
    /// 导入Wms任务管理表 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    /// <exception cref="UserFriendlyException"></exception> 
    public async Task ImportAsync(WmsTasksImportModel input)
    {
        Check.NotNull(input, nameof(input));
        var wmsTaskCreateDtos = new List<(int RowIndex, WmsTaskCreateDto Item)>();
        var wmsTaskUpdateDtos = new List<(int RowIndex, Guid Id, WmsTaskUpdateDto Item)>();
        var importItems = input.WmsTasks;
        if (importItems != null && importItems.Any())
        {
    public async Task ImportAsync(WmsTasksImportModel input)
    {
        Check.NotNull(input, nameof(input));
        var wmsTaskCreateDtos = new List<(int RowIndex, WmsTaskCreateDto Item)>();
        var wmsTaskUpdateDtos = new List<(int RowIndex, Guid Id, WmsTaskUpdateDto Item)>();
        var importItems = input.WmsTasks;
        if (importItems != null && importItems.Any())
        {
            #region 导入校验 
            // 判断名称是否重复,并输出第几行重复 
            var duplicateWmsTasks = importItems.GroupBy(x => x.TaskNo).Where(x => x.Count() > 1).ToList();
            if (duplicateWmsTasks?.Any() == true)
            {
                var duplicateWmsTaskMsgs = duplicateWmsTasks.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} 行:{x.Key}  名称重复");
                var errorMsg = $"导入失败!配置, {string.Join(",", duplicateWmsTaskMsgs)},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
            #endregion
            foreach (var impItem in importItems)
            {
                if (impItem.TaskNo.IsNullOrWhiteSpace())
                {
                    continue;
                }
                if (impItem.TaskNo.IsNullOrWhiteSpace())
                {
                    var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:WmsTask名称不能为空";
                    throw new UserFriendlyException(errorMsg);
                }
                var oldWmsTask = await wmsTaskRepository.FindByNameAsync(impItem.TaskNo);
                if (oldWmsTask != null)
                {
                    var wmsTaskUpdateDto = new WmsTaskUpdateDto
                    {
            var duplicateWmsTasks = importItems.GroupBy(x => x.TaskNo).Where(x => x.Count() > 1).ToList();
            if (duplicateWmsTasks?.Any() == true)
            {
                var duplicateWmsTaskMsgs = duplicateWmsTasks.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} 行:{x.Key}  名称重复");
                var errorMsg = $"导入失败!配置, {string.Join(",", duplicateWmsTaskMsgs)},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
            #endregion
            foreach (var impItem in importItems)
            {
                if (impItem.TaskNo.IsNullOrWhiteSpace())
                {
                    continue;
                }
                if (impItem.TaskNo.IsNullOrWhiteSpace())
                {
                    var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:WmsTask名称不能为空";
                    throw new UserFriendlyException(errorMsg);
                }
                var oldWmsTask = await wmsTaskRepository.FindByNameAsync(impItem.TaskNo);
                if (oldWmsTask != null)
                {
                    var wmsTaskUpdateDto = new WmsTaskUpdateDto
                    {
                        Aisle = impItem.Aisle,
ContainerNo = impItem.ContainerNo,
DodeviceId = impItem.DodeviceId,
Dodevicetype = impItem.Dodevicetype,
IsDisabled = impItem.IsDisabled,
IsNextTask = impItem.IsNextTask,
IsRead = impItem.IsRead,
MutableParam1 = impItem.MutableParam1,
MutableParam2 = impItem.MutableParam2,
MutableParam3 = impItem.MutableParam3,
SonTaskType = impItem.SonTaskType,
SourceOrderNo = impItem.SourceOrderNo,
SourcePlace = impItem.SourcePlace,
TaskDodeviceStatus = impItem.TaskDodeviceStatus,
TaskLevel = impItem.TaskLevel,
TaskNo = impItem.TaskNo,
TaskStatus = impItem.TaskStatus,
TaskType = impItem.TaskType,
ToPlace = impItem.ToPlace,
                    };
                    wmsTaskUpdateDtos.Add((impItem.RowIndex, oldWmsTask.Id, wmsTaskUpdateDto));
                }
                else
                {
                    var wmsTaskCreateDto = new WmsTaskCreateDto
                    {
                        ContainerNo = impItem.ContainerNo,
                        DodeviceId = impItem.DodeviceId,
                        Dodevicetype = impItem.Dodevicetype,
                        IsDisabled = impItem.IsDisabled,
                        IsNextTask = impItem.IsNextTask,
                        IsRead = impItem.IsRead,
                        MutableParam1 = impItem.MutableParam1,
                        MutableParam2 = impItem.MutableParam2,
                        MutableParam3 = impItem.MutableParam3,
                        SonTaskType = impItem.SonTaskType,
                        SourceOrderNo = impItem.SourceOrderNo,
                        SourcePlace = impItem.SourcePlace,
                        TaskDodeviceStatus = impItem.TaskDodeviceStatus,
                        TaskLevel = impItem.TaskLevel,
                        TaskNo = impItem.TaskNo,
                        TaskStatus = impItem.TaskStatus,
                        TaskType = impItem.TaskType,
                        ToPlace = impItem.ToPlace,
                    };
                    wmsTaskUpdateDtos.Add((impItem.RowIndex, oldWmsTask.Id, wmsTaskUpdateDto));
                }
                else
                {
                    var wmsTaskCreateDto = new WmsTaskCreateDto
                    {
                        Aisle = impItem.Aisle,
ContainerNo = impItem.ContainerNo,
DodeviceId = impItem.DodeviceId,
Dodevicetype = impItem.Dodevicetype,
IsDisabled = impItem.IsDisabled,
IsNextTask = impItem.IsNextTask,
IsRead = impItem.IsRead,
MutableParam1 = impItem.MutableParam1,
MutableParam2 = impItem.MutableParam2,
MutableParam3 = impItem.MutableParam3,
SonTaskType = impItem.SonTaskType,
SourceOrderNo = impItem.SourceOrderNo,
SourcePlace = impItem.SourcePlace,
TaskDodeviceStatus = impItem.TaskDodeviceStatus,
TaskLevel = impItem.TaskLevel,
TaskNo = impItem.TaskNo,
TaskStatus = impItem.TaskStatus,
TaskType = impItem.TaskType,
ToPlace = impItem.ToPlace,
                    };
                    wmsTaskCreateDtos.Add((impItem.RowIndex, wmsTaskCreateDto));
                }
            }
        }
                        ContainerNo = impItem.ContainerNo,
                        DodeviceId = impItem.DodeviceId,
                        Dodevicetype = impItem.Dodevicetype,
                        IsDisabled = impItem.IsDisabled,
                        IsNextTask = impItem.IsNextTask,
                        IsRead = impItem.IsRead,
                        MutableParam1 = impItem.MutableParam1,
                        MutableParam2 = impItem.MutableParam2,
                        MutableParam3 = impItem.MutableParam3,
                        SonTaskType = impItem.SonTaskType,
                        SourceOrderNo = impItem.SourceOrderNo,
                        SourcePlace = impItem.SourcePlace,
                        TaskDodeviceStatus = impItem.TaskDodeviceStatus,
                        TaskLevel = impItem.TaskLevel,
                        TaskNo = impItem.TaskNo,
                        TaskStatus = impItem.TaskStatus,
                        TaskType = impItem.TaskType,
                        ToPlace = impItem.ToPlace,
                    };
                    wmsTaskCreateDtos.Add((impItem.RowIndex, wmsTaskCreateDto));
                }
            }
        }
        // 新增 
        foreach (var wmsTaskDto in wmsTaskCreateDtos)
        {
            try
            {
                await CreateAsync(wmsTaskDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsTaskDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
        foreach (var wmsTaskDto in wmsTaskCreateDtos)
        {
            try
            {
                await CreateAsync(wmsTaskDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsTaskDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
        // 更新 
        foreach (var wmsTaskDto in wmsTaskUpdateDtos)
        {
            try
            {
                await UpdateAsync(wmsTaskDto.Id, wmsTaskDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsTaskDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
    }
        foreach (var wmsTaskDto in wmsTaskUpdateDtos)
        {
            try
            {
                await UpdateAsync(wmsTaskDto.Id, wmsTaskDto.Item);
            }
            catch (Exception e)
            {
                var errorMsg = $"导入失败!配置,第{wmsTaskDto.RowIndex}行:{e.Message},终止导入";
                throw new UserFriendlyException(errorMsg);
            }
        }
    }
    /// <summary> 
    /// 导出Wms任务管理表 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsTaskInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsTask.Sort);
        }
    public async Task<(Dictionary<string, object> Sheets, string FileName)> ExportAsync(GetWmsTaskInput input)
    {
        Check.NotNull(input, nameof(input));
        if (input.Sorting.IsNullOrWhiteSpace())
        {
            input.Sorting = nameof(WmsTask.Sort);
        }
        #region 动态构造查询条件  
        //动态构造查询条件  
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await wmsTaskRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsTask>, List<WmsTaskDto>>(list);
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "Wms任务管理表列表" : result.Count == 1 ? result[0]?.TaskNo : "WmsTask模版";
        return (sheets, fileName);
    }
        var whereConditions = DynamicGetQueryParams(input);
        #endregion
        var list = await wmsTaskRepository.GetListAsync(whereConditions, input.Sorting, input.MaxResultCount, input.SkipCount, includeDetails: true);
        var result = ObjectMapper.Map<List<WmsTask>, List<WmsTaskDto>>(list);
        var sheets = new Dictionary<string, object>
        {
            ["配置"] = ExportHelper.ConvertListToExportData(result),
        };
        var fileName = result.Count > 1 ? "Wms任务管理表列表" : result.Count == 1 ? result[0]?.TaskNo : "WmsTask模版";
        return (sheets, fileName);
    }
    /// <summary> 
    /// 校验Wms任务管理表,当新建或更新时 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    protected Task CheckCreateOrUpdateDtoAsync(WmsTaskCreateOrUpdateDtoBase input)
    {
        Check.NotNull(input, nameof(input));
                Check.NotNull(input.Dodevicetype, "设备类型");
    protected Task CheckCreateOrUpdateDtoAsync(WmsTaskCreateOrUpdateDtoBase input)
    {
        Check.NotNull(input, nameof(input));
        Check.NotNull(input.Dodevicetype, "设备类型");
        Check.NotNull(input.IsRead, "WCS是否可以读取");
        Check.NotNull(input.TaskDodeviceStatus, "设备任务状态");
        Check.NotNull(input.TaskLevel, "任务等级");
        Check.NotNullOrWhiteSpace(input.TaskNo, "任务号", 50);
        Check.NotNull(input.TaskStatus, "任务状态");
        Check.NotNull(input.TaskType, "任务类型");
        return Task.CompletedTask;
    }
}
        return Task.CompletedTask;
    }
}