| | |
| | | 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.WmsInOutStockRecord; |
| | | |
| | | 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.WmsInOutStockRecord; |
| | | |
| | | /// <summary> |
| | | /// 出入库记录数据参数对象 |
| | | /// </summary> |
| | | public class WmsInOutStockRecordDto: ExtensibleEntityDto<Guid>, IHasConcurrencyStamp |
| | | { |
| | | /// <summary> |
| | | /// 单据编号 |
| | | /// </summary> |
| | | public string OrderNo { get; set; } |
| | | public class WmsInOutStockRecordDto : ExtensibleEntityDto<Guid>, IHasConcurrencyStamp |
| | | { |
| | | /// <summary> |
| | | /// 单据编号 |
| | | /// </summary> |
| | | public string OrderNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 物料名称 |
| | | /// </summary> |
| | | public string? MaterialName { get; set; } |
| | | /// <summary> |
| | | /// 物料名称 |
| | | /// </summary> |
| | | public string? MaterialName { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 物料件号 |
| | | /// </summary> |
| | | public string MaterialNo { get; set; } |
| | | /// <summary> |
| | | /// 物料件号 |
| | | /// </summary> |
| | | public string MaterialNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 操作类型 |
| | | /// </summary> |
| | | public StockTypeEnum StockType { get; set; } |
| | | /// <summary> |
| | | /// 操作类型 |
| | | /// </summary> |
| | | public StockTypeEnum StockType { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 操作类型 |
| | | /// </summary> |
| | | public string StockTypeDesc |
| | | { |
| | | get |
| | | { |
| | | return GetEnumDescriptionUtil.GetEnumDescription(StockType); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 容器编号 |
| | | /// </summary> |
| | | public string? ContainerNo { get; set; } |
| | | /// <summary> |
| | | /// 操作类型 |
| | | /// </summary> |
| | | public string StockTypeDesc |
| | | { |
| | | get |
| | | { |
| | | return GetEnumDescriptionUtil.GetEnumDescription(StockType); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 容器编号 |
| | | /// </summary> |
| | | public string? ContainerNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 机型 |
| | | /// </summary> |
| | | public string? MaterialModel { get; set; } |
| | | /// <summary> |
| | | /// 机型 |
| | | /// </summary> |
| | | public string? MaterialModel { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 操作时间 |
| | | /// </summary> |
| | | public DateTime? OperateTime { get; set; } |
| | | /// <summary> |
| | | /// 操作时间 |
| | | /// </summary> |
| | | public DateTime? OperateTime { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 备注 |
| | | /// </summary> |
| | | public string? Remark { get; set; } |
| | | /// <summary> |
| | | /// 备注 |
| | | /// </summary> |
| | | public string? Remark { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 物料ID |
| | | /// </summary> |
| | | public string MaterialId { get; set; } |
| | | /// <summary> |
| | | /// 物料ID |
| | | /// </summary> |
| | | public string MaterialId { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 任务号 |
| | | /// </summary> |
| | | public string TaskNo { get; set; } |
| | | /// <summary> |
| | | /// 任务号 |
| | | /// </summary> |
| | | public string TaskNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 起始库位 |
| | | /// </summary> |
| | | public string? SourcePlace { get; set; } |
| | | /// <summary> |
| | | /// 起始库位 |
| | | /// </summary> |
| | | public string? SourcePlace { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 目标库位 |
| | | /// </summary> |
| | | public string? ToPlace { get; set; } |
| | | /// <summary> |
| | | /// 目标库位 |
| | | /// </summary> |
| | | public string? ToPlace { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 排序 |
| | | /// </summary> |
| | | public int Sort { get; set; } |
| | | /// <summary> |
| | | /// 排序 |
| | | /// </summary> |
| | | public int Sort { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 是否禁用 |
| | | /// </summary> |
| | | public bool? IsDisabled { get; set; } |
| | | /// <summary> |
| | | /// 是否禁用 |
| | | /// </summary> |
| | | public bool? IsDisabled { get; set; } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public ExtraPropertyDictionary? ExtraProperties { get; set; } |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public ExtraPropertyDictionary? ExtraProperties { get; set; } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public string? ConcurrencyStamp { get; set; } |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public string? ConcurrencyStamp { 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 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> |
| | | /// |
| | | /// </summary> |
| | | public bool IsDeleted { get; set; } |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public bool IsDeleted { 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> |
| | | /// 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; |
| | | } |
| | | } |
| | |
| | | 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; |
| | | |
| | | 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 string TaskNo { get; set; } |
| | | public class WmsTaskDto : ExtensibleEntityDto<Guid>, IHasConcurrencyStamp |
| | | { |
| | | /// <summary> |
| | | /// 任务号 |
| | | /// </summary> |
| | | public string TaskNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 任务类型 |
| | | /// </summary> |
| | | public TaskTypeEnum TaskType { get; set; } |
| | | /// <summary> |
| | | /// 任务类型 |
| | | /// </summary> |
| | | public TaskTypeEnum TaskType { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 任务类型 |
| | | /// </summary> |
| | | public string TaskTypeDesc |
| | | { |
| | | get |
| | | { |
| | | return GetEnumDescriptionUtil.GetEnumDescription(TaskType); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 任务等级 |
| | | /// </summary> |
| | | public int TaskLevel { get; set; } |
| | | /// <summary> |
| | | /// 任务类型 |
| | | /// </summary> |
| | | public string TaskTypeDesc |
| | | { |
| | | get |
| | | { |
| | | return GetEnumDescriptionUtil.GetEnumDescription(TaskType); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 任务等级 |
| | | /// </summary> |
| | | public int TaskLevel { 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 string? ContainerNo { get; set; } |
| | | /// <summary> |
| | | /// 任务状态 |
| | | /// </summary> |
| | | public string TaskStatusDesc |
| | | { |
| | | get |
| | | { |
| | | return GetEnumDescriptionUtil.GetEnumDescription(TaskStatus); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 托盘编号 |
| | | /// </summary> |
| | | public string? ContainerNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 起始库位 |
| | | /// </summary> |
| | | public string? SourcePlace { get; set; } |
| | | /// <summary> |
| | | /// 起始库位 |
| | | /// </summary> |
| | | public string? SourcePlace { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 目标库位 |
| | | /// </summary> |
| | | public string? ToPlace { get; set; } |
| | | /// <summary> |
| | | /// 目标库位 |
| | | /// </summary> |
| | | public string? ToPlace { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 巷道 |
| | | /// </summary> |
| | | public int? Aisle { get; set; } |
| | | /// <summary> |
| | | /// 巷道 |
| | | /// </summary> |
| | | public int? Aisle { 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 DodevicetypeEnum Dodevicetype { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 设备任务状态 |
| | | /// </summary> |
| | | public int TaskDodeviceStatus { get; set; } |
| | | /// <summary> |
| | | /// 设备类型Desc |
| | | /// </summary> |
| | | public string DodevicetypeDesc |
| | | { |
| | | get |
| | | { |
| | | return GetEnumDescriptionUtil.GetEnumDescription(Dodevicetype); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// WCS是否可以读取 |
| | | /// </summary> |
| | | public bool IsRead { get; set; } |
| | | /// <summary> |
| | | /// 设备任务状态 |
| | | /// </summary> |
| | | public TaskDodeviceStatus TaskDodeviceStatus { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 子任务类型 |
| | | /// </summary> |
| | | public SonTaskTypeEnum? SonTaskType { get; set; } |
| | | /// <summary> |
| | | /// 设备类型Desc |
| | | /// </summary> |
| | | public string TaskDodeviceStatusDesc |
| | | { |
| | | get |
| | | { |
| | | return GetEnumDescriptionUtil.GetEnumDescription(TaskDodeviceStatus); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 子任务类型 |
| | | /// </summary> |
| | | public string? SonTaskTypeDesc |
| | | { |
| | | get |
| | | { |
| | | return GetEnumDescriptionUtil.GetEnumDescription(SonTaskType); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 来源单据号 |
| | | /// </summary> |
| | | public string? SourceOrderNo { get; set; } |
| | | /// <summary> |
| | | /// WCS是否可以读取 |
| | | /// </summary> |
| | | public bool IsRead { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 下个任务是否生成成功 |
| | | /// </summary> |
| | | public int? IsNextTask { get; set; } |
| | | /// <summary> |
| | | /// 子任务类型 |
| | | /// </summary> |
| | | public SonTaskTypeEnum? SonTaskType { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 可变变量1 |
| | | /// </summary> |
| | | public string? MutableParam1 { get; set; } |
| | | /// <summary> |
| | | /// 子任务类型 |
| | | /// </summary> |
| | | public string? SonTaskTypeDesc |
| | | { |
| | | get |
| | | { |
| | | return GetEnumDescriptionUtil.GetEnumDescription(SonTaskType); |
| | | } |
| | | } |
| | | /// <summary> |
| | | /// 来源单据号 |
| | | /// </summary> |
| | | public string? SourceOrderNo { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 可变变量2 |
| | | /// </summary> |
| | | public string? MutableParam2 { get; set; } |
| | | /// <summary> |
| | | /// 下个任务是否生成成功 |
| | | /// </summary> |
| | | public int? IsNextTask { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 可变变量3 |
| | | /// </summary> |
| | | public string? MutableParam3 { get; set; } |
| | | /// <summary> |
| | | /// 可变变量1 |
| | | /// </summary> |
| | | public string? MutableParam1 { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 排序 |
| | | /// </summary> |
| | | public int Sort { get; set; } |
| | | /// <summary> |
| | | /// 可变变量2 |
| | | /// </summary> |
| | | public string? MutableParam2 { get; set; } |
| | | |
| | | /// <summary> |
| | | /// 是否禁用 |
| | | /// </summary> |
| | | public bool? IsDisabled { get; set; } |
| | | /// <summary> |
| | | /// 可变变量3 |
| | | /// </summary> |
| | | public string? MutableParam3 { get; set; } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public ExtraPropertyDictionary? ExtraProperties { get; set; } |
| | | /// <summary> |
| | | /// 排序 |
| | | /// </summary> |
| | | public int Sort { get; set; } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public string? ConcurrencyStamp { get; set; } |
| | | /// <summary> |
| | | /// 是否禁用 |
| | | /// </summary> |
| | | public bool? IsDisabled { get; set; } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public DateTime CreationTime { get; set; } |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public ExtraPropertyDictionary? ExtraProperties { get; set; } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public string? CreatorId { get; set; } |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public string? ConcurrencyStamp { get; set; } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public DateTime? LastModificationTime { get; set; } |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public DateTime CreationTime { get; set; } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public string? LastModifierId { get; set; } |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public string? CreatorId { get; set; } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public bool IsDeleted { get; set; } |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public DateTime? LastModificationTime { get; set; } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public string? DeleterId { get; set; } |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public string? LastModifierId { get; set; } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public DateTime? DeletionTime { get; set; } |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public bool IsDeleted { get; set; } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public string? DeleterId { get; set; } |
| | | |
| | | /// <summary> |
| | | /// |
| | | /// </summary> |
| | | public DateTime? DeletionTime { 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; |
| | | } |
| | | } |
| | |
| | | using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockRecord; |
| | | using CMS.Plugin.HIAWms.Application.Contracts.Services; |
| | | using CMS.Plugin.HIAWms.Domain.Shared; |
| | | using CmsQueryExtensions; |
| | | 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 CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsInOutStockRecord; |
| | | using CMS.Plugin.HIAWms.Application.Contracts.Services; |
| | | using CMS.Plugin.HIAWms.Domain.Shared; |
| | | using CmsQueryExtensions; |
| | | 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; |
| | | |
| | | /// <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 exist = await wmsInOutStockRecordRepository.NameExistAsync(input.Id); |
| | | if (exist) |
| | | { |
| | | throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.Id]); |
| | | } |
| | | |
| | | 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 exist = await wmsInOutStockRecordRepository.NameExistAsync(input.MaterialId); |
| | | //if (exist) |
| | | //{ |
| | | // throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.MaterialId]); |
| | | //} |
| | | |
| | | 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> |
| | |
| | | /// <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); |
| | | var exist = await wmsInOutStockRecordRepository.NameExistAsync(input.Id, updateObj.Id); |
| | | if (exist) |
| | | { |
| | | throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.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); |
| | | //var exist = await wmsInOutStockRecordRepository.NameExistAsync(input.Id, updateObj.Id); |
| | | //if (exist) |
| | | //{ |
| | | // throw new UserFriendlyException(L[CMSPluginDomainErrorCodes.NameAlreadyExists, input.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.SourcePlace = input.SourcePlace; |
| | | updateObj.ToPlace = input.ToPlace; |
| | | updateObj.IsDisabled = input.IsDisabled; |
| | | |
| | | |
| | | 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) |
| | | //{ |
| | |
| | | // 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) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | |
| | | var wmsInOutStockRecordCreateDtos = new List<(int RowIndex, WmsInOutStockRecordCreateDto Item)>(); |
| | | var wmsInOutStockRecordUpdateDtos = new List<(int RowIndex, Guid Id, WmsInOutStockRecordUpdateDto Item)>(); |
| | | var importItems = input.WmsInOutStockRecords; |
| | | |
| | | if (importItems != null && importItems.Any()) |
| | | { |
| | | public async Task ImportAsync(WmsInOutStockRecordsImportModel input) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | |
| | | var wmsInOutStockRecordCreateDtos = new List<(int RowIndex, WmsInOutStockRecordCreateDto Item)>(); |
| | | var wmsInOutStockRecordUpdateDtos = new List<(int RowIndex, Guid Id, WmsInOutStockRecordUpdateDto Item)>(); |
| | | var importItems = input.WmsInOutStockRecords; |
| | | |
| | | if (importItems != null && importItems.Any()) |
| | | { |
| | | #region 导入校验 |
| | | |
| | | |
| | | // 判断名称是否重复,并输出第几行重复 |
| | | var duplicateWmsInOutStockRecords = importItems.GroupBy(x => x.Id).Where(x => x.Count() > 1).ToList(); |
| | | if (duplicateWmsInOutStockRecords?.Any() == true) |
| | | { |
| | | var duplicateWmsInOutStockRecordMsgs = duplicateWmsInOutStockRecords.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} 行:{x.Key} 名称重复"); |
| | | var errorMsg = $"导入失败!配置, {string.Join(",", duplicateWmsInOutStockRecordMsgs)},终止导入"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | foreach (var impItem in importItems) |
| | | { |
| | | if (impItem.Id.IsNullOrWhiteSpace()) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | if (impItem.Id.IsNullOrWhiteSpace()) |
| | | { |
| | | var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:WmsInOutStockRecord名称不能为空"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | |
| | | var oldWmsInOutStockRecord = await wmsInOutStockRecordRepository.FindByNameAsync(impItem.Id); |
| | | if (oldWmsInOutStockRecord != null) |
| | | { |
| | | var wmsInOutStockRecordUpdateDto = new WmsInOutStockRecordUpdateDto |
| | | { |
| | | var duplicateWmsInOutStockRecords = importItems.GroupBy(x => x.MaterialNo).Where(x => x.Count() > 1).ToList(); |
| | | if (duplicateWmsInOutStockRecords?.Any() == true) |
| | | { |
| | | var duplicateWmsInOutStockRecordMsgs = duplicateWmsInOutStockRecords.Select(x => $"第 {string.Join(",", x.Select(x => x.RowIndex))} 行:{x.Key} 名称重复"); |
| | | var errorMsg = $"导入失败!配置, {string.Join(",", duplicateWmsInOutStockRecordMsgs)},终止导入"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | foreach (var impItem in importItems) |
| | | { |
| | | if (impItem.MaterialNo.IsNullOrWhiteSpace()) |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | if (impItem.MaterialNo.IsNullOrWhiteSpace()) |
| | | { |
| | | var errorMsg = $"导入失败!配置,第{impItem.RowIndex}行:WmsInOutStockRecord名称不能为空"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | |
| | | var oldWmsInOutStockRecord = await wmsInOutStockRecordRepository.FindByNameAsync(impItem.MaterialNo); |
| | | if (oldWmsInOutStockRecord != null) |
| | | { |
| | | var wmsInOutStockRecordUpdateDto = new WmsInOutStockRecordUpdateDto |
| | | { |
| | | OrderNo = impItem.OrderNo, |
| | | MaterialName = impItem.MaterialName, |
| | | MaterialNo = impItem.MaterialNo, |
| | | StockType = impItem.StockType, |
| | | ContainerNo = impItem.ContainerNo, |
| | | MaterialModel = impItem.MaterialModel, |
| | | OperateTime = impItem.OperateTime, |
| | | Remark = impItem.Remark, |
| | | MaterialId = impItem.MaterialId, |
| | | TaskNo = impItem.TaskNo, |
| | | SourcePlace = impItem.SourcePlace, |
| | | ToPlace = impItem.ToPlace, |
| | | IsDisabled = impItem.IsDisabled, |
| | | |
| | | }; |
| | | |
| | | wmsInOutStockRecordUpdateDtos.Add((impItem.RowIndex, oldWmsInOutStockRecord.Id, wmsInOutStockRecordUpdateDto)); |
| | | } |
| | | else |
| | | { |
| | | var wmsInOutStockRecordCreateDto = new WmsInOutStockRecordCreateDto |
| | | { |
| | | MaterialName = impItem.MaterialName, |
| | | MaterialNo = impItem.MaterialNo, |
| | | StockType = impItem.StockType, |
| | | ContainerNo = impItem.ContainerNo, |
| | | MaterialModel = impItem.MaterialModel, |
| | | OperateTime = impItem.OperateTime, |
| | | Remark = impItem.Remark, |
| | | MaterialId = impItem.MaterialId, |
| | | TaskNo = impItem.TaskNo, |
| | | SourcePlace = impItem.SourcePlace, |
| | | ToPlace = impItem.ToPlace, |
| | | IsDisabled = impItem.IsDisabled, |
| | | |
| | | }; |
| | | |
| | | wmsInOutStockRecordUpdateDtos.Add((impItem.RowIndex, oldWmsInOutStockRecord.Id, wmsInOutStockRecordUpdateDto)); |
| | | } |
| | | else |
| | | { |
| | | var wmsInOutStockRecordCreateDto = new WmsInOutStockRecordCreateDto |
| | | { |
| | | OrderNo = impItem.OrderNo, |
| | | MaterialName = impItem.MaterialName, |
| | | MaterialNo = impItem.MaterialNo, |
| | | StockType = impItem.StockType, |
| | | ContainerNo = impItem.ContainerNo, |
| | | MaterialModel = impItem.MaterialModel, |
| | | OperateTime = impItem.OperateTime, |
| | | Remark = impItem.Remark, |
| | | MaterialId = impItem.MaterialId, |
| | | TaskNo = impItem.TaskNo, |
| | | SourcePlace = impItem.SourcePlace, |
| | | ToPlace = impItem.ToPlace, |
| | | IsDisabled = impItem.IsDisabled, |
| | | |
| | | }; |
| | | |
| | | wmsInOutStockRecordCreateDtos.Add((impItem.RowIndex, wmsInOutStockRecordCreateDto)); |
| | | } |
| | | } |
| | | } |
| | | |
| | | MaterialName = impItem.MaterialName, |
| | | MaterialNo = impItem.MaterialNo, |
| | | StockType = impItem.StockType, |
| | | ContainerNo = impItem.ContainerNo, |
| | | MaterialModel = impItem.MaterialModel, |
| | | OperateTime = impItem.OperateTime, |
| | | Remark = impItem.Remark, |
| | | MaterialId = impItem.MaterialId, |
| | | TaskNo = impItem.TaskNo, |
| | | SourcePlace = impItem.SourcePlace, |
| | | ToPlace = impItem.ToPlace, |
| | | IsDisabled = impItem.IsDisabled, |
| | | |
| | | }; |
| | | |
| | | wmsInOutStockRecordCreateDtos.Add((impItem.RowIndex, wmsInOutStockRecordCreateDto)); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 新增 |
| | | foreach (var wmsInOutStockRecordDto in wmsInOutStockRecordCreateDtos) |
| | | { |
| | | try |
| | | { |
| | | await CreateAsync(wmsInOutStockRecordDto.Item); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | var errorMsg = $"导入失败!配置,第{wmsInOutStockRecordDto.RowIndex}行:{e.Message},终止导入"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | } |
| | | |
| | | foreach (var wmsInOutStockRecordDto in wmsInOutStockRecordCreateDtos) |
| | | { |
| | | try |
| | | { |
| | | await CreateAsync(wmsInOutStockRecordDto.Item); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | var errorMsg = $"导入失败!配置,第{wmsInOutStockRecordDto.RowIndex}行:{e.Message},终止导入"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | } |
| | | |
| | | // 更新 |
| | | foreach (var wmsInOutStockRecordDto in wmsInOutStockRecordUpdateDtos) |
| | | { |
| | | try |
| | | { |
| | | await UpdateAsync(wmsInOutStockRecordDto.Id, wmsInOutStockRecordDto.Item); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | var errorMsg = $"导入失败!配置,第{wmsInOutStockRecordDto.RowIndex}行:{e.Message},终止导入"; |
| | | throw new UserFriendlyException(errorMsg); |
| | | } |
| | | } |
| | | } |
| | | |
| | | foreach (var wmsInOutStockRecordDto in wmsInOutStockRecordUpdateDtos) |
| | | { |
| | | try |
| | | { |
| | | await UpdateAsync(wmsInOutStockRecordDto.Id, wmsInOutStockRecordDto.Item); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | var errorMsg = $"导入失败!配置,第{wmsInOutStockRecordDto.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(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 ? "出入库记录列表" : result.Count == 1 ? result[0]?.Id : "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 ? "出入库记录列表" : result.Count == 1 ? result[0]?.MaterialNo : "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; |
| | | } |
| | | } |
| | |
| | | using CMS.Plugin.HIAWms.Application.Contracts.Dtos.WmsTask; |
| | | using CMS.Plugin.HIAWms.Application.Contracts.Services; |
| | | using CMS.Plugin.HIAWms.Domain.Shared; |
| | | using CmsQueryExtensions; |
| | | 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 CmsQueryExtensions; |
| | | 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; |
| | | using CMS.Plugin.HIAWms.Domain.WmsContainers; |
| | | using CMS.Plugin.HIAWms.Domain.WmsPlaces; |
| | | |
| | | 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; |
| | | private readonly IWmsContainerRepository _wmsContainerRepository; |
| | | private readonly IWmsPlaceRepository _wmsPlaceRepository; |
| | | |
| | | /// <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, IWmsContainerRepository wmsContainerRepository, IWmsPlaceRepository wmsPlaceRepository) |
| | | { |
| | | wmsTaskRepository = _WmsTaskRepository; |
| | | _wmsContainerRepository = wmsContainerRepository; |
| | | _wmsPlaceRepository = wmsPlaceRepository; |
| | | } |
| | | |
| | | /// <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 existContainer = await _wmsContainerRepository.NameExistAsync(input.ContainerNo); |
| | | if (existContainer) |
| | | { |
| | | throw new UserFriendlyException("托盘不存在,请先添加托盘"); |
| | | } |
| | | // 校验物料是否存在 |
| | | var existSourcePlace = await _wmsPlaceRepository.NameExistAsync(input.SourcePlace); |
| | | if (existSourcePlace) |
| | | { |
| | | throw new UserFriendlyException("起始库位不存在,请先添加库位"); |
| | | } |
| | | //校验库位是否存在 |
| | | var existToPlace = await _wmsPlaceRepository.NameExistAsync(input.ToPlace); |
| | | if (existToPlace) |
| | | { |
| | | throw new UserFriendlyException("目标库位不存在,请先添加库位"); |
| | | } |
| | | |
| | | 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> |
| | |
| | | /// <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.TaskNo = input.TaskNo; |
| | | 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.TaskNo = input.TaskNo; |
| | | updateObj.TaskType = input.TaskType; |
| | | updateObj.TaskLevel = input.TaskLevel; |
| | | updateObj.TaskStatus = input.TaskStatus; |
| | |
| | | updateObj.MutableParam2 = input.MutableParam2; |
| | | updateObj.MutableParam3 = input.MutableParam3; |
| | | updateObj.IsDisabled = input.IsDisabled; |
| | | |
| | | |
| | | 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) |
| | | //{ |
| | |
| | | // 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 |
| | | { |
| | | TaskNo = impItem.TaskNo, |
| | | TaskType = impItem.TaskType, |
| | | TaskLevel = impItem.TaskLevel, |
| | | TaskStatus = impItem.TaskStatus, |
| | | ContainerNo = impItem.ContainerNo, |
| | | SourcePlace = impItem.SourcePlace, |
| | | ToPlace = impItem.ToPlace, |
| | | Aisle = impItem.Aisle, |
| | | DodeviceId = impItem.DodeviceId, |
| | | Dodevicetype = impItem.Dodevicetype, |
| | | TaskDodeviceStatus = impItem.TaskDodeviceStatus, |
| | | IsRead = impItem.IsRead, |
| | | SonTaskType = impItem.SonTaskType, |
| | | SourceOrderNo = impItem.SourceOrderNo, |
| | | IsNextTask = impItem.IsNextTask, |
| | | MutableParam1 = impItem.MutableParam1, |
| | | MutableParam2 = impItem.MutableParam2, |
| | | MutableParam3 = impItem.MutableParam3, |
| | | IsDisabled = impItem.IsDisabled, |
| | | |
| | | }; |
| | | |
| | | wmsTaskUpdateDtos.Add((impItem.RowIndex, oldWmsTask.Id, wmsTaskUpdateDto)); |
| | | } |
| | | else |
| | | { |
| | | var wmsTaskCreateDto = new WmsTaskCreateDto |
| | | { |
| | | TaskType = impItem.TaskType, |
| | | TaskLevel = impItem.TaskLevel, |
| | | TaskStatus = impItem.TaskStatus, |
| | | ContainerNo = impItem.ContainerNo, |
| | | SourcePlace = impItem.SourcePlace, |
| | | ToPlace = impItem.ToPlace, |
| | | Aisle = impItem.Aisle, |
| | | DodeviceId = impItem.DodeviceId, |
| | | Dodevicetype = impItem.Dodevicetype, |
| | | TaskDodeviceStatus = impItem.TaskDodeviceStatus, |
| | | IsRead = impItem.IsRead, |
| | | SonTaskType = impItem.SonTaskType, |
| | | SourceOrderNo = impItem.SourceOrderNo, |
| | | IsNextTask = impItem.IsNextTask, |
| | | MutableParam1 = impItem.MutableParam1, |
| | | MutableParam2 = impItem.MutableParam2, |
| | | MutableParam3 = impItem.MutableParam3, |
| | | IsDisabled = impItem.IsDisabled, |
| | | |
| | | }; |
| | | |
| | | wmsTaskUpdateDtos.Add((impItem.RowIndex, oldWmsTask.Id, wmsTaskUpdateDto)); |
| | | } |
| | | else |
| | | { |
| | | var wmsTaskCreateDto = new WmsTaskCreateDto |
| | | { |
| | | TaskNo = impItem.TaskNo, |
| | | TaskType = impItem.TaskType, |
| | | TaskLevel = impItem.TaskLevel, |
| | | TaskStatus = impItem.TaskStatus, |
| | | ContainerNo = impItem.ContainerNo, |
| | | SourcePlace = impItem.SourcePlace, |
| | | ToPlace = impItem.ToPlace, |
| | | Aisle = impItem.Aisle, |
| | | DodeviceId = impItem.DodeviceId, |
| | | Dodevicetype = impItem.Dodevicetype, |
| | | TaskDodeviceStatus = impItem.TaskDodeviceStatus, |
| | | IsRead = impItem.IsRead, |
| | | SonTaskType = impItem.SonTaskType, |
| | | SourceOrderNo = impItem.SourceOrderNo, |
| | | IsNextTask = impItem.IsNextTask, |
| | | MutableParam1 = impItem.MutableParam1, |
| | | MutableParam2 = impItem.MutableParam2, |
| | | MutableParam3 = impItem.MutableParam3, |
| | | IsDisabled = impItem.IsDisabled, |
| | | |
| | | }; |
| | | |
| | | wmsTaskCreateDtos.Add((impItem.RowIndex, wmsTaskCreateDto)); |
| | | } |
| | | } |
| | | } |
| | | |
| | | TaskType = impItem.TaskType, |
| | | TaskLevel = impItem.TaskLevel, |
| | | TaskStatus = impItem.TaskStatus, |
| | | ContainerNo = impItem.ContainerNo, |
| | | SourcePlace = impItem.SourcePlace, |
| | | ToPlace = impItem.ToPlace, |
| | | Aisle = impItem.Aisle, |
| | | DodeviceId = impItem.DodeviceId, |
| | | Dodevicetype = impItem.Dodevicetype, |
| | | TaskDodeviceStatus = impItem.TaskDodeviceStatus, |
| | | IsRead = impItem.IsRead, |
| | | SonTaskType = impItem.SonTaskType, |
| | | SourceOrderNo = impItem.SourceOrderNo, |
| | | IsNextTask = impItem.IsNextTask, |
| | | MutableParam1 = impItem.MutableParam1, |
| | | MutableParam2 = impItem.MutableParam2, |
| | | MutableParam3 = impItem.MutableParam3, |
| | | IsDisabled = impItem.IsDisabled, |
| | | |
| | | }; |
| | | |
| | | 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.NotNullOrWhiteSpace(input.TaskNo, "任务号", 50); |
| | | protected Task CheckCreateOrUpdateDtoAsync(WmsTaskCreateOrUpdateDtoBase input) |
| | | { |
| | | Check.NotNull(input, nameof(input)); |
| | | Check.NotNullOrWhiteSpace(input.TaskNo, "任务号", 50); |
| | | Check.NotNull(input.TaskType, "任务类型"); |
| | | Check.NotNull(input.TaskLevel, "任务等级"); |
| | | Check.NotNull(input.TaskStatus, "任务状态"); |
| | | Check.NotNull(input.Dodevicetype, "设备类型"); |
| | | Check.NotNull(input.ContainerNo, "托盘号"); |
| | | Check.NotNull(input.SourcePlace, "起始位置"); |
| | | Check.NotNull(input.ToPlace, "目标未知"); |
| | | Check.NotNull(input.TaskDodeviceStatus, "设备任务状态"); |
| | | Check.NotNull(input.IsRead, "WCS是否可以读取"); |
| | | |
| | | return Task.CompletedTask; |
| | | } |
| | | } |
| | | |
| | | return Task.CompletedTask; |
| | | } |
| | | } |
| | |
| | | /// <summary> |
| | | /// 按照名称查找Wms任务管理 |
| | | /// </summary> |
| | | /// <param name="name"></param> |
| | | /// <param name="taskNo"></param> |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | Task<WmsTask> FindByNameAsync(string name, CancellationToken cancellationToken = default); |
| | | Task<WmsTask> FindByNameAsync(string taskNo, CancellationToken cancellationToken = default); |
| | | |
| | | /// <summary> |
| | | /// 验证名称是否存在Wms任务管理 |
| | | /// </summary> |
| | | /// <param name="name"></param> |
| | | /// <param name="taskNo"></param> |
| | | /// <param name="id"></param> |
| | | /// <returns></returns> |
| | | Task<bool> NameExistAsync(string name, Guid? id = null); |
| | | Task<bool> NameExistAsync(string taskNo, Guid? id = null); |
| | | |
| | | /// <summary> |
| | | /// 获取最大排序Wms任务管理 |
| | |
| | | .IncludeDetails() |
| | | .Where(x => !x.IsDeleted) |
| | | .OrderBy(t => t.Sort) |
| | | .FirstOrDefaultAsync(t => t.Id == name, GetCancellationToken(cancellationToken)); |
| | | .FirstOrDefaultAsync(t => t.MaterialNo == name, GetCancellationToken(cancellationToken)); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <returns></returns> |
| | | public async Task<bool> NameExistAsync(string name, Guid? id = null) |
| | | { |
| | | return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.Id == name); |
| | | return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.MaterialNo == name); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <summary> |
| | | /// 按照名称查找Wms任务管理 |
| | | /// </summary> |
| | | /// <param name="name"></param> |
| | | /// <param name="taskNo"></param> |
| | | /// <param name="cancellationToken"></param> |
| | | /// <returns></returns> |
| | | public virtual async Task<WmsTask> FindByNameAsync(string name, CancellationToken cancellationToken = default) |
| | | public virtual async Task<WmsTask> FindByNameAsync(string taskNo, CancellationToken cancellationToken = default) |
| | | { |
| | | return await (await GetDbSetAsync()) |
| | | .IncludeDetails() |
| | | .Where(x => !x.IsDeleted) |
| | | .OrderBy(t => t.Sort) |
| | | .FirstOrDefaultAsync(t => t.TaskNo == name, GetCancellationToken(cancellationToken)); |
| | | .FirstOrDefaultAsync(t => t.TaskNo == taskNo, GetCancellationToken(cancellationToken)); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 验证名称是否存在Wms任务管理 |
| | | /// </summary> |
| | | /// <param name="name">校验值</param> |
| | | /// <param name="taskNo">校验值</param> |
| | | /// <param name="id"></param> |
| | | /// <returns></returns> |
| | | public async Task<bool> NameExistAsync(string name, Guid? id = null) |
| | | public async Task<bool> NameExistAsync(string taskNo, Guid? id = null) |
| | | { |
| | | return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.TaskNo == name); |
| | | return await (await GetDbSetAsync()).WhereIf(id.HasValue, p => p.Id != id).Where(x => !x.IsDeleted).AnyAsync(x => x.TaskNo == taskNo); |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | import { |
| | | ref, |
| | | onMounted, |
| | | reactive, |
| | | computed, |
| | | Ref, |
| | | watch, |
| | | SetupContext, |
| | | h, |
| | | } from 'vue' |
| | | import { injectModel } from '@/libs/Provider/Provider' |
| | | import { WmsInOutStockRecordDrawer } from '../Models/WmsInOutStockRecordDrawer' |
| | | import { ElMessage } from 'element-plus' |
| | | import isEqual from 'lodash/isEqual' |
| | | import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox' |
| | | import { cloneDeep } from 'lodash' |
| | | |
| | | export const useWmsInOutStockRecordQueryDrawer = (props: any, ctx?: any) => { |
| | | const wmsInOutStockRecordDrawer = injectModel<WmsInOutStockRecordDrawer>('WmsInOutStockRecordDrawer') |
| | | /** |
| | | * 用来对比的初始化数据 |
| | | */ |
| | | const initiateData: Ref<Record<string, any>> = ref({}) |
| | | const formData = ref<Record<string, any>>({}) |
| | | // ref |
| | | const formRef = ref() |
| | | |
| | | const disabled = ref(false) |
| | | |
| | | const current = computed(() => { |
| | | return props.row || null |
| | | }) |
| | | |
| | | const inputNumber = (attrs) => { |
| | | return ( |
| | | <el-input-number |
| | | min="1" |
| | | step="1" |
| | | precision="0" |
| | | {...attrs} |
| | | ></el-input-number> |
| | | ) |
| | | } |
| | | |
| | | const datePickerRange = (attrs) => { |
| | | return ( |
| | | <el-date-picker |
| | | type="daterange" |
| | | value-format="YYYY-MM-DD HH:mm:ss" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | {...attrs} |
| | | ></el-date-picker> |
| | | ) |
| | | } |
| | | |
| | | const dateTimePickerRange = (attrs) => { |
| | | return ( |
| | | <el-date-picker |
| | | type="datetimerange" |
| | | value-format="YYYY-MM-DD HH:mm:ss" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | {...attrs} |
| | | ></el-date-picker> |
| | | ) |
| | | } |
| | | |
| | | const visible = computed({ |
| | | get() { |
| | | return props.modelValue |
| | | }, |
| | | set(val) { |
| | | ctx.emit('update:modelValue', val) |
| | | }, |
| | | }) |
| | | /** |
| | | * 添加的form字段 |
| | | */ |
| | | const formItems = reactive([ |
| | | { |
| | | label: '单据编号', |
| | | prop: 'orderNo', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入单据编号', |
| | | }, |
| | | { |
| | | label: '物料名称', |
| | | prop: 'materialName', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入物料名称', |
| | | }, |
| | | { |
| | | label: '物料件号', |
| | | prop: 'materialNo', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入物料件号', |
| | | }, |
| | | { |
| | | label: '操作类型', |
| | | prop: 'stockType', |
| | | el: 'select', |
| | | //disabled: disabled, |
| | | placeholder: '请输入操作类型', |
| | | }, |
| | | { |
| | | label: '容器编号', |
| | | prop: 'containerNo', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入容器编号', |
| | | }, |
| | | { |
| | | label: '机型', |
| | | prop: 'materialModel', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入机型', |
| | | }, |
| | | { |
| | | label: '操作时间', |
| | | prop: 'operateTime', |
| | | el: (props: any, { attrs }: SetupContext) => { |
| | | return h(dateTimePickerRange, { |
| | | ...props, |
| | | clearable: true, |
| | | ...attrs, |
| | | }) |
| | | }, |
| | | width: '100%', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入操作时间', |
| | | }, |
| | | { |
| | | label: '备注', |
| | | prop: 'remark', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入备注', |
| | | }, |
| | | { |
| | | label: '物料ID', |
| | | prop: 'materialId', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入物料ID', |
| | | }, |
| | | { |
| | | label: '任务号', |
| | | prop: 'taskNo', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入任务号', |
| | | }, |
| | | { |
| | | label: '起始库位', |
| | | prop: 'sourcePlace', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入起始库位', |
| | | }, |
| | | { |
| | | label: '目标库位', |
| | | prop: 'toPlace', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入目标库位', |
| | | }, |
| | | { |
| | | label: '是否禁用', |
| | | prop: 'isDisabled', |
| | | el: 'select', |
| | | //disabled: disabled, |
| | | placeholder: '请输入是否禁用', |
| | | options: [{label: '是',value: 'true'}, {label: '否',value: 'false'}] |
| | | }, |
| | | { |
| | | label: '', |
| | | prop: 'creationTime', |
| | | el: (props: any, { attrs }: SetupContext) => { |
| | | return h(dateTimePickerRange, { |
| | | ...props, |
| | | clearable: true, |
| | | ...attrs, |
| | | }) |
| | | }, |
| | | width: '100%', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入', |
| | | }, |
| | | ]) |
| | | /** |
| | | * 校验是否有数据变化 |
| | | */ |
| | | const checkIsEqualObject = () => { |
| | | const data = { |
| | | formData: formData.value, |
| | | } |
| | | const check = isEqual(initiateData.value, data) |
| | | return check |
| | | } |
| | | const commonGetFormData=()=>{ |
| | | const data = { |
| | | orderNo: formData.value.orderNo || '', |
| | | materialName: formData.value.materialName || '', |
| | | materialNo: formData.value.materialNo || '', |
| | | stockType: formData.value.stockType || '', |
| | | containerNo: formData.value.containerNo || '', |
| | | materialModel: formData.value.materialModel || '', |
| | | operateTime: formData.value.operateTime || '', |
| | | remark: formData.value.remark || '', |
| | | materialId: formData.value.materialId || '', |
| | | taskNo: formData.value.taskNo || '', |
| | | sourcePlace: formData.value.sourcePlace || '', |
| | | toPlace: formData.value.toPlace || '', |
| | | isDisabled: formData.value.isDisabled || '', |
| | | creationTime: formData.value.creationTime || '', |
| | | } |
| | | return data; |
| | | } |
| | | const onClose = (done: () => void) => { |
| | | if (visible.value) { |
| | | visible.value = false |
| | | const data =commonGetFormData(); |
| | | ctx.emit('close', data) |
| | | } |
| | | } |
| | | /** |
| | | * 确认查询 |
| | | */ |
| | | const onConfirmQuery = async () => { |
| | | const data =commonGetFormData(); |
| | | ctx.emit('confirmQuery', data) |
| | | } |
| | | /** |
| | | * 重置查询 |
| | | */ |
| | | const onReset = async () => { |
| | | formData.value = {} |
| | | formData.value.OrderNo = '' |
| | | formData.value.MaterialName = '' |
| | | formData.value.MaterialNo = '' |
| | | formData.value.StockType = '' |
| | | formData.value.ContainerNo = '' |
| | | formData.value.MaterialModel = '' |
| | | formData.value.OperateTime = '' |
| | | formData.value.Remark = '' |
| | | formData.value.MaterialId = '' |
| | | formData.value.TaskNo = '' |
| | | formData.value.SourcePlace = '' |
| | | formData.value.ToPlace = '' |
| | | //向父组件发送自定义事件 |
| | | ctx.emit('restQuery'); |
| | | } |
| | | |
| | | const updateCheckData = () => { |
| | | initiateData.value = { |
| | | formData: { |
| | | ...formData.value, |
| | | }, |
| | | } |
| | | } |
| | | const updateFormItemOptions = (propName: string, enumData: any[]) => { |
| | | const item = formItems.find((item) => item.prop === propName) |
| | | if (item && enumData) { |
| | | item.options = enumData.map((item) => ({ |
| | | label: item.description, |
| | | value: item.value, |
| | | })) |
| | | } |
| | | } |
| | | /** |
| | | * 通用查询枚举 |
| | | */ |
| | | const commonQueryEnumForFrom = async () => { |
| | | const stockTypeEnumEnum = await wmsInOutStockRecordDrawer.getWmsEnumData({ |
| | | EnumName: 'StockTypeEnum', |
| | | }) |
| | | updateFormItemOptions('stockType', stockTypeEnumEnum) |
| | | |
| | | } |
| | | commonQueryEnumForFrom() |
| | | /** |
| | | * 弹窗打开获取详情 |
| | | */ |
| | | const onOpen = async () => { |
| | | disabled.value = false |
| | | updateCheckData() |
| | | } |
| | | |
| | | watch(() => current.value, onOpen) |
| | | |
| | | return { |
| | | formItems, |
| | | formData, |
| | | visible, |
| | | formRef, |
| | | onOpen, |
| | | onClose, |
| | | onConfirmQuery, |
| | | onReset, |
| | | } |
| | | } |
| | | import { |
| | | ref, |
| | | onMounted, |
| | | reactive, |
| | | computed, |
| | | Ref, |
| | | watch, |
| | | SetupContext, |
| | | h, |
| | | } from 'vue' |
| | | import { injectModel } from '@/libs/Provider/Provider' |
| | | import { WmsInOutStockRecordDrawer } from '../Models/WmsInOutStockRecordDrawer' |
| | | import { ElMessage } from 'element-plus' |
| | | import isEqual from 'lodash/isEqual' |
| | | import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox' |
| | | import { cloneDeep } from 'lodash' |
| | | |
| | | export const useWmsInOutStockRecordQueryDrawer = (props: any, ctx?: any) => { |
| | | const wmsInOutStockRecordDrawer = injectModel<WmsInOutStockRecordDrawer>( |
| | | 'WmsInOutStockRecordDrawer' |
| | | ) |
| | | /** |
| | | * 用来对比的初始化数据 |
| | | */ |
| | | const initiateData: Ref<Record<string, any>> = ref({}) |
| | | const formData = ref<Record<string, any>>({}) |
| | | // ref |
| | | const formRef = ref() |
| | | |
| | | const disabled = ref(false) |
| | | |
| | | const current = computed(() => { |
| | | return props.row || null |
| | | }) |
| | | |
| | | const inputNumber = (attrs) => { |
| | | return ( |
| | | <el-input-number |
| | | min="1" |
| | | step="1" |
| | | precision="0" |
| | | {...attrs} |
| | | ></el-input-number> |
| | | ) |
| | | } |
| | | |
| | | const datePickerRange = (attrs) => { |
| | | return ( |
| | | <el-date-picker |
| | | type="daterange" |
| | | value-format="YYYY-MM-DD HH:mm:ss" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | {...attrs} |
| | | ></el-date-picker> |
| | | ) |
| | | } |
| | | |
| | | const dateTimePickerRange = (attrs) => { |
| | | return ( |
| | | <el-date-picker |
| | | type="datetimerange" |
| | | value-format="YYYY-MM-DD HH:mm:ss" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | {...attrs} |
| | | ></el-date-picker> |
| | | ) |
| | | } |
| | | |
| | | const visible = computed({ |
| | | get() { |
| | | return props.modelValue |
| | | }, |
| | | set(val) { |
| | | ctx.emit('update:modelValue', val) |
| | | }, |
| | | }) |
| | | /** |
| | | * 添加的form字段 |
| | | */ |
| | | const formItems = reactive([ |
| | | { |
| | | label: '单据编号', |
| | | prop: 'orderNo', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入单据编号', |
| | | }, |
| | | { |
| | | label: '物料名称', |
| | | prop: 'materialName', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入物料名称', |
| | | }, |
| | | { |
| | | label: '物料件号', |
| | | prop: 'materialNo', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入物料件号', |
| | | }, |
| | | { |
| | | label: '操作类型', |
| | | prop: 'stockType', |
| | | el: 'select', |
| | | //disabled: disabled, |
| | | placeholder: '请输入操作类型', |
| | | }, |
| | | { |
| | | label: '容器编号', |
| | | prop: 'containerNo', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入容器编号', |
| | | }, |
| | | { |
| | | label: '机型', |
| | | prop: 'materialModel', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入机型', |
| | | }, |
| | | { |
| | | label: '操作时间', |
| | | prop: 'operateTime', |
| | | el: (props: any, { attrs }: SetupContext) => { |
| | | return h(dateTimePickerRange, { |
| | | ...props, |
| | | clearable: true, |
| | | ...attrs, |
| | | }) |
| | | }, |
| | | width: '100%', |
| | | //disabled: disabled, |
| | | placeholder: '请输入操作时间', |
| | | }, |
| | | { |
| | | label: '备注', |
| | | prop: 'remark', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入备注', |
| | | }, |
| | | { |
| | | label: '物料ID', |
| | | prop: 'materialId', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入物料ID', |
| | | }, |
| | | { |
| | | label: '任务号', |
| | | prop: 'taskNo', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入任务号', |
| | | }, |
| | | { |
| | | label: '起始库位', |
| | | prop: 'sourcePlace', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入起始库位', |
| | | }, |
| | | { |
| | | label: '目标库位', |
| | | prop: 'toPlace', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入目标库位', |
| | | }, |
| | | { |
| | | label: '是否禁用', |
| | | prop: 'isDisabled', |
| | | el: 'select', |
| | | //disabled: disabled, |
| | | placeholder: '请输入是否禁用', |
| | | options: [ |
| | | { label: '是', value: 'true' }, |
| | | { label: '否', value: 'false' }, |
| | | ], |
| | | }, |
| | | { |
| | | label: '创建时间', |
| | | prop: 'creationTime', |
| | | el: (props: any, { attrs }: SetupContext) => { |
| | | return h(dateTimePickerRange, { |
| | | ...props, |
| | | clearable: true, |
| | | ...attrs, |
| | | }) |
| | | }, |
| | | width: '100%', |
| | | //disabled: disabled, |
| | | placeholder: '请输入', |
| | | }, |
| | | ]) |
| | | /** |
| | | * 校验是否有数据变化 |
| | | */ |
| | | const checkIsEqualObject = () => { |
| | | const data = { |
| | | formData: formData.value, |
| | | } |
| | | const check = isEqual(initiateData.value, data) |
| | | return check |
| | | } |
| | | const commonGetFormData = () => { |
| | | const data = { |
| | | orderNo: formData.value.orderNo || '', |
| | | materialName: formData.value.materialName || '', |
| | | materialNo: formData.value.materialNo || '', |
| | | stockType: formData.value.stockType || '', |
| | | containerNo: formData.value.containerNo || '', |
| | | materialModel: formData.value.materialModel || '', |
| | | operateTime: formData.value.operateTime || '', |
| | | remark: formData.value.remark || '', |
| | | materialId: formData.value.materialId || '', |
| | | taskNo: formData.value.taskNo || '', |
| | | sourcePlace: formData.value.sourcePlace || '', |
| | | toPlace: formData.value.toPlace || '', |
| | | isDisabled: formData.value.isDisabled || '', |
| | | creationTime: formData.value.creationTime || '', |
| | | } |
| | | return data |
| | | } |
| | | const onClose = (done: () => void) => { |
| | | if (visible.value) { |
| | | visible.value = false |
| | | const data = commonGetFormData() |
| | | ctx.emit('close', data) |
| | | } |
| | | } |
| | | /** |
| | | * 确认查询 |
| | | */ |
| | | const onConfirmQuery = async () => { |
| | | const data = commonGetFormData() |
| | | ctx.emit('confirmQuery', data) |
| | | } |
| | | /** |
| | | * 重置查询 |
| | | */ |
| | | const onReset = async () => { |
| | | formData.value = {} |
| | | formData.value.OrderNo = '' |
| | | formData.value.MaterialName = '' |
| | | formData.value.MaterialNo = '' |
| | | formData.value.StockType = '' |
| | | formData.value.ContainerNo = '' |
| | | formData.value.MaterialModel = '' |
| | | formData.value.OperateTime = '' |
| | | formData.value.Remark = '' |
| | | formData.value.MaterialId = '' |
| | | formData.value.TaskNo = '' |
| | | formData.value.SourcePlace = '' |
| | | formData.value.ToPlace = '' |
| | | //向父组件发送自定义事件 |
| | | ctx.emit('restQuery') |
| | | } |
| | | |
| | | const updateCheckData = () => { |
| | | initiateData.value = { |
| | | formData: { |
| | | ...formData.value, |
| | | }, |
| | | } |
| | | } |
| | | const updateFormItemOptions = (propName: string, enumData: any[]) => { |
| | | const item = formItems.find((item) => item.prop === propName) |
| | | if (item && enumData) { |
| | | item.options = enumData.map((item) => ({ |
| | | label: item.description, |
| | | value: item.value, |
| | | })) |
| | | } |
| | | } |
| | | /** |
| | | * 通用查询枚举 |
| | | */ |
| | | const commonQueryEnumForFrom = async () => { |
| | | const stockTypeEnumEnum = await wmsInOutStockRecordDrawer.getWmsEnumData({ |
| | | EnumName: 'StockTypeEnum', |
| | | }) |
| | | updateFormItemOptions('stockType', stockTypeEnumEnum) |
| | | } |
| | | commonQueryEnumForFrom() |
| | | /** |
| | | * 弹窗打开获取详情 |
| | | */ |
| | | const onOpen = async () => { |
| | | disabled.value = false |
| | | updateCheckData() |
| | | } |
| | | |
| | | watch(() => current.value, onOpen) |
| | | |
| | | return { |
| | | formItems, |
| | | formData, |
| | | visible, |
| | | formRef, |
| | | onOpen, |
| | | onClose, |
| | | onConfirmQuery, |
| | | onReset, |
| | | } |
| | | } |
| | |
| | | <DyForm |
| | | ref={formRef} |
| | | formData={formData.value} |
| | | labelWidth="106px" |
| | | labelWidth="150px" |
| | | formItemProps={formItems} |
| | | ></DyForm> |
| | | </BaseDrawer> |
| | |
| | | /* |
| | | * 物料基础信息查询弹出框 |
| | | */ |
| | | import { SetupContext, defineComponent } from 'vue' |
| | | import BaseQueryDrawer from '@/components/BaseQueryDrawer/BaseQueryDrawer' |
| | | import styles from './WmsInOutStockRecordQueryDrawer.module.scss' |
| | | import { useWmsInOutStockRecordQueryDrawer } from '../../../../Controllers/WmsInOutStockRecordQueryDrawer.tsx' |
| | | import DyForm from '@/components/DyForm/DyForm' |
| | | |
| | | // @ts-ignore |
| | | export default defineComponent<{ |
| | | [key: string]: any |
| | | }>({ |
| | | name: '弹窗', |
| | | props: { |
| | | //枚举类型字典 |
| | | enumListDict:{ |
| | | type: Array as () => Array<{ key: string; value: object }>, // 定义数组元素类型 |
| | | default: () => [] // 默认值 |
| | | }, |
| | | modelValue: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | title: { |
| | | type: String, |
| | | default: '', |
| | | }, |
| | | row: { |
| | | type: Object, |
| | | }, |
| | | sort: { |
| | | type: Number, |
| | | default: 0, |
| | | }, |
| | | }, |
| | | emits: ['update:modelValue', 'close', 'submit', 'confirmquery1'], |
| | | setup(props: Record<string, any>, ctx: SetupContext) { |
| | | const { |
| | | onClose, |
| | | onConfirmQuery, |
| | | onOpen, |
| | | onReset, |
| | | formRef, |
| | | visible, |
| | | formItems, |
| | | formData, |
| | | } = useWmsInOutStockRecordQueryDrawer(props, ctx) |
| | | return () => ( |
| | | <BaseQueryDrawer |
| | | class={styles.drawer} |
| | | size="800px" |
| | | title={props.title || '高级查询'} |
| | | v-model={visible.value} |
| | | close-on-click-modal={true} |
| | | onReset={onReset} |
| | | onConfirmQueryForBase={onConfirmQuery} |
| | | onOpen={onOpen} |
| | | before-close={onClose} |
| | | onClose={onClose} |
| | | > |
| | | <DyForm |
| | | ref={formRef} |
| | | formData={formData.value} |
| | | labelWidth="106px" |
| | | formItemProps={formItems} |
| | | ></DyForm> |
| | | </BaseQueryDrawer> |
| | | ) |
| | | }, |
| | | }) |
| | | /* |
| | | * 物料基础信息查询弹出框 |
| | | */ |
| | | import { SetupContext, defineComponent } from 'vue' |
| | | import BaseQueryDrawer from '@/components/BaseQueryDrawer/BaseQueryDrawer' |
| | | import styles from './WmsInOutStockRecordQueryDrawer.module.scss' |
| | | import { useWmsInOutStockRecordQueryDrawer } from '../../../../Controllers/WmsInOutStockRecordQueryDrawer.tsx' |
| | | import DyForm from '@/components/DyForm/DyForm' |
| | | |
| | | // @ts-ignore |
| | | export default defineComponent<{ |
| | | [key: string]: any |
| | | }>({ |
| | | name: '弹窗', |
| | | props: { |
| | | //枚举类型字典 |
| | | enumListDict: { |
| | | type: Array as () => Array<{ key: string; value: object }>, // 定义数组元素类型 |
| | | default: () => [], // 默认值 |
| | | }, |
| | | modelValue: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | title: { |
| | | type: String, |
| | | default: '', |
| | | }, |
| | | row: { |
| | | type: Object, |
| | | }, |
| | | sort: { |
| | | type: Number, |
| | | default: 0, |
| | | }, |
| | | }, |
| | | emits: ['update:modelValue', 'close', 'submit', 'confirmquery1'], |
| | | setup(props: Record<string, any>, ctx: SetupContext) { |
| | | const { |
| | | onClose, |
| | | onConfirmQuery, |
| | | onOpen, |
| | | onReset, |
| | | formRef, |
| | | visible, |
| | | formItems, |
| | | formData, |
| | | } = useWmsInOutStockRecordQueryDrawer(props, ctx) |
| | | return () => ( |
| | | <BaseQueryDrawer |
| | | class={styles.drawer} |
| | | size="800px" |
| | | title={props.title || '高级查询'} |
| | | v-model={visible.value} |
| | | close-on-click-modal={true} |
| | | onReset={onReset} |
| | | onConfirmQueryForBase={onConfirmQuery} |
| | | onOpen={onOpen} |
| | | before-close={onClose} |
| | | onClose={onClose} |
| | | > |
| | | <DyForm |
| | | ref={formRef} |
| | | formData={formData.value} |
| | | labelWidth="150px" |
| | | formItemProps={formItems} |
| | | ></DyForm> |
| | | </BaseQueryDrawer> |
| | | ) |
| | | }, |
| | | }) |
| | |
| | | export const columns = [ |
| | | { |
| | | type: 'seq', |
| | | width: 60, |
| | | title: '序号', |
| | | }, |
| | | { |
| | | field: 'orderNo', |
| | | title: '单据编号', |
| | | }, |
| | | { |
| | | field: 'materialName', |
| | | title: '物料名称', |
| | | }, |
| | | { |
| | | field: 'materialNo', |
| | | title: '物料件号', |
| | | }, |
| | | { |
| | | field: 'stockTypeDesc', |
| | | title: '操作类型', |
| | | }, |
| | | { |
| | | field: 'containerNo', |
| | | title: '容器编号', |
| | | }, |
| | | { |
| | | field: 'materialModel', |
| | | title: '机型', |
| | | }, |
| | | { |
| | | field: 'operateTime', |
| | | title: '操作时间', |
| | | }, |
| | | { |
| | | field: 'remark', |
| | | title: '备注', |
| | | }, |
| | | { |
| | | field: 'materialId', |
| | | title: '物料ID', |
| | | }, |
| | | { |
| | | field: 'taskNo', |
| | | title: '任务号', |
| | | }, |
| | | { |
| | | field: 'sourcePlace', |
| | | title: '起始库位', |
| | | }, |
| | | { |
| | | field: 'toPlace', |
| | | title: '目标库位', |
| | | }, |
| | | { |
| | | field: 'sort', |
| | | title: '排序', |
| | | }, |
| | | { |
| | | field: 'creationTime', |
| | | title: '', |
| | | }, |
| | | { |
| | | field: 'deletionTime', |
| | | title: '', |
| | | }, |
| | | ] |
| | | export const columns = [ |
| | | { |
| | | type: 'seq', |
| | | width: 60, |
| | | title: '序号', |
| | | }, |
| | | { |
| | | field: 'orderNo', |
| | | title: '单据编号', |
| | | }, |
| | | { |
| | | field: 'materialName', |
| | | title: '物料名称', |
| | | }, |
| | | { |
| | | field: 'materialNo', |
| | | title: '物料件号', |
| | | }, |
| | | { |
| | | field: 'materialId', |
| | | title: '物料ID', |
| | | }, |
| | | { |
| | | field: 'taskNo', |
| | | title: '任务号', |
| | | }, |
| | | { |
| | | field: 'sourcePlace', |
| | | title: '起始库位', |
| | | }, |
| | | { |
| | | field: 'toPlace', |
| | | title: '目标库位', |
| | | }, |
| | | { |
| | | field: 'stockTypeDesc', |
| | | title: '操作类型', |
| | | }, |
| | | { |
| | | field: 'containerNo', |
| | | title: '容器编号', |
| | | }, |
| | | { |
| | | field: 'materialModel', |
| | | title: '机型', |
| | | }, |
| | | { |
| | | field: 'remark', |
| | | title: '备注', |
| | | }, |
| | | // { |
| | | // field: 'sort', |
| | | // title: '排序', |
| | | // }, |
| | | { |
| | | field: 'operateTime', |
| | | title: '操作时间', |
| | | width: 180, |
| | | }, |
| | | { |
| | | field: 'creationTime', |
| | | title: '创建时间', |
| | | width: 180, |
| | | }, |
| | | ] |
| | |
| | | import { computed, defineComponent, onMounted, reactive, ref } from 'vue' |
| | | import type { Ref } from 'vue' |
| | | import BaseTable from '@/components/Table/Table' |
| | | import styles from './WmsInOutStockRecord.module.scss' |
| | | import { useWmsInOutStockRecord } from '../../../Controllers/WmsInOutStockRecord' |
| | | import IconButton from '@/components/IconButton/IconButton' |
| | | import WmsInOutStockRecordDrawer from '../Dialog/WmsInOutStockRecordDrawer/WmsInOutStockRecordDrawer' |
| | | import WmsInOutStockRecordQueryDrawer from '../Dialog/WmsInOutStockRecordQueryDrawer/WmsInOutStockRecordQueryDrawer' |
| | | import Search from '@/components/Search/Search' |
| | | import { columns } from './Config' |
| | | import TdButton from '@/components/TdButton/TdButton' |
| | | import { vPermission } from '@/libs/Permission/Permission' |
| | | import { |
| | | getWmsEnumData |
| | | } from '@/widgets/WmsInOutStockRecord/Models/Service/WmsInOutStockRecordDrawer' |
| | | import { |
| | | ElInput, |
| | | ElSelect, |
| | | ElOption, |
| | | ElDatePicker, |
| | | ElForm, |
| | | ElFormItem, |
| | | } from 'element-plus' |
| | | import { injectModel } from '@/libs/Provider/Provider' |
| | | |
| | | interface RenderTableType { |
| | | url?: string |
| | | dataSource: Ref<any[]> |
| | | isDrag?: boolean |
| | | isChecked?: boolean |
| | | isHidePagination?: boolean |
| | | params?: Record<string, any> |
| | | autoHeight?: boolean |
| | | } |
| | | |
| | | export default defineComponent({ |
| | | name: 'WmsInOutStockRecord', |
| | | directives: { |
| | | permission: vPermission, |
| | | }, |
| | | setup(props, ctx) { |
| | | const { |
| | | dataSource, |
| | | contextMenu, |
| | | dialogConfig, |
| | | dialogConfigForQuery, |
| | | tableRef, |
| | | current, |
| | | search, |
| | | sort, |
| | | headers, |
| | | onError, |
| | | onSearch, |
| | | onRowClick, |
| | | onConfirmWmsInOutStockRecord, |
| | | onCheck, |
| | | onAddWmsInOutStockRecord, |
| | | onAdvancedQuery, |
| | | onExport, |
| | | openDetail, |
| | | onSuccess, |
| | | onBeforeUpload, |
| | | } = useWmsInOutStockRecord(props, ctx) |
| | | |
| | | //定义高级查询引用 |
| | | const wmsInOutStockRecordQueryDrawerRef=ref(null); |
| | | // 新增的查询条件 |
| | | const queryForm = ref({ |
| | | searchVal: '', |
| | | str_searchFormInputAttrs:[] |
| | | }) |
| | | //定义整体模糊查询的列数组(注意:必须大小写跟后端的实体类属性名一致,否则会导致匹配不对的问题) |
| | | const _searchFormInputAttrs = ref([ |
| | | 'MaterialNo', 'ContainerNo' |
| | | ]); |
| | | const searchFormInputAttrs_Placeholder = ref('请输入物料编码/托盘'); |
| | | |
| | | |
| | | // 动态枚举选项 |
| | | const enumOptions = reactive({ |
| | | stockType: [] as Array<{label: string; value: any }>, |
| | | }) |
| | | |
| | | // 获取枚举数据 |
| | | const fetchEnumData = async () => { |
| | | try { |
| | | const stockTypeEnumData = await getWmsEnumData({ |
| | | EnumName: 'StockTypeEnum', |
| | | }) |
| | | enumOptions.stockType = stockTypeEnumData.map((item) => ({ |
| | | label: item.description, |
| | | value: item.value, |
| | | })) |
| | | |
| | | } catch (error) { |
| | | console.error('获取枚举数据失败:', error) |
| | | } |
| | | } |
| | | |
| | | // 组件挂载时获取枚举数据 |
| | | onMounted(() => { |
| | | fetchEnumData() |
| | | }) |
| | | |
| | | // 定义响应式查询数据 |
| | | const _curHighQueryData = ref({ searchVal: '',str_searchFormInputAttrs:[] }); |
| | | // 新版的查询方法(主页面中的按钮【查询】) |
| | | const handleQueryForMain = async () => { |
| | | _curHighQueryData.value.searchVal = queryForm.value.searchVal; |
| | | _curHighQueryData.value.str_searchFormInputAttrs = _searchFormInputAttrs.value; |
| | | tableRef.value.getList(_curHighQueryData.value) |
| | | } |
| | | // 新版的查询方法(高级查询中的按钮【查询】) |
| | | const handleQuery = async (extraParams = {}) => { |
| | | let filteredData = commonGetHighQueryForm(extraParams); |
| | | commonSaveCurHighQueryData(filteredData); |
| | | tableRef.value.getList(filteredData) |
| | | } |
| | | // 新版的查询重置 |
| | | const resetQuery = () => { |
| | | queryForm.value.searchVal = '' |
| | | queryForm.value.str_searchFormInputAttrs=_searchFormInputAttrs.value; |
| | | } |
| | | //新版的导出方法 |
| | | const handleExport=()=>{ |
| | | onExport(_curHighQueryData.value); |
| | | } |
| | | // 新版的查询弹出框关闭方法 |
| | | const closeQuery = (extraParams={}) => { |
| | | let filteredData = commonGetHighQueryForm(extraParams); |
| | | console.log("closeQuery方法"); |
| | | console.log(filteredData); |
| | | commonSaveCurHighQueryData(filteredData); |
| | | } |
| | | //保存查询值 |
| | | const commonSaveCurHighQueryData=(filteredData={})=>{ |
| | | _curHighQueryData.value = { ..._curHighQueryData.value, ...filteredData }; |
| | | _curHighQueryData.value.searchVal = queryForm.value.searchVal |
| | | _curHighQueryData.value.str_searchFormInputAttrs =_searchFormInputAttrs.value; |
| | | } |
| | | //获取高级查询弹出框的查询值 |
| | | const commonGetHighQueryForm=(extraParams={})=>{ |
| | | // 过滤掉 undefined 的值 |
| | | let filteredData = Object.assign( |
| | | {}, |
| | | ...Object.entries(extraParams).map(([key, value]) => |
| | | value !== undefined ? { [key]: value } : {} |
| | | ) |
| | | ) |
| | | //组合模糊查询 |
| | | filteredData.searchVal = queryForm.value.searchVal |
| | | filteredData.str_searchFormInputAttrs =_searchFormInputAttrs.value; |
| | | return filteredData; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @returns 表格 |
| | | */ |
| | | const RenderBaseTable = (props: RenderTableType) => { |
| | | const { |
| | | url, |
| | | dataSource, |
| | | isDrag, |
| | | isChecked, |
| | | isHidePagination, |
| | | params, |
| | | autoHeight, |
| | | } = props |
| | | |
| | | return ( |
| | | <div |
| | | class={{ |
| | | [styles.wmsInOutStockRecordList]: true, |
| | | }} |
| | | > |
| | | <BaseTable |
| | | ref={tableRef} |
| | | url={url} |
| | | sortUrlTpl="/api/v1/HIAWms/wmsInOutStockRecord/{id}/adjustsort/{sort}" |
| | | v-model:dataSource={dataSource.value} |
| | | columns={columns} |
| | | contextMenu={contextMenu} |
| | | params={params} |
| | | isDrag={isDrag} |
| | | isChecked={isChecked} |
| | | autoHeight={autoHeight} |
| | | onCheck={onCheck} |
| | | onRowClick={onRowClick} |
| | | isHidePagination={isHidePagination} |
| | | pageSize={20} |
| | | v-slots={{ |
| | | name: ({ row }: any) => { |
| | | return row?.name ? ( |
| | | <TdButton |
| | | onClick={() => openDetail(row)} |
| | | text={<span style="color:#5a84ff">详情</span>} |
| | | icon="scale" |
| | | tip={row?.name} |
| | | hover |
| | | > |
| | | {row?.name} |
| | | </TdButton> |
| | | ) : ( |
| | | '-' |
| | | ) |
| | | }, |
| | | }} |
| | | ></BaseTable> |
| | | </div> |
| | | ) |
| | | } |
| | | |
| | | return () => { |
| | | return ( |
| | | <div class={styles.wmsInOutStockRecordContent}> |
| | | {/* 添加/编辑 */} |
| | | <WmsInOutStockRecordDrawer |
| | | v-model={dialogConfig.visible} |
| | | title={dialogConfig.title} |
| | | row={current.value} |
| | | sort={sort.value} |
| | | onConfirm={onConfirmWmsInOutStockRecord} |
| | | /> |
| | | {/* 高级查询 */} |
| | | <WmsInOutStockRecordQueryDrawer |
| | | ref="wmsInOutStockRecordQueryDrawerRef" |
| | | v-model={dialogConfigForQuery.visible} |
| | | title={dialogConfigForQuery.title} |
| | | row={current.value} |
| | | sort={sort.value} |
| | | onConfirmQuery={handleQuery} |
| | | onRestQuery={resetQuery} |
| | | onClose={closeQuery} |
| | | /> |
| | | |
| | | <div class={styles.headerContent}> |
| | | <div class={styles.header}> |
| | | <IconButton |
| | | v-permission="wmsInOutStockRecord-add" |
| | | icon="add-p" |
| | | onClick={onAddWmsInOutStockRecord} |
| | | type="primary" |
| | | > |
| | | 添加 |
| | | </IconButton> |
| | | <el-divider direction="vertical" /> |
| | | |
| | | <el-divider direction="vertical" /> |
| | | <el-upload |
| | | v-permission="wmsInOutStockRecord-import" |
| | | name="file" |
| | | accept=".xlsx,.xls,.csv" |
| | | show-file-list={false} |
| | | onError={onError} |
| | | onSuccess={onSuccess} |
| | | before-upload={onBeforeUpload} |
| | | headers={headers.value} |
| | | action="/api/v1/HIAWms/wmsInOutStockRecord/import" |
| | | > |
| | | <IconButton icon="in">导入</IconButton> |
| | | </el-upload> |
| | | |
| | | <IconButton |
| | | v-permission="wmsInOutStockRecord-output" |
| | | icon="out" |
| | | onClick={handleExport} |
| | | > |
| | | 导出 |
| | | </IconButton> |
| | | </div> |
| | | <ElFormItem style={{ marginTop: '15px' }}> |
| | | <ElFormItem label="关键字"> |
| | | <ElInput |
| | | v-model={queryForm.value.searchVal} |
| | | placeholder={searchFormInputAttrs_Placeholder.value} |
| | | clearable |
| | | class={styles.formItem} |
| | | /> |
| | | </ElFormItem> |
| | | <IconButton type="primary" icon="search" onClick={handleQueryForMain}> |
| | | 查询 |
| | | </IconButton> |
| | | import { computed, defineComponent, onMounted, reactive, ref } from 'vue' |
| | | import type { Ref } from 'vue' |
| | | import BaseTable from '@/components/Table/Table' |
| | | import styles from './WmsInOutStockRecord.module.scss' |
| | | import { useWmsInOutStockRecord } from '../../../Controllers/WmsInOutStockRecord' |
| | | import IconButton from '@/components/IconButton/IconButton' |
| | | import WmsInOutStockRecordDrawer from '../Dialog/WmsInOutStockRecordDrawer/WmsInOutStockRecordDrawer' |
| | | import WmsInOutStockRecordQueryDrawer from '../Dialog/WmsInOutStockRecordQueryDrawer/WmsInOutStockRecordQueryDrawer' |
| | | import Search from '@/components/Search/Search' |
| | | import { columns } from './Config' |
| | | import TdButton from '@/components/TdButton/TdButton' |
| | | import { vPermission } from '@/libs/Permission/Permission' |
| | | import { getWmsEnumData } from '@/widgets/WmsInOutStockRecord/Models/Service/WmsInOutStockRecordDrawer' |
| | | import dayjs from 'dayjs' |
| | | import { |
| | | ElInput, |
| | | ElSelect, |
| | | ElOption, |
| | | ElDatePicker, |
| | | ElForm, |
| | | ElFormItem, |
| | | } from 'element-plus' |
| | | import { injectModel } from '@/libs/Provider/Provider' |
| | | |
| | | interface RenderTableType { |
| | | url?: string |
| | | dataSource: Ref<any[]> |
| | | isDrag?: boolean |
| | | isChecked?: boolean |
| | | isHidePagination?: boolean |
| | | params?: Record<string, any> |
| | | autoHeight?: boolean |
| | | } |
| | | |
| | | export default defineComponent({ |
| | | name: 'WmsInOutStockRecord', |
| | | directives: { |
| | | permission: vPermission, |
| | | }, |
| | | setup(props, ctx) { |
| | | const { |
| | | dataSource, |
| | | contextMenu, |
| | | dialogConfig, |
| | | dialogConfigForQuery, |
| | | tableRef, |
| | | current, |
| | | search, |
| | | sort, |
| | | headers, |
| | | onError, |
| | | onSearch, |
| | | onRowClick, |
| | | onConfirmWmsInOutStockRecord, |
| | | onCheck, |
| | | onAddWmsInOutStockRecord, |
| | | onAdvancedQuery, |
| | | onExport, |
| | | openDetail, |
| | | onSuccess, |
| | | onBeforeUpload, |
| | | } = useWmsInOutStockRecord(props, ctx) |
| | | |
| | | //定义高级查询引用 |
| | | const wmsInOutStockRecordQueryDrawerRef = ref(null) |
| | | // 新增的查询条件 |
| | | const queryForm = ref({ |
| | | searchVal: '', |
| | | str_searchFormInputAttrs: [], |
| | | }) |
| | | //定义整体模糊查询的列数组(注意:必须大小写跟后端的实体类属性名一致,否则会导致匹配不对的问题) |
| | | const _searchFormInputAttrs = ref(['MaterialNo', 'ContainerNo']) |
| | | const searchFormInputAttrs_Placeholder = ref('请输入物料编码/托盘') |
| | | |
| | | // 动态枚举选项 |
| | | const enumOptions = reactive({ |
| | | stockType: [] as Array<{ label: string; value: any }>, |
| | | }) |
| | | |
| | | // 获取枚举数据 |
| | | const fetchEnumData = async () => { |
| | | try { |
| | | const stockTypeEnumData = await getWmsEnumData({ |
| | | EnumName: 'StockTypeEnum', |
| | | }) |
| | | enumOptions.stockType = stockTypeEnumData.map((item) => ({ |
| | | label: item.description, |
| | | value: item.value, |
| | | })) |
| | | } catch (error) { |
| | | console.error('获取枚举数据失败:', error) |
| | | } |
| | | } |
| | | |
| | | // 组件挂载时获取枚举数据 |
| | | onMounted(() => { |
| | | fetchEnumData() |
| | | }) |
| | | |
| | | // 定义响应式查询数据 |
| | | const _curHighQueryData = ref({ |
| | | searchVal: '', |
| | | str_searchFormInputAttrs: [], |
| | | }) |
| | | // 新版的查询方法(主页面中的按钮【查询】) |
| | | const handleQueryForMain = async () => { |
| | | _curHighQueryData.value.searchVal = queryForm.value.searchVal |
| | | _curHighQueryData.value.str_searchFormInputAttrs = |
| | | _searchFormInputAttrs.value |
| | | tableRef.value.getList(_curHighQueryData.value) |
| | | } |
| | | // 新版的查询方法(高级查询中的按钮【查询】) |
| | | const handleQuery = async (extraParams = {}) => { |
| | | let filteredData = commonGetHighQueryForm(extraParams) |
| | | commonSaveCurHighQueryData(filteredData) |
| | | tableRef.value.getList(filteredData) |
| | | } |
| | | // 新版的查询重置 |
| | | const resetQuery = () => { |
| | | queryForm.value.searchVal = '' |
| | | queryForm.value.str_searchFormInputAttrs = _searchFormInputAttrs.value |
| | | } |
| | | //新版的导出方法 |
| | | const handleExport = () => { |
| | | onExport(_curHighQueryData.value) |
| | | } |
| | | // 新版的查询弹出框关闭方法 |
| | | const closeQuery = (extraParams = {}) => { |
| | | let filteredData = commonGetHighQueryForm(extraParams) |
| | | console.log('closeQuery方法') |
| | | console.log(filteredData) |
| | | commonSaveCurHighQueryData(filteredData) |
| | | } |
| | | //保存查询值 |
| | | const commonSaveCurHighQueryData = (filteredData = {}) => { |
| | | _curHighQueryData.value = { ..._curHighQueryData.value, ...filteredData } |
| | | _curHighQueryData.value.searchVal = queryForm.value.searchVal |
| | | _curHighQueryData.value.str_searchFormInputAttrs = |
| | | _searchFormInputAttrs.value |
| | | } |
| | | //获取高级查询弹出框的查询值 |
| | | const commonGetHighQueryForm = (extraParams = {}) => { |
| | | // 过滤掉 undefined 的值 |
| | | let filteredData = Object.assign( |
| | | {}, |
| | | ...Object.entries(extraParams).map(([key, value]) => |
| | | value !== undefined ? { [key]: value } : {} |
| | | ) |
| | | ) |
| | | //组合模糊查询 |
| | | filteredData.searchVal = queryForm.value.searchVal |
| | | filteredData.str_searchFormInputAttrs = _searchFormInputAttrs.value |
| | | return filteredData |
| | | } |
| | | |
| | | /** |
| | | * @returns 表格 |
| | | */ |
| | | const RenderBaseTable = (props: RenderTableType) => { |
| | | const { |
| | | url, |
| | | dataSource, |
| | | isDrag, |
| | | isChecked, |
| | | isHidePagination, |
| | | params, |
| | | autoHeight, |
| | | } = props |
| | | |
| | | return ( |
| | | <div |
| | | class={{ |
| | | [styles.wmsInOutStockRecordList]: true, |
| | | }} |
| | | > |
| | | <BaseTable |
| | | ref={tableRef} |
| | | url={url} |
| | | sortUrlTpl="/api/v1/HIAWms/wmsInOutStockRecord/{id}/adjustsort/{sort}" |
| | | v-model:dataSource={dataSource.value} |
| | | columns={columns} |
| | | contextMenu={contextMenu} |
| | | params={params} |
| | | isDrag={isDrag} |
| | | isChecked={isChecked} |
| | | autoHeight={autoHeight} |
| | | onCheck={onCheck} |
| | | onRowClick={onRowClick} |
| | | isHidePagination={isHidePagination} |
| | | pageSize={20} |
| | | v-slots={{ |
| | | creationTime: ({ row }: any) => { |
| | | return ( |
| | | <div> |
| | | {row.creationTime != null |
| | | ? dayjs(row.creationTime).format('YYYY-MM-DD HH:mm:ss') |
| | | : '-'} |
| | | </div> |
| | | ) |
| | | }, |
| | | operateTime: ({ row }: any) => { |
| | | return ( |
| | | <div> |
| | | {row.operateTime != null |
| | | ? dayjs(row.operateTime).format('YYYY-MM-DD HH:mm:ss') |
| | | : '-'} |
| | | </div> |
| | | ) |
| | | }, |
| | | name: ({ row }: any) => { |
| | | return row?.name ? ( |
| | | <TdButton |
| | | onClick={() => openDetail(row)} |
| | | text={<span style="color:#5a84ff">详情</span>} |
| | | icon="scale" |
| | | tip={row?.name} |
| | | hover |
| | | > |
| | | {row?.name} |
| | | </TdButton> |
| | | ) : ( |
| | | '-' |
| | | ) |
| | | }, |
| | | }} |
| | | ></BaseTable> |
| | | </div> |
| | | ) |
| | | } |
| | | |
| | | return () => { |
| | | return ( |
| | | <div class={styles.wmsInOutStockRecordContent}> |
| | | {/* 添加/编辑 */} |
| | | <WmsInOutStockRecordDrawer |
| | | v-model={dialogConfig.visible} |
| | | title={dialogConfig.title} |
| | | row={current.value} |
| | | sort={sort.value} |
| | | onConfirm={onConfirmWmsInOutStockRecord} |
| | | /> |
| | | {/* 高级查询 */} |
| | | <WmsInOutStockRecordQueryDrawer |
| | | ref="wmsInOutStockRecordQueryDrawerRef" |
| | | v-model={dialogConfigForQuery.visible} |
| | | title={dialogConfigForQuery.title} |
| | | row={current.value} |
| | | sort={sort.value} |
| | | onConfirmQuery={handleQuery} |
| | | onRestQuery={resetQuery} |
| | | onClose={closeQuery} |
| | | /> |
| | | |
| | | <div class={styles.headerContent}> |
| | | <div class={styles.header}> |
| | | <IconButton |
| | | v-permission="wmsInOutStockRecord-add" |
| | | icon="add-p" |
| | | onClick={onAddWmsInOutStockRecord} |
| | | type="primary" |
| | | > |
| | | 添加 |
| | | </IconButton> |
| | | <el-divider direction="vertical" /> |
| | | |
| | | <el-divider direction="vertical" /> |
| | | {/* <el-upload |
| | | v-permission="wmsInOutStockRecord-import" |
| | | name="file" |
| | | accept=".xlsx,.xls,.csv" |
| | | show-file-list={false} |
| | | onError={onError} |
| | | onSuccess={onSuccess} |
| | | before-upload={onBeforeUpload} |
| | | headers={headers.value} |
| | | action="/api/v1/HIAWms/wmsInOutStockRecord/import" |
| | | > |
| | | <IconButton icon="in">导入</IconButton> |
| | | </el-upload> */} |
| | | |
| | | <IconButton |
| | | v-permission="wmsInOutStockRecord-output" |
| | | icon="out" |
| | | onClick={handleExport} |
| | | > |
| | | 导出 |
| | | </IconButton> |
| | | </div> |
| | | <ElFormItem style={{ marginTop: '15px' }}> |
| | | <ElFormItem label="关键字"> |
| | | <ElInput |
| | | v-model={queryForm.value.searchVal} |
| | | placeholder={searchFormInputAttrs_Placeholder.value} |
| | | clearable |
| | | class={styles.formItem} |
| | | /> |
| | | </ElFormItem> |
| | | <IconButton |
| | | type="primary" |
| | | icon="search" |
| | | onClick={handleQueryForMain} |
| | | > |
| | | 查询 |
| | | </IconButton> |
| | | {/* <IconButton style="" icon="refresh" onClick={resetQuery}> |
| | | 重置 |
| | | </IconButton> */} |
| | | <IconButton |
| | | v-permission="wmsInOutStockRecord-add" |
| | | icon="search" |
| | | onClick={onAdvancedQuery} |
| | | type="primary" |
| | | > |
| | | 高级查询 |
| | | </IconButton> |
| | | </ElFormItem> |
| | | </div> |
| | | |
| | | <RenderBaseTable |
| | | url="/api/v1/HIAWms/wmsInOutStockRecord/page" |
| | | dataSource={dataSource} |
| | | isChecked={true} |
| | | isDrag={true} |
| | | /> |
| | | </div> |
| | | ) |
| | | } |
| | | }, |
| | | }) |
| | | </IconButton> */} |
| | | <IconButton |
| | | v-permission="wmsInOutStockRecord-add" |
| | | icon="search" |
| | | onClick={onAdvancedQuery} |
| | | type="primary" |
| | | > |
| | | 高级查询 |
| | | </IconButton> |
| | | </ElFormItem> |
| | | </div> |
| | | |
| | | <RenderBaseTable |
| | | url="/api/v1/HIAWms/wmsInOutStockRecord/page" |
| | | dataSource={dataSource} |
| | | isChecked={true} |
| | | isDrag={true} |
| | | /> |
| | | </div> |
| | | ) |
| | | } |
| | | }, |
| | | }) |
| | |
| | | import { |
| | | ref, |
| | | onMounted, |
| | | reactive, |
| | | computed, |
| | | Ref, |
| | | watch, |
| | | SetupContext, |
| | | h, |
| | | } from 'vue' |
| | | import { injectModel } from '@/libs/Provider/Provider' |
| | | import { WmsTaskDrawer } from '../Models/WmsTaskDrawer' |
| | | import { ElMessage } from 'element-plus' |
| | | import isEqual from 'lodash/isEqual' |
| | | import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox' |
| | | import { cloneDeep } from 'lodash' |
| | | |
| | | export const useWmsTaskDrawer = (props: any, ctx?: any) => { |
| | | const wmsTaskDrawer = injectModel<WmsTaskDrawer>('wmsTaskDrawer') |
| | | /** |
| | | * 用来对比的初始化数据 |
| | | */ |
| | | const initiateData: Ref<Record<string, any>> = ref({}) |
| | | const formData = ref<Record<string, any>>({}) |
| | | // ref |
| | | const formRef = ref() |
| | | |
| | | const disabled = ref(false) |
| | | |
| | | const current = computed(() => { |
| | | return props.row || null |
| | | }) |
| | | |
| | | const inputNumber = (attrs) => { |
| | | return ( |
| | | <el-input-number |
| | | min="1" |
| | | step="1" |
| | | precision="0" |
| | | {...attrs} |
| | | ></el-input-number> |
| | | ) |
| | | } |
| | | const datePicker = (attrs) => { |
| | | return ( |
| | | <el-date-picker |
| | | type="datetime" |
| | | format="YYYY-MM-DD" |
| | | {...attrs} |
| | | ></el-date-picker> |
| | | ) |
| | | } |
| | | |
| | | const dateTimePicker = (attrs) => { |
| | | return ( |
| | | <el-date-picker |
| | | type="datetime" |
| | | format="YYYY-MM-DD HH:mm:ss" |
| | | {...attrs} |
| | | ></el-date-picker> |
| | | ) |
| | | } |
| | | |
| | | const visible = computed({ |
| | | get() { |
| | | return props.modelValue |
| | | }, |
| | | set(val) { |
| | | ctx.emit('update:modelValue', val) |
| | | }, |
| | | }) |
| | | /** |
| | | * 添加的form字段 |
| | | */ |
| | | const formItems = reactive([ |
| | | { |
| | | label: '任务号', |
| | | prop: 'taskNo', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入任务号', |
| | | rules: [{required: true, message: '任务号不能为空', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '任务类型', |
| | | prop: 'taskType', |
| | | el: 'select', |
| | | //disabled: disabled, |
| | | placeholder: '请输入任务类型', |
| | | rules: [{required: true, message: '任务类型不能为空', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '任务等级', |
| | | prop: 'taskLevel', |
| | | el: (props: any, { attrs }: SetupContext) => { |
| | | return h(inputNumber, { |
| | | ...props, |
| | | clearable: true, |
| | | ...attrs, |
| | | }) |
| | | }, |
| | | width: '100%', |
| | | step: 1, |
| | | precision: 0, |
| | | //disabled: disabled, |
| | | placeholder: '请输入任务等级', |
| | | rules: [{required: true, message: '任务等级不能为空', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '任务状态', |
| | | prop: 'taskStatus', |
| | | el: 'select', |
| | | //disabled: disabled, |
| | | placeholder: '请输入任务状态', |
| | | rules: [{required: true, message: '任务状态不能为空', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '托盘编号', |
| | | prop: 'containerNo', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入托盘编号', |
| | | }, |
| | | { |
| | | label: '起始库位', |
| | | prop: 'sourcePlace', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入起始库位', |
| | | }, |
| | | { |
| | | label: '目标库位', |
| | | prop: 'toPlace', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入目标库位', |
| | | }, |
| | | { |
| | | label: '巷道', |
| | | prop: 'aisle', |
| | | el: (props: any, { attrs }: SetupContext) => { |
| | | return h(inputNumber, { |
| | | ...props, |
| | | clearable: true, |
| | | ...attrs, |
| | | }) |
| | | }, |
| | | width: '100%', |
| | | step: 1, |
| | | precision: 0, |
| | | //disabled: disabled, |
| | | placeholder: '请输入巷道', |
| | | }, |
| | | { |
| | | label: '堆垛机ID', |
| | | prop: 'dodeviceId', |
| | | el: (props: any, { attrs }: SetupContext) => { |
| | | return h(inputNumber, { |
| | | ...props, |
| | | clearable: true, |
| | | ...attrs, |
| | | }) |
| | | }, |
| | | width: '100%', |
| | | step: 1, |
| | | precision: 0, |
| | | //disabled: disabled, |
| | | placeholder: '请输入堆垛机ID', |
| | | }, |
| | | { |
| | | label: '设备类型', |
| | | prop: 'dodevicetype', |
| | | el: (props: any, { attrs }: SetupContext) => { |
| | | return h(inputNumber, { |
| | | ...props, |
| | | clearable: true, |
| | | ...attrs, |
| | | }) |
| | | }, |
| | | width: '100%', |
| | | step: 1, |
| | | precision: 0, |
| | | //disabled: disabled, |
| | | placeholder: '请输入设备类型', |
| | | rules: [{required: true, message: '设备类型不能为空', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '设备任务状态', |
| | | prop: 'taskDodeviceStatus', |
| | | el: (props: any, { attrs }: SetupContext) => { |
| | | return h(inputNumber, { |
| | | ...props, |
| | | clearable: true, |
| | | ...attrs, |
| | | }) |
| | | }, |
| | | width: '100%', |
| | | step: 1, |
| | | precision: 0, |
| | | //disabled: disabled, |
| | | placeholder: '请输入设备任务状态', |
| | | rules: [{required: true, message: '设备任务状态不能为空', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: 'WCS是否可以读取', |
| | | prop: 'isRead', |
| | | el: 'select', |
| | | //disabled: disabled, |
| | | placeholder: '请输入WCS是否可以读取', |
| | | rules: [{required: true, message: 'WCS是否可以读取不能为空', trigger: 'blur' }], |
| | | options: [{label: '是',value: 'true'}, {label: '否',value: 'false'}] |
| | | }, |
| | | { |
| | | label: '子任务类型', |
| | | prop: 'sonTaskType', |
| | | el: 'select', |
| | | //disabled: disabled, |
| | | placeholder: '请输入子任务类型', |
| | | }, |
| | | { |
| | | label: '来源单据号', |
| | | prop: 'sourceOrderNo', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入来源单据号', |
| | | }, |
| | | { |
| | | label: '下个任务是否生成成功', |
| | | prop: 'isNextTask', |
| | | el: (props: any, { attrs }: SetupContext) => { |
| | | return h(inputNumber, { |
| | | ...props, |
| | | clearable: true, |
| | | ...attrs, |
| | | }) |
| | | }, |
| | | width: '100%', |
| | | step: 1, |
| | | precision: 0, |
| | | //disabled: disabled, |
| | | placeholder: '请输入下个任务是否生成成功', |
| | | }, |
| | | { |
| | | label: '可变变量1', |
| | | prop: 'mutableParam1', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入可变变量1', |
| | | }, |
| | | { |
| | | label: '可变变量2', |
| | | prop: 'mutableParam2', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入可变变量2', |
| | | }, |
| | | { |
| | | label: '可变变量3', |
| | | prop: 'mutableParam3', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入可变变量3', |
| | | }, |
| | | ]) |
| | | /** |
| | | * 校验是否有数据变化 |
| | | */ |
| | | const checkIsEqualObject = () => { |
| | | const data = { |
| | | formData: formData.value, |
| | | } |
| | | const check = isEqual(initiateData.value, data) |
| | | return check |
| | | } |
| | | |
| | | const onClose = (done: () => void) => { |
| | | if (visible.value) { |
| | | if (checkIsEqualObject()) { |
| | | visible.value = false |
| | | done && done() |
| | | } else { |
| | | ConfirmBox('是否保存设置?') |
| | | .then(() => { |
| | | onConfirm() |
| | | }) |
| | | .catch(() => { |
| | | visible.value = false |
| | | done && done() |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | /** |
| | | * 保存 |
| | | */ |
| | | const onConfirm = async () => { |
| | | await formRef.value?.validate() |
| | | const data = { |
| | | taskNo: formData.value.taskNo, |
| | | taskType: formData.value.taskType, |
| | | taskLevel: formData.value.taskLevel, |
| | | taskStatus: formData.value.taskStatus, |
| | | containerNo: formData.value.containerNo, |
| | | sourcePlace: formData.value.sourcePlace, |
| | | toPlace: formData.value.toPlace, |
| | | aisle: formData.value.aisle, |
| | | dodeviceId: formData.value.dodeviceId, |
| | | dodevicetype: formData.value.dodevicetype, |
| | | taskDodeviceStatus: formData.value.taskDodeviceStatus, |
| | | isRead: formData.value.isRead, |
| | | sonTaskType: formData.value.sonTaskType, |
| | | sourceOrderNo: formData.value.sourceOrderNo, |
| | | isNextTask: formData.value.isNextTask, |
| | | mutableParam1: formData.value.mutableParam1, |
| | | mutableParam2: formData.value.mutableParam2, |
| | | mutableParam3: formData.value.mutableParam3, |
| | | } |
| | | if (!current.value) { |
| | | await wmsTaskDrawer.addWmsTask(data) |
| | | } else { |
| | | const id = current.value.id |
| | | await wmsTaskDrawer.updateWmsTask(id, data) |
| | | } |
| | | ElMessage.success('保存成功') |
| | | ctx.emit('confirm') |
| | | } |
| | | |
| | | const updateCheckData = () => { |
| | | initiateData.value = { |
| | | formData: { |
| | | ...formData.value, |
| | | }, |
| | | } |
| | | } |
| | | const updateFormItemOptions = (propName: string, enumData: any[]) => { |
| | | const item = formItems.find((item) => item.prop === propName) |
| | | if (item && enumData) { |
| | | item.options = enumData.map((item) => ({ |
| | | label: item.description, |
| | | value: item.value, |
| | | })) |
| | | } |
| | | } |
| | | /** |
| | | * 通用查询枚举 |
| | | */ |
| | | const commonQueryEnumForFrom = async () => { |
| | | const taskTypeEnumEnum = await wmsTaskDrawer.getWmsEnumData({ |
| | | EnumName: 'TaskTypeEnum', |
| | | }) |
| | | updateFormItemOptions('taskType', taskTypeEnumEnum) |
| | | const wmsTaskStatusEnum = await wmsTaskDrawer.getWmsEnumData({ |
| | | EnumName: 'WmsTaskStatus', |
| | | }) |
| | | updateFormItemOptions('taskStatus', wmsTaskStatusEnum) |
| | | const sonTaskTypeEnumEnum = await wmsTaskDrawer.getWmsEnumData({ |
| | | EnumName: 'SonTaskTypeEnum', |
| | | }) |
| | | updateFormItemOptions('sonTaskType', sonTaskTypeEnumEnum) |
| | | |
| | | } |
| | | commonQueryEnumForFrom() |
| | | /** |
| | | * 弹窗打开获取详情 |
| | | */ |
| | | const onOpen = async () => { |
| | | if (current.value) { |
| | | const res = await wmsTaskDrawer.getWmsTaskDetail(current.value) |
| | | |
| | | formData.value = { |
| | | taskNo: res.taskNo, |
| | | taskType: res.taskType, |
| | | taskLevel: res.taskLevel, |
| | | taskStatus: res.taskStatus, |
| | | containerNo: res.containerNo, |
| | | sourcePlace: res.sourcePlace, |
| | | toPlace: res.toPlace, |
| | | aisle: res.aisle, |
| | | dodeviceId: res.dodeviceId, |
| | | dodevicetype: res.dodevicetype, |
| | | taskDodeviceStatus: res.taskDodeviceStatus, |
| | | isRead: res.isRead, |
| | | sonTaskType: res.sonTaskType, |
| | | sourceOrderNo: res.sourceOrderNo, |
| | | isNextTask: res.isNextTask, |
| | | mutableParam1: res.mutableParam1, |
| | | mutableParam2: res.mutableParam2, |
| | | mutableParam3: res.mutableParam3, |
| | | id: res.id, |
| | | } |
| | | disabled.value = true |
| | | updateCheckData() |
| | | } else { |
| | | formData.value = {} |
| | | |
| | | disabled.value = false |
| | | updateCheckData() |
| | | } |
| | | } |
| | | |
| | | watch(() => current.value, onOpen) |
| | | |
| | | return { |
| | | formItems, |
| | | formData, |
| | | visible, |
| | | formRef, |
| | | onOpen, |
| | | onClose, |
| | | onConfirm, |
| | | } |
| | | } |
| | | import { |
| | | ref, |
| | | onMounted, |
| | | reactive, |
| | | computed, |
| | | Ref, |
| | | watch, |
| | | SetupContext, |
| | | h, |
| | | } from 'vue' |
| | | import { injectModel } from '@/libs/Provider/Provider' |
| | | import { WmsTaskDrawer } from '../Models/WmsTaskDrawer' |
| | | import { ElMessage } from 'element-plus' |
| | | import isEqual from 'lodash/isEqual' |
| | | import { ConfirmBox } from '@/components/ConfirmBox/ConfirmBox' |
| | | import { cloneDeep } from 'lodash' |
| | | |
| | | export const useWmsTaskDrawer = (props: any, ctx?: any) => { |
| | | const wmsTaskDrawer = injectModel<WmsTaskDrawer>('wmsTaskDrawer') |
| | | /** |
| | | * 用来对比的初始化数据 |
| | | */ |
| | | const initiateData: Ref<Record<string, any>> = ref({}) |
| | | const formData = ref<Record<string, any>>({}) |
| | | // ref |
| | | const formRef = ref() |
| | | |
| | | const disabled = ref(false) |
| | | |
| | | const current = computed(() => { |
| | | return props.row || null |
| | | }) |
| | | |
| | | const inputNumber = (attrs) => { |
| | | return ( |
| | | <el-input-number |
| | | min="1" |
| | | step="1" |
| | | precision="0" |
| | | {...attrs} |
| | | ></el-input-number> |
| | | ) |
| | | } |
| | | const datePicker = (attrs) => { |
| | | return ( |
| | | <el-date-picker |
| | | type="datetime" |
| | | format="YYYY-MM-DD" |
| | | {...attrs} |
| | | ></el-date-picker> |
| | | ) |
| | | } |
| | | |
| | | const dateTimePicker = (attrs) => { |
| | | return ( |
| | | <el-date-picker |
| | | type="datetime" |
| | | format="YYYY-MM-DD HH:mm:ss" |
| | | {...attrs} |
| | | ></el-date-picker> |
| | | ) |
| | | } |
| | | |
| | | const visible = computed({ |
| | | get() { |
| | | return props.modelValue |
| | | }, |
| | | set(val) { |
| | | ctx.emit('update:modelValue', val) |
| | | }, |
| | | }) |
| | | /** |
| | | * 添加的form字段 |
| | | */ |
| | | const formItems = reactive([ |
| | | { |
| | | label: '任务号', |
| | | prop: 'taskNo', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入任务号', |
| | | rules: [{ required: true, message: '任务号不能为空', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '任务类型', |
| | | prop: 'taskType', |
| | | el: 'select', |
| | | //disabled: disabled, |
| | | placeholder: '请输入任务类型', |
| | | rules: [{ required: true, message: '任务类型不能为空', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '子任务类型', |
| | | prop: 'sonTaskType', |
| | | el: 'select', |
| | | //disabled: disabled, |
| | | placeholder: '请输入子任务类型', |
| | | }, |
| | | { |
| | | label: '任务等级', |
| | | prop: 'taskLevel', |
| | | el: (props: any, { attrs }: SetupContext) => { |
| | | return h(inputNumber, { |
| | | ...props, |
| | | clearable: true, |
| | | ...attrs, |
| | | }) |
| | | }, |
| | | width: '100%', |
| | | step: 1, |
| | | precision: 0, |
| | | //disabled: disabled, |
| | | placeholder: '请输入任务等级', |
| | | rules: [{ required: true, message: '任务等级不能为空', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '任务状态', |
| | | prop: 'taskStatus', |
| | | el: 'select', |
| | | options: [], |
| | | //disabled: disabled, |
| | | placeholder: '请输入任务状态', |
| | | rules: [{ required: true, message: '任务状态不能为空', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '托盘编号', |
| | | prop: 'containerNo', |
| | | el: 'input', |
| | | rules: [{ required: true, message: '托盘编号不能为空', trigger: 'blur' }], |
| | | //disabled: disabled, |
| | | placeholder: '请输入托盘编号', |
| | | }, |
| | | { |
| | | label: '起始库位', |
| | | prop: 'sourcePlace', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | rules: [{ required: true, message: '起始库位不能为空', trigger: 'blur' }], |
| | | placeholder: '请输入起始库位', |
| | | }, |
| | | { |
| | | label: '目标库位', |
| | | prop: 'toPlace', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | rules: [{ required: true, message: '目标库位不能为空', trigger: 'blur' }], |
| | | placeholder: '请输入目标库位', |
| | | }, |
| | | { |
| | | label: '巷道', |
| | | prop: 'aisle', |
| | | el: (props: any, { attrs }: SetupContext) => { |
| | | return h(inputNumber, { |
| | | ...props, |
| | | clearable: true, |
| | | ...attrs, |
| | | }) |
| | | }, |
| | | width: '100%', |
| | | step: 1, |
| | | precision: 0, |
| | | rules: [{ required: true, message: '巷道不能为空', trigger: 'blur' }], |
| | | //disabled: disabled, |
| | | placeholder: '请输入巷道', |
| | | }, |
| | | { |
| | | label: '堆垛机ID', |
| | | prop: 'dodeviceId', |
| | | el: (props: any, { attrs }: SetupContext) => { |
| | | return h(inputNumber, { |
| | | ...props, |
| | | clearable: true, |
| | | ...attrs, |
| | | }) |
| | | }, |
| | | width: '100%', |
| | | step: 1, |
| | | precision: 0, |
| | | rules: [{ required: true, message: '堆垛机ID不能为空', trigger: 'blur' }], |
| | | //disabled: disabled, |
| | | placeholder: '请输入堆垛机ID', |
| | | }, |
| | | { |
| | | label: '设备类型', |
| | | prop: 'dodevicetype', |
| | | el: 'select', |
| | | options: [], |
| | | width: '100%', |
| | | //disabled: disabled, |
| | | placeholder: '请输入设备类型', |
| | | rules: [{ required: true, message: '设备类型不能为空', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '设备任务状态', |
| | | prop: 'taskDodeviceStatus', |
| | | el: 'select', |
| | | options: [], |
| | | width: '100%', |
| | | //disabled: disabled, |
| | | placeholder: '请输入设备任务状态', |
| | | rules: [ |
| | | { required: true, message: '设备任务状态不能为空', trigger: 'blur' }, |
| | | ], |
| | | }, |
| | | { |
| | | label: 'WCS是否可以读取', |
| | | prop: 'isRead', |
| | | el: 'select', |
| | | //disabled: disabled, |
| | | placeholder: '请输入WCS是否可以读取', |
| | | rules: [ |
| | | { required: true, message: 'WCS是否可以读取不能为空', trigger: 'blur' }, |
| | | ], |
| | | options: [ |
| | | { label: '是', value: true }, |
| | | { label: '否', value: false }, |
| | | ], |
| | | }, |
| | | { |
| | | label: '来源单据号', |
| | | prop: 'sourceOrderNo', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入来源单据号', |
| | | }, |
| | | { |
| | | label: '下个任务是否生成', |
| | | prop: 'isNextTask', |
| | | el: (props: any, { attrs }: SetupContext) => { |
| | | return h(inputNumber, { |
| | | ...props, |
| | | clearable: true, |
| | | ...attrs, |
| | | }) |
| | | }, |
| | | width: '100%', |
| | | step: 1, |
| | | precision: 0, |
| | | //disabled: disabled, |
| | | placeholder: '请输入下个任务是否生成成功', |
| | | }, |
| | | { |
| | | label: '可变变量1', |
| | | prop: 'mutableParam1', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入可变变量1', |
| | | }, |
| | | { |
| | | label: '可变变量2', |
| | | prop: 'mutableParam2', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入可变变量2', |
| | | }, |
| | | { |
| | | label: '可变变量3', |
| | | prop: 'mutableParam3', |
| | | el: 'input', |
| | | //disabled: disabled, |
| | | placeholder: '请输入可变变量3', |
| | | }, |
| | | ]) |
| | | /** |
| | | * 校验是否有数据变化 |
| | | */ |
| | | const checkIsEqualObject = () => { |
| | | const data = { |
| | | formData: formData.value, |
| | | } |
| | | const check = isEqual(initiateData.value, data) |
| | | return check |
| | | } |
| | | |
| | | const onClose = (done: () => void) => { |
| | | if (visible.value) { |
| | | if (checkIsEqualObject()) { |
| | | visible.value = false |
| | | done && done() |
| | | } else { |
| | | ConfirmBox('是否保存设置?') |
| | | .then(() => { |
| | | onConfirm() |
| | | }) |
| | | .catch(() => { |
| | | visible.value = false |
| | | done && done() |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | /** |
| | | * 保存 |
| | | */ |
| | | const onConfirm = async () => { |
| | | await formRef.value?.validate() |
| | | const data = { |
| | | taskNo: formData.value.taskNo, |
| | | taskType: formData.value.taskType, |
| | | taskLevel: formData.value.taskLevel, |
| | | taskStatus: formData.value.taskStatus, |
| | | containerNo: formData.value.containerNo, |
| | | sourcePlace: formData.value.sourcePlace, |
| | | toPlace: formData.value.toPlace, |
| | | aisle: formData.value.aisle, |
| | | dodeviceId: formData.value.dodeviceId, |
| | | dodevicetype: formData.value.dodevicetype, |
| | | taskDodeviceStatus: formData.value.taskDodeviceStatus, |
| | | isRead: formData.value.isRead, |
| | | sonTaskType: formData.value.sonTaskType, |
| | | sourceOrderNo: formData.value.sourceOrderNo, |
| | | isNextTask: formData.value.isNextTask, |
| | | mutableParam1: formData.value.mutableParam1, |
| | | mutableParam2: formData.value.mutableParam2, |
| | | mutableParam3: formData.value.mutableParam3, |
| | | } |
| | | if (!current.value) { |
| | | await wmsTaskDrawer.addWmsTask(data) |
| | | } else { |
| | | const id = current.value.id |
| | | await wmsTaskDrawer.updateWmsTask(id, data) |
| | | } |
| | | ElMessage.success('保存成功') |
| | | ctx.emit('confirm') |
| | | } |
| | | |
| | | const updateCheckData = () => { |
| | | initiateData.value = { |
| | | formData: { |
| | | ...formData.value, |
| | | }, |
| | | } |
| | | } |
| | | const updateFormItemOptions = (propName: string, enumData: any[]) => { |
| | | const item = formItems.find((item) => item.prop === propName) |
| | | if (item && enumData) { |
| | | item.options = enumData.map((item) => ({ |
| | | label: item.description, |
| | | value: item.value, |
| | | })) |
| | | } |
| | | } |
| | | /** |
| | | * 通用查询枚举 |
| | | */ |
| | | const commonQueryEnumForFrom = async () => { |
| | | const taskTypeEnumEnum = await wmsTaskDrawer.getWmsEnumData({ |
| | | EnumName: 'TaskTypeEnum', |
| | | }) |
| | | updateFormItemOptions('taskType', taskTypeEnumEnum) |
| | | const wmsTaskStatusEnum = await wmsTaskDrawer.getWmsEnumData({ |
| | | EnumName: 'WmsTaskStatus', |
| | | }) |
| | | updateFormItemOptions('taskStatus', wmsTaskStatusEnum) |
| | | const sonTaskTypeEnumEnum = await wmsTaskDrawer.getWmsEnumData({ |
| | | EnumName: 'SonTaskTypeEnum', |
| | | }) |
| | | updateFormItemOptions('sonTaskType', sonTaskTypeEnumEnum) |
| | | |
| | | const dodevicetypeEnum = await wmsTaskDrawer.getWmsEnumData({ |
| | | EnumName: 'DodevicetypeEnum', |
| | | }) |
| | | updateFormItemOptions('dodevicetype', dodevicetypeEnum) |
| | | |
| | | const taskDodeviceStatus = await wmsTaskDrawer.getWmsEnumData({ |
| | | EnumName: 'TaskDodeviceStatus', |
| | | }) |
| | | updateFormItemOptions('taskDodeviceStatus', taskDodeviceStatus) |
| | | } |
| | | commonQueryEnumForFrom() |
| | | /** |
| | | * 弹窗打开获取详情 |
| | | */ |
| | | const onOpen = async () => { |
| | | if (current.value) { |
| | | const res = await wmsTaskDrawer.getWmsTaskDetail(current.value) |
| | | |
| | | formData.value = { |
| | | taskNo: res.taskNo, |
| | | taskType: res.taskType, |
| | | taskLevel: res.taskLevel, |
| | | taskStatus: res.taskStatus, |
| | | containerNo: res.containerNo, |
| | | sourcePlace: res.sourcePlace, |
| | | toPlace: res.toPlace, |
| | | aisle: res.aisle, |
| | | dodeviceId: res.dodeviceId, |
| | | dodevicetype: res.dodevicetype, |
| | | taskDodeviceStatus: res.taskDodeviceStatus, |
| | | isRead: res.isRead, |
| | | sonTaskType: res.sonTaskType, |
| | | sourceOrderNo: res.sourceOrderNo, |
| | | isNextTask: res.isNextTask, |
| | | mutableParam1: res.mutableParam1, |
| | | mutableParam2: res.mutableParam2, |
| | | mutableParam3: res.mutableParam3, |
| | | id: res.id, |
| | | } |
| | | disabled.value = true |
| | | updateCheckData() |
| | | } else { |
| | | formData.value = { |
| | | taskDodeviceStatus: 1, |
| | | isRead: true, |
| | | isNextTask: 1, |
| | | taskStatus: 1, |
| | | } |
| | | |
| | | disabled.value = false |
| | | updateCheckData() |
| | | } |
| | | } |
| | | |
| | | watch(() => current.value, onOpen) |
| | | |
| | | return { |
| | | formItems, |
| | | formData, |
| | | visible, |
| | | formRef, |
| | | onOpen, |
| | | onClose, |
| | | onConfirm, |
| | | } |
| | | } |
| | |
| | | step: 1, |
| | | precision: 0, |
| | | //disabled: disabled, |
| | | placeholder: '请输入下个任务是否生成成功', |
| | | placeholder: '请输入下个任务是否生成', |
| | | }, |
| | | { |
| | | label: '可变变量1', |
| | |
| | | import { SetupContext, defineComponent } from 'vue' |
| | | import BaseDrawer from '@/components/BaseDrawer/BaseDrawer' |
| | | import styles from './WmsTaskDrawer.module.scss' |
| | | import { useWmsTaskDrawer } from '../../../../Controllers/WmsTaskDrawer.tsx' |
| | | import DyForm from '@/components/DyForm/DyForm' |
| | | |
| | | // @ts-ignore |
| | | export default defineComponent<{ |
| | | [key: string]: any |
| | | }>({ |
| | | name: '弹窗', |
| | | props: { |
| | | modelValue: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | title: { |
| | | type: String, |
| | | default: '', |
| | | }, |
| | | row: { |
| | | type: Object, |
| | | }, |
| | | sort: { |
| | | type: Number, |
| | | default: 0, |
| | | }, |
| | | }, |
| | | emits: ['update:modelValue', 'close', 'submit', 'confirm'], |
| | | setup(props: Record<string, any>, ctx: SetupContext) { |
| | | const { |
| | | onClose, |
| | | onConfirm, |
| | | onOpen, |
| | | formRef, |
| | | visible, |
| | | formItems, |
| | | formData, |
| | | } = useWmsTaskDrawer(props, ctx) |
| | | return () => ( |
| | | <BaseDrawer |
| | | class={styles.drawer} |
| | | size="800px" |
| | | title={props.title || '添加'} |
| | | v-model={visible.value} |
| | | close-on-click-modal={true} |
| | | onConfirm={onConfirm} |
| | | onOpen={onOpen} |
| | | before-close={onClose} |
| | | onClose={onClose} |
| | | > |
| | | <DyForm |
| | | ref={formRef} |
| | | formData={formData.value} |
| | | labelWidth="106px" |
| | | formItemProps={formItems} |
| | | ></DyForm> |
| | | </BaseDrawer> |
| | | ) |
| | | }, |
| | | }) |
| | | import { SetupContext, defineComponent } from 'vue' |
| | | import BaseDrawer from '@/components/BaseDrawer/BaseDrawer' |
| | | import styles from './WmsTaskDrawer.module.scss' |
| | | import { useWmsTaskDrawer } from '../../../../Controllers/WmsTaskDrawer.tsx' |
| | | import DyForm from '@/components/DyForm/DyForm' |
| | | |
| | | // @ts-ignore |
| | | export default defineComponent<{ |
| | | [key: string]: any |
| | | }>({ |
| | | name: '弹窗', |
| | | props: { |
| | | modelValue: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | title: { |
| | | type: String, |
| | | default: '', |
| | | }, |
| | | row: { |
| | | type: Object, |
| | | }, |
| | | sort: { |
| | | type: Number, |
| | | default: 0, |
| | | }, |
| | | }, |
| | | emits: ['update:modelValue', 'close', 'submit', 'confirm'], |
| | | setup(props: Record<string, any>, ctx: SetupContext) { |
| | | const { |
| | | onClose, |
| | | onConfirm, |
| | | onOpen, |
| | | formRef, |
| | | visible, |
| | | formItems, |
| | | formData, |
| | | } = useWmsTaskDrawer(props, ctx) |
| | | return () => ( |
| | | <BaseDrawer |
| | | class={styles.drawer} |
| | | size="800px" |
| | | title={props.title || '添加'} |
| | | v-model={visible.value} |
| | | close-on-click-modal={true} |
| | | onConfirm={onConfirm} |
| | | onOpen={onOpen} |
| | | before-close={onClose} |
| | | onClose={onClose} |
| | | > |
| | | <DyForm |
| | | ref={formRef} |
| | | formData={formData.value} |
| | | labelWidth="150px" |
| | | formItemProps={formItems} |
| | | ></DyForm> |
| | | </BaseDrawer> |
| | | ) |
| | | }, |
| | | }) |
| | |
| | | /* |
| | | * 物料基础信息查询弹出框 |
| | | */ |
| | | import { SetupContext, defineComponent } from 'vue' |
| | | import BaseQueryDrawer from '@/components/BaseQueryDrawer/BaseQueryDrawer' |
| | | import styles from './WmsTaskQueryDrawer.module.scss' |
| | | import { useWmsTaskQueryDrawer } from '../../../../Controllers/WmsTaskQueryDrawer.tsx' |
| | | import DyForm from '@/components/DyForm/DyForm' |
| | | |
| | | // @ts-ignore |
| | | export default defineComponent<{ |
| | | [key: string]: any |
| | | }>({ |
| | | name: '弹窗', |
| | | props: { |
| | | //枚举类型字典 |
| | | enumListDict:{ |
| | | type: Array as () => Array<{ key: string; value: object }>, // 定义数组元素类型 |
| | | default: () => [] // 默认值 |
| | | }, |
| | | modelValue: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | title: { |
| | | type: String, |
| | | default: '', |
| | | }, |
| | | row: { |
| | | type: Object, |
| | | }, |
| | | sort: { |
| | | type: Number, |
| | | default: 0, |
| | | }, |
| | | }, |
| | | emits: ['update:modelValue', 'close', 'submit', 'confirmquery1'], |
| | | setup(props: Record<string, any>, ctx: SetupContext) { |
| | | const { |
| | | onClose, |
| | | onConfirmQuery, |
| | | onOpen, |
| | | onReset, |
| | | formRef, |
| | | visible, |
| | | formItems, |
| | | formData, |
| | | } = useWmsTaskQueryDrawer(props, ctx) |
| | | return () => ( |
| | | <BaseQueryDrawer |
| | | class={styles.drawer} |
| | | size="800px" |
| | | title={props.title || '高级查询'} |
| | | v-model={visible.value} |
| | | close-on-click-modal={true} |
| | | onReset={onReset} |
| | | onConfirmQueryForBase={onConfirmQuery} |
| | | onOpen={onOpen} |
| | | before-close={onClose} |
| | | onClose={onClose} |
| | | > |
| | | <DyForm |
| | | ref={formRef} |
| | | formData={formData.value} |
| | | labelWidth="106px" |
| | | formItemProps={formItems} |
| | | ></DyForm> |
| | | </BaseQueryDrawer> |
| | | ) |
| | | }, |
| | | }) |
| | | /* |
| | | * 物料基础信息查询弹出框 |
| | | */ |
| | | import { SetupContext, defineComponent } from 'vue' |
| | | import BaseQueryDrawer from '@/components/BaseQueryDrawer/BaseQueryDrawer' |
| | | import styles from './WmsTaskQueryDrawer.module.scss' |
| | | import { useWmsTaskQueryDrawer } from '../../../../Controllers/WmsTaskQueryDrawer.tsx' |
| | | import DyForm from '@/components/DyForm/DyForm' |
| | | |
| | | // @ts-ignore |
| | | export default defineComponent<{ |
| | | [key: string]: any |
| | | }>({ |
| | | name: '弹窗', |
| | | props: { |
| | | //枚举类型字典 |
| | | enumListDict: { |
| | | type: Array as () => Array<{ key: string; value: object }>, // 定义数组元素类型 |
| | | default: () => [], // 默认值 |
| | | }, |
| | | modelValue: { |
| | | type: Boolean, |
| | | default: false, |
| | | }, |
| | | title: { |
| | | type: String, |
| | | default: '', |
| | | }, |
| | | row: { |
| | | type: Object, |
| | | }, |
| | | sort: { |
| | | type: Number, |
| | | default: 0, |
| | | }, |
| | | }, |
| | | emits: ['update:modelValue', 'close', 'submit', 'confirmquery1'], |
| | | setup(props: Record<string, any>, ctx: SetupContext) { |
| | | const { |
| | | onClose, |
| | | onConfirmQuery, |
| | | onOpen, |
| | | onReset, |
| | | formRef, |
| | | visible, |
| | | formItems, |
| | | formData, |
| | | } = useWmsTaskQueryDrawer(props, ctx) |
| | | return () => ( |
| | | <BaseQueryDrawer |
| | | class={styles.drawer} |
| | | size="800px" |
| | | title={props.title || '高级查询'} |
| | | v-model={visible.value} |
| | | close-on-click-modal={true} |
| | | onReset={onReset} |
| | | onConfirmQueryForBase={onConfirmQuery} |
| | | onOpen={onOpen} |
| | | before-close={onClose} |
| | | onClose={onClose} |
| | | > |
| | | <DyForm |
| | | ref={formRef} |
| | | formData={formData.value} |
| | | labelWidth="150px" |
| | | formItemProps={formItems} |
| | | ></DyForm> |
| | | </BaseQueryDrawer> |
| | | ) |
| | | }, |
| | | }) |
| | |
| | | title: '任务类型', |
| | | }, |
| | | { |
| | | field: 'sonTaskTypeDesc', |
| | | title: '子任务类型', |
| | | }, |
| | | { |
| | | field: 'taskStatusDesc', |
| | | title: '任务状态', |
| | | }, |
| | |
| | | // title: '堆垛机ID', |
| | | // }, |
| | | { |
| | | field: 'dodevicetype', |
| | | field: 'dodevicetypeDesc', |
| | | title: '设备类型', |
| | | }, |
| | | { |
| | | field: 'taskDodeviceStatus', |
| | | field: 'taskDodeviceStatusDesc', |
| | | title: '设备状态', |
| | | }, |
| | | { |
| | | field: 'isRead', |
| | | title: 'WCS可读取', |
| | | }, |
| | | { |
| | | field: 'sonTaskTypeDesc', |
| | | title: '子任务类型', |
| | | }, |
| | | { |
| | | field: 'sourceOrderNo', |
| | |
| | | { |
| | | field: 'creationTime', |
| | | title: '创建时间', |
| | | width: 180, |
| | | }, |
| | | ] |
| | |
| | | <el-divider direction="vertical" /> |
| | | |
| | | <el-divider direction="vertical" /> |
| | | <el-upload |
| | | {/* <el-upload |
| | | v-permission="wmsTask-import" |
| | | name="file" |
| | | accept=".xlsx,.xls,.csv" |
| | |
| | | action="/api/v1/HIAWms/wmsTask/import" |
| | | > |
| | | <IconButton icon="in">导入</IconButton> |
| | | </el-upload> |
| | | </el-upload> */} |
| | | |
| | | <IconButton |
| | | {/* <IconButton |
| | | v-permission="wmsTask-output" |
| | | icon="out" |
| | | onClick={handleExport} |
| | | > |
| | | 导出 |
| | | </IconButton> |
| | | </IconButton> */} |
| | | </div> |
| | | <ElFormItem style={{ marginTop: '15px' }}> |
| | | <ElFormItem label="关键字"> |